It felt like a good couple of months, and now there doesn't seem to have been much progress. I have massively underestimated how much work this would involve, but you knew that already, so onwards to the details and the architectural angst.
The text erasing is working. It is deliberately simple and fast, so live messages can't both overlap and disappear gracefully afterwards. It has also been thoroughly tested, to the point of uncovering a nasty mistake in a shared routine which translates cell coordinates to an offset within a linear video buffer.
There are now two types of text: labels, which are drawn and forgotten, and bubbles, which continue to exist on a timer. There is currently no concept of time within the virtual ZX Spectrum, but it's good to be prepared.
That was where incremental progression collided with a pending bundle of things comprising the game control loop. There is no loop yet: all the graphic routines are tested by one call list, without even a concept of playing screens.
Those screens, which I call "pages" in the tradition of teletext, will now be windows on a unified set of grids. The game world was originally going to be defined by pages alone, each containing one grid, but splitting those two concepts allows pages to be all over the place without confusing pathfinding.
This seemed important enough that I wrote a grid map compressor, taking longer than necessary when I skimped on the specification. The compression ratio could be greater, but more important is that the value at any one position can be obtained without decompressing the whole thing, and obtained fairly quickly, which matters for pathfinding.
I have never written a pathfinding routine.
Memory concerns also mean that, by using the line drawing technique, I plan to render the entire game world as a navigable wireframe before I think about drawing any more bitmaps. Movement also depends on time, and it feels time to build a page information parser skeleton, even if the only instruction is a call to render the grid wireframes.
It's not clear where to start coding next, which means that the design documents are lagging far behind. More obvious is one chunky library that needs breaking into coherent pieces. In all, it will be quite some time before I add new functions.
The result will be nothing worth putting on show at Block Party 2022, but the usual offer stands of a semi-private demonstration for those who want one.
Email: comments at arbitraryfiles.com