The official R11 bounty drafts are not a free draw under the old rule: matches 1
and 6 show the same 特异III giant and the same four tier-II cards and differ only
in their one tier-I card; 15_7 + 13_8 come together in 3 of the 5 drafts; 10_8,
11_8 and 12_8 never show. A uniform draw under the old rule repeats 5 of 6 cards
in some pair of 5 drafts in about 2.5 % of samples.
- tools/build-data.mjs: BOUNTY_HUNTER_TEMPLATES (the 4 seen R11 groups: giant +
tier-II cards, fill = the 5 tier-I cards seen) and BOUNTY_HUNTER (the shape an
unseen slot draws: one giant + 1-4 tier-II cards + tier-I fill, one card per
faction series 10-15). choices.json bountyDrafts.hunter gains slots (15),
templates and rule. The R9 note now names the per-match explanation (leader,
map) beside two versions. Solo 绝境 / 终极 R11 family weights are marked as
extrapolated from co-op.
- server/match/choices.js: the hunter draft picks one of the 15 event slots: a
seen group, or a rule group of that shape, then tier-I fill.
- test/match/feedback1-bounty.test.js: each official R11 bounty draft fits
exactly one seen group and the rule shape; matches 1 / 6 share 5 cards;
generated drafts: a seen group in about 4 of 15, every seen group and every
R11 card offered.
- docs/DATA.md, docs/META.md: the R11 structure, the solo weights and the R9
open question.
R3 offers one of the official sets of six "接下来两场作战" cards (3 x I, 2 x II, 1 x III):
the 7 sets seen, the 3 unseen slots built by their rule. R9 offers a seen group of
named bosses filled to 6 with the cheap boss bounties and 源石虫·特训. R11 of 绝境 / 终极
is 悬赏决策, 机密商店 or 战术决策 (never 道具补给); its bounty is one 特异III giant and 5
"下场战斗" cards, one per faction series. Cards no official draft showed (the
multi-round cards, enemyeffect_3_*, five boss bounties) are no longer drafted.
The screenshot readings are a test fixture; tests check every reading against the
data and every generated draft against the official structure.
The direction rules now rest on client data instead of the skill wording:
野鬃 S2's attack ability carries buff wildmn_s_2[force] of template
knockback[dir] (Knockback, _useSourceDirection true, force level -2 when
off direction); 琳琅诗怀雅 S3, 山 S3 and 莫斯提马 S3 use knockback[relative]
(radial); 圣聆初雪 S1 is KnockBackWithCharacterDirection (no correction).
Comments, SIM.md and the test header cite these. The generic kit header
notes its text keywords are only a fallback. PLAYING.md explains 野鬃's
push direction to players. No behaviour change.
Every setForm fx now carries 'form' (shared/protocol.js fxForm). The runner keeps
these fx in catch-up frames (keepsState), holds the state-bearing events of the
battle on screen while the tab is hidden and delivers them with the first frame
back (re-entering from the field meta past HELD_MAX); screens/game.js buffers
them before a field is entered. A husk beaten while its stand-up clip plays dies
on the husk's clip. 幽灵 form cited from PRTS; 特战术师 flyer question recorded.
Player report D2: 野鬃's skill sometimes pushed enemies the opposite way.
Her S2 text "往攻击方向…推开" is the 推击手 wording that PRTS 推与拉 calls a
directional force; the remake pushed radially at full force, so an enemy
grabbed behind her centre (or at her back) flew 1.7-2.14 tiles towards the
objective. Now directional with the official correction (> 45 deg off or
< 0.25 tile: radial at force level -2, at most 0.44 tile).
Direction audit: 琳琅诗怀雅 S3's coin push is radial (PRTS note), it was
pushed along her facing. The generic kit reads 往攻击方向 as directional.
PRTS 守墓石像 / 愤怒的守墓石像: the statue is unblockable, rooted, 失衡免疫 and
immune to 浮空; the reborn flyer is 失衡免疫 (not a 静态刚体, so a persistent
noDisplace buff). PRTS 喷气人: 1.5 s at -90 % speed after take-off, then
1.333 s unblockable at -90 % speed after landing.
- render/app.js: the views' unit info is built by the exported renderInfo(UnitInfo), which now keeps `form`;
addInfo dropped it, so a view built from fieldMeta (a teammate's field watched later, 联防 observers, a
reconnect) still drew the first form. Tested through renderInfo (fake PIXI) and the real enterBattle(meta)
path in headless Chrome (opt-in).
- content/enemies.js: rebirthCleanse at every 重生 (reborn, husk, statue): operator-applied buffs and
source-less statuses go, own talents / enemy-given buffs / field state stay (PRTS 特殊机制 §重生). A 逐火
knocked out while feared is no longer an unblockable ember.
- snapshot.js: an enemy's stealth bit only while its 隐匿 is on (not blocked, not revealed).
- Docs: area damage reaching an unblocked 隐匿 enemy is documented as an engine deviation (PRTS 作战机制
§AOE伤害判定), not as the rule.
PRTS 喷气人: "飞行模式:近地悬浮,不可阻挡,失衡免疫,移动速度+50%,不进行攻击".
The take-off buff gave only 不可阻挡 + speed, so the flying 喷气人 stayed a ground
unit: melee operators hit it and pulls moved it (较大力 vs weight 3: 1.4 tiles).
It is now an air unit that keeps its ground path (flag `float`, as the other
hovering enemies) and is never displaced while it flies.
Player report after 0.1.0: "飞机可以被薄绿的技能拉走". Real. PRTS 特殊机制 静态刚体:
such a unit "可以进入失衡状态…但物理层面上无法产生任何速度或移动", independent of
its movement type. Every air unit of the mode except “炎佑” lists it in its PRTS
天赋, and so does the ground boss 盐风主教昆图斯.
- build-data: STATIC_BODIES (from the enemies' PRTS pages, like HIT_AREAS)
writes enemies.json `staticBody: true` on those 28 keys; data regenerated
- Battle._displaceable: a static body moves 0 tiles from every push or pull;
the skills that reach it still hit it (薄绿 S2, 锏 S3, the hookmasters)
- 刺胄之弹 / 斩胄之剑 / 破胄之锤 also get 失衡免疫 (PRTS 天赋)
- ground enemies keep the 力度 − 重量 tables; the hovering 吉兆飞鳞 / 掠海漂移体
stay 失衡免疫 while they hover and movable once grounded
- tests: the player's scenarios (薄绿 S2 vs 妖怪 / 寒霜, the act2 m01 drone), the
data list, and an audit of every displacement source against ground, static
air, dynamic air, hovering and 胄-shell targets
- Every form change goes through content setForm(): the unit keeps it (e.form)
and UnitInfo publishes it, so a view built mid-battle from fieldMeta (a
watched teammate's field, 联防 observers, a reconnect) starts in the
current form instead of the first-form model.
- Enemy profile (dmgType) and Unit moving / form are initialised at spawn:
one object shape for the sim's hot loop (the boss-field bench is back at
the base speed).
- 转译基底·α: an HP loss cannot knock out its original form (no death clip).
- 假想敌:再生: 1 s 重生 and walking 傀儡 cited from PRTS; shields within 1.8
as the 再生状态 begins.
- Renderer: a 重生's closing clip (and the ember's stand-up clip) is timed
from the fx dur to end with it, so the next form attacks on its own clips.
- Docs: ASSETS FORMS list, SIM form fx, PLAYING 隐匿 wording.
Review follow-up to the water / tactical point change.
- Re-orienting 伺夜 / 缪尔赛思 in place while hand and temp are full could leave
a placed 狼群 / 流形 outside the new range (it had nowhere to go and stayed
put). The re-orientation is now refused with HAND_FULL when a summon it
would leave out has no stack and no free slot. On the other paths
(promotion, an owner moved with no room) such a summon leaves the board and
its stack comes back at the next round start (grantTokensFor), so no
out-of-range placement reaches the battle.
- Citation corrected: the 深水区 rule comes from the PRTS page 深水区 (地形信息
tile_deepsea: 部署类型 全部位, 地形机制 "拒绝部署(待补充)"), corroborated by
PRTS 作战机制 (地形标记 AdvancedBuildableMask lists 深水). There is no PRTS
page 地形.
- grid.js: the tie-break note now says what changed on 战场#08 (no gate
route; a few off-route smoothed steps of the boss field go around the water).
- Documented the known limit of the inactive act1 m05: its 特制水上平台 tiles
are deployable in the prep's deploy map only; the sim does not model the
canoes and keeps those tiles non-standable.
- gameLogic.summonRange reuses facing.js rangeTiles.
- tools/build-data.mjs bountyDraftHalf: exact faction-series counts (12 of 18 two-battle cards bring first-half
enemies, 5 outside the wave tables, enemyeffect_12_4 a second-half attachment), base-HP gradient, the user's
two-battle recall; counter-evidence (假想敌 named enemyInitial_*, the unread NGA R3 guide); the split marked
[ASSUMED] with its flip; data unchanged
- server/match/choices.js, docs/META.md, docs/DATA.md: the split marked [ASSUMED]
- m.private shop.rewardOffer.queued: offers waiting behind the shown one; the header says 之后还有 N 项 and the
reminder pill +N (a 定向投放 behind a promotion reward put off)
- tests: corrected headers, the stale bountyTiers fixture dropped, queued checks (unit + opt-in e2e on desktop
and 756x366)
Review follow-ups for reports #1 and #4.
- transformChess: the returned equipment is stowed before the new operator's
summon stack is granted (as in _mergeChess); when the transformation
completes a merge, the carrier's equipment goes through _mergeChess, which
also returns it before the elite's summons. A summon card no longer pushes
the returned 突变细胞 into temp, where it would be lost at the deadline.
- bot: a 突变细胞 left in temp with a full hand gets a hand slot (sell the
weakest single hand chess, else destroy the cheapest other hand item, else
sell any hand chess) instead of being destroyed.
- 拉普兰德's per-piece counter key is module-prefixed; the re-bought copy
case is marked [ASSUMED] in the code and docs/META.md.
- .dhint--rule gets a style; sources quote PRTS 卫戍协议/帮助 exactly
("在失去该干员(干员出售、销毁、合并等)…时自动卸除").
- A pair Final Assault / Hidden Core field has one spawn list that both
players' handlers edit; each player's 0-2 swaps now come only from the
enemies whose route ends on that player's half (the half rule of the
field's bounties). Match passes the wave's routes and the player's side
('L' / 'R', null on a one-player field) in the boss / hidden
onBattleStart event; docs/META.md documents the two fields.
- The comment justifying elite eligibility was wrong (the leader rounds'
escorts are a mix, about two thirds elites, not all elites); reworded
with the measured numbers and kept [ASSUMED].
- The pair-field test now drives the real match path (Final Assault, then
the Hidden Core it unlocks) instead of dispatching by hand; a unit check
covers the half filter.
- render/spine.js: no attack (wind-up or 'atk') cuts a form's change clip short;
a knocked-out 逐火 no longer reports its last attack in the snapshot.
- test/render/feedback1-forms.browser.test.js (opt-in RENDER_E2E=1): the real
sim in headless Chrome on 战场#01 — 转译基底·α A_* → A_Die_B → B_* → B_Die,
a 深池逐火战士 knocked out in front of its blocker: Die → the 隐匿 ember on
Idle_2, beaten → Die_2.
- PLAYING.md: the 余烬 and 转译基底 rules for players.
- reborn() tells the model its forms ('reborn' then 'form2' on the existing fx):
锏 and 扎罗 hold their revive clips and switch to their B_* set (both used to
stay on the A model and die on B_Die), “复仇者” plays Revive_Begin/Loop/End,
杰斯顿 its C1_Die then the C2_* killer form.
- 守墓石像 per its PRTS talent: melee only while blocked; the first defeat is an
instant 重生 into a 10 s unblockable, immobile, 失衡/浮空-immune statue (Sleep
clip), then a flyer with ranged arts attacks that skip flyers, without a
second HP refill.
- A form kind the skeleton has no clip set for (arts barrier, broken charge)
no longer resets a model's form.
Player reports #3 and #9 after the 0.1.0 release.
#3 On 战场#08(下半) 涨潮控制 (act2autochess_m04) operators could be placed in the
pool and 突袭 members jumped into it. The 深水区 (tile_deepsea) has buildableType
ALL in the level file, but it refuses deployment (PRTS 地形 深水区 "地形机制:拒绝
部署"; the season-1 战场#05 puts a 特制水上平台 - "在水上建立可以部署任意单位的
平台" - on every one of its water tiles).
- grid.js DEPLOY_REFUSED_TILES: the legend's effective build is NONE, so
canStand (突袭 landing tile, tactical points, summon tiles) never picks the
water; a hard-blocked 射击台 / mound tile takes no melee unit either.
- build-data: stages.json legend `buildable` is the effective type (the level's
value kept in `buildableType`), deployTiles exclude the water, a 特制水上平台
makes its tile deployable (act1 m05, inactive). board.js / gameLogic.js
deploy maps follow (water platforms included); bots plan on the same map.
- Gate routes are unchanged; the water now counts as non-blockable ground in
the path tie-break (audit lists updated).
#9 伺夜's 狼群 and 缪尔赛思's 流形 ("只能部署在召唤者攻击范围内", tokens.json
`ownerRange`) could be placed anywhere.
- PlayerState._legal / summonRange: a range-bound summon only on a tile of its
owner's attack range (loadout grid rotated by the owner's facing); swaps with
the owner are checked from the owner's new tile; re-orienting (or promoting)
the owner sends a summon left outside back onto its stack with a toast.
- The client lights and accepts the same tiles (gameLogic.summonRange), the bot
plans inside them, the invariants check it, the 伺夜 kit re-uses the piece's
tile only inside her range.
Tests: test/match/feedback1-placement, test/sim/feedback1-water, the opt-in
headless-Chrome test/ui/feedback1-placement.e2e (fastServer hook SP_STAGE);
existing summon / deploy / pathing tests moved off the water tiles.
Player reports after 0.1.0:
- #8 深池逐火战士 / 精锐战士 / 护卫: every knock-out is a 1 s 重生 (invulnerable,
unblockable, immobile), then a walking, disarmed, 隐匿 hit-count ember that a
blocker can target and beat; it stands up with full HP after 10 s (PRTS talent
text). The old ember stood still, stealthed and unblockable, so nobody could
ever target it and every 逐火 enemy leaked. 假想敌:再生's puppet walks on and
stays unblockable.
- #5 转译基底·α: its original form cancels every damage instance; the 4th
physical / arts hit or a block starts a 2 s change into 寻仇者 / 特战术师 /
幽灵 (Mode_*_Passive, 寻仇者 rage below half HP, 特战术师 two targets). The
armed forms attack through the engine (profile.dmgType). It used to die in its
first form.
- Render: units.js FORMS switch the models' clip sets (A_Die_B/C/D then B/C/D,
Die then Idle_2/Move_2/Die_2, Revive), driven by the 'phase' kind or the fx
`form`; a noMove enemy is drawn standing.
Player report #6: 凯瑟琳's 定向投放 offer after a level-up showed three nameless
operator cards (the raw item ids) under the promotion reward's 晋升奖励 header.
The shop bar now draws each offer slot by its kind (item slots as free item
cards) and names the offer: m.private shop.rewardOffer carries source
('merge' | 'special') and label (the strategy's effect name, the item's name
or the 特质's operator — effectsMeta.offerLabel); the reminder pill says
<label>待选择. Same path for 娜仁图亚, 寻呼模块, 信标 and 松果.
Player reports after 0.1.0, #1 and #4.
#1 拉普兰德 (garrison_123, SERVER_GAIN_BOND_LAYER_BY_REFRESH_CNT) checked the
player's refresh count of the round, so a copy bought after the round's first
manual refresh never stacked that round. Players report the official
behaviour: the first refresh after acquiring her also stacks. Each copy now
counts the manual refreshes it witnessed this round (board or hand) through a
per-piece round counter (PlayerState.pieceRoundCount, ctx.incPieceCounter); an
elite merged this round keeps the highest count of its copies [ASSUMED]. The
"本回合每刷新过1次" multiplier traits keep the player's count.
#4 突变细胞 destroyed itself after one transformation. Official text never
says 销毁 (every consumable's does), PRTS notes "原干员销毁,获得一名高一阶的随机
初始干员", and players re-inject the cell every round. The built-in now replaces
the carrier with a random normal operator one tier higher (max 6) and returns
the carrier's equipment, the cell included, to the hand
(transformChess returnItems); the content override is gone. The item card
shows the rule (items.json note, build-data ITEM_RULES); bots inject their
least valuable single normal operator below tier 6 (bot.js cellTarget).
- 圆仔 is unblockable (PRTS 天赋 "无法攻击/被阻挡"); it was blocked like any
ground enemy because its kit only had the front guard.
- 鸭爵 runs at move speed x(1 + run.attack@move_speed) once hurt: +300 % for
the strategy version, +400 % for the original (PRTS); it was x3 / x4.
- The swap also applies in the Final Assault and the Hidden Core (PRTS
下半/PRTS盟约记录 鸭爵 备注 "在最终回合和隐秘核心回合中仍然生效"): any
ground wave enemy but the leader, its parts, bounties and uncounted units
can be swapped (the leader rounds' escorts are elites); each player of a
boss field gets its own 0-2.
- The four swapped-in enemies cost 1 LP at the protection point
("但进入保护目标点将减少1点目标生命值"): build-data sets their lpr to 1
instead of the database's roguelike 0 (Final Assault LP, detail card).
Player report #2: boss bounties, second-half specials and their upgraded copies
showed up in the first 悬赏决策 draft. A draft up to R7 (the official wave
generator's first half) now offers the 接下来两场作战 cards, a draft from R8 the
下场作战 and multi-round cards, with no tier window (the official late draft
screenshot shows boss bounties worth 1 to 6 together). choices.json cards.bounty
draftHalf, schedule bountyHalf; the mode's inactive enemy list no longer thins
the bounty draft (PRTS 11/18 note).
- the strip, its counts / layers / tiers and the bond popups show the player whose field or half is on screen, with an
amber "👁 name" tag; live in-battle layers (runner bondLayers, ≤ 999) and the finished battle's gains until SETTLE
- shared fields follow the ‹ › half's player; 全景 shows your own when you fight there, else the picked teammate [ASSUMED]
- a card's bond chips and popups belong to the unit's owner; a teammate's popup lists their operators on the field
- m.public players[].bonds for living players only; a reload while watching after the own battle returns to it
- DESIGN §20.15, META, PLAYING; tests (unit, UI logic, 4 browser scenarios)
- co-op leaders died within seconds: leader HP is the official data (40 values pinned); bond / strategy / item /
机变 / 特质 "+X%" bonuses now add up (PRTS 直接乘算) instead of compounding; a same-named enemy debuff keeps one
(strongest) instance per target (奥术 across a pair field); leader parts pass damage 1:1; fixed co-op pool (the user's call)
- official limits read from the client: each bond stops at 999 layers (MAX_GARRISON_STACK); a leader hit of 300000+ in
boss / hidden battles is cancelled (MAX_BATTLE_DAMAGE, 限伤) — shared/constants.js switches, research 11
- a merge that consumes a deployed copy puts the elite on that tile and facing (user-confirmed); gold target highlight,
promotion effect
- 假想敌:胄 per PRTS: one shell, shells within range, any drone death costs 2 % max HP, 剑/锤 sorties and 瘫痪
- DESIGN §20.10–§20.14; 2842 unit tests, all 28 browser suites green; Chrome = Node on boss fields
- #1#2 skill / device summons (赫默's drone, 巫恋's doll, 凯瑟琳's devices) are hand cards placed by the player;
placed summons deploy once at battle start, then a skill summon re-appears at its tile on each cast (the user's call)
- #3 叙拉古 隐匿 ends on time (32 + 0.4 × layers s); 忍冬 S3 迷彩 lasts until her next cast (official), kept apart from 隐匿
- #4 multi-round bounty cards last two battles (the user's call; MULTI_ROUND_BOUNTY_BATTLES), blue / red card text
- #5 the shared boss pool's float dust (≈3.6e-12 HP) stalled Final Assault leaders at 0 %; < 1 HP now clears the pool,
and the team LP reaching 0 first is a defeat (PRTS)
- #6#10 机变 cards show their official effect text; an invisible 详情 button no longer swallows the confirming tap on phones
- #7 live ×N counter of a leaker's enemies still on the 联防 field (LP loss stays capped at 10)
- #8#15#16 skill triggers per 技能策略: skill-range triggers, injured-ally heals (古米, 塞雷娅), tank take-damage
triggers with a 3 s cooldown; 新约能天使 S2 shields the highest-aggro operator in range
- #9 official per-enemy model scales (威龙)
- #11 element bar under the unit's HP bar (white = 元素值 left, element-coloured refill after a burst), floor rounding
- #12 枯朽战车 kit per PRTS; every ranged enemy reaches its target's 0.25 collider
- #13 恐惧 wander (萨科塔之翼 at half HP, operator fears make enemies flee) with re-planning after pushes
- #14 push / pull distance by 力度 − 重量 (PRTS table); #17 every blocker attacks what it blocks; ASPD floor 20
- #18 炎佑 is 孤立: no heals or ally buffs
- #19 every free pick-one chess offer (promotion reward, 信标, 寻呼模块) shows different operators
- DESIGN §20 and the normative lines, SIM / META / DATA / PLAYING updated; 2747 unit tests and all 27 browser suites
green; dev recordings regenerated
- act2 m01: the boss field's row-6 blower machines stand under the bench in the normal and 联防 views again
(the user: "吹风机原版道中也该有"); the integration-QA filter (BOSS_WALL_ROW) is removed from the 3D and 2D
boards, so every device on a built tile is drawn in every view, as the workstream had it
- 联防: a knocked-out operator's redeploy timer restarting in full is confirmed by the user ("进联防复活时间确实是
重新算"); the [ASSUMED] tags in DESIGN §5.5 / §6.1 / §19.3, META §4 and unite.js say so
- DESIGN §19 intro / §19.7 and the docs-consistency assertions updated; 2595 unit tests, all render browser suites green
- #1 近地悬浮 enemies count as air units (Unit.isFlying): ground-only attacks, splash, terrain and traps skip them;
PRTS 不可对空 skill effects made ground-only; 掠海漂移体 / 吉兆飞鳞 drop modes; the bot plans them as air
- #2 an operator knocked out before 联防 is fielded and force-exited (PRTS 强制退场): it lies on its tile with the
redeploy ring and redeploys (full timer [ASSUMED]); partners, observers and the server fallback included
- #3 element audit of every operator, item and enemy: 海嗣 numbers are official; bursts are 无来源, 元素脆弱 only
raises 元素伤害, 元素抗性 applied, 盟约·辅助干员 fills all three gauges, 菲莱 / 哈洛德 / 纯烬 / enemy kits fixed
- #4 blocking by the official contact radius (0.7071): another operator in contact takes over at once when the
blocker dies, withdraws or is stunned; melee blockers attack what they block
- #5 enemy target order per PRTS 索敌: blocker, special priority, taunt, last deployed; initial deploy 从上到下>从左到右,
operators before summons; special priorities break ties by taunt then deploy order
- #6 act2 m01's normal-field blower machines (row 13) are drawn in the normal / 联防 views
- #7 Final Assault prep legality reads the player's half of the boss field (fence tiles deployable); all 11 stages
audited against the official level files
- #8 regular settings gear; #9 the prep camera keeps the bench and temp rows clear of the shop bar on phones
- #10 huge bosses have the official 4.95 × 2.95 hit area (sim/body.js) and are 自缚 / unblockable
- #11 至简 costs 1: 购买价格为N's bb.price is a discount off the tier price, applied before other price effects
- DESIGN §19 and the normative §3 / §5 / §6 / §7 lines, SIM / META / DATA / PLAYING updated; 2595 unit tests and
every browser suite green; dev recordings regenerated
- #1 picking by the tile under the pointer (prep, battle, pen, equipment drops); the dragged model stays
under the pointer (mouse and touch); pixel probe removed; phone ghost-click on the underframe fixed
- #2 two-tap confirm on 机变 cards (like the shop)
- #3 a 同盟 room with one human is untimed like 独立模拟 (no countdown outside battles)
- #4 strategy draft: one synced countdown, 30 s per human turn, timeout takes the highlighted band
- #5 special 维式重锤 (4) and 突变细胞 no longer sold; item card shows where they come from
- #6 operator skill-mode sounds no longer play on normal attacks (纯烬艾雅法拉 and 55 others)
- #7 detail card shows live battle stats and the prep-time battle-start stats (g.unitStats)
- #8 official element gauges on units; burst cooldown (阻回) per PRTS
- #9 knocked-down operators stay on their tile with a redeploy countdown ring
- #10 drone behaviour per PRTS (暴鸰, 先兆者 shells, 黑云, 萨科塔之眼)
- #11 赫默's drone only from her skill; placeable summons limited to talent tokens
- #12 炎佑 stays where it is with no enemies; 祛恶之焰 as a continuous channel
- #13 the occasional giant bond icon (loading texture scaled ×46) fixed
- docs (DESIGN §18), recordings, data and tests updated (2467 unit tests, all browser suites green)
- #1 lost operator models: the Spine store no longer hands out a skeleton whose unload is in flight
(PIXI.Assets.unload is async); eviction runs 1 s after a release and the empty-scene budget only after 3 s
- #7 picking: one shared rule (render/pick.js, pixel probe where bodies overlap) for prep/battle clicks,
hover, the enemy pen and equipment drops; the drag ghost stands on its drop tile; hover probes capped
at one per frame
- #2 the top-bar LP drops live as the own battle's enemies enter the blue gate (−N, 联防中), teammates'
pending LP in the team panel
- #3 temp overflow pieces that arrive after a prep deadline survive through the next prep (tempDue);
temp-row warning and ready-button reason
- #4 蕾缪安 S3: locks every 0.5 s, then one shell every 0.3 s in lock order (PRTS notes), bombardShell fx
- #5 回环射手: real boomerang (out 15, back 3.75 tiles/s, attack only when every boomerang is caught)
- #6 visible projectiles, muzzle flashes, slashes, skill bursts and auras at unchanged frame cost
- #8 特质 right under the detail card header, with its official type icon
- #9 no spinning busy cursors / spinners next to texts; game data warmed before the match
- docs, recordings and tests updated (2414 unit tests, all browser suites green)