{"kind":"hwanse-field-encounter-formation-stream-review","status":"opcode1e-consumer-grounded-stream-producer-unbound","source":["Hwanse2.exe","out/battle_actor_stat_layout_review.json","out/selector_root_structure_review.json","tools/build_field_encounter_formation_stream_review.py"],"handler":{"handlerTableBaseVaHex":"0x00440720","opcodeHex":"0x1e","handlerEntryVaHex":"0x00440798","handlerEntryValueHex":"0x0040c084","expectedHandlerVaHex":"0x0040c084","handlerEntryMatchesExpected":true,"actorRowTableVaHex":"0x00457c60","actorRowSizeHex":"0x38","enemyActorRowBias":4},"summary":{"candidateCount":6,"strongReferencedCandidateCount":0,"classificationCounts":{"well-formed-party-or-reserved-only":2,"well-formed-unbound":4},"actorCountDistribution":{"1":5,"2":1},"candidateInsideSelectorRootCount":6,"candidateInsideSceneResourceRootCount":6,"candidateOwnerWithFieldMapCount":3,"candidateExactPointerRefCount":0,"directFieldEncounterBindingFound":false,"mapEncounterClassificationPromoted":false,"decision":"opcode 0x1e handler 0x0040c084 is a grounded battle actor formation consumer, but static byte-stream scanning found no producer-bound field encounter formation table. The stream-like candidates are inline inside selector/resource roots and have no exact pointer refs. The candidates below are useful search anchors only and must not classify random-encounter maps."},"streamLayout":{"headerByte0":"opcode 0x1e","headerByte1":"actor count copied by 0x0040c084 to 0x0059db28","headerByte2Byte3":"padding/reserved; handler 0x0040c084 advances past these bytes without reading them","entrySize":8,"entryByte0":"actor row index into 0x00457c60 + index * 0x38; monster rows begin at index 4","entryByte1To3":"padding/reserved for this handler; 0x0040c084 does not read these bytes","entryWord4":"battle actor X position stored to actor +0x8c as fixed point","entryWord6":"battle actor Y position stored to actor +0x90 as fixed point"},"candidates":[{"streamVa":4525010,"streamVaHex":"0x00450bd2","section":".data","opcodeHex":"0x1e","actorCount":2,"headerByte2":49,"headerByte2Hex":"0x31","headerByte3":0,"headerByte3Hex":"0x00","headerZero":false,"entries":[{"rowIndex":31,"rowIndexHex":"0x1f","rowVaHex":"0x00458328","kind":"enemy-actor-row","name":"맹호권사범","enemyIndex":27,"hp":108,"gold":0,"level":25,"entryIndex":0,"rawBytes":"1f 02 31 00 20 02 31 00","byte1":2,"byte1Hex":"0x02","byte2":49,"byte2Hex":"0x31","byte3":0,"byte3Hex":"0x00","x":544,"y":49},{"rowIndex":33,"rowIndexHex":"0x21","rowVaHex":"0x00458398","kind":"enemy-actor-row","name":"숙련창룡권사","enemyIndex":29,"hp":116,"gold":50,"level":15,"entryIndex":1,"rawBytes":"21 02 31 00 22 02 31 00","byte1":2,"byte1Hex":"0x02","byte2":49,"byte2Hex":"0x31","byte3":0,"byte3Hex":"0x00","x":546,"y":49}],"entryNames":["맹호권사범","숙련창룡권사"],"allRowsKnown":true,"hasEnemyActor":true,"pointerRefs":[],"pointerRefCount":0,"nearbyCns":[],"contextBytes":"45 00 6d 00 00 00 05 00 00 00 6d 01 00 00 31 00 f6 00 31 00 1d 02 31 00 1e 02 31 00 1f 02 31 00 20 02 31 00 21 02 31 00 22 02 31 00 23 02 31 00 24 02 31 00 25 02 31 00 26 02 31 00 27 02 31 00 28 02 31 00","classification":"well-formed-unbound","fieldEncounterBinding":false,"note":"stream-like bytes only; no field/map producer points here yet","selectorRootOwners":[{"rootVaHex":"0x0044dd5c","rangeEndVaHex":"0x00459dc4","rootClass":"sequence-root-with-resource-structure","selectorKeys":["45:0"],"fieldMaps":[],"linkedCns":["zs_maoh.cns"],"sequenceGroupIds":["scene-text-group-007"],"resourceRefCount":62,"promptCount":231}],"selectorRootOwnerCount":1,"selectorRootOwnerClasses":["sequence-root-with-resource-structure"],"selectorRootOwnerFieldMaps":[],"selectorRootOwnerLinkedCns":["zs_maoh.cns"]},{"streamVa":4566463,"streamVaHex":"0x0045adbf","section":".data","opcodeHex":"0x1e","actorCount":1,"headerByte2":0,"headerByte2Hex":"0x00","headerByte3":0,"headerByte3Hex":"0x00","headerZero":true,"entries":[{"rowIndex":0,"rowIndexHex":"0x00","rowVaHex":"0x00457c60","kind":"party-or-reserved-actor-row","name":"actor-row-0","enemyIndex":null,"entryIndex":0,"rawBytes":"00 66 01 02 1c 01 00 00","byte1":102,"byte1Hex":"0x66","byte2":1,"byte2Hex":"0x01","byte3":2,"byte3Hex":"0x02","x":284,"y":0}],"entryNames":["actor-row-0"],"allRowsKnown":true,"hasEnemyActor":false,"pointerRefs":[],"pointerRefCount":0,"nearbyCns":[],"contextBytes":"00 2a 00 45 00 2f 03 00 00 f2 5c 53 00 84 00 00 00 7c 00 00 00 66 01 00 1e 01 00 00 00 66 01 02 1c 01 00 00 00 7c 01 00 00 02 00 0a 00 2f 03 00 00 3c 5f 53 00 84 00 00 00 04 00 00","classification":"well-formed-party-or-reserved-only","fieldEncounterBinding":false,"note":"stream-like bytes only; no field/map producer points here yet","selectorRootOwners":[{"rootVaHex":"0x00459dc4","rangeEndVaHex":"0x0045d7a0","rootClass":"sequence-root-with-resource-structure","selectorKeys":["22:0"],"fieldMaps":["map7_09k","map7_10k","map7_11k","map7_12k"],"linkedCns":["map_k1.cns","map_k2.cns","cara_at2.cns","cara_sm2.cns","face_01.cns","cara_03.cns","cara_05.cns","cara_etc.cns","map7_09k.cns","cara_12.cns","map7_10k.cns","cara_17.cns","map7_11k.cns","cara_lst.cns","map7_12k.cns"],"sequenceGroupIds":["scene-text-group-008"],"resourceRefCount":28,"promptCount":360}],"selectorRootOwnerCount":1,"selectorRootOwnerClasses":["sequence-root-with-resource-structure"],"selectorRootOwnerFieldMaps":["map7_09k","map7_10k","map7_11k","map7_12k"],"selectorRootOwnerLinkedCns":["cara_03.cns","cara_05.cns","cara_12.cns","cara_17.cns","cara_at2.cns","cara_etc.cns","cara_lst.cns","cara_sm2.cns","face_01.cns","map7_09k.cns","map7_10k.cns","map7_11k.cns","map7_12k.cns","map_k1.cns","map_k2.cns"]},{"streamVa":4693522,"streamVaHex":"0x00479e12","section":".data","opcodeHex":"0x1e","actorCount":1,"headerByte2":114,"headerByte2Hex":"0x72","headerByte3":0,"headerByte3Hex":"0x00","headerZero":false,"entries":[{"rowIndex":11,"rowIndexHex":"0x0b","rowVaHex":"0x00457ec8","kind":"enemy-actor-row","name":"돌기멧돼지","enemyIndex":7,"hp":85,"gold":14,"level":19,"entryIndex":0,"rawBytes":"0b 0b 01 00 00 00 02 00","byte1":11,"byte1Hex":"0x0b","byte2":1,"byte2Hex":"0x01","byte3":0,"byte3Hex":"0x00","x":0,"y":2}],"entryNames":["돌기멧돼지"],"allRowsKnown":true,"hasEnemyActor":true,"pointerRefs":[],"pointerRefCount":0,"nearbyCns":[],"contextBytes":"0a 0b 01 00 00 00 02 00 01 00 07 03 00 00 7c a2 47 00 05 00 00 00 10 41 1e 01 72 00 0b 0b 01 00 00 00 02 00 01 00 07 03 00 00 94 a2 47 00 05 00 00 00 10 41 1f 01 72 00 0c 0b 01 00","classification":"well-formed-unbound","fieldEncounterBinding":false,"note":"stream-like bytes only; no field/map producer points here yet","selectorRootOwners":[{"rootVaHex":"0x00478364","rangeEndVaHex":"0x0048458c","rootClass":"sequence-root-with-resource-structure","selectorKeys":["1:0"],"fieldMaps":["map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j","map2_15j","map2_16j"],"linkedCns":["map_d1.cns","map_d2.cns","map_d3.cns","face_01.cns","cara_01.cns","cara_03.cns","cara_10.cns","map2_02d.cns","map2_18d.cns","cara_at2.cns","cara_05.cns","cara_etc.cns","cara_06.cns","cara_23.cns","map_g1.cns","map_g2.cns","map_g3.cns","cara_0a.cns","map2_09g.cns","map2_10g.cns","cara_sm2.cns","map2_11g.cns","map_h1.cns","map_h2.cns","map2_12h.cns","map2_17h.cns","map_j1.cns","map_j2.cns","map_j3.cns","map2_14j.cns","map2_15j.cns","map2_16j.cns"],"sequenceGroupIds":["scene-text-group-012"],"resourceRefCount":104,"promptCount":426}],"selectorRootOwnerCount":1,"selectorRootOwnerClasses":["sequence-root-with-resource-structure"],"selectorRootOwnerFieldMaps":["map2_02d","map2_09g","map2_10g","map2_11g","map2_12h","map2_14j","map2_15j","map2_16j","map2_17h","map2_18d"],"selectorRootOwnerLinkedCns":["cara_01.cns","cara_03.cns","cara_05.cns","cara_06.cns","cara_0a.cns","cara_10.cns","cara_23.cns","cara_at2.cns","cara_etc.cns","cara_sm2.cns","face_01.cns","map2_02d.cns","map2_09g.cns","map2_10g.cns","map2_11g.cns","map2_12h.cns","map2_14j.cns","map2_15j.cns","map2_16j.cns","map2_17h.cns","map2_18d.cns","map_d1.cns","map_d2.cns","map_d3.cns","map_g1.cns","map_g2.cns","map_g3.cns","map_h1.cns","map_h2.cns","map_j1.cns","map_j2.cns","map_j3.cns"]},{"streamVa":4693858,"streamVaHex":"0x00479f62","section":".data","opcodeHex":"0x1e","actorCount":1,"headerByte2":7,"headerByte2Hex":"0x07","headerByte3":3,"headerByte3Hex":"0x03","headerZero":false,"entries":[{"rowIndex":0,"rowIndexHex":"0x00","rowVaHex":"0x00457c60","kind":"party-or-reserved-actor-row","name":"actor-row-0","enemyIndex":null,"entryIndex":0,"rawBytes":"00 00 78 aa 47 00 05 00","byte1":0,"byte1Hex":"0x00","byte2":120,"byte2Hex":"0x78","byte3":170,"byte3Hex":"0xaa","x":71,"y":5}],"entryNames":["actor-row-0"],"allRowsKnown":true,"hasEnemyActor":false,"pointerRefs":[],"pointerRefCount":0,"nearbyCns":[],"contextBytes":"47 00 05 00 00 00 10 41 1d 01 07 03 00 00 60 aa 47 00 05 00 00 00 10 41 1e 01 07 03 00 00 78 aa 47 00 05 00 00 00 10 41 1f 01 07 03 00 00 90 aa 47 00 05 00 00 00 10 41 20 01 07 03","classification":"well-formed-party-or-reserved-only","fieldEncounterBinding":false,"note":"stream-like bytes only; no field/map producer points here yet","selectorRootOwners":[{"rootVaHex":"0x00478364","rangeEndVaHex":"0x0048458c","rootClass":"sequence-root-with-resource-structure","selectorKeys":["1:0"],"fieldMaps":["map2_02d","map2_18d","map2_09g","map2_10g","map2_11g","map2_12h","map2_17h","map2_14j","map2_15j","map2_16j"],"linkedCns":["map_d1.cns","map_d2.cns","map_d3.cns","face_01.cns","cara_01.cns","cara_03.cns","cara_10.cns","map2_02d.cns","map2_18d.cns","cara_at2.cns","cara_05.cns","cara_etc.cns","cara_06.cns","cara_23.cns","map_g1.cns","map_g2.cns","map_g3.cns","cara_0a.cns","map2_09g.cns","map2_10g.cns","cara_sm2.cns","map2_11g.cns","map_h1.cns","map_h2.cns","map2_12h.cns","map2_17h.cns","map_j1.cns","map_j2.cns","map_j3.cns","map2_14j.cns","map2_15j.cns","map2_16j.cns"],"sequenceGroupIds":["scene-text-group-012"],"resourceRefCount":104,"promptCount":426}],"selectorRootOwnerCount":1,"selectorRootOwnerClasses":["sequence-root-with-resource-structure"],"selectorRootOwnerFieldMaps":["map2_02d","map2_09g","map2_10g","map2_11g","map2_12h","map2_14j","map2_15j","map2_16j","map2_17h","map2_18d"],"selectorRootOwnerLinkedCns":["cara_01.cns","cara_03.cns","cara_05.cns","cara_06.cns","cara_0a.cns","cara_10.cns","cara_23.cns","cara_at2.cns","cara_etc.cns","cara_sm2.cns","face_01.cns","map2_02d.cns","map2_09g.cns","map2_10g.cns","map2_11g.cns","map2_12h.cns","map2_14j.cns","map2_15j.cns","map2_16j.cns","map2_17h.cns","map2_18d.cns","map_d1.cns","map_d2.cns","map_d3.cns","map_g1.cns","map_g2.cns","map_g3.cns","map_h1.cns","map_h2.cns","map_j1.cns","map_j2.cns","map_j3.cns"]},{"streamVa":5374298,"streamVaHex":"0x0052015a","section":".data","opcodeHex":"0x1e","actorCount":1,"headerByte2":209,"headerByte2Hex":"0xd1","headerByte3":12,"headerByte3Hex":"0x0c","headerZero":false,"entries":[{"rowIndex":27,"rowIndexHex":"0x1b","rowVaHex":"0x00458248","kind":"enemy-actor-row","name":"마왕박쥐","enemyIndex":23,"hp":72,"gold":25,"level":32,"entryIndex":0,"rawBytes":"1b 01 13 41 2d 01 90 01","byte1":1,"byte1Hex":"0x01","byte2":19,"byte2Hex":"0x13","byte3":65,"byte3Hex":"0x41","x":301,"y":400}],"entryNames":["마왕박쥐"],"allRowsKnown":true,"hasEnemyActor":true,"pointerRefs":[],"pointerRefCount":0,"nearbyCns":[],"contextBytes":"46 00 84 00 00 00 10 41 2d 01 d2 0c 1b 01 d2 0c 1c 01 d2 0c 1d 01 d2 0c 1e 01 d1 0c 1b 01 13 41 2d 01 90 01 52 00 d2 0c 1b 01 d1 0c 1c 01 13 41 2d 02 90 01 52 00 d2 0c 1c 01 d1 0c","classification":"well-formed-unbound","fieldEncounterBinding":false,"note":"stream-like bytes only; no field/map producer points here yet","selectorRootOwners":[{"rootVaHex":"0x0051bf28","rangeEndVaHex":"0x00524350","rootClass":"sequence-root-with-resource-structure","selectorKeys":["36:2"],"fieldMaps":[],"linkedCns":["zy_gost.cns"],"sequenceGroupIds":["scene-text-group-032"],"resourceRefCount":104,"promptCount":677}],"selectorRootOwnerCount":1,"selectorRootOwnerClasses":["sequence-root-with-resource-structure"],"selectorRootOwnerFieldMaps":[],"selectorRootOwnerLinkedCns":["zy_gost.cns"]},{"streamVa":5374350,"streamVaHex":"0x0052018e","section":".data","opcodeHex":"0x1e","actorCount":1,"headerByte2":49,"headerByte2Hex":"0x31","headerByte3":1,"headerByte3Hex":"0x01","headerZero":false,"entries":[{"rowIndex":52,"rowIndexHex":"0x34","rowVaHex":"0x004587c0","kind":"enemy-actor-row","name":"권법가","enemyIndex":48,"hp":50,"gold":15,"level":9,"entryIndex":0,"rawBytes":"34 01 32 01 13 01 ac 01","byte1":1,"byte1Hex":"0x01","byte2":50,"byte2Hex":"0x32","byte3":1,"byte3Hex":"0x01","x":275,"y":428}],"entryNames":["권법가"],"allRowsKnown":true,"hasEnemyActor":true,"pointerRefs":[],"pointerRefCount":0,"nearbyCns":[],"contextBytes":"52 00 d2 0c 1c 01 d1 0c 1d 01 13 41 2d 03 90 01 52 00 d2 0c 1d 01 d1 0c 1e 01 31 01 34 01 32 01 13 01 ac 01 52 00 2f 03 00 00 b6 25 46 00 84 00 00 00 31 01 13 01 6d 00 00 00 03 00","classification":"well-formed-unbound","fieldEncounterBinding":false,"note":"stream-like bytes only; no field/map producer points here yet","selectorRootOwners":[{"rootVaHex":"0x0051bf28","rangeEndVaHex":"0x00524350","rootClass":"sequence-root-with-resource-structure","selectorKeys":["36:2"],"fieldMaps":[],"linkedCns":["zy_gost.cns"],"sequenceGroupIds":["scene-text-group-032"],"resourceRefCount":104,"promptCount":677}],"selectorRootOwnerCount":1,"selectorRootOwnerClasses":["sequence-root-with-resource-structure"],"selectorRootOwnerFieldMaps":[],"selectorRootOwnerLinkedCns":["zy_gost.cns"]}],"nextFrontier":["Find a caller/producer that writes VM context +0x40 to one of these opcode 0x1e streams before battle entry.","Correlate formation stream candidates with battle background setup and field walk encounter RNG only after a shared producer is found.","Keep field map encounter/no-encounter classification unpromoted until the producer is found."]}