Well, first of all, I’ve been spending lots of time doing paperwork, and a few hours working on this: Olofson Consulting.
When it comes to actual game development, there have been some issues as well. Not exactly unexpected, but I’ve spent a little too much time trying to figure out how to actually use ZeeSpace for backgrounds. It is fast enough for realtime rendering, and at first, I intended to leverage that to do away with map size restrictions – that is, you’d be able to fly “forever” without wrapping or hitting some artificial limit. However, there are various problems with it, most importantly:
- You need to generate the background graphics incrementally, and unless you’re running rather low quality settings, this is expensive enough that distributing the work evenly enough across frames becomes tricky.
- To use the shadowcasting feature – which looks really nice, and is pretty much required to spot tall structures and mountain peaks – I need access to Z channel (ie height field) data way outside the area I’m actually rendering.
I have figured out various solutions, but obviously, this is pretty hairy stuff to get right, and certainly not something I can whip up in a day or two.
So, what I’m going to do for the alpha version is simply restricting the map size to some sensible size (slightly larger than the Kobo Deluxe maps, I think, as Kobo II won’t wrap) and simply pre-render the whole thing before starting the level! If you want native resolution backgrounds at 2560×1600, that’s almost a gigabyte of data – but if you can get by with 640×480, you “only” need 50 MB or so.
Obviously, there is a huge potential for compression here, for future releases. There is the obvious lowering the color depth and various graphics compression algorithms, but more interestingly, since all graphics is either generated (Perlin noise and the like) or structured (various primitives; surfaces, domes etc), there is a lot of potential for the compression algorithms taking hints from the structured data, rather than just looking at the raw pixels.
And, there is also the option of actually following the tile grid when placing map objects, to improve the chances of the compressor finding identical tiles. Chances of leveraging this can probably be improved if lighting data (shadows) is separated from the “raw” graphics, so that top-right corner of building 23 is always the same tile, regardless of whatever other tiles are casting shadows on it.
Given the nature of the graphics at this point (mostly monochrome surfaces with geometry + lighting doing most of the work), one might actually get away with trivially compressing many of the tiles to 8 bpp monochrome, with just a single RGB color per tile for “colorization”. One might even interpolate color across the surface of each tile, to support smooth chroma gradients with virtually no memory overhead.
Anyway, bed time…!