Skip to content

Devlogs

Session-by-session notes from the Darklands reverse engineering project. Each entry covers one or more analysis sessions, what the AI agent found, how it found it, and what it means for the eventual C# port.

Devlog #036 - The City Is a Menu Machine
June 17, 2026. City navigation is not a route table after all: it is one client of Darklands’ shared MSG menu machine, with owner routines, status rules, side effects, random gates, services, and clean C# execution boundaries.
Devlog #035 - City Navigation Is Becoming a Contract
June 4, 2026. The city is no longer a menu-shaped mystery: it is a state machine of owner routines, row-status producers, selected-row handlers, service boundaries, day/night routing, and explicit stop signs.
Devlog #034 - One Engine, Any Frontend
May 8, 2026. The restoration project now has a formal host interface: six contracts a frontend must implement, and a Core that does not care which one it is talking to. This is what makes research and implementation run in parallel.
Devlog #033 - The Long Game of Faithful Reimplementation
May 6, 2026. There is a faster way to build this. The project has chosen the slower one on purpose — and this devlog explains the disassemble-first discipline that keeps the ledger honest.
Devlog #032 - The Game Is Its Data
May 4, 2026. Every file format the original game touches is an implicit specification. Five of them decoded this month: the startup tile container, the event queue, location records, the save format, and the music cue system.
Devlog #031 - Building from the Inside Out
April 28, 2026. Darklands.Engine exists now. Not a remake, not an emulator: a host-neutral reconstruction of what the original game actually did, with every gap labeled and every confirmed fact backed by observation.
Devlog #030 - The Start Screen, Complete
April 27, 2026. The 2649 controller fully mapped: BIOS keyboard polling, confirmed Q/C/T dispatch, a fourth button that never fires in v483.07, eight bytes of sound config, and the voice that says ‘Welcome to Darklands’.
Devlog #029 - Digging Up Overlays
April 26, 2026. 137 overlay resolver records decoded from DARKLAND.EXE. A trace-bridge tool materializes live overlays in Ghidra. First major find: the party creation screen, command table confirmed against a real screenshot.
Devlog #028 - The PAN format, decoded.
April 24, 2026. OPENING8.PAN decoded byte-for-byte against live DOSBox playback. The model holds across all 15 PAN files and 2,068 frame records in the corpus.
Devlog #027 - How Darklands Builds Its Text
April 23, 2026. The $-token pipeline traced end to end: the recursive scanner, the pronoun grammar bundle, the template engine, and the Create New World screen owner at 0xD444.
Devlog #026 - What comparing the English and German editions actually bought us
April 21, 2026. What the German Edition Revealed About Darklands’ Data, Tokens, and Runtime Structures.
Devlog #025 - DARK: A Workbench for Darklands Data
April 20, 2026. All the format RE knowledge in one tool: DARK (Darklands Authoring & Resource Kit) lets you browse, inspect, and edit save games, enemies, cities, items, dialog trees, images, fonts, and archives.
Devlog #024 - The Intro's Hidden Layer
April 19, 2026. The animated birds and gargoyle in OPENING2 use a second pipeline: RTLink resolver dispatch mid-playback, reverse-walk 6-byte descriptors, and a live overlay dump of the intro scheduler’s state.
Devlog #023 - Mapping the Battleground
April 18, 2026. The BC archive decoded: 65 entries, seven combat tile families, the 33×33 IMAPS encounter grid, and a hidden string bank at EXE offset 0x17F670 that names every battle environment.
Devlog #022 - Inside the PAN Format
April 17, 2026. Darklands’ intro presentation format reverse engineered: DRLE compression, a confirmed blit bytecode grammar, a palette/fade pipeline, and the exact overlay family that plays it all.
Devlog #021 - The Boot Sequence Decoded
April 16, 2026. From blank screen to game: BANNER.DAT, CONFIG.DRK, sound driver selection, the memory check stage, mgraphic.exe, and COMMONSP.IMG — the full Darklands startup chain mapped.
Devlog #020 - The Sound of 1992
April 15, 2026. The .DGT audio format decoded: headerless unsigned 8-bit PCM, mono, 8000 Hz. One ffmpeg command away from a playable WAV. The opening sequence has audio again.
Devlog #019 - The Loader Unmasked
April 14, 2026. The Darklands runtime loader is fully characterised: not INT 3Fh, not appended MZ overlays, not standard RTLink — a custom segmented loader with resolver records, source descriptors, and chained dispatch.
Devlog #018 - Create New World: Full Coverage
April 13, 2026. The third and widest runtime dump closes the tail that used to escape the window. A full seven-anchor structure map now covers the function from entry guard to slot activation.
Devlog #017 - Tracing The Story Continues
April 11, 2026. Four overlay families identified on the load/save screen. The full Down Arrow navigation path decoded — none of it explained by the Create New World loader machinery.
Devlog #016 - The World Slot Machine
April 12, 2026. A wide runtime dump of the 1C85 overlay materialized the Create New World slot-commit function. Four-slot scan, a 24-byte template, and the same table bases as Add to Party.
Devlog #015 - The Party Writer Has Roommates
April 12, 2026. The add-to-party writer is one case in a large selector-dispatch worker with five confirmed cases. RTLink revalidates its stub window on every dispatch.
Devlog #014 - The Debugger Gets a Real Debugger
April 12, 2026. One flag breaks all trusted breakpoints. Staged launch isolation, native stepping and disassembly, transport recovery, and a rebuilt DOSBox-X binary.
Devlog #013 - Anatomy of the Custom Code Loader
April 10, 2026. Instruction-level tracing reveals a custom record-driven loader: two modes, a decoded 18-byte record format, and a fully verified relocation pass.
Devlog #012 - Catching the Party Writer in the Act
April 10, 2026. A wrong hypothesis, five empty breakpoint sessions, a new emulator backend, and the exact instruction that adds a character to the party, caught live in memory.
Devlog #011 - The Reverse-Engineering Lab Gets a Cockpit
April 6, 2026, Claude/Codex switching, artifact-driven handoffs, a guided DOSBox-X runtime cockpit, and a Codex coach that turns hybrid debugging into a repeatable workflow.
Devlog #010 - Reading the State Machine's Skeleton
April 4, 2026, The full 99-entry state dispatch table captured at runtime. 98 RTLink trampolines, one anomalous resident handler for the world map, and the protocol that made it possible.
Devlog #009 - BSS, Menus, and the Flag That Wasn't What We Thought
April 4, 2026, A misread global turns out to be the best static lead yet for the travelling-map state. Plus: BSS boundary confirmed and the menu system fully mapped.
Devlog #008 - The Runtime Side Starts to Click
April 3, 2026, The custom DOSBox-X workflow matures into a real collaboration layer: agent, emulator, and human pilot each doing what they do best.
Devlog #007 - A Pointer to the Character Data
April 2, 2026, Memory pool fully mapped, all status icon values decoded, and a far pointer found that may lead directly to the full character struct.
Devlog #006 - When the AI Catches Its Own Mistakes
April 2, 2026, A major misidentification corrected: crt_fdopen != party_add_member. Character hot-slot array mapped at 0x9C00.
Devlog #005 - Inside the Game Loop
April 1, 2026, Dispatch table confirmed at the instruction level. Entity memory layout, RNG, LZW sprite pipeline, dynamic INT builder.
Devlog #004 - Into the Game Logic
March 25, 2026, Phase 2 begins. State machine deep dive, character struct in memory, the 19 skills, save/load search strategy.
Devlog #003 - The Knowledge Base
March 20, 2026, Community researchers documented Darklands file formats in the mid-2000s. We found it, verified it, built on it.
Devlog #002 - Naming the Map
March 15, 2026, 382 of 388 functions named. RTLink overlays, Borland CRT, graphics pipeline, resource system, all mapped.
Devlog #001 - Why Are We Doing This?
March 10, 2026, Darklands deserves better than a coma. The project, the toolchain, the Spice86 approach.