Posted on: 2021-11-26 19:54:39.000
I'd like to tell you a story about the most obscure video game ever made. Only one person in the world has ever played it, and until now, only one person in the world has ever even seen it or heard about it. It's a game called Balablox, from 1987, and it ran on one of the most obscure computers ever, the Heathkit H-89. This one, in fact:
I got this computer in 1979, when I was 7, and started making games in Microsoft BASIC. By 1987 I was 15, and eagerly awaiting my new Packard Bell PC/XT clone. But before I entered the PC age, I finished one final game on the Heathkit. It was loosely based on the short film "Balablok", from the Canadian National Film Board or NFB. Here's the loading screen:
You play a small square creature, running and jumping to get the key and escape each level, while being assaulted by monsters. It's a bit like Lode Runner, but the monsters have special attacks. Here's the first level:
The game is slow (interpreted BASIC on a 2MHz Z80!) and hard, but you can beat all 15 levels. The H-89 buffers keystrokes, so you can hit left while falling from a jump and then hit space bar, and you will jump to the left once you hit the ground. Here, you're crossing a zipline.
The game has a level editor, so anyone can make new levels. Of course, being 15, I had to include the Starship Enterprise. This is level 7. The key is on the front deflector dish. The diamond gives you the power to shoot up, destructively.
Here, in level 8, a spider guards the entrance to the bottom lair. The spider web will stop your movement for a time, and other creatures might eat you. There are eight "invaders" in the middle, but only one will move. If you touch any of them, you die.
Level 9 is the first really difficult "gating" level. You can't get to the key right away. You have to hope that the nastie shoots a fireball, clearing other level blocks and (temporarily) enemies so you can run to the right and jump up. But the blocker might block your path.
I couldn't get past this level in 2021, but at least I got a high score. Note the hilarious high score entries from 1987.
Let's look at the source code. DEFINT A-Z makes all variables integers, vital to get enough speed when running in interpreted BASIC. The command RANDOMIZE(PEEK(11)) seeds the randomizer with a bit from the system clock. All graphics are character graphics, since that's all the Heathkit supports. They are stored as strings. The map is a 20x12 grid (the screen is 80x24, and each block is 4x2). X$=INKEY$ reads the keyboard.
The main game loop reads the keyboard and sets walking directions, updates enemies, webs, fireballs, plays a bell (CHR$(7)) when you hit a coin, and checks if you have finished the level. My uncle taught me about main game loops. They still exist today!
Here I'm assigning all the graphic elements. The H-89's character graphics required entering a special mode using an escape sequence, which changed all the lowercase letters into symbols. DL$ is a string for down 1 and left 4 chars. Updating the screen is just a matter of printing strings, which makes it fast enough (barely) to have an action game using interpreted BASIC.
Here I'm checking if the character is able to move in a given direction, or jump.
Line 5000 updates the status screen on the 25th line. The emulator has a bug that scrolls the screen when you print anything on this line, but I patched the game (34 years later!) to work around it by adding a ; to the end of line 5020.
Monsters have a 50% chance to do their special move and a 50% chance to move towards the player instead of randomly. I did zero tweaking for this. It just seemed to work.
The game came with a level editor, which is happening at line 8000. Cheeky 15 year-old agnostic me is having fun with the comments.
Line 9000 and on is computer-generated code, from a program called SKETCH that let you make a screen out of character graphics and save it as BASIC source code. I used it here to make the loading screen. Another command imported it into my code. I miss SKETCH. It was awesome.
This code saves and loads level files and prints the main game menu, letting the player access the level editor or play any level directly.
The hall of fame or high score screen. ON ERROR GOTO will make a new high score table with two entries called "NAMELESS, JR" if one doesn't exist.
There's a simple nested loop sort routine to order the high score table. Not very efficient, but it gets the job done. And that's the end of the code!
Apparently I started on a sequel, SUPER BALABLOX...
It starts off with you falling in a deep pit, with all your old enemies dead and buried!
And you end up facing an incredibly powerful dragon! And then the game just... ends. I never got any further. Never did beat that dragon. I started a couple of games on my new Packard Bell PC XT and the skeleton of one on my 386 (it had VGA!) but I never finished another game.
Life happened, things got busy, technology got more complicated. I was no longer between the ages of 7 and 15. Never would be again.
But you know what? Maybe I'll see if I can make a really simple fun game. Let's see what happens.Note: huge thanks go out to Mark Garlanger for his Heathkit H-89 emulator, which you can find at https://heathkit.garlanger.com/emulator/ Without this emulator, I could never have revisited my childhood. I still have my original H-89, but it died in 1990 and the company died as well. Mark recovered 95% of my old floppies!