← back to the game

INSIDE F.GODMOM

How the original program was taken apart and rebuilt for the web

THE DISKS

There were two shareware archives. fgodmom.zip holds version 3.0 (December 1991) and fgodmom4.zip holds version 4.0 (July 1992). Each one has a manual, an order form, a READ.ME and a single FGODMOM.EXE of about 95 KB. That executable is the whole game: the levels, every picture, the sounds and all the help text are inside it.

UNWRAPPING THE EXE

The executable starts with the signature LZ91, which means it was packed with LZEXE 0.91, a popular DOS-era compressor that unpacks itself in memory when the program runs. Writing a small unpacker turns the 95 KB file into the 194 KB program that actually ran.

The unpacked code shows it was written in Borland Turbo Pascal with Borland's BGI graphics library. The EGA/VGA, CGA and AT&T graphics drivers and the Gothic title font are all linked into the program. The code is organized in Pascal "units", and the startup code shows where the data segment begins. That segment holds everything worth extracting.

THE PICTURES

Every sprite is stored in the format of BGI's PutImage call: a width and height, then the pixel rows. EGA images use four bit-planes, one bit per pixel per plane. CGA images pack four pixels into each byte. Version 4.0 has a full set of 32×32 EGA tiles drawn by Tom Hall and Adrian Carmack of id Software, plus 16×16 tiles for CGA screens. Version 3.0 has John Blackwell's own artwork.

Version 4.0 fairy animation frames Version 4.0 tiles, items and crabs
Version 4.0: the fairy's walking, climbing, falling and wand frames, then brick, ladder, iron, penny, key, door, warp key, gold coin and the three crab colors.
Version 3.0 fairy animation frames Version 3.0 tiles, items and crabs
Version 3.0: the original 1991 graphics.
Level 6 drawn with the four-color CGA graphics
The same game on a CGA card: 320×200 in cyan, magenta and white. Switch to it from the menu.

A startup routine fills a table of image pointers, one per "object number". That table is the key to everything else: object 22 is a brick wall, 27 a ladder, 29 a penny, 19–21 are the crab's animation frames, and so on.

THE FIFTY LEVELS

All 51 screens (50 levels plus the special warp level #51) fit in just 4,361 bytes. Each screen is 19 tiles across and 9 tiles down. Each tile is a 4-bit code, and a small lookup table turns the code into an object number. The program stores the levels interleaved: for each column, for each row, the tile for every level in a row. That makes the raw bytes look like noise until you know the trick.

The warp level: fifty doors among iron ladders
Level #51, the warp level, with one door for every level. Doors for levels you have finished disappear.

THE RULES OF THE GAME

To play the same way the original did, the web version follows the original program's logic step by step. Some of what the disassembly showed:

SOUND

The PC-speaker effects come from Nels Anderson's "Sound Tools". Each effect is a list of (duration, frequency) pairs played from the timer interrupt, so they map directly onto Web Audio square waves. The "Dance of Joy" tune is 88 notes stored as frequency and millisecond pairs.

THINGS FOUND ALONG THE WAY

THE FIFTY EXTRA LEVELS

Registering at $10 or $20 got you a disk with EXTRASCR.FGM, "fifty extra levels for the game F.Godmom", which the game loads when started with the LNS option. That disk wasn't in these archives, but a copy of the registered game, bonus file included, was preserved on the Internet Archive in 2022.

The file starts with a page of text (a title and the registration address) ending in a DOS end-of-file mark. The game skips the first 1,243 bytes and reads 8,721 more: 51 screens of 171 bytes, one plain object number per tile, with no packing. That's fifty levels plus a warp level of their own. The hints were in the shareware EXE all along, as the second half of the hint routine. The registered EXE turned out to be the same program, with the same fifty built-in levels.

A few of the extra levels lean on quirks. The original never clears the door's position between levels, so #42, which has no door tile, gets its door from #41. That lands on a penny walled in by iron, which looks deliberate. Two levels can't be finished as preserved: #12 (the castle) has no key, and #37's borrowed door position is covered by an iron ladder. A warp key carried in from another level gets you past either one.

THE LEVEL EDITOR

The original editor writes FGSCREEN.DAT, which is the extra-levels file without the text header. The web editor reads and writes that same layout, so its files should also work with the DOS game in DOSBox (not yet tried). It also opens EXTRASCR.FGM. Levels you make are kept in your browser, can be play-tested straight away, and can be shared as a link: the level is packed into the address, two tiles per byte, so it needs no server.

WHAT'S DIFFERENT HERE