In September of 2002, while undertaking to learn C++, I started working on a little game.
The game was never finished, but here's the story of its progress in development from 2002 to 2003, as told through contemporary screenshots, changelogs, and bug reports.
Having played around with it some in earlier times, I took to learning C++ in earnest in 2002. As part of that effort, I started working on a little console-based space strategy game where you could build ships, do battle, etc.
"In the game, the player will manage a planet. Some ideas have been taken from Planetarion. The player will build ships, research new technologies, attack other planets, gather resources, and things that you will usually find in a strategy game."
―The game's design document, 2002
By November of 2002, I'd progressed to learning graphics programming with OpenGL, and the game followed me there. It was no longer a simple console application, but rather something rendered in OpenGL, with a custom GUI and all.
|CPU||AMD Athlon XP 2200+|
|GPU||NVIDIA GeForce2 Ti|
Visual C++ 6.0
Visual C++ .NET 2002
That's where this blog post picks up, tracing the game's development from November 2002 to its last days in September 2003. The information presented here is based on the copious trail of notes, design documents, bug reports, screenshots, and source code backups I produced while working on the game.
This is the first month I have reliable records for, although I'd already been working on the game for some months at this point.
The code for loading TGA files came from the book OpenGL Game Programming (Hawkins & Astle 2002). The game would use TGA images for textures throughout its development.
"The camera is jerky when moving diagonally, and it feels a bit sluggish when moving around fast. Mess around with the way the mouse buffer is checked in input.cpp."
FIX: "Changed from using a buffer to checking the data straight away."
"Crashes when trying to print characters which are not in the display list of text.cpp. Add a check for this and stop if it can't print."
"The GUI button 'Proceed' disappears if you click it until the message queue is full."
"There's a memory leak somewhere in the message box code: if there's a message box on the screen and the user quits the program (esc), something doesn't get properly deleted. Just fire up the debugger and see where the leak is."
I can't remember why I decided not to use Python here, but even to this day I keep away from it.
"The game seems to think that one of the mouse buttons is down if the window loses focus and gets it back again. It'll be 'jammed' until you press any of the mouse buttons."
"For some reason the message box text doesn't scroll smoothly anymore when you drag the mouse over it... I have no idea why it does this, as it scrolls smoothly when you use the keyboard to scroll it up and down."
"If you, for example, order one batch of ships now (with one year as the developement time), increase the time by one year, order another batch of ships and then advance the time again, the game deletes the wrong list, i.e. the one you ordered after the first. Then the first order is never processed because it's one year behind."
FIX: "Bad code: if (order = SOhead). Should have been if (order == SOhead)."
"When a message box is up, moving the mouse cursor over clickable text makes the cursor movement jerky. I remember having this kind of problem earlier in the developement, but I can't remember how I fixed it."
I think the original intended use for this was for exploring a planet's surface.
For NPCs to navigate to a desired location while avoiding obstacles.
For a future inventory system, which was never implemented.
My copy of Visual C++ .NET 2002 was the cheaper Standard one, with a non-optimizing compiler.
With the new RPG-style view, the game began moving away from space strategying and toward RPGs, with quests, NPC interaction, etc.
"If you press Q, close the window, press W and close the window, the game crashes: 'Debug Error! Damage after normal block (#12957)'. Same thing if you press Q, close the window, press A, close the window (press 1-5): 'Debug assertion failed!' or 'memory could not be read/written' depending on what numerical buttons you press."
"If the game is started to full-screen and it's running really slowly, it doesn't acquire the mouse and keyboard, so they don't work in-game."
"There is a small rectangular part at the top of the screen in the rightmost corner that flickers. Just draw something like a white quad over it and it is clearly visible."
WORKAROUND: "Seems like the flicker only occurs when the FPS is high. Seems like at least 900–2000 is too fast, but 85 seems to get rid of the problem."
This map editor ended up not seeing much use or development. The maps were instead drawn as tilemap images in an external paint program – a blue pixel would be a water tile, a green pixel a grass tile, etc.
"These things are huge and they eat around 27 MB of memory when loaded."
―The game's changelog notes
It used to be that the overhead view had no scrolling, just loading up the next screenful of tiles when you got to the edge. But now the view would scroll smoothly, centered on your character, as you moved around.
The idea was that an NPC would carry a semantic network of its acquired knowledge, and would be able to respond to free-form comments from the player.
The world map now consisted of the base layer, which displayed ground tiles, and the decal layer, which could display things like trees and flowers.
"The shadow of a tile doesn't fill the area it's supposed to completely if it falls through the right and lower sides."
"When you start the game at some other location than 1, 1, there's a chance that the game will crash at some point. X 545 Y 436 is one such location."
"There appear to be some 'wonky' tiles around the map... Or at least their values like ID, location, texture etc. seem to be off."
Trees over flowers, for example.
The game so far had used its own custom file format for storing assets, but this was a move toward the more standard ZIP file for that purpose.
Lua scripts were used to parse messages sent to an NPC to decide their response.
|FPS||Toggles the FPS display on/off.|
|TILEINFO||Toggles on/off the metadata shown when the cursor is hovered over a tile.|
|TELEP Y X||Teleports to the given XY tile coordinates.|
|CONSOLE||Toggles the in-game console on/off.|
"Got a simple system for making snow appear on the ground. Should be rather easy to make it disappear (melt) by itself too. The way I do it, is this: I generate a texture with white pixels in random locations. The rest of the pixels are transparent. I then draw the texture over and over again so that it fills the space I want. Then, when I want to add snow, I just edit the texture data, add a few white pixels, delete the old texture and replace its place with the new texture. It's pretty fast, and it doesn't get slower the more snow pixels you add; like it would if you had them as separate quads, points or whatever."
―The game's changelog notes
Particle emitters could now move. There was also preparation for making particle effects scriptable using Lua.
This would modulate the lightness value of each tile, allowing e.g. certain parts of the map to be darker. But the light values couldn't be adjusted dynamically.
To supplement the static ambient light layer.
"When the window loses the focus, the movement timer keeps on going, and so when it regains the focus, everything goes fast for a short time. For example the characters move a long distance in a very short amount of time."
There are no more changelog entries, screenshots, bug reports, or source code backups after August 2003. Although I could swear the game had further development, I can't be certain anymore.
A new backstory was drafted, though:
At this point, the game was set to become more or less a walking simulator, but development faded towards the end of the year as I moved on to different projects.