feedback5 WE2: larger-range triggers the data cannot carry — 谬因 S2's beam path, 薇薇安娜 S3's 3-2 from its second cast (#16)

The owner's ACTIVE_RANGE rule (a MANUAL skill whose running range strictly contains the
operator's own) for two skills whose running range is no data range (O1, O11 reports):
op-aphris.js adds the beam's path as a content trigger range; op-vvana.js switches S3 to
ACTIVE_RANGE on 3-2 once its first cast of a deployment ended (DEFAULT again on redeploy)
through a new additive SkillRuntime.setTrigger(rule, grid). The scan of the wave 2-3
reports and the 41 candidate skills is in the doc draft (others: target-centred, already
fixed, or owner questions). Golden: diy-045 (谬因 S2 fires for enemies beyond her 6 tiles)
and diy-078 (薇薇安娜 S3: skill timing in hooks / snapshots only) moved.
This commit is contained in:
sganggs committed 2026-10-06 16:01:48 +08:00
1 parent 2eaef154d5
commit 1559614e8a
6 files changed
+135 -25

No files matched your search

+6 -2
View File
@@ -47,8 +47,10 @@
// every `interval` (0.5) s, every selectable enemy on her path takes atk_scale × ATK arts (16 hits in the 8 s). The path
// meanwhile has no length limit (`_infinite`) and turns at her 中继器 and at every allied
// operator it reaches (validators: the piece, allies of profession mask 639 — every operator profession; a 孤立 one too),
// to that unit's facing. The data resolves DEFAULT: the unbounded range is no data range (no rangeId), so build-data's
// ACTIVE_RANGE rule cannot see it (reported, not hand-coded).
// to that unit's facing. Trigger: the data's DEFAULT, plus — the owner's ACTIVE_RANGE rule (2026-10-05: a MANUAL skill
// whose running range strictly contains her own casts with an enemy inside that range), which no data range can carry
// for an unbounded path that bends — the beam's path as a content trigger range (skill.addTriggerRange: a targetable enemy
// on the path she would fire along now, air units too as the beam hits them; 0.2.0 WE2, follow-up #16, O1's report).
// - S3 混沌的本质 (MANUAL, data DEFAULT, 20 发弹药 — `ammo`, attack@trigger_time): for charge_time (3) s from the cast 强制缴械
// (aphris_sk3[sheltering], abnormal flag disarmed) and aphris_sk3[token-withdraw]: every 中继器 of hers withdrawn and its
// redeploy time cleared (ResetTokenRespawnTime — the placed piece is back on its tile at once; the two extra pieces the
@@ -285,6 +287,8 @@ export default {
battle.on('skillStart', (c) => { if (c.unit === unit) refreshPath(battle, unit); }, { owner: unit });
battle.on('skillEnd', (c) => { if (c.unit === unit) refreshPath(battle, unit); }, { owner: unit });
battle.on('tick', () => refreshPath(battle, unit), { owner: unit });
// S2: the beam's path is its trigger range too (the owner's larger-range rule, see the header)
if (unit.skill?.id === S2) unit.skill.addTriggerRange(() => (up(unit) ? [aphrisPath(battle, unit, true).tiles.map(([r, c]) => r * COLS + c)] : []));
// S3's 强制缴械 from the cast on: the attack loop goes on to the attack the cast was made for (ai.js updateAlly
// checks `disarm` before the cast only) — no target, no attack, no bullet spent
battle.on('beforeAttack', (c) => { if (c.attacker === unit && unit.findBuff(CHARGE_KEY)) c.targets = []; }, { owner: unit });
+8 -3
View File
@@ -54,8 +54,10 @@
// 备注 "每次部署薇薇安娜时,重新计算该技能的使用次数" / "首次技能结束后,本技能的技能范围永久扩大至3-2"; vvana_s_3[check]: a
// skill triggered before ⇒ the enhance mark and duration_plus = enhance_duration, vvana_s_3: mode 4 instead of 3): from her
// second cast of a deployment the skill runs enhance_duration s with S3_LATER_HITS hits on the 3-2 range (her own grid while
// it runs: the card shows it). The trigger stays the data's DEFAULT on her own range for every cast — the later casts'
// larger running range is no data range (reported, not changed: kits/README.md checklist 5).
// it runs: the card shows it). Trigger: the data's DEFAULT on her own range for the first cast of a deployment; once it
// has ended the owner's ACTIVE_RANGE rule (2026-10-05: a MANUAL skill whose running range strictly contains her own casts
// with an enemy inside that range) on the 3-2 — no data range carries it, so the kit sets it (skill.setTrigger, 0.2.0 WE2,
// follow-up #16; O11's report) — and DEFAULT again at her next deployment.
import { num, talentBb, traitBb, skillRec, up, batMod } from '../shared/tier1.js';
import { isElite, elementDmg, enemiesIn } from '../shared/tier6.js';
@@ -168,9 +170,11 @@ export default {
skill.timeLeft = Math.max(0.01, num(b3.enhance_duration, skill.duration));
setGrid(battle, unit, RANGE_3_2);
},
onEnd({ battle, unit }) {
onEnd({ battle, unit, skill }) {
if (unit.mem.vvanaS3Later) setGrid(battle, unit, unit.def?.rangeGrid);
unit.mem.vvanaS3Later = false;
// its later casts run on the 3-2: from now the owner's ACTIVE_RANGE rule there (see the header)
if ((unit.mem.vvanaS3Casts ?? 0) >= 1) skill.setTrigger('ACTIVE_RANGE', RANGE_3_2);
},
},
},
@@ -258,6 +262,7 @@ export default {
unit.mem.vvanaS3Casts = 0;
unit.mem.vvanaS3Later = false;
setGrid(battle, unit, own);
if (unit.skill?.id === S3) unit.skill.setTrigger('DEFAULT', null); // the first cast of a deployment: the data's rule
}, { owner: unit });
}
// AFT-D: 元素伤害 at the output of every damage of hers on an enemy in its 灼燃 爆发冷却 (not on this rider's own)
+13
View File
@@ -120,6 +120,19 @@ export class SkillRuntime {
this.noSkill = !spec; // unit without any skill spec
}
/**
* Change the trigger rule and grid mid-battle — a kit whose skill's running range changes with its own use (薇薇安娜 S3:
* "首次技能结束后,本技能的技能范围永久扩大至3-2" — ACTIVE_RANGE on 3-2 from then, DEFAULT again at her next deployment).
* `grid`: a facing-RIGHT [dRow, dCol] grid (ACTIVE_RANGE / SKILL_RANGE / CUSTOM_RANGE), or null. (0.2.0 WE2, additive.)
* @param {string} rule @param {number[][]|null} [grid]
*/
setTrigger(rule, grid = null) {
this.rule = String(rule ?? 'DEFAULT').toUpperCase();
this.triggerGrid = Array.isArray(grid) && grid.length ? grid : null;
this._trigKeys = null;
this._trigSet = null;
}
/**
* Extra DEFAULT-trigger range (海嗣 "攻击范围视为自身攻击范围的延伸", 流形): `fn(battle, unit)` returns a list whose
* entries are ally units (their current `rangeKeys` count while they are on the field) or arrays of absolute tile