{"kind":"hwanse-map-animation-execution-boundary-review","status":"visible-motion-execution-binding-unproven","source":["out/map_animation_tile_review.json","out/map_animation_exe_pattern_review.json","out/map_palette_handler_trace_review.json","out/map_animation_shift_hypothesis_review.json","out/resource_command_vm_bridge_review.json","out/map_animation_resource_binding_probe.json","tools/build_map_animation_execution_boundary_review.py","out/map_animation_live_buffer_writer_review.json","out/map_animation_object_relative_tile_write_review.json","out/map_animation_redraw_consumer_review.json","out/map_animation_draw_tile_transform_review.json","out/map_animation_tick_route_review.json","out/map_animation_active_object_script_tile_write_review.json","out/map_animation_frame_script_tile_write_review.json","out/map_animation_non_object_tile_write_root_review.json","out/map_animation_specialized_loop_boundary_review.json"],"summary":{"animatedMapCount":5,"animatedCellCount":1200,"surfaceCount":16,"confirmedSurfaceCount":6,"liveBufferCandidateVmTileWriteRefCount":6,"liveBufferAnimatedRootBindingCount":0,"objectRelativeTileWriteCandidateCount":79,"objectRelativeAnimatedRootCandidateCount":0,"redrawConsumerGrounded":true,"redrawAlternateTileSelectionFound":false,"drawTileTransformGrounded":true,"drawTimeVisibleMotionTransformFound":false,"tickRouteGrounded":true,"tickDirectLiveBufferRefs":0,"activeObjectScriptCandidateGrounded":true,"strictActiveObjectScriptTileWriteCount":0,"strictActiveObjectScriptRawTileWriteCandidateCount":445,"frameScriptOpcode20TargetCount":138,"frameScriptOpcode18StateEntryTargetCount":855,"frameScriptTileWriteProducerFound":false,"nonObjectAlignedTileWriteCommandCount":166,"nonObjectTileWriteRootCount":95,"nonObjectPromotedAnimatedProducerCommandCount":0,"specializedLoopStrongCandidateCount":0,"visibleMotionExecutionBindingProven":false,"decision":"layer1 0x40 redraw, palette VM, tile-write handlers, viewport redraw consumer, draw-time tile rect 변환은 각각 근거가 있지만 특정 맵의 모닥불/폭포 visible motion을 실행하는 command stream/root는 아직 증명되지 않았다. field tick의 active-object delayed script 경로는 가능하지만, strict +0xec inventory, runtime-installed +0x64 frame script, remaining tile-write VM root scan, specialized tick/draw loop scan 안에서는 tile-write producer가 발견되지 않았다."},"animatedMaps":[{"map":"map1_01a","sourceTileset":"map_a1","animatedCellCount":12,"componentCount":1,"paletteRanges":[{"start":2,"end":4,"startHex":"0x02","endHex":"0x04"},{"start":6,"end":7,"startHex":"0x06","endHex":"0x07"},{"start":11,"end":13,"startHex":"0x0b","endHex":"0x0d"},{"start":16,"end":21,"startHex":"0x10","endHex":"0x15"},{"start":27,"end":27,"startHex":"0x1b","endHex":"0x1b"},{"start":32,"end":32,"startHex":"0x20","endHex":"0x20"},{"start":35,"end":37,"startHex":"0x23","endHex":"0x25"},{"start":40,"end":40,"startHex":"0x28","endHex":"0x28"},{"start":44,"end":46,"startHex":"0x2c","endHex":"0x2e"}]},{"map":"map1_02b","sourceTileset":"map_b1","animatedCellCount":900,"componentCount":1,"paletteRanges":[{"start":16,"end":16,"startHex":"0x10","endHex":"0x10"},{"start":32,"end":43,"startHex":"0x20","endHex":"0x2b"},{"start":45,"end":46,"startHex":"0x2d","endHex":"0x2e"}]},{"map":"map2_01c","sourceTileset":"map_c1","animatedCellCount":96,"componentCount":1,"paletteRanges":[{"start":18,"end":18,"startHex":"0x12","endHex":"0x12"},{"start":28,"end":29,"startHex":"0x1c","endHex":"0x1d"}]},{"map":"map2_13c","sourceTileset":"map_c1","animatedCellCount":96,"componentCount":1,"paletteRanges":[{"start":18,"end":18,"startHex":"0x12","endHex":"0x12"},{"start":28,"end":29,"startHex":"0x1c","endHex":"0x1d"}]},{"map":"map6_26c","sourceTileset":"map_c1","animatedCellCount":96,"componentCount":1,"paletteRanges":[{"start":18,"end":18,"startHex":"0x12","endHex":"0x12"},{"start":28,"end":29,"startHex":"0x1c","endHex":"0x1d"}]}],"surfaces":[{"surface":"layer1 0x40 redraw coverage","promotion":"confirmed","artifact":"map_animation_tile_review.json","finding":"5 maps / 1200 cells are flagged. EXE reads layer1 and treats bit 0x40 as dirty redraw coverage.","gap":"이 단계는 어느 타일/팔레트 프레임으로 바꿀지 고르지 않는다."},{"surface":"palette VM handlers","promotion":"confirmed-handler / unbound-map-root","artifact":"map_palette_handler_trace_review.json","finding":"opcode 0x38/0x39 handlers are table-grounded; exactPerMapPaletteRootProven=False.","gap":"사용자 관찰상 팔레트만으로는 폭포/모닥불의 공간 이동을 설명하지 못하므로 visible motion proof로 승격하지 않는다."},{"surface":"tile-grid write handlers","promotion":"confirmed-handler / no animated write","artifact":"map_animation_exe_pattern_review.json","finding":"plausible opcode 0x58 hits 90, direct animated tile writes 0, coordinate-only hits 2.","gap":"known 0x40 source tile id를 직접 쓰는 실행 stream은 아직 없다."},{"surface":"simple tile replacement table","promotion":"negative-scan","artifact":"map_animation_exe_pattern_review.json","finding":"known fire/waterfall sequences scanned 13, contiguous hits 0.","gap":"단순 u8/u16/u32 연속 테이블 가설은 현재 음성이다. 압축/산술/VM 실행 가능성은 남는다."},{"surface":"visual shift hypothesis","promotion":"human-review-candidate","artifact":"map_animation_shift_hypothesis_review.json","finding":"component classes {'offset-shift-unproven': 1, 'rectangular-offset-plausible': 1, 'row-offset-or-row-cycle-plausible': 3}; map_review preview용 후보로는 유효하지만 EXE 실행 근거는 아니다.","gap":"offset/row-cycle 후보를 실제 map root command stream과 연결해야 한다."},{"surface":"map resource loader / VM bridge","promotion":"resource-loader-grounded / animation-root-unbound","artifact":"resource_command_vm_bridge_review.json","finding":"field map opcode10 records 173, direct resource runner calls 5, routeProofFound=False.","gap":"map resource loading root가 animation frame loop를 실행한다는 증거가 아직 없다."},{"surface":"animated-map resource roots vs animation commands","promotion":"negative-binding-probe","artifact":"map_animation_resource_binding_probe.json","finding":"animated maps with exact resource roots 4/5, palette commands inside exact roots 0, tile-write commands inside exact roots 0.","gap":"맵 리소스 root 자체가 per-frame animation loop root는 아닌 것으로 좁혀졌다."},{"surface":"live map buffer writers","promotion":"confirmed-handler / producer-unbound","artifact":"map_animation_live_buffer_writer_review.json","finding":"VM write-like live-buffer refs 6, refs inside animated roots 0, handler opcodes 3.","gap":"live layer0/layer1 writer handlers are grounded, but no animated-map tick/root producer binds them to visible 0x40 motion."},{"surface":"object-relative live tile-write command scan","promotion":"negative-binding-scan","artifact":"map_animation_object_relative_tile_write_review.json","finding":"0x6b/0x76 candidates 79, animated tile hits 1, animated root candidates 0.","gap":"object-relative tile-write streams currently bind to nonanimated/unbound resource groups, not the visible fire/waterfall loop."},{"surface":"viewport redraw consumer","promotion":"confirmed-redraw-consumer / producer-unbound","artifact":"map_animation_redraw_consumer_review.json","finding":"37x21 viewport scan grounded=True; alternate tile selection found=False.","gap":"0x40 cells are invalidated/redrawn here, but visible frame selection still has to come from a producer or draw-time transform."},{"surface":"draw-time tile id to source rect transform","promotion":"confirmed-render-transform / negative-animation-selector","artifact":"map_animation_draw_tile_transform_review.json","finding":"tile rect converter grounded=True; uses frame counter=False; uses 0x40=False.","gap":"The inspected draw path converts tile ids by fixed grid math and does not implement fire/waterfall frame selection."},{"surface":"field tick route / active-object script runner","promotion":"grounded-route / indirect-producer-candidate","artifact":"map_animation_tick_route_review.json","finding":"tick route 0x00411476 is grounded; direct live-buffer refs in tick/update windows 0+0; active-object delayed script route grounded=True.","gap":"Need the specific animated-map active-object script/root that executes tile-write opcodes or an equivalent producer."},{"surface":"strict active-object +0xec scripts","promotion":"negative-script-inventory-scan","artifact":"map_animation_active_object_script_tile_write_review.json","finding":"strict scripts 722, command-boundary tile writes 0, raw unpromoted candidates 445.","gap":"The remaining producer, if static, is likely outside the strict +0xec inventory or is runtime-installed into object +0x64/+0x40."},{"surface":"runtime-installed object +0x64 frame scripts","promotion":"negative-frame-script-scan","artifact":"map_animation_frame_script_tile_write_review.json","finding":"initializer +0x40/+0x64/+0xec writes 0/0/723; opcode20 targets 138, opcode18 state entries 855, command-boundary tile writes 0+0.","gap":"The object frame-script route is grounded for actor/frame animation, but not for map visible-tile mutation."},{"surface":"non-object / remaining tile-write VM roots","promotion":"negative-root-scan","artifact":"map_animation_non_object_tile_write_root_review.json","finding":"aligned tile-write commands 166, roots 95, direct animated evidence commands 3, promoted commands 0.","gap":"Remaining VM-shaped tile-write roots do not both bind to an animated map and write known animated tile/coordinate evidence."},{"surface":"specialized tick/draw loop","promotion":"negative-specialized-loop-scan","artifact":"map_animation_specialized_loop_boundary_review.json","finding":"inspected windows 10, direct callees 30, callee tile-state refs 7, strong candidates 0.","gap":"Tick/redraw/draw 주변 direct callee 안에서도 별도 live layer0/layer1 producer가 승격되지 않았다."}],"nextFrontier":["opcode 0x58/0x6b/0x76 live-buffer writer를 호출하게 하는 animated-map tick/root chain을 찾는다.","map_review의 shift 후보를 EXE command stream의 산술/인덱스 생성 패턴과 대조한다.","0x00425163/0x004199a0 일반 tile draw path 밖에 별도 map-animation specialized draw callback이 있는지 확인한다.","strict +0xec 밖의 runtime-installed object +0x64/+0x40 script 또는 non-object VM root에서 animated-map tile-write root를 찾는다.","runtime-installed +0x64 script scan도 음성이므로 non-object VM root 또는 specialized map animation loop를 우선 확인한다.","remaining tile-write VM root scan도 음성이므로 0x58/0x6b/0x76 command stream이 아닌 specialized loop/산술 생성 경로를 우선 확인한다.","specialized loop scan도 음성이므로 animated-map load/root dispatcher에서 0x40 dirty cell을 소비하는 정적 command chain을 다시 찾는다."]}