Field Encounter Formation Boundary Review
전투 actor 편성 소비자 0x0040c084는 stream byte row index 목록을 읽어 enemy actor를 생성하는 handler로 확인됐다. 하지만 필드 걷기/트리거에서 이 stream을 선택하거나 공급하는 producer는 아직 발견되지 않았다. selector root 안에서도 map root와 monster root는 분리되어 있고, btl background root는 직접 검출되지 않는다.
statusformation-consumer-grounded-field-producer-not-found
selector roots93
map roots28
monster roots58
btl roots0
all-three roots0
enemy rows80
formation consumerTrue
field producerFalse
Formation Actor Consumer
Handler table base 0x00440720 opcode 0x1e entry 0x00440798 points to 0x0040c084. This is now a grounded consumer of battle actor formation stream entries, but not the field-side producer.
| stream field | meaning |
|---|---|
| headerByte0 | unresolved |
| headerByte1 | enemy actor count copied to 0x0059db28 |
| headerAdvance | 4 |
| entrySize | 8 |
| entryByte0 | actor/enemy stat row index into 0x00457c60 + rowIndex * 0x38 |
| entryWord4 | battle actor X position, stored as fixed-point actor +0x8c |
| entryWord6 | battle actor Y position, stored as fixed-point actor +0x90 |
| entryBytes1To3 | unresolved |
Neighbor handlers
| opcode / entry | handler | role |
|---|---|---|
0x1d0x00440794 | 0x0040be38 | single/party actor row initializer |
0x1e0x00440798 | 0x0040c084 | multi enemy actor formation initializer |
0x1f0x0044079c | 0x0040c2fc | neighbor battle actor/display initializer |
Decisions
| id | status | decision | evidence |
|---|---|---|---|
formation-actor-consumer | grounded-consumer | handler 0x0040c084 is a battle actor formation consumer. | handler table base 0x00440720 opcode 0x1e entry 0x00440798 -> 0x0040c084; stream[1] count, then each 8-byte entry uses +0 row index, +4 X, +6 Y |
selector-root-co-location | negative-evidence | selector root alone cannot be used as a field encounter formation table. | map roots=28, monster roots=58, btl roots=0, all-three roots=0 |
stat-table-binding | consumer-grounded | enemy stat rows and row-index consumption are grounded, but field-side row-index production is not. | enemy rows=80; exact .text refs to exported table base=0 |
battle-candidates | candidate-only | battle event and sprite proximity candidates remain non-promoting. | event candidates=21; sprite candidates=21 |
formation-opcode-cluster | adjacent-consumer-cluster | opcode 0x1b..0x20/0x22 cluster is battle setup adjacent, but still producer-unbound. | opcode1b plausible blocks=431; opcode1c well formed=0; strong formation refs=0; direct field producer=False |
movement-resource-boundary | blocked | known movement/resource boundaries still do not contain the formation producer. | movement btl refs=0; movement monster refs=0; resource-runner entry proof=0 |
Source Layers
| layer | status | count | proves formation | note |
|---|---|---|---|---|
| field family -> btl candidate | field-encounter-background-candidates-not-original-table | 174 | False | map family can suggest battle backgrounds, but candidate backgrounds do not bind monster formation or probability. |
| battle event dialogue adjacency | candidate-only | 21 | False | btl resources near dialogue/event blocks are event adjacency candidates, not random encounter tables. |
| nearest enemy sprite proximity | sprite-proximity-candidate-not-enemy-row | 21 | False | nearest z*/boss sprite names are visual proximity hints; original enemy rows/formations are not bound. |
| enemy stat table | enemy-stat-table-name-hp-gold-grounded | 80 | False | 80 monster rows are grounded, but no field map/formation selector points to row indexes yet. |
| battle actor stat layout | actor-stat-layout-grounded | 80 | False | actor row copy/layout is grounded after an actor exists; the actor-instantiation producer is still missing. |
| monster turn action selection | static-vm-script-producer-grounded | False | action VM chooses a monster skill during battle; it is downstream of formation creation. | |
| battle end reward | battle-end-exp-gold-grounded-item-drop-handler-grounded-inactive | False | EXP/gold/drop handling is downstream of defeated actors, not the entry selector. |
Selector Root Resource Split
| root | class | map refs | btl refs | monster refs | formation proof |
|---|---|---|---|---|---|
0x004449f413:0 | unclassified-selector-root | map_i1.cns, map_i2.cns, map_i3.cns | False | ||
0x00444a4413:1 | sequence-root-with-resource-structure | map_i1.cns, map_i2.cns, map_i3.cns | False | ||
0x0044aa784:0 | unclassified-selector-root | map_a1.cns, map_a2.cns, map_d1.cns, map_d2.cns, map_d3.cns, map_g1.cns, map_g2.cns, map_g3.cns | False | ||
0x0044aad04:1 | sequence-root-with-resource-structure | map_a1.cns, map_a2.cns, map_d1.cns, map_d2.cns, map_d3.cns, map_g1.cns, map_g2.cns, map_g3.cns | False | ||
0x00459dc422:0 | sequence-root-with-resource-structure | map_k1.cns, map_k2.cns | False | ||
0x0045d7a09:0 | sequence-root-with-resource-structure | map_c1.cns, map_c2.cns, map_l1.cns, map_l2.cns, map_n1.cns, map_n2.cns | False | ||
0x00468b1816:0 | sequence-root-with-resource-structure | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x0047419419:0 | unclassified-selector-root | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x004741c419:1 | sequence-root-with-resource-structure | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x004783641:0 | sequence-root-with-resource-structure | map_d1.cns, map_d2.cns, map_d3.cns, map_g1.cns, map_g2.cns, map_g3.cns, map_h1.cns, map_h2.cns | False | ||
0x0048458c12:0 | sequence-root-with-resource-structure | map_i1.cns, map_i2.cns | False | ||
0x00494c348:0 | sequence-root-with-resource-structure | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x004a4e9c15:0 | sequence-root-with-resource-structure | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x004ac10c18:0 | sequence-root-with-resource-structure | map_l1.cns, map_l2.cns, map_e1.cns, map_e2.cns, map_e3.cns | False | ||
0x004c3e0811:0 | sequence-root-with-resource-structure | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns, map_j1.cns, map_j2.cns | False | ||
0x004c9a8c3:0 | unclassified-selector-root | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x004c9ab43:1 | sequence-root-with-resource-structure | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x004e237421:0 | sequence-root-with-resource-structure | map_e1.cns, map_e2.cns, map_f1.cns, map_f2.cns, map_h1.cns, map_h2.cns | False | ||
0x004e43887:0 | sequence-root-with-resource-structure | map_n1.cns, map_n2.cns | False | ||
0x004e625414:0 | sequence-root-with-resource-structure | map_l1.cns, map_l2.cns, map_n1.cns, map_n2.cns | False | ||
0x004f28a417:0 | sequence-root-with-resource-structure | map_d1.cns, map_d2.cns, map_d3.cns, map_g1.cns, map_g2.cns, map_g3.cns, map_h1.cns, map_h2.cns | False | ||
0x004f5ae86:0 | sequence-root-with-resource-structure | map_f1.cns, map_f2.cns, map_f3.cns, map_h1.cns, map_h2.cns, map_h3.cns | False | ||
0x0050000048:9, 48:13 | sequence-root-with-resource-structure | map_l1.cns, map_l2.cns, map_e1.cns, map_e2.cns | False | ||
0x005018080:0 | sequence-root-with-resource-structure | map_a1.cns, map_a2.cns, map_b1.cns, map_b2.cns, map_b3.cns | False | ||
0x005329405:0 | sequence-root-with-resource-structure | map_h1.cns, map_h2.cns, map_l1.cns, map_l2.cns, map_n1.cns, map_n2.cns | False | ||
0x0053c4a410:0 | sequence-root-with-resource-structure | map_d1.cns, map_d2.cns, map_d3.cns, map_g1.cns, map_g2.cns, map_g3.cns, map_h1.cns, map_h2.cns | False | ||
0x005407142:0 | sequence-root-with-resource-structure | map_a1.cns, map_a2.cns, map_d1.cns, map_d2.cns, map_d3.cns, map_g1.cns, map_g2.cns, map_g3.cns | False | ||
0x00557e6820:0 | sequence-root-with-resource-structure | map_j1.cns, map_j2.cns, map_j3.cns, map_h1.cns, map_h2.cns | False | ||
0x0043fc5c56:0 | sequence-root-with-resource-structure | zs_rr.cns | False | ||
0x0044340058:0 | resource-root-without-sequence | zsk_mou.cns | False | ||
0x0044dd5c45:0 | sequence-root-with-resource-structure | zs_maoh.cns | False | ||
0x0048c14432:0 | resource-root-without-sequence | zsl_yoi.cns | False | ||
0x004904d038:0 | sequence-root-with-resource-structure | zi_ibo.cns | False | ||
0x0049353861:0 | resource-root-without-sequence | zjk_gen.cns | False | ||
0x004a3dec39:0 | resource-root-without-sequence | zi_ikkak.cns | False | ||
0x004a69ac46:0 | resource-root-without-sequence | zh_doku.cns | False | ||
0x004aab8435:0 | resource-root-without-sequence | zsa_kika.cns | False | ||
0x004bdb2c62:0 | resource-root-without-sequence | zjk_byk.cns | False | ||
0x004c2a0863:0 | resource-root-without-sequence | zkg_kame.cns | False | ||
0x004cc00c47:0 | resource-root-without-sequence | zh_dai.cns | False | ||
0x004cd60844:0 | resource-root-without-sequence | zs_rai.cns | False | ||
0x004cd63c44:3 | unclassified-selector-root | zg_sen.cns | False | ||
0x004cd6ac44:4 | unclassified-selector-root | zg_sen.cns | False | ||
0x004cd6b044:2 | resource-root-without-sequence | zg_sen.cns | False | ||
0x004cdc9854:0 | unclassified-selector-root | zk_maoh.cns | False | ||
0x004cdca454:29 | resource-root-without-sequence | zk_maoh.cns | False | ||
0x004ce10450:0 | sequence-root-with-resource-structure | zh_rai.cns | False | ||
0x004d17e457:0 | resource-root-without-sequence | zs_rb.cns | False | ||
0x004d21d431:31 | unclassified-selector-root | zsa_saru.cns | False | ||
0x004d222c31:0 | unclassified-selector-root | zsa_saru.cns | False | ||
0x004d223831:28 | resource-root-without-sequence | zsa_saru.cns | False | ||
0x004e1aec37:30 | unclassified-selector-root | zi_ana.cns | False | ||
0x004e1b4037:0 | unclassified-selector-root | zi_ana.cns | False | ||
0x004e1b4c37:27 | resource-root-without-sequence | zi_ana.cns | False | ||
0x004e56f842:0 | resource-root-without-sequence | zs_enn.cns | False | ||
0x004e72b848:0 | resource-root-without-sequence | zh_ka.cns | False | ||
0x004ede1853:28 | unclassified-selector-root | zk_q.cns | False | ||
0x004ede6453:0 | unclassified-selector-root | zk_q.cns | False | ||
0x004ede7053:25 | resource-root-without-sequence | zk_q.cns | False | ||
0x0050348059:0 | resource-root-without-sequence | zjk_suz.cns | False | ||
0x0050387040:0 | sequence-root-with-resource-structure | zs_sl.cns | False | ||
0x005137dc55:0 | sequence-root-with-resource-structure | zs_ryu.cns | False | ||
0x0051be4436:30 | unclassified-selector-root | zi_inos.cns | False | ||
0x0051be5036:31 | unclassified-selector-root | zi_inos.cns | False | ||
0x0051be9836:0 | unclassified-selector-root | zi_inos.cns | False | ||
0x0051bea436:27 | resource-root-without-sequence | zi_inos.cns, zy_gost.cns | False | ||
0x0051beb836:1 | unclassified-selector-root | zy_gost.cns | False | ||
0x0051becc36:3 | unclassified-selector-root | zy_gost.cns | False | ||
0x0051bf2436:4 | unclassified-selector-root | zy_gost.cns | False | ||
0x0051bf2836:2 | sequence-root-with-resource-structure | zy_gost.cns | False | ||
0x005286a849:0 | sequence-root-with-resource-structure | zh_sui.cns | False | ||
0x0052db5834:0 | sequence-root-with-resource-structure | zsa_iwa.cns | False | ||
0x0054357843:0 | sequence-root-with-resource-structure | zs_ice.cns | False | ||
0x005455b860:0 | resource-root-without-sequence | zjk_sei.cns | False | ||
0x005455ec60:3 | unclassified-selector-root | zk_big.cns | False | ||
0x0054566860:4 | unclassified-selector-root | zk_big.cns | False | ||
0x0054566c60:2 | unclassified-selector-root | zk_big.cns | False | ||
0x0054592852:28 | unclassified-selector-root | zk_big.cns | False | ||
0x0054597452:0 | unclassified-selector-root | zk_big.cns | False | ||
0x0054598052:25 | resource-root-without-sequence | zk_big.cns | False | ||
0x00545d0441:0 | resource-root-without-sequence | zs_iwa.cns | False | ||
0x00546a9051:28 | unclassified-selector-root | zk_komo.cns | False | ||
0x00546a9c51:29 | unclassified-selector-root | zk_komo.cns | False | ||
0x00546adc51:0 | unclassified-selector-root | zk_komo.cns | False | ||
0x00546ae851:25 | resource-root-without-sequence | zk_komo.cns | False | ||
0x005573cc33:0 | resource-root-without-sequence | zsa_mi.cns | False |
Exact Table References In .text
| target | count | refs |
|---|---|---|
| actorRowTableBase | 4 | 0x0040bed8, 0x0040bf89, 0x0040c0f6, 0x0040c1b6 |
| exportedEnemyTableBase | 0 | |
| enemyNamePointerTable | 0 |
Next Frontier
- Find the event/encounter stream producer that reaches handler-table opcode 0x1e / 0x0040c084.
- Use the 0x1b..0x20/0x22 opcode cluster as battle-setup context, not as map encounter classification by itself.
- Search for indirect actor row table base arithmetic or row-index generation near battle setup, not exact dword refs.
- Separate event battle setup from random field encounter setup if their producers diverge.
- Only promote map -> battle/monster binding when a producer consumes field state and writes battle actors/background together.