277 lines
23 KiB
Markdown
277 lines
23 KiB
Markdown
# DESIGN §29 — 0.2.4
|
||
|
||
Part of [DESIGN.md](../DESIGN.md). This chapter records 0.2.4, released on 2026-10-11.
|
||
|
||
## 29. Community follow-up
|
||
|
||
### 29.1 Boss overtime and Raid revival
|
||
|
||
- The maintainer requested the extra Final Assault / Hidden Core overtime grace only for teams with an AI teammate.
|
||
At fight start, a non-departed AI seat preserves the configured 150 real seconds; otherwise the threshold is the
|
||
visible level countdown (120 real seconds). The decision stays fixed during that fight. The first deduction is at
|
||
the following whole real second, at one team LP per real second. `overtimeAt` uses that same threshold.
|
||
- Ordinary Raid polls keep the 0.2.3 order: own field first, then remaining route distance and stable id, and they
|
||
still jump only when the skill is ready or the member has been idle long enough and the range is empty.
|
||
The maintainer confirmed one reselect immediately after a revive. That reselect alone orders by taunt, then
|
||
remaining route distance, then id, and it jumps while the operator is not blocking, even if another enemy is
|
||
already in range. Standing on an enemy's tile is blocking: the 0.25 s poll runs before that tick's block pass,
|
||
so the reselect refreshes contact before it decides to stay. A retreat, a move, a redeploy that waited out its
|
||
timer, the initial deployment and a Raid jump do not arm it. [ASSUMED] A revive is recognised as a knock-out
|
||
redeploy that returns before `respawnAt`; the bond text does not name that timer split.
|
||
- Regression: `boss-ai-grace.test.js` covers both final fights with/without AI; `community-round29.test.js` covers
|
||
Texas S2 with local enemies, remote taunt/route priority, blocked revival and no repeated self-trigger.
|
||
|
||
### 29.2 Operator, item and sharing corrections
|
||
|
||
- #462, Pinecone S2: PRTS's growth is per deployment. A deployment-local use count resets on redeploy; the runtime's
|
||
lifetime activation sequence is unchanged. Normal and elite variants are covered.
|
||
- #459, Harold S2: a healer that can heal elemental injury considers elemental-only injury when deciding to cast.
|
||
Full HP plus an elemental gauge can trigger; a wholly uninjured ally cannot.
|
||
- #461, family crest: the first damage after stealth ends consumes the accumulated bonus immediately, including
|
||
damage before the next growth poll. A synchronous equipment combo cannot consume it repeatedly; the current hit
|
||
and combo retain the attack value that triggered them.
|
||
- #464, Skadi S1 / Stead sharing: redirected damage carries both existing redirect ancestry markers, so neither
|
||
mechanism revisits its own output and the transfer tree stays bounded. Both shares are taken from the pre-redirect
|
||
hit and the victim keeps `1 − R − S` (1000 true with the official 0.4 and 0.5 leaves the victim 100, the three
|
||
members 400 together and Skadi 500, including the one cross-application the ancestry tags already allow). A single
|
||
effect is unchanged: Stead alone leaves 600 + 400, Skadi alone leaves 500 + 500. [ASSUMED] The two ratios add as
|
||
shares of the original hit; no official source says they multiply. The same split does not depend on which
|
||
damaged handler runs first. Hook registration order remains otherwise unchanged.
|
||
- Sources: [PRTS 松果](https://prts.wiki/w/松果), [哈洛德](https://prts.wiki/w/哈洛德), mode item descriptions and the
|
||
existing sharing contracts. `community-round29.test.js` includes before/after reproductions.
|
||
|
||
### 29.3 Ptilopsis copying Yu / Gladiia (#473)
|
||
|
||
The [original-game recording](https://www.bilibili.com/video/BV1XJSoBzEFB/) around 2:30–2:38 shows and explains that
|
||
Ptilopsis's copies of Yu and Gladiia bypass the three-in-row prerequisite. The maintainer approved reproducing
|
||
**only these two exceptions**. Preparation-start gifts from these copied traits skip the row condition; original
|
||
owners, Saria, other traits and other events retain their conditions. The dispatcher records the copied origin in
|
||
`source.copiedFrom`; eight original/copier-row combinations are tested in `garrisons_meta.test.js`.
|
||
|
||
### 29.4 Clementia S2 and final-boss erosion
|
||
|
||
[PRTS 克莱门莎](https://prts.wiki/w/克莱门莎), checked 2026-10-10, now specifies S2 ordinary-attack splash: radius
|
||
1.1 with collision testing, at most four extra ground targets, each taking 100% ATK physical damage. This replaces
|
||
the launch-day assumed 1.5 centre radius and copied main-hit multiplier. The primary target retains the skill's
|
||
own attack multiplier; the vortex remains radius 1.5. Normal/elite numeric, radius and large-body regressions live in
|
||
`op_clemnt.test.js`. The unresolved launch-day carriage/bomb timing assumptions remain documented in §28.1.
|
||
|
||
The [PRTS mode record's tips](https://prts.wiki/w/卫戍协议:盟约/PRTS盟约记录) explicitly state that Final Assault
|
||
leaders do not receive erosion injury. The existing mode-specific immunity remains. All ten final-leader definitions
|
||
were compared against all five injury types: erosion was blocked, the other four could burst. Main-game constants
|
||
give leaders a 2,000 erosion threshold, so main-game boss identity alone is not general erosion immunity; that does
|
||
not override the mode tip or prove every scripted boss phase susceptible. Pith's current three named injury types
|
||
are unchanged. No unannounced future-season behavior is inferred.
|
||
|
||
### 29.5 Shield placement and original champagne art
|
||
|
||
- #460: Jessica's placeable shield uses the four orthogonally adjacent tiles stated by her talent. Preview, server
|
||
validation, owner movement and swaps use a shared placement grid, independent of skill, facing or module.
|
||
`jessica-placement.test.js` covers legal/illegal moves, swaps, bots and other summons.
|
||
- #468: the original champagne-bomb model is extracted from the local official token bundle through the existing
|
||
extraction/build pipeline. There are now 40 local token metadata records. Only this token's `spineLocal` and the
|
||
generated asset hash change; the web fallback remains. No game art enters Git.
|
||
|
||
### 29.6 UI and recovery
|
||
|
||
- DIY selection reuses the roster's `LoadoutStats` component, showing the chosen ordinary/elite stats, attack range,
|
||
trait, talents, potential and cultivation. Skill descriptions/SP labels follow the same preview level. The list
|
||
uses aligned roster-style rows; list and details scroll independently, leaving Confirm reachable.
|
||
- #450: Swire's skill coins show as current/cap, including zero. Optional `coins: [[id, balance, cap]]` comes from
|
||
valid live-unit state, is stepped between snapshots and clears when absent. It changes no earning/spending rule.
|
||
- #471: lobby tools are grouped at the left; the player chip opens statistics. Responsive title allocation prevents
|
||
overlap with long names, translated text, resume and install controls; a narrow header puts its title on a new row.
|
||
- #458: settlement summary scrolls independently from its return button. Enlarged text no longer pushes the button
|
||
outside the viewport.
|
||
- Transient failed images and board packs can retry on a later useful event. Three.js failed imports use two bounded
|
||
fresh URLs because browsers cache module failures. A failed field engine may remount on online/visibility events,
|
||
with cleanup and at most two consecutive retries; explicit fallback/2D choices remain respected. Real Chrome
|
||
tests abort actual resource requests and verify recovery, single canvas ownership and unmount cleanup. This does
|
||
not establish the cause of every reported device/GPU failure.
|
||
- #469's repeated “甄选干员干员” was a result validator replacing a DIY operator's name with its empty slot's name.
|
||
It now resolves DIY and stand-in names from the authoritative BattleSpec; client-supplied names remain ignored.
|
||
- #448: Japanese UI terms are corrected, including 自然回復 and 完璧な作戦, consistent with official Japanese data.
|
||
|
||
### 29.7 Verified reports and pending proposals
|
||
|
||
Muelsyse's deployed Harmony correctly adds one member to existing core bonds, without counting a benched copy or
|
||
stacking duplicate traits. Six Kazimierz stuns nearby hovering enemies and makes them land; the radius remains 0.8.
|
||
Targeted real-socket tests cover eliminated host/guest departures in prep/combat/unite and survivor reconnection.
|
||
These checks did not reproduce the reported generic Harmony/room failures; no speculative rule change was made.
|
||
|
||
The plugin groundwork remains the existing content-pack manifest/language implementation; a runtime plugin API is
|
||
not added. Additional dub languages remain deferred until supported resources exist. Other rule/AI proposals
|
||
require explicit decisions and evidence; open PRs are not blanket approval for their implementations.
|
||
|
||
Validation and intended golden moves are recorded in §29.12.
|
||
|
||
### 29.8 Shared inventory (#466, #430; approved after reviewing the source video)
|
||
|
||
The maintainer requested the measured rules in 路标档案馆's original
|
||
[路标月报 #2](https://www.bilibili.com/video/BV1eLXXBqEgF/) (2026-03-29): single-player operators around
|
||
0:30–1:00, equipment around 1:30, co-op operators around 2:00, ownership/special grants around 2:30–4:00.
|
||
Official client tables supply identities, tiers and merge recipes;
|
||
[PRTS mode help](https://prts.wiki/w/卫戍协议/帮助) supplies equipment return/merge and hand rules.
|
||
|
||
| Stock | Base counts by tier I–VI | Exceptions |
|
||
|---|---|---|
|
||
| Single-player operators | 12 / 14 / 18 / 16 / 8 / 5 | I: 普罗旺斯、德克萨斯、跃跃、古米、格雷伊 = 10; II: 风丸 = 8, 赫默、休谟斯、砾、蒂比、调香师 = 12 |
|
||
| Co-op shared operators | twice the single-player counts | exceptions doubled too; independent of seat count |
|
||
| Shared shop equipment | 4 / 6 / 7 / 8 / 7 / 3 | 简易通讯机 = 5; 蜂鸣器、防暴盾、浓缩嗅盐 = 6; 寻呼模块、伪装服、拉特兰桥夹 = 7; 商业包装方案 = 2 |
|
||
|
||
- This explicit decision supersedes the old blanket shared counts and Muelsyse override. Private DIY stock keeps its
|
||
per-player 8/5 capacities; the video's multiplier describes the shared pool.
|
||
- Normal/elite operators occupy 1/3 copies by every gain route. Kazemaru still merges two normals, but the elite
|
||
occupies three. Promotion also occupies the full three. Grants beyond capacity keep a negative internal balance:
|
||
selling one copy cannot expose stock while ownership remains above the cap. Public availability and sampling are
|
||
clamped at zero; `raw balance + owned copies = capacity` remains invariant.
|
||
- Mimic samples eligible identities rather than remaining copies and can exceed stock, including the third-copy
|
||
branch. This supersedes #207's old empty-pool failure. Other pool-weighted grants keep their selection rules.
|
||
- Equipment across every player's hand, temporary area and equipped slots is counted live: normal 1, upgraded 2.
|
||
Shop/choice displays reserve nothing. Exhausted purchases fail before charging or marking the offer taken; draft
|
||
duplicates become unavailable when an earlier choice empties stock, and automatic picks skip them. Equipment
|
||
returned from a sold/merged operator still occupies stock in the hand. 整备 upgrades the bought item only when
|
||
another copy is still free (the purchase already took one, and a golden takes two). Otherwise the item stays
|
||
normal and the 整备 charge is not spent. An uncapped item may still be upgraded. Held copies of every capped
|
||
shop item stay within that cap.
|
||
- [ASSUMED] Consumption/destruction/removal by elimination ends ownership and therefore releases equipment stock;
|
||
the video does not separately document every removal path. A third lifetime purchase is possible after a prior
|
||
copy leaves ownership. Non-shop effect-only equipment has no shared shop cap, consistent with unlimited special
|
||
gifts. This never becomes a two-appearance or two-purchase limit for commercial packaging.
|
||
- Stock counts alone do not establish probabilities. Existing shop tier shares, uniform item selection and explicit
|
||
effect-pool weights remain, filtered for availability. No new probability curve is inferred from the table.
|
||
- `shared-stock.test.js` covers exceptions, shared ownership, stale offers, reacquisition after destruction, upgraded
|
||
occupancy, consumption, duplicate draft exhaustion and Mimic overdraw/release.
|
||
|
||
### 29.9 Ember proposal (#465) — current behavior preserved
|
||
|
||
The history in §22.8 and the 0.1.2 changelog records the chosen compromise for queued 深池逐火 enemies. Comparing
|
||
the current code with the proposed phase-order swap reproduces that risk: after a blocker takes the next warrior,
|
||
the three husk types can be finished by ranged hits in the current reveal window; the proposal hides them throughout
|
||
that window and they stand up again. Reveal or spare blocking capacity defeats them in either version. This is not
|
||
absolute invulnerability, but it removes the previously chosen counterplay window. The proposal is not adopted;
|
||
the existing phase-order assumption remains pending a better official comparison.
|
||
|
||
### 29.10 Approved scope additions
|
||
|
||
- #467: Clementia S2 includes selectable airborne targets in the expanded skill attack grid when deciding to cast,
|
||
like Chen S3. Normal attacks stay ground-only. [ASSUMED] No mode recording establishes a separate trigger shape
|
||
for this new operator. Tier/form, range, stealth/sleep, stun and operation-cooldown regressions cover it.
|
||
- #451: the reserve medic appears in preparation, scouting and boss-half views as a read-only map character,
|
||
including fallback rendering. Touch replaces it when battle starts. Initial aggro order remains unchanged.
|
||
|
||
### 29.11 Champagne selection follow-up (#476, replaces #468)
|
||
|
||
[PRTS 香槟炸弹](https://prts.wiki/w/香槟炸弹) identifies it as a device, normally excluded from ordinary allied selection. Both bomb creation paths now share the internal `isolated` selection barrier: Angelina auras and Skadi inspiration no longer select it, while ordinary unhealable summons remain selectable. HP protection, no-heal behavior and detonation retain the previous rules. The new source is PR #476 by Siornya; its original-art portion was first proposed in #468. Both creation paths, ordinary-summon controls and existing aged/contact detonations are tested.
|
||
|
||
### 29.12 Validation and golden changes
|
||
|
||
Full regeneration after the post-revive Raid reselect, the shared-damage split and the 整备 stock check. The corpus is
|
||
287 scenarios. No release scenario was removed. Two scenarios were added.
|
||
|
||
265 of the 285 release scenarios keep the 0.2.3 digest (`1db8e510`): roster 49/49, bonds 46/46, fields 22/22,
|
||
stand-ins 10/10, and 138 of 140 DIY battles. The taunt order applies only to the one reselect after a revive, and
|
||
these battle digests stay on the release result.
|
||
|
||
`diy-135` and `diy-136` move because their fields include Clementia. `op-clemnt.js` is the only operator kit on
|
||
either field that differs from 0.2.3; the Mon3tr kit, and the defender, guard and sniper kits on `diy-136`, are the
|
||
release kits. The splash and airborne-cast changes are §29.4 and §29.10.
|
||
|
||
- `diy-135` (Clementia S1–S3 and Mon3tr): `cleared` at 198.03 s, 150 kills, 0 leaks, perfect, 1 death becomes
|
||
`timeout` at 230 s (5,941 → 6,900 ticks), 149 kills, 1 leak, not perfect, 0 deaths. Damage dealt 1,661,420 →
|
||
1,648,194. The first unit row that moves is Clementia S1 (`chess_char_5_diy1_a`), kills 1 → 0.
|
||
- `diy-136` (Clementia S1–S3 with defenders, guards and snipers): still `cleared` at 212.4 s, still not perfect.
|
||
Kills 13 → 12, leaks 110 → 111, damage dealt 651,626 → 540,205. Clementia S2 (`chess_char_6_diy2_a`) kills
|
||
7 → 6 and damage 383,594 → 320,372.
|
||
|
||
All 18 release matches move. Every one changes its shop-draw count, and the first settle row that differs changes
|
||
the board hash (operator, tile and equipment). That is the shared-stock lineup change in §29.8. `solo-HARD-9-boosted`
|
||
is the only match whose first differing row also changes kills and leaks; its board and bonds change on that same row.
|
||
|
||
The ending class changes:
|
||
|
||
- `solo-FUNNY-2`: defeat at round 8, team LP 0, boss HP left 17,162 becomes victory at round 9, team LP 2, boss
|
||
cleared. Shop draws 123 → 154. The round-1 board changes and gains `yanShip 0/1`.
|
||
- `solo-HARD-1`: victory at round 14, team LP 12, boss cleared becomes defeat at round 13, team LP 0, boss HP left
|
||
341,377. Shop draws 201 → 215. The round-3 board changes.
|
||
- `solo-HARD-2`: defeat at round 13, team LP 0, boss HP left 66,239 becomes victory at round 14, team LP 28, boss
|
||
cleared. Shop draws 279 → 283. The round-1 board changes.
|
||
- `solo-ABYSS-1`: eliminated in round 13 after 12 rounds becomes defeat at round 13, still alive, team LP 0, boss HP
|
||
left 2,832,671, hidden boss unreached. Shop draws 138 → 215. The round-3 board changes.
|
||
- `solo-ABYSS-2`: eliminated in round 12 after 11 rounds becomes defeat at round 13, still alive, team LP 0, boss HP
|
||
left 2,823,834, hidden boss unreached. Shop draws 179 → 280. The round-1 board changes.
|
||
- `coop3-ABYSS-5`: eliminated at round 11 becomes defeat at round 13, team LP 0, boss HP left 2,616,799, hidden boss
|
||
unreached. `ai_0` stays eliminated in round 10. `ai_1` is no longer eliminated in round 12 and passes 13 rounds.
|
||
`ai_2` is eliminated in round 11 after 10 rounds, previously round 10 after 9. Shop draws 531 → 506. The round-2
|
||
board changes.
|
||
- `coop4-ABYSS-7`: eliminated at round 12 becomes defeat at round 13, team LP 0, boss HP left 3,486,896, hidden boss
|
||
unreached. `ai_0` is no longer eliminated in round 13 and passes 13 rounds. `ai_1` passes 8 → 11 rounds and is
|
||
eliminated in round 12 instead of 9. `ai_2` passes 11 → 12 rounds and is eliminated in round 13 instead of 12.
|
||
`ai_3` stays eliminated in round 8 after 7 rounds. Shop draws 539 → 645. Round-4 boards, bonds, pending gold and
|
||
layer counts change.
|
||
|
||
Same victory and reason, team LP changes:
|
||
|
||
- `solo-FUNNY-1`: victory at round 9, team LP 27 → 16. Shop draws 142 → 87. The round-1 board drops `sargonShip`.
|
||
- `solo-NORMAL-2`: victory at round 14, team LP 25 → 15. Shop draws 227 → 226. The round-1 board changes.
|
||
- `coop2-NORMAL-3`: victory at round 14, team LP 68 → 51 (`ai_0` 41 → 34, `ai_1` 27 → 17). Shop draws 449 → 487.
|
||
The round-3 `ai_1` board changes.
|
||
- `coop2-NORMAL-8-serverrun`: victory at round 14, team LP 58 → 26 (`ai_0` 30 → 10, `ai_1` 28 → 16). Shop draws
|
||
485 → 482. The round-1 `ai_1` board changes and `preciShip` goes from tier 1 to tier 0.
|
||
- `coop2-NORMAL-14-standins`: victory at round 14, team LP 30 → 31 (human 17 → 18). Shop draws 428 → 403. The
|
||
round-4 boards change and the human's `raidShip 1/8` is gone. Stand-ins were fielded in 10 of 13 settle rows at
|
||
0.2.3 and in 0 of 13 now.
|
||
- `coop2-ABYSS-10-boosted`: victory at round 15 with the hidden boss cleared, team LP 630 → 704 (`ai_0` 315 → 354,
|
||
`ai_1` 315 → 350). Shop draws 591 → 649. The round-1 boards change.
|
||
|
||
Same victory, reason, rounds and team LP:
|
||
|
||
- `solo-NORMAL-1`: defeat at round 13, team LP 0. Boss HP left 884 → 50,897. Shop draws 207 → 159. The round-3
|
||
board changes.
|
||
- `solo-HARD-9-boosted`: victory at round 15, team LP 399, hidden boss cleared. Shop draws 346 → 343. Round 8
|
||
changes the board, the bonds, gold, kills 18 → 19 and leaks 1 → 0 together; that row's LP is 399 → 400 and the
|
||
final team LP stays 399.
|
||
- `coop2-HARD-4`: eliminated at round 12. Shop draws 419 → 417. The round-3 boards and bonds change (`ai_0` gains
|
||
`arcaneShip` and `preciShip`; `ai_1` loses `sargonShip`).
|
||
- `coop2-NORMAL-70-diy`: victory at round 14, team LP 55. Shop draws 503 → 586. The round-3 boards change and the
|
||
human's bonds become `miraShip` and `yanShip`. DIY operators were fielded in 6 of 13 settle rows at 0.2.3 and in
|
||
0 of 13 now. Virtual duration 121,400 → 118,400 ms.
|
||
- `coop4-FUNNY-6`: victory at round 14, team LP 130. Shop draws 832 → 952. The round-1 `ai_2` board, layers and
|
||
bonds change. Virtual duration 130,000 → 127,000 ms.
|
||
|
||
Added coverage, both victories at round 14:
|
||
|
||
- `coop2-NORMAL-1-coverage-standins`: team LP 37 (human 11, bot 26). Stand-ins are fielded in 6 of 13 settle rows.
|
||
- `coop2-NORMAL-5-coverage-diy`: team LP 30 (human 23, bot 7). DIY operators are fielded in 5 of 13 settle rows.
|
||
|
||
Seeds 14 and 70 keep their outcome rows and, under these lineups, field no stand-in and no DIY operator. The two
|
||
added seeds carry those paths.
|
||
|
||
Replacing a field renderer also resets the game screen's entered-view identity. Frames are buffered while the replacement loads; after subscribing, the local runner re-shows full current metadata/snapshot, or the server resends the watched field. Real local and server-streamed battles preserve the same simulation object and clock through recovery, including enemies spawned before the new renderer existed. A refresh of the same field whose metadata lists no device keeps crates and turrets already noted from their one spawn event; metadata that names devices replaces that list. A different field does not keep the previous battle's devices.
|
||
|
||
### 29.13 Multiplayer boss Raid landing (#475)
|
||
|
||
The maintainer approved a narrow revision to §26.1 on 2026-10-10 after the report of three remaining multiplayer
|
||
seats leaving one boss field unpaired. Only Raid in `mode_multi_*` Final Assault / Hidden Core battles may use the
|
||
empty half's normal deployment area (rows 2–5, cols 2–18). This is an explicit maintainer decision on the community
|
||
report, not a claim of independently verified official footage. Hand row 0, temporary row 1, single-player mode's
|
||
empty boss half and lone-helper 联防's empty half stay closed. Terrain, field bounds, living/downed reservations,
|
||
target ordering and attack reach retain their checks. The exception is local to Raid; general board membership,
|
||
Ulpian S3 movement, summons and preparation placement do not expand.
|
||
|
||
`feedback5-raid-own-board.test.js` reproduces the eight left/right, melee/ranged, boss/hidden blocked cases before
|
||
the fix, and checks actual solo modes, hand/temp/side margins, terrain and living/downed reservations afterward.
|
||
All 287 golden scenarios were regenerated and verified with no additional digest changes. A fresh 80-match sample
|
||
also had zero errors and unchanged wins, completed rounds and final LP versus the preceding candidate. Two co-op
|
||
HARD runs changed round-14 counters: seed 33's unpaired player killed 22 enemies instead of 26; seed 39's unpaired
|
||
player killed 5 instead of 6 and leaked 1 instead of 0. Opening more landing tiles does not guarantee better outcomes.
|
||
|
||
### 29.14 Device cards after field refresh
|
||
|
||
Re-entering the same battle with metadata that omits once-spawned devices now restores the remembered device records
|
||
to the renderer as well as to the detail-card lookup. Otherwise an HP snapshot recreated the crate as an unknown
|
||
enemy: picking emitted a unit click with no definition, instead of the tile click needed by the device card. The
|
||
engine-canvas regression retains the card/100 HP assertions and also covers another field refresh, live HP loss and
|
||
closing the card when the crate is destroyed. Device metadata supplied by the new entry still wins; changing fields
|
||
does not carry old devices across. Gameplay and allied targeting rules are unchanged.
|