Posted April 18, 2024 by The-Balthazar
#Hotfix #Update
This one might have just ended up as a minor release for just Steam, but there's a few other things in it and I wanted to maintain feature parity. Also I wanted to tell the story.
Okay, so the story: while V35 was briefly available on Steam, there was a bug where the game would immediately give you all but one achievements then crash. The why is kinda interesting, or at least I think it is; first what happened is the achievement sync function went through each achievement asked Steam if you already had it, the return value for which gives you two boolean values, one for "hello, yes you have reached API, and that is a real achievement", and a second for "yes, you have that achievement", due to a miscommunication between me and the documentation, I missed the memo that there were two return values, and interpreted "yes that is real" with "yes you have that", consequently having it try and give you all achievements. Try. Hence the all-but-one-then-crash. The second part of this was that the progress tracker function for the last achievement wasn't set up for being authoritatively told "give this achievement"; the function expected to be given an index number and to decide for itself if it should award it or not, but was instead given `true`, used that as a key in its data tracking table, and finally when the serializer came to save that, it crashed because something other than a number or string was used as a key. I could have said serializer gracefully handle that situation, but if that situation ever comes up then something has gone wrong and it really should throw an exception. Hence "Oops! All Achievements" followed by a crash.
Why didn't this come up in testing? Because the achievements hadn't been published at that time, so the return value on the get was a single false for "that's not a real thing". I was holding off on publishing them because I'd added them to the demo thinking I was in the main game, and I both wasn't sure if I could delete them after publishing, since not all of them are achievable on the demo, although you can get them on the main game then have it sync them back on the demo, and I didn't want to delete any before publishing because I wanted to see if there was an easy way to copy them to the main game. There wasn't.
Anyway, the actual changes:
Those last two are basically only important for modding support.
This has no real business being a part of the game, since I made it because I was bored and to torture test the button object code, but: