{"scope":"Grounded text-related event/object VM opcode semantics from Hwanse2.exe handler evidence.","source":["out/save_selector_branch_state_dispatch.json","out/event_text_source_flow.json","out/event_dialogue_blocks.json"],"promotionStatus":"text-opcode-semantics-grounded-route-execution-missing","eventObjectDispatcher":{"tableVaHex":"0x0047f1d8","entryCount":64,"dispatcherVaHex":"0x0041b687","dispatchCallVaHex":"0x0041b6cd","dispatcherVerified":true,"byteCheckCount":6},"opcodeSemantics":[{"opcodeHex":"0x02","handlerVaHex":"0x0041b771","handlerSection":".text","semanticStatus":"display-cursor-opcode-grounded","decodedLength":4,"decodedLengthHex":"0x4","operandLayout":"no promoted text id operand; updates cursor fields from current context and font-row table","effect":"context+0xd6=context+0xce; context+0xda += table[context+0xde]; advance stream +4","source":"Hwanse2.exe handler 0x0041b771 plus out/event_dialogue_blocks.json storage scan","commandCount":526,"browserReplayEnabled":true,"promotionImpact":"supports partial dialogue cursor/separator trace only; route-linked execution still missing"},{"opcodeHex":"0x03","handlerVaHex":"0x0041b7bb","handlerSection":".text","semanticStatus":"display-state-opcode-grounded","decodedLength":4,"decodedLengthHex":"0x4","decodedLengthVariants":null,"operandLayout":"stream byte at +2 selects context+0xde display/font row","effect":"context+0xde = stream u8+2; advance stream +4","source":"Hwanse2.exe handler 0x0041b7bb plus out/event_dialogue_blocks.json storage scan","commandCount":77,"browserReplayEnabled":false,"promotionImpact":"display state evidence only; browser replay does not execute full VM control flow"},{"opcodeHex":"0x04","handlerVaHex":"0x0041b7ed","handlerSection":".text","semanticStatus":"display-timer-opcode-grounded","decodedLength":4,"decodedLengthHex":"0x4","decodedLengthVariants":null,"operandLayout":"stream word at +2 seeds context+0xca","effect":"context+0xca = stream u16+2; context+0xcc = 0; advance stream +4","source":"Hwanse2.exe handler 0x0041b7ed plus out/event_dialogue_blocks.json storage scan","commandCount":21,"browserReplayEnabled":false,"promotionImpact":"display/timer state evidence only; browser replay does not execute full VM timing"},{"opcodeHex":"0x06","handlerVaHex":"0x0041b8ee","handlerSection":".text","semanticStatus":"input-wait-opcode-grounded","decodedLength":4,"decodedLengthHex":"0x4","decodedLengthVariants":null,"operandLayout":"no promoted text operand; waits on global 0x47f1d4 and input mask 0x0059e312","effect":"toggle press/release latch; set 0x55b280 stop flag; advance stream +4 only after release condition","source":"Hwanse2.exe handler 0x0041b8ee plus out/event_dialogue_blocks.json storage scan","commandCount":243,"browserReplayEnabled":false,"promotionImpact":"dialogue wait evidence only; full browser event VM wait loop remains unimplemented"},{"opcodeHex":"0x07","handlerVaHex":"0x0041b956","handlerSection":".text","semanticStatus":"object-position-opcode-grounded","decodedLength":8,"decodedLengthHex":"0x8","decodedLengthVariants":null,"operandLayout":"stream words at +2/+4 become fixed-point x/y","effect":"context+0x1c = stream u16+2 << 16; context+0x20 = stream u16+4 << 16; advance stream +8","source":"Hwanse2.exe handler 0x0041b956 plus out/event_dialogue_blocks.json storage scan","commandCount":75,"browserReplayEnabled":false,"promotionImpact":"object placement evidence only; route-linked event object execution still missing"},{"opcodeHex":"0x08","handlerVaHex":"0x0041b9a0","handlerSection":".text","semanticStatus":"display-style-opcode-grounded","decodedLength":null,"decodedLengthHex":"mode0=0x4/mode1=0x8","decodedLengthVariants":{"mode0":4,"mode1":8},"operandLayout":"stream byte +2 mode; mode0 uses table index byte +3 at 0x59daf0, mode1 uses immediate bytes +5/+6/+7","effect":"write context+0xe0/+0xe2/+0xe4 from palette/style table or immediate RGB-like triplet","source":"Hwanse2.exe handler 0x0041b9a0 plus out/event_dialogue_blocks.json storage scan","commandCount":75,"browserReplayEnabled":false,"promotionImpact":"display style evidence only; variable-length VM execution remains partial"},{"opcodeHex":"0x09","handlerVaHex":"0x0041bac6","handlerSection":".text","semanticStatus":"control-flow-call-opcode-grounded","decodedLength":8,"decodedLengthHex":"0x8","decodedLengthVariants":null,"operandLayout":"stream dword at +4 is branch target; stream+8 is pushed as continuation","effect":"push continuation pointer to context+0xb4 stack; increment context+0xc8; set stream to target dword","source":"Hwanse2.exe handler 0x0041bac6 plus out/event_dialogue_blocks.json storage scan","commandCount":143,"browserReplayEnabled":false,"promotionImpact":"VM control-flow evidence only; browser replay does not follow original event branches"},{"opcodeHex":"0x0a","handlerVaHex":"0x0041bb15","handlerSection":".text","semanticStatus":"control-flow-return-opcode-grounded","decodedLength":null,"decodedLengthHex":"stack-pop","decodedLengthVariants":null,"operandLayout":"no stream operand; pops continuation from context+0xb4 stack using context+0xc8","effect":"decrement context+0xc8; set stream to saved continuation pointer context+0xb4[index]","source":"Hwanse2.exe handler 0x0041bb15 plus out/event_dialogue_blocks.json storage scan","commandCount":95,"browserReplayEnabled":false,"promotionImpact":"VM control-flow evidence only; browser replay does not execute original call/return branches"},{"opcodeHex":"0x0b","handlerVaHex":"0x0041bb4c","handlerSection":".text","semanticStatus":"text-source-opcode-grounded","decodedLength":4,"decodedLengthHex":"0x4","operandLayout":"inherited context+0x28","effect":"push context+0x28; call 0x0041b579; copy context+0xce/0xd2 to cursor 0xd6/0xda; advance +4","source":"out/event_text_source_flow.json","commandCount":3179,"browserReplayEnabled":true,"promotionImpact":"supports partial dialogue replay only; route-linked execution still missing"},{"opcodeHex":"0x0c","handlerVaHex":"0x0041bb99","handlerSection":".text","semanticStatus":"text-source-opcode-grounded","decodedLength":20,"decodedLengthHex":"0x14","operandLayout":"stream dword at +0x0c, but command-start proof is required","effect":"alloc object via 0x435b5b; child+0x1c=stream u16+4; child+0x20=stream u16+6; child+0x40=stream dword+8; child+0x28=stream dword+0x0c; advance +0x14","source":"out/event_text_source_flow.json","commandCount":3,"browserReplayEnabled":false,"promotionImpact":"0x0c route-linked hits are pointer overlap, so this opcode stays non-promoting"},{"opcodeHex":"0x0d","handlerVaHex":"0x0041bca4","handlerSection":".text","semanticStatus":"text-source-opcode-grounded","decodedLength":8,"decodedLengthHex":"0x8","operandLayout":"stream dword at +4","effect":"context+0x28=stream dword+4; use low 16 bits as index into 0x55b134 to seed context+0xce/0xd2/0xd6/0xda; advance +8","source":"out/event_text_source_flow.json","commandCount":83,"browserReplayEnabled":true,"promotionImpact":"supports partial dialogue replay only; route-linked execution still missing"},{"opcodeHex":"0x0e","handlerVaHex":"0x0041bd4f","handlerSection":".text","semanticStatus":"cursor-relative-opcode-grounded","decodedLength":8,"decodedLengthHex":"0x8","decodedLengthVariants":null,"operandLayout":"stream words at +2/+4 optionally offset current text origin unless 0xffff sentinel","effect":"context+0xd6 = context+0xce + u16+2 when not 0xffff; context+0xda = context+0xd2 + u16+4 when not 0xffff; advance +8","source":"Hwanse2.exe handler 0x0041bd4f plus out/event_dialogue_blocks.json storage scan","commandCount":87,"browserReplayEnabled":false,"promotionImpact":"cursor positioning evidence only; browser replay does not execute full layout VM"},{"opcodeHex":"0x15","handlerVaHex":"0x0041d476","handlerSection":".text","semanticStatus":"cursor-origin-relative-opcode-grounded","decodedLength":8,"decodedLengthHex":"0x8","decodedLengthVariants":null,"operandLayout":"stream words at +2/+4 optionally offset and update text origin unless 0xffff sentinel","effect":"context+0xce/context+0xd6 and context+0xd2/context+0xda are moved by stream offsets; advance +8","source":"Hwanse2.exe handler 0x0041d476 plus out/event_dialogue_blocks.json storage scan","commandCount":59,"browserReplayEnabled":false,"promotionImpact":"cursor origin evidence only; browser replay does not execute full layout VM"},{"opcodeHex":"0x1b","handlerVaHex":"0x0041d89d","handlerSection":".text","semanticStatus":"data-bank-select-opcode-grounded","decodedLength":4,"decodedLengthHex":"0x4","decodedLengthVariants":null,"operandLayout":"stream byte at +2 selects context+0xa8 backing table; mode 2 also uses stream byte +3","effect":"context+0xa8 becomes 0x59e310, 0x4576d8, 0x457750 + shaped index, or table 0x59db30[context+0xf2]","source":"Hwanse2.exe handler 0x0041d89d plus out/event_dialogue_blocks.json storage scan","commandCount":78,"browserReplayEnabled":false,"promotionImpact":"state-table selection evidence only; full object/script data VM remains partial"},{"opcodeHex":"0x35","handlerVaHex":"0x0041fe09","handlerSection":".text","semanticStatus":"literal-storage-marker","decodedLength":null,"decodedLengthHex":null,"operandLayout":"CP949 text bytes are preserved as literalTextEvents from dialogue block storage; handler semantics are not promoted.","effect":"storage-indexed literal payload marker used by partial browser replay evidence","source":"out/event_dialogue_blocks.json","commandCount":249,"browserReplayEnabled":true,"promotionImpact":"storage evidence only; not route-linked VM execution"},{"opcodeHex":"0x37","handlerVaHex":"0x00420028","handlerSection":".text","semanticStatus":"global-timer-opcode-grounded","decodedLength":4,"decodedLengthHex":"0x4","decodedLengthVariants":null,"operandLayout":"no stream operand; reads global byte 0x457745","effect":"context+0xca = byte[0x457745]; context+0xcc = 0; advance stream +4","source":"Hwanse2.exe handler 0x00420028 plus out/event_dialogue_blocks.json storage scan","commandCount":54,"browserReplayEnabled":false,"promotionImpact":"global display/timer state evidence only; not event route execution proof"}],"coverage":{"dispatcherVerified":true,"dispatcherTableVaHex":"0x0047f1d8","dispatcherVaHex":"0x0041b687","dispatchCallVaHex":"0x0041b6cd","textSourceOpcodeCount":3,"decodedTextSourceOpcodeCount":3,"decodedTextSourceOpcodeLengths":{"0x0b":4,"0x0c":20,"0x0d":8},"textSourceOpcodeLengthsDecoded":true,"textSourceOperandSemanticsGrounded":true,"displayCursorOpcodeCount":1,"decodedDisplayCursorOpcodeCount":1,"decodedDisplayCursorOpcodeLengths":{"0x02":4},"displayCursorOpcodeGrounded":true,"displayCursorCommandCount":526,"controlOpcodeCount":11,"groundedControlOpcodeCount":11,"controlOpcodeSemanticsGrounded":true,"decodedControlOpcodeLengths":{"0x03":4,"0x04":4,"0x06":4,"0x07":8,"0x09":8,"0x0e":8,"0x15":8,"0x1b":4,"0x37":4},"variableLengthControlOpcodes":{"0x08":{"mode0":4,"mode1":8}},"controlOpcodeCommandCounts":{"0x03":77,"0x04":21,"0x06":243,"0x07":75,"0x08":75,"0x09":143,"0x0a":95,"0x0e":87,"0x15":59,"0x1b":78,"0x37":54},"groundedControlCommandCount":1007,"groundedControlEventCount":1007,"groundedControlEventOpcodeSet":["0x03","0x04","0x06","0x07","0x08","0x09","0x0a","0x0e","0x15","0x1b","0x37"],"groundedControlSampleEffectExecutionCount":0,"literalStorageOpcodeObserved":true,"literalStorageEventCount":249,"opcode0cPointerOverlapNotPromoted":true,"routeLinkedCommandCount":2,"routeLinkedCommandsArePointerOverlap":true,"browserPartialReplayOpcodeSet":["0x02","0x0b","0x0d","0x35"],"browserPartialReplayMatchesTextSemantics":true,"browserGroundedControlEventsPreserved":true,"browserFullEventVmImplemented":false,"routeLinkedEventVmExecution":false,"fullInstructionLengthFullyDecoded":false,"fullOperandLayoutFullyDecoded":false},"checks":{"eventObjectDispatcherVerified":true,"textSourceOpcodeLengthsDecoded":true,"textSourceOperandSemanticsGrounded":true,"displayCursorOpcodeGrounded":true,"controlOpcodeSemanticsGrounded":true,"browserGroundedControlEventsPreserved":true,"literalStorageOpcodeObserved":true,"opcode0cPointerOverlapNotPromoted":true,"browserPartialReplayMatchesTextSemantics":true,"routeLinkedEventVmExecution":false,"browserFullEventVmImplemented":false,"fullInstructionLengthFullyDecoded":false,"fullOperandLayoutFullyDecoded":false},"nextEvidenceNeeded":["Decode non-text event/object opcodes that appear in dialogue blocks.","Capture route-linked event/object VM execution from a normal map interaction.","Bind scene event records to a dialogue block through executed VM control flow."],"conclusion":"Event/object VM dispatch is byte-table grounded, and text-source opcodes 0x0b, 0x0c, and 0x0d now have explicit length/operand/effect rows; opcode 0x02 also has a grounded cursor/separator length/effect row, and opcodes 0x03/0x04/0x06/0x07/0x08/0x09/0x0a/0x0e/0x15/0x1b/0x37 have handler-grounded display, wait, position, style, data-bank, and control-flow rows. This narrows the VM semantics gap without promoting route-linked event execution: the route-linked 0x0c hits remain pointer overlaps, 0x35 is literal storage evidence, browser replay remains partial, and full event VM instruction decoding is still incomplete."}