feedback5 WL: 突袭 counts a passive skill that is on as 技能就绪, so 缄默德克萨斯 / 宴 jump as soon as a ground enemy can be reached (GitHub #49)
PRTS 盟约记录 【突袭】 「干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围」. skills.js `ready` is false for every passive skill, so raidPoll left passive members only the 10 s idle trigger; the reporter's footage shows 缄默德克萨斯 jumping within her passive's 10 s. raidPoll alone (the global `ready` stays) now counts a passive skill that is on as 技能就绪 [ASSUMED: the engine keeps a passive on for the whole deployment]. The GitHub #51 landing rule (the target in range on the landing tile) is kept, so a member lands in range and stays while its enemy is there. Charged non-passive skills and the idle trigger are unchanged. Golden moved (scenarios with a passive 突袭 member): roster-039 (斯卡蒂 S2 跃浪击), roster-046 (耀骑士临光 S2 逐夜烁光), bond-raidShip-low, bond-raidShip-high, boss-boss_2-pair, boss-boss_4-pair, boss-boss_6-pair (elite 缄默德克萨斯), standin-01, standin-06 (缄默德克萨斯 fielded as Misery, all passive), coop2-HARD-4, coop2-NORMAL-14-standins (突袭 members in the lineups). Docs: research 02 §3.18.
This commit is contained in:
1 parent
8b7316d93e
commit
696085ac8e
8 files changed
+337
-283
No files matched your search
@@ -412,6 +412,55 @@ test('突袭 #51: the most advanced enemy out of reach → the jump goes to the
|
||||
checkInvariants(h.b);
|
||||
});
|
||||
|
||||
// GitHub #49: skills.js `ready` is false for every passive skill, so a passive 突袭 member (缄默德克萨斯, 宴 …) only jumped on
|
||||
// the 10 s idle trigger; the reporter's footage of the official game shows 缄默德克萨斯 jumping within her passive's 10 s.
|
||||
// raidPoll (only there) counts a passive skill that is on as 技能就绪; the landing rule (#51) still keeps it from hopping.
|
||||
test('突袭 #49: a passive skill that is on counts as 技能就绪 — 缄默德克萨斯 jumps within a few seconds, then stays while her enemy is in range', () => {
|
||||
const tex = 'chess_char_4_16_a';
|
||||
const h = makeBattle({
|
||||
defs: { enemies: DUMMY }, bonds: { raidShip: bond(1, 10) }, enemies: [{ key: 'enemy_addon_dummy', pos: [9, 8] }],
|
||||
units: [{ chessId: tex, row: 12, col: 3 }], hooks: ['deploy', 'death'], autoFinish: false, timeLimit: 60,
|
||||
});
|
||||
h.step();
|
||||
const u = h.unit(tex), e = h.enemy('enemy_addon_dummy');
|
||||
assert.deepEqual([u.skill.kind, u.skill.ready, u.skill.active], ['passive', false, true], 'her passive: on, and the global `ready` unchanged');
|
||||
assert.ok(!inRange(u, e), 'nothing in her range');
|
||||
assert.ok(h.runUntil(() => raidJumps(h).length > 0, 3), 'jumped within 3 s (no 10 s idle wait)');
|
||||
assert.ok(h.b.time < bondBb('raidShip').no_attack_duration - 5, `at ${h.b.time.toFixed(2)} s`);
|
||||
assert.ok(inRange(u, e), `landed (${u.tileR},${u.tileC}) with the enemy in range`);
|
||||
h.run(8);
|
||||
assert.equal(raidJumps(h).length, 1, 'busy there: no further jump (no hopping)');
|
||||
checkInvariants(h.b);
|
||||
});
|
||||
|
||||
test('突袭 #49: non-passive members unchanged — a charged skill jumps at once, an uncharged one waits for the idle time; a passive one jumps at once', () => {
|
||||
const idle = bondBb('raidShip').no_attack_duration;
|
||||
const defs = {
|
||||
chess: {
|
||||
r_s: chessRec({ id: 'r_s', bonds: ['raidShip'], skill: { spCost: 10, initSp: 10 } }),
|
||||
r_u: chessRec({ id: 'r_u', bonds: ['raidShip'], skill: { spCost: 100, initSp: 0, spType: 'INCREASE_WHEN_ATTACK' } }),
|
||||
r_p: chessRec({ id: 'r_p', bonds: ['raidShip'], skill: { skillType: 'PASSIVE', spCost: 0, duration: -1, spType: 8 } }),
|
||||
},
|
||||
enemies: DUMMY,
|
||||
};
|
||||
const h = makeBattle({
|
||||
defs, bonds: { raidShip: bond(1, 10, 3) }, enemies: [{ key: 'enemy_addon_dummy', pos: [9, 8] }, { key: 'enemy_addon_dummy', pos: [12, 9] }],
|
||||
units: [{ chessId: 'r_s', row: 12, col: 3 }, { chessId: 'r_u', row: 11, col: 3 }, { chessId: 'r_p', row: 10, col: 3 }], hooks: ['deploy', 'death'],
|
||||
autoFinish: false, timeLimit: 60,
|
||||
});
|
||||
h.step();
|
||||
const s = h.unit('r_s'), un = h.unit('r_u'), p = h.unit('r_p');
|
||||
assert.deepEqual([s.skill.ready, un.skill.ready, p.skill.kind, p.skill.ready], [true, false, 'passive', false]);
|
||||
h.run(1);
|
||||
const jumped = (u) => raidJumps(h).filter((c) => c.unit === u);
|
||||
assert.equal(jumped(s).length, 1, 'charged: at once');
|
||||
assert.equal(jumped(p).length, 1, 'passive: at once');
|
||||
assert.equal(jumped(un).length, 0, 'uncharged: not yet');
|
||||
assert.ok(h.runUntil(() => jumped(un).length > 0, idle + 1), 'uncharged: after the idle time');
|
||||
assert.ok(h.b.time >= idle - 1e-6, `at ${h.b.time.toFixed(2)} s`);
|
||||
checkInvariants(h.b);
|
||||
});
|
||||
|
||||
test('不屈: knocked-out 地面干员 (melee position) redeploys (p=1 at high L); tier 2 every operator +5 SP; inactive / ranged → no', () => {
|
||||
const bb = bondBb('indomShip');
|
||||
const sk = { spCost: 50, initSp: 0 };
|
||||
|
||||
Reference in new issue
Block a user