Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a628377e5 |
@@ -0,0 +1,585 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user