As the title says, I think I am only one feature away from the game being completable… Or at least in theory, because there will inevitably be some unpredictable bugs. 🙂
This feature is item handling, which eluded implementation last week because dialogues took a bit more than I had hoped for. However, everything is set for it (and I primarily mean that item scripts should already run properly) and it shouldn’t be too hard. I hope to do this (and related bug fixes) in the next day or two so I can finish documenting stuff that I haven’t already before the pencils down.
A brief summary of the past week, without boring you all down in technicalities, is that dialogues should now work completely. This alone enabled many other features, like the whole intro animation working (bar palette fading for one of the effects), many subtle and not-so-subtle conditional effects that happen only during a dialogue with someone and so on. I also added correct item title placement, proper support for font colours (they’re working perfectly now), moving the dragon to the correct place when using/looking at items, running use scripts for rooms themselves (this is apparently needed at some points), support for exiting some rooms when ESC is pressed (used to stop the intro and some other places), changing the cursor when different objects are pointed at, etc. One other feature that I added, and that I feel has added a lot to playability, is the ability to click anywhere in the room with the engine then selecting the nearest walkable point and moving the dragon to it. This means you don’t have to go around hunting walking map pixels anymore.
There was also a pretty big redesign of the main loop which made it callable only two levels deep (the first level for the main interactivity, the second handling intermediate states like talking, waiting for an animation to end, etc.) This fixes many bugs which were able to crash the engine or put it in a strange, forbidden state. I also enabled evaluating small GPL math expressions which result in a single zero/non-zero value which are used in many places to check whether an object can be used, a dialogue option is available or similar. On top of all this, there were many bug fixes, as usual. 🙂
I think this covers the majority of the changes. My sleep pattern is totally borked right now (this happens to me over the summer with almost impeccable certainty) and I slept for almost sixteen hours today, trying to come to terms with sleep deprivation, so I anticipate a productive night of coding.