feedback5: merge R19E — every enemy finishes its attack clip after a strike before it moves on (PRTS 状态机: ATTACK → MOVE after the attack ends; the 鸭爵 swap's 流泪小子 no longer walks off on its strike tick, community report and GitHub #214), and the 鸭爵 strategy's swapped-in 流泪小子 hides again 1 s after a block ends instead of 0 s (the owner's decision of 2026-10-07, a deliberate deviation for that copy only); golden as R19E's commits (216 scenarios + solo-HARD-2), the merged tree differs from the branch only in R19G's three 蕾缪安 scenarios

This commit is contained in:
sganggs committed 2026-10-07 13:07:21 +08:00
commit 11fd65a5a5
19 files changed
+4061 -3741

No files matched your search

+66
View File
@@ -2122,3 +2122,69 @@ here, each reproduced first; the rest were answered (not a bug, already fixed in
`build-data --offline`; only `tiers[0]` / `tiers[2]` / `algorithm[3]` / `assumed[0]` changed — the stale assumption
「5000 physical 流失 ignores DEF and shields」, wrong since 0.1.1, gave way to the scan reading), DESIGN §5's `death` row
(design/engine.md), docs/SIM.md (`death` hook), the core.js comments; §24.3's title points here.
#### 25.22.6 「ai的鸭爵分队真的好阴…哭狗瞬间隐匿没有后摇马上就到下一格干员的脸上秒抬手秒晕」 (community report of 2026-10-07) and GitHub #214 「鸭爵技能生成的泪眼汪汪没有反隐直接一路顺畅走进蓝门」 (@FrogThai; PR #243 by @TsangAsuna declined): an enemy finishes its attack clip after its block ends — `sim/ai.js enemyAttack`, `sim/battle/displacement.js displace`
- **Seen**: 泪眼汪汪 / 哭狗 / 隐匿狗 is 流泪小子 (`enemy_2034_sythef_2`, 「唯唯诺诺的佩洛」 — no enemy is named 泪眼汪汪), the
only 隐匿 and stunning enemy of the four the 鸭爵 strategy swaps in. Measured on 0255afd with a lane of four blockers that
never attack (route 0, cols 8 → 5): blocked at 3.233 s, swing 3.267, strike 4.033 (the wall stunned 3.5 s, the block
released, 隐匿 at once) and walking on the very next tick; the next wall reached at 6.533 (one tile at 0.4 tiles/s) and
struck 0.767 s after the contact, its cooldown ready; a wall whose stun ended took it over again while it was still
inside that wall's block radius. 8 stuns, 19.8 s 隐匿 / 9.0 s revealed, leaked at 28.9 s.
- **Official**: every number the report questions is the official one. enemy_database `enemy_2034_sythef_2` level 0:
moveSpeed 0.8 (× the level's moveMultiplier 0.5: 0.4 tiles/s), baseAttackTime 2.0, MELEE, `Combat.attack@stun` 3.5 —
PRTS 卫戍协议:盟约 下半/PRTS盟约记录 鸭爵 备注: a 「特殊版本,相较于原版更弱」 (4500 HP, 3.5 s stun) that keeps its 隐匿 (the
handbook line is unchanged). PRTS 流泪小子 (same prefab): 「隐匿(解除阻挡0秒后恢复),近战攻击使目标晕眩」 — it attacks only
its blocker. Its Spine Attack clip: 1.567 s, OnAttack at 0.767 s (data/assets.json). gamedata_const `ba.stun`
「无法移动、阻挡、攻击及使用技能」, PRTS 异常效果 STUNNED 「无法攻击、释放技能、阻挡敌人类单位」: a stunned operator lets it go —
the hypothesis that it should keep blocking is wrong. The attack cooldown is the unit's and runs on the walk, so a new
blocker sees the swing at once and the strike 0.767 s later (official too). PRTS 状态机: an enemy's ATTACK state
「每帧检查异常状态…攻击结束后回退到MOVE状态」 and COMBAT 「逻辑同ATTACK」 — only a character's COMBAT 「检测到不存在阻挡对象时强行
切回IDLE状态」: an enemy finishes its attack when its blocker goes. The band: 「你和队友遭遇的部分敌人可能会替换为…」 — a bot
teammate's 鸭爵 swaps into a human's battles, the Final Assault and the Hidden Core too, on the replaced enemy's route
(`content/bands/meta.js duckReplace`; #214's 「上路」 is that route).
- **Cause**: enemyAttack set the post-strike stand only for an unblocked ranged enemy (`!e.blockedBy && radius > 0`), so
a melee enemy released by its own strike — or by its blocker's knock-out — walked on the same tick: the 「没有后摇」.
- **Now**: every enemy stands for the rest of its attack clip after a strike (`attackStand(e).rest`; ATTACK_PAUSE with no
clip known); a blocked enemy never walks, so the stand shows only when its block ends meanwhile — its blocker stunned
or knocked out by that strike, or gone (retreat, substitution). A stun / freeze / sleep / 浮空, leaving the field and,
new, a displacement (失衡: the UNBALANCE state replaces ATTACK) end it. 流泪小子 now stands 0.8 s after each strike —
隐匿, since its restore is 0 s — and a stunned blocker often takes it over again before it leaves its radius. The same
lane: 13 stuns, 29.1 s 隐匿 / 12.8 s revealed, leaked at 42.0 s; four blockers that hit back (550 ATK) now knock it out
(it leaked with 2 % HP before); the real R6 wave on 战场#01 with one swapped 流泪小子 and 8 elite operators (8 seeds):
leaked 8 / 8 before and after, 47 → 58 % HP left.
- [ASSUMED]: the stand lasts the clip's rest, as the #58 stand (no source gives a length); a melee swing whose target
goes before the strike is still cut (unchanged, §22.14).
- PR #243 (declined): it removed the copy's 隐匿 — the data and PRTS keep it — and, on a stale base, reverted the
high-ground rule (only elite 歌蕾蒂娅 with HOK-Y) and rewrote unrelated skills (宴 S2, 野鬃 S1, 锡人 / 吟游者 heals).
- Golden: 216 scenarios — roster 41 of 49 (all but -003, -005, -009, -018, -019, -025, -035, -049), bonds 21
(deputShip-low, emptyShip-low / -high, indomShip-low / -high, investShip-low, kazimierzShip-low / -high,
kjeragShip-high, lateranoShip-high, miraShip-high, raidShip-low, sargonShip-high, siracusaShip-low, soloShip-low /
-high, suntShip-low / -high, swiftShip-high, visiShip-low, yanShip-low), fields 13 (all but boss-boss_1-solo,
boss-boss_2-pair / -solo, boss-boss_6-solo, boss-boss_7-pair / -solo, hidden-boss_8-solo, hidden-boss_10-solo,
unite-1), matches 17 (all but solo-HARD-9-boosted), standins 10 of 10, diy 114 of 138 (all but -011, -012, -018,
-020, -025, -027, -029, -031, -033, -047, -053, -077, -080 … -082, -086 … -088, -091 … -093, -098, -108, -123). Traced
in lockstep against a copy of the parent: in each of the 199 battle scenarios the first differing tick is an enemy
standing out its clip after a strike where the parent walked on; every moved match has such stands from an earlier or
the same round. The displacement rule alone moves one roster scenario.
- Tests: `test/sim/feedback5-attack-clip-rest.test.js` (5; the four behaviour tests fail on 0255afd, the data pin passes
on both). Docs: docs/SIM.md (enemy attacks), DESIGN §5 (design/engine.md), docs/DATA.md (`attackAnim`).
- **Deliberate deviation — the owner's decision of 2026-10-07** (「鸭爵策略产生的泪眼汪汪我想了一下,要不等待个1秒这样再重新隐匿,
或者提供点别的降低难度的方案」): the 鸭爵 swap's copies (spawn tag `'duck'`, `content/bands/meta.js duckReplace` — in
practice 流泪小子, the only one of the four with 隐匿) get their 隐匿 back no sooner than 1 s after a block ends
(`content/enemies/helpers.js DUCK_STEALTH_RESTORE`, `archetypes.js stealth`; officially 0 s). The same enemy anywhere
else — the bounty card's 流泪小子 (`enemy_2034_sythef`), any other spawn — keeps 0 s; a copy leaked into 联防 keeps its
tag and the 1 s. After each strike it is now revealed through its 0.8 s stand and 0.2 s of walking.
- Measured, 8 seeds each (W: 3 elite melee operators in a lane + an elite sniper against the R6 wave's ground enemies with
one swapped 流泪小子; B: 8 elite operators on 战场#01 against the whole R6 wave with one swap) — leaked, HP left, revealed
s per battle: before 0.2.0's fixes W 5/8, 42 %, 2.3 / B 8/8, 47 %, 3.2; after the clip fix W 5/8, 31 %, 2.6 / B 8/8,
58 %, 2.5; with the 1 s W 4/8, 31 %, 4.0 / B 8/8, 56 %, 5.5. Other options, measured on the fixed engine and not built:
2 s — W 4/8, 31 %, 5.4 / B 8/8, 46 %, 8.5; 3 s (the general 隐匿 rule of PRTS 作战机制) — W 4/8, 31 %, 6.4 / B 8/8,
39 %, 11.5; a 1.5 s stun on the copy (below its 2 s interval: its blocker recovers while it still stands in its block
radius and takes it over again) — W 4/8, 2 %, 4.0 / B 4/8, 6 %, 5.5; a 1 s stun — knocked out in all 16; the 1 s delay
with a 2 s stun — W 4/8, 21 %, 5.1 / B 5/8, 26 %, 8.1. Worse, not offered: half speed while 隐匿 (B 8/8, 76 % — it
stays hidden longer), a stunned operator that keeps blocking it (pins that operator for the whole battle).
- Golden (this rule alone): matches solo-HARD-2 — its bot holds 鸭爵; the swapped 流泪小子 of round 13 is free and revealed
for 49 ticks in its 1 s windows (the round-12 one is never released by a block), so the match parts at round 13 and
ends in a victory instead of a defeat; the other 282 scenarios are unchanged. Tests:
`test/content/feedback5-duck-restealth.test.js` (3; the swap's 1 s and the band path fail before it, the 0 s guard
for the same enemy elsewhere passes on both).