This article was originally posted on my blog where you can find many more like it.
You might be wondering what the glass of beer in the image above is all about, this a blog about game development right? Well specifically that is a glass of homebrew, something I began making around the same time I began work on Chuck Jones: Space Cop of the Future. Take a look at the list of projects for CJ: SCotF, notice how only one of them is labelled “Game”, well what are the other ones?
Well, when you make a game you need tools and in this case they need to be, just like the beer, home made. I figured I might go through all these tools and explain what they do and why I made them.
Those of you who follow me on Twitter or frequent the Vintage Computer Forum may already be aware of this one. It’s a tool to help me compose music for FM synth cards such as the Adlib and SoundBlaster by allowing a properly equipped DOS PC to behave as an external MIDI module, using the same sound engine as the game. This lets me make use of it’s FM synth capabilities in my modern sequencer so I can compose while hearing exactly what the final tune will sound like. This also allows me to use my MT32’s MIDI thru, send the module’s output into my mixer and be able to swap between FM and MT32 soundtracks just by adjusting a fader!
For those interested I have made this tool available for download.
Bytcode Assembler (aka BASM)
I’ve discussed this one in previous posts, but for those who are unfamiliar, it is the compiler (not assembler) for my custom scripting language. It is a command line tool that reads in text scripts and outputs binary byte-code to be interpreted by the game engine.
disBASM (Bytecode Dissasembler)
An example of a script and it’s disBASM output
This one is kinda cool, it mostly exists for the purpose of testing and debugging BASM and the interpreter. As you might imagine this program reads in a compiled script file and outputs a textual representation of the interpreter opcodes for it.
Using the in-game editor while modifying a script
This is a collection of Perl scripts that perform a few functions to make editing the game a bit easier, for example the allow me while running the in game editor in DosBox to press a key combination and have the Chuck Machine script file for the selected game object open in Notepad++ on Windows and then run BASM to recompile the script after editing, I can then Alt+Tab back into DosBox where the object will be reloaded and I can continue editing with the modified script. Needless to say, this can save a ton of time.
This little program is quite straightforward, it simply convert’s image files of various types into a custom .l4b file that is used by the game. These files are specially optimized for use in the game and are quite compact, utilizing the LZ4 compression algorithm. I’d like to thank Jim Leonard (trixter), for the idea for this one, as well as providing a fantastic well optimized decoding implementation, as it has cut the size of the game down considerably (great for a floppy disk release).
This tool is used for specifying animations for the engine. I went into a little detail about it last time, but the basic idea is that you create a list of frames and the tool spits out a binary .spr file which the engine uses to play animations.
I wrote this one for generating sysex commands for the MT32, I don’t really use it because I vastly overestimated the number of Sysex commands I would need to create. I ended up doing the entire thing in another tool (I think it was Midi-OX).
Well I hope I’ve given some insight into the less obvious bits about developing games. I’d like to thank everyone for reading, I’ve recently been getting quite a bit more traffic on this blog and I’m really glad that people are interested in the game and its development!
PS: For those of you who are noticing a lot of tech heavy posts, it’s because I sometimes have trouble coming up with creative post ideas. If anyone would like to, feel free to comment with suggestions for the next blog post or questions you’ve been wondering about and I’ll do my best to address them. If I get a lot of replies, perhaps I’ll do an FAQ.