Close RTINIT movement provider semantics

This commit is contained in:
gamer147
2026-07-23 17:11:14 -04:00
parent 8574673d53
commit 64f9cebd3b
10 changed files with 210 additions and 69 deletions

View File

@@ -1147,7 +1147,7 @@ name = "routine_execution_state"
category = "choice-output"
type = "int"
value_domain = "0..3"
usage = "Shared movement/battle routine result state. MVRTN and BTRTN clear it before scanning steps; RTN_M/RTN_B providers set a nonzero result to stop the scan, and the dispatcher supplies state 1 when no provider produced another result. Exact distinctions between provider-written states 1..3 remain unresolved."
usage = "Shared movement/battle routine result state. MVRTN and BTRTN clear it before scanning steps; a nonzero provider result stops the scan. Movement providers use state 1 for ordinary field movement/progress, state 2 for an immediate offensive battle action, and state 3 for an immediate healing/support action; MVRTN supplies state 1 when no provider produced another result."
source = "investigation"
confidence = "high"
depends_on = ["0xeff75", "0xeff76"]
@@ -1187,6 +1187,17 @@ source = "investigation"
confidence = "high"
depends_on = ["0x4e11b"]
[[global]]
address = "0x4e693"
name = "entity_skill_flags"
category = "data-table"
type = "int[50][300]"
value_domain = "zero absent; nonzero skill state indexed by SKINIT skill id"
usage = "Per-runtime-entity skill-state row. CALCREVISE and CALCSCOPE mark equipped skills, combat/field consumers test specific skill ids, and RTN_M009 requires skill 22 (Unlock) before treating an unopened type-7 chest as a treasure target."
source = "investigation"
confidence = "high"
depends_on = ["0x5212b", "0xa6f86"]
[[global]]
address = "0x522ed"
name = "entity_faction_ids"
@@ -1220,6 +1231,30 @@ source = "investigation"
confidence = "high"
depends_on = ["0x5231f"]
[[global]]
address = "0x53e13"
name = "entity_carried_item_ids"
category = "data-table"
type = "int[50][2]"
columns = { "0" = "slot_0", "1" = "slot_1" }
value_domain = "zero for empty; otherwise ITINIT item id"
usage = "Two carried/drop-item slots per runtime entity. SETEN initializes slot 0 from the unit's starting equipment item, FIELD fills an empty or matching slot when treasure is collected, and RTN_M009 requires an empty slot or an item-id match before approaching a chest/treasure object."
source = "investigation"
confidence = "high"
depends_on = ["0x53e77", "0x78c0e"]
[[global]]
address = "0x53e77"
name = "entity_carried_item_counts"
category = "data-table"
type = "int[50][2]"
columns = { "0" = "slot_0", "1" = "slot_1" }
value_domain = "0..999 quantity paired with entity_carried_item_ids"
usage = "Quantities for the two per-entity carried/drop-item slots. SETEN seeds a starting item with quantity one; FIELD adds treasure quantities to the matching slot and caps the result at 999."
source = "investigation"
confidence = "high"
depends_on = ["0x53e13"]
[[global]]
address = "0x53517"
name = "entity_movement_routine_set_ids"
@@ -1288,14 +1323,14 @@ depends_on = ["0x4e085"]
[[global]]
address = "0xb8d86"
name = "attack_range_distance_grid"
name = "action_range_distance_grid"
category = "data-table"
type = "int[][27]"
value_domain = "0 outside attack range; otherwise one-based encoded range band"
usage = "ATSEEK's row-major attack-range flood-fill grid. It starts from the acting entity, expands through map-valid doubled-coordinate neighbors up to offensive_action_max_range, and stores 1 for the first range band, 2 for the next, and so on. RTN_M051/052 use the value at an enemy tile to select an offensive_action_scope_masks band."
usage = "ATSEEK's row-major action-range flood-fill grid. It starts from the acting entity, expands through map-valid doubled-coordinate neighbors up to usable_action_max_range, and stores 1 for the first range band, 2 for the next, and so on. RTN_M051/052 select offensive targets from it; RTN_M061 selects in-range healing targets."
source = "investigation"
confidence = "high"
depends_on = ["0x5231f", "0x52351", "0xcc9f3", "0xcc9f4"]
depends_on = ["0x5231f", "0x52351", "0xcc9f3", "0xcc9f4", "0xcc9fe"]
[[global]]
address = "0x20543"
@@ -1347,7 +1382,7 @@ name = "entity_equipped_active_skill_ids"
category = "data-table"
type = "int[50][4]"
value_domain = "0 for an empty slot; otherwise SKINIT skill id"
usage = "Four equipped active-skill slots per runtime entity. CALCSCOPE maps each usable offensive skill into an action bit and range band; RTN_M051 turns the selected nonzero action bit back into its skill id."
usage = "Four equipped active-skill slots per runtime entity. CALCSCOPE maps each usable offensive or healing skill into the corresponding action bit and range band; RTN_M051/052 select offensive skills and RTN_M061 selects a healing skill from these slots."
source = "investigation"
confidence = "high"
depends_on = ["0xa6f86", "0xa71de", "0xa730a", "0xa7436"]
@@ -1358,18 +1393,18 @@ name = "entity_selected_action_ids"
category = "data-table"
type = "int[50]"
value_domain = "0 for normal attack; otherwise selected skill id"
usage = "Per-entity selected battle action. RTN_M051/052 write either zero for the normal attack or an id from entity_equipped_active_skill_ids, then return routine execution state 2 so FIELD enters battle. BTRTN may replace the value through a battle-provider decision."
usage = "Per-entity selected action. RTN_M051/052 write either zero for the normal attack or an offensive equipped skill and return routine execution state 2; RTN_M061 writes a healing skill and returns state 3. BTRTN may replace the value through a battle-provider decision."
source = "investigation"
confidence = "high"
depends_on = ["0x5212b", "0x66713", "0x66714", "0xeff77"]
[[global]]
address = "0xcc9f2"
name = "offensive_action_min_range"
name = "usable_action_min_range"
category = "counter"
type = "int"
value_domain = "encoded attack-range band 0..9"
usage = "CALCSCOPE initializes this from the equipped/default attack's minimum range and widens it for usable offensive skills. It is the lower bound used while populating offensive_action_scope_masks."
value_domain = "encoded action-range band 0..9"
usage = "CALCSCOPE initializes this from the equipped/default attack's minimum range and widens it for usable offensive and healing skills. It is the lower bound shared by the offensive and healing action-scope tables."
source = "investigation"
confidence = "high"
depends_on = ["0x8d431", "0xa71de"]
@@ -1408,6 +1443,18 @@ source = "investigation"
confidence = "high"
depends_on = ["0x8d431", "0x8d819", "0xa71de", "0xa730a", "0xcc9f2", "0xcc9f3", "0xcca08"]
[[global]]
address = "0xcc9fe"
name = "healing_action_scope_masks"
category = "data-table"
type = "int[10]"
columns = { "0" = "range_0", "1" = "range_1", "2" = "range_2", "3" = "range_3", "4" = "range_4", "5" = "range_5", "6" = "range_6", "7" = "range_7", "8" = "range_8", "9" = "range_9" }
value_domain = "action-availability bitmask: bits 1..4 are equipped healing skills"
usage = "CALCSCOPE clears ten encoded-range cells and sets the equipped-slot bit for each usable category-7 healing skill over its applicable range. RTN_M061 uses the masks to restrict ally targets and to select the range-enabled healing skill."
source = "investigation"
confidence = "high"
depends_on = ["0x5212b", "0xa6f86", "0xa71de", "0xa730a", "0xcc9f2", "0xcc9f3"]
[[global]]
address = "0x152616"
name = "current_entity_index"
@@ -2158,11 +2205,11 @@ depends_on = []
[[global]]
address = "0xcc9f3"
name = "offensive_action_max_range"
name = "usable_action_max_range"
category = "counter"
type = "int"
value_domain = "encoded attack-range band 0..9"
usage = "CALCSCOPE initializes this from the equipped/default attack's maximum range and widens it for usable offensive skills. ATSEEK bounds its attack-range flood fill with this value; RTN_M051/052 use it as the upper scan bound."
value_domain = "encoded action-range band 0..9"
usage = "CALCSCOPE initializes this from the equipped/default attack's maximum range and widens it for usable offensive and healing skills. ATSEEK bounds its action-range flood fill with this value; RTN_M051/052 and RTN_M061 use it as their upper scan bound."
source = "investigation"
confidence = "high"
depends_on = ["0x8d819", "0xa730a"]
@@ -2178,17 +2225,6 @@ source = "auto-shape"
confidence = "med"
depends_on = []
[[global]]
address = "0xeff77"
name = ""
category = "story-flag"
type = "int"
value_domain = "one of {0, 2, 3}"
usage = "TODO: confirm. Branch-read in 0 scenes / 3 scripts; compared against [0, 2, 3]; writers=['BTRTN.BIN', 'MVRTN.BIN', 'RTN_B001.BIN', 'RTN_B002.BIN']."
source = "auto-shape"
confidence = "med"
depends_on = []
[[global]]
address = "0x152617"
name = ""