It has been one hell of a release cycle. Seriously, hell. Switch to TypeScript, they said. It'll be great, they said. Actually, it is pretty good, but I underestimated the amount of learning I'd need to do to make it work with something as complex as AW. And the new syntax and work needed to make sure it compiles into something that works with SugarCube and Twine. Completing the pincer maneuver was SugarCube, and getting it to cooperate with the new data framework... So there were a plethora of frustrating "wtf?!" moments along the way.
The Big Three:
SugarCube is a format used with Twine, created by MadExile (who is awesome for putting so much effort into making something to let people create their own text games). This cycle I raped the hell out of it to get it to suit my purposes. Now there's about zero chance that "SugarCube-AW" could be used for another twine game, so I guess it's a new species or something. The main changes revolve around game saves, passage transition, and data structure. SugarCube comes with a State history system that is great for choose your own adventure games, but that wrecks data prototypes, methods, and classes, and that places a good deal of strain on performance depending on a game's complexity. My changes basically add all those fancy things back in so that they can be used reliably, and streamlines performance.
Number two is Accidental Woman's Data Structure. Previously, everything relating to the player character or NPCs was structured to work with SugarCube, and even with workarounds there were several inconveniences. NPCs and the PC have been essentially rebuilt from the ground up to fit into a standardized class object system. It's faster, it's easier to use, and you can do more with them. (Like now we can have NPCs running around everywhere without intricate schemes to make it possible!)It's easier and faster to work with, and it's easier to find problems. I'm looking forward to actually using the new setup soon.
TypeScript: the demonic pact to make your life so much easier... once you pay the hefty price for your side of the bargain. The price has been paid, so now I can take advantage of all those type sweetmeats. It was a ridiculous amount of work, far more than my "in case this is more work than I thought" time allowance. I feel weary. my dedicated AW laptop has started developing some quirky keyboard keys, and certain spots on my fingers feel like they're badly bruised. It turned out that while you can start using TypeScript without a lot of that upfront work... you lose nearly all the benefits of TypeScript, and all the benefits of most JavaScript development tools (like intellisense) as well. It's a neat trick to force you into properly doing a conversion!
The good news with the TypeScript is, that aside from more readable / usable code, and extra "documentation at gunpoint", it's also great for finding errors and bugs. I discovered several problems during the process, from minor things to big things. For example, a whole swath of the fertility system wasn't even working properly, but thanks to being soft-fail by design, it was never noticed/reported. There were plenty of things like that... things that weren't working as well as they should. And now they're fixed.
Of course, numbers one and two have added a whole slew of new bugs to be found...
Speaking of bugs... The most egregious are the ones related to SugarCube. Basically, how "behind the scenes" things are interacting, and different case scenarios.
The biggest delay came about because of the different ways SugarCube's parser/wikifier/pattern system interact, and the unique way in which SugarCube handles passage navigation in regard to game saves and data. I could try to explain the two issues... but I think it would a) be really hard, b) take forever, and c) be really fucking boring for everyone. (You can always come chat on discord if you're really curious though!)
There isn't much code that I didn't have my fingers in over the last two weeks. We're up to a total of 68,546 lines of code, over 10,000 more than the last release. It doesn't really make up for a lack of new content in this release, but it certainly shows that it wasn't because of a lack of effort!
Time Card:
A lot of work again, and most of it was the shitty boring kind of work. But, you have to take the good with the bad with these kinds of things. As usual, you can download the summary report and detail report if you you'd like :D
Change Log - Version 0.14.0
Words: 880,879 (only 2.8% of them are "fuck" or "cunt"!)
Lines of TypeScript: 68,546
Compatibility:
NONE. Seriously. Old saves and templates will crash your game, and you'll have to restart. Trust me, they don't work. Backward compatibility was killed by the whole new data structure and auto-backward-compatibility work so that we don't have to worry about this in future releases.
Known Issues:
There will be bugs, please report them. I didn't have any play test volunteers this time, but the level of fuckery was high anyway so it would have been hard to utilize.
- The sex scene system seems to be running slowly. Partially because of the contrast with the other game areas being so fast now, but also I suspect an area in need of optimization.
- Templates work, but they might be invalidated again in 14.5 or 15.0 if i didn't get the setup for auto-backward-compatibility right.
Things:
- Complete switch to TypeScript with exception of SugarCube source, libraries, and some minor files I have a reason not to convert (build process).
- Large shift to data framework, primarily to make other things possible.
- Dramatic improvement to game performance. Passage transition speed is now 20 to 40 times faster depending on the game area. Other code areas range from 3 to 12 times faster than before.
- This was tested on high-end machines, lower-end machines will see a larger improvement in performance.
- Game save system performance improved considerably, reducing save and load times by as much as 50%. Again, this will be likely be better on lower-end machines.
- Proper resource file loading, along with a visible loading progress bar.
- In order to ensure that all players can load assets without problems, the full image load occurs before moving to the start screen. While image load speeds haven't actually changed much at all, time spent on the loading screen is longer as a result.
- Complete (re)structuring of character data (PC & NPCs).
- Allows for more reliable and easier to code for data interactions.
- Removes the 5-10 active NPC limit entirely without impacting performance (overall performance considerably improved).
- Will allow for much faster processing of NPC changes/updates/mechanics on sleep and week-review loading screens.
- Serious amount of bugs killed, including some that prevented certain content/mechanics from working properly or working at all.
Still an amazing work!
ReplyDeleteThanks!
Delete