feedback2 WB: DESIGN §22.2 and research 02 §3.18 describe the 突袭 landing rule (data/bonds.json rebuilt)

§22.2: seen / official / cause / now / cost / players notice / [ASSUMED] / tests for GitHub issue #51. Research 02
§3.18's [ASSUMED] landing line (md and json) now states the rule; `node tools/build-data.mjs --offline` changed only
data/bonds.json raidShip.spec.assumed[0].
This commit is contained in:
sganggs committed 2026-10-03 23:04:12 +08:00
1 parent 76e60a186b
commit 2d96fe7c61
4 files changed
+12 -5

No files matched your search

+9 -2
View File
@@ -1467,9 +1467,16 @@ TBD-22-intro
TBD-22.1
### 22.2 突袭's idle redeploy lands where it can attack (#51)
### 22.2 突袭's idle redeploy lands where it can attack (#51) — `content/bonds/addon/battle.js raidPoll / raidTile / raidReach / raidTargets`, research 02 §3.18
TBD-22.2
- **Seen** (GitHub issue #51, on 0.1.0): a 突袭 member idle for 10 s was redeployed even when no landing tile let it attack an enemy, so it hopped every 10 s between useless tiles; and the idle trigger always went for the most advanced enemy, even when another ground enemy could have been reached. **Real** (reproduced on 0.1.1): with one speed-0 enemy on floor nothing can be deployed next to, the member jumped at 10 / 20 / 30 / 40 s between (10,9) and (10,8) and never attacked; a second, reachable enemy was ignored. On the five real runs of the F5 test (`test/sim/feedback1f-downed-tile.test.js`) 26 of 60 jumps landed with no enemy in range — e.g. three members jumping to one enemy whose two reachable tiles the first two took.
- **Official**: the bond text (activity_table bondInfoDict / effectInfoDataDict; PRTS 盟约记录, no note under it) "【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围" names no tile rule; whether an official jump can land out of range is not known (the reporter: the text "按字面允许落在不能立即攻击的位置").
- **Cause**: the covers-the-target requirement of `raidPoll` bound only the 技能就绪 trigger (`if (!idleOk && !tile[2]) continue;`), and `raidTile` scored covering tiles first but still returned a non-covering one when none covered — so the idle trigger jumped to its first candidate whatever the tile.
- **Now** (the owner's decision — the reporter's proposal and our reply on #51 「改成优先落在能打到敌人的位置」): both triggers jump only to a landing tile from which the member's attack range (its own grid + 攻击距离 rangeExtend, turned by its direction; a huge enemy counts on any tile it occupies) covers the chosen ground enemy. The poll walks the candidates in the existing order — its own field's ground enemies first, the most advanced (least remaining path) first, at most the 8 most advanced — and takes the first one that has such a tile (the nearest within 2 tiles, the facing-RIGHT tie-break as before). When none has one the member stays where it is: its idle time keeps counting and the 0.25 s poll looks again, so it jumps as soon as an enemy can be reached. After a jump the idle time restarts from the landing (then from each attack). Unchanged: never onto a knocked-out operator's tile (§21.24), never into the 深水区 (§21.3, `grid.canStand`), SP kept, a real redeployment (部署时 effects), the ATK / HP bonus.
- **Cost**: a search that finds nothing now repeats every 0.25 s, so it is cheap: `raidTile` looks only at the tiles a range offset leads back to from the enemy's body (before: a 25-tile scan building a range per tile), and a player's members share one sorted candidate list per poll (rebuilt after a jump). On the heavy 2-player boss field of `test/sim/robustness.test.js` (≈ 130 enemies, 72 on the ground) with 18 members that never reach anything — every poll searches — the bond costs +5.8 µs per tick, as much as 0.1.1's +5.5 µs with its jumps every 10 s (the requirement alone on the old scan: +29.6 µs). Whenever a covering tile existed the landing tile is the old one (200 000 random cases: grids, 攻击距离, directions, huge bodies).
- **Players notice**: a member with nothing it can reach waits on its tile instead of hopping; it passes over an unreachable leading enemy for one it can hit; when several members go for one enemy and its reachable tiles are taken, the rest wait. The five F5 runs: 35 jumps instead of 60, none out of range.
- [ASSUMED]: "never a useless landing" (the text says only 再部署至一名地面敌人周围; issue #51); the cap of 8 candidates (a member waits when the 8 most advanced ground enemies are all out of reach — the 技能就绪 path's bound since 0.1.0, kept for the cost); the target order and the 2-tile search (research 02 §3.18, now written as above). Issue #49 (a passive skill never counts as 技能就绪) is unchanged and separate: it decides when a member may jump, this section where it lands.
- Tests: `test/content/bonds_addon.test.js` "突袭 #51" ×2 (no reachable landing: neither trigger jumps in 45 s, then a reachable enemy → both jump within one poll; an unreachable leading enemy is passed over for the second, which it attacks, and the next jump comes the idle time after its last attack); the other 突袭 tests (`bonds_addon`, `feedback1-water`, `feedback1f-downed-tile`, `facing-invariance`) unchanged.
### 22.3 阿戈尔's devour skips members it has already knocked out (#33 item 1)