dm2-dungeon: actuator and creature type catalogs (names + per-type parameter decoding) #263
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
dm2-dungeondecodes every Actuator and Creature record and round-trips them byte-for-byte, but the type numbers stay numbers: nothing mapsActuator::type()to a name or to its per-type parameter meanings, and nothing maps a Creature type to a creature/decoration name. This is the asterisk on Phase 2's "done" in ROADMAP.md, deferred to follow-up PRs by the bullets in § Phase 2 (Actuator records, Creature records) and § "Per-type object records" indocs/formats/dungeon-dat.md.Scope
behaviour/targetmean per type; today they are a raw + bit-accessor surface only.Not in scope: the text escape-code 29 / 30 per-version expansion tables. The roadmap groups them with the catalogs, but they are reverse-engineering (per-port table extraction, tables likely in
graphics.datdtTextrecords or hardcoded in the engine), not cataloguing. Worth a separate issue.Sources
docs/external-references.md.DMDC2/DM2/_Actuf.Dic.csvandDMDC2/DM2/_Actuw.Dic.csv— 128 rows each (one per type), floor and wall. Each row isname, param1_type, param2_type, param3_type, param3_locator_type, e.g."Activator, item watcher","Item","No","Locator","Trap". This covers deliverable 2 as well as 1 — the param-type descriptors are exactly the per-type parameter decoding.DMDC2/DM2/_Creatures.Dic.csv— 256 rows, creature and decoration names (THORN DEMON,CAVERN TABLE,BUSH,PILLAR…).DMDC2/Hint_Actu/*.htm— 50 per-type pages (named<hex><F|W>.htm) carrying a display name plus prose semantics, including honest "still unknown" notes._Chests,_Clothes,_Misc,_Missiles,_Potions,_Scrolls,_Weapons,_Heroes,_Messages,_Wall_Ornates,_Floor_Ornates) and for DM1 / DM2 Beta underDMDC2/DM1/andDMDC2/DM2Beta/.Coverage is partial, so this does not reduce to a transcription job: 28 of 128 floor rows and 35 of 128 wall rows are named (the rest are
"-"), and 76 of 256 creature rows. The named subset is the well-understood core; the tail still needs [KKDF2] plus fixture evidence, and the two sources should be cross-checked against each other rather than either trusted alone.Open question — licensing
skprojectships no LICENSE file. Type names are facts about the game, but the curation and the prose inHint_Actuare someone's work, anddm2-toolsis MIT / Apache-2.0. Decide before writing code whether we (a) use the dictionaries as leads and verify each entry independently against fixtures + [KKDF2], (b) ask upstream (gbsphenx/skproject) for explicit terms, or (c) treat them as reference-only and cite rather than copy. This choice sets the shape of the work, not just its paperwork.Notes on shape
The catalogs are data, not logic — the natural form is a table in
dm2-dungeonwith name lookups over the existingActuator/Creatureaccessors, keyed by type and floor/wall variant, with unknown types remaining representable (no panics, no lossy round-trip). Round-trip must stay byte-exact: naming a type must never gate parsing it.Fixture evidence is available from all 16 staged ports, and DMDC2 additionally ships its own sample dumps (
D2.PCAT.DAT,D2.SEGACD.BE.DAT,D2.PCATBeta.DAT, …) that can serve as cross-checks.Worth splitting per deliverable once the licensing question is settled — the creature catalog is independent of the actuator work.