From 3d4c4933ecf3693e06be42f3dff4a3e0cf8dbcbb Mon Sep 17 00:00:00 2001 From: MaddoScientisto Date: Sat, 21 Mar 2026 21:43:33 +0100 Subject: [PATCH] Refactor Ghidra instructions, add new binary files, and enhance decompilation notes - Updated Ghidra instructions to emphasize keeping analysis batches small. - Added new binary files: `db.104.gbf`, `db.105.gbf`, and `db.27.gbf`. - Expanded decompilation notes for `cheat_code_check`, detailing its internal workings and verified cheat actions. - Revised segment coverage ledger to reflect new findings and promote segments from `Foothold` to `Partial`. - Enhanced `plan-mid.md` with updated estimates and focus areas for ongoing analysis. --- .github/instructions/ghidra.instructions.md | 1 - .../~00000006.db/{db.100.gbf => db.104.gbf} | Bin 19054592 -> 19054592 bytes .../00/~00000006.db/{db.99.gbf => db.105.gbf} | Bin 19054592 -> 19054592 bytes .../00/~00000005.db/{db.25.gbf => db.27.gbf} | Bin 81920 -> 81920 bytes crusader_decompilation_notes.md | 136 ++++++++++++++++-- crusader_segment_coverage_ledger.csv | 8 +- plan-mid.md | 48 +++++-- 7 files changed, 167 insertions(+), 26 deletions(-) rename Crusader.rep/idata/00/~00000006.db/{db.100.gbf => db.104.gbf} (98%) rename Crusader.rep/idata/00/~00000006.db/{db.99.gbf => db.105.gbf} (98%) rename Crusader.rep/user/00/~00000005.db/{db.25.gbf => db.27.gbf} (99%) diff --git a/.github/instructions/ghidra.instructions.md b/.github/instructions/ghidra.instructions.md index 3627c70..706cd79 100644 --- a/.github/instructions/ghidra.instructions.md +++ b/.github/instructions/ghidra.instructions.md @@ -6,7 +6,6 @@ applyTo: "**" - Active target is the raw full-EXE Ghidra program `CRUSADER-RAW.EXE` unless explicitly stated otherwise. - Use Ghidra MCP tools for analysis, decompilation, renaming, comments, and xref work. -- Keep analysis batches small: prefer 1-5 functions, labels, or comments at a time. - Avoid speculative renames. Prefer names that are supported by one of these: - verified raw mapping from standalone segment work - direct string evidence diff --git a/Crusader.rep/idata/00/~00000006.db/db.100.gbf b/Crusader.rep/idata/00/~00000006.db/db.104.gbf similarity index 98% rename from Crusader.rep/idata/00/~00000006.db/db.100.gbf rename to Crusader.rep/idata/00/~00000006.db/db.104.gbf index 4689e95aa2ed97cf15b29e651519648935d0f7aa..ea3bd664c3195183ebe0b8df91a8e48343b52c79 100644 GIT binary patch delta 62886 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 delta 54236 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 W>VD|KTLO3CioSu-WV898|NjAlFj8^= diff --git a/Crusader.rep/idata/00/~00000006.db/db.99.gbf b/Crusader.rep/idata/00/~00000006.db/db.105.gbf similarity index 98% rename from Crusader.rep/idata/00/~00000006.db/db.99.gbf rename to Crusader.rep/idata/00/~00000006.db/db.105.gbf index 827f52d8770e4adde50e9bb716371d0d7f3c5057..46d4e83d3e70a0f03f5cdb63872b860f67060b88 100644 GIT binary patch delta 77963 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 delta 66147 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 EKeps;i~s-t diff --git a/Crusader.rep/user/00/~00000005.db/db.25.gbf b/Crusader.rep/user/00/~00000005.db/db.27.gbf similarity index 99% rename from Crusader.rep/user/00/~00000005.db/db.25.gbf rename to Crusader.rep/user/00/~00000005.db/db.27.gbf index de49ac64e354d6ec0fb170939a7755006928d035..6dcfebcbebaa6882bd7b1bdd7be3b3c2358d8554 100644 GIT binary patch delta 289 zcmZo@U~On%70@>@)G^W2(fSrCkhc8IoSH^~sRE2VOt$(P6(wz_``a?IPEWOE6k%LH zy~>u+h0WZ`AjKeYx{f`g#PmD1jLJv?lGEkv81<%G+cVmVhb0zeCMM;iMg*m%d88($ zq!zhlrskwfueWCmW^oJkbDloOmQe{wvxJ6caD0GckfX0_h-;9NLP%tQtF2N}etu4B zVxE#hn4?c9kY7?%nhLgC&_Bq<)6dZ--pw;8I3zwa*mb(19iukLa?a_O>>1^zAFyW> zvJG<#@^p0aagFzPa|?D2ff<{VpO+3d)7ZpJNkQL^m&-=qC$YFB-X}jfu_QA;&kg`b CoKsH# delta 221 zcmZo@U~On%70@>@)G^W2(Nf)d;=0#?rHYLLQw11#nC#p)DjM2qi~2YQhcGZOfM_5E zVT8m71o^uMIr_%?_&Ym>c>4P>Ffg@E542@;VNJ3!Hny0)(T-7a`es{3Wn}&rTSk3Z zJVr212OGg=Vr5`tnKHfJj!^<^29ki}^slyz+3W#D`RPT8xzo$-7=x!zwr7+Ru+jHP REG~)n$xlu!$;{8Q0{~yXJv9IT diff --git a/crusader_decompilation_notes.md b/crusader_decompilation_notes.md index edf9a68..4c617b8 100644 --- a/crusader_decompilation_notes.md +++ b/crusader_decompilation_notes.md @@ -667,7 +667,64 @@ All 35+ identified functions renamed and annotated in Ghidra. | Address | Name | Description | |----------|---------------------------|-------------| | `0x2420` | `entity_command_dispatch` | Dispatches player commands to target entity; reads 0x27d0, 0x2de4, sends events 0x14/0xf, handles state machine 0x27ca/0x27cd/0x27ce | -| `0x279a` | `cheat_code_check` | Checks entity byte+1 vs cheat sequence at 0x2833 (counter 0x283d); on full match, toggles 0x844/0x6045 and spawns vtable 0x287b/0x2892 | +| `0x279a` | `cheat_code_check` | Checks entity byte+1 against a five-byte event-code table at 0x2833 (`50 80 3e fd 27 00`, counter 0x283d); on full match, toggles 0x844/0x6045, emits helper/event code `0x103`, and takes one of two local success-side dispatch paths based on the new toggle state | + +### Follow-up: `cheat_code_check` internals + +- Direct raw-EXE recovery now tightens the cheat path substantially: + - `cheat_code_check` in `CRUSADER-RAW.EXE` is `0007:0d0a-0007:0e08`. + - It has exactly one direct caller in this build: `FUN_0007_04dc` at `0007:0511`, which prepares a small local event record and then calls `cheat_code_check` before continuing normal input dispatch. + - The byte compared on each call is `entity_or_event_record[+1]`, not a character fetched from a typed string buffer. + - Ghidra-side cleanup is now applied inside the function too: the decompiler shows `input_event_record`, `input_event_offset`, `new_cheat_enabled`, and `cheat_status_display_root`, plus a function comment describing the matched sequence and the cheat-toggle side effects. +- Variable and constant roles from the recovered body: + - `0x2833` is a local byte table, not an ASCII string in the raw EXE. The first five bytes are `50 80 3e fd 27`, followed by a `0x00` terminator. The checker walks that table one byte at a time. + - `0x283d` is the current match index into that byte table. On a successful byte match it increments; on mismatch it resets to zero and immediately retries the current input byte against the first table byte, so overlapping prefixes still work. + - `entity[+1]` is the compared input/event token. Because the cheat table is non-ASCII bytes, this path is matching higher-level input/event codes rather than literal typed letters. + - `0x844` is the main cheat-enable flag. The success path toggles it by converting the current byte to a boolean and negating it (`0 -> 1`, non-zero -> `0`). + - `0x6045` is written with the same post-toggle value as `0x844`, so it is a mirrored or secondary cheat-state latch rather than an independent control. + - Constant `0x103` is pushed into the shared helper at `000a:5276` immediately after the toggle. Existing notes already tie that constant to event `0x42f`; the local meaning is “emit the cheat-toggle side effect” rather than part of the matcher itself. + - `0x8c52` is forced to `1` on success before the side-effect path continues. +- Success-path structure: + - After a full table match, the code resets `0x283d` to zero, sets `0x8c52 = 1`, toggles `0x844` and `0x6045`, and calls the shared `0x103` helper. + - It then branches on the new cheat state. The `cheats-on` path uses local code pointer `DS:0x287b`; the `cheats-off` path uses `DS:0x2892`. + - Those values are not text strings and not vtable IDs. They land inside local helper code around `entity_registry_decrement` (`0007:286d`) and `entity_sprite_move_delta` (`0007:2884`), then pass through `display_null_check_dispatch` (`000b:1446`) and `sprite_node_get_or_traverse` (`000a:b988`). The exact UI/presentation object built by that path is still open, but it is clearly a local success-side dispatch path rather than “spawn vtable 0x287b/0x2892”. +- Conservative conclusion: + - `cheat_code_check` is a compact stateful matcher over event-code bytes, not text input. + - The interesting remaining question is what upstream input normalization turns user actions into the five-byte sequence `50 80 3e fd 27`, and what exact presentation object or notification path the two success-side helper targets construct for cheats-on versus cheats-off. + +### Follow-up: cheat-enable sources and verified cheat-only actions + +- Two independent cheat-enable sources are now verified in this build: + - The hidden input matcher in `cheat_code_check` toggles `0x844` and `0x6045` after matching the five-byte event-code table at `0x2833`. + - The command-line parser at `0004:635c-0004:63b8` recognizes the literal switch `-laurie` and directly sets `0x844 = 1` before taking a local notification path. This is the clearest readable cheat-enabler in the raw EXE. +- `jassica16` is still not directly visible in the raw EXE: + - No literal `jassica` string is present in the current string table, while `-laurie` is present as plain text. + - The matcher table remains the raw byte sequence `50 80 3e fd 27 00`, so if `jassica16` is a real player-facing input for this build it must be produced by an upstream normalization/compression step rather than stored as literal text. + - That upstream producer is still open; current evidence does not justify claiming a direct byte-for-character correspondence. +- A plain `F10` cheat action is now verified in the low-level keyboard path: + - `seg001_input_keyboard_handler` at `0006:ec29` handles input byte `0x44` and immediately returns unless cheats are enabled through `0x6045`. + - That branch does not test a modifier bit before the cheat action, so the code currently supports “plain F10 when cheats are enabled” much more strongly than “Ctrl+F10”. + - The branch emits event `0x261`, refreshes the active `0x7e22` entity/object lane, rebuilds or destroys several linked entities, and fires the follow-up event batch `0x33d`, `0x33f`, `0x340`, `0x341`, `0x33e` before re-enabling channels `4`, `1`, and `0`. + - The exact gameplay-side names of those follow-up events are still open, but this is consistent with a substantial restore/reset path such as the reported full-heal/resurrect action. No separate god-mode latch has been found in this branch. +- `FUN_0007_04dc` exposes a second cluster of cheat-only hotkeys once the same cheat gate is open: + - Confirmed byte tests in the caller-side dispatch are `0x37`, `0x4a`, `0x4e`, `0x52`, `0x53`, `0x0f`, `0x24`, plus the already-visible character events `'9'` and `'R'`. + - `0x37` calls `000c:8072`, while `0x4a` calls the neighboring helper at `000c:81c0`. + - `000c:8072` cycles a small `1..5` selector, writes that choice into the per-entity `0x7e1e` table at field `+0x15` through `FUN_0006_162d`, chooses one of the small sprite/state IDs `0x2e`, `0x2f`, `0x24`, `0x25`, and then calls `entity_table_set_sprite` at `0007:14af`. + - `000c:81c0` walks a broader `0x0b..0x19` selector range and writes the chosen value into the same per-entity table at field `+0x19` through `FUN_0006_1671`. + - Together these two helpers look like cheat/debug selector tooling tied to the current `0x7e22` object lane, not to health, invulnerability, or the cheat-enable toggle itself. + - `0x4e`, `0x52`, and `0x53` all route through the same object-method dispatch on the currently selected `0x49fb` entry after building a shared argument block with `func_0x000b2e00`, which again looks like debug/view tooling rather than a passive status flag. +- The UI/event layer also exposes multiple cheat-gated overlay or visualizer toggles behind internal event codes: + - Event `0x441` reaches `000c:8e16` and toggles byte `0xee0` before refreshing the `0x2bd8` controller object. + - Event `0x241` reaches `000c:8e46` and toggles byte `0x2bc9` before the same refresh. + - Event `0x141` reaches `000c:8e72` and toggles byte `0x2bca` before the same refresh. + - Event `0x410` reaches `000c:9703` and toggles byte `0x604f`, then takes one of two display/notification paths. + - Events `0x142` and `0x143` also dispatch into large cheat-gated view-building paths at `000c:9154` and `000c:92cd`; they clearly redraw substantial display state, but their exact user-facing names remain open. +- Current bottom line on the folklore claims: + - “Cheats can be enabled with `-laurie`” is directly verified. + - “There is a hidden input-sequence cheat enabler” is directly verified, but its exact human-readable spelling is still unresolved at the binary level. + - “F10 performs a large cheat-only restore/reset action” is directly verified. + - “Ctrl+F10 enables god mode” is not supported by the current code path; the verified F10 branch does not require a modifier and no dedicated god-mode latch has been recovered yet. + - “Other cheat-only debug visualizers/tools exist” is directly verified, though several are still known only by internal event codes or selector helpers rather than final user-facing names. ### Menu / Event Callbacks @@ -1023,7 +1080,10 @@ A scroll/camera management cluster found in the `0007:bxxx–0007:dxxx` range. | Address | Name | Evidence | |---------|------|---------| -| `0007:bab5` | `entity_set_watch_ptr` | Stores FAR entity ptr to `0x2bd8` (the watch target entity). | +| `0007:ba00` | `watch_entity_controller_create_global` | Thin global-create wrapper around `watch_entity_controller_create`; allocates default controller object and stores it at `0x2bd8`. | +| `0007:ba13` | `watch_entity_controller_dispatch_if_present` | If `0x2bd8` is non-null, calls controller vtable slots `+0x2c` and `+0x30`. | +| `0007:ba45` | `watch_entity_controller_create` | Allocates/initializes a type `0x2c2b` controller object, stores it at `0x2bd8`, sets event type `0x0219`, and installs callback-table entry `0x2be4` through `0x39ca`. | +| `0007:bab5` | `entity_set_watch_ptr` | Legacy name still in place, but newer constructor evidence now shows `0x2bd8` is a controller object lane rather than just a raw watched-entity FAR pointer. | | `0007:baea` | `camera_update_and_check_player_scroll` | Calls watch entity vtable `+0x24`; if `0x2bd1` flag clear checks if player position (from `g_player_entity_farptr+0x40`) has moved > 32 units since `0x2be0`; if so, updates `0x2be0` and conditionally dispatches scroll event via `0x45aa`. | | `0007:c6ba` | `scroll_camera_set_state_params` | Stores word params to `0x8354`, `0x8356`, byte to `0x8358`; dispatches. | | `0007:cd56` | `dispatch_if_flag_2bd3_set` | Returns unless `0x2bd3` non-zero. | @@ -1076,7 +1136,6 @@ A scroll/camera management cluster found in the `0007:bxxx–0007:dxxx` range. |---------|------|---------| | `0007:a96d` | `entity_copy_string_truncated80` | Strlen(param_3) ≤ 0x50 guard; copies string word-by-word from param_3 into `param_2+8`. | | `0007:b813` | `memcpy_4words` | Copies 4 words (8 bytes) from `param_2` to `param_1`. | -| `0007:ba45` | (unnamed) | Null/non-null far-ptr dispatch: different thunk paths based on `param_2 == 0`. | | `0007:b46d` | `entity_dispatch_if_slot82e2_valid` | Guard: if `*(int *)0x82e2 != -1`, calls dispatch thunk. | ### Linked List Utilities (draw pool + sprite) @@ -1102,7 +1161,7 @@ A scroll/camera management cluster found in the `0007:bxxx–0007:dxxx` range. | `0x2bca/0x2bc9` | `g_option_toggle_state` | UI option toggle state flags | | `0x2bd1` | `g_scroll_block_flag` | Blocks camera update path if non-zero | | `0x2bd3` | `g_scroll_active` | Non-zero = scroll system active | -| `0x2bd8` | `g_watch_entity_ptr` | FAR ptr to entity being tracked by camera | +| `0x2bd8` | `g_watch_entity_controller_farptr` | FAR ptr to the watch/camera controller object created by `watch_entity_controller_create`; older notes treating it as a raw entity pointer were too narrow | | `0x2be0` | `g_player_scroll_pos` | Cached player world X+Y (ulong) for scroll threshold detection | | `0x8354..0x8358` | `g_scroll_state_params` | Three scroll state params (word, word, byte) | @@ -2025,16 +2084,73 @@ Current structural read of the cache globals: - Two previously unbounded seg126 callers around the recovered seg005 handoff are now real functions in Ghidra: - `FUN_000c_7412` (`000c:7412-000c:7432`) - - `FUN_000c_c9f4` (`000c:c9f4-000c:ca1c`) -- The larger fallthrough body rooted at `000c:c890` is now also recovered as a real function object: `FUN_000c_c890` (`000c:c890-000c:c9f3`). + - `transition_preentry_run_until_complete_or_abort` (`000c:c9f4-000c:ca1c`) +- The larger fallthrough body rooted at `000c:c890` is now also recovered as a real function object: `transition_preentry_release_resources` (`000c:c890-000c:c9f3`). +- The previously blocked seg126 helpers are now also recovered as standalone functions after overlap repair in the surrounding namespace: + - `transition_preentry_setup_resources` (`000c:c63a-000c:c88f`) + - `transition_preentry_step_script` (`000c:ca1d-000c:cd52`) - Current verified behavior from direct MCP recovery/decompile: - `FUN_000c_7412` is a compact wrapper into the seg005 transition lane: it clears the redraw state on the sprite/object pair rooted at `0x5e82:0x5e84`, forces a black palette through `vga_palette_set_all_black`, runs seg126 pre-entry state prep through `FUN_000c_c9f4`, then tail-calls `FUN_0004_1e00`. - - `FUN_000c_c9f4` is a short pre-entry state wrapper: it runs local seg126 setup helpers, repeatedly executes a local prep loop while state byte `0x62fe` is clear and fallback word `0x31a2` is zero, then dispatches into local helper `000c:c890` before returning to callers that continue into `FUN_0004_1e00`. - - `FUN_000c_c890` is the main seg126 pre-entry preparation body behind that wrapper: it releases up to two tracked object pairs at `0x8c5c` and `0x8c60`, conditionally frees the local pair at `0x6301:0x6303`, runs palette/render reset, conditionally constructs animation state through `animation_ctor_variant_a` on `DS:0x6341` when `0x844` and `0x62fe` are both set, marks the active dispatch entry, primes sprite redraw state, drains the event queue, and zeroes `0x8a94-0x8a98` before returning. + - `transition_preentry_run_until_complete_or_abort` is the short pre-entry state wrapper: it runs local seg126 setup helpers, repeatedly executes a local prep loop while local ready byte `0x62fe` is clear and external gate word `0x31a2` remains zero, ticks the local palette-fade controller on each pass, then dispatches into `transition_preentry_release_resources` before returning to callers that continue into `FUN_0004_1e00`. + - `transition_preentry_release_resources` is the cleanup/finalize body behind that wrapper: it releases the paired temporary presenter objects at `0x8c5c` and `0x8c60`, conditionally frees the local stream buffer at `0x6301:0x6303`, runs palette/render reset, conditionally constructs animation state through `animation_ctor_variant_a` on local storage `DS:0x6341` when `0x844` and `0x62fe` are both set, then immediately marks byte `+0x40` on the shared global owner at `0x6828`, marks the active dispatch entry, primes sprite redraw state, drains the event queue, and zeroes `0x8a94-0x8a98` before returning. + - `wait_for_vga_vertical_retrace` (`000c:c62c-000c:c639`) is now recovered as a real helper: it polls VGA status port `0x3da` until the vertical-retrace edge and is called from both the seg126 pre-entry loop and nearby fade/update paths. + - `transition_preentry_setup_resources` captures baseline coordinates into `0x8c58:0x8c5a`, constructs two paired temporary presenter objects at `0x8c5c:0x8c5e` and `0x8c60:0x8c62` through `000a:9748` with preset IDs `0x10` and `0x11`, stages the local stream buffer at `0x6301:0x6303`, seeds palette/render state, and resets the neighboring control globals at `0x62fa-0x6318` before returning. + - The shared seg088 helpers behind that object family are now tighter too: `text_renderer_measure_string_width` (`000a:30aa`) returns width through the object's virtual measure path, and `text_renderer_draw_string_at` (`000a:30d7`) stores x/y into the object and draws a null-terminated string. That is enough to reclassify `0x8c5c` and `0x8c60` as a paired temporary text-renderer lane rather than generic sprite/object state. + - `transition_preentry_step_script` early-outs while fade state `0x630a` is active or when the tracked object position at `0x2de4+0x40/+0x42` is unchanged, decrements the local countdown at `0x62fa:0x62fc`, interprets the `0x6301` byte stream with control values including `0x21`, `0x23`, `0x24`, `0x26`, `0x2a`, `0x40`, and `0x5e`, uses `0x62ff` as the stream cursor, uses the temporary text-renderer objects at `0x8c5c` and `0x8c60` for layout/render work, sets ready flag `0x62fe` on the `0x23` case, uses `0x6305` as a one-shot redraw latch around the `0x26`/`0x2a` control path, and leaves `0x630a` / `0x630b` to the neighboring palette-fade controller. + - Direct follow-up on the old `0x31a2` ambiguity now points away from local script state: `event_queue_state_reset` at `0008:89c1` clears `0x31a2`, interrupt-side queue code around `0008:a283` / `0008:a314` increments and decrements it, and several busy-wait helpers (`000c:e4d8`, `000c:e546`, `000c:e5c6`) spin on it. In the seg126 wrapper this makes `0x31a2` a plausible external input/event break gate rather than part of the local pre-entry bytecode interpreter. + - The seg136 owner flag at `g_active_dispatch_entry_farptr[+0x40]` is now less abstract too. `active_dispatch_entry_mark_enabled` / `active_dispatch_entry_mark_disabled` still force it high or low during entry setup, but nearby seg136 helpers also copy it into fresh entries, clear it when the current owner becomes inactive, and decrement it only while `0x31a2 > 0`. That ties the `0x6828` owner lane more directly to the same external input/event gate that seg126 polls. + - The same segment now also has a clearer transition-control shell around that prep body: + - `thunk_callf_0000_ffff_000c_827d` is the pre-transition side that restores redraw/event state, runs the `0x2bd8` controller callbacks, redraws the `0x5e82:0x5e84` sprite/object pair, and leaves local state bytes set for the subsequent `FUN_0004_1e00` call. + - `thunk_callf_0000_ffff_000c_82f9` is the post-transition side that resets the slot table through `FUN_0008_39e9`, clears local state bytes, runs the `0x5e82:0x5e84` cleanup path, and returns the lane to its quiescent state. + - `FUN_000c_834a` is a small guard wrapper that conditionally calls `FUN_000c_8231()` when gate byte `0x85f` is set; this same helper is used at the start of `FUN_0004_1e00` and in the local seg126 caller family. - This is now enough to tie the seg076 caller at `000c:742c` to the same startup/display transition lane already reached from `FUN_0004_60c0`. - Conservative conclusion: - - seg126 now has a real foothold in the startup/runtime entry path rather than only isolated thunks and trampolines. - - The unresolved part is the exact meaning of the local state bytes and object lanes around `0x62fe`, `0x31a2`, `0x8c5c`, `0x8c60`, and `DS:0x6341`, not whether the wrapper lane itself is real. + - seg126 is now beyond a mere foothold: it contains a coherent transition-entry and transition-exit control lane around the seg005 startup/display state, with pre-entry prep, guarded entry, post-transition cleanup, and local state/fade integration. + - The unresolved part is the exact higher-level UI/transition role of the paired text-renderer lanes at `0x8c5c` and `0x8c60`, the precise event semantics of external gate `0x31a2`, and the exact relationship between local animation storage `DS:0x6341` and the shared global owner at `0x6828` whose `+0x40` byte follows that same gate, not whether the transition lane itself is real. + +### Follow-up: seg127 palette fade controller tied to the same transition lane + +- The nearby seg127 state/fade controller is now anchored by verified functions in Ghidra: + - `palette_fade_begin_full_up` (`000c:c600-000c:c615`) + - `palette_fade_begin_full_down` (`000c:c616-000c:c62b`) + - `transition_palette_fade_tick` (`000c:cd53-000c:cd75`) + - `transition_palette_fade_begin` (`000c:cd76-000c:cddd`) + - `transition_palette_fade_out_step` (`000c:cdde-000c:ce56`) and `transition_palette_fade_in_step` (`000c:ce57-000c:cecb`) +- Current verified behavior from direct MCP recovery/decompile: + - `palette_fade_begin_full_up` and `palette_fade_begin_full_down` are fixed-range wrappers over `transition_palette_fade_begin`: both use the full `0x80`-entry palette range with step size `4`, differing only in direction/state (`2` for up, `1` for down). + - The current local callers are now visible too: `000c:cd1a` invokes `palette_fade_begin_full_up` for the `ES:[DI] == 0x26` case and sets `0x6305 = 1`, while `000c:cd3f` and `000c:cb06` invoke `palette_fade_begin_full_down` when the fade controller is idle. + - `transition_palette_fade_begin` takes a palette source pointer, start index, count, step amount, and direction/state, stores them into local controller state at `0x630e-0x6316`, sets active flag byte `0x630a = 1`, stores the direction/state word at `0x630b`, then runs the local prep helper and one immediate fade step. + - `transition_palette_fade_tick` is the small controller gate over that state: it returns when inactive, dispatches to `transition_palette_fade_out_step` when `0x630b == 1`, and to `transition_palette_fade_in_step` when `0x630b == 2`. + - `transition_palette_fade_out_step` and `transition_palette_fade_in_step` iterate over palette range `[0x6312 .. 0x6312 + 0x6314)`, writing VGA DAC entries through ports `0x3c8/0x3c9` from the source palette at `0x630e:0x6310` while updating brightness offset byte `0x630d` by step `0x6316`; both clear active flag `0x630a` when the fade reaches its terminal black or full-bright state. + - This controller is tied directly into the transition lane already under study: `transition_preentry_run_until_complete_or_abort` calls `transition_palette_fade_tick`, and `transition_preentry_setup_resources` seeds the neighboring seg126 controller state at `0x62fa-0x6318` before the script interpreter starts using it. +- Conservative conclusion: + - seg127 is no longer just a foothold; it is a real palette fade controller subsystem adjacent to the same startup/display entry path, with verified initializer, dispatcher, step bodies, fixed-range wrappers, and caller-side state gating. + - The remaining question is not the local fade mechanics, but which exact transition states and tracked objects choose the fade direction and palette source. + +### Follow-up: seg049 watch/camera controller object at `0x2bd8` + +- The longstanding `0x2bd8` watch/camera lane is now tighter and partially corrected from older notes: it is not just a raw watched-entity pointer, but a real controller object lane. +- Current verified behavior from direct MCP recovery/decompile: + - `watch_entity_controller_create` (`0007:ba45`) allocates or reuses an object, runs the local constructor path at `000a:8627`, stamps type `0x2c2b`, stores the resulting FAR pointer globally at `0x2bd8`, sets event type `0x0219`, and installs callback target `0x2be4` through the callback table at `0x39ca`. + - `watch_entity_controller_create_global` (`0007:ba00`) is a thin wrapper that constructs the default global controller and stores the returned FAR pointer at `0x2bd8:0x2bda`. + - `watch_entity_controller_dispatch_if_present` (`0007:ba13`) is the paired non-null dispatcher that calls controller vtable slots `+0x2c` and `+0x30` when the global exists. + - Existing callers in the seg005 transition lane (`FUN_0004_1e00`) call through the same `0x2bd8` vtable `+0x2c` slot before palette restore and post-transition redraw prep, which strengthens the interpretation that this is a real watch/camera-side controller object participating in display-state transitions. +- Conservative conclusion: + - seg049 now has a real foothold in the watch/camera controller subsystem. + - The remaining ambiguity is the exact distinction between the controller object at `0x2bd8` and the ultimately watched entity or map object it may point at or manage, not whether the controller itself is real. + +### Follow-up: seg108 sprite/object flag lane at `0x4f38` + +- The global sprite/object lane at `0x4f38:0x4f3a` now has two recovered flag helpers in addition to the existing redraw/timer sync evidence: + - `sprite_object_clear_flag40_if_present` (`000b:2b08-000b:2b1f`) + - `sprite_object_set_flag40_if_present` (`000b:2b20-000b:2b37`) +- Current verified behavior from direct MCP recovery/decompile: + - `sprite_object_clear_flag40_if_present` checks whether the global sprite/object FAR pointer at `0x4f38` is non-null and clears bit `0x40` in the word at object offset `+0x32`. + - `sprite_object_set_flag40_if_present` performs the same guard and sets bit `0x40` at that same `+0x32` word. + - This fits the already-confirmed sync behavior in `sprite_node_get_or_traverse`, where `0x4588` callback emissions are immediately mirrored through `FUN_000b_1e39` using the global sprite/object pointer. Together, that narrows `0x4f38` to an active sprite/object instance whose state bits are toggled during the same startup/display transition path that uses `FUN_0004_60c0` and `FUN_0004_1e00`. +- Conservative conclusion: + - seg108 now has a real foothold in the active sprite/object state lane. + - The remaining ambiguity is what bit `0x40` means semantically and how the `0x4f38` object relates at a higher level to the `0x2bd8` watch/camera controller and the `0x4588` callback object. ### Follow-up: `ASYLUM.24` vs nearby `ASYLUM` ordinals diff --git a/crusader_segment_coverage_ledger.csv b/crusader_segment_coverage_ledger.csv index b8e34ec..edc0cc1 100644 --- a/crusader_segment_coverage_ledger.csv +++ b/crusader_segment_coverage_ledger.csv @@ -47,7 +47,7 @@ "46","code","0x7A200","0x7DC","None","","","","crusader_ne_segments.csv" "47","code","0x7AC00","0x9B4","None","","","","crusader_ne_segments.csv" "48","code","0x7B800","0x63","None","","","","crusader_ne_segments.csv" -"49","code","0x7BA00","0x1E3F","None","","","","crusader_ne_segments.csv" +"49","code","0x7BA00","0x1E3F","Foothold","Watch/camera controller object lane","watch_entity_controller_create_global; watch_entity_controller_create; watch_entity_controller_dispatch_if_present; entity_set_watch_ptr","Exact controller-vs-watched-entity ownership still needs caller-side confirmation, but 0x2bd8 is now clearly a real controller object lane","crusader_decompilation_notes.md; plan-mid.md" "50","code","0x7DE00","0x9C8","None","","","","crusader_ne_segments.csv" "51","code","0x7EA00","0x1D02","None","","","","crusader_ne_segments.csv" "52","code","0x80A00","0x1D65","None","","","","crusader_ne_segments.csv" @@ -106,7 +106,7 @@ "105","code","0xAEC00","0x9F6","None","","","","crusader_ne_segments.csv" "106","code","0xAF800","0x1795","None","","","","crusader_ne_segments.csv" "107","code","0xB1400","0x40C","None","","","","crusader_ne_segments.csv" -"108","code","0xB1A00","0x113F","None","","","","crusader_ne_segments.csv" +"108","code","0xB1A00","0x113F","Foothold","Active sprite/object state lane","sprite_object_clear_flag40_if_present; sprite_object_set_flag40_if_present","Higher-level meaning of bit 0x40 and its relation to 0x2bd8 and 0x4588 is still unresolved","crusader_decompilation_notes.md; plan-mid.md" "109","code","0xB2E00","0x1424","None","","","High-value gap around 000b:2e00 still unresolved","crusader_ne_segments.csv; crusader_decomp_progress.md" "110","code","0xB4400","0x4C4","None","","","","crusader_ne_segments.csv" "111","code","0xB4A00","0x489","None","","","","crusader_ne_segments.csv" @@ -124,8 +124,8 @@ "123","code","0xC3C00","0xE6D","None","","","","crusader_ne_segments.csv" "124","code","0xC4E00","0x3DD","None","","","","crusader_ne_segments.csv" "125","code","0xC5400","0x1A3E","None","","","","crusader_ne_segments.csv" -"126","code","0xC7400","0x402A","Foothold","Runtime-entry wrappers and pre-entry state prep","FUN_000c_7412; FUN_000c_c890; FUN_000c_c9f4; thunk_callf_0000_ffff_000c_827d","Broader seg126 state-machine/helper meanings remain open, but this lane now clearly feeds the seg005 startup/display transition","crusader_decompilation_notes.md; plan-mid.md" -"127","code","0xCC600","0x8F6","None","","","","crusader_ne_segments.csv" +"126","code","0xC7400","0x402A","Partial","Transition-entry wrappers, pre-entry setup/script, and exit control","FUN_000c_7412; transition_preentry_setup_resources; transition_preentry_release_resources; transition_preentry_run_until_complete_or_abort; transition_preentry_step_script; wait_for_vga_vertical_retrace; thunk_callf_0000_ffff_000c_827d; thunk_callf_0000_ffff_000c_82f9; FUN_000c_834a","The seg126 helper family is structurally recovered and now ties into a paired temporary text-renderer lane at 0x8c5c/0x8c60, an external input/event gate at 0x31a2, and the shared active-dispatch owner at 0x6828 whose +0x40 byte follows that same gate; remaining open work is the exact UI role of the renderer pair, the DS:0x6341 to 0x6828 animation-owner relationship, and the separate oversized overlap rooted at 000c:db68","crusader_decompilation_notes.md; plan-mid.md" +"127","code","0xCC600","0x8F6","Partial","Palette fade controller and transition-state gate","palette_fade_begin_full_up; palette_fade_begin_full_down; transition_palette_fade_begin; transition_palette_fade_tick; transition_palette_fade_out_step; transition_palette_fade_in_step","Exact transition states and palette-source owners are still unresolved, but the local fade controller, default fade entry paths, and active/direction state at 0x630a/0x630b are now clear","crusader_decompilation_notes.md; plan-mid.md" "128","code","0xCD200","0x5D0","None","","","","crusader_ne_segments.csv" "129","code","0xCDA00","0xD77","None","","","","crusader_ne_segments.csv" "130","code","0xCEA00","0x47D","None","","","","crusader_ne_segments.csv" diff --git a/plan-mid.md b/plan-mid.md index d2bddb6..8c869ba 100644 --- a/plan-mid.md +++ b/plan-mid.md @@ -31,25 +31,51 @@ The estimates below are intentionally conservative. They measure verified behavi - seg137 is now promoted from `Foothold` to `Partial`: direct MCP recovery stabilized a coherent palette/dispatch-entry helper family with safe renames for all-black, all-white, arbitrary-RGB, grayscale, black-state, and solid-color state builders around the same `entity_dispatch_entry_init_runtime_state` lane. The remaining gap is the higher-level event/script meaning of those helpers, not the local mechanics. - seg005 and seg136 now have new high-value footholds: `FUN_0004_60c0` is recovered as a startup/display orchestration handoff that drives the seg137 palette helper family, validates an object through vtable `+0x0c`, creates the default active dispatch entry, programs mouse state, and then hands off into `0004:1e00`; nearby seg136 helpers are now stabilized as `active_dispatch_entry_mark_enabled`, `active_dispatch_entry_mark_disabled`, and `active_dispatch_entry_create_default`. - The downstream seg005 handoff body is now also classified further: `FUN_0004_1e00` (`0004:1e00-0004:2420`) is a non-return startup/display transition driver with confirmed use of `vga_palette_set_all_black`, `animation_ctor_variant_b`, `sprite_node_get_or_traverse`, seg064 gate helpers, the `0x2bd8` vtable lane, and the `0x4aa/0x7e22` resource/object lane. The remaining work is naming the exact state label, not repairing the structure. -- seg126 now has a deeper foothold instead of only wrapper coverage: `FUN_000c_7412`, `FUN_000c_c9f4`, and the newly recovered `FUN_000c_c890` now show a coherent pre-entry preparation lane that releases tracked objects, resets palette/render state, conditionally constructs animation state at `DS:0x6341`, and then feeds the same `FUN_0004_1e00` startup/display transition from the seg076 side. +- seg126 is now promoted from `Foothold` to `Partial`: `FUN_000c_7412`, `transition_preentry_setup_resources`, `transition_preentry_release_resources`, `transition_preentry_run_until_complete_or_abort`, `transition_preentry_step_script`, `thunk_callf_0000_ffff_000c_827d`, `thunk_callf_0000_ffff_000c_82f9`, and `FUN_000c_834a` now show a coherent pre-entry, guarded-entry, script/fade step, and post-transition control shell around the same `FUN_0004_1e00` startup/display state. +- seg127 is now promoted from `Foothold` to `Partial`: `palette_fade_begin_full_up`, `palette_fade_begin_full_down`, `transition_palette_fade_begin`, `transition_palette_fade_tick`, `transition_palette_fade_out_step`, and `transition_palette_fade_in_step` form a concrete local palette-fade controller with verified full-range wrappers and caller-side state gating immediately beside the same seg126/seg005 transition lane. +- seg049 is no longer blank: `watch_entity_controller_create_global`, `watch_entity_controller_create`, and `watch_entity_controller_dispatch_if_present` now show that `0x2bd8` is a real type-stamped watch/camera controller object lane rather than only a raw watched-entity pointer, and that same controller is exercised from `FUN_0004_1e00`. +- seg108 is no longer blank: `sprite_object_clear_flag40_if_present` and `sprite_object_set_flag40_if_present` now anchor the `0x4f38` global sprite/object lane as a real state-bit-controlled object path used beside the same `0x4588` callback sync and startup/display transition flow. +- Direct MCP follow-up on seg126 and seg127 now recovered the missing helper bodies after boundary repair: `transition_preentry_setup_resources` (`000c:c63a`), `transition_preentry_release_resources` (`000c:c890`), `transition_preentry_run_until_complete_or_abort` (`000c:c9f4`), `transition_preentry_step_script` (`000c:ca1d`), and the neighboring `transition_palette_fade_tick` / `transition_palette_fade_begin` / `transition_palette_fade_out_step` / `transition_palette_fade_in_step` chain are now named against verified behavior. The latest semantic pass also tightened the two main open globals: `0x8c5c` / `0x8c60` are now best understood as a paired temporary text-renderer lane, while `0x31a2` behaves like an external input/event break gate maintained by queue/interrupt-side code. The remaining structural cleanup is the separate oversized overlap rooted at `000c:db68`, not the seg126 helper family. +- Bonus cheat-lane cleanup is now visible in Ghidra too: `cheat_code_check` has recovered local names (`input_event_record`, `input_event_offset`, `new_cheat_enabled`, `cheat_status_display_root`) and a decompiler comment stating that it matches the five-byte event-code sequence `50 80 3e fd 27 00` before toggling the cheat-state bytes and taking one of two local notification paths. ### Current Focus 1. Finish Priority 0 refinement by promoting more exact segment rows where notes already support a verified foothold. -2. Continue the Priority 1 pass by tracing the higher-level startup/display callers, branch outcomes, and pre-entry object lanes that stitch the seg137 palette helper family into the wider `0x4588` / dispatch-entry object-role lane. +2. Continue the Priority 1 pass by tracing the higher-level startup/display callers, branch outcomes, pre-entry object lanes, palette-fade ownership, watch/camera controller ownership, and active sprite/object ownership that stitch the seg137 palette helper family into the wider `0x4588` / dispatch-entry object-role lane. ### Next Resume Point -1. Classify the remaining seg126 pre-entry object lanes around `FUN_000c_c890`, especially tracked pairs `0x8c5c`, `0x8c60`, local state gates `0x62fe` / `0x31a2`, and animation buffer/object `DS:0x6341`. -2. Continue caller-role classification inside `entity_cleanup_resources_and_dispatch` (contains both `000d:9d5e` and `000d:a3b7`) and map how it relates to `FUN_000d_938c`, `FUN_0004_60c0`, `FUN_000c_7412`, `FUN_000c_c890`, and the seg136/seg137 active-dispatch helper family. -3. Clarify the object validated through `FUN_0004_60c0` vtable slot `+0x0c` and how it relates to the sprite/object lane at `0x4f38`, the `0x2bd8` vtable callbacks used inside `FUN_0004_1e00`, and the tracked object pairs released by `FUN_000c_c890`. -4. Revisit `allocator_phase_finalize_pass` only where it intersects the same callback object semantics, rather than broad allocator mechanics that are already sufficiently constrained. -5. Continue `ASYLUM.24` only after the `0x4588` / dispatch-entry lane and `0004:1e00` transition path have no further cheap wins. +1. Keep classifying the seg126 pre-entry text-renderer lane around `transition_preentry_setup_resources`, `transition_preentry_step_script`, and `transition_preentry_release_resources`, especially by: + - comparing more preset `0x10` / `0x11` text-renderer callsites, + - tracing who owns the rendered buffer loaded into `0x6301:0x6303`, + - mapping the control bytes `0x21` / `0x23` / `0x24` / `0x26` / `0x2a` / `0x40` / `0x5e` to concrete display behavior, + - and deciding whether the paired `0x8c5c` / `0x8c60` lane is a title/body pair, normal/highlight pair, or another fixed UI pairing. +2. Finish the `0x31a2` gate pass as one batch: + - classify the read sites at `0004:c24d`, `000c:ca11`, `000c:e4d8`, `000c:e546`, `000c:e5c6`, `000d:9304`, `000d:b6b1`, and `000d:c0ee`, + - relate them back to interrupt-side updates at `0008:a283` / `0008:a314`, + - and decide whether `0x31a2` is best described as user-acknowledge, queued-input depth, or a broader event-break gate. +3. Tighten the `DS:0x6341` to `0x6828` relationship: + - compare the seg126 `animation_ctor_variant_a` call with the other raw callsites at `0005:3c4f`, `0005:3c74`, `000c:6176`, and `000c:619c`, + - map who owns `g_active_dispatch_entry_farptr[+0x40]`, + - and classify whether seg126 is constructing a transition-local animation payload for the shared active dispatch entry or only toggling an owner-side state bit after setup. +4. Identify which higher-level transition states own the seg127 fade-controller inputs at `0x630a-0x6316` and how that fade state is chosen from the seg005/seg126 startup path. +5. Repair the still-oversized overlap rooted at `000c:db68` only if it blocks follow-on analysis or decompiler visibility in the same transition lane. +6. Clarify the relationship between the seg049 watch/camera controller at `0x2bd8`, the seg108 sprite/object lane at `0x4f38`, and the object validated through `FUN_0004_60c0` vtable slot `+0x0c`. +7. Continue caller-role classification inside `entity_cleanup_resources_and_dispatch` (contains both `000d:9d5e` and `000d:a3b7`) and map how it relates to `FUN_000d_938c`, `FUN_0004_60c0`, `FUN_000c_7412`, `transition_preentry_release_resources`, and the seg136/seg137 active-dispatch helper family. +8. Keep the cheat/input side lane warm when it offers cheap wins: + - identify the upstream producer for the five-byte cheat event-code sequence `50 80 3e fd 27`, + - resolve the exact success-side presentation path behind `DS:0x287b` versus `DS:0x2892`, + - finish naming the verified cheat-only actions now that plain `F10` is confirmed in `seg001_input_keyboard_handler`, + - map the remaining caller-side hotkey bytes in `FUN_0007_04dc` (`0x37`, `0x4a`, `0x4e`, `0x52`, `0x53`, `0x0f`, `0x24`, `'9'`, `'R'`) to final user-facing controls, + - verify whether the reported `H` / hack-mover description belongs to this build or to a higher translation layer, + - and tie the cheat toggle flags `0x844` / `0x6045` into the wider input/event-dispatch system, especially the cheat-gated overlay events `0x141`, `0x142`, `0x143`, `0x241`, `0x410`, and `0x441`. +9. Revisit `allocator_phase_finalize_pass` only where it intersects the same callback object semantics, rather than broad allocator mechanics that are already sufficiently constrained. +10. Continue `ASYLUM.24` only after the `0x4588` / dispatch-entry lane and `0004:1e00` transition path have no further cheap wins. ### Headline Estimate -- Overall useful decompilation progress: about 30% -- Reasonable uncertainty band: about 25% to 35% +- Overall useful decompilation progress: about 35% +- Reasonable uncertainty band: about 30% to 40% This is the best single-number estimate for the full game right now. @@ -58,8 +84,8 @@ This is the best single-number estimate for the full game right now. | Metric | Estimate | Meaning | |---|---:|---| | Top 100 far-call target coverage | about 80% | Roughly 80 of the top 100 most-called far-call targets have been named or materially classified | -| Whole-program behavioral coverage | about 30% | Verified subsystem and function understanding across the executable | -| Segment spread with meaningful analysis | about 14% to 20% | Segments with more than a trivial foothold or isolated note | +| Whole-program behavioral coverage | about 35% | Verified subsystem and function understanding across the executable | +| Segment spread with meaningful analysis | about 19% to 25% | Segments with more than a trivial foothold or isolated note | | Tooling maturity for continued work | about 75% | Core repair, lookup, and fallback automation needed for continued progress | ### Why These Numbers Differ