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.

Grounded Consumers

HandlerNameEffect
0x004245daresource opcode 0x11/0x12/0x16 load surfaceloads CNS through 0x00422f7c and registers surface object through 0x0041878c/0x004186e5
0x0041878crect surface registrationstores object in 0x0055abd8[slot], sets draw callback 0x00419d6c and size callback 0x00419907
0x00424313resource opcode 0x0c show/register display priorityreads stream slot word and mode byte, then calls 0x004184e2 -> 0x004191ad
0x00406f2aactive opcode 0x51 redraw slotreads word [stream+2] and calls 0x00425067 for that surface slot
0x00425163tile redraw consumerreads live layer0 at 0x00595af0, combines it with current slot at 0x0055b580, then calls 0x004175d3
0x00416ce2active overlay draw source selectorreads 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
0x00424cd6object dirty/occlusion rect projectioncalls 0x00416ce2, converts the returned pixel rect to 16px tile coverage, and updates 0x005957d0 dirty/occlusion flags
0x00431ca6active object bounds/contact consumeriterates 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 pathactive command tile-to-draw projectionfor 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
0x00407686active opcode 0x58 live layer writerwrites 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

MapAssetLoadShowManual Placement
map1_02bmap_b3op11 mode=0x30 slot=0x000c cns=0x0043c070 rectTable=0x0043c17aop0c mode=0x30 slot=0x000cmap_b3 R01 at tile (15,8), user-confirmed
map2_02dmap_d3op11 mode=0x30 slot=0x000c cns=0x00449514 rectTable=0x0044966aop0c mode=0x30 slot=0x000cmap_d3 R01 at (8,7),(20,7),(36,7), R02 at (71,6), user-corrected
map3_02fmap_f3op11 mode=0x30 slot=0x000c cns=0x0043c091 rectTable=0x0043c17aop0c mode=0x30 slot=0x000cmap_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.

Labelfield0x28TileSizeMatchesNoteInitializer VAs
map1_02b map_b3 R010x000c000015,83x61user-confirmed door/object0x00501fd8
map2_02d map_d3 R01-a0x000c00008,73x46user-corrected door0x0044b0dc, 0x004791e0, 0x004f2d30, 0x005153ac, 0x0053c6bc, 0x00540aa4
map2_02d map_d3 R01-b0x000c000020,73x46user-corrected door0x0044b12c, 0x00479254, 0x004f2d80, 0x005153fc, 0x0053c70c, 0x00540af4
map2_02d map_d3 R01-c0x000c000036,73x46user-corrected door0x0044b1cc, 0x0047933c, 0x004f2e20, 0x0051549c, 0x0053c7ac, 0x00540b94
map2_02d map_d3 R020x000c000171,65x26user-corrected large door0x0044b21c, 0x004793b0, 0x004f2e70, 0x005154ec, 0x0053c7fc, 0x00540be4
map3_02f map_f3 R020x000c000119,203x42user-confirmed door0x00474930, 0x004c9f94
map3_02f map_f3 R01-a0x000c000046,203x42user-confirmed door0x00474980, 0x004c9fe4
map3_02f map_f3 R01-b0x000c000062,203x42user-confirmed door0x00474f4c, 0x004ca4d0
map3_02f map_f3 R01-c0x000c000082,203x42user-confirmed door0x00474a70, 0x004ca0d4
map3_02f map_f3 R01-d0x000c000098,203x42user-confirmed door0x00474ba4, 0x004ca1d0
map3_02f map_f3 R01-e0x000c000046,413x42user-confirmed door0x004749d0, 0x004ca034
map3_02f map_f3 R01-f0x000c000062,413x42user-confirmed door0x00474a20, 0x004ca084
map3_02f map_f3 R01-g0x000c000082,413x42user-confirmed door0x00474ce4, 0x004ca2d8
map3_02f map_f3 R01-h0x000c000098,413x42user-confirmed door0x00474e18, 0x004ca3d4
map2_02d map_d3 extra candidate0x000c000011,323x46EXE candidate repeated with the same map_d3 door rect; needs visual/gameplay review0x0044b17c, 0x004792c8, 0x004f2dd0, 0x0051544c, 0x0053c75c, 0x00540b44

Known Coordinate Negative Scan

LabelCoordopcode 0x58 hits
map1_02b map_b3 R0115,80
map2_02d map_d3 R01-a8,70
map2_02d map_d3 R01-b20,70
map2_02d map_d3 R01-c36,70
map2_02d map_d3 R0271,60
map3_02f map_f3 R0219,200
map3_02f map_f3 R01-a46,200
map3_02f map_f3 R01-b62,200
map3_02f map_f3 R01-c82,200
map3_02f map_f3 R01-d98,200
map3_02f map_f3 R01-e46,410
map3_02f map_f3 R01-f62,410
map3_02f map_f3 R01-g82,410
map3_02f map_f3 R01-h98,410

Tile-To-Draw Projection Scan

tile-to-draw projection: mode, tile x/y, object id, state/action; updates active object projected draw x/y

LabelCoordopcode 0x64 hitsHits
map1_02b map_b3 R0115,810x004917d8 oid=0x01 state=0x02
map2_02d map_d3 R01-a8,70
map2_02d map_d3 R01-b20,70
map2_02d map_d3 R01-c36,70
map2_02d map_d3 R0271,60
map3_02f map_f3 R0219,2030x0043cde4 oid=0x00 state=0x01, 0x004953b8 oid=0x01 state=0x02, 0x0049552c oid=0x01 state=0x02
map3_02f map_f3 R01-a46,200
map3_02f map_f3 R01-b62,200
map3_02f map_f3 R01-c82,200
map3_02f map_f3 R01-d98,200
map3_02f map_f3 R01-e46,410
map3_02f map_f3 R01-f62,410
map3_02f map_f3 R01-g82,410
map3_02f map_f3 R01-h98,410