Software Dreams


I've got a color reduction utility here, a visual novel engine here, and I occasionally occur on GitLab.

For a small reference to changing the Free Pascal console IDE's color scheme, see here.

PNG to Pi converter

Python script, source file must be 4bpp or 8bpp indexed image.

PNG to Apple Pie OZM converter

Python script, source file must be 4bpp indexed image with a width divisible by 8. OZM graphics are used in a few games, notably Sei Shoujo Sentai Lakers. There's also a related PNG to OLH converter script, used in Lakers 2, but in that game there are actually multiple OLH images concatenated in one, and their offsets and/or sizes appear to be hardcoded somewhere so it's quite hard to replace those images with modified versions.

I've documented these and other image formats here.

PNG to Elf old v2 PR6 converter

Python script, source file must be 4bpp indexed image with a width divisible by 8. This PR6 format was used in a few old Elf games.

PNG to DA1/GDT converter

Python script, source file must be 4bpp indexed image with a width divisible by 8. DA1 and GDT are the same exact format, just with a different file extension. These were used in some Himeya/C's Ware games.

PNG to MSV/ANM/SCR converter

Python script, source file must be an indexed image with a width divisible by 8. MSV, ANM, and SCR are all basically the same format, but there are 8 possible compression modes that it may use. This script doesn't support all of them, but enough to be interesting. These were used in all Silence games. There's also an SZH compression script. Most of these games wrap the compressed MSV etc image into a further-compressed SZH file.

PNG to VDF converter

