map_*3 Consumer Review
map-extra-source-display-and-active-object-overlay-path-grounded
map_*3 CNS and rect tables are loaded by the resource VM. field0x28 is now grounded as a draw-source selector: high word = surface slot, low word = EXE source-rect/frame index. For map_*3 examples the slot is 0x000c. The active object x/y/w/h bytes are separately grounded as bounds/hotspot values by the movement/contact consumer. The common overlay renderer consumes field0x28 plus object+0x1c/+0x20 projected draw coordinates, so static objects are very likely drawn as active overlays above the map. Active opcode 0x64 is now identified as a tile-to-draw projection command: it converts stream tile x/y minus camera origin into object+0x1c/+0x20 while updating object+0xe8/+0xea. Known manual coordinates have several opcode64 hits, including map1_02b (15,8), but the exact binding from every static map_*3 initializer row to a map/resource root is still incomplete. No direct active opcode 0x58 live-layer write table was found for the known door coordinates.
- source rect consumer grounded:
True - display consumer grounded:
True - field0x28 draw source selector grounded:
True - active bounds/hotspot consumer grounded:
True - active overlay draw path found:
True - draw position command path found:
True - static initializer draw-position binding still open:
True - active redraw slot 0x000c hits:
1['0x00450676'] - resource op0c mode30 slot0c count:
115 - active object bounds/hotspot initializer evidence: found
- field0x28 slot 0x000c rows:
198 - known manual placements matched:
15/15 - opcode 0x64 tile-to-draw known coordinate hits:
4 - direct layer-write coordinate table proof: not found
Grounded Consumers
| Handler | Name | Effect |
|---|---|---|
0x004245da | resource opcode 0x11/0x12/0x16 load surface | loads CNS through 0x00422f7c and registers surface object through 0x0041878c/0x004186e5 |
0x0041878c | rect surface registration | stores object in 0x0055abd8[slot], sets draw callback 0x00419d6c and size callback 0x00419907 |
0x00424313 | resource opcode 0x0c show/register display priority | reads stream slot word and mode byte, then calls 0x004184e2 -> 0x004191ad |
0x00406f2a | active opcode 0x51 redraw slot | reads word [stream+2] and calls 0x00425067 for that surface slot |
0x00425163 | tile redraw consumer | reads live layer0 at 0x00595af0, combines it with current slot at 0x0055b580, then calls 0x004175d3 |
0x00416ce2 | active overlay draw source selector | reads object+0x28, splits low word as source rect/frame index and high word as surface slot via 0x0055abd8; reads object+0x1c/+0x20 as projected draw x/y |
0x00424cd6 | object dirty/occlusion rect projection | calls 0x00416ce2, converts the returned pixel rect to 16px tile coverage, and updates 0x005957d0 dirty/occlusion flags |
0x00431ca6 | active object bounds/contact consumer | iterates active objects at 0x00574100..0x005741ec and reads object+0xe6/+0xe7 size plus object+0xe8/+0xea tile position for movement/contact overlap |
opcode 0x64 -> 0x00407d09 / opcode 0x70 -> 0x004090d2-like path | active command tile-to-draw projection | for matching active objects, converts stream tile x/y minus camera origin 0x004576dc/0x004576de into object+0x1c/+0x20 fixed-point draw coordinates and mirrors tile x/y into object+0xe8/+0xea |
0x00407686 | active opcode 0x58 live layer writer | writes a tile/layer word directly to 0x00595af0 or 0x0058d7d0 at command x/y; known map_*3 door coordinates have zero hits here |
Example Resource Rows
| Map | Asset | Load | Show | Manual Placement |
|---|---|---|---|---|
map1_02b | map_b3 | op11 mode=0x30 slot=0x000c cns=0x0043c070 rectTable=0x0043c17a | op0c mode=0x30 slot=0x000c | map_b3 R01 at tile (15,8), user-confirmed |
map2_02d | map_d3 | op11 mode=0x30 slot=0x000c cns=0x00449514 rectTable=0x0044966a | op0c mode=0x30 slot=0x000c | map_d3 R01 at (8,7),(20,7),(36,7), R02 at (71,6), user-corrected |
map3_02f | map_f3 | op11 mode=0x30 slot=0x000c cns=0x0043c091 rectTable=0x0043c17a | op0c mode=0x30 slot=0x000c | map_f3 R01 eight doors, R02 one door, user-confirmed |
Active Object Placement Matches
field0x28 high word = surface slot, low word = EXE source-rect/frame index; for map_*3 examples the slot is 0x000c. x/y/w/h are active object bounds/hotspots consumed by movement/contact code. Opcode 0x64 separately projects stream tile x/y into object+0x1c/+0x20 draw coordinates and mirrors x/y into object+0xe8/+0xea. Repeated initializer rows with identical bounds/source are expected when visually similar maps share door/building layout but vary NPC or scenario resources.
| Label | field0x28 | Tile | Size | Matches | Note | Initializer VAs |
|---|---|---|---|---|---|---|
map1_02b map_b3 R01 | 0x000c0000 | 15,8 | 3x6 | 1 | user-confirmed door/object | 0x00501fd8 |
map2_02d map_d3 R01-a | 0x000c0000 | 8,7 | 3x4 | 6 | user-corrected door | 0x0044b0dc, 0x004791e0, 0x004f2d30, 0x005153ac, 0x0053c6bc, 0x00540aa4 |
map2_02d map_d3 R01-b | 0x000c0000 | 20,7 | 3x4 | 6 | user-corrected door | 0x0044b12c, 0x00479254, 0x004f2d80, 0x005153fc, 0x0053c70c, 0x00540af4 |
map2_02d map_d3 R01-c | 0x000c0000 | 36,7 | 3x4 | 6 | user-corrected door | 0x0044b1cc, 0x0047933c, 0x004f2e20, 0x0051549c, 0x0053c7ac, 0x00540b94 |
map2_02d map_d3 R02 | 0x000c0001 | 71,6 | 5x2 | 6 | user-corrected large door | 0x0044b21c, 0x004793b0, 0x004f2e70, 0x005154ec, 0x0053c7fc, 0x00540be4 |
map3_02f map_f3 R02 | 0x000c0001 | 19,20 | 3x4 | 2 | user-confirmed door | 0x00474930, 0x004c9f94 |
map3_02f map_f3 R01-a | 0x000c0000 | 46,20 | 3x4 | 2 | user-confirmed door | 0x00474980, 0x004c9fe4 |
map3_02f map_f3 R01-b | 0x000c0000 | 62,20 | 3x4 | 2 | user-confirmed door | 0x00474f4c, 0x004ca4d0 |
map3_02f map_f3 R01-c | 0x000c0000 | 82,20 | 3x4 | 2 | user-confirmed door | 0x00474a70, 0x004ca0d4 |
map3_02f map_f3 R01-d | 0x000c0000 | 98,20 | 3x4 | 2 | user-confirmed door | 0x00474ba4, 0x004ca1d0 |
map3_02f map_f3 R01-e | 0x000c0000 | 46,41 | 3x4 | 2 | user-confirmed door | 0x004749d0, 0x004ca034 |
map3_02f map_f3 R01-f | 0x000c0000 | 62,41 | 3x4 | 2 | user-confirmed door | 0x00474a20, 0x004ca084 |
map3_02f map_f3 R01-g | 0x000c0000 | 82,41 | 3x4 | 2 | user-confirmed door | 0x00474ce4, 0x004ca2d8 |
map3_02f map_f3 R01-h | 0x000c0000 | 98,41 | 3x4 | 2 | user-confirmed door | 0x00474e18, 0x004ca3d4 |
map2_02d map_d3 extra candidate | 0x000c0000 | 11,32 | 3x4 | 6 | EXE candidate repeated with the same map_d3 door rect; needs visual/gameplay review | 0x0044b17c, 0x004792c8, 0x004f2dd0, 0x0051544c, 0x0053c75c, 0x00540b44 |
Known Coordinate Negative Scan
| Label | Coord | opcode 0x58 hits |
|---|---|---|
| map1_02b map_b3 R01 | 15,8 | 0 |
| map2_02d map_d3 R01-a | 8,7 | 0 |
| map2_02d map_d3 R01-b | 20,7 | 0 |
| map2_02d map_d3 R01-c | 36,7 | 0 |
| map2_02d map_d3 R02 | 71,6 | 0 |
| map3_02f map_f3 R02 | 19,20 | 0 |
| map3_02f map_f3 R01-a | 46,20 | 0 |
| map3_02f map_f3 R01-b | 62,20 | 0 |
| map3_02f map_f3 R01-c | 82,20 | 0 |
| map3_02f map_f3 R01-d | 98,20 | 0 |
| map3_02f map_f3 R01-e | 46,41 | 0 |
| map3_02f map_f3 R01-f | 62,41 | 0 |
| map3_02f map_f3 R01-g | 82,41 | 0 |
| map3_02f map_f3 R01-h | 98,41 | 0 |
Tile-To-Draw Projection Scan
tile-to-draw projection: mode, tile x/y, object id, state/action; updates active object projected draw x/y
| Label | Coord | opcode 0x64 hits | Hits |
|---|---|---|---|
| map1_02b map_b3 R01 | 15,8 | 1 | 0x004917d8 oid=0x01 state=0x02 |
| map2_02d map_d3 R01-a | 8,7 | 0 | |
| map2_02d map_d3 R01-b | 20,7 | 0 | |
| map2_02d map_d3 R01-c | 36,7 | 0 | |
| map2_02d map_d3 R02 | 71,6 | 0 | |
| map3_02f map_f3 R02 | 19,20 | 3 | 0x0043cde4 oid=0x00 state=0x01, 0x004953b8 oid=0x01 state=0x02, 0x0049552c oid=0x01 state=0x02 |
| map3_02f map_f3 R01-a | 46,20 | 0 | |
| map3_02f map_f3 R01-b | 62,20 | 0 | |
| map3_02f map_f3 R01-c | 82,20 | 0 | |
| map3_02f map_f3 R01-d | 98,20 | 0 | |
| map3_02f map_f3 R01-e | 46,41 | 0 | |
| map3_02f map_f3 R01-f | 62,41 | 0 | |
| map3_02f map_f3 R01-g | 82,41 | 0 | |
| map3_02f map_f3 R01-h | 98,41 | 0 |