Skip to content

skproject Preservation Worklist

Daniel Nylander edited this page Jul 30, 2026 · 1 revision

skproject Preservation Worklist

skproject is Firestaff's source-level reference for Dungeon Master II: Skullkeep. It is a major reconstruction and porting effort, not a replacement for a hash-identified SKULL.EXE and its original media.

Reference Boundary

Use skproject to recover names, structures, dispatches and intended data flow. Use original executables, GDAT assets and captures to prove release-specific behaviour. A port can match broad design yet differ in pointer arithmetic, packed fields, palette timing, save writeback or input scheduling.

Core Evidence Gaps

Area Principal material Missing preservation evidence
GDAT SKWIN/SkWinCore.cpp, SkGlobal.h, defines.h Raw spans, decoder, palette, destination and draw order
Dungeon DME.h, SkWinCore.cpp, SKULL.ASM G1 fields and c_record addressing/ownership
Menu/title UI and dialog code, SKULL.ASM Original timing, hit testing, palette and audio sequence
AI/combat DME.h, SkWinCore.cpp State transitions, random stream and writeback traces
Saves SKSAVE routes and corpus Full byte-level import/export and backup/error behaviour
Audio sound/midi modules and media Trigger semantics, device timing and sample routing

GDAT Chain

DM2 rendering is data-driven. A preservation-quality material record should name the complete path:

G1/scene selector -> GDAT category/subtype/entry -> raw address/span ->
decoder -> indexed pixels + palette -> destination Rect14 -> draw order ->
frame hash

This must cover title, menu, HUD, walls, floors, doors, creatures, items, outdoor sky/ground and weather. A bitmap without palette, clipping and scene owner is not enough to prove a rendered frame.

c_record and Scene Ownership

Every G1 field and c_record needs a release-aware cross-reference: offset, width/type, base/index rule, readers, writers, observed values and a trace witness. A field may be a graphics selector, gameplay flag, script reference or transient cache key. Treating all of them as generic tile IDs loses the semantics needed for compatible loading and rendering.

Saves, Input and Timing

SKSAVE preservation needs legal saves for early game, indoor/outdoor scenes, shops, scripts, active projectiles, timers, companions and failure states. Keep complete before/after bytes, not only deserialised structures.

Title and menu preservation needs VBL-indexed input, palette writes, audio calls and rendered-frame hashes. Modern host UI must not be assumed to have the same timing as DOS merely because it looks similar.

High-Value Contributions

  1. Annotated SKULL.ASM anchors mapped to skproject functions and GDAT readers.
  2. A hash-indexed, legally sourced DM2 media and save corpus.
  3. A GDAT inspector that reports raw spans before decoding.
  4. Scene captures tying G1/c_record state to HUD and viewport commands.
  5. Differential traces for menu, audio, creature AI, weather and save writes.

Related Pages

Clone this wiki locally