~/organiccode.net

work

Romjakten — a 1999 game, ported to Godot

wip

Porting my childhood favorite — a 1999 Norwegian educational space-strategy game — from Macromedia Director 6 to Godot, so it runs in any modern browser without a Windows 98 VM.

Godot 4 GDScript Python Reverse engineering Director 6
Romjakten title screen Play in browser

Web build runs entirely client-side via Godot's HTML5 export — no server-side processing.

Why

Being one of my favorite games growing up, Romjakten was a fun way of learning about space travel, physics and astronomy. This learning experience is something I would like to share with my own kids. But playing on a Windows 98 virtual machine is a drag.

About the original

Romjakten is the Norwegian localization of the Swedish Rymdjakten (“The Space Hunt”), released in 1999 by Monsterland Produktion AB and published in Norway by Levende Bøker / Kunnskapsforlaget. You play a national space program manager — building rockets, training astronauts, sending probes across the solar system to piece together a crashed alien craft. Originally built in Macromedia Director 6.

Additions

A handful of things modern players will expect that the 1999 version didn’t have:

  • Autosave — progress is written automatically, so you can close a browser tab mid-game and pick it up later.
  • Touch controls — the puzzle minigames get touch overlays on phones and tablets; the original was strictly mouse-driven.
  • Plays in any modern browser — no install, no VM. The whole reason for the port.
  • Fullscreen — toggleable at any time. The original was locked to an 800×600 window.
  • A few original bugs fixed — the Norwegian release had data quirks (the Uranus newspaper actually said “Saturn”, a research action had the wrong unlock requirement, and you could build the big rocket capsule before launching the small one and skip a milestone). Those are quietly patched.

What’s in the port

  • 7 autoloads (Lingo compatibility, game data, sound, sprites, interface)
  • Building system — 7 building subclasses (rocket, vehicle, astronaut, space station, ship, probe, research)
  • 6 puzzle minigames — moon lander, satellite communication, asteroid steering, orbits, aerobraking, alien decoder
  • Full launch system — per-rocket animations, flight simulation, crew workflow
  • Observatory — project overview, narrator, easter eggs, milestone flow
  • Space map — three zoom levels, planet interactions, orbital buildings, in-flight probes
  • Win/lose conditions — interstellar ship launch (win), alien power depletion (lose)
  • 24 automated tests with Python snapshots and Godot headless mode

Romjakten gameplay in Godot

The reverse engineering side

Most of the work isn’t in the engine port — it’s in pulling assets out of Director 6’s binary formats. The repo includes custom Python tooling for:

  • Bitmap extraction — 3,716 PNGs, recovered with the right palette and per-sprite transparency. Director uses a custom 256-color palette embedded in CLUT chunks, which I extract separately.
  • STXT text parsing — 103 JSON files containing all in-game strings and game data, parsed from Director’s text member format.
  • Audio extraction — 1,984 WAV files indexed by their original member name.
  • Smacker video conversion — 5 cutscenes converted from .smk to .ogv.

Along the way I found a handful of Director 6 format quirks that aren’t documented in ScummVM’s Director engine — notably the D5+ CASt field order (castType + castInfoSize + castDataSize, INFO first, DATA second), opposite of D4. These findings are preserved in the project’s scummvm-patches.diff for a potential upstream contribution.

Status

Nearly complete — the game is fully playable end-to-end. Remaining work is polish: a few edge-case animations, audio cue timing, and platform-specific input handling on Android (the original was a strict mouse-driven UI).