Python script, source file must be 4bpp indexed image with a width divisible by 8. This supports plain VDF and the LZSS-compressed LDF subtype, and transparent MDF, but not ADF. Also, a HDF encoder. These were used in some Panda House (Cat's Pro, Melody) games.

Elf AI1/AI2 and AI5 MES script compiler/decompiler

Mester Python script for AI1/AI2;

Mester5 Python script for AI5. These allow easily modifying old Elf game scripts, mostly for replacing Japanese Shift-JIS with translated strings.

bin2iso 1.9d

A commandline tool for converting cue+bin files to iso images and wav files. Originally by Bob Doiron, but since he moved on, I've produced maintenance releases. Sources on Gitlab, prebuilt win32 binary here. (37376 bytes, sha256 4b341a8c7921f645c1c3f1851be2daa10f9acb103a4f8f93987f72fa84b2fdca)


Pascal port of FluidSynth headers, for adding MIDI support to your *nix program. Repository on gitlab.

Ultima IX widescreen hack tool

Origin/EA's Ultima: Ascension was a very shiny 3D game in 1999. It's still not half bad, but there are some technical issues that need fixing. One of those is how parts of the interface grow out of proportion when you play in a widescreen resolution.

This little tool will edit the game executable and save games to apply a new default field of view, which the game otherwise wouldn't let you change as freely. A wider field of view makes more of the game world visible at once, and in U9 also makes some interface elements a different size.

Interface example pics Game view example pics

In the above screenshots (click to view in full size!) you can see the same scene with three different FOV settings. From the top: 60 degrees, 90 degrees and 120 degrees. The game's default is 60, and you can see 120 already has significant lens distortion. Values much over 90 degrees may cause the game to grow increasingly unstable, as well - the renderer just can't keep up.

After using this tool to set a new default FOV, note that you can still use the in-game camera controls (Ctrl-Home and Ctrl-End to zoom in and out, Ctrl-Pageup and Ctrl-Pagedown to change the FOV) to make sure the camera is at a comfortable distance from your Avatar, while still benefiting from the properly-sized interface.

Download the tool here. (86kb)
The zip file contains the win32 executable, and the source code for Free Pascal.

Special thanks to the good people at the WSGF for the original hack, to WTF Dragon at the Ultima Codex for connecting people, to Sergorn for quality assurance, and to Iceblade of the premier U9 mod Forgotten World for clever allied reverse-engineering.

Vampire Hunter Girl

This is an engine demo for an interactive fiction game. You know, LOOK AROUND, OPEN DOOR, GET LAMP, PET VAMPIRE, EXPLODE CASTLE...

The full story would tell about the attempt of a young but determined girl to capture this reward. Armed with religious artifacts, sticks of wood, garlic, a refreshing drink, stylish clothing, and a handy handguide for beginning monster hunters, she is ready for some serious vampire bashing.

This particular version has 7 rooms to explore and over 60 mobjects to interact with. See if you can find the little brown imp who was traumatised by a previous vampire hunter. There's no real goal written in, but the game events and objects are all in easily editable text files.

You can change configuration options by editing the VAMPGIRL.INI file. Once in-game, type "HELP" for basic adventuring advice.

Vampire Hunter Girl win32 binary (56kb)
Vampire Hunter Girl FPC 3.0.2/win32 source (doesn't include the data files in the binary package)
MoonVideo console management system source code

MoonVideo mk.II

Simple is beautiful.

What does it do?

Although I made this long ago, MoonVideo still compiles fine with Free Pascal 3.0.2, for win32. It is useful for making something like console applications but with a little extra kick, such as roguelikes, interactive fiction, or other games focusing on feature content over eye candy.

MoonVideo FPC 3.0.2/win32 source
Usage instructions
Three font bitmaps


Need a quick hack to read data from MS Excel sheets? I did. The hack was not quick.

This program can read files saved by Excels 97, 2000, XP and 2003 with some success. It mostly skips formatting, and does no formula computations or even direct references to external files – it does, however, use the cached results of formulas and external references that Excel stores. To demonstrate its prowess, Excelsior can dump a loaded workbook's sheet data into very basic RTF-files.

The user interface is non-existent, but the code should be easily extendable and comes with some debug features. It used to compile fine with Free Pascal 2.2.0 and is freely usable for whatever you like, as far as I am concerned. OpenOffice.Org's commendable documentation efforts of the file format were heavily used in getting Excelsior to work.

Excelsior source code, for Free Pascal

MoonSynth v1

Who needs physical instrument modeling when you've got tried and true FM?

MoonSynth is a Win32 program that plays midi files or direct input from your non-musical keyboard. Instruments are synthesized using frequency modulation and to some degree amplitude modulation, although that requires a bit more work. Polyphony has a soft 32-channel limit, but could easily be increased. The user interface is crude and console-based, accepting only keyboard commands, but it's good enough for now.

If you've got anything close to a modern computer with Windows on it, this probably works without trouble. I've tested MoonSynth on 95, 98 and XP, and encountered no problems. Sound is played through DirectSound, so you'll need at least DirectX5 or maybe 7 to be installed. The program isn't properly optimised, but doesn't seem to require much processor power anyway.

Just download and run MOONSYN.EXE to start. If no errors occur, you'll be presented with the text-based interface. Play some sounds by pressing letters and numbers. Kill all playing sounds by pressing space. Type a question mark to load a midi file. Hit the asterisk * to play and stop, and use ESC to quit. However, be warned: all midi instruments use very simple settings so don't expect anything even approximating real instruments. Also, percussion is not implemented in this version.

The old source doesn't even compile anymore, but the binary should still work fine. In the future, I will definitely return to this project, since I'll be needing a sound system for my games and I still love FM as much as ever.

Revision 11 (21-May-2004)
MoonSynth executable
MoonSynth sourcecode, for Free Pascal


Unlike MoonSynth, MoonTracker is a 32-bit protected mode DOS-based module tracker and player that I wrote as a teenager; you can compose and play music with it. To run it on a modern system, you probably want to use DosBox.

It doesn't support any other module formats than MoonTracker's own, since there are so many better players out there. This is not much more than a curiosity, unless you're interested in figuring something out from the source code for a tracker project of your own.

The distinguishing feature of MoonTracker is being a dynamic player. You may remember that LucasArts used a dynamic SysEx-based MIDI music system in some of the best adventure games ever made, including Lechuck's Revenge and Fate of Atlantis. MoonTracker allows similar music manipulation, only with module-based music rather than midi.


Check the included MOONTRAK.TXT for more details.
Or check out a screenshot.
Last version is 1.0 (October 3rd, 2001)
MTRAK10.ZIP (113kb)

Included in the archive are MoonPlayer for playing MoonSoundModules and MakeMSX, a utility to pack several MSM's into one file.

Here's a little something else you can play with...
A sucky dynamic transition demonstration (139kb)
Mimu Muzak 5 and a few other tunes (297kb)

Before you start the program, scan through the configuration file and adjust the settings (mainly IRQ+DMA) to work on your computer. Hit F1 for a help screen if you've never used a tracker before. Any IT users should be right at home, except there's no mouse support.