palette-handler-producer-family-grounded-map-binding-unproven
handler table 0x00440538
0x38 -> 0x004060db, 0x39 -> 0x00406206
table-only handlers: True
nested runner callsites: 19
deferred palette apply caller: 0x00411493
exact per-map palette root proven: False
candidate-roots-exist-but-map-execution-binding-unproven
source: out/map_animation_tile_review.json
| opcode | table entry | handler | role |
|---|---|---|---|
| 0x20 | 0x004405b8 | 0x0040448a | stores a resumable frame/nested script pointer at context+0x64; later VM runtime can resume it |
| 0x38 | 0x00440618 | 0x004060db | palette fade/step command handler |
| 0x39 | 0x0044061c | 0x00406206 | palette direct update command handler |
| 0x5a | 0x004406a0 | 0x004077b3 | nested stream producer; calls 0x00402360 with object/list script pointers |
| 0x5b | 0x004406a4 | 0x00407896 | nested stream producer variant; calls 0x00402360 |
| 0x5c | 0x004406a8 | 0x004078eb | nested stream producer variant; calls 0x00402360 |
| 0x5e | 0x004406b0 | 0x004079ff | active/resource object nested execution handler; calls 0x00402360 |
| 0x97 | 0x00440794 | 0x0040be38 | display/object nested execution family; calls 0x00402360 |
| 0x9a | 0x004407a0 | 0x0040c3f4 | display/object nested execution family; calls 0x00402360 several times |
| 0xa0 | 0x004407b8 | 0x0040c948 | display/object nested execution family; calls 0x00402360 |
| 0xa2 | 0x004407c0 | 0x0040cb98 | display/object nested execution family; calls 0x00402360 |
| opcode | handler | len | direct handler calls | dword refs | calls inside handler | modes |
|---|---|---|---|---|---|---|
| 0x38 | 0x004060db | 8 | 0 | 0x00440618 .data | 0x004010d2, 0x00401518, 0x0040146a | mode 0: repeat byte[+2] times; call 0x004010d2 with dword pointer at +4; step current palette list toward target RGB entries / mode 1: repeat byte[+7] times; call 0x00401518 with range bytes +2/+3 and RGB target at +4; step current palette range toward stream RGB / mode 2: repeat byte[+4] times; call 0x0040146a with bytes +2/+3; step current palette range toward backup palette bytes |
| 0x39 | 0x00406206 | 8 | 0 | 0x0044061c .data | 0x00401036, 0x004015b9, 0x00401632, 0x00401699 | mode 0: call 0x00401036 with dword pointer at +4; set current palette list immediately / mode 1: call 0x004015b9 with bytes +2/+3/+4; fill current palette range / mode 2: call 0x00401632 with bytes +2/+3/+4; fill backup palette range / mode 3: call 0x00401699 with dword pointer at +4; set backup palette list |
| helper | role | used by | direct callers | meaning |
|---|---|---|---|---|
| 0x00401036 | current-list-setter | 0x39 mode 0 | 0x0040622c | reads 0xff-terminated entries and writes target RGB nibbles into current palette buffer 0x004676e8 |
| 0x004010d2 | current-list-stepper | 0x38 mode 0 | 0x00406124 | steps current palette list entries one byte toward target RGB entries through 0x0040118e |
| 0x00401518 | current-range-step-to-rgb | 0x38 mode 1 | 0x00406177 | steps current palette range toward immediate RGB bytes from the command stream |
| 0x0040146a | current-range-step-to-backup | 0x38 mode 2 | 0x004061c0 | steps current palette range toward backup palette bytes at 0x00559da1.. |
| 0x004015b9 | current-range-setter | 0x39 mode 1 | 0x00406257 | fills a current palette range with one stream byte value |
| 0x00401632 | backup-range-setter | 0x39 mode 2 | 0x00406282 | fills a backup palette range with one stream byte value |
| 0x00401699 | backup-list-setter | 0x39 mode 3 | 0x00406299 | reads 0xff-terminated entries and writes target RGB nibbles into the backup palette buffer |
| 0x004012c0 | backup-copy-from-current | direct helper | 0x0040632d | copies a current palette range into backup bytes |
| 0x00401344 | current-restore-from-backup | direct helper | 0x0040635b | restores a current palette range from backup bytes and marks the palette dirty |
| 0x004011d5 | current-channel-shift | direct helper | 0x004062ff | shifts current palette channel bytes left/right for a range and marks the palette dirty |
| 0x004013d2 | current-range-copy | direct helper | 0x00406393 | copies one current palette range to another current palette range and marks the palette dirty |
| callsite | classification | opcode(s) | handler | role |
|---|---|---|---|---|
| 0x004077d6 | generic-vm-handler | 0x5a | 0x004077b3 | nested stream producer; calls 0x00402360 with object/list script pointers |
| 0x00407889 | generic-vm-handler | 0x5a | 0x004077b3 | nested stream producer; calls 0x00402360 with object/list script pointers |
| 0x004078d7 | generic-vm-handler | 0x5b | 0x00407896 | nested stream producer variant; calls 0x00402360 |
| 0x0040790b | generic-vm-handler | 0x5c | 0x004078eb | nested stream producer variant; calls 0x00402360 |
| 0x00407beb | generic-vm-handler | 0x5e | 0x004079ff | active/resource object nested execution handler; calls 0x00402360 |
| 0x0040c070 | generic-vm-handler | 0x97 | 0x0040be38 | display/object nested execution family; calls 0x00402360 |
| 0x0040c447 | generic-vm-handler | 0x9a | 0x0040c3f4 | display/object nested execution family; calls 0x00402360 several times |
| 0x0040c466 | generic-vm-handler | 0x9a | 0x0040c3f4 | display/object nested execution family; calls 0x00402360 several times |
| 0x0040c4a4 | generic-vm-handler | 0x9a | 0x0040c3f4 | display/object nested execution family; calls 0x00402360 several times |
| 0x0040ca37 | generic-vm-handler | 0xa0 | 0x0040c948 | display/object nested execution family; calls 0x00402360 |
| 0x0040cc56 | generic-vm-handler | 0xa2 | 0x0040cb98 | display/object nested execution family; calls 0x00402360 |
| 0x0040cca9 | generic-vm-handler | 0xa2 | 0x0040cb98 | display/object nested execution family; calls 0x00402360 |
| 0x004320be | object-display-runtime | object/display runtime nested script callsite outside the handler table | ||
| 0x004321fe | object-display-runtime | object/display runtime nested script callsite outside the handler table | ||
| 0x0043240e | object-display-runtime | object/display runtime nested script callsite outside the handler table | ||
| 0x004325a7 | object-display-runtime | object/display runtime nested script callsite outside the handler table | ||
| 0x00432750 | object-display-runtime | object/display runtime nested script callsite outside the handler table | ||
| 0x00433183 | object-display-runtime | object/display runtime nested script callsite outside the handler table | ||
| 0x004331af | object-display-runtime | object/display runtime nested script callsite outside the handler table |
Alignment counts: {'vm-aligned-local-high': 10, 'vm-aligned-local-medium': 10, 'vm-aligned-local-weak': 9}
Resource binding counts: {'map-binding-unproven': 9, 'near-animated-scene-record-unverified': 2, 'resource-group-contained-nonanimated': 18}
| command | opcode | mode | alignment | best root | resource binding | nearest animated scene records |
|---|---|---|---|---|---|---|
| 0x0043d920 | 0x38 | 1 | vm-aligned-local-high | 0x0043d904 | near-animated-scene-record-unverified | map1_01a 0x0043e798 +3732B; map1_02b 0x0043e7f0 +3820B |
| 0x0043d96c | 0x38 | 2 | vm-aligned-local-high | 0x0043d91c | near-animated-scene-record-unverified | map1_01a 0x0043e798 +3708B; map1_02b 0x0043e7f0 +3796B |
| 0x00440bb8 | 0x38 | 0 | vm-aligned-local-medium | 0x00440bb8 | resource-group-contained-nonanimated | map2_01c 0x00440f90 +984B; map2_13c 0x00440fc8 +1040B |
| 0x00440bc4 | 0x39 | 0 | vm-aligned-local-medium | 0x00440bc4 | resource-group-contained-nonanimated | map2_01c 0x00440f90 +972B; map2_13c 0x00440fc8 +1028B |
| 0x004443c8 | 0x39 | 0 | vm-aligned-local-medium | 0x004443c8 | map-binding-unproven | map2_13c 0x00440fc8 +13312B; map2_01c 0x00440f90 +13368B |
| 0x004443d4 | 0x39 | 0 | vm-aligned-local-medium | 0x004443d4 | map-binding-unproven | map2_13c 0x00440fc8 +13324B; map2_01c 0x00440f90 +13380B |
| 0x004443e0 | 0x39 | 0 | vm-aligned-local-medium | 0x004443e0 | map-binding-unproven | map2_13c 0x00440fc8 +13336B; map2_01c 0x00440f90 +13392B |
| 0x0045c522 | 0x38 | 1 | vm-aligned-local-medium | 0x0045c516 | resource-group-contained-nonanimated | |
| 0x0045c56e | 0x38 | 1 | vm-aligned-local-medium | 0x0045c56e | resource-group-contained-nonanimated | |
| 0x0046c540 | 0x38 | 1 | vm-aligned-local-high | 0x0046c4f0 | resource-group-contained-nonanimated | |
| 0x0046c58c | 0x38 | 2 | vm-aligned-local-high | 0x0046c53c | resource-group-contained-nonanimated | |
| 0x004a6fa8 | 0x38 | 1 | vm-aligned-local-high | 0x004a6f4c | map-binding-unproven | |
| 0x004a6fc0 | 0x38 | 2 | vm-aligned-local-high | 0x004a6f64 | map-binding-unproven | |
| 0x004b0790 | 0x38 | 0 | vm-aligned-local-medium | 0x004b0790 | resource-group-contained-nonanimated | |
| 0x004b079c | 0x39 | 0 | vm-aligned-local-medium | 0x004b079c | resource-group-contained-nonanimated | |
| 0x004d2880 | 0x38 | 0 | vm-aligned-local-medium | 0x004d2864 | map-binding-unproven | |
| 0x004de3e8 | 0x38 | 1 | vm-aligned-local-high | 0x004de388 | resource-group-contained-nonanimated | |
| 0x004dea9c | 0x38 | 1 | vm-aligned-local-high | 0x004dea90 | resource-group-contained-nonanimated | |
| 0x004dfe1c | 0x39 | 1 | vm-aligned-local-high | 0x004dfde8 | resource-group-contained-nonanimated | |
| 0x004dfe60 | 0x38 | 2 | vm-aligned-local-high | 0x004dfe04 | resource-group-contained-nonanimated |