Scenario selected-root pattern review

scenario-selected-root-vm-pattern-grounded-producer-pending

The web-runtime observation is consistent with the EXE. A common VM runner, selected-root writers, and selected-root executor are statically grounded. The remaining missing evidence is the upstream producer that chooses those streams from concrete field/NPC/region conditions.

JSON: out/scenario_selected_root_pattern_review.json

확정

  • The VM dispatcher at 0x00402321 executes bytecode streams from object+0x40.
  • selected_root at 0x0059de30 is a real global consumed by the selected-root executor.
  • 0x0040ad9b writes selected_root by table index; 0x0040ae0e writes it directly or as an inline continuation.
  • 0x0040adc9 pushes the current stream to object+0x44/object+0x5c and jumps object+0x40 to selected_root.
  • 0x00406dbb writes selector bytes and jumps to fixed roots, so selector bytes and selected roots are part of the same VM family.
  • Existing selector-root reports already expose dozens of roots and command blocks that fit this mechanism.

후보

  • field/NPC/region triggers likely enter this VM through active descriptors or inline stream pointers, but the exact live producer is not promoted here.
  • object+0xa8 appears repeatedly in VM handlers as a context/base pointer family; object+0xb0 remains a script-pointer candidate, not a confirmed stream slot in this review.
  • selectedRoot indexed tables and direct inline roots are good static enumeration targets, but each entry still needs owner/trigger binding.

차단점

  • No static proof yet maps a specific field entrance, talk target, or region descriptor to one selected_root write in normal gameplay.
  • scene/event command streams are found, but route-linked command block count remains zero in the current command-stream candidate report.
  • automatic map transition and scenario branch producer remain separate problems from the selected-root executor mechanism.

전역/오프셋

namevalue
selectedRootVaHex0x0059de30
rootObjectVaHex0x0055be00
currentStreamOffsetHex0x40
returnStackOffsetHex0x44
returnDepthOffsetHex0x5c
vmContextOffsetCandidateHex0xa8
scriptPointerOffsetCandidateHex0xb0

디스패치 엔트리

namehandler VAopcode indexdispatch entry
vmDispatcher0x00402321--
selectorByteWriter0x00406dbb0x4f0x00440674
selectedRootIndexedWriter0x0040ad9b0x810x0044073c
selectedRootExecutor0x0040adc90x820x00440740
selectedRootDirectWriter0x0040ae0e0x830x00440744

바이트 근거

labelVAstatusdecoded semantics
generic VM dispatcher0x00402321confirmedreads object+0x40 as current stream, reads opcode byte, dispatches through table 0x00440538.
nested VM stream runner0x00402360confirmedtemporarily replaces object+0x40 with an argument stream, runs the dispatcher, then restores the old stream.
selector byte writer0x00406dbbconfirmedmode 1 writes selector bytes from stream operands and jumps to a fixed root pointer; modes 2/3 delegate save/load restore.
selected root indexed writer0x0040ad9bconfirmedselected_root = dword[streamTable + stream[1] * 4], where streamTable is dword at stream+4; advances stream by 8.
selected root executor0x0040adc9confirmedif selected_root is nonzero, pushes current continuation to object+0x44 return stack, increments object+0x5c, and writes selected_root to object+0x40.
selected root direct writer0x0040ae0econfirmedmode 0 stores inline stream+4 as selected_root; mode 1 stores dword at stream+4 as selected_root.
root object pool initializer0x004359d6confirmed-baseinitializes the object pool/list around 0x0055be00, matching the VM object base seen in selected-root handlers.

관련 산출물 요약

metricvalue
selectorRootCount93
selectorRows94
rootsWithSceneSeqCount37
rootsWithResourceRefCount66
sequenceRootWithResourceStructureCount37
unclassifiedSelectorRootCount27
rootsWithSelectedRootOpcodeCount57
opcode4fMode1WriterCount27
opcode4fSelfWriterCount23
opcode4fSlotAliasCount4
selectedRootDirectRefCount10
selectedRootExecutorFoundTrue
liveWriterStatusselected-root-writer-primitives-grounded-route-producer-pending
opcodeMatrixStatusopcode-matrix-grounded-no-upstream-route-producer
selectorStructureStatusselector-root-structure-decomposed-candidate
routeReviewStatuspartial-execution-route-blocked-direct-root-missing
directExecutionRootFoundFalse
commandBlockCount47
dialogueLikeBlockCount43
routeLinkedCommandBlockCount0
mapLinkedCommandBlockCount7

다음 정적 분석