The bitmap graphics set is now ready for prototyping interior movement. This set is bland and featureless, but will suffice to check if actors are walking through doors or walls.
The house rooms are built around one template that features all possible paths, walls, doors, and windows. Each element is stored as one bitmap, so the shell of each room can be constructed by drawing the relevant bitmaps, mirroring where possible to save memory.
For development purposes, each bitmap is stored on a unique layer in a single image file. This allows rooms to be visualised by turning layers on and off, and when bitmaps need tweaks, a new script automates the preparation of exported layers for use by the virtual machine. The current net result is 2.5k of compressed data, which leaves space to give each room a touch of unique dressing later.
However, having drawn those flat graphics, which were designed to give the appearance of perspective, I may soon need to redraw them all. In short, when carefully considering how to cheat movement in perspective, I realised that it was easier to do it properly.
Properly, but with certain restrictions, the most important being that the screen plane is perpendicular to the ground plane, and parallel to the X, Y, or Z axis. This results in each projection reducing to a pair of line intersection calculations, and crucially for Z80 coding, with no floating point maths required. It's no good at all for a general-purpose 3D engine, and the effect is subtle rather than spectacular, but it is much simpler to build around one unified solution than a handful of hacks.
The short-term downside is that, although the flat graphics were drawn using single point perspective, integer maths means that there is unlikely to be a precise match for the focal point. The graphics are also designed with line slopes at integer ratios wherever possible, so there will inevitably be moderate cosmetic tuning by trial and error.
However, the navigation mesh can now be constructed mostly from a series of planes that translate to exactly the same world coordinate space, with very few special cases required, such as for the stairs between two floors. I'm now implementing a local coordinate system per room, which can then be mapped to a world coordinate system, linking them together.
Which is all fine in theory, but I am still several steps short of useful on-screen movement. The important part is that I know what those steps are now, even if it often turns out that they must be broken down to smaller steps once I really think about them. For example, drawing a line between two points on the ZX Spectrum at a reasonable speed is harder than projecting them to the screen in the first place.
The slow progress will also be sporadic for the next two months, because for now, nobody knows for certain if Digitiser Live and Chunky Fringe will be happening as planned. While Digitiser is often best when chaotic, technically-minded sideshows can be a touch on the injurious side when approached in the same manner.
The result is that, even assuming that we can gather in September, this game will almost certainly not be on display. I would prefer fun and comprehensible things to fill the limited exhibition space, and this game currently ticks neither box for 99.7% of Digitiser fans.
If you belong to the other 0.3%, and it should turn out that a physical event can proceed, then please let me know, because I will gladly oblige with a personal demonstration. Book soon to ensure disappointment!
Email: comments at arbitraryfiles.com