Build 4 - More stability!
Build 4 Changes
This patch will break your existing savegames. Sorry.
Note: I recommend using Itch's app to keep updated. That way, you only have to download a small
delta patch rather than re-downloading the whole thing.
Build 4 is another stability round. Testing on other people's computers has found a number of issues
that plague the base setup, so the aim is to alleviate these pain points.
The Problem with Strings
UE4 handles strings through FString and FText. It's a little allocation happy, and the built-in garbage collector (which, in my opinion, is the worst thing UE4 could have implemented; modern C++ makes it pretty easy to not have memory problems) has a habit of causing problems with them. The majority of crash reports from the last build involved an invocation that passed strings around; this is partly my fault - I've been a bit lazy and used strings a lot (as an easy way to integrate with Lua). So a big focus of this build has been removing the string passing and using ID numbers (that reference a stable data store). This is a win in terms of performance as well as allocation/stability. Save games have shrunk a lot, too.
This is a tough set of changes to make - it touches a big part of the code base. Fortunately, things are well-enough structured to make it manageable. It has the downside that finding logical bugs is harder when you see 12 instead of "Unarmed Combat" in the debugger - but the benefits have thus far outweighed that small cost.
The skill holder no longer stores names, it stores an ID #. This means that if you edit the raws, your save game is no longer valid (which is probably true anyway). ALL functions that use skills also now refer to the ID #. This cuts down on a HUGE number of allocations/string passing functions. It has the nice side-effect of making things fit in cache better and reducing memory load as a whole. (I tacked skills first because skill-related things are EVERYWHERE! 62 files, 900+ changes! I've seen a 1Gb reduction in memory usage over time in debugging mode. UE4 sure likes to keep strings until Malloc starts to fail...)
- Particle requests are queued and played together as part of the tick sequence, rather than whenever the message
happens to arrive. That fixes some more UE4 concurrency problems. It's working so well that I'm gradually
switching all of the requests in that pattern to an "enqueue and process together in a known thread" model.
- Fixed an issue that sometimes made the river level exit not spawn properly.
- Fixed a crash with NPC tooltips being garbage collected for no good reason.
This made a BIG difference in overall stability in my testing - I hope it does for you, too. The next update will include the much-requested resolution changing support.
Get One Knight in the Dungeon
Leave a comment
Log in with itch.io to leave a comment.