- render/interp.js isCosmeticEvent: an fx with a form is state, never dropped as stale nor shed from a full queue;
a late one switches the model without its telegraph, its closing clip shortened (render/app.js)
- battle/runner.js: a backlog past HELD_MAX keeps only the last status / skill toggle per unit; a battle that ended
while the tab was hidden delivers its backlog and last snapshot when the tab is shown
- screens/game.js: a new field meta for the field on screen buffers its frames until the view re-enters it
- browser test stalls the main thread (blocking 1 s long tasks); Node tests drive the runner into the render buffer
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.
- 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.
- 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.
- 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 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.
- #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