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.
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.
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.
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.
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.
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.
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.
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’.
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.
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.
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.
April 21, 2026. What the German Edition Revealed About Darklands’ Data, Tokens, and Runtime Structures.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
April 12, 2026. One flag breaks all trusted breakpoints. Staged launch isolation, native stepping and disassembly, transport recovery, and a rebuilt DOSBox-X binary.
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.
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.
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.
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.
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.
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.
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.
April 2, 2026, A major misidentification corrected: crt_fdopen != party_add_member. Character hot-slot array mapped at 0x9C00.
April 1, 2026, Dispatch table confirmed at the instruction level. Entity memory layout, RNG, LZW sprite pipeline, dynamic INT builder.
March 25, 2026, Phase 2 begins. State machine deep dive, character struct in memory, the 19 skills, save/load search strategy.
March 20, 2026, Community researchers documented Darklands file formats in the mid-2000s. We found it, verified it, built on it.
March 15, 2026, 382 of 388 functions named. RTLink overlays, Borland CRT, graphics pipeline, resource system, all mapped.
March 10, 2026, Darklands deserves better than a coma. The project, the toolchain, the Spice86 approach.