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.
August 20, 2026. Darklands’ event system is a persistent 300-record scheduler governing delayed consequences, city conditions, temporary modifiers, quests, training, alchemy, recruitment, and maintenance callbacks.
August 20, 2026. Stable text identities, pre-layout message plans, and a separate display layout prepare Darklands for future translations without allowing localized wording or geometry to alter gameplay.
August 19, 2026. Darklands now has a permanent Classic presenter, resolution-independent SDL output, and a first Enhanced Faithful path combining restored 1920×1080 art with the original interactive UI.
August 17, 2026. High-resolution PIC prototypes preserve Darklands’ original watercolor compositions while exploring spring/summer, autumn, and winter variants.
August 17, 2026. Street of the Blacksmiths appears in only 32 of 92 city records, then selects a direct merchant or one of two larger street controllers.
August 16, 2026. Soldier’s Road is hidden by the ordinary owner, but a forced publication proves its cards, Arms Outfitter, two-hour cost, and return loop.
August 15, 2026. The wall route now reaches the original gate controller, while four authentic nighttime gate cards remain callerless in version 4.83.07.
August 13, 2026. Leaving a Goods Merchant can seed a persistent event, generate a person and places, and enter the ten-owner MCGUF12 job controller.
August 13, 2026. Two byte-confirmed merchant defects led to a versioned bug catalogue and explicit compatibility policies above the faithful COAB layer.
August 13, 2026. The Goods Merchant now has generated stock, exact prices, scrolling lists, selection, purchase, sale, barter targeting, and keyboard commands.
August 13, 2026. CHALL00, surrender, DUNGE00, and the priest visit now form an evidence-backed gameplay corridor with explicit combat and magistrate boundaries.
August 13, 2026. Boat travel now uses original fares, two ordered time advances, city-data replacement, arrival choices, and generic onward voyages.
August 12, 2026. Combat now has twenty-seven certified raw owners, and three new dependency closures have narrowed the next blocked parent without inventing gameplay semantics.
August 12, 2026. The complete placement corridor now preserves its sixteen-word mask, geometry chain, inherited stack state, exact RNG retries, and final battlefield writes.
August 11, 2026. Fifteen original combat procedures now execute as byte-certified raw C# owners, while the missing orchestration remains an explicit boundary.
August 11, 2026. The generic entry, three generation families, prepared 40×40 battlefield, placement search, and raw result protocol are now mapped from the original bytes.
August 9, 2026. Main Street and the side streets now execute their original optional entry cards, event guards, retained pictures, disabled rows, and redispatch paths.
August 9, 2026. The CITYT00 ambush now exercises real prayer, potions, arms, grovelling, fleeing, inventory loss, time, RNG, and explicit combat boundaries.
August 9, 2026. Hover-driven saint and potion popups, party-derived candidates, shared prayer, and character-sheet integration are reconstructed from the original owners.
August 6, 2026. Character sheets, saints, church services, marketplaces, and the council hall now emerge from certified original owners and real resources.
August 4, 2026. Main Street now branches into day and night streets, groves, markets, docks, churches, and returning city loops through the original state graph.
August 3, 2026. The shared owner-publication, layout, input, callback, action, and redispatch mechanism is now understood well enough to drive clean C# gameplay.
August 3, 2026. Darklays can now index current MSG evidence, match exact helper contracts, and promote ordinary selected paths without reopening known cones.
August 2, 2026. The complete 366-entry raw-state vector is now a research atlas linking states, wrappers, overlay records, owners, and certified transitions.
July 28, 2026. Quickstart now continues into a real city-navigation corridor that works across all 90 starting cities and reaches Main Street through the original game states.
July 28, 2026. Pressing Q now loads the original default party, chooses a starting city and time, presents the PARTY02 sequence, and reaches the first real decision.
July 28, 2026. The reconstructed engine now follows Darklands from its opening banner, through the complete synchronized introduction, to the real start screen.
July 19, 2026. One click in the city square now follows the original clock, row handler, state dispatcher, overlay resolver, city-north owner, and office notice before returning to the city.
July 19, 2026. A Darklands city screen now travels through the original loading, text, token, layout, presentation, acknowledgement, and input machinery.
July 19, 2026. Darklays reconnects the executable on disk, the code running in DOSBox, analysis in Ghidra and Reko, and the C# reconstruction.
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.