feedback5 R19A: a stunned or frozen enemy is blocked by contact where it stands — an operator redeployed beside a frozen 隐匿 enemy blocks it and so reveals it (GitHub #232, @ccyl; the repro and the cause by @kukiC); golden: 52 scenarios move

ai.js updateEnemy returned on `stunned && !e.hidden` before the contact check (Battle._checkBlock), and 冻结 / 沉睡 / 浮空
set `stun` too, so a held enemy was never checked: an operator redeployed or deployed beside it, a slot freeing up or a
push / pull into contact with a stun all waited for the status to end (0.1.4 had it too). PRTS 异常效果: STUNNED / FROZEN
stop the enemy's moves and attacks and hold no 不可阻挡 (BLOCK_FREE), which SLEEPING / LEVITATE do; 术语释义 冻结 names no
block; 作战机制 §碰撞体积与位置识别: an operator deployed onto an enemy blocks it, a standing one included. The held branch now
runs the same check before it returns (no move, no attack, as before): _checkBlock still refuses 沉睡 / 浮空 / 恐惧 /
不可阻挡, an enemy held short of contact is blocked only once it walks in (the same point as without the status), and the
3 s 隐匿 window after a block's end is unchanged. A block the held enemy already holds is still not re-checked (a reborn()
重生 keeps its blocker, as in 0.1.4: noted as open in §25.22.1).

Golden — in each scenario the first divergence is a stunned or frozen enemy blocked during its status by an operator or
summon it touched with a free slot (traced one by one with an instrumented copy): roster-003, -014, -015, -016, -017,
-018, -019, -031, -036, -038, -040, -041, -045, -046, -047; bond-indomShip-high, bond-kazimierzShip-high,
bond-raidShip-low, bond-siracusaShip-low, bond-suntShip-low; boss-boss_3-solo, boss-boss_4-pair, boss-boss_7-solo,
hidden-boss_8-pair, hidden-boss_9-pair, hidden-boss_10-pair, unite-2; matches solo-FUNNY-1, solo-NORMAL-2, solo-HARD-2,
solo-ABYSS-1, coop2-NORMAL-3, coop2-HARD-4, coop3-ABYSS-5, coop2-NORMAL-8-serverrun, coop2-NORMAL-70-diy; diy-003, -004,
-026, -034, -035, -056, -057, -065, -066, -070, -071, -094, -095, -101, -102, -103. standins unchanged.

Tests: test/sim/feedback5-frozen-reblock.test.js (9; the four #232 cases and the 晕眩 / 冻结 capacity cases fail on the
parent). Docs: CHANGELOG 0.2.0 规则(按官方), docs/history/0.2.0.md §25.22.1, docs/SIM.md (§1.2 Blocking, stun, freeze),
docs/design/engine.md, docs/PLAYING.md.
This commit is contained in:
sganggs committed 2026-10-07 11:22:27 +08:00
1 parent 0b306baa49
commit 9123e76509
13 files changed
+959 -750

No files matched your search

+38
View File
@@ -1856,3 +1856,41 @@ are.
intents too (+3 layers, ATK, block). Two NORMAL copies of one item merge (the official rule), so two 空弦 need a normal
and an 进阶 set; and the pair counts once toward the 3 members.
- Pinned: `test/content/feedback5-cb1-pins.test.js`.
#### 25.22.1 GitHub #232 「再部署之后的干员无法阻挡破隐被冰冻的隐身怪」 (@ccyl; the repro and the cause by @kukiC): a stunned or frozen enemy is blocked by contact — `sim/ai.js updateEnemy`
- **Seen**: a 隐匿 enemy kept frozen beside an operator who falls hides again 3 s after the block ends; the operator
redeploys on its tile — the enemy inside its block radius, a slot free — and neither blocks nor reveals it until the
freeze ends. Measured on 0b306ba with kukiC's steps (a block-2 operator, the enemy 0.2 tile from its centre): a tick after
the redeploy, not blocked and still 隐匿; the freeze removed, blocked and revealed on the next tick. 晕眩 the same, and
without 隐匿 the same (nothing to reveal). 0.1.4 had it: v0.1.4 gives the same output (the same early return).
- **Official**: PRTS 异常效果 — STUNNED and FROZEN switch the state machine (no attack, no skill; an enemy cannot move);
neither holds 不可阻挡 (BLOCK_FREE 「无法阻挡/被阻挡,自动解除阻挡」), which SLEEPING and LEVITATE do. 术语释义 冻结
「无法移动、攻击及使用技能」 names no block, unlike 沉睡 「无法阻挡/被阻挡」. 作战机制 §碰撞体积与位置识别: an operator deployed
onto an enemy blocks it, one standing still included — a block needs contact, not movement. [ASSUMED] no page names the
frozen / stunned case in words; it follows from those definitions.
- **Cause**: updateEnemy returned on `stunned && !e.hidden` before the contact check (`Battle._checkBlock`), and 冻结 /
沉睡 / 浮空 set `stun` too (units.js): a held enemy was never checked, so an operator redeployed or deployed beside it, a
slot freeing up or a push / pull into contact with a stun all waited for the status to end (`e.hidden` there is off the
field, not 隐匿).
- **Now**: the held branch runs the same check before it returns (no move, no attack, as before): a stunned or frozen enemy
in an operator's block radius with a free slot is blocked where it stands, and the block lifts its 隐匿; the 3 s window
after a block's end is unchanged. `_checkBlock` still refuses 沉睡 / 浮空 / 恐惧 / 不可阻挡, and an enemy held short of
contact is blocked only once it walks in after the status, at the same point as without it — the rule of a moving or
standing enemy (a 束缚 one, which is not stunned, was already blocked there).
- Open, not changed (not #232): the held branch still does not re-check a block the enemy already holds, so a held enemy
that gains 不可阻挡 through a plain buff keeps its blocker until the stun ends — a `reborn()` 重生 (主角阵营角色 …: the buff
carries `stun` + `unblockable`) stays blocked through it, as in 0.1.4, though PRTS 特殊机制 重生 gives 无敌 + 无法阻挡 and
`reborn()`'s comment says its blocker lets go. Re-checking it would move two more golden scenarios (roster-012,
standin-04).
- Golden: 52 scenarios — roster-003, -014 … -019, -031, -036, -038, -040, -041, -045 … -047; bond-indomShip-high,
-kazimierzShip-high, -raidShip-low, -siracusaShip-low, -suntShip-low; boss-boss_3-solo, boss-boss_4-pair,
boss-boss_7-solo, hidden-boss_8-pair, hidden-boss_9-pair, hidden-boss_10-pair, unite-2; solo-FUNNY-1, solo-NORMAL-2,
solo-HARD-2, solo-ABYSS-1, coop2-NORMAL-3, coop2-HARD-4, coop3-ABYSS-5, coop2-NORMAL-8-serverrun, coop2-NORMAL-70-diy;
diy-003, -004, -026, -034, -035, -056, -057, -065, -066, -070, -071, -094, -095, -101, -102, -103. Traced one by one with
an instrumented copy: in each the first divergence is a stunned or frozen enemy blocked during its status by an operator
or summon it touched with a free slot, before or inside the first differing snapshot window of the battle scenarios;
every scenario that moved has one.
- Tests: `test/sim/feedback5-frozen-reblock.test.js` (9: the four #232 cases and the 晕眩 / 冻结 capacity cases fail on
0b306ba; the contact-only, 束缚 and refusal guards pass on both). Docs: docs/SIM.md (§1.2 Blocking, `stun`, `freeze`),
DESIGN §5 (design/engine.md), docs/PLAYING.md.