Friday, January 11, 2019

Getting Clean


Hello everyone, I'd like to start this off by saying that I hate bugs. The minor ones—things like a screwy word from the parser or a graphical error—aren't much more than annoyances. The serious ones, however, draw forth some serious hate... mostly because just about any bug in the game is my fault, something I didn't catch. Of course I realize that some bugs require more play-testing to find than is realistically feasible for just a couple people, but I still feel bad about those too.

November, and December in particular, marked a point where a lot of systems that had previously been separate have been integrated with each other. There's more of this expected to take place over the next couple months, and then again later in 2019 as we start adding more secondary systems like drug withdrawal and prostitution. This integration process results in a lot of bugs, things where interfaces between systems aren't quite right, or where there are unexpected effects from things interacting together.

All told, it's pretty much expected to have these sorts of things happen when you're dealing with nearly 150,000 lines of code. Lines of code isn't a great metric, to be sure, but it is a somewhat convenient one for our purposes. Our 150K figure doesn't include all the logic and structure found in twee, either, it's only the TypeScript. As a comparison, the average cellphone game is about 50K lines of code.

When there's a lot of interaction between the system, and it's driven by player input, the number of scenarios that are possible start getting ridiculous. For the most part, things are working pretty well in AW, thanks in part to a lot of planning. What I didn't count on, however, is how Twine amps up the difficulty of finding and preventing bugs. A big part of this is a lack of support for automated inspection and testing. Twee files (.tw) are essentially a black-box to all of the tools that help make debugging easier.

TypeScript, for example, is great for helping to eliminate whole swaths of bugs, but it can't parse twee to make sure that macros are called in the right order, or that the possible arguments will always fall within allowed bounds. Even though Twee is an offshoot of HTML, none of the HTML existing HTML tools and linters seem to work with it.

Another problem is the lack of reference functionality in the IDE. When working in typescript, for example, if I type setup.t I get auto-completion options including setup.time, and when I type a period after that I see the different functions and variables available. When I get to setup.time.add( I see "minutes: number, [status: boolean]" telling me exactly what kind of argument to put in, and the result is I type "setup.time.add(10);" to move time forward 10 minutes. That's a really basic example, but none of that is available for Twee, meaning everything has to be remembered or referenced.

So, in a nutshell, it's been taking longer than expected to try and avert the bug apocalypse. 

There are still several little tidbits of code that need to go into the game to further connect things as well, which will likely mean some other bugs that can occur. The plan had been to simply work on those on the side while focusing on the larger things like the date system. Instead I think it's better to give that my undivided attention, as well as focusing on system stability and debugging. (For example, there  are some bugs that seem to occur only on slow systems, which likely indicates some issues with async functions.)

There is also a good amount of documentation that should be done, especially as we start opening things up for content submissions, writing contests, and mods. Finally, instructions are needed so that people can actually make mods.

We're already behind thanks to the bugsplosion in version 18, so at this point it would already be tight to fit the date system in properly for 0.19 without debugging. It makes sense to me to put that on hold temporarily and focus on the systemic issues... So that's what we're going to do. 

We'll also be continuing work on conversations, and some of the other things planned for the month, so version 19 won't be devoid of new stuff or anything like that. We've just got to focus a bit more on getting everything in order before we progress. :D

Let's do some pictures after that giant pile of words!


This is the kind of format I'm looking at for a lot of the documentation. I think that a Google Doc could also work... but that there are some advantages to a web page format.

Besty has been experimenting with a tool to help players create clothing mods, which I think is a pretty good idea. Basically it'd help take a lot of the questions out of making a mod, and help to make sure the mod file is formatted correctly.


This is the result of some experimentation I was doing with converting AW into a native executable instead of playing it in a browser. It works quite well, but there would still be details to hash out. I'm not looking to convert anytime soon, it's just something I'm keeping an eye on for the future. :D

Finally, we've been getting some of the old blog posts up in a readable format on the AW website. It's a bit hard to believe, but there turned out to be about 650 pages of blog posts, and that's on 8.5x11 paper with narrow margins. o.O  So far only the posts from 2018 have been formatted, but it's a start!

That's all for now, I hope you guys have a great weekend!

ThaumX

1 comment:

The Springtime Release v1.26

This summary is not available. Please click here to view the post.