In late July, I got frustrated with the nonprogress of the overly ambitious retro game I had worked on previously. Instead, I chose a new, simpler concept: single-screen racing games in the vein of Super Sprint (Atari, 1986), Ivan "Ironman" Stewart's Super Off-Road (Leland Corporation, 1989) and Slicks'n'Slide (Timo & Juha Kauppinen, 1993). Here, for example, is Super Off-Road on Megadrive.
MSX didn't get a port of Super Sprint, which is a glaring omission. Codemasters' BMX Simulator (1986) and Jet Bike Simulator (1988) were similar, but there is room for a new entrant.
To keep things simple enough for the stupid that is yours truly, there are no weapons or nitros in the game. The main difference to the aforementioned titles is that the game uses mostly Newtonian physics: there are no brakes and to slow down, the ship needs to thrust in the opposite direction or hit another object. No gravity here at all.
To summarize the controls, it's left to rotate counter-clockwise, right to rotate clockwise and up to accelerate. Fire button is used only in menus.
Title screen and main menu.
Games of this type live and die by their multiplayer, so this supports simultaneous four-player multiplayer. Local only, except emulators can be used as if four players are playing on the same system. For multiplayer, the game can easily run a reasonably competent AI opponent, and that's a deliberately dumbed-down AI. (Truth be told, this would be more impressive if some opponents didn't start racing towards the side wall the moment the start signal sounds.)
The metagame is mostly from Super Mario Kart (Nintendo, 1992): there are three different vehicles to choose from exchanging acceleration for maneuverability, three speed classes and four cups with five tracks each. The big difference, though, is that there are no cups or tracks to unlock but all are available from the start.
There are two more tracks outside the cups, bringing the total to 22 tracks. Featurewise, the tracks are rather simple: beyond the regular walls that halve the momentum in one direction, there are only full-bounce walls, attraction strips and portals that join the left and right side of the tracks together. Outside of maybe Bump-Er and Chic Can being nearly only mirrored versions, the tracks are still suitably unique, I think. Even A-Field (short for Asteroid Field, because I thought eight characters is enough for any track name).
"Asteroid field", one of the more unique tracks in the game.
Technically, the game is aimed to run at 50 frames per second (because PAL). NTSC support is the laziest possible: just repeat every 6th frame.
The game doesn't have any music and only a few sound effects, mostly because I'm inept in that field. The graphics use the "hi-res" graphics mode, which still has colour clash problems, but they're limited to only 8-by-1 pixel rows rather than 8x8 pixel characters. There are four monochrome sprites displayed in total, which means the sprites will never disappear or flicker because of the four-per-scanline limitation. As it is, though, this also means there are no sparks or thruster flames.
Personally, I was surprised by how much the space required by the data exceeded the space required by the code. In total, the game doesn't fit in 16 kilobytes but takes a 32kB ROM image, half of the address space available without memory mappers (and the two remaining memory pages, each 16kB, are better left for RAM and BIOS).
The track data alone takes almost 16000 bytes, and all graphics data is just shy of 5000 bytes. What would be classified as "game logic code" amounts to only about 3300 bytes. The code and data for various menus take about half of that. In fact, the track data amounts to over half of the space used on the ROM, which still has 5400 bytes free. Of course, the track data taking that much only highlights how lacking the data compression I used there is. The data is mostly compressed with the Huffman code I wrote for my previous project, but it works here well enough to not need a more specialized compression method.
In the mid-race screenshot you may spot stars in the background and wall tiles that look a bit different from the others. Those are pseudorandomly placed alternative tiles; they are purely cosmetic and their placement is determined by reinterpreting the compressed level data as a sequence of "fixed random" numbers. This was inspired by the stories I've read of how Yar's Revenge (Howard Scott Warshaw/Atari, 1982) rendered the Neutral Zone.
Result screen after a single race.
Even a project of such meager scope utilized additional tools. For one, there's a Python script that converts PNG images to binary data that can be easily used on MSX; this helped a lot in finetuning the tilesets and in drawing the fancier images for winning cups plus the title screen. Another script converts levels in text format to a mostly compressed binary format to include on the ROM image as-is. And most importantly, one script has the game mechanics and the AI reimplemented so that it can be used to optimize the AI for each track separately over several days (on a desktop PC) with little human input.
The way the AI was made meant large limitations on the track design. The AI only checks which direction it is supposed to be flying towards at its position in the map and how fast, and then turns and/or thrusts according to that. This means crossings are out of the question, which is actually a very good thing. The ships aren't sufficiently maneuverable to make avoiding collisions easy, so there'd be little to do when getting struck from the side by an opponent in a crossing and being pushed to a wrong path.
But two months after starting the project, I was thoroughly fed up with the project and decided to call it done after a minimum number of changes was done (namely at least some human-made lap and race record). Sure, there would've been many more things to add (recalibrate AI difficulty, retune the vehicles, more tile sets, ...), but they can be patched in later if I ever get around to doing that. This is, after all, 2018 and getting an updated version means just downloading a zip file around 20kB in size.
Gameplay on the fastest speed class. Sorry for the low volume.
As before, you can try it out yourself for free by downloading the ROM and loading it up in an MSX emulator. You might want to choose PAL system for smoother framerates. If you end up trying it out, feel free to leave your opinion on the game in the comments.