This Mini-LD hasn’t turned up as many entries so far as I expected, but given the challenge that it can be to program anything for some of these old platforms, I guess I can’t be too surprised. It actually makes me wonder how many people thought they were going to participate, and then just gave up along the way. I even hit one of those points myself.
My game started out as something different altogether. I had no idea what I was going to make before it started, I’d only practiced blitting some tiles on the screen and trying to get a feel for the VGA hardware. After the competition started, though, I got it into my head that I was going to do a Minecraft-ish style of game, since I make mods for the real Minecraft, and have even experimented with my own voxel engine. I could quickly envision what I had in mind, so I whipped up some simple graphics, and after a day or two I managed to have code together that could render tile-based cubes drawn in an oblique perspective.

Scrapped Mini-LD52 attempt
That mouse cursor you see could in fact click blocks and remove them from the grid, and the arrow keys panned all around. But, there were a couple of problems.
The first is the issue of depth. You can already see in that picture, particularly around the bottom left, how when you delete blocks from the front-most rows that they tend to bleed right into the rows farther behind. I tried to combat this by giving blocks a defined edge, but this actually didn’t help; it just made the perceived depth bleed together two rows apart instead of one.
The other problem was performance. Each cube is four tiles. The order that the tiles are drawn is also very important. You have to draw the grid from back to front, bottom to top. You can skip drawing tiles for blocks which have blocks around them, which does help performance. But the issue is what to do when you change the structure. If you delete just one block, then the entire thing has to be redrawn. I tried to think of ways to avoid this, like making special tiles to represent blocks beside one another with already-connected surfaces drawn on them, so that I could potentially only draw onto the screen the parts that were changed (maybe). But if I was to have multiple kinds of blocks, then I was going to need combination tiles of every possible combination. And even if I had tiles like that, it wouldn’t necessarily help at all if I were deleting blocks from deeper inside the structure.
In other words, deleting a block caused a noticeable hiccup until the grid drew back in, and I’m not really smart or patient enough to solve it!
Eventually I decided it just wasn’t practical. And it was more of just a gimmick than an actual game, since I could have never had sprites moving through the terrain without more problems of dealing with depth and redrawing, so I scrapped it. Which sucked, because suddenly I had no ideas.
On a side note, that mouse cursor is completely software-based. When running in unchained VGA mode 13h, the standard mouse cursor is all messed up, still expecting a non-planar video memory arrangement. So I’m having to capture what’s behind the cursor, draw it, then on the next frame, draw back the captured area to erase the cursor, capture the area of where the cursor moved to, then draw the cursor on the screen again. So much work and processing just for something simple that we take for granted today!
And in case you’re wondering what I mean when I say “unchained” VGA, it basically means you’re tweaking registers in the card, turning VGA mode 13h (320x200x256) from a nice mode where video memory is one byte per pixel and linear into a more difficult to program mode where each byte is every fourth pixel, forcing you to switch between planes of video memory to write to the ones in between. But this allows you to access all of the card’s video memory for things like panning, scrolling, double-buffering, etc, as well as doing some tricks like fast blitting from the vram using the card’s latches.
I was going to write about how I did my final game, too, but perhaps I should save that for another post at this point!