- 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.
6 KiB
6 KiB
| 1 | lane_rank | primary_runtime_lane | descriptor_family | representative_labels | fit_strength | confidence | runtime_ops | mask_pairs | owner_source | loader_evidence | selector_status | why |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 1 | active-event payload lane | event-hub | EVENT | strongest | high | APPEND_UNIQUE_INLINE,APPEND_UNIQUE_INDIRECT,REMOVE_MATCHING_INDIRECT,REMOVE_MATCHING_INLINE,MATERIALIZE_OR_FORWARD_VALUE,PREPEND_INLINE_PAYLOAD,BUILD_ENTITY_LINK_MATRIX,EMIT_OR_PUSHBACK_RESULT,FINALIZE_MIXED_VALUE_TO_OUTPTR | 0x0001:0000,0x0002:0001,0x0004:0002,0x0010:0004,0x0020:0005,0x0200:0009,0x0400:000a,0x0800:000b,0x1000:000c,0x2000:0015,0x4000:000e,0x8000:0007,0x8000:000f | 000d:44df -> 000d:4c99 -> 000d:7000 -> (+0x10/+0x12) + 0x0d*slot + 4 | 0009:67b6/6916 walk helper-owned +0x10/+0x18 tables, format per-entry paths, and then open/read/close files | 0x19/0x1a/0x1b proven in 000d:0988; 0x18 implied; upstream [BP-0x32] seed unresolved | Explicit 69:0A00 event tag plus the richest source/dest/door/link/time/counter payload shape; best current match for the VM payload-chain plus link-matrix lane. |
| 3 | 2 | active-event payload lane | boot-event-core | AND_BOOT,BRO_BOOT,COR_BOOT,VAR_BOOT,REE_BOOT | strong | high | APPEND_UNIQUE_INLINE,APPEND_UNIQUE_INDIRECT,REMOVE_MATCHING_INDIRECT,REMOVE_MATCHING_INLINE,MATERIALIZE_OR_FORWARD_VALUE,PREPEND_INLINE_PAYLOAD,BUILD_ENTITY_LINK_MATRIX,EMIT_OR_PUSHBACK_RESULT,FINALIZE_MIXED_VALUE_TO_OUTPTR | 0x0001:0000,0x0002:0001,0x0004:0002,0x0010:0004,0x0020:0005,0x0200:0009,0x0400:000a,0x0800:000b,0x1000:000c,0x2000:0015,0x4000:000e,0x8000:0007,0x8000:000f | 000d:44df -> 000d:4c99 -> 000d:7000 -> (+0x10/+0x12) + 0x0d*slot + 4 | 0009:67b6/6916 walk helper-owned +0x10/+0x18 tables, format per-entry paths, and then open/read/close files | 0x19/0x1a/0x1b proven in 000d:0988; 0x18 implied; upstream [BP-0x32] seed unresolved | All five _BOOT descriptors share one compact referent,event,counter,item schema and sit beside referent-heavy object islands that fit the same active-event runtime lane. |
| 4 | 3 | active-event payload lane | npc-trigger | NPCTRIG | strong | moderate-high | APPEND_UNIQUE_INLINE,APPEND_UNIQUE_INDIRECT,REMOVE_MATCHING_INDIRECT,REMOVE_MATCHING_INLINE,MATERIALIZE_OR_FORWARD_VALUE,PREPEND_INLINE_PAYLOAD,BUILD_ENTITY_LINK_MATRIX,EMIT_OR_PUSHBACK_RESULT,FINALIZE_MIXED_VALUE_TO_OUTPTR | 0x0001:0000,0x0002:0001,0x0004:0002,0x0010:0004,0x0020:0005,0x0200:0009,0x0400:000a,0x0800:000b,0x1000:000c,0x2000:0015,0x4000:000e,0x8000:0007,0x8000:000f | 000d:44df -> 000d:4c99 -> 000d:7000 -> (+0x10/+0x12) + 0x0d*slot + 4 | 0009:67b6/6916 walk helper-owned +0x10/+0x18 tables, format per-entry paths, and then open/read/close files | 0x19/0x1a/0x1b proven in 000d:0988; 0x18 implied; upstream [BP-0x32] seed unresolved | NPCTRIG carries an explicit event field and sits in the same compact event-bearing core as EVENT and COR_BOOT, but its narrower field set makes it look more satellite than hub. |
| 5 | 4 | active-event payload lane | minimal-event-core | SFXTRIG | moderate | moderate | APPEND_UNIQUE_INLINE,APPEND_UNIQUE_INDIRECT,REMOVE_MATCHING_INDIRECT,REMOVE_MATCHING_INLINE,MATERIALIZE_OR_FORWARD_VALUE,PREPEND_INLINE_PAYLOAD,BUILD_ENTITY_LINK_MATRIX,EMIT_OR_PUSHBACK_RESULT,FINALIZE_MIXED_VALUE_TO_OUTPTR | 0x0001:0000,0x0002:0001,0x0004:0002,0x0010:0004,0x0020:0005,0x0200:0009,0x0400:000a,0x0800:000b,0x1000:000c,0x2000:0015,0x4000:000e,0x8000:0007,0x8000:000f | 000d:44df -> 000d:4c99 -> 000d:7000 -> (+0x10/+0x12) + 0x0d*slot + 4 | 0009:67b6/6916 walk helper-owned +0x10/+0x18 tables, format per-entry paths, and then open/read/close files | 0x19/0x1a/0x1b proven in 000d:0988; 0x18 implied; upstream [BP-0x32] seed unresolved | SFXTRIG keeps the active event tag while stripping most side fields, so it still fits the live event lane but as a smaller attachment form rather than a full hub or boot core. |
| 6 | 5 | active-event payload lane | environmental-event | FLAMEBOX,NOSTRIL,STEAMBOX | moderate | moderate | APPEND_UNIQUE_INLINE,APPEND_UNIQUE_INDIRECT,REMOVE_MATCHING_INDIRECT,REMOVE_MATCHING_INLINE,MATERIALIZE_OR_FORWARD_VALUE,PREPEND_INLINE_PAYLOAD,BUILD_ENTITY_LINK_MATRIX,EMIT_OR_PUSHBACK_RESULT,FINALIZE_MIXED_VALUE_TO_OUTPTR | 0x0001:0000,0x0002:0001,0x0004:0002,0x0010:0004,0x0020:0005,0x0200:0009,0x0400:000a,0x0800:000b,0x1000:000c,0x2000:0015,0x4000:000e,0x8000:0007,0x8000:000f | 000d:44df -> 000d:4c99 -> 000d:7000 -> (+0x10/+0x12) + 0x0d*slot + 4 | 0009:67b6/6916 walk helper-owned +0x10/+0x18 tables, format per-entry paths, and then open/read/close files | 0x19/0x1a/0x1b proven in 000d:0988; 0x18 implied; upstream [BP-0x32] seed unresolved | FLAMEBOX, NOSTRIL, and STEAMBOX share the same active event grammar, but no hazard-specific opcode or mask split is proven yet beyond the generic active-event-biased ladder. |
| 7 | 6 | referent-anchor / payload-owner lane | referent-anchor | JELYHACK,JELYH2 | strong | moderate-high | APPEND_UNIQUE_INLINE,APPEND_UNIQUE_INDIRECT,REMOVE_MATCHING_INDIRECT,REMOVE_MATCHING_INLINE,MATERIALIZE_OR_FORWARD_VALUE | anchor role uses referent registry and payload ownership; no anchor-specific slot mask proven | 000d:44df -> 000d:4c99 -> 000d:7000 -> (+0x10/+0x12) + 0x0d*slot + 4 | 0009:67b6/6916 walk helper-owned +0x10/+0x18 tables, format per-entry paths, and then open/read/close files | 0x19/0x1a/0x1b proven in 000d:0988; 0x18 implied; upstream [BP-0x32] seed unresolved | JELYHACK and JELYH2 are still referent-only, but the VM referent registry and payload-chain machinery now make that a live anchor role rather than inert metadata. |
| 8 | 7 | callback / attachment lane | callback-eventtrigger | SURCAMNS,SURCAMEW | weak-moderate | moderate | MATERIALIZE_OR_FORWARD_VALUE,PUSH_FRAME_WORD_LITERAL,COMPARE_STREAM_DWORD_AND_PUSH_BOOL,FINALIZE_MIXED_VALUE_TO_OUTPTR | no callback-specific mask pair proven; verified ladder still favors active event carriers | 000d:44df -> 000d:4c99 -> 000d:7000 -> (+0x10/+0x12) + 0x0d*slot + 4 | 0009:67b6/6916 walk helper-owned +0x10/+0x18 tables, format per-entry paths, and then open/read/close files | 0x19/0x1a/0x1b proven in 000d:0988; 0x18 implied; upstream [BP-0x32] seed unresolved | SURCAMNS and SURCAMEW are structurally coherent callback holders with eventTrigger tags, but the current mask ladder and opcode evidence still align more strongly with active event carriers than callback-specific dispatch. |