灵巧's knocked-out aura counts only knocked-out operators; hidden-layer bonds hide their layers in the UI only (#66)

A knocked-out 灵巧 operator gives its neighbours the aura once more; a player retreat, a merchant exit or a 联防 forced exit no longer counts, and a redeploy restores it. 调和, 协防干员, 独行 and 绝技 hide their layer counts in the UI while the real layers stay for saving, settlement and support ranking. Contributed by @sunstricken.
This commit is contained in:
strickensun authored and GitHub committed 2026-10-05 22:34:39 +08:00
1 parent 8747f45bba
commit 85b91b9013
7 files changed
+305 -10

No files matched your search

+9 -4
View File
@@ -10,7 +10,8 @@
// which also ignore power_def_penetrate DEF / power_magic_resist_penetrate RES (defIgnorePct / resIgnorePct)
// 迅捷 swiftShip member skill end → p = min(1, base_prob + prob_per_stack·L): +normal_sp SP; L ≥ power_bond_stack_cnt:
// every operator's skill end rolls p again for +power_sp (members roll both, research [ASSUMED])
// 灵巧 skillfulShip aura: members + operators on their 4 (L ≥ 40: 8) adjacent tiles ASPD +(base + per·L), once per unit
// 灵巧 skillfulShip aura: members + operators on their 4 (L ≥ 40: 8) adjacent tiles ASPD +(base + per·L), once per unit;
// killed members keep providing it from their body tile until redeploy; retreat / forcedExit do not
// 奥术 arcaneShip member arts damage → target arts taken ×(base + per·L) for weak_duration s; tier 2: ×power_weak_scale
// when the target is below hp_ratio at application. ONE instance per target whatever applies it — the
// two players of a pair field compete for it, the strongest wins (battle.applyStrongest, 同名效果取最高:
@@ -219,10 +220,14 @@ function updateAura(battle, st) {
next.clear();
const offs = st.auraWide ? N8 : N4;
for (const m of st.members[ID.skillful]) {
if (!onField(m)) continue;
next.add(m);
const active = onField(m);
// isDown also covers voluntary / forced exits since v0.1.2. Only a kill keeps the aura.
if (!active && (m.removeReason !== 'killed' || !battle.isDown(m))) continue;
if (active) next.add(m);
// A knocked-out member still covers neighbours around the tile where it waits to redeploy.
const [r, c] = active ? [m.tileR, m.tileC] : battle.restTile(m);
for (const [dr, dc] of offs) {
const a = battle.unitAt(m.tileR + dr, m.tileC + dc);
const a = battle.unitAt(r + dr, c + dc);
if (a && a.kind === 'op' && a.ownerId === st.pid && onField(a)) next.add(a);
}
}