- Introduced new file `vm_mask_ladder.tsv` containing detailed mappings for Crusader USECODE VM masks and their associated descriptors. - Added comprehensive documentation in `scummvm-crusader-reference.md` outlining the structure, findings, and implications for reverse-engineering the Crusader engine within ScummVM. - Created `usecode-roundtrip-ir.md` to document the plan for converting Crusader USECODE bytes into a human-readable format, detailing the container layout, event names, and intrinsic tables. - Implemented a PowerShell script `temp_usecode_sample.ps1` for extracting and analyzing USECODE data from the Crusader FLX files, providing insights into class and event structures.
146 lines
No EOL
18 KiB
CSV
146 lines
No EOL
18 KiB
CSV
"Segment","Type","FileOffset","Length","CoverageStatus","KnownSubsystem","KeyNamedFunctions","Blockers","NotesSource"
|
|
"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"
|
|
"2","code","0x40000","0x2B0","None","","","","crusader_ne_segments.csv"
|
|
"3","code","0x40400","0x55A","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"5","code","0x41E00","0x8D7","Foothold","Startup/display orchestration and large runtime handoff","FUN_0004_60c0; FUN_0004_1e00","Recovered bodies now exist, but exact subsystem naming and higher-level transition meaning remain open","crusader_decompilation_notes.md; plan-mid.md"
|
|
"6","code","0x42C00","0x75E","None","","","","crusader_ne_segments.csv"
|
|
"7","code","0x43600","0x484","None","","","","crusader_ne_segments.csv"
|
|
"8","code","0x43C00","0x1386","None","","","","crusader_ne_segments.csv"
|
|
"9","code","0x45400","0x495","None","","","","crusader_ne_segments.csv"
|
|
"10","code","0x45A00","0xD92","None","","","","crusader_ne_segments.csv"
|
|
"11","code","0x46E00","0x5B1","None","","","","crusader_ne_segments.csv"
|
|
"12","code","0x47600","0x94B","None","","","","crusader_ne_segments.csv"
|
|
"13","code","0x48200","0x1F6C","None","","","","crusader_ne_segments.csv"
|
|
"14","code","0x4AA00","0x526","None","","","","crusader_ne_segments.csv"
|
|
"15","code","0x4B200","0x1C68","None","","","","crusader_ne_segments.csv"
|
|
"16","code","0x4D400","0x677","None","","","","crusader_ne_segments.csv"
|
|
"17","code","0x4DC00","0x1A7","None","","","","crusader_ne_segments.csv"
|
|
"18","code","0x4E000","0x7E9","None","","","","crusader_ne_segments.csv"
|
|
"19","code","0x4EA00","0xB4D","None","","","","crusader_ne_segments.csv"
|
|
"20","code","0x4F800","0x878","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"22","code","0x55000","0x2BD6","None","","","","crusader_ne_segments.csv"
|
|
"23","code","0x58200","0x5D6","None","","","","crusader_ne_segments.csv"
|
|
"24","code","0x58A00","0x6D7","None","","","","crusader_ne_segments.csv"
|
|
"25","code","0x59200","0x1976","None","","","","crusader_ne_segments.csv"
|
|
"26","code","0x5AE00","0x4DE","None","","","","crusader_ne_segments.csv"
|
|
"27","code","0x5B400","0x57B","None","","","","crusader_ne_segments.csv"
|
|
"28","code","0x5BA00","0x788","None","","","","crusader_ne_segments.csv"
|
|
"29","code","0x5C400","0x190A","None","","","","crusader_ne_segments.csv"
|
|
"30","code","0x5E000","0x5071","None","","","","crusader_ne_segments.csv"
|
|
"31","code","0x64000","0x6EE","None","","","","crusader_ne_segments.csv"
|
|
"32","code","0x64800","0x56A","None","","","","crusader_ne_segments.csv"
|
|
"33","code","0x65000","0x10D7","None","","","","crusader_ne_segments.csv"
|
|
"34","code","0x66600","0x253A","None","","","","crusader_ne_segments.csv"
|
|
"35","code","0x69400","0xF67","None","","","","crusader_ne_segments.csv"
|
|
"36","code","0x6A600","0x69F","None","","","","crusader_ne_segments.csv"
|
|
"37","code","0x6AE00","0x636","None","","","","crusader_ne_segments.csv"
|
|
"38","code","0x6B600","0x2318","None","","","","crusader_ne_segments.csv"
|
|
"39","code","0x6E200","0x3416","None","","","","crusader_ne_segments.csv"
|
|
"40","code","0x72200","0x1E7A","None","","","","crusader_ne_segments.csv"
|
|
"41","code","0x74600","0x28D","None","","","","crusader_ne_segments.csv"
|
|
"42","code","0x74A00","0xC9C","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"44","code","0x79400","0x7F8","None","","","","crusader_ne_segments.csv"
|
|
"45","code","0x79E00","0x200","None","","","","crusader_ne_segments.csv"
|
|
"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","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"
|
|
"53","code","0x82C00","0x10DE","None","","","","crusader_ne_segments.csv"
|
|
"54","code","0x84000","0x5","None","","","Short stub-sized segment","crusader_ne_segments.csv"
|
|
"55","code","0x84200","0xA06","None","","","","crusader_ne_segments.csv"
|
|
"56","code","0x85000","0x706","None","","","","crusader_ne_segments.csv"
|
|
"57","code","0x85A00","0x79B","None","","","","crusader_ne_segments.csv"
|
|
"58","code","0x86400","0x44B","None","","","","crusader_ne_segments.csv"
|
|
"59","code","0x86A00","0x4288","None","","","","crusader_ne_segments.csv"
|
|
"60","code","0x8B600","0x231","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"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"
|
|
"63","code","0x8E400","0x519","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"65","code","0x8F000","0x5BD","None","","","","crusader_ne_segments.csv"
|
|
"66","code","0x8F800","0x4A9","None","","","","crusader_ne_segments.csv"
|
|
"67","code","0x8FE00","0x839","None","","","","crusader_ne_segments.csv"
|
|
"68","code","0x90800","0xB4A","None","","","","crusader_ne_segments.csv"
|
|
"69","code","0x91800","0x2A0","None","","","","crusader_ne_segments.csv"
|
|
"70","code","0x91C00","0xF24","Foothold","File-handle allocation/open wrappers","file_handle_alloc_init_and_open; file_handle_open_with_mode","Exact DOS open/create flags and mode semantics still need caller-side argument decoding","crusader_decompilation_notes.md"
|
|
"71","code","0x92E00","0x6C2","None","","","","crusader_ne_segments.csv"
|
|
"72","code","0x93600","0xCA1","None","","","","crusader_ne_segments.csv"
|
|
"73","code","0x94600","0x9AA","None","","","","crusader_ne_segments.csv"
|
|
"74","code","0x95200","0x337","None","","","","crusader_ne_segments.csv"
|
|
"75","code","0x95600","0x1428","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"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"
|
|
"78","code","0x97E00","0x634","None","","","","crusader_ne_segments.csv"
|
|
"79","code","0x98600","0x421","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"81","code","0x99E00","0x320","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"83","code","0x9C400","0x31E","Foothold","Allocator node/header helpers","event_queue_push; packed size/header helpers","Mostly structural helper layer","crusader_decompilation_notes.md"
|
|
"84","code","0x9C800","0x1478","None","","","","crusader_ne_segments.csv"
|
|
"85","code","0x9E000","0x404","Foothold","Allocator work token helpers","token reserve/release and commit helpers","Needs clearer subsystem naming","crusader_decompilation_notes.md"
|
|
"86","code","0x9E600","0x40F6","None","","","","crusader_ne_segments.csv"
|
|
"87","code","0xA2800","0x50C","None","","","","crusader_ne_segments.csv"
|
|
"88","code","0xA2E00","0x523","None","","","","crusader_ne_segments.csv"
|
|
"89","code","0xA3400","0x373","None","","","","crusader_ne_segments.csv"
|
|
"90","code","0xA3800","0x9C6","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"92","code","0xA4E00","0x59E","None","","","","crusader_ne_segments.csv"
|
|
"93","code","0xA5600","0x4F1","None","","","","crusader_ne_segments.csv"
|
|
"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"
|
|
"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"
|
|
"96","code","0xA7600","0x582","None","","","","crusader_ne_segments.csv"
|
|
"97","code","0xA7E00","0xDB0","None","","","","crusader_ne_segments.csv"
|
|
"98","code","0xA8E00","0x68A","None","","","","crusader_ne_segments.csv"
|
|
"99","code","0xA9600","0x355","None","","","Possible raw 000e animation overlap mapping not yet normalized","crusader_ne_segments.csv"
|
|
"100","code","0xA9C00","0x697","None","","","Possible raw 000e animation overlap mapping not yet normalized","crusader_ne_segments.csv"
|
|
"101","code","0xAA400","0x17BC","None","","","Possible raw 000e animation overlap mapping not yet normalized","crusader_ne_segments.csv"
|
|
"102","code","0xAC000","0x73C","None","","","Possible raw 000e parser mapping not yet normalized","crusader_ne_segments.csv"
|
|
"103","code","0xACA00","0x16CD","None","","","Possible raw 000e parser mapping not yet normalized","crusader_ne_segments.csv"
|
|
"104","code","0xAE600","0x41B","None","","","","crusader_ne_segments.csv"
|
|
"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","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"
|
|
"112","code","0xB5000","0x1670","None","","","","crusader_ne_segments.csv"
|
|
"113","code","0xB6A00","0x4A6","None","","","","crusader_ne_segments.csv"
|
|
"114","code","0xB7000","0xDF1","None","","","","crusader_ne_segments.csv"
|
|
"115","code","0xB8000","0x978","None","","","","crusader_ne_segments.csv"
|
|
"116","code","0xB8C00","0xAA3","None","","","","crusader_ne_segments.csv"
|
|
"117","code","0xB9A00","0x3157","None","","","","crusader_ne_segments.csv"
|
|
"118","code","0xBD400","0xA0A","None","","","","crusader_ne_segments.csv"
|
|
"119","code","0xBE200","0x419","None","","","","crusader_ne_segments.csv"
|
|
"120","code","0xBE800","0x9AE","None","","","","crusader_ne_segments.csv"
|
|
"121","code","0xBF400","0xACE","None","","","","crusader_ne_segments.csv"
|
|
"122","code","0xC0200","0x3149","None","","","","crusader_ne_segments.csv"
|
|
"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","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"
|
|
"131","code","0xCF000","0x44D","None","","","","crusader_ne_segments.csv"
|
|
"132","code","0xCF600","0x3EB8","None","","","","crusader_ne_segments.csv"
|
|
"133","code","0xD3800","0x215A","None","","","","crusader_ne_segments.csv"
|
|
"134","code","0xD6000","0xEF0","Foothold","VM runtime bootstrap and post-init seeding","entity_vm_runtime_init_from_path_if_configured; entity_vm_referent_registry_init; entity_vm_runtime_release_slots; entity_vm_runtime_init_slots","Configured path/global at 0x65a and the exact external file format behind the 0x6611 runtime owner table still need tighter classification","plan-mid.md; docs/raw-0008-000c.md"
|
|
"135","code","0xD7000","0x3B7","Foothold","VM runtime owner-resource helper","entity_vm_runtime_owner_resource_create; entity_vm_runtime_owner_resource_destroy","Embedded file-backed helper class and 0x0d-stride slot-table population semantics still need callee-side recovery","plan-mid.md; docs/raw-0008-000c.md"
|
|
"136","code","0xD7600","0x5BD","Foothold","Active dispatch-entry lifecycle helpers","active_dispatch_entry_mark_enabled; active_dispatch_entry_mark_disabled; active_dispatch_entry_create_default","Broader meaning of the active dispatch entry and its relationship to the startup/display lane still needs caller-side confirmation","crusader_decompilation_notes.md; plan-mid.md"
|
|
"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"
|
|
"138","code","0xD9200","0x32E4","Foothold","Entity cleanup/finalize with callback and dispatch-entry palette emission","entity_cleanup_resources_and_dispatch; sprite_redraw_global_if_active","Concrete callback-object subsystem naming is still unresolved; FUN_000d_938c is now verified as a caller-side dispatch-entry/palette emission helper but remains intentionally unnamed","crusader_decompilation_notes.md; plan-mid.md"
|
|
"139","code","0xDCC00","0x984","None","","","","crusader_ne_segments.csv"
|
|
"140","code","0xDD800","0xC6F","None","","","","crusader_ne_segments.csv"
|
|
"141","code","0xDE600","0x2B","None","","","Short stub-sized segment","crusader_ne_segments.csv"
|
|
"142","code","0xDE800","0x4371","None","","","","crusader_ne_segments.csv"
|
|
"143","code","0xE3400","0x6F5","None","","","","crusader_ne_segments.csv"
|
|
"144","data","0xE3C00","0x8DBC","None","","","Large data segment not yet classified","crusader_ne_segments.csv"
|
|
"145","data","0x0","0x0","None","","","Zero-length data segment placeholder","crusader_ne_segments.csv" |