22 KiB
22 KiB
| 1 | Segment | Type | FileOffset | Length | CoverageStatus | KnownSubsystem | KeyNamedFunctions | Blockers | NotesSource |
|---|---|---|---|---|---|---|---|---|---|
| 2 | 1 | code | 0x37600 | 0x8400 | Deep | Gameplay cursor/input/projectiles | cursor_update_hover; entity_fire_weapon; projectile_update_tick | Broader gameplay subsystem still spans adjacent segments | crusader_decompilation_notes.md; plan-mid.md |
| 3 | 2 | code | 0x40000 | 0x2B0 | None | crusader_ne_segments.csv | |||
| 4 | 3 | code | 0x40400 | 0x55A | None | crusader_ne_segments.csv | |||
| 5 | 4 | code | 0x40A00 | 0x10B1 | Foothold | Reset/cache entry path | runtime_cache_reset_sequence | ASYLUM.24 and downstream reset callers still need tighter classification | crusader_decompilation_notes.md; plan-mid.md |
| 6 | 5 | code | 0x41E00 | 0x8D7 | Partial | Startup/display transition prepare/driver lane | startup_display_transition_prepare; startup_display_transition_driver | The two main seg005 bodies are now named and tied to caller-side validation through vtable +0x0c, the seg108 0x4f38 sprite/object helper lane, the shared active-dispatch hold byte at 0x6828, the seg049 watch/controller lane at 0x2bd8, and the seg126 follow-up path; the exact higher-level state label is still unresolved | crusader_decompilation_notes.md; plan-mid.md |
| 7 | 6 | code | 0x42C00 | 0x75E | Foothold | Gameplay-side masked materializer and local state/value selector lane | entity_vm_context_try_create_mask_0008_slot30_with_offset; entity_vm_context_try_create_mask_0010_slot08_with_offset_if_ready | Outer callers for the renamed seg006 helpers are still unresolved, and the higher-level gameplay subsystem owning the local state-selector and adjacent class-linked value family still needs caller-side recovery | plan-mid.md; docs/raw-0008-000c.md |
| 8 | 7 | code | 0x43600 | 0x484 | None | crusader_ne_segments.csv | |||
| 9 | 8 | code | 0x43C00 | 0x1386 | None | crusader_ne_segments.csv | |||
| 10 | 9 | code | 0x45400 | 0x495 | None | crusader_ne_segments.csv | |||
| 11 | 10 | code | 0x45A00 | 0xD92 | None | crusader_ne_segments.csv | |||
| 12 | 11 | code | 0x46E00 | 0x5B1 | None | crusader_ne_segments.csv | |||
| 13 | 12 | code | 0x47600 | 0x94B | None | crusader_ne_segments.csv | |||
| 14 | 13 | code | 0x48200 | 0x1F6C | None | crusader_ne_segments.csv | |||
| 15 | 14 | code | 0x4AA00 | 0x526 | None | crusader_ne_segments.csv | |||
| 16 | 15 | code | 0x4B200 | 0x1C68 | None | crusader_ne_segments.csv | |||
| 17 | 16 | code | 0x4D400 | 0x677 | None | crusader_ne_segments.csv | |||
| 18 | 17 | code | 0x4DC00 | 0x1A7 | None | crusader_ne_segments.csv | |||
| 19 | 18 | code | 0x4E000 | 0x7E9 | None | crusader_ne_segments.csv | |||
| 20 | 19 | code | 0x4EA00 | 0xB4D | None | crusader_ne_segments.csv | |||
| 21 | 20 | code | 0x4F800 | 0x878 | None | crusader_ne_segments.csv | |||
| 22 | 21 | code | 0x50200 | 0x4486 | Partial | Timer/event dispatch and entity counting | entity_count_by_type_a; input_keyboard_handler copy | Needs broader caller-driven expansion | crusader_decompilation_notes.md; plan-mid.md |
| 23 | 22 | code | 0x55000 | 0x2BD6 | None | crusader_ne_segments.csv | |||
| 24 | 23 | code | 0x58200 | 0x5D6 | None | crusader_ne_segments.csv | |||
| 25 | 24 | code | 0x58A00 | 0x6D7 | None | crusader_ne_segments.csv | |||
| 26 | 25 | code | 0x59200 | 0x1976 | None | crusader_ne_segments.csv | |||
| 27 | 26 | code | 0x5AE00 | 0x4DE | None | crusader_ne_segments.csv | |||
| 28 | 27 | code | 0x5B400 | 0x57B | None | crusader_ne_segments.csv | |||
| 29 | 28 | code | 0x5BA00 | 0x788 | None | crusader_ne_segments.csv | |||
| 30 | 29 | code | 0x5C400 | 0x190A | Partial | Area-search collision move and step-aware sweep helper lane | AreaSearch_CollideMove; AreaSearch_SweepShapeBetweenPoints; AreaSearch_SweepItemToPointWithStepUp; AreaSearch_SweepShapeBetweenPointsWithStepUp | Current direct callers are still all movement/collision-side and the remaining gap is the earlier policy layer deciding when those paths instantiate the 0x236 queue or whether any non-collision lane feeds it | plan-mid.md; docs/ne-hole-filling-priorities.md; docs/raw-0008-000c.md |
| 31 | 30 | code | 0x5E000 | 0x5071 | None | crusader_ne_segments.csv | |||
| 32 | 31 | code | 0x64000 | 0x6EE | Partial | StorageDataProcess queue create/run/release helpers | StorageDataProcess_Create; StorageDataProcess_Run; StorageDataProcess_Release; StorageDataProcess_RunAndTerminateProcs; storage_process_ref_list_create; storage_process_ref_list_append; storage_process_ref_list_terminate_item_matches; storage_process_ref_list_destroy | Still needs caller-side recovery beyond the verified collision producer and any stronger subsystem naming than the local hit/got-hit storage queue | plan-mid.md; docs/ne-hole-filling-priorities.md; docs/raw-0008-000c.md |
| 33 | 32 | code | 0x64800 | 0x56A | None | crusader_ne_segments.csv | |||
| 34 | 33 | code | 0x65000 | 0x10D7 | None | crusader_ne_segments.csv | |||
| 35 | 34 | code | 0x66600 | 0x253A | None | crusader_ne_segments.csv | |||
| 36 | 35 | code | 0x69400 | 0xF67 | None | crusader_ne_segments.csv | |||
| 37 | 36 | code | 0x6A600 | 0x69F | None | crusader_ne_segments.csv | |||
| 38 | 37 | code | 0x6AE00 | 0x636 | None | crusader_ne_segments.csv | |||
| 39 | 38 | code | 0x6B600 | 0x2318 | None | crusader_ne_segments.csv | |||
| 40 | 39 | code | 0x6E200 | 0x3416 | None | crusader_ne_segments.csv | |||
| 41 | 40 | code | 0x72200 | 0x1E7A | None | crusader_ne_segments.csv | |||
| 42 | 41 | code | 0x74600 | 0x28D | None | crusader_ne_segments.csv | |||
| 43 | 42 | code | 0x74A00 | 0xC9C | None | crusader_ne_segments.csv | |||
| 44 | 43 | code | 0x75A00 | 0x336F | Partial | Gameplay targeting/facing repair cluster | entity_set_at_target_update_facing; seg043_func_0090; seg043_func_021c | Two repaired functions remain positional and thunk-heavy | crusader_decompilation_notes.md; plan-mid.md |
| 45 | 44 | code | 0x79400 | 0x7F8 | None | crusader_ne_segments.csv | |||
| 46 | 45 | code | 0x79E00 | 0x200 | None | crusader_ne_segments.csv | |||
| 47 | 46 | code | 0x7A200 | 0x7DC | None | crusader_ne_segments.csv | |||
| 48 | 47 | code | 0x7AC00 | 0x9B4 | None | crusader_ne_segments.csv | |||
| 49 | 48 | code | 0x7B800 | 0x63 | None | crusader_ne_segments.csv | |||
| 50 | 49 | code | 0x7BA00 | 0x1E3F | Partial | Watch/camera controller object lane | watch_entity_controller_create_global; watch_entity_controller_create; watch_entity_controller_dispatch_if_present; entity_set_watch_ptr | The 0x2bd8 lane is now a real shared watch/controller object with verified vtable +0x2c/+0x30 dispatch, and the startup/display handoff bodies consistently raise or clear the borrowed active-dispatch hold byte around that controller phase; the exact controller-vs-watched-entity ownership label is still open | crusader_decompilation_notes.md; plan-mid.md |
| 51 | 50 | code | 0x7DE00 | 0x9C8 | None | crusader_ne_segments.csv | |||
| 52 | 51 | code | 0x7EA00 | 0x1D02 | None | crusader_ne_segments.csv | |||
| 53 | 52 | code | 0x80A00 | 0x1D65 | None | crusader_ne_segments.csv | |||
| 54 | 53 | code | 0x82C00 | 0x10DE | None | crusader_ne_segments.csv | |||
| 55 | 54 | code | 0x84000 | 0x5 | None | Short stub-sized segment | crusader_ne_segments.csv | ||
| 56 | 55 | code | 0x84200 | 0xA06 | None | crusader_ne_segments.csv | |||
| 57 | 56 | code | 0x85000 | 0x706 | None | crusader_ne_segments.csv | |||
| 58 | 57 | code | 0x85A00 | 0x79B | None | crusader_ne_segments.csv | |||
| 59 | 58 | code | 0x86400 | 0x44B | None | crusader_ne_segments.csv | |||
| 60 | 59 | code | 0x86A00 | 0x4288 | None | crusader_ne_segments.csv | |||
| 61 | 60 | code | 0x8B600 | 0x231 | None | crusader_ne_segments.csv | |||
| 62 | 61 | code | 0x8BA00 | 0x1B6C | Foothold | Entity/timer dispatch guard and period helpers | timer_entity_enable_wrapper; entity_check_flag_0x4000; entity_set_event_type_checked; entity_set_update_period_and_reschedule | Several wrappers still resolve into thunk-heavy paths and need caller-side semantic naming | crusader_decompilation_notes.md |
| 63 | 62 | code | 0x8DA00 | 0x85F | Foothold | Entry word-list lifecycle helpers | entity_word_list_destroy | Caller-side object-role mapping still needed for strong behavioral names | crusader_decompilation_notes.md |
| 64 | 63 | code | 0x8E400 | 0x519 | None | crusader_ne_segments.csv | |||
| 65 | 64 | code | 0x8EA00 | 0x3B1 | Foothold | Global one-shot gate/dispatch control | FUN_0008_eb43; FUN_0008_ebe7; FUN_0008_eac8; FUN_0008_ec23 | Subsystem identity of the gate path remains unresolved; names intentionally conservative | crusader_decompilation_notes.md |
| 66 | 65 | code | 0x8F000 | 0x5BD | None | crusader_ne_segments.csv | |||
| 67 | 66 | code | 0x8F800 | 0x4A9 | None | crusader_ne_segments.csv | |||
| 68 | 67 | code | 0x8FE00 | 0x839 | None | crusader_ne_segments.csv | |||
| 69 | 68 | code | 0x90800 | 0xB4A | None | crusader_ne_segments.csv | |||
| 70 | 69 | code | 0x91800 | 0x2A0 | None | crusader_ne_segments.csv | |||
| 71 | 70 | code | 0x91C00 | 0xF24 | Partial | DOS file-handle lifecycle and owner-resource twin file-family loaders | file_handle_alloc_init_and_open; file_handle_open_with_mode | Exact DOS open/create flags and the per-family record schema behind the twin `0009:67b6` / `0009:6916` loader passes still need caller-side decoding | crusader_decompilation_notes.md; docs/raw-000a-000d.md; docs/raw-0008-000c.md |
| 72 | 71 | code | 0x92E00 | 0x6C2 | None | crusader_ne_segments.csv | |||
| 73 | 72 | code | 0x93600 | 0xCA1 | None | crusader_ne_segments.csv | |||
| 74 | 73 | code | 0x94600 | 0x9AA | None | crusader_ne_segments.csv | |||
| 75 | 74 | code | 0x95200 | 0x337 | None | crusader_ne_segments.csv | |||
| 76 | 75 | code | 0x95600 | 0x1428 | None | crusader_ne_segments.csv | |||
| 77 | 76 | code | 0x96E00 | 0x627 | Foothold | VGA palette read/write/free helpers | vga_palette_write; vga_palette_read; palette_free_if_set | Need caller-side analysis to classify higher-level palette transaction semantics | crusader_decompilation_notes.md |
| 78 | 77 | code | 0x97600 | 0x616 | Foothold | Palette buffer clone/metadata setup | palette_buffer_alloc_copy_from_source | Need caller-side analysis to separate generic palette clone use from callback-specific staging | crusader_decompilation_notes.md |
| 79 | 78 | code | 0x97E00 | 0x634 | None | crusader_ne_segments.csv | |||
| 80 | 79 | code | 0x98600 | 0x421 | None | crusader_ne_segments.csv | |||
| 81 | 80 | code | 0x98C00 | 0xF27 | Foothold | Conditional render/callback dispatch and surface release | entity_conditional_render_dispatch; surface_release_internal; surface_release_and_maybe_free | 0x4588 callback object still lacks a concrete subsystem name | crusader_decompilation_notes.md |
| 82 | 81 | code | 0x99E00 | 0x320 | None | crusader_ne_segments.csv | |||
| 83 | 82 | code | 0x9A200 | 0x1C8A | Partial | Allocator head-table allocation and phase finalize | allocator_try_alloc_from_head_table; allocator_phase_finalize_pass; allocator_head_try_alloc_block; allocator_head_free_block; allocator_head_finalize_sweep | 0x4588 callback object subsystem identity still unresolved | crusader_decompilation_notes.md; plan-mid.md |
| 84 | 83 | code | 0x9C400 | 0x31E | Foothold | Allocator node/header helpers | event_queue_push; packed size/header helpers | Mostly structural helper layer | crusader_decompilation_notes.md |
| 85 | 84 | code | 0x9C800 | 0x1478 | None | crusader_ne_segments.csv | |||
| 86 | 85 | code | 0x9E000 | 0x404 | Foothold | Allocator work token helpers | token reserve/release and commit helpers | Needs clearer subsystem naming | crusader_decompilation_notes.md |
| 87 | 86 | code | 0x9E600 | 0x40F6 | None | crusader_ne_segments.csv | |||
| 88 | 87 | code | 0xA2800 | 0x50C | None | crusader_ne_segments.csv | |||
| 89 | 88 | code | 0xA2E00 | 0x523 | None | crusader_ne_segments.csv | |||
| 90 | 89 | code | 0xA3400 | 0x373 | None | crusader_ne_segments.csv | |||
| 91 | 90 | code | 0xA3800 | 0x9C6 | Partial | Item movement legality, collision-info, and directional cache-offset helpers | Item_LegalMoveToPoint; Item_LegalMoveToPointWithCollisionInfo; ItemCache_PushAndPopToDirectionalOffset | Still needs the surrounding item-move dispatcher/flags policy and stronger linkage to the upstream queue-instantiation layer | plan-mid.md; docs/ne-hole-filling-priorities.md; docs/raw-0008-000c.md |
| 92 | 91 | code | 0xA4400 | 0x6FA | Partial | RNG, fatal-report helpers, and runtime callback/video-state lifecycle | fatal_error_report_fmt_a_and_exit; fatal_error_report_buffered_fmt_and_exit; fatal_error_report_fmt_c_and_exit; rng_set_seed; rng_next_modulo; runtime_callback_object_init_once; runtime_callback_object_teardown_once; video_bios_state_snapshot; video_mode_set_and_record_state | Exact fatal-report template text and callback object subsystem identity still need tighter recovery | crusader_decompilation_notes.md; plan-mid.md |
| 93 | 92 | code | 0xA4E00 | 0x59E | None | crusader_ne_segments.csv | |||
| 94 | 93 | code | 0xA5600 | 0x4F1 | None | crusader_ne_segments.csv | |||
| 95 | 94 | code | 0xA5E00 | 0x606 | Partial | Tracked handle table control | tracked_entity_handle_table_init; tracked_entity_handle_table_shutdown; tracked_entity_handle_table_clear_and_dispatch | Downstream dispatch tail still unresolved | crusader_decompilation_notes.md |
| 96 | 95 | code | 0xA6600 | 0xC9F | Partial | Cache manager init/reset and 0x4588 runtime callback lifecycle | cache_init; cache_reset_runtime_state; cache_shutdown; entity_cleanup_resources_and_dispatch | Concrete 0x4588 callback object name and field-level role mapping remain unresolved | crusader_decompilation_notes.md; plan-mid.md |
| 97 | 96 | code | 0xA7600 | 0x582 | None | crusader_ne_segments.csv | |||
| 98 | 97 | code | 0xA7E00 | 0xDB0 | None | crusader_ne_segments.csv | |||
| 99 | 98 | code | 0xA8E00 | 0x68A | None | crusader_ne_segments.csv | |||
| 100 | 99 | code | 0xA9600 | 0x355 | None | Possible raw 000e animation overlap mapping not yet normalized | crusader_ne_segments.csv | ||
| 101 | 100 | code | 0xA9C00 | 0x697 | None | Possible raw 000e animation overlap mapping not yet normalized | crusader_ne_segments.csv | ||
| 102 | 101 | code | 0xAA400 | 0x17BC | None | Possible raw 000e animation overlap mapping not yet normalized | crusader_ne_segments.csv | ||
| 103 | 102 | code | 0xAC000 | 0x73C | None | Possible raw 000e parser mapping not yet normalized | crusader_ne_segments.csv | ||
| 104 | 103 | code | 0xACA00 | 0x16CD | None | Possible raw 000e parser mapping not yet normalized | crusader_ne_segments.csv | ||
| 105 | 104 | code | 0xAE600 | 0x41B | None | crusader_ne_segments.csv | |||
| 106 | 105 | code | 0xAEC00 | 0x9F6 | None | crusader_ne_segments.csv | |||
| 107 | 106 | code | 0xAF800 | 0x1795 | None | crusader_ne_segments.csv | |||
| 108 | 107 | code | 0xB1400 | 0x40C | None | crusader_ne_segments.csv | |||
| 109 | 108 | code | 0xB1A00 | 0x113F | Partial | Active sprite/object state lane | sprite_object_clear_flag40_if_present; sprite_object_set_flag40_if_present; sprite_object_push_state_word; sprite_object_pop_state_word | The 0x4f38 lane is now a verified bounded sprite/object state-word stack at +0x186/+0x196 with a separate local bit-0x40 contract at +0x32. It is reused across startup/display and later UI flows, and it is now clearly separated from both the validated seg005 caller object and the shared active-dispatch hold byte at 0x6828+0x40; the higher-level sprite/object meaning and any link to 0x4588 remain unresolved | crusader_decompilation_notes.md; plan-mid.md |
| 110 | 109 | code | 0xB2E00 | 0x1424 | None | High-value gap around 000b:2e00 still unresolved | crusader_ne_segments.csv; crusader_decomp_progress.md | ||
| 111 | 110 | code | 0xB4400 | 0x4C4 | None | crusader_ne_segments.csv | |||
| 112 | 111 | code | 0xB4A00 | 0x489 | None | crusader_ne_segments.csv | |||
| 113 | 112 | code | 0xB5000 | 0x1670 | None | crusader_ne_segments.csv | |||
| 114 | 113 | code | 0xB6A00 | 0x4A6 | None | crusader_ne_segments.csv | |||
| 115 | 114 | code | 0xB7000 | 0xDF1 | None | crusader_ne_segments.csv | |||
| 116 | 115 | code | 0xB8000 | 0x978 | None | crusader_ne_segments.csv | |||
| 117 | 116 | code | 0xB8C00 | 0xAA3 | None | crusader_ne_segments.csv | |||
| 118 | 117 | code | 0xB9A00 | 0x3157 | None | crusader_ne_segments.csv | |||
| 119 | 118 | code | 0xBD400 | 0xA0A | None | crusader_ne_segments.csv | |||
| 120 | 119 | code | 0xBE200 | 0x419 | None | crusader_ne_segments.csv | |||
| 121 | 120 | code | 0xBE800 | 0x9AE | None | crusader_ne_segments.csv | |||
| 122 | 121 | code | 0xBF400 | 0xACE | None | crusader_ne_segments.csv | |||
| 123 | 122 | code | 0xC0200 | 0x3149 | None | crusader_ne_segments.csv | |||
| 124 | 123 | code | 0xC3C00 | 0xE6D | None | crusader_ne_segments.csv | |||
| 125 | 124 | code | 0xC4E00 | 0x3DD | None | crusader_ne_segments.csv | |||
| 126 | 125 | code | 0xC5400 | 0x1A3E | None | crusader_ne_segments.csv | |||
| 127 | 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, a shared async break/hold depth at 0x31a2 whose outer-loop exit test is visible at 000c:ca11, and the shared active-dispatch owner at 0x6828 whose +0x40 byte is raised immediately after the DS:0x6341 animation ctor path; remaining open work is the exact UI role of the renderer pair, the unresolved script bytes beyond the now-anchored fade controls, and the separate oversized overlap rooted at 000c:db68 | crusader_decompilation_notes.md; plan-mid.md |
| 128 | 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 higher-level transition states and palette-source owners are still unresolved, but the local fade controller, default fade entry paths, active/direction state at 0x630a/0x630b, and the seg126 script-byte selectors 0x5e -> full-down / 0x26 -> full-up (with 0x2a sharing the same post-fade bookkeeping path) are now clear | crusader_decompilation_notes.md; plan-mid.md |
| 129 | 128 | code | 0xCD200 | 0x5D0 | None | crusader_ne_segments.csv | |||
| 130 | 129 | code | 0xCDA00 | 0xD77 | None | crusader_ne_segments.csv | |||
| 131 | 130 | code | 0xCEA00 | 0x47D | None | crusader_ne_segments.csv | |||
| 132 | 131 | code | 0xCF000 | 0x44D | None | crusader_ne_segments.csv | |||
| 133 | 132 | code | 0xCF600 | 0x3EB8 | None | crusader_ne_segments.csv | |||
| 134 | 133 | code | 0xD3800 | 0x215A | Partial | VM masked-context creation, context save/load, and slot-value reload lane | entity_vm_context_try_create_masked_for_entity; entity_vm_context_create_from_slot_index; entity_vm_context_save; entity_vm_context_load; entity_vm_slot_load_value_plus_offset | The outer selector into entity_vm_opcode_sequence_run and the direct caller roles for the `0x0400/0x000a` and `0x0800/0x000b` offset-specialized wrappers remain unresolved, but the generic masked-create hub and persisted slot-plus-offset lane are now stable | plan-mid.md; docs/raw-0008-000c.md; docs/raw-000a-000d.md |
| 135 | 134 | code | 0xD6000 | 0xEF0 | Partial | VM runtime bootstrap, context seeding, and opcode sequencer support | entity_vm_runtime_init_from_path_if_configured; entity_vm_referent_registry_init; entity_vm_runtime_release_slots; entity_vm_runtime_init_slots; entity_vm_opcode_sequence_run | The upstream selector path into entity_vm_opcode_sequence_run and the exact configured owner-file naming at 0x65a still need caller-side recovery, but the runtime bootstrap, persisted slot-plus-offset lane, and sequencer entry/exit contract are now stable enough for partial coverage | plan-mid.md; docs/raw-0008-000c.md; docs/raw-000a-000d.md |
| 136 | 135 | code | 0xD7000 | 0x3B7 | Partial | VM runtime owner-resource helper and paired external file-family loader | entity_vm_runtime_owner_resource_create; entity_vm_runtime_owner_resource_destroy | The helper now has two parallel file-family loops at 0009:67b6 and 0009:6916 feeding separate buffers, but the exact per-family record schema and higher-level resource names are still unresolved | plan-mid.md; docs/raw-0008-000c.md |
| 137 | 136 | code | 0xD7600 | 0x5BD | Partial | Shared active dispatch-entry owner and hold-state controller | active_dispatch_entry_mark_enabled; active_dispatch_entry_mark_disabled; active_dispatch_entry_create_default | The shared active entry is now tied to the seg126 DS:0x6341 transition-animation path and to the shared 0x31a2 break/hold depth; current evidence also separates its borrowed +0x40 presentation hold token from the seg108-local 0x4f38 bit-0x40 lane, but the exact higher-level transition/callback subsystem name is still unresolved | crusader_decompilation_notes.md; plan-mid.md |
| 138 | 137 | code | 0xD7E00 | 0xFBB | Partial | Palette and dispatch-entry emission helper family | entity_dispatch_entry_init_runtime_state; entity_dispatch_entry_release_runtime_state; vga_palette_set_all_black; vga_palette_set_all_white; vga_palette_set_all_rgb; dispatch_entry_create_black_palette_state_active; dispatch_entry_create_grayscale_palette_state_active; dispatch_entry_create_solid_palette_state_active | Higher-level event/script meaning is still unresolved, especially the paired 0x68bf object and the exact role of the 0004:5ad4-5b6e caller sequence | crusader_decompilation_notes.md; plan-mid.md |
| 139 | 138 | code | 0xD9200 | 0x32E4 | Partial | Entity cleanup/finalize with callback, watch-controller release, and dispatch-entry palette emission | entity_cleanup_resources_and_dispatch; sprite_redraw_global_if_active; FUN_000d_938c | Concrete callback-object subsystem naming is still unresolved, but this lane now has verified caller-side control of watch/controller state at 0x2bd8, uses the shared active-dispatch byte +0x40 as a borrowed presentation hold token rather than a local owner install, and emits two distinct 0x4588 payload pairs (entity +0x12d/+0x12f and +0x74f/+0x751) in addition to the palette-emission helpers | crusader_decompilation_notes.md; plan-mid.md |
| 140 | 139 | code | 0xDCC00 | 0x984 | None | crusader_ne_segments.csv | |||
| 141 | 140 | code | 0xDD800 | 0xC6F | None | crusader_ne_segments.csv | |||
| 142 | 141 | code | 0xDE600 | 0x2B | None | Short stub-sized segment | crusader_ne_segments.csv | ||
| 143 | 142 | code | 0xDE800 | 0x4371 | None | crusader_ne_segments.csv | |||
| 144 | 143 | code | 0xE3400 | 0x6F5 | None | crusader_ne_segments.csv | |||
| 145 | 144 | data | 0xE3C00 | 0x8DBC | None | Large data segment not yet classified | crusader_ne_segments.csv | ||
| 146 | 145 | data | 0x0 | 0x0 | None | Zero-length data segment placeholder | crusader_ne_segments.csv |