I saw “2 years ago” on my GitHub repo, and was immediately overwhelmed with a deep, stinging wave of dread and self-loathing.
It’s almost enough to make me start this post with a public apology.
Almost.
I’ve been going through it. I think a lot of us have, so I suspect that the timestamp on my engine’s repo is something that many of you will understand.
I’ve been learning a lot of things, too, mostly about who I am, but also how to maintain boundaries, and how cool test-driven software development is.
I’ve also had two years to wonder what the hell I’m doing, exactly, with this engine. There were a few months where I was deeply considering making a grotesque mess from what used to be SugarCube, but the more I thought about what load-bearing beams would need to go to make room, the more I realized I was looking at the TADS problem all over again: Sometimes more effort is spent ripping stuff out and putting new stuff in, than is spent just starting from scratch.
With all of this thinking and pondering, I’ve come to realize that I fundamentally misunderstood what kind of game development would be easiest for me. I was making a toolkit around a misunderstanding of myself.
The idea of starting over fills me with enough terror and anger to drive me into content-warning territory, so I made sure that if it really came to that, then I had a really good reason for it, and a really clear plan for how to recover from it.
Stage Zero
I had a grand idea for a really neat kind of user interface, but I held a few pockets of ignorance for the true power of semantic HTML and certain screen reader abilities.
Long story short: The new interface is going to be an order of magnitude easier to implement, and will work almost an order of magnitude better.
I’m also foregoing audio for now. I’m also foregoing CLI interfaces for now. However, I intend to leave little maintenance spaces for these features to be added on later.
But I think it’s safe to say that people here prefer to enjoy the text, and not whatever music and environmental sounds I toss in.
Stage One
Let me introduce you to the spine and sinew of the 2026 engine revamp: The humble BoolTree.
At its heart, IF-Octane will search an internal tree to poll for data that will coalesce into the next player turn. Something I leaned on a lot in the Unity3D engine was the idea that everything could be optionally turned off. If you want to suspend some functionality for a moment, just press its off-switch. If an object needed to temporarily cease to exist, just turn it off. Etcetera, etcetera.
The BoolTree is the extreme conclusion of this. Instead of just on and off, you have object references to clusters of boolean rules, formed by other object references. Much like referring to rules by name in Inform 7, I’ll be able to keep a reference of a few of these switches, and flip them on and off, and their effects will cascade forward – potentially several layers – before finally contributing to a wide number of on-off switches across a number of functions and world model items.
This creates the flexibility and precision to either make massive, sweeping changes to how the game fundamentally works, or simply remove a cup from a room.
This single object type will be driving 90% of the engine’s dynamics.
Next Stage
I don’t think I’m gonna maintain a full devlog here, but I feel very confident about building this engine around the BoolTree.
It’s a good foundation, and I think it’s worthy of starting over, shudders notwithstanding.
I think I’m feeling kinda excited again.
That is all.