feedback3 WI: 波登可's spore cloud radius is 0.9, as the PRTS note says
This commit is contained in:
1 parent
819a5ad4ea
commit
f9e2c49954
2 files changed
+17
-9
No files matched your search
@@ -241,8 +241,8 @@ export function batMod(v, chess = null, desc = '') {
|
|||||||
// =================================================================================================================
|
// =================================================================================================================
|
||||||
// tier-local constants that exist nowhere in data
|
// tier-local constants that exist nowhere in data
|
||||||
|
|
||||||
/** Radius (tiles) of 波登可's spore cloud "在周围产生…孢子群" (no blackboard key; ≈ the 3×3 around the vial). */
|
/** Radius (tiles) of 波登可's spore cloud. No blackboard key; PRTS 波登可 备注 "孢子群范围半径为0.9,可对空". */
|
||||||
const SPORE_RADIUS = 1.2;
|
const SPORE_RADIUS = 0.9;
|
||||||
/** "周围8格" = Chebyshev ring 1 ⇒ Euclidean radius covering the 8 neighbours. */
|
/** "周围8格" = Chebyshev ring 1 ⇒ Euclidean radius covering the 8 neighbours. */
|
||||||
export const RING1 = 1.5;
|
export const RING1 = 1.5;
|
||||||
/** 普罗旺斯 杀戮嗅觉 "普通攻击不再以生命值高于80%的敌人作为目标" — the 80 % exists only in the skill text. */
|
/** 普罗旺斯 杀戮嗅觉 "普通攻击不再以生命值高于80%的敌人作为目标" — the 80 % exists only in the skill text. */
|
||||||
@@ -750,8 +750,8 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------------------------
|
||||||
// 1_13 波登可 孢子扩散: a vial bursts on the current target into a projectile_delay_time s spore cloud: enemies inside
|
// 1_13 波登可 孢子扩散: a vial bursts on the current target into a projectile_delay_time s spore cloud (radius 0.9,
|
||||||
// are 停顿 and lose their abilities (silence) and take atk_scale × ATK arts per second.
|
// PRTS 备注, 可对空): enemies inside are 停顿 and lose their abilities (silence) and take atk_scale × ATK arts per second.
|
||||||
// 园丁: every 【辅助】 operator on the field ATK +atk. Elite module (DEC-X): +sp_recovery_per_sec SP/s with an enemy in range.
|
// 园丁: every 【辅助】 operator on the field ATK +atk. Elite module (DEC-X): +sp_recovery_per_sec SP/s with an enemy in range.
|
||||||
// Alternate S1 花香疗法: ATK +atk, normal attacks heal the most injured ally in range instead (ATK per attack). A heal
|
// Alternate S1 花香疗法: ATK +atk, normal attacks heal the most injured ally in range instead (ATK per attack). A heal
|
||||||
// skill: DEFAULT fires it with an injured ally inside her initial range (research 03 §1.4) — also checked every tick,
|
// skill: DEFAULT fires it with an injured ally inside her initial range (research 03 §1.4) — also checked every tick,
|
||||||
|
|||||||
@@ -427,13 +427,21 @@ test('1_13 波登可: 孢子扩散 cloud — projectile_delay_time pulses of atk
|
|||||||
approx(u.s.atk, u.base.atk * (1 + t.atk), 'self is SUPPORT');
|
approx(u.s.atk, u.base.atk * (1 + t.atk), 'self is SUPPORT');
|
||||||
approx(goat.s.atk, goat.base.atk * (1 + t.atk), 'other SUPPORT');
|
approx(goat.s.atk, goat.base.atk * (1 + t.atk), 'other SUPPORT');
|
||||||
const [a, b, far] = h.enemies();
|
const [a, b, far] = h.enemies();
|
||||||
for (const e of [a, b]) {
|
// PRTS 备注 "孢子群范围半径为0.9": the vial lands on one enemy; the next tile (centre distance 1) is outside 0.9 and inside the old 1.2
|
||||||
|
const zone = h.eventsOf('fx').find((e) => e[1] === 'zone' && e[4]?.skill === 'spores');
|
||||||
|
assert.equal(zone[4].radius, 0.9);
|
||||||
|
let inside = 0;
|
||||||
|
for (const e of [a, b, far]) {
|
||||||
|
const d = Math.hypot(e.x - zone[2], e.y - zone[3]);
|
||||||
const z = dealt(h, u, (c) => c.target === e && (c.dmg.tags || []).includes('zone'));
|
const z = dealt(h, u, (c) => c.target === e && (c.dmg.tags || []).includes('zone'));
|
||||||
assert.equal(z.length, bb.projectile_delay_time, 'one pulse per second');
|
if (d <= 0.9) {
|
||||||
for (const c of z) approx(c.amount, u.s.atk * bb.atk_scale);
|
inside++;
|
||||||
assert.ok(statuses(h, 'silence', (c) => c.target === e).length > 0 && statuses(h, 'sluggish', (c) => c.target === e).length > 0);
|
assert.equal(z.length, bb.projectile_delay_time, 'one pulse per second');
|
||||||
|
for (const c of z) approx(c.amount, u.s.atk * bb.atk_scale);
|
||||||
|
assert.ok(statuses(h, 'silence', (c) => c.target === e).length > 0 && statuses(h, 'sluggish', (c) => c.target === e).length > 0);
|
||||||
|
} else assert.equal(z.length, 0, `outside 0.9 (d=${d})`);
|
||||||
}
|
}
|
||||||
assert.equal(dealt(h, u, (c) => c.target === far && (c.dmg.tags || []).includes('zone')).length, 0);
|
assert.equal(inside, 1, 'only the enemy the vial landed on');
|
||||||
done(h);
|
done(h);
|
||||||
|
|
||||||
// elite module: +sp_recovery_per_sec SP/s while an enemy is in range
|
// elite module: +sp_recovery_per_sec SP/s while an enemy is in range
|
||||||
|
|||||||
Reference in new issue
Block a user