When I first found myself looking at the possibility of buying a computer (back in 1982/83) I had just seen the very first IBM PC that friends of mine bought. This was the very first IBM PC ever to hit the market. You might remember it. Well not long after the Vic 20 came out and then the Atari 800 and the Commodore 64. Of course the Apple II+ or the IIe were out as well and the Radio Shack Tandy Color Computer, and I had a choice to make.
I decided that the cheapest computer that would allow me to program Q*Bert in BASIC would be the one I would get.
The Apple IIs didn't have sprites, so that was out. The Color Computer had nothing LIKE hi-res graphics easily and quickly movable in BASIC, and the IBM was too expensive to even think about.
The Commodore 64 on the other hand had 4-color sprites which can be moved in BASIC quite quickly. It also had a cool character set that could create graphics on-screen without having to get into all that hi-res pixel moving that takes such time in BASIC. And I wasn't ready to learn Assembler. Also the 64 had amazing sound for the time. It had 16 colors and basically everything I needed to program a Q*Bert clone. Feature for feature it was certainly the best machine for me. It had all that I needed for what I planned to do. Ironically it wasn't for a few years that I decided to actually tackle the project.
The pretentious Xware was my trade mark at the time and after writing the game I released it into the Public Domain through my computer club at the time, The ACCA (Avalon Commodore Computer Association). The story of Xware has to do with my arcade-gaming history and my history at interior-designing a chain of arcades back in my home town and area.
Written entirely in BASIC, Boxxy gave you a little orange fella with hip sunglasses to manipulate around a screen that was an isomorphic view on a 3D-like series of boxes. Q*Bert showed the boxes directly edge-on:
But due to limitations in the Commodore 64 character set, Boxxy's playground was better rendered from an oblique angle. Because there were existing characters that could be combined to form a box on an angle.
I had the choice of creating each box as a floating diamond with 4 Commodore Characters, with no left or right shaded sides because any 8x8 block could only have one color and the background, which meant that if I did do edge-on boxes (diamonds) I coudn't render the sides of the boxes in another color. It didn't look as good without the box sides. Going isomorphic (viewed from an angle) using the Commodore Character Set to make boxes on an angle using six characters, looked the best.
|Here you see the 8x8 Commodore Character Set which could be used to place 2x2 edge-on diamonds in a matrix without box sides, or a 3x2 isomorphic area with box sides. I still had to sacrifice one box side, but the illusion worked, I think.|
|Here's what it would look like when colored properly. Remember that C64 pixels were also taller than wide, simulated here by stretching the graphic. The diamonds were too tall for my taste.|
Edge-on 2x2 character blocks look too tall
Isomorphic 3x2 character blocks allowed a more 3D solution, just at a slight angle.
My character had no legs, he bounced on a cushion of air. He also had those cool shades to distinguish himself.
He was called Boxxy for two obvious reasons. One, well, even though he's a sphere, he's a bit boxxy. And his job is to change the color of the tops of boxes.
He's really only a single C64 sprite, which in multicolor mode (with one alpha color or invisible pixel color) was 12 pixels wide by 21 pixels tall. (the 12 pixels across were really 24 pixel pairs, so while a single-colored C64 sprite could be 24x21 a multi-colored sprite was restricted to 12 double-wide pixels across by 21 single pixels tall.
The shadow under him was a second sprite which shrunk and grew as he hopped up and down, achieving a pretty good illusion of his space above the tiles.
Whenever Boxxy landed on a square he toggled the color. This means he had to do a lot of back-tracking to finish a level, but it was actually a fun game.
Boxxy had a teleport disk (like Q*Bert) which he could hop on to take him back to his start position. He could use this as many times as he wanted per level.
The teleportation disk
Every now and then a gray sphere would drop down and start undoing Boxxy's work. Each box-top the sphere landed on would revert to its original color. If the sphere landed on the teleportation disk, it would be trapped like a fly in honey. And no more enemies would drop down after that for that particular level. While he was going about his work, Boxxy would freeze. (This was because I really didn't know how to make two characters move around at the same time in BASIC. So I solved the problem by just allowing the enemy to move while he was on-screen. When he eventually fell off the level, he would drop off the bottom of the screen. His shadow was a part of the same sprite, so didn't do the illusion of shrinking and growing.
Gray sphere. A benign nuisance.
When Boxxy's more evil enemy came charging at him, he appropriately became very surprised and scared. Not only did he freeze in his place, but his glasses popped off his head and he gaped in fear, complete with sweat beads.
Even scared, Boxxy was a cool dude.
Sometimes the evil enemy would appear instead of the gray sphere. Bizarrely, I never came up with a name for the evil enemy, considering how much thought I put into Boxxy's moniker. Anyway, this guy would come down and also undo Boxxy's work, but he was much more dangerous, because if he landed on the square Boxxy was on, he'd pound Boxxy over and over until he plummeted through the board and he'd fall off-screen. When he landed, the screen would shake. A cool effect using the screen scrolling registers.
When Boxxy died, the teleportation disk goes over to the left-hand side of the screen and picks up a new Boxxy clone and brings him to the starting point again, and does this until there are no more Boxxy clones left and the game ends.
Boxxy's more evil enemy.
The evil enemy could, if he decided, just wander the board undoing Boxxy's work, and if he happened to find Boxxy, pound him. However, he could also randomly decide to actually hunt Boxxy. If that happened, he'd home in on Boxxy. If a hole appeared in his path, however, Boxxy would be safe and he'd fall through. Boxxy would then proceed in his work. If the enemy landed on the teleportation disk, he would get stuck there, and Boxxy would not be bothered any more that level.
Here, Boxxy is going about his duties when the Gray Sphere interferes, undoing his good work.
Here, the Evil Enemy is after Boxxy and is about to pounce!
Boxxy is played with a joystick, which works best if the joystick is rotated slightly to the left. Then left is down-and-left, right is up-and-right, and it just works.
Since it's programmed in BASIC, the joystick response was a bit laggy, so you had to kind of get into the feel of it, anticipating Boxxy's next bounce direction. Once you got used to it, it was quite fun. Take a wrong step, however, and Boxxy would plummet to his death.
But what made Boxxy stand out most?
I created a level editor. And I believe I created the very second game level editor that was part of the actual game. I got the idea from Lode Runner, a great game for the C64 which came with a level editor. No other game did this, and when I wrote Boxxy, as far as I know, no other game had done it yet. Lode Runner was the only one I knew of.
Look! A Level Editor!
My level editor begins by asking which level you wish to edit. Each level is stored on the disk as a SEQ file. It first asks you if you wish to edit the next level, that is, the current levels plus one, which means you'd be adding to the end of the levels that currently exist. Or you could type in a previous level and edit the existing level.
The screen clears and Boxxy and the teleport disk appear at the left. You get a red cursor which you moved by joystick. Clicking the joystick button toggled the box on or off. This way you could create simple or elaborate levels. Hit the letter "d" and the disk appears at the cursor point. Hit "b" and Boxxy appears. That defines Boxxy's starting point. You can put the disk out of reach if you don't want Boxxy to have a safe way to his starting point.
When you saved, the editor would search for isolated boxes and remove them. This worked only if there were individual stray boxes. I never figured out how to alert the user if the level was disconnected (meaning the level could not be finished.) Thesd days I know enough about coding that that would probably be easy.
Once done, you have a new level to play. The level editor showed the boxes in black and white, but during game play those colors are randomized.
Of course not every game is perfect, and Boxxy has a few bugs, mostly having to do with the editor, not the game itself.
The editor didn't restrict the screen space enough. perhaps not smartly, Boxxy characters actually test the color of the screen to find out if a block exists. If it's not gray, it's a block. This gets weird if you design your level too high up on the screen. You can jump from a valid colored box to one of the numbers on the screen, such as the Level or Time numbers. My bad. In my original Level 6, you could jump on the number, and that would completely make the game unplayable because it messed with the math. Once the enemies bounced on the number, it changed the total number of blocks by subtracing 1 from it meaning Boxxy could never finish the level. Not a huge issue if you're aware of it. If I had caught that bug, I would have made the editor restrict blocks from getting that high on the screen.
Also for some reason quitting the game at the end locks the computer up, at least on a VICE emulator.
I wish I had used one of the 8 sprites (the maximum number you can have on-screen at once) to place a small symbol on Boxxy's origin point. Since this is also a safe spot for Boxxy (if an enemy encounters him on the start square he isn't killed) it would have been nice to let users constantly see where the starting point is so he could plan better. Since the teleportation disk drops you there it's handy to know that. I could have used one less Boxxy replacement on the left and used that sprite for the starting position indicator. For that matter I could have used a slightly different Commodore Character there too, but that would have looked less nice.
I didn't allow for deleting levels. You can only edit existing levels or add to the levels. You can't delete levels. I wish I had changed that.
Also, the menu puts the Factory before the Game. Uh... that was just dumb.
If you would like Boxxy, Download this .d64 disk image which contains my BASIC games Boxxy, Stock Inc. and Piracy which will run on most C64 emulators.
As another intersting note, the week before my friend Keith sent me these programs from his archive disks, I created a T-Shirt based on Boxxy, recreated from memory (so it's not a perfect replica) and made it available from Cafe Press. If you'd like to buy one or check it out, please visit my store where you can get T-shirts of Boxxy in normal and scared modes. (There's no profit markup. I provide these at cost.)
I did this because of the increasing wave of nostalgia Boxxy was giving me. Add to that the fact that retro-graphics are in right now, I thought it would be nice to wear a shirt with arcade-like graphics from my own game.
If you don't buy this shirt, I'll pound this sprite into the ground!
(Yes, I know the graphic is not identical. I created this one out of memory. I'm revising it for a new shirt soon.)
On October 7, 2007, I was looking through some old files in storage when I came across a Commodore Reference Diary for 1985. It's something I bought in 1985 to keep track of my days, but it also featured some excellent reference information in the back, such as memory maps, that kind of thing. Very useful.
On flipping through the book I found the following entries:
Friday, June 14, 1985 - did work on BOXXY! (incidentally
it also says my parents sold the house the next day. The basement was my working
Thursday, June 20, 1985 - Worked on BOXXY!
Saturday, June 22, 1985 - finished BOXXY (Conceived Bubble Race) - Man, I wish I remembered what Bubble Race was...
Sunday, June 30 - Start PIRACY - Piracy is the text adventure I planned out the previous fall and winter in college
July 1, 1985 - Canada Day - PAID HOLIDAY! Worked on PIRACY!
July 27, 1985 - Finished PIRACY! Perfect! - Wow, what hubris. I'm willing to bet there were more than a few bugs... although now that I come to mention it, it was pretty bug-free.
Nice to have that memory of the time I was working on these. Development didn't take long, but I was working steadily in my small room in the basement.
All content of these pages © Sean Huxter.