# P9.1 Arbitrary-Party Gameplay Experience Specification > Status: expert candidate for P9.1 contract reconciliation > Authority: game-design output only; UX/visual and runtime architecture remain > separate expert inputs > Baseline: P9.0R10 pair adaptation plus the preserved P9.0R5-R7 first-session > continuation > Review language: Chinese first > Scope: one deterministic, non-authoritative five-battle first-session fixture ## 1. Outcome And Boundary Every unordered selection of two different Recruits must complete this same player arc: ```text choose any two -> automatic formation -> battle 1 -> pair diagnosis -> choose one loan adaptation -> battle 2 -> choose one Guild response -> battle 3 -> choose and review one route -> battle 4 -> choose and review one member growth -> battle 5 -> first-session result ``` P9.1 proves that the current four-Recruit fixture supports arbitrary starting pairs. It does not create authoritative combat, economy, XP, inventory, casualty, recovery, save, difficulty, chapter, Market or promotion systems. All battles below are deterministic presentation fixtures. A fixture victory must not be described as proof of balance outside this session. The implementation must preserve P9.0R3 action pacing and event-bound feedback, P9.0R8 entry behavior, P9.0R9A automatic formation, and every accepted standard pair value explicitly marked as a regression anchor below. ## 2. Stable Terms And State ### 2.1 Identity, formation and origins Stable profession IDs and automatic priority remain: ```text Hearthguard -> Wayrunner -> Farstring -> Kindhand ``` The lower priority index is placed nearer the threat. Selection order never changes formation. P9.1 uses these identity terms instead of inferring behavior from a visual slot: | Term | Exact meaning | |---|---| | `starting_pair` | The two selected Recruit IDs, normalized by automatic priority. | | `lead_id` | The first current member after automatic formation. | | `initial_second_id` | The second member of the committed two-Recruit formation; this origin identity never changes. | | `added_id` | The one Recruit added by the Guild response, or empty. | | `field_order` | Current member IDs sorted by automatic priority after a legal addition. | | `marked_id` | `initial_second_id`; battles 4 and 5 must target this identity, even if adding a Recruit moved its visible position. | | `member_origin` | `starting` or `guild_added`; it is independent of current field position. | If a Guild addition changes field order, the Guild commit result must name the move before battle 3. In particular, adding Hearthguard to Farstring + Kindhand changes the lead from Farstring to Hearthguard. This is a system re-formation, not a player-selected front/rear decision. ### 2.2 Profession actions No branch may use `else = Kindhand` or derive an action from `front`, `rear`, `second` or `added`. It must resolve the actual profession ID: | Profession | Lv.1 battle response | Fifth-battle Lv.2 change | |---|---|---| | Hearthguard | Leads with guard/contact when first in field order. | If lead, removes `20` more damage from the lead pressure after item mitigation. | | Wayrunner | If lead, evades part of contact; otherwise makes one `-30` flank counter. | If lead, removes `20` more lead damage; if `marked_id`, removes `20` from its own split damage. | | Farstring | Makes one ranged hit (`-36` in battle 3; `-30` in battles 4-5). | Moves that one battle-5 shot before pressure and changes time `7.40 -> 6.40`; never adds an attack. | | Kindhand | Makes one recovery action on the member damaged by the current pressure. | Changes its battle-5 recovery from `+12` to `+25`; never adds a heal. | Damage and recovery clamp to `[0, 100]` for Recruit HP and to `[0, enemy_max]` for enemy HP. Each non-zero mutation emits exactly one number/VFX payload on the actual target. A member acts at most once in each scripted role-action window. ### 2.3 Required run state The domain snapshot must be able to express these values without reading a Control tree or render clock: ```text starting_pair: [member_id, member_id] lead_id: member_id initial_second_id: member_id field_order: [member_id, member_id] | [member_id, member_id, member_id] added_id: empty | member_id adaptation_id: empty | EQ-002 | EQ-061 guild_response_id: empty | retain_loan | add_recruit retained_item_id: empty | EQ-002 | EQ-061 coin: integer company_size: 2 | 3 route_id: empty | R6-01 | R6-02 | R6-03 trained_member_id: empty | one current member_id member_level(member_id): 1 | 2 formation_commit_count: 0 | 1 first_reward_committed: bool adaptation_committed: bool guild_committed: bool route_committed: bool route_reward_committed: bool training_committed: bool fifth_reward_committed: bool ``` One run cannot contain duplicate member IDs or duplicate professions in this bounded fixture. ## 3. Battles 1 And 2: Preserved Pair Foundation ### 3.1 All six starting pairs Battle 1 resets both members to `100 HP`, the enemy to `100 HP`, and runs for `7.25 s`. The existing first reward commits `+20 Coin` once after enemy HP is zero. These are the required results: | Pair key | Lead response | Second response | Battle-1 lead HP | Diagnosis fact | |---|---|---|---:|---| | `HG-WR` | Hearthguard blocks `-18` (`100 -> 82`) | Wayrunner flank counter | `82` | 防住首击;第二位以侧翼反击补伤害。 | | `HG-FS` | Hearthguard blocks `-18` (`100 -> 82`) | Farstring ranged hit | `82` | 防住首击;第二位以远射打开终结线。 | | `HG-KH` | Hearthguard `100 -> 82` | Kindhand `+12` | `94` | 防住首击;第二位恢复先行者。 | | `WR-FS` | Wayrunner evades to `88` | Farstring ranged hit | `88` | 闪避减伤;第二位以远射补伤害。 | | `WR-KH` | Wayrunner `100 -> 88` | Kindhand `+12`, capped | `100` | 闪避减伤;第二位把先行者恢复至满值。 | | `FS-KH` | Farstring exposed lead `100 -> 58` | Kindhand `+12` | `70` | 远程成员先行而高暴露;治疗只补回部分损失。 | The diagnosis names both actual Recruits and their actual actions. The accepted first-battle qualifier `后排命中` remains unchanged where P9.0R3 uses it; later pages say `第二位` or the Recruit name. ### 3.2 Unselected adaptation and battle 2 The adaptation page always opens with no selection. Both options name the actual `lead_id` and the same exact counterfactual: | ID | Chinese-first option consequence | Battle-2 time | |---|---|---:| | `EQ-002` | `钉阵胫甲:先行者只承受 -10;放弃先手。` | `7.05 s` | | `EQ-061` | `先鸣铃:敌人先失去 28 生命;先行者承受完整 -30。` | `6.00 s` | Selection and revision mutate only the pending ID. `BeginSecondBattle` is the single commit. It records one loan, cannot be repeated, and resets battle HP; it never spends Coin. Battle 2 gives no additional Coin. | Pair group | `EQ-002` final lead HP | `EQ-061` final lead HP | Reason | |---|---:|---:|---| | no Kindhand: `HG-WR`, `HG-FS`, `WR-FS` | `90` | `70` | No recovery follows the veteran hit. | | has Kindhand: `HG-KH`, `WR-KH`, `FS-KH` | `100` | `82` | Kindhand restores `+12` after the hit. | Enemy HP reaches zero on every row. Coin remains `20`; the first reward count remains one. Wayrunner in second position always counters, Farstring always shoots, and Kindhand always heals. ### 3.3 Six-pair continuation registry This registry makes the complete path entitlement explicit. Every row may take either adaptation, either mapped Guild branch, every R6 route, every current member as the one growth target, and must then reach the first-session result. | Starting pair | Battle-1 lead HP | Battle-2 `EQ-002 / EQ-061` HP | Retain growth candidates | Add growth candidates | |---|---:|---:|---|---| | `HG-WR` | `82` | `90 / 70` | `HG, WR` | after `EQ-002`: `HG, WR, FS`; after `EQ-061`: `HG, WR, KH` | | `HG-FS` | `82` | `90 / 70` | `HG, FS` | `HG, FS, KH` | | `HG-KH` | `94` | `100 / 82` | `HG, KH` | `HG, FS, KH` | | `WR-FS` | `88` | `90 / 70` | `WR, FS` | `WR, FS, KH` | | `WR-KH` | `100` | `100 / 82` | `WR, KH` | `WR, FS, KH` | | `FS-KH` | `70` | `100 / 82` | `FS, KH` | `HG, FS, KH`; HG becomes lead | For each cell, routes `R6-01`, `R6-02` and `R6-03` are legal. The final result uses the exact HP/time function in section 6.2 and the exact Coin/Company table in section 6.4; no row stops at an earlier preview boundary. ## 4. Guild Response And Battle 3 ### 4.1 Transaction and unselected state The Guild page inherits the actual pair, field order, selected loan, `20 Coin` and the battle-2 facts. It opens with neither response selected. The exact unselected guidance template is: ```text 尚未选择。花 12 金币保留【{loan_name}】,继续使用{loan_effect}; 或花 14 金币招募【{added_name}】,{addition_effect}。 选择不会扣款;确认出发后才结算,出发前可更改。 ``` The two stable responses are: | ID | Atomic commit | Persistent consequence in this session | |---|---|---| | `retain_loan` | `coin 20 -> 8`; keep the selected loan; Company remains 2. | `EQ-002` remains a lead-pressure brace; `EQ-061` remains a tempo opener. | | `add_recruit` | `coin 20 -> 6`; return the loan; add exactly the mapped Recruit; Company becomes 3. | Gains one role action, one later training candidate, and state-dependent route coverage. | The addition is deterministic and must not use the old `missing rear` fallback: | Starting pair | Prior loan | `added_id` | `field_order` after commit | `addition_effect` | |---|---|---|---|---| | `HG-WR` | `EQ-002` | Farstring | `HG, WR, FS` | 增加远射,弥补只有近身回应的阵线;仍没有治疗。 | | `HG-WR` | `EQ-061` | Kindhand | `HG, WR, KH` | 增加治疗,补回先手装备接受的完整重击;仍没有远射。 | | `HG-FS` | either | Kindhand | `HG, FS, KH` | 增加受击后恢复,形成远射与治疗两种支援。 | | `HG-KH` | either | Farstring | `HG, FS, KH` | 增加远射;原 Kindhand 保留 `starting` 身份。 | | `WR-FS` | either | Kindhand | `WR, FS, KH` | 增加恢复,保护闪避失败后的阵线。 | | `WR-KH` | either | Farstring | `WR, FS, KH` | 增加远射,换取更稳定的击破节奏。 | | `FS-KH` | either | Hearthguard | `HG, FS, KH` | Hearthguard 接替先行,修复 Farstring 的高暴露;两名原成员保留身份。 | This table is both the offer matrix and the duplicate-prevention allowlist. Any unmapped pair/item, already-present Recruit, insufficient Coin, stale selection or repeated commit is rejected with zero partial mutation. ### 4.2 Battle-3 event contract Battle 3 starts all present members at `100 HP` and the captain at `130 HP`. The deterministic order is: 1. Retained `EQ-061` changes enemy `130 -> 102`; otherwise telegraph only. 2. Captain pressure changes lead to `90` with retained `EQ-002`, otherwise `70`. 3. Each non-lead profession acts once in field order: Wayrunner `-30` enemy, Farstring `-36` enemy, Kindhand `+12` lead. 4. A retained two-member build follows up and clamps enemy to at most `44`; a three-member build proceeds directly to coordination. 5. Coordination clamps enemy to `26` for two members or `32` for three. 6. The finisher changes enemy to `0`. Battle 3 gives no Coin. The accepted durations remain `7.60 s` for retained `EQ-002`, `6.60 s` for retained `EQ-061`, and `7.00 s` for an added Recruit. ### 4.3 Complete battle-3 branch table Each row represents two legal Guild branches for one pair/adaptation state. `HP/time/coin/company` are the exact battle-3 result. | Pair | Loan | Retain result | Add result | |---|---|---|---| | `HG-WR` | `EQ-002` | `90 / 7.60 / 8 / 2` | add FS; `70 / 7.00 / 6 / 3` | | `HG-WR` | `EQ-061` | `70 / 6.60 / 8 / 2` | add KH; `82 / 7.00 / 6 / 3` | | `HG-FS` | `EQ-002` | `90 / 7.60 / 8 / 2` | add KH; `82 / 7.00 / 6 / 3` | | `HG-FS` | `EQ-061` | `70 / 6.60 / 8 / 2` | add KH; `82 / 7.00 / 6 / 3` | | `HG-KH` | `EQ-002` | `100 / 7.60 / 8 / 2` | add FS; `82 / 7.00 / 6 / 3` | | `HG-KH` | `EQ-061` | `82 / 6.60 / 8 / 2` | add FS; `82 / 7.00 / 6 / 3` | | `WR-FS` | `EQ-002` | `90 / 7.60 / 8 / 2` | add KH; `82 / 7.00 / 6 / 3` | | `WR-FS` | `EQ-061` | `70 / 6.60 / 8 / 2` | add KH; `82 / 7.00 / 6 / 3` | | `WR-KH` | `EQ-002` | `100 / 7.60 / 8 / 2` | add FS; `82 / 7.00 / 6 / 3` | | `WR-KH` | `EQ-061` | `82 / 6.60 / 8 / 2` | add FS; `82 / 7.00 / 6 / 3` | | `FS-KH` | `EQ-002` | `100 / 7.60 / 8 / 2` | add HG and reform; `82 / 7.00 / 6 / 3` | | `FS-KH` | `EQ-061` | `82 / 6.60 / 8 / 2` | add HG and reform; `82 / 7.00 / 6 / 3` | ## 5. Route Choice And Battle 4 ### 5.1 Offers and state-derived coverage The route board opens unselected and displays current Company, retained item or added Recruit, known pressure, exposure, reward, coverage state and a causal reason. It never displays future exact HP or marks a recommendation. Exact unselected guidance: ```text 尚未选择路线。比较已知压力、当前应对与胜利奖励; 选择只会打开复核,确认出发前仍可返回更换。 ``` Each option uses this exact fact order: ```text 【{route_name}】|{pressure_name}|{exposure_label}|胜利 +{reward} 金币 {coverage_label}:{coverage_reason_zh} ``` | ID | Pressure | Reward | |---|---|---:| | `R6-01` 风墙长堤 | 正面粉碎 | `+4 Coin` | | `R6-02` 钟晶疾道 | 速度爆发 | `+7 Coin` | | `R6-03` 双辉裂谷 | 标记并分击 `marked_id` | `+10 Coin` | Coverage is evaluated from actual state: | Route | `covered` | `partial` | `gap` | |---|---|---|---| | `R6-01` | retained `EQ-002` directly braces the crush | Company 3 with Kindhand recovers after impact | all other states | | `R6-02` | retained `EQ-061` acts before the burst | any Company 3 responds with an extra action after the burst | retained two-member state without `EQ-061` | | `R6-03` | Company 3 contains both Farstring and Kindhand | Company 3 lacks one of those roles | every two-member state | The reason must name the actual item/member and limitation. Example: `部分应对:赛布尔能在爆发后恢复先行者,但不能打断首次伤害。` Selection mutates only `route_id`. Review mutates nothing and can return to the same selection. `commit_route` is the single lock/start boundary and costs no Coin. Reward commits once only after enemy HP is zero. ### 5.2 Complete battle-4 result function Battle 4 resets all members to `100 HP` and the enemy to `120 HP`. The result uses one of these mutually exclusive build rows. `KH?` means Kindhand is present. `FS+KH?` means both are present. | Build state | R6-01 lead / marked / time | R6-02 lead / marked / time | R6-03 lead / marked / time | |---|---|---|---| | retained `EQ-002`, no KH | `90 / 100 / 7.40` | `70 / 100 / 8.00` | `100 / 65 / 7.80` | | retained `EQ-002`, KH | `100 / 100 / 7.40` | `82 / 100 / 8.00` | `100 / 77 / 7.80` | | retained `EQ-061`, no KH | `60 / 100 / 6.40` | `70 / 100 / 6.00` | `100 / 65 / 6.70` | | retained `EQ-061`, KH | `72 / 100 / 6.40` | `82 / 100 / 6.00` | `100 / 77 / 6.70` | | Company 3, no KH | `70 / 100 / 7.00` | `70 / 100 / 6.80` | `100 / 65 / 7.00` | | Company 3, KH but not FS | `82 / 100 / 7.00` | `82 / 100 / 6.80` | `100 / 77 / 7.00` | | Company 3, FS + KH | `82 / 100 / 7.00` | `82 / 100 / 6.80` | `100 / 88 / 7.00` | Battle-4 pressure is exact: - R6-01: retained `EQ-002` deals `-10`; a three-member line deals `-30`; retained `EQ-061` deals `-40`. Kindhand then restores `+12` to lead. - R6-02: pressure deals `-30`. Kindhand then restores `+12` to lead. Retained `EQ-061` changes enemy `120 -> 90` before pressure. - R6-03: pressure deals `-35` to `marked_id`. Kindhand restores `+12`; a three-member Farstring + Kindhand line instead performs one combined `+23` recovery, preserving the accepted `65 -> 88` anchor. - Every non-lead Wayrunner/Farstring performs one actual attack. A closer clamps enemy to `28`, then the finisher changes it to `0`. Coin after the once-only route reward is: | Guild branch | R6-01 | R6-02 | R6-03 | |---|---:|---:|---:| | retained loan | `12` | `15` | `18` | | added Recruit | `10` | `13` | `16` | Company size and membership never change at the route boundary. ## 6. Individual Growth And Battle 5 ### 6.1 Offer contract Training opens only from a verified battle-4 result with route reward committed. It shows every current member, current field position, origin, profession, current level and exact next-event change. No member is selected initially. An absent member never renders and is illegal. Exact unselected guidance: ```text 尚未选择历练成员。比较先行承压、标记者生存、射击节奏与恢复; 唯一印记只能让一名当前成员升至 Lv.2,确认前可换人。 ``` Selection mutates only the pending member ID. Review names the same member and one exact counterfactual. `commit_training` consumes the one bounded veteran mark, changes exactly that member to `Lv.2`, locks once and starts battle 5. Every other member remains `Lv.1`. The Chinese option templates are: | State | Exact template | |---|---| | Hearthguard lead | `历练【{name}】:正面重压再减少 20;先行者生命 {base_lead} -> {trained_lead}。` | | Wayrunner lead | `历练【{name}】:闪避再减少 20 正面伤害;先行者生命 {base_lead} -> {trained_lead}。` | | Wayrunner is `marked_id` | `历练【{name}】:自身分裂伤害减少 20;受击后生命 60 -> 80(治疗另行结算)。` | | Farstring | `历练【{name}】:唯一射击提前;不增加次数;用时 7.40 -> 6.40 秒。` | | Kindhand | `历练【{name}】:对受伤标记者的恢复 +12 -> +25。` | ### 6.2 Battle-5 calculation Battle 5 resets each present member to `100 HP` and the enemy to `140 HP`. The deterministic sequence is: 1. A trained Farstring performs its only `-30` shot (`140 -> 110`) before pressure. 2. Lead pressure is `-30` with retained `EQ-002`, otherwise `-45`. A trained lead Hearthguard/Wayrunner removes another `20`. 3. Split pressure is `-40` to `marked_id`; a trained marked Wayrunner removes `20` from its own hit. 4. Unspent member actions resolve once. Farstring deals `-30`; Wayrunner deals `-30`; Kindhand restores `+25` when trained, otherwise `+12`, to `marked_id`. 5. The Company/retained-build closer and finisher change enemy to `0`. 6. Verified victory commits `+8 Coin` exactly once. The result functions are therefore: ```text base_lead_hp = 70 when retained_item_id == EQ-002, otherwise 55 lead_hp = base_lead_hp + 20 only when trained member is current lead and profession is Hearthguard or Wayrunner marked_hp_after_split = 80 only when trained member == marked_id and profession == Wayrunner; otherwise 60 marked_hp = clamp(marked_hp_after_split + kindhand_heal, 0, 100) kindhand_heal = 25 when Kindhand is trained, 12 when Kindhand is present, otherwise 0 time = 6.40 when Farstring is trained, otherwise 7.40 enemy_hp = 0 ``` Route changes inherited Coin and the causal recap, but does not secretly alter this fixed encounter. ### 6.3 Complete growth-state matrix Cells use `trained member: lead HP / marked HP / time`. This table enumerates every distinct state reachable from all six pair paths. Route choice adds Coin per section 6.4 but does not change a cell. | Starting/Guild state | Legal training results | |---|---| | `HG-WR`, retain `EQ-002` | `HG: 90/60/7.40`; `WR: 70/80/7.40` | | `HG-WR`, retain `EQ-061` | `HG: 75/60/7.40`; `WR: 55/80/7.40` | | `HG-WR`, add FS after `EQ-002` | `HG: 75/60/7.40`; `WR: 55/80/7.40`; `FS: 55/60/6.40` | | `HG-WR`, add KH after `EQ-061` | `HG: 75/72/7.40`; `WR: 55/92/7.40`; `KH: 55/85/7.40` | | `HG-FS`, retain `EQ-002` | `HG: 90/60/7.40`; `FS: 70/60/6.40` | | `HG-FS`, retain `EQ-061` | `HG: 75/60/7.40`; `FS: 55/60/6.40` | | `HG-FS`, add KH | `HG: 75/72/7.40`; `FS: 55/72/6.40`; `KH: 55/85/7.40` | | `HG-KH`, retain `EQ-002` | `HG: 90/72/7.40`; `KH: 70/85/7.40` | | `HG-KH`, retain `EQ-061` | `HG: 75/72/7.40`; `KH: 55/85/7.40` | | `HG-KH`, add FS | `HG: 75/72/7.40`; `KH: 55/85/7.40`; `FS: 55/72/6.40` | | `WR-FS`, retain `EQ-002` | `WR: 90/60/7.40`; `FS: 70/60/6.40` | | `WR-FS`, retain `EQ-061` | `WR: 75/60/7.40`; `FS: 55/60/6.40` | | `WR-FS`, add KH | `WR: 75/72/7.40`; `FS: 55/72/6.40`; `KH: 55/85/7.40` | | `WR-KH`, retain `EQ-002` | `WR: 90/72/7.40`; `KH: 70/85/7.40` | | `WR-KH`, retain `EQ-061` | `WR: 75/72/7.40`; `KH: 55/85/7.40` | | `WR-KH`, add FS | `WR: 75/72/7.40`; `KH: 55/85/7.40`; `FS: 55/72/6.40` | | `FS-KH`, retain `EQ-002` | `FS: 70/72/6.40`; `KH: 70/85/7.40` | | `FS-KH`, retain `EQ-061` | `FS: 55/72/6.40`; `KH: 55/85/7.40` | | `FS-KH`, add HG and reform | `HG: 75/72/7.40`; `FS: 55/72/6.40`; `KH: 55/85/7.40` | For `add` rows shared by both prior loans, the returned loan has no battle-5 effect, but the result history must still retain which adaptation was returned. ### 6.4 Final resources | Guild branch | R6-01 final Coin | R6-02 final Coin | R6-03 final Coin | Company | |---|---:|---:|---:|---:| | retained loan | `20` | `23` | `26` | `2` | | added Recruit | `18` | `21` | `24` | `3` | The final Company has exactly one Lv.2 member, enemy HP `0`, and no persistent item/inventory claim beyond the current in-memory session. ## 7. Result Causality And Next Action Every result presents action, cause, changed state and next action in that order. Values are substituted from the committed snapshot; UI code must not recompute pair logic. ### 7.1 Chinese-first result templates **Battle 1 / pair diagnosis** ```text 发生了什么:系统让【{lead_name}】先行;{lead_action_zh}。 为什么:【{second_name}】随后{second_action_zh}。 状态变化:先行者 {lead_hp}/100;获得 20 金币(仅一次)。 下一步:比较钉阵胫甲与先鸣铃,选择本队下一战的安全或节奏。 ``` **Battle 2 / adaptation result** ```text 发生了什么:【{loan_name}】让{loan_action_zh}。 为什么:【{lead_name}】{lead_consequence_zh};【{second_name}】{second_action_zh}。 状态变化:先行者 {lead_hp}/100;用时 {time} 秒;金币仍为 20。 下一步:返回公会,在保留这件装备与招募【{mapped_recruit_name}】之间选择。 ``` **Battle 3 / Guild result** ```text 发生了什么:你选择了【{guild_response_name}】;{guild_action_zh}。 为什么:{battle3_cause_zh}。 状态变化:先行者 {lead_hp}/100;金币 {coin};小队 {company_size} 人;用时 {time} 秒。 下一步:打开路线板,比较三条路线对当前【{build_summary_zh}】的覆盖与奖励。 ``` **Battle 4 / route result** ```text 发生了什么:小队通过【{route_name}】,获得 {route_reward} 金币。 为什么:路线压力是【{pressure_name}】;当前构筑为【{coverage_label}】,因为{coverage_reason_zh}。 状态变化:先行者 {lead_hp}/100;【{marked_name}】{marked_hp}/100;金币 {coin};用时 {time} 秒。 下一步:用唯一历练印记选择一名当前成员升至 Lv.2;确认前可返回换人。 ``` **Battle 5 / first-session result** ```text 发生了什么:【{trained_name}】升至 Lv.2;{training_effect_zh}。 为什么:{battle5_cause_zh};此前【{guild_response_name}】与【{route_name}】分别决定了小队结构和金币。 状态变化:先行者 {lead_hp}/100;【{marked_name}】{marked_hp}/100;金币 {coin};小队 {company_size} 人;用时 {time} 秒。 决定链:{pair_names} -> {loan_name} -> {guild_response_name} -> {route_name} -> 历练 {trained_name}。 下一步:本次首局已结束。可重新开始尝试另一组搭配,或返回主菜单;后续章节尚未开放。 ``` English follows the same fact order and substitutes the same IDs/numbers. It must not shorten away the cause, choice or next action. At 130% text, the copy may wrap but no fact may be removed. ### 7.2 Unsupported-state truthfulness If a committed snapshot violates any allowlist or exactly-once precondition, the game must not fabricate a battle or result. It remains on the last valid decision state and exposes a bounded recovery message: ```text 当前选择与小队状态不一致,未进行结算。请返回并重新选择。 ``` No route may enter an old `front + rear` fallback, label Wayrunner/FS as Kindhand, recruit a duplicate, train an absent member, pay twice, grant a reward before enemy defeat, or navigate to an unimplemented next chapter. ## 8. Transaction And Exactly-Once Boundaries | Boundary | Preconditions | Atomic mutations | Duplicate/out-of-state behavior | |---|---|---|---| | formation commit | exactly two distinct allowlisted members; valid automatic order | set pair/origins/order; count `0 -> 1`; start battle 1 | inert | | first reward | battle-1 enemy `0`; not committed | `coin += 20`; flag true | inert | | adaptation commit | adaptation page; one legal loan; not committed | lock loan; flag true; start battle 2 | inert | | Guild commit | Guild page; mapped response; enough Coin; not committed | revalidate; spend once; retain or add/reform; update Company; flag true; start battle 3 | reject with zero partial mutation | | route commit | review page; legal route; not committed | lock state snapshot; flag true; start battle 4 | inert | | route reward | route committed; enemy `0`; reward not committed | add `4/7/10`; flag true | inert | | training commit | review page; member currently present; mark available; not committed | consume mark; set that member Lv.2; flag true; start battle 5 | reject with zero partial mutation | | fifth reward | training committed; enemy `0`; not committed | `coin += 8`; flag true | inert | Selection/revision/review/back never spends, rewards, recruits, levels or starts a battle. Home and confirmed Restart clear the complete transient snapshot, all selections, origins, members, levels, items, Coin and commit flags. Cancel Restart changes none of them. ## 9. Decision-Density And Non-Dominance Audit No option dominates across every pair/state and all visible outcomes: | Decision | Option with a rational best case | Counter-option with a rational best case | Proof of tradeoff | |---|---|---|---| | Adaptation | `EQ-002` maximizes battle-2 lead HP and later covers R6-01 if retained. | `EQ-061` is `1.05 s` faster in battle 2 and later covers/accelerates R6-02 if retained. | Safety and tempo move in opposite directions. | | Guild | Retain leaves `2` more final Coin and preserves brace or tempo. | Add supplies a third action/training candidate and can cover R6-03 with FS+KH. | Equipment/wealth versus roster breadth; neither contains the other. | | R6-01 | Best lead survival for retained `EQ-002`. | R6-02 is fastest with `EQ-061`; R6-03 pays `3-6` more Coin. | Survival, time and reward have different maxima. | | R6-02 | Best time for retained `EQ-061`. | R6-01 protects brace builds; R6-03 rewards full FS+KH coverage. | Its value changes with retained item and Company. | | R6-03 | Highest reward and covered by a three-member FS+KH line. | Two-member/no-heal states preserve only `65` marked HP, making safer routes legible alternatives. | Reward rises with targeted-member exposure. | | Growth | Lead HG/WR maximizes lead HP. | Marked WR maximizes its own split survival; FS minimizes time; KH maximizes recovery. | One mark cannot improve all three metrics. | State changes visibly alter value rather than only wording: - `HG-WR + EQ-002` offers Farstring at the Guild; `HG-WR + EQ-061` offers Kindhand, so the prior adaptation changes the roster opportunity. - Adding Hearthguard to `FS-KH` changes the lead and removes the unsupported fragile-lead continuation. - R6-03 changes from `gap/65 marked HP` in a two-person build to `covered/88` only for a three-person FS+KH support line. - Training a second-position Wayrunner changes its own marked HP `60 -> 80` instead of incorrectly improving another member because of an old slot assumption. ## 10. Deterministic Coverage Required For Implementation The implementation contract and tests must expand the compact functions above into these complete products: ```text formation: 6 unordered pairs x 2 click orders battle 2: 6 pairs x 2 adaptations = 12 battle 3: 12 pair/adaptation states x 2 Guild responses = 24 battle 4: all 24 prior branches x 3 routes = 72 battle 5: each of those 72 branches x every present member (2 or 3) ``` For every row, assert identities/origins, field order, actual role events, lead/marked/enemy HP, time, Coin, Company, retained/returned item, route coverage/reward, exactly one Lv.2 member, all commit flags, Chinese causal facts and the two legal final actions. Counterfactual tests must include: - Wayrunner as second member (`HG-WR`) and as lead (`WR-FS`, `WR-KH`); - exposed Farstring lead before and after `FS-KH` adds Hearthguard; - `HG-WR` adding different Recruits from the two prior loans; - original Kindhand moving behind an added Farstring while remaining `marked_id`; - Company 3 without Kindhand (`HG-WR-FS`), without Farstring (`HG-WR-KH`), and with both (`HG-FS-KH`, `WR-FS-KH`); - every invalid ID, duplicate/stale commit, insufficient-Coin commit, absent training member and premature reward. This matrix is the game-design authority for P9.1 reconciliation. UX may choose layout and architecture may choose representation, but neither may change the IDs, state dependency, mutations, exact numeric results, decision meaning or result causality without returning to the game-design boundary.