feedback7: merge fb7-gh-sim — PR #348 (take-the-highest chains), PR #293 (REA-Y in the engine), #329 ports (异客 13 tiles, 歌蕾蒂娅 net radius 1, 搅拌机 latest first, 大帝 uncapped), PR #365 (骨刺 forms + PRTS targeting), #298 (instant non-attack skills recast at most once per attack interval, attacks untouched), #364 (先兆者 shell 3×3), #220 (速射手 air first), 余 skips noStack bonds (owner)
- Conflict: docs/PLAYING.md 技能自动释放 bullet — both insertions kept (the 铁钳号 rule from fb7-owner-sim, the #298
pacing sentence).
- Grok review: MERGE AFTER FIXES — the HIGH #298 finding (the cast replaced the due attack) fixed on the branch
(db29acf9: per-skill nextCastAt; golden of #298 alone shrank from 84 scenarios to 2).
- Golden union: 4 matches differ from HEAD though the branch alone left them (coop2-NORMAL-3, coop4-ABYSS-7,
coop2-NORMAL-8-serverrun, solo-HARD-9-boosted): HEAD's side had moved all four (#333's shop RNG …) and on those new
bot paths the merged rules apply — the diffs are in-battle layer gains / damage (卡西米尔 50 → 45, 精准 80 → 76,
叙拉古 176 → 168, kills ±2, solo-HARD-9 LP 397 → 399), no outcome change.
- Broad node --test 5571 (5570 pass, 0 fail, 1 skipped); lint 0 errors; typecheck.
This commit is contained in:
commit
52f56319ac
41 files changed
+2065
-648
No files matched your search
@@ -302,6 +302,22 @@ test('余 文火慢炖: R8 round start — exactly 1 active bond +36 layers, oth
|
||||
cover('band_yu');
|
||||
});
|
||||
|
||||
test('余 文火慢炖 adds no layers to a bond without layers (noStack: 独行, 绝技 …) — the owner\'s decision of 2026-10-08', () => {
|
||||
assert.deepEqual(Object.values(DATA.bonds).filter((b) => b.noStack).map((b) => b.name).sort(), ['协防干员', '独行', '绝技', '调和'].sort());
|
||||
for (const [bonus, want] of [
|
||||
[{ soloShip: 1 }, {}], // the one active bond is 独行: nothing at all
|
||||
[{ suntShip: 5 }, {}], // … or 绝技
|
||||
[{ soloShip: 1, yanShip: 20 }, { yanShip: 12 }], // two active (the sentence's count): the layered one +12, 独行 none
|
||||
]) {
|
||||
const s = setup({ band: 'band_yu' });
|
||||
Object.assign(s.ps.bondCountBonus, bonus); s.ps.recompute();
|
||||
for (const id of Object.keys(bonus)) assert.ok(s.ps.bonds[id]?.active, `${id} active`);
|
||||
s.roundStart(8);
|
||||
const got = Object.fromEntries(Object.entries(s.ps.layers).filter(([, v]) => v > 0));
|
||||
assert.deepEqual(got, want, JSON.stringify(bonus));
|
||||
}
|
||||
});
|
||||
|
||||
test('凯瑟琳 定向投放: every shop upgrade offers 3 different shop items (any tier — community report of 2026-10-06), 1 free pick', () => {
|
||||
const { m, ps } = setup({ band: 'band_cathy', seed: 9 });
|
||||
for (const lvl of [2, 3]) {
|
||||
@@ -587,6 +603,18 @@ test('大帝 加急调派: every deployment halves the operator\'s next redeploy
|
||||
cover('band_emperor');
|
||||
});
|
||||
|
||||
test('大帝 加急调派 stacks without a cap: the 21st and 22nd deployments still halve the next redeploy (PRTS "※该策略效果可无限叠加"; GitHub #328, PR #329)', () => {
|
||||
const h = fight({ band: 'band_emperor', units: [{ chessId: 't_op', row: 10, col: 4 }] });
|
||||
h.step(1);
|
||||
const u = h.unit('t_op');
|
||||
for (let n = 1; n <= 22; n++) {
|
||||
h.b.retreat(u, { reason: 'raid' });
|
||||
close(u.respawnAt - u.deathAt, 20 / 2 ** n, `after deployment ${n}`);
|
||||
if (n < 22) assert.ok(h.b._deploy(u), `deployment ${n + 1}`);
|
||||
}
|
||||
assert.equal(u.findBuff('band:band_emperor').stacks, 22);
|
||||
});
|
||||
|
||||
test('桑葚 药枚实验: the units on the right-most column get a 25 % chance per attack of 1 shield layer (max 1)', () => {
|
||||
const ops = { t_op: op('t_op'), t_b: op('t_b') };
|
||||
for (const [v, want] of [[0.24, 1], [0.26, 0]]) {
|
||||
|
||||
@@ -71,6 +71,37 @@ test('迅捷: member skill end +12 SP (p=1 at high L), ≥40 layers every operat
|
||||
assert.equal(off.s_x, 0);
|
||||
});
|
||||
|
||||
test('迅捷 refills 引星棘刺 S1 at once: it is cast at most once per attack interval, and her attacks go on untouched (GitHub #298)', () => {
|
||||
// S1 度算浪波: AUTO, no duration, no attack of its own, SP_FULL, cost 6; 迅捷 refunds 12 + 15 SP at ≥ 40 layers
|
||||
const run = ({ aspd = 0, enemy = true, silence = false } = {}) => {
|
||||
const h = makeBattle({
|
||||
seed: 1, bonds: { swiftShip: bond(2, 229, 3) }, autoFinish: false, timeLimit: 30,
|
||||
units: [{ chessId: 'chess_char_5_15_b', skillIndex: 0, row: 10, col: 4 }],
|
||||
enemies: enemy ? [{ key: 'enemy_still', route: { motion: 'WALK', start: [10, 6], end: [10, 6], checkpoints: [] } }] : [],
|
||||
defs: { enemies: { enemy_still: enemyRec({ key: 'enemy_still', hp: 1e9, atk: 0, speed: 0, blockCnt: 0 }) } },
|
||||
});
|
||||
h.step();
|
||||
const u = h.unit('chess_char_5_15_b');
|
||||
if (aspd) h.b.addBuff(u, { key: 'test:aspd', mods: { aspd } });
|
||||
if (silence) h.b.addBuff(u, { key: 'test:mute', flags: { silence: true } });
|
||||
if (enemy) assert.ok(h.b.enemiesInKeys(u.rangeKeys, u, u.profile).length, 'an enemy stays in range');
|
||||
u.skill.gainSp(u.skill.spCost, 'test');
|
||||
const n0 = u.skill.activations, a0 = u.stats.attacks;
|
||||
h.run(6);
|
||||
checkInvariants(h.b);
|
||||
return { n: u.skill.activations - n0, attacks: u.stats.attacks - a0, interval: u.s.interval };
|
||||
};
|
||||
const base = run(), muted = run({ silence: true });
|
||||
// the first at once, then one per interval (1.36 s): 5 in 6 s — every tick before (180)
|
||||
assert.ok(base.n >= 4 && base.n <= 5, `one cast per attack interval (${base.interval.toFixed(2)} s): ${base.n} in 6 s`);
|
||||
assert.ok(base.attacks > 0 && base.attacks === muted.attacks, `the casts take no attack (${base.attacks} vs ${muted.attacks} silenced)`);
|
||||
const fast = run({ aspd: 500 }), fastMuted = run({ aspd: 500, silence: true });
|
||||
assert.ok(fast.n >= 23 && fast.n <= 25, `ASPD +500 (interval ${fast.interval.toFixed(2)} s): ${fast.n} casts`);
|
||||
assert.equal(fast.attacks, fastMuted.attacks, 'still no attack taken');
|
||||
const alone = run({ enemy: false });
|
||||
assert.ok(alone.n >= 4 && alone.n <= 5 && alone.attacks === 0, `no enemy: still fires at full SP (#124), one per interval — ${alone.n}`);
|
||||
});
|
||||
|
||||
test('迅捷 / 突袭: SP gifts after end do not recharge a zero-SP deployment skill or trigger a ready raid', () => {
|
||||
const h = makeBattle({
|
||||
defs: { chess: { t_deploy: chessRec({ id: 't_deploy', bonds: ['swiftShip', 'raidShip'], skill: { spCost: 0 } }) } },
|
||||
|
||||
@@ -186,6 +186,67 @@ test(`${nm('enemy_9008_acbunn')}: attacks several targets at once while stealthe
|
||||
assert.ok(atk.targets.length >= 2, `targets ${atk.targets.length}`);
|
||||
});
|
||||
|
||||
// 骨刺 — PRTS 天赋 (级别0) 「自身普通攻击索敌不受阻挡影响 / 不会攻击飞行单位,隐匿(解除阻挡0秒后恢复) / 隐匿期间可同时攻击3个目标」
|
||||
// and the level description 「隐匿;隐匿状态下同时攻击3个目标。」 (PR #365, the targeting part checked against PRTS).
|
||||
function boneArena(o = {}) {
|
||||
const h = arena({
|
||||
units: ['t_wall', 't_wall2', 't_wall3', 't_wall4'].map((chessId, i) => ({ chessId, row: 9 + (i % 2), col: 6 + Math.floor(i / 2) })),
|
||||
captureNoisy: true, hooks: ['attack'], ...o,
|
||||
});
|
||||
h.step();
|
||||
for (const u of h.allies()) h.b.addBuff(u, { key: 'test:noBlock', persist: true, flags: { noBlock: true } });
|
||||
const e = put(h, 'enemy_9008_acbunn', [9, 6]);
|
||||
return { h, e };
|
||||
}
|
||||
/** The targets of `e`'s next attack. */
|
||||
function boneNext(h, e) {
|
||||
const n = h.hooksOf('attack').filter((c) => c.attacker === e).length;
|
||||
assert.ok(h.runUntil(() => h.hooksOf('attack').filter((c) => c.attacker === e).length > n, 8), 'a new attack');
|
||||
return h.hooksOf('attack').filter((c) => c.attacker === e)[n].targets;
|
||||
}
|
||||
|
||||
test(`${nm('enemy_9008_acbunn')}: 3 targets while hidden, 1 once blocked or revealed — by priority, not its blocker first; 3 again when hidden`, () => {
|
||||
for (const cause of ['block', 'reveal']) {
|
||||
const { h, e } = boneArena();
|
||||
const wall = h.unit('t_wall'), taunter = h.unit('t_wall4');
|
||||
assert.equal(new Set(boneNext(h, e)).size, 3, `${cause}: hidden — three distinct targets of the four in reach`);
|
||||
h.b.addBuff(taunter, { key: 'test:taunt', mods: { taunt: 5 } });
|
||||
if (cause === 'block') { h.b.removeBuff(wall, 'test:noBlock'); h.step(2); assert.equal(e.blockedBy, wall); }
|
||||
else h.b.addBuff(e, { key: 'test:reveal', persist: true, flags: { reveal: true } });
|
||||
assert.deepEqual(boneNext(h, e), [taunter], `${cause}: one target, the taunt-5 one (索敌不受阻挡影响)`);
|
||||
if (cause === 'block') { h.b.addBuff(wall, { key: 'test:noBlock', persist: true, flags: { noBlock: true } }); h.b.releaseBlocked(wall); }
|
||||
else h.b.removeBuff(e, 'test:reveal');
|
||||
assert.equal(boneNext(h, e).length, 3, `${cause}: hidden again (0 s after the block) — three`);
|
||||
checkInvariants(h.b);
|
||||
}
|
||||
});
|
||||
|
||||
test(`${nm('enemy_9008_acbunn')}: never targets a flying unit (炎佑, taunt 5), hidden or revealed`, () => {
|
||||
for (const revealed of [false, true]) {
|
||||
const { h, e } = boneArena({ content: 'full', extraContent: [] });
|
||||
const [air] = spawnYanyou(h.b, 'p1', { count: 1, hp: 50000 });
|
||||
assert.ok(air?.isFlying);
|
||||
air.x = 6.5; air.y = 9;
|
||||
h.b.applyStatus(air, 'stun', { duration: 30, force: true });
|
||||
h.b.addBuff(air, { key: 'test:taunt', mods: { taunt: 5 } });
|
||||
if (revealed) h.b.addBuff(e, { key: 'test:reveal', persist: true, flags: { reveal: true } });
|
||||
const t = boneNext(h, e);
|
||||
assert.equal(t.length, revealed ? 1 : 3);
|
||||
assert.ok(!t.includes(air), `${revealed ? 'revealed' : 'hidden'}: the flyer is no target`);
|
||||
}
|
||||
});
|
||||
|
||||
test(`${nm('enemy_9008_acbunn')}: its 3 hidden targets come from its normal attack's reach (2 + the 0.25 ally collider)`, () => {
|
||||
const { h, e } = boneArena();
|
||||
const edge = h.unit('t_wall3'), outside = h.unit('t_wall4');
|
||||
edge.x = e.x + 2.1; edge.y = e.y;
|
||||
outside.x = e.x + 2.3; outside.y = e.y;
|
||||
h.b.addBuff(edge, { key: 'test:taunt', mods: { taunt: 5 } });
|
||||
const t = boneNext(h, e);
|
||||
assert.ok(t.includes(edge), 'the ally 2.1 away is one of the three');
|
||||
assert.ok(!t.includes(outside), 'the one 2.3 away is out of reach');
|
||||
});
|
||||
|
||||
test(`${nm('enemy_1175_dushdo_2')}: stealth; next to 深池伙友卫队精英 its attack interval drops by traitAbility.base_attack_time`, () => {
|
||||
const h = arena();
|
||||
h.step();
|
||||
@@ -1037,6 +1098,28 @@ test(`${nm('enemy_1112_emppnt')} / 中枢: every attack is a shell that lands 3
|
||||
}
|
||||
});
|
||||
|
||||
test(`${nm('enemy_1112_emppnt_2')} / 先兆者: the shell's 1.2 circle takes every ally whose collider touches it — the impact tile and the 8 around it, not the cross (GitHub #364)`, () => {
|
||||
for (const key of ['enemy_1112_emppnt_2', 'enemy_1112_emppnt']) {
|
||||
// the enemy on (10, 8) reaches only the wall on (10, 6): the impact; the others stand around it, out of its reach
|
||||
const h = arena({ units: [
|
||||
{ chessId: 't_wall', row: 10, col: 6 }, { chessId: 't_wall2', row: 10, col: 5 },
|
||||
{ chessId: 't_wall3', row: 9, col: 5 }, { chessId: 't_wall4', row: 10, col: 4 },
|
||||
], captureNoisy: true });
|
||||
h.step();
|
||||
const e = put(h, key, [10, 8], { route: 2 });
|
||||
assert.ok(h.runUntil(() => e.stats.attacks >= 1, 10), 'attacks');
|
||||
const shell = h.eventsOf('fx').find((ev) => ev[1] === 'bombardShell');
|
||||
assert.ok(Math.abs(shell[4].r - 1.45) < 1e-9, 'drawn at the reach: 1.2 + the 0.25 collider');
|
||||
h.run(3.1);
|
||||
const taken = (id) => h.unit(id).stats.taken;
|
||||
for (const [id, what] of [['t_wall', 'the impact'], ['t_wall2', 'its orthogonal neighbour (1 away)'], ['t_wall3', 'a diagonal neighbour (√2 away)']]) {
|
||||
assert.ok(Math.abs(taken(id) - e.s.atk) < 1e-6, `${key}: ${what} takes the shell`);
|
||||
}
|
||||
assert.equal(taken('t_wall4'), 0, `${key}: two tiles away stays out`);
|
||||
checkInvariants(h.b);
|
||||
}
|
||||
});
|
||||
|
||||
test(`${nm('enemy_10084_hlegle')}: never attacks a flying ally (不会攻击飞行单位) — a ground one in range instead`, () => {
|
||||
// a flying ally (the 炎佑 is one) deployed after the wall, so the engine's order (latest deployed) would pick it
|
||||
const h = arena({ units: [{ chessId: 't_wall', row: 10, col: 6 }, { chessId: 't_wall2', row: 10, col: 8 }] });
|
||||
|
||||
@@ -113,6 +113,30 @@ test('信仰搅拌机 S1 铳骑主考官 (自动触发 ⇒ DEFAULT: hurt SP, fir
|
||||
}
|
||||
});
|
||||
|
||||
test('信仰搅拌机 S1 reloads the latest-deployed 拉特兰 ammo user around him, not the nearest (PRTS 备注; GitHub #325, PR #329)', () => {
|
||||
for (const redeploy of [false, true]) {
|
||||
// 隐现 ×2: the orthogonal neighbour deployed first, the diagonal one after it (both on his 8 surrounding tiles)
|
||||
const h = battle([U('chess_char_4_01_a', 10, 5, 0), U('chess_char_1_01_a', 10, 4, null, null, { uid: 2 }), U('chess_char_1_01_a', 9, 4, null, null, { uid: 3 })]);
|
||||
h.step();
|
||||
const u = h.unit('chess_char_4_01_a'), near = h.unit(2), far = h.unit(3);
|
||||
if (redeploy) { // a redeploy is the latest deployment
|
||||
h.b.retreat(near, { reason: 'raid' });
|
||||
assert.ok(h.b._deploy(near));
|
||||
}
|
||||
const latest = redeploy ? near : far, other = redeploy ? far : near;
|
||||
assert.ok(latest.deploySeq > other.deploySeq);
|
||||
for (const a of [near, far]) { assert.ok(a.skill.activate('test', { free: true })); a.skill.ammoLeft = 5; }
|
||||
const e = h.spawn('enemy_dummy', { pos: [10, 6] });
|
||||
assert.ok(u.skill.activate('test', { free: true }));
|
||||
h.b.forceAttack(u, [e]);
|
||||
h.run(0.5);
|
||||
const reloads = h.eventsOf('fx').filter((x) => x[1] === 'reload');
|
||||
assert.ok(reloads.length > 0, 'a reload happened');
|
||||
assert.ok(reloads.every((x) => x[4].id === latest.id), `${redeploy ? 'after a redeploy, the redeployed one' : 'the later-deployed diagonal one'} is reloaded`);
|
||||
checkInvariants(h.b);
|
||||
}
|
||||
});
|
||||
|
||||
test('信仰搅拌机 S2 八臂电锯侠: ammo skill, ATK/DEF up; a lethal hit is negated for ammo_cost bullets; with fewer it is still negated, every bullet goes and the skill ends (PRTS 备注)', () => {
|
||||
for (const id of pair('chess_char_4_01_a')) {
|
||||
const bb = D(id, 1).skill.bb;
|
||||
|
||||
@@ -454,6 +454,27 @@ test('歌蕾蒂娅 S3: binds the farthest target, tornado pulses 85 % ATK arts e
|
||||
checkInvariants(h.b);
|
||||
});
|
||||
|
||||
test('歌蕾蒂娅 S3: the skill-end 捕网 has radius 1, the tornado 1.5 (PRTS 备注; GitHub #324, PR #329)', () => {
|
||||
const id = 'chess_char_4_12_a';
|
||||
const h = makeBattle({ defs: { enemies: { enemy_dummy: dummy() } }, units: [{ chessId: id, row: 10, col: 3 }], timeLimit: 200, autoFinish: false });
|
||||
h.step();
|
||||
const u = h.unit(id);
|
||||
h.spawn('enemy_dummy', { pos: [10, 6] }); // the farthest enemy: bound, the tornado sits on it
|
||||
h.step();
|
||||
assert.ok(u.skill.activate('test', { free: true }));
|
||||
assert.deepEqual([u.mem.tornado.x, u.mem.tornado.y], [6, 10]);
|
||||
const at = (x, y) => { const e = h.spawn('enemy_dummy', { pos: [10, 6] }); e.x = x; e.y = y; return e; };
|
||||
const inner = at(6, 9.1), outer = at(6, 11.25); // 0.9 and 1.25 from the centre
|
||||
h.step();
|
||||
for (const e of [inner, outer]) assert.ok(e.findBuff(`glady:slow:${u.id}`), 'both inside the tornado (slowed)');
|
||||
const p0 = [inner.x, inner.y, outer.x, outer.y];
|
||||
u.skill.end('test');
|
||||
h.run(0.6);
|
||||
assert.ok(Math.hypot(inner.x - p0[0], inner.y - p0[1]) > 0.3, 'the net pulls the enemy 0.9 from the centre');
|
||||
assert.deepEqual([outer.x, outer.y], [p0[2], p0[3]], 'the one 1.25 from the centre stays: outside the net');
|
||||
checkInvariants(h.b);
|
||||
});
|
||||
|
||||
test('歌蕾蒂娅 阿戈尔的波涛: 深海猎人 regen 2.5 %/s and −25 % damage from 海怪; elite drag damage', () => {
|
||||
const id = 'chess_char_4_12_a', t0 = D(id).talents[0].bb;
|
||||
const sea = withTags(dummy({ key: 'enemy_sea', atk: 0 }), ['seamonster']);
|
||||
|
||||
@@ -1097,6 +1097,32 @@ test('异客: the S3 storm stops when she leaves the field', () => {
|
||||
assert.equal(h.eventsOf('fx').filter((e) => e[1] === 'lightning').length, n, 'no strike after her retreat');
|
||||
});
|
||||
|
||||
test('异客: the S3 storm is range x-1 — the 13-tile diamond — around the tile of the target\'s centre (PRTS 备注; GitHub #322, PR #329)', () => {
|
||||
// the storm's target stands off its tile centre at (5.4, 10.4) — tile (10, 5) — and is removed right after the cast, so
|
||||
// every strike starts on the probe (no chain bounce from the target) when, and only when, the probe is in the zone
|
||||
const strikes = ([dx, dy]) => {
|
||||
const h = battle({ units: [{ chessId: 'chess_char_6_05_a', row: 10, col: 3 }], autoFinish: false });
|
||||
h.step();
|
||||
const u = h.unit('chess_char_6_05_a');
|
||||
const tgt = h.spawn('enemy_dummy2', { pos: [10, 5], mods: { hpMul: 2 } });
|
||||
tgt.x = 5.4; tgt.y = 10.4;
|
||||
h.step();
|
||||
assert.ok(u.skill.activate('test', { free: true }));
|
||||
const storm = h.eventsOf('fx').find((e) => e[1] === 'storm');
|
||||
assert.deepEqual([storm[2], storm[3]], [5, 10], 'the storm sits on the centre of the target\'s tile');
|
||||
h.b.dealDamage(null, tgt, { amount: 1e12, type: 'true' });
|
||||
const p = h.spawn('enemy_dummy', { pos: [10, 5] });
|
||||
p.x = 5 + dx; p.y = 10 + dy;
|
||||
h.run(4.2);
|
||||
checkInvariants(h.b);
|
||||
return h.dmg.filter((d) => d.src === u.id && d.tgt === p.id && d.tags.includes('storm')).length;
|
||||
};
|
||||
// in the diamond (|Δrow| + |Δcol| ≤ 2 by tile): (2, 0) / (0, −2) / (1.95, 0.4) lay outside the old 1.5 circle
|
||||
for (const off of [[0, 0], [2, 0], [0, -2], [-2, 0], [1.45, 1.45], [1.95, 0.4]]) assert.equal(strikes(off), 8, `(${off}) struck by all 8 strikes`);
|
||||
// outside it: tile (+2, +1), and tile (+3, 0) — (1.55, 1.05) was inside the old circle around the target's position
|
||||
for (const off of [[2, 1], [1.55, 1.05], [0, 2.6]]) assert.equal(strikes(off), 0, `(${off}) never struck`);
|
||||
});
|
||||
|
||||
test('蕾缪安: 通缉 needs a continuous 8 s stay in a 拉特兰 range (leaving restarts the count)', () => {
|
||||
const h = battle({
|
||||
units: [{ chessId: 'chess_char_6_01_a', row: 12, col: 2 }, { chessId: 'test_lat_a', row: 10, col: 2 }],
|
||||
|
||||
@@ -292,6 +292,8 @@ test('her stock (the owner\'s decision of 2026-10-06): the placed 棋子 occupy
|
||||
assert.deepEqual([u.skill.activations, w.stock], [1, 7], `${S}: 立即获得两枚棋子`);
|
||||
h.step();
|
||||
assert.ok(!u.s.flags.noSp, `${S}: below the cap, no 阻回`);
|
||||
assert.ok(u.skill.nextCastAt > h.b.time, `${S}: the next cast waits one attack interval (GitHub #298)`);
|
||||
h.run(u.skill.nextCastAt - h.b.time); // wait it out
|
||||
u.skill.gainSp(999);
|
||||
h.step();
|
||||
assert.deepEqual([u.skill.activations, w.stock], [2, 8], `${S}: 最多拥有8枚`);
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { makeBattle, enemyRec } from '../helpers/battleHarness.js';
|
||||
|
||||
test('Dorothy, Pozëmka, and Schwarz DEF reductions fall back to the strongest unexpired application', () => {
|
||||
const h = makeBattle({
|
||||
autoFinish: false,
|
||||
timeLimit: 10,
|
||||
flags: { dpInit: 0, dpPerSec: 0 },
|
||||
defs: { enemies: { enemy_dummy: enemyRec({ key: 'enemy_dummy', hp: 1e9, def: 1000, speed: 0 }) } },
|
||||
units: [
|
||||
{ uid: 1, diy: { slot: 'chess_char_6_diy1_a', charId: 'char_4048_doroth', skillIndex: 0, uniEquipId: null }, elite: true, row: 10, col: 4 },
|
||||
{ uid: 2, kind: 'token', tokenId: 'token_10025_doroth_recttp', ownerUid: 1, row: 9, col: 6 },
|
||||
{ uid: 3, diy: { slot: 'chess_char_6_diy2_a', charId: 'char_4055_bgsnow', skillIndex: 0, uniEquipId: null }, elite: true, row: 10, col: 5 },
|
||||
{ uid: 4, kind: 'token', tokenId: 'token_10026_bgsnow_subbow', ownerUid: 3, row: 9, col: 5 },
|
||||
{ uid: 5, diy: { slot: 'chess_char_5_diy1_a', charId: 'char_340_shwaz', skillIndex: 2, uniEquipId: null }, elite: true, row: 9, col: 4 },
|
||||
],
|
||||
});
|
||||
h.step();
|
||||
// Keep the real kits and projectile travel; prevent extra attacks refreshing their reductions.
|
||||
for (const unit of h.allies()) unit.atkCd = 100;
|
||||
const trap = h.unit(2), typewriter = h.unit(4), schwarz = h.unit(5);
|
||||
const enemy = h.spawn('enemy_dummy', { pos: [9, 6] });
|
||||
h.step();
|
||||
assert.equal(enemy.s.def, 700, 'Dorothy S1 applies the initial 30% reduction');
|
||||
|
||||
h.run(0.9 - h.b.time);
|
||||
assert.equal(h.b.forceAttack(typewriter, [enemy]), true);
|
||||
h.run(1.8 - h.b.time);
|
||||
schwarz.skill.gainSp(999);
|
||||
schwarz.atkCd = 0;
|
||||
h.step();
|
||||
assert.equal(schwarz.skill.active, true, 'Schwarz S3 guarantees her armor-piercing talent');
|
||||
schwarz.atkCd = 100;
|
||||
h.run(2.1 - h.b.time);
|
||||
|
||||
const reductions = h.hooksOf('statusApplied').filter((event) => event.target === enemy && event.status === 'defDown');
|
||||
assert.deepEqual(reductions.map(({ source, value, duration }) => [source.id, value, duration]), [
|
||||
[trap.id, 0.3, 5],
|
||||
[typewriter.id, 0.25, 5],
|
||||
[schwarz.id, 0.2, 5],
|
||||
]);
|
||||
for (const [index, expectedTime] of [[0, 0], [1, 1], [2, 2]]) {
|
||||
assert.ok(Math.abs(reductions[index].t - expectedTime) < 0.1, `reduction ${index + 1} lands near ${expectedTime}s`);
|
||||
}
|
||||
assert.equal(enemy.s.def, 700, 'weaker applications do not reduce the active strength');
|
||||
|
||||
h.run(5.1 - h.b.time);
|
||||
assert.equal(enemy.s.def, 750, 'the typewriter reduction survives Dorothy S1 expiring');
|
||||
h.run(6.1 - h.b.time);
|
||||
assert.equal(enemy.s.def, 800, 'Schwarz reduction survives the typewriter reduction expiring');
|
||||
h.run(7.1 - h.b.time);
|
||||
assert.equal(enemy.s.def, 1000, 'DEF returns to its base value after the final application expires');
|
||||
assert.deepEqual(h.b.errors, []);
|
||||
h.invariants();
|
||||
});
|
||||
+69
-69
@@ -794,30 +794,30 @@
|
||||
"total": 117,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 267,
|
||||
"rngDraws": 261,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":16,"total":117,"perfect":false,"leaks":101,"leaksUncounted":0,"coins":0,"dmg":110512,"bossDmg":0,"heal":0,"deaths":23,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":16,"total":117,"perfect":false,"leaks":101,"leaksUncounted":0,"coins":0,"dmg":99595,"bossDmg":0,"heal":0,"deaths":23,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_heyak",0,0,141,0,11532,5277,0,17,4],
|
||||
["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_heyak",0,0,142,3,8656,5277,0,6,1],
|
||||
["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_heyak",0,0,142,2,13429,5277,0,8,1],
|
||||
["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_heyak",0,0,133,0,8167,5277,0,12,0],
|
||||
["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_heyak",745.03,1,143,1,9977,4487,0,10,3],
|
||||
["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_heyak",0,0,5,1,7936,1744,0,7,1],
|
||||
["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_heyak",0,0,8,2,22948,1744,0,10,1],
|
||||
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_004_heyak",0,0,80,3,4698,3478,0,7,2],
|
||||
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_004_heyak",0,0,82,2,7236,3478,0,9,1],
|
||||
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_004_heyak",0,0,79,0,7099,3478,0,10,0],
|
||||
["p1",10,"op","chess_char_6_diy1_a",0,null,0,0,10,1,1508,1380,0,4,1],
|
||||
["p1",11,"op","chess_char_6_diy2_a",1,null,0,0,75,0,1697,2760,0,3,0],
|
||||
["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,3,3,19057,1380,0,7,1],
|
||||
["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_heyak",745.03,1,143,2,10896,4487,0,11,4],
|
||||
["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_heyak",0,0,5,1,5394,1744,0,5,1],
|
||||
["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_heyak",0,0,8,2,16520,1744,0,9,1],
|
||||
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_004_heyak",0,0,81,3,4698,3478,0,7,2],
|
||||
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_004_heyak",0,0,9,2,5566,1739,0,5,1],
|
||||
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_004_heyak",0,0,80,0,7934,3478,0,12,0],
|
||||
["p1",10,"op","chess_char_6_diy1_a",0,null,0,0,75,1,1168,2760,0,4,1],
|
||||
["p1",11,"op","chess_char_6_diy2_a",1,null,0,0,76,0,1697,2760,0,3,0],
|
||||
["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,3,3,12593,1380,0,4,1],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {"enemy_1005_yokai":[51,11,40,0,33724],"enemy_1005_yokai_2":[54,5,49,20376,35463],"enemy_1112_emppnt":[12,0,12,0,41325]},
|
||||
"hooks": [1,143,6811,222,233,299,299,0,39,140,15,15,0,7842,192,0,117,101,1,39,0,0,0],
|
||||
"events": {"atk":346,"deploy":24,"die":39,"dmg":299,"engage":11,"fx":280,"leak":101,"skill":30,"spawn":131,"status":345},
|
||||
"fx": {"bombard":32,"bombardShell":32,"tornado":192,"tornadoPulse":24},
|
||||
"snaps": "1059b89c 6d126d74 36b0162d 5f3c3def bea20f53 df2b0823 0facf77d 1bebe14e 3f3f75b7 bb7367a6 b9de1305 563b9e34 4d8ac78e 5cbb2592 9e319bc1 262aa531 28129a72 6a5bd285 565917fe 7062b7e8 ebd4bd17 166fe5f3 abc7bb22"
|
||||
"enemies": {"enemy_1005_yokai":[51,10,41,0,27983],"enemy_1005_yokai_2":[54,6,48,16577,33757],"enemy_1112_emppnt":[12,0,12,0,37856]},
|
||||
"hooks": [1,143,6811,196,203,284,284,0,39,140,16,16,0,7583,188,0,117,101,1,39,0,0,0],
|
||||
"events": {"atk":320,"deploy":24,"die":39,"dmg":284,"engage":11,"fx":198,"leak":101,"skill":32,"spawn":131,"status":299},
|
||||
"fx": {"bombard":25,"bombardShell":25,"tornado":131,"tornadoPulse":17},
|
||||
"snaps": "1059b89c 0d0ab14e fff04efc 4b100ad5 3133142e 42f10f08 552cfc97 2c32a76e 2878d371 3d4145d0 7b9c9b96 60fdd264 d214d7b9 22d073f8 5ee9268f fc13e42a f98c6910 8622b2f9 848f0531 0f883096 7cba8373 7565b444 88e454e7"
|
||||
},
|
||||
"diy-021": {
|
||||
"about": "6_diy1_b=heyak/S1 6_diy2_b=heyak/S2 6_diy1_b=heyak/S3 6_diy2_b=heyak/S1/002_heyak 6_diy1_b=heyak/S2/002_heyak 6_diy2_b=heyak/S3/002_heyak 6_diy1_b=heyak/S1/003_heyak 6_diy2_b=heyak/S2/003_heyak 6_diy1_b=heyak/S3/003_heyak 6_diy2_b=heyak/S1/004_heyak 6_diy1_b=heyak/S2/004_heyak 6_diy2_b=heyak/S3/004_heyak",
|
||||
@@ -2403,15 +2403,15 @@
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 0,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":51,"total":96,"perfect":false,"leaks":45,"leaksUncounted":0,"coins":0,"dmg":294912,"bossDmg":0,"heal":232713,"deaths":15,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":51,"total":96,"perfect":false,"leaks":45,"leaksUncounted":0,"coins":0,"dmg":294912,"bossDmg":0,"heal":232708,"deaths":15,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_shu",3270,1,118,5,16598,16808,5472,47,2],
|
||||
["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_shu",3270,1,120,1,2287,16353,17674,22,1],
|
||||
["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_shu",3270,1,119,5,30488,15560,32515,90,3],
|
||||
["p1",4,"op","chess_char_6_diy1_a",0,null,2333.85,1,117,3,24548,27318,9004,88,2],
|
||||
["p1",5,"op","chess_char_6_diy2_a",1,null,2513,1,99,1,8037,34719,37158,50,2],
|
||||
["p1",6,"op","chess_char_6_diy1_a",2,null,0,0,104,6,30371,33925,18939,121,1],
|
||||
["p1",7,"op","chess_char_6_diy2_b",0,"none",0,0,102,6,40221,40728,12451,139,3],
|
||||
["p1",6,"op","chess_char_6_diy1_a",2,null,0,0,104,6,30371,33925,18935,121,1],
|
||||
["p1",7,"op","chess_char_6_diy2_b",0,"none",0,0,102,6,40221,40723,12451,139,3],
|
||||
["p1",8,"op","chess_char_6_diy1_b",1,"none",0,0,95,3,17536,32106,25999,78,2],
|
||||
["p1",9,"op","chess_char_6_diy2_b",2,"none",0,0,5,3,17720,6178,25141,72,2],
|
||||
["p1",10,"op","chess_char_6_diy1_b",0,"uniequip_002_shu",0,0,8,0,15926,8337,2961,37,0],
|
||||
@@ -2421,11 +2421,11 @@
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {"enemy_1229_darmy":[27,18,9,42204,86393],"enemy_1229_darmy_2":[57,33,18,151066,218478],"enemy_9007_acelem":[12,0,11,64874,94148]},
|
||||
"enemies": {"enemy_1229_darmy":[27,18,9,42200,86393],"enemy_1229_darmy_2":[57,33,18,151051,218478],"enemy_9007_acelem":[12,0,11,64889,94148]},
|
||||
"hooks": [1,120,6900,1655,1655,4214,4508,24466,66,104,21,20,0,16520,0,98,96,38,1,66,0,42,0],
|
||||
"events": {"atk":1711,"deploy":21,"die":66,"dmg":4508,"engage":12,"fx":146,"heal":369,"leak":38,"skill":41,"spawn":111,"status":104},
|
||||
"fx": {"beam":16,"burst":42,"healField":46,"teleport":42},
|
||||
"snaps": "37fbb702 9cbcf13c 0a89a448 750d277b d9592437 862401cb 093e7be6 1be132e4 3c1f9fb3 49416bde 2829f9ff 004d18cc 4a040151 bbe05ad5 c52beaeb 202f1244 3901f434 601d0167 a4eb9728 5fc3c9a2 2267d1c9 4e912d69 fd2bfd2e"
|
||||
"snaps": "37fbb702 9cbcf13c 0a89a448 750d277b d9592437 be9b7730 7dbdaeb3 ac878763 fcb3fa2d 0d8b02dc 4a580dd9 9469a886 763426bb cd35262b 13c864f5 dcf9735a cfb24522 27704e21 83f9d1ea 25515c68 00b3c803 21fe5f4f 6cf1426c"
|
||||
},
|
||||
"diy-060": {
|
||||
"about": "5_diy1_a=pallas/S1 5_diy2_a=pallas/S2 5_diy1_a=pallas/S3 5_diy2_b=pallas/S1 5_diy1_b=pallas/S2 5_diy2_b=pallas/S3 5_diy1_b=pallas/S1/002_pallas 5_diy2_b=pallas/S2/002_pallas 5_diy1_b=pallas/S3/002_pallas 5_diy2_b=pallas/S1/003_pallas 5_diy1_b=pallas/S2/003_pallas 5_diy2_b=pallas/S3/003_pallas",
|
||||
@@ -5248,29 +5248,29 @@
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 0,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":0,"total":123,"perfect":false,"leaks":123,"leaksUncounted":0,"coins":0,"dmg":306066,"bossDmg":0,"heal":32670,"deaths":17,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":0,"total":123,"perfect":false,"leaks":123,"leaksUncounted":0,"coins":0,"dmg":307696,"bossDmg":0,"heal":37911,"deaths":17,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_diy1_b",0,"uniequip_002_radian",1158,1,4,0,33930,0,0,127,4],
|
||||
["p1",2,"op","chess_char_6_diy2_b",1,"uniequip_002_radian",1158,1,5,0,41774,0,0,124,4],
|
||||
["p1",3,"op","chess_char_6_diy1_b",2,"uniequip_002_radian",1158,1,11,0,60012,0,0,137,3],
|
||||
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_radian",993,1,13,0,40817,0,0,140,4],
|
||||
["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_003_radian",993,1,6,0,43040,0,0,121,4],
|
||||
["p1",1,"op","chess_char_6_diy1_b",0,"uniequip_002_radian",1158,1,4,0,34135,0,0,127,4],
|
||||
["p1",2,"op","chess_char_6_diy2_b",1,"uniequip_002_radian",1158,1,5,0,41953,0,0,124,4],
|
||||
["p1",3,"op","chess_char_6_diy1_b",2,"uniequip_002_radian",1158,1,11,0,60038,0,0,137,3],
|
||||
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_radian",993,1,13,0,40604,0,0,140,4],
|
||||
["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_003_radian",993,1,6,0,42960,0,0,121,4],
|
||||
["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_003_radian",993,1,14,0,62016,0,0,132,3],
|
||||
["p1",7,"op","chess_char_5_diy1_a",0,null,0,0,147,0,1742,13278,7559,25,1],
|
||||
["p1",8,"op","chess_char_5_diy2_a",1,null,0,0,148,0,5534,14951,4707,35,1],
|
||||
["p1",7,"op","chess_char_5_diy1_a",0,null,0,0,149,0,3483,17332,8610,34,1],
|
||||
["p1",8,"op","chess_char_5_diy2_a",1,null,0,0,147,0,5147,16241,5568,34,1],
|
||||
["p1",9,"op","chess_char_5_diy1_a",2,null,0,0,130,0,1625,4555,220,8,0],
|
||||
["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,149,0,8888,10867,5572,46,1],
|
||||
["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,148,0,9046,11213,5918,46,1],
|
||||
["p1",11,"op","chess_char_5_diy1_b",1,"none",0,0,133,0,3696,5730,435,15,0],
|
||||
["p1",12,"op","chess_char_5_diy2_b",2,"none",0,0,134,0,2992,10413,14176,43,1],
|
||||
["p1",12,"op","chess_char_5_diy2_b",2,"none",0,0,134,0,2992,9964,17159,47,1],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {"enemy_1010_demon":[54,0,53,29077,128397],"enemy_1422_lrsldr_2":[39,0,39,21409,104996],"enemy_1425_lrcmra_2":[30,0,30,9310,72672]},
|
||||
"hooks": [1,149,6900,1053,1053,986,986,1657,17,139,26,26,0,29616,226,17,123,122,1,18,0,0,0],
|
||||
"events": {"atk":1053,"deploy":23,"die":17,"dmg":986,"engage":12,"fx":9,"heal":67,"leak":122,"skill":52,"spawn":138,"status":234},
|
||||
"enemies": {"enemy_1010_demon":[54,0,53,37546,132382],"enemy_1422_lrsldr_2":[39,0,39,17859,103701],"enemy_1425_lrcmra_2":[30,0,30,9630,71612]},
|
||||
"hooks": [1,149,6900,1072,1072,1001,1001,2279,17,139,26,26,0,30067,226,17,123,122,1,20,0,0,0],
|
||||
"events": {"atk":1072,"deploy":23,"die":17,"dmg":1001,"engage":12,"fx":9,"heal":71,"leak":122,"skill":52,"spawn":138,"status":234},
|
||||
"fx": {"shield":8,"undying":1},
|
||||
"snaps": "422f4ca7 82d85ded 1385aefd a28b5e3b a21d6686 d83862af 7e5ba79d e77bedc9 b9807ab8 28b73dbc 909a17e9 b7d76569 d8a709e8 011fc05a 22f68ccc 8d128c96 d14e6a62 7b6b8033 bc6418b2 000d2486 8070923b 23199b14 c39148dc"
|
||||
"snaps": "422f4ca7 82d85ded f9912cdd d2129b24 b99085df a39a1c44 8adc939d 29eff8bc 80335586 a23ffeab ddb0ec35 0c8321e8 31df363f 198f71d3 407a9f76 14edeeda 025ea6cd 9741503f 4b8237b4 98be51c7 45f5682e b173bb87 5b2dd744"
|
||||
},
|
||||
"diy-123": {
|
||||
"about": "5_diy1_b=slent2/S1/002_slent2 5_diy2_b=slent2/S2/002_slent2 5_diy1_b=slent2/S3/002_slent2 5_diy2_b=slent2/S1/003_slent2 5_diy1_b=slent2/S2/003_slent2 5_diy2_b=slent2/S3/003_slent2 6_diy1_a=slent2/S1 6_diy2_a=slent2/S2 6_diy1_a=slent2/S3 6_diy2_b=slent2/S1 6_diy1_b=slent2/S2 6_diy2_b=slent2/S3",
|
||||
@@ -5290,26 +5290,26 @@
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 11,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":12,"total":36,"perfect":false,"leaks":24,"leaksUncounted":0,"coins":0,"dmg":163954,"bossDmg":0,"heal":112142,"deaths":21,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":12,"total":36,"perfect":false,"leaks":24,"leaksUncounted":0,"coins":0,"dmg":158628,"bossDmg":0,"heal":111125,"deaths":21,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_slent2",0,0,57,0,8245,5577,12709,42,2],
|
||||
["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_slent2",0,0,54,0,22019,9588,6117,65,3],
|
||||
["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_slent2",0,0,56,0,3686,6734,13453,37,1],
|
||||
["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_slent2",0,0,52,0,21984,8140,11594,47,2],
|
||||
["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_slent2",819.96,1,60,0,28128,4330,2400,38,2],
|
||||
["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_slent2",1068.01,1,58,0,17952,2762,11014,44,1],
|
||||
["p1",7,"op","chess_char_6_diy1_a",0,null,724.73,1,55,0,10681,2855,6823,50,2],
|
||||
["p1",8,"op","chess_char_6_diy2_a",1,null,0,0,53,0,12848,6062,5102,58,2],
|
||||
["p1",9,"op","chess_char_6_diy1_a",2,null,0,0,48,1,5235,7339,11935,51,1],
|
||||
["p1",10,"op","chess_char_6_diy2_b",0,"none",0,0,47,0,10824,44211,14116,51,2],
|
||||
["p1",11,"op","chess_char_6_diy1_b",1,"none",0,0,59,0,13464,3751,878,38,2],
|
||||
["p1",12,"op","chess_char_6_diy2_b",2,"none",0,0,51,0,8888,50121,16001,60,1]
|
||||
["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_slent2",0,0,57,0,11446,6763,12809,48,2],
|
||||
["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_slent2",1865,1,54,0,21728,5602,7475,71,3],
|
||||
["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_slent2",1116.5,1,56,0,7663,8790,15155,51,2],
|
||||
["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_slent2",0,0,53,0,19296,9125,8872,43,2],
|
||||
["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_slent2",0,0,60,0,23328,4125,1375,31,2],
|
||||
["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_slent2",0,0,58,0,12288,3897,9218,35,1],
|
||||
["p1",7,"op","chess_char_6_diy1_a",0,null,0,0,55,0,7895,4480,6020,42,2],
|
||||
["p1",8,"op","chess_char_6_diy2_a",1,null,1392.65,1,52,0,16254,3375,4934,67,2],
|
||||
["p1",9,"op","chess_char_6_diy1_a",2,null,0,0,50,1,7402,9240,11944,58,1],
|
||||
["p1",10,"op","chess_char_6_diy2_b",0,"none",0,0,49,0,10824,49145,18299,58,2],
|
||||
["p1",11,"op","chess_char_6_diy1_b",1,"none",0,0,59,0,12056,4225,1168,35,2],
|
||||
["p1",12,"op","chess_char_6_diy2_b",2,"none",0,0,51,0,8448,39925,13856,59,1]
|
||||
],
|
||||
"enemies": {"enemy_1005_yokai_2":[12,12,0,334,2893],"enemy_1005_yokai_3":[12,0,8,76865,64685],"enemy_9009_acfort":[12,0,11,74270,96377]},
|
||||
"hooks": [1,60,6900,1019,1019,858,858,1795,33,52,21,21,0,24163,0,0,36,19,1,32,0,0,0],
|
||||
"events": {"atk":1103,"deploy":24,"die":33,"dmg":858,"engage":12,"fx":49,"heal":250,"leak":19,"skill":42,"spawn":48,"status":28},
|
||||
"fx": {"beam":46,"undying":3},
|
||||
"snaps": "a5b373d8 cade2571 25bd2c7f 01adb744 fbb45b57 6848708b 0a96115c 7e128c01 21df8c78 e6903500 2f41b832 aa0ba68b 8641acbf 21932ee2 038f1d76 a983d0f1 3ced4395 63969cf1 ccc7caac 2ce3eb58 ecd3dfd9 4ef03b03 eb5d21bd"
|
||||
"enemies": {"enemy_1005_yokai_2":[12,12,0,335,2893],"enemy_1005_yokai_3":[12,0,8,77142,51740],"enemy_9009_acfort":[12,0,11,71214,103995]},
|
||||
"hooks": [1,60,6900,1033,1033,846,846,1544,33,52,22,20,0,24223,0,0,36,19,1,36,0,0,0],
|
||||
"events": {"atk":1104,"deploy":24,"die":33,"dmg":846,"engage":12,"fx":49,"heal":260,"leak":19,"skill":42,"spawn":48,"status":29},
|
||||
"fx": {"beam":45,"undying":4},
|
||||
"snaps": "a5b373d8 cade2571 25bd2c7f 01adb744 fbb45b57 e30ff540 3b72daed 51b4c8b9 06683530 b735ddf5 82033c8c 713018f8 4395803f 890d91a1 2e056bbf 2e2e98df d852cfe2 19169929 86dc378b 79c1efd7 d9de2b5f 90c00c25 ea46d144"
|
||||
},
|
||||
"diy-124": {
|
||||
"about": "6_diy1_b=slent2/S1/002_slent2 6_diy2_b=slent2/S2/002_slent2 6_diy1_b=slent2/S3/002_slent2 6_diy2_b=slent2/S1/003_slent2 6_diy1_b=slent2/S2/003_slent2 6_diy2_b=slent2/S3/003_slent2 5_diy1_a=haruka/S1 5_diy2_a=haruka/S2 5_diy1_a=haruka/S3 5_diy2_b=haruka/S1 5_diy1_b=haruka/S2 5_diy2_b=haruka/S3",
|
||||
@@ -5329,15 +5329,15 @@
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 0,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":3,"total":147,"perfect":false,"leaks":144,"leaksUncounted":0,"coins":0,"dmg":388624,"bossDmg":0,"heal":186324,"deaths":1,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":3,"total":147,"perfect":false,"leaks":144,"leaksUncounted":0,"coins":0,"dmg":388624,"bossDmg":0,"heal":186275,"deaths":1,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_diy1_b",0,"uniequip_002_slent2",2298,1,6,0,21267,0,30997,124,4],
|
||||
["p1",2,"op","chess_char_6_diy2_b",1,"uniequip_002_slent2",2298,1,11,0,30498,0,13312,138,5],
|
||||
["p1",3,"op","chess_char_6_diy1_b",2,"uniequip_002_slent2",2298,1,14,0,17697,0,14062,99,2],
|
||||
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_slent2",1965,1,4,0,31024,0,5800,77,4],
|
||||
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_slent2",1965,1,4,0,31024,0,5870,76,4],
|
||||
["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_003_slent2",1965,1,5,0,52007,0,10668,130,5],
|
||||
["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_003_slent2",2358,1,7,0,33734,19361,24981,114,2],
|
||||
["p1",7,"op","chess_char_5_diy1_a",0,null,1556.5,1,12,1,18973,0,14769,124,5],
|
||||
["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_003_slent2",2358,1,7,0,33734,19312,24981,114,2],
|
||||
["p1",7,"op","chess_char_5_diy1_a",0,null,1556.5,1,12,1,18973,0,14651,124,5],
|
||||
["p1",8,"op","chess_char_5_diy2_a",1,null,1556.5,1,15,0,36496,0,16816,75,2],
|
||||
["p1",9,"op","chess_char_5_diy1_a",2,null,1556.5,1,8,1,31939,48618,9950,102,3],
|
||||
["p1",10,"op","chess_char_5_diy2_b",0,"none",1531.8,1,10,1,20540,21770,18960,127,5],
|
||||
@@ -5347,11 +5347,11 @@
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {"enemy_1010_demon_2":[36,0,34,129029,143213],"enemy_1071_dftman":[51,1,50,10701,69708],"enemy_1072_dlancer":[60,2,56,49435,175702]},
|
||||
"hooks": [1,163,6900,1602,1602,1824,1824,1019,4,144,42,38,0,42759,60,66,147,140,1,4,0,0,0],
|
||||
"events": {"atk":1836,"deploy":13,"die":4,"dmg":1818,"engage":12,"fx":794,"heal":616,"leak":140,"skill":80,"spawn":162,"status":757},
|
||||
"enemies": {"enemy_1010_demon_2":[36,0,34,129029,143213],"enemy_1071_dftman":[51,1,50,10701,69708],"enemy_1072_dlancer":[60,2,56,49387,175702]},
|
||||
"hooks": [1,163,6900,1601,1601,1824,1824,1018,4,144,42,38,0,42759,60,66,147,140,1,4,0,0,0],
|
||||
"events": {"atk":1835,"deploy":13,"die":4,"dmg":1818,"engage":12,"fx":794,"heal":614,"leak":140,"skill":80,"spawn":162,"status":757},
|
||||
"fx": {"aoe":98,"heal":310,"levitate":60,"shield":326},
|
||||
"snaps": "1b8091e0 73c802f9 110ffccb 73e97743 2c3d94d2 37aed2ff 5fdabeab 69cb41ab 491632d5 aef350f1 30f8d397 418bbed0 483f862b e8d524ca 1a85cf2d 0771fb68 0ed53d18 5abc2708 a6f0038b 0f8d27f3 f803bfaf 669dc197 e8d45f8a"
|
||||
"snaps": "1b8091e0 73c802f9 110ffccb 73e97743 2c3d94d2 37aed2ff 5fdabeab 69cb41ab 491632d5 aef350f1 30f8d397 418bbed0 483f862b e8d524ca 1a85cf2d 0771fb68 0ed53d18 5abc2708 83618567 204d2f27 488b9d83 57bbc743 6a9e58ce"
|
||||
},
|
||||
"diy-125": {
|
||||
"about": "5_diy1_b=haruka/S1/002_haruka 5_diy2_b=haruka/S2/002_haruka 5_diy1_b=haruka/S3/002_haruka 6_diy1_a=haruka/S1 6_diy2_a=haruka/S2 6_diy1_a=haruka/S3 6_diy2_b=haruka/S1 6_diy1_b=haruka/S2 6_diy2_b=haruka/S3 6_diy1_b=haruka/S1/002_haruka 6_diy2_b=haruka/S2/002_haruka 6_diy1_b=haruka/S3/002_haruka",
|
||||
@@ -5822,22 +5822,22 @@
|
||||
["p1",3,"op","chess_char_6_diy1_a",2,null,1810.9,1,11,0,0,0,53690,111,2],
|
||||
["p1",4,"op","chess_char_6_diy2_b",0,"none",2005.9,1,13,0,0,0,46002,87,4],
|
||||
["p1",5,"op","chess_char_6_diy1_b",1,"none",2005.9,1,6,18,704057,0,15788,61,3],
|
||||
["p1",6,"op","chess_char_6_diy2_b",2,"none",2005.9,1,14,0,0,0,26930,79,3],
|
||||
["p1",6,"op","chess_char_6_diy2_b",2,"none",2005.9,1,14,0,0,0,27264,78,3],
|
||||
["p1",7,"op","chess_char_5_diy1_a",0,null,0,0,7,0,0,81970,41023,72,12],
|
||||
["p1",8,"op","chess_char_5_diy2_a",1,null,1492,1,9,0,0,98191,51694,93,4],
|
||||
["p1",9,"op","chess_char_5_diy1_a",2,null,217.03,1,10,0,0,107130,60043,84,0],
|
||||
["p1",9,"op","chess_char_5_diy1_a",2,null,217.03,1,10,0,0,107130,60487,84,0],
|
||||
["p1",10,"op","chess_char_5_diy2_b",0,"none",1653,1,12,0,0,22049,53056,73,18],
|
||||
["p1",11,"op","chess_char_5_diy1_b",1,"none",1653,1,15,0,0,64626,18934,43,2],
|
||||
["p1",11,"op","chess_char_5_diy1_b",1,"none",1653,1,15,0,0,64626,18156,43,2],
|
||||
["p1",12,"op","chess_char_5_diy2_b",2,"none",1653,1,8,0,0,90649,44508,81,0],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {"enemy_1006_shield_3":[21,0,16,372723,566446],"enemy_1043_zomsbr":[66,60,5,22690,479046],"enemy_1402_tgshd_2":[36,10,20,69202,794079]},
|
||||
"hooks": [1,138,6900,1408,1408,1120,1120,13592,71,112,55,52,70,22853,566,8,123,41,1,71,0,0,0],
|
||||
"events": {"atk":2335,"deploy":12,"die":71,"dmg":1110,"engage":2,"fx":458,"heal":1178,"leak":41,"skill":107,"spawn":138,"status":209},
|
||||
"hooks": [1,138,6900,1407,1407,1120,1120,13591,71,112,55,52,70,22853,566,8,123,41,1,71,0,0,0],
|
||||
"events": {"atk":2334,"deploy":12,"die":71,"dmg":1110,"engage":2,"fx":458,"heal":1178,"leak":41,"skill":107,"spawn":138,"status":209},
|
||||
"fx": {"aoe":70,"expose":272,"healAoe":70,"shield":40,"takeoff":6},
|
||||
"snaps": "0a2a0a58 9edb0805 ec947f3f 7ffcd830 23c8b514 9268451b 1587cab5 93203dcf 675b3282 b8e42ac4 d194e3af c0d85745 cb282efe f152e307 02944050 4dab08fa 73f1afb0 1a6a7b38 89999054 6738780f f5ef296b 9876bcdc 9e74e0c9"
|
||||
"snaps": "0a2a0a58 9edb0805 ec947f3f 7ffcd830 23c8b514 9268451b 1587cab5 93203dcf 675b3282 b8e42ac4 d194e3af c0d85745 4520de90 8fa30b22 3c71ad2d 7af3c5a9 1b07ebf9 d6841316 a0cdffb6 e3a8979b d1066696 fe5e3f62 b6c3a091"
|
||||
},
|
||||
"diy-134": {
|
||||
"about": "5_diy1_b=monstr/S1/002_monstr 5_diy2_b=monstr/S2/002_monstr 5_diy1_b=monstr/S3/002_monstr 6_diy1_a=monstr/S1 6_diy2_a=monstr/S2 6_diy1_a=monstr/S3 6_diy2_b=monstr/S1 6_diy1_b=monstr/S2 6_diy2_b=monstr/S3 6_diy1_b=monstr/S1/002_monstr 6_diy2_b=monstr/S2/002_monstr 6_diy1_b=monstr/S3/002_monstr",
|
||||
@@ -6036,7 +6036,7 @@
|
||||
],
|
||||
"enemies": {"enemy_1288_duskls":[27,4,22,19614,114889],"enemy_1288_duskls_2":[57,12,45,7003,313267],"enemy_1292_duskld":[51,9,38,77789,451811]},
|
||||
"hooks": [1,153,6900,1638,1638,2202,2465,332,35,140,20,18,0,28180,18680,57,135,105,1,84,0,0,6],
|
||||
"events": {"atk":1961,"deploy":18,"die":35,"dmg":2465,"engage":9,"fx":119,"heal":279,"leak":105,"skill":42,"spawn":147,"status":1300},
|
||||
"events": {"atk":1961,"deploy":18,"die":35,"dmg":2465,"engage":9,"fx":119,"heal":279,"leak":105,"skill":42,"spawn":147,"status":1298},
|
||||
"fx": {"aoe":5,"dodge":43,"ember":49,"revive":22},
|
||||
"snaps": "3e9a4d11 f9a475f7 d909dafe 07c79a9f 76e65988 7dff2527 631c9a48 90e879b4 cfe3ca91 ccb275cc 2445e31f 2132570f ae5cb98a c2376534 c8afbc93 fbbb00d5 98187a92 3228cfb6 f8b78613 5724ac77 b963f388 bb322dda fee7681a"
|
||||
}
|
||||
|
||||
+257
-254
@@ -23,36 +23,36 @@
|
||||
"killed": 20,
|
||||
"total": 16,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 860227,
|
||||
"rngDraws": 465,
|
||||
"bossHpLeft": 757974,
|
||||
"rngDraws": 450,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":20,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1654181,"bossDmg":1231515,"heal":19498,"deaths":1,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1792443,"bossDmg":1508258,"heal":66028,"deaths":1,"layerGains":{}}
|
||||
"p1": {"killed":20,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1829160,"bossDmg":1406273,"heal":22241,"deaths":0,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1719718,"bossDmg":1435752,"heal":63732,"deaths":0,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",2234.8,1,13,0,0,13169,12811,0,1],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",1997.61,1,15,0,0,3014,537,0,0],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,17,2,25157,2919,1127,5,1],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1470,1,7,5,459003,0,0,71,1],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,9,0,0,1266,0,0,0],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1219.11,1,19,1,107433,13649,2379,0,5],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1442,1,24,9,580897,1076,1076,98,10],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,11,0,0,2042,0,0,0],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,26,0,351605,2090,1133,51,51],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,63,1,78633,3517,100,143,4],
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",1317.39,1,13,0,0,14130,13618,0,1],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,15,0,0,3434,1310,0,0],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,17,3,36610,2365,439,5,1],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",764.36,1,7,4,473435,974,0,71,1],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,9,0,0,754,0,0,0],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1219.11,1,19,0,105231,11005,2072,0,5],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1442,1,24,8,659439,0,0,99,10],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,11,0,0,0,0,0,0],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,26,1,355289,2720,1289,51,51],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",925.86,1,21,1,122388,6297,3048,213,5],
|
||||
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,28,0,0,0,0,0,null],
|
||||
["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,22,0,11014,1990,0,10,1],
|
||||
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4032,1,33,6,846545,20760,0,191,3],
|
||||
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,16,2,147542,1160,0,0,2],
|
||||
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,68,0,0,2314,0,0,0],
|
||||
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",3593,1,23,0,231615,2968,0,134,4],
|
||||
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",2059.08,1,8,0,0,4454,0,0,0],
|
||||
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",619.79,1,10,0,9427,9216,133,0,0],
|
||||
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2753.55,1,20,0,0,2045,8642,12,1],
|
||||
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,25,0,254960,2470,0,204,4],
|
||||
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,12,0,289048,4343,0,0,3],
|
||||
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,27,0,0,1420,57252,46,2],
|
||||
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4032,1,33,9,846708,23488,0,191,3],
|
||||
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2612.11,1,16,1,75440,1160,0,0,1],
|
||||
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",551.11,1,18,0,0,2133,0,0,0],
|
||||
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",3593,1,23,0,231615,1808,0,134,4],
|
||||
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",1743.26,1,8,0,0,3233,0,0,0],
|
||||
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",1395.45,1,10,0,7542,9717,133,0,0],
|
||||
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2753.55,1,20,0,0,1044,6778,10,1],
|
||||
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,25,0,254960,2921,0,204,4],
|
||||
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",464.73,1,12,0,290148,4047,0,0,3],
|
||||
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,27,0,0,2964,56821,49,2],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null],
|
||||
@@ -64,25 +64,26 @@
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,49,0,4603,2788,336,7,1],
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,51,0,0,0,0,0,null],
|
||||
["p2","~2","token","token_10019_nearl2_sword",null,null,6600,0,55,0,3329,0,0,25,null],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,138,0,60,0,0,0,0,0,null],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,1442,1,64,1,23084,0,0,32,1],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,1442,1,58,0,39947,928,130,53,1],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,125.89,0,61,0,7780,1864,0,12,null],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,138,0,62,0,0,0,0,0,null],
|
||||
["p2","~3","token","token_10019_nearl2_sword",null,null,6127.12,0,65,0,3329,593,0,25,null],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,1442,0,69,0,6040,0,0,12,null],
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,70,0,0,0,0,0,null],
|
||||
["p2","~4","token","token_10019_nearl2_sword",null,null,6600,1,72,0,3318,0,0,5,null],
|
||||
["p1","~5","token","token_10030_mlyss_wtrman",null,null,1442,1,74,0,3,0,0,3,null]
|
||||
["p1","~5","token","token_10030_mlyss_wtrman",null,null,1442,0,67,0,6040,0,0,12,null],
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,69,0,0,0,0,0,null],
|
||||
["p1","~6","token","token_10030_mlyss_wtrman",null,null,1442,1,71,0,674,0,0,4,null],
|
||||
["p2","~4","token","token_10019_nearl2_sword",null,null,6600,1,72,0,3318,0,0,5,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_1005_yokai": [4,4,0,0,13759],
|
||||
"enemy_1006_shield_2": [14,14,0,24795,601974],
|
||||
"enemy_1006_shield_2": [14,14,0,26659,601974],
|
||||
"enemy_1061_zomshd": [2,2,0,3356,90856],
|
||||
"enemy_9013_acstmk": [1,0,0,45645,2739773],
|
||||
"enemy_9016_acstmr": [8,7,0,0,261]
|
||||
"enemy_9013_acstmk": [1,0,0,46873,2842026],
|
||||
"enemy_9016_acstmr": [8,7,0,0,262]
|
||||
},
|
||||
"hooks": [1,72,6000,1206,1206,3099,3496,3972,31,41,95,89,9,39824,2903,15,29,0,1,32,0,23,0],
|
||||
"events": {"atk":1542,"deploy":37,"die":41,"dmg":3212,"engage":18,"fx":658,"heal":385,"skill":184,"spawn":69,"status":710},
|
||||
"fx": {"airstrike":5,"beam":54,"blessing":1,"blink":1,"bombard":9,"bombardShell":9,"burst":23,"copy":3,"dp":4,"drone":335,"droneLock":17,"drones":3,"finale":2,"firewall":1,"garrisonGrant":1,"lightning":124,"link":1,"lock":9,"radiantSword":4,"shell":8,"slash":2,"snow":5,"split":3,"storm":10,"summon":8,"talent":4,"tide":5,"wanted":7},
|
||||
"snaps": "44bc2b70 b3daaf96 baf6929d 143779f3 c1387369 80ca050e 4e208395 6728039d 417e6ec7 e83606e2 06a61aec 78738a35 a6c6ae9c c7844f12 05ba7c16 89e6563a eafb1f1c 5f815a0a f048b25a cef59d00"
|
||||
"hooks": [1,71,6000,1315,1315,3203,3599,4686,29,40,95,90,9,40549,2884,15,29,0,1,29,0,22,0],
|
||||
"events": {"atk":1651,"deploy":36,"die":40,"dmg":3315,"engage":19,"fx":656,"heal":392,"skill":185,"spawn":70,"status":709},
|
||||
"fx": {"airstrike":4,"beam":54,"blink":1,"bombard":9,"bombardShell":9,"burst":22,"copy":3,"dp":5,"drone":335,"droneLock":17,"drones":3,"finale":1,"firewall":1,"garrisonGrant":1,"lightning":125,"link":1,"lock":9,"radiantSword":4,"shell":8,"slash":1,"snow":5,"split":4,"storm":10,"summon":8,"talent":4,"tide":5,"wanted":7},
|
||||
"snaps": "44bc2b70 b3daaf96 baf6929d 143779f3 c1387369 4a4bee86 07473117 ab60a7ca 0ba1a293 14634e1a ed26e3f7 3cd4984e c4289383 b3b5efd4 892e5b14 4d08cebe c4e5e3ee 73e42870 7083cd44 45f8ad22"
|
||||
},
|
||||
"boss-boss_1-solo": {
|
||||
"about": "假想敌:胄 solo pool 1800000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
|
||||
@@ -258,56 +259,56 @@
|
||||
"round": 14,
|
||||
"seed": 1428555614,
|
||||
"waveId": "act1autochess_h07_03",
|
||||
"time": 193.43,
|
||||
"ticks": 5803,
|
||||
"time": 191.33,
|
||||
"ticks": 5740,
|
||||
"reason": "cleared",
|
||||
"killed": 19,
|
||||
"total": 6,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 0,
|
||||
"rngDraws": 1423,
|
||||
"rngDraws": 1408,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":19,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1572377,"bossDmg":1451138,"heal":8263,"deaths":4,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2612061,"bossDmg":2548862,"heal":37169,"deaths":3,"layerGains":{}}
|
||||
"p1": {"killed":19,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1598736,"bossDmg":1477507,"heal":4950,"deaths":4,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2585697,"bossDmg":2522493,"heal":40534,"deaths":3,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3700,1,7,0,0,0,2781,0,1],
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3700,1,7,0,0,0,2673,0,1],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,11,0,0,0,0,0,0],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,9,0,22,1430,182,22,1],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1960.01,1,13,6,882653,4034,609,59,8],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",949.1,1,17,4,348059,8347,1419,62,3],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",0,0,62,1,26518,15143,2047,0,3],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",0,0,66,2,174259,8329,1184,52,3],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,0,67,0,42,16,2],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,0,41,0,0,11,12],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,23,0,96779,0,0,195,5],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,9,1,43,3444,505,43,1],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1745.65,1,13,2,914910,4480,538,59,8],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",252.98,1,17,4,348597,8106,407,62,3],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",0,0,62,0,26511,12270,434,0,3],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",0,0,66,2,169698,7389,372,48,3],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,1,32,0,20,15,2],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,0,38,0,0,10,10],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,23,0,95529,0,0,193,5],
|
||||
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,26,0,0,0,0,0,null],
|
||||
["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3801.6,1,31,1,463521,0,0,198,3],
|
||||
["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3801.6,1,31,1,462835,0,0,197,3],
|
||||
["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,60,0,25,2767,0,7,1],
|
||||
["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,55,0,9,3172,480,9,1],
|
||||
["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6287.75,1,32,0,318017,2551,0,90,3],
|
||||
["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3175.48,1,16,6,209954,2551,646,71,4],
|
||||
["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2436.5,1,20,0,1410660,6075,1629,347,6],
|
||||
["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2088.9,1,22,0,0,3550,4783,57,1],
|
||||
["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,25,0,77225,1525,0,137,4],
|
||||
["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,57,0,9,3172,480,9,1],
|
||||
["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6287.75,1,32,0,315064,2551,0,89,3],
|
||||
["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3175.48,1,16,7,206450,2551,646,71,4],
|
||||
["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2436.5,1,20,1,1392349,6026,1618,341,6],
|
||||
["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2088.9,1,22,0,0,3550,4850,56,1],
|
||||
["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,25,0,76316,1525,0,135,4],
|
||||
["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,59,0,103614,1541,0,19,2],
|
||||
["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,18,0,0,2296,29631,59,2],
|
||||
["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,18,0,0,2296,32939,56,2],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null],
|
||||
["-","~4","device","trap_1105_accrate",null,null,100,1,4,0,0,0,0,0,null],
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,1586.2,1,24,0,43967,0,0,87,1],
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,1586.2,1,24,0,43364,0,0,86,1],
|
||||
["p2","~1","token","token_10019_nearl2_sword",null,null,8280,0,41,0,9679,0,0,0,null],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,1989.96,0,42,0,3,0,0,3,null],
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,49,0,0,0,0,0,null],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,1586.2,0,50,0,4,0,0,4,null],
|
||||
["p2","~2","token","token_10019_nearl2_sword",null,null,6600,0,51,0,9679,0,0,0,null],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,1989.96,0,54,0,0,0,0,0,null],
|
||||
["p1","~1","token","token_10040_siege2_vlion",null,null,3039.44,0,56,0,4,2481,0,4,null],
|
||||
["p1","~2","token","token_10040_siege2_vlion",null,null,5520,0,57,0,1,0,0,1,null],
|
||||
["p1","~1","token","token_10040_siege2_vlion",null,null,4834.05,0,54,0,6,686,0,6,null],
|
||||
["p1","~2","token","token_10040_siege2_vlion",null,null,5520,0,55,1,1,0,0,1,null],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,1989.96,0,56,0,0,0,0,0,null],
|
||||
["p2","~3","token","token_10019_nearl2_sword",null,null,6600,0,61,0,9679,0,0,0,null],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,64,0,0,0,0,0,null],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,63,0,0,0,0,0,null],
|
||||
["p1","~5","token","token_10030_mlyss_wtrman",null,null,1586.2,0,65,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {
|
||||
@@ -315,21 +316,20 @@
|
||||
"enemy_1198_msfshu_2": [6,6,0,0,102],
|
||||
"enemy_1209_sfden_2": [2,2,0,0,154793],
|
||||
"enemy_1210_msfden_2": [2,2,0,0,386],
|
||||
"enemy_9021_acduml": [1,1,0,1286,4000000],
|
||||
"enemy_9023_acdums": [9,7,0,53675,348]
|
||||
"enemy_9021_acduml": [1,1,0,0,4000000],
|
||||
"enemy_9023_acdums": [9,7,0,51573,343]
|
||||
},
|
||||
"hooks": [1,66,5803,1515,1515,4109,4992,3727,27,41,66,60,358,42326,2036,3,22,0,1,27,0,12,0],
|
||||
"events": {"atk":1784,"deploy":40,"die":41,"dmg":4700,"engage":20,"fx":1252,"heal":433,"skill":126,"spawn":59,"status":886},
|
||||
"hooks": [1,66,5740,1515,1515,4047,4898,2384,27,41,64,59,352,41270,2004,3,22,0,1,26,0,9,0],
|
||||
"events": {"atk":1799,"deploy":40,"die":41,"dmg":4608,"engage":20,"fx":1249,"heal":429,"skill":123,"spawn":59,"status":880},
|
||||
"fx": {
|
||||
"airstrike": 128,
|
||||
"airstrike": 131,
|
||||
"appear": 2,
|
||||
"beam": 11,
|
||||
"blessing": 1,
|
||||
"blink": 2,
|
||||
"bombard": 68,
|
||||
"bombard": 69,
|
||||
"bombardShell": 69,
|
||||
"buff": 3,
|
||||
"burst": 12,
|
||||
"burst": 9,
|
||||
"copy": 1,
|
||||
"disappear": 2,
|
||||
"displace": 1,
|
||||
@@ -337,19 +337,19 @@
|
||||
"drone": 208,
|
||||
"droneLock": 18,
|
||||
"drones": 2,
|
||||
"explode": 455,
|
||||
"explode": 446,
|
||||
"finale": 1,
|
||||
"firewall": 1,
|
||||
"garrisonGrant": 1,
|
||||
"lightning": 32,
|
||||
"lightning": 41,
|
||||
"link": 7,
|
||||
"lock": 69,
|
||||
"lure": 3,
|
||||
"phase": 43,
|
||||
"radiantSword": 3,
|
||||
"scorchBurst": 5,
|
||||
"scorchBurst": 1,
|
||||
"slash": 11,
|
||||
"snow": 45,
|
||||
"snow": 46,
|
||||
"split": 4,
|
||||
"steal": 6,
|
||||
"storm": 3,
|
||||
@@ -360,7 +360,7 @@
|
||||
"tide": 3,
|
||||
"wanted": 1
|
||||
},
|
||||
"snaps": "8c6eb9d3 796da093 9e3c16b7 fa7000d5 b0ba5df0 c13bfdd0 b5a04ea3 1a096951 99f7023b ee7eca69 27c012ea 189a5d94 675b6a80 c16a2d26 fb45381b dc80cb4d 62258e5c f5fd826c 841da98a c3777617"
|
||||
"snaps": "8c6eb9d3 796da093 9e3c16b7 fa7000d5 926c8ad7 67aaf44d 103ae7ee 039c0ebf 643fb2b7 a0782c00 fecc7c1b cb345ec9 91041fc2 a804912d eb1541bb 9a8fa181 5b07d6da 6e725bcd 0274cab6 809f5b01"
|
||||
},
|
||||
"boss-boss_3-solo": {
|
||||
"about": "假想敌:管 solo pool 2000000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
|
||||
@@ -425,81 +425,81 @@
|
||||
"time": 200,
|
||||
"ticks": 6000,
|
||||
"reason": "forced",
|
||||
"killed": 14,
|
||||
"killed": 11,
|
||||
"total": 14,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 7089603,
|
||||
"rngDraws": 790,
|
||||
"bossHpLeft": 7442429,
|
||||
"rngDraws": 603,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":14,"total":14,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1232553,"bossDmg":447559,"heal":40856,"deaths":14,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1161150,"bossDmg":862838,"heal":21008,"deaths":14,"layerGains":{}}
|
||||
"p1": {"killed":11,"total":14,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":965296,"bossDmg":315248,"heal":24127,"deaths":18,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":976369,"bossDmg":642323,"heal":8096,"deaths":19,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,54,0,155980,8234,420,28,2],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",1373.6,1,60,2,14823,8720,1235,14,1],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",0,0,49,0,52926,18466,3851,26,12],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",1187.98,1,52,0,28347,13246,275,19,2],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",911.19,1,55,2,447919,3364,765,111,19],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",298.05,1,61,2,96428,10974,3306,39,4],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1227.14,1,19,1,132749,4452,2194,209,6],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1176.62,1,57,6,174306,2559,513,45,19],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,50,0,0,4335,26103,44,3],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1293.14,1,15,0,129076,4452,2194,71,3],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2307.16,1,62,0,0,7381,302,0,1],
|
||||
["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",283.08,1,26,0,286831,5830,2567,256,8],
|
||||
["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",1851.09,1,56,0,25219,5698,400,31,7],
|
||||
["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,53,0,105158,8945,1417,187,5],
|
||||
["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2495.49,1,59,0,245655,5833,2774,55,5],
|
||||
["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,51,0,203707,3584,462,170,3],
|
||||
["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1613.93,1,14,0,0,4452,3653,0,0],
|
||||
["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,20,0,75126,9265,7033,87,5],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,4,1,66605,3677,1688,66,19],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1224.14,1,58,0,152849,2741,713,72,13],
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",1529.8,1,61,4,131692,6704,420,24,1],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3310.19,1,60,0,17700,8610,1117,15,2],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",0,0,49,0,44334,11949,2625,19,9],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,59,0,16983,9696,260,10,1],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,55,4,362158,4171,661,91,13],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,57,1,79306,9954,1941,30,4],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,0,109465,4097,2126,150,4],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1058.29,1,64,1,97795,2559,395,36,12],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,52,0,0,3684,12457,28,2],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,68,0,105862,4163,2126,50,2],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2188.83,1,66,0,377,7381,183,1,1],
|
||||
["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",1498.75,1,56,0,184372,6810,464,178,8],
|
||||
["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",1732.75,1,63,0,29484,5698,282,37,9],
|
||||
["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,58,0,105272,10473,1325,156,6],
|
||||
["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,53,0,214160,6276,721,42,4],
|
||||
["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,54,0,149179,3584,462,129,2],
|
||||
["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,3064,652,0,0],
|
||||
["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1838.43,1,67,0,64191,5913,3287,74,5],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1501.32,1,62,1,69313,2825,348,69,20],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1105.8,1,65,0,160021,2518,372,71,13],
|
||||
["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null],
|
||||
["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {"enemy_1010_demon":[4,4,0,2399,200612],"enemy_1438_dspred":[10,10,0,18904,882694],"enemy_1521_dslily":[1,0,0,107103,1310397]},
|
||||
"hooks": [1,60,6000,1412,1519,3473,3619,11042,42,44,137,135,14,39147,1338,16,15,0,1,42,0,41,1],
|
||||
"events": {"atk":1655,"deploy":45,"die":44,"dmg":3602,"engage":17,"fx":970,"heal":108,"skill":272,"spawn":37,"status":1032},
|
||||
"enemies": {"enemy_1010_demon":[4,4,0,2399,200612],"enemy_1438_dspred":[10,7,3,20089,783482],"enemy_1521_dslily":[1,0,0,91219,957571]},
|
||||
"hooks": [1,66,6000,1142,1221,2845,2969,7176,48,53,118,115,15,33079,1090,15,15,3,1,51,0,28,1],
|
||||
"events": {"atk":1370,"deploy":51,"die":50,"dmg":2956,"engage":18,"fx":751,"heal":83,"leak":3,"skill":233,"spawn":37,"status":933},
|
||||
"fx": {
|
||||
"aoe": 35,
|
||||
"appear": 5,
|
||||
"aoe": 24,
|
||||
"appear": 9,
|
||||
"blink": 2,
|
||||
"burst": 41,
|
||||
"charge": 7,
|
||||
"counter": 14,
|
||||
"crit": 87,
|
||||
"dilemma": 5,
|
||||
"disappear": 5,
|
||||
"displace": 31,
|
||||
"burst": 28,
|
||||
"charge": 9,
|
||||
"counter": 15,
|
||||
"crit": 62,
|
||||
"dilemma": 4,
|
||||
"disappear": 9,
|
||||
"displace": 28,
|
||||
"dodge": 1,
|
||||
"explosion": 13,
|
||||
"frostNova": 19,
|
||||
"frostNova": 20,
|
||||
"grow": 1,
|
||||
"iceSpike": 163,
|
||||
"iceSpike": 119,
|
||||
"overclock": 1,
|
||||
"pull": 5,
|
||||
"quadShot": 3,
|
||||
"ripple": 23,
|
||||
"rockfall": 18,
|
||||
"sentry": 1,
|
||||
"sermon": 1,
|
||||
"shadowWeave": 1,
|
||||
"shield": 4,
|
||||
"soul": 6,
|
||||
"sp": 18,
|
||||
"pull": 4,
|
||||
"quadShot": 2,
|
||||
"ripple": 14,
|
||||
"rockfall": 17,
|
||||
"sentry": 3,
|
||||
"sermon": 2,
|
||||
"shadowWeave": 4,
|
||||
"shield": 5,
|
||||
"soul": 4,
|
||||
"sp": 6,
|
||||
"stealth": 8,
|
||||
"swordRain": 31,
|
||||
"swordStorm": 5,
|
||||
"swordRain": 35,
|
||||
"swordStorm": 6,
|
||||
"tentacle": 6,
|
||||
"tide": 5,
|
||||
"tornado": 5,
|
||||
"tornadoPulse": 25,
|
||||
"tornadoPulse": 20,
|
||||
"weightless": 4,
|
||||
"zone": 371
|
||||
"zone": 256
|
||||
},
|
||||
"snaps": "c2a7999d 8a4c19ba a9160fe3 d39e3b10 d5866259 fc603481 26c069da 85780057 16e37456 679dc6cc 77114310 92b28c26 ac45852c 83b4f7a0 bb89c9c7 b1813bcb 8e3bcb45 ff125e0a 8d10ee54 5933334e"
|
||||
"snaps": "c2a7999d e9680942 e3840c7b c97157bb 354f818f 3033850d 40141175 5bb20676 7decc120 5f1771eb 27360f23 279c31ce f92ff344 600f9424 a1bc5b00 660e7954 a15ab6cb bc529b51 2952b6f1 8bf7f205"
|
||||
},
|
||||
"boss-boss_4-solo": {
|
||||
"about": "盐风主教昆图斯 solo pool 4200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b",
|
||||
@@ -549,100 +549,101 @@
|
||||
"round": 14,
|
||||
"seed": 2302764647,
|
||||
"waveId": "act2autochess_h07_05",
|
||||
"time": 128.53,
|
||||
"ticks": 3856,
|
||||
"time": 133.67,
|
||||
"ticks": 4010,
|
||||
"reason": "cleared",
|
||||
"killed": 18,
|
||||
"killed": 21,
|
||||
"total": 8,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 0,
|
||||
"rngDraws": 1055,
|
||||
"rngDraws": 1068,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":18,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1203964,"bossDmg":884209,"heal":18083,"deaths":2,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1184403,"bossDmg":675791,"heal":65228,"deaths":1,"layerGains":{}}
|
||||
"p1": {"killed":21,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1395002,"bossDmg":992386,"heal":27672,"deaths":0,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1093758,"bossDmg":567614,"heal":66447,"deaths":1,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",8066,1,7,0,24421,1782,7413,9,2],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",0,0,12,0,34939,4696,0,8,1],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3914.04,1,14,0,70411,3401,423,29,2],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2028.6,1,1,1,563579,2298,1308,41,3],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2667.54,1,16,1,58403,887,0,15,2],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",2205.24,1,3,0,14550,8476,757,0,3],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1989.96,1,18,1,160434,2156,453,9,6],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",2301.84,1,5,0,91022,3776,6991,55,2],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1824.36,1,20,3,123974,4575,548,20,20],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",0,0,9,0,35679,2432,47,45,2],
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",8066,1,7,0,83881,6608,12367,25,2],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",4055.82,1,12,1,89789,2931,42,21,2],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",4279.38,1,14,0,93051,8699,19,39,2],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2028.6,1,1,6,488163,2222,958,42,4],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2667.54,1,16,1,105530,1370,0,25,2],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",2205.24,1,3,0,19226,8775,554,0,3],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1989.96,1,18,2,217799,4129,453,21,7],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",2301.84,1,5,0,69010,3091,11264,39,2],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1824.36,1,20,2,130257,4575,548,22,22],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2612.34,1,9,0,75493,4481,460,93,3],
|
||||
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,22,0,0,0,0,0,null],
|
||||
["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,10,0,17904,1810,142,31,1],
|
||||
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4677.12,1,60,4,367230,8033,0,114,5],
|
||||
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",3818.46,1,13,2,155798,9830,0,34,4],
|
||||
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",462.64,1,15,0,19207,3617,1020,17,1],
|
||||
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",7293.79,1,56,4,211027,13812,0,61,3],
|
||||
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",6148.88,1,2,2,251161,2788,2336,27,2],
|
||||
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",4486.14,1,17,0,55123,7766,2955,8,1],
|
||||
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2620.62,1,4,0,0,2998,16967,29,1],
|
||||
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1985.82,1,19,0,21440,1047,0,29,3],
|
||||
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",2126.58,1,63,1,80761,1541,0,11,2],
|
||||
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",2085.18,1,21,0,0,5444,41951,33,2],
|
||||
["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,10,0,12026,1668,0,21,1],
|
||||
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4677.12,1,69,5,337357,8718,0,94,7],
|
||||
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",3818.46,1,13,0,138400,4725,0,30,3],
|
||||
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",836.8,1,15,0,33928,3917,1672,28,1],
|
||||
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6547.48,1,67,2,194567,12526,0,53,3],
|
||||
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",6148.88,1,2,3,183358,2788,2379,25,2],
|
||||
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",4561.13,1,17,0,74662,7836,3907,8,1],
|
||||
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2620.62,1,4,0,0,2298,9840,19,1],
|
||||
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1985.82,1,19,0,26615,1236,0,35,3],
|
||||
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",2126.58,1,66,0,88959,1541,0,12,2],
|
||||
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",2085.18,1,21,0,0,4690,48648,35,2],
|
||||
["p2","~1","token","token_10019_nearl2_sword",null,null,1907.57,0,32,0,8360,6372,0,11,null],
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,2301.84,0,36,0,4615,0,0,11,null],
|
||||
["p1","~1","token","token_10040_siege2_vlion",null,null,1434.97,0,39,0,3325,3275,0,8,null],
|
||||
["p2","~2","token","token_10019_nearl2_sword",null,null,6171.28,0,46,0,7553,429,0,0,null],
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,48,0,0,0,0,0,null],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,53,0,707,1668,0,2,null],
|
||||
["p2","~3","token","token_10019_nearl2_sword",null,null,7526.44,1,58,0,6744,754,0,0,null],
|
||||
["p1","~2","token","token_10040_siege2_vlion",null,null,4822.74,1,62,0,0,697,0,0,null]
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,2301.84,0,36,0,5082,0,0,11,null],
|
||||
["p1","~1","token","token_10040_siege2_vlion",null,null,2760.11,0,39,0,0,1446,0,0,null],
|
||||
["p2","~2","token","token_10019_nearl2_sword",null,null,6171.28,0,47,0,7553,429,0,0,null],
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,49,0,0,0,0,0,null],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,1820.54,1,57,0,4744,1079,1008,8,1],
|
||||
["p2","~3","token","token_10019_nearl2_sword",null,null,7543.59,0,61,0,0,736,0,0,null],
|
||||
["p1","~2","token","token_10040_siege2_vlion",null,null,3148,1,63,0,950,2372,0,2,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_1010_demon_2": [2,2,0,1410,128995],
|
||||
"enemy_2009_csaudc": [4,4,0,1342,137594],
|
||||
"enemy_2010_csdcr": [2,2,0,2735,103196],
|
||||
"enemy_2016_csphtm": [2,2,0,85016,1560000],
|
||||
"enemy_2017_csphts": [11,10,0,4530,458583]
|
||||
"enemy_2009_csaudc": [4,4,0,2459,137594],
|
||||
"enemy_2010_csdcr": [2,2,0,2819,103196],
|
||||
"enemy_2016_csphtm": [2,2,0,89739,1560000],
|
||||
"enemy_2017_csphts": [13,13,0,3912,558976]
|
||||
},
|
||||
"hooks": [1,61,3856,721,721,2033,2392,2545,25,40,68,57,43,28751,1223,39,21,0,1,23,0,16,87],
|
||||
"events": {"atk":916,"deploy":40,"die":40,"dmg":2192,"engage":22,"fx":594,"heal":389,"skill":125,"spawn":51,"status":599},
|
||||
"hooks": [1,67,4010,792,792,2078,2476,3029,25,45,76,63,55,30831,1272,36,23,0,1,25,0,18,82],
|
||||
"events": {"atk":994,"deploy":44,"die":45,"dmg":2280,"engage":22,"fx":647,"heal":431,"skill":139,"spawn":53,"status":611},
|
||||
"fx": {
|
||||
"airstrike": 12,
|
||||
"blink": 20,
|
||||
"bombard": 27,
|
||||
"bombardShell": 27,
|
||||
"burst": 16,
|
||||
"cleanse": 2,
|
||||
"copy": 1,
|
||||
"dodge": 87,
|
||||
"dp": 2,
|
||||
"drone": 115,
|
||||
"droneLock": 8,
|
||||
"airstrike": 19,
|
||||
"blink": 26,
|
||||
"bombard": 30,
|
||||
"bombardShell": 31,
|
||||
"burst": 18,
|
||||
"cleanse": 1,
|
||||
"copy": 2,
|
||||
"dodge": 82,
|
||||
"dp": 3,
|
||||
"drone": 126,
|
||||
"droneLock": 6,
|
||||
"drones": 2,
|
||||
"emergency": 1,
|
||||
"explode": 36,
|
||||
"extraAttack": 5,
|
||||
"finale": 4,
|
||||
"explode": 35,
|
||||
"extraAttack": 12,
|
||||
"finale": 3,
|
||||
"firewall": 2,
|
||||
"garrisonGrant": 1,
|
||||
"lightning": 71,
|
||||
"link": 3,
|
||||
"lock": 27,
|
||||
"lightning": 81,
|
||||
"link": 4,
|
||||
"lock": 36,
|
||||
"lure": 2,
|
||||
"palsy": 1,
|
||||
"radiantSword": 3,
|
||||
"scorchBurst": 2,
|
||||
"shield": 11,
|
||||
"slash": 37,
|
||||
"snow": 22,
|
||||
"split": 2,
|
||||
"shield": 10,
|
||||
"slash": 28,
|
||||
"snow": 27,
|
||||
"split": 1,
|
||||
"steal": 1,
|
||||
"storm": 6,
|
||||
"storm": 7,
|
||||
"strike": 3,
|
||||
"summon": 16,
|
||||
"sunBurst": 4,
|
||||
"summon": 18,
|
||||
"sunBurst": 6,
|
||||
"talent": 4,
|
||||
"telegraph": 2,
|
||||
"tide": 3,
|
||||
"wanted": 7
|
||||
"wanted": 8
|
||||
},
|
||||
"snaps": "7db84769 ccd2ecf5 49d646d8 1185f93a 64db5dca 1a9e67db 3a4e3045 5b3ba069 0dcc32cf 7d6016ed 4061bb14 3c99a82f a50f8c81"
|
||||
"snaps": "7db84769 b15c599d 8eb18e6b 43f9d7e1 fe726606 10bd666b a4556d8b f9f483be a0299991 c0d0b79c 1368de98 fd0c398e 99040fb8 01e6b701"
|
||||
},
|
||||
"boss-boss_5-solo": {
|
||||
"about": "卢西恩,“猩红血钻” solo pool 780000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
|
||||
@@ -1111,67 +1112,68 @@
|
||||
"killed": 8,
|
||||
"total": 8,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 3747749,
|
||||
"rngDraws": 1619,
|
||||
"bossHpLeft": 3630612,
|
||||
"rngDraws": 1662,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1664353,"bossDmg":722232,"heal":20932,"deaths":5,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3117516,"bossDmg":1090251,"heal":121649,"deaths":12,"layerGains":{}}
|
||||
"p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1794629,"bossDmg":784436,"heal":15524,"deaths":4,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3269574,"bossDmg":1142028,"heal":135845,"deaths":10,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",5902.25,1,15,0,2317,10287,12324,32,3],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2893.32,1,11,0,20047,281,0,22,1],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",1834.75,1,17,0,42326,1612,0,24,2],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",430.19,1,7,1,1229734,2143,0,58,8],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1329.31,1,9,0,34472,14154,0,46,2],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",0,0,66,0,35830,9923,233,0,3],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2451.4,1,13,0,69036,0,0,0,11],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,19,0,26444,0,7415,77,2],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",0,0,21,1,174620,13925,0,30,30],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,60,0,22306,9359,349,73,2],
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",2601.77,1,66,0,0,11336,7438,0,2],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,11,0,25365,227,0,37,1],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",2535.79,1,17,0,53146,4017,0,51,2],
|
||||
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",204.28,1,7,1,1342715,2333,0,58,8],
|
||||
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,9,0,33316,9693,0,46,2],
|
||||
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",954.58,1,55,0,35830,12093,529,0,4],
|
||||
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2451.4,1,13,1,69554,0,0,0,11],
|
||||
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,19,0,25534,0,6790,69,2],
|
||||
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",0,0,21,1,149440,13231,0,27,27],
|
||||
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,60,0,52895,9393,349,86,3],
|
||||
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,28,0,0,0,0,0,null],
|
||||
["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,24,0,0,1640,318,4,1],
|
||||
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",2052.07,1,68,4,561677,30058,0,292,3],
|
||||
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",0,0,59,0,341242,18065,0,56,4],
|
||||
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,65,0,3198,6795,1515,24,1],
|
||||
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",0,0,55,1,514814,17168,0,62,3],
|
||||
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",942.17,1,8,0,674333,8720,0,73,3],
|
||||
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",0,0,14,0,769354,8634,2644,263,5],
|
||||
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",3038.4,1,20,0,0,0,15762,80,1],
|
||||
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",0,0,10,0,97174,1439,0,119,3],
|
||||
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",0,0,62,0,132239,19665,0,24,3],
|
||||
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1183.78,1,25,0,0,15377,101728,82,2],
|
||||
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",2934.34,1,68,4,710575,23146,0,309,3],
|
||||
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",0,0,59,0,232725,17856,0,43,4],
|
||||
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,65,0,10825,7320,2355,28,2],
|
||||
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",0,0,58,1,487339,27040,0,77,3],
|
||||
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",154.97,1,8,0,687440,9532,0,73,3],
|
||||
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",0,0,14,0,764724,13832,5897,258,5],
|
||||
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1662.91,1,20,0,0,1375,16017,80,1],
|
||||
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",0,0,10,0,95777,1439,0,122,3],
|
||||
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1665.1,1,41,0,217005,24166,0,59,4],
|
||||
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1592.1,1,25,0,0,15377,111577,83,2],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null],
|
||||
["-","~4","device","trap_1105_accrate",null,null,100,1,4,0,0,0,0,0,null],
|
||||
["-","~5","device","trap_1105_accrate",null,null,100,1,5,0,0,0,0,0,null],
|
||||
["-","~6","device","trap_1105_accrate",null,null,100,1,6,0,0,0,0,0,null],
|
||||
["p2","~1","token","token_10019_nearl2_sword",null,null,2916.93,0,47,0,6778,5363,0,21,null],
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,48,1,1801,1538,0,22,1],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,49,0,207,3142,0,9,null],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,0,0,50,0,463,1322,0,7,null],
|
||||
["p2","~1","token","token_10019_nearl2_sword",null,null,2330.77,0,47,0,6777,5949,0,20,null],
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,48,0,1485,1538,0,22,1],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,49,0,152,3142,0,9,null],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,0,0,50,0,447,1322,0,7,null],
|
||||
["p1","~1","token","token_10040_siege2_vlion",null,null,3730,0,52,0,4750,270,0,10,null],
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,138,0,57,0,0,0,0,0,null],
|
||||
["p2","~2","token","token_10019_nearl2_sword",null,null,6950.53,0,58,0,0,963,0,0,null],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,1322,1,61,0,0,385,293,0,1],
|
||||
["p1","~2","token","token_10040_siege2_vlion",null,null,3897.9,0,63,0,0,137,0,0,null],
|
||||
["p2","~3","token","token_10019_nearl2_sword",null,null,133.02,0,64,0,16707,6165,0,9,null],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,67,0,0,0,0,0,null]
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,138,0,56,0,0,0,0,0,null],
|
||||
["p2","~2","token","token_10019_nearl2_sword",null,null,0,0,57,0,22974,6599,0,0,null],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,1322,1,61,0,0,155,99,0,1],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,62,0,0,0,0,0,null],
|
||||
["p1","~2","token","token_10040_siege2_vlion",null,null,4000,0,63,0,0,0,0,0,null],
|
||||
["p2","~3","token","token_10019_nearl2_sword",null,null,0,0,64,0,33414,6564,0,17,null],
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,1,67,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_1267_nhpbr_2": [6,6,0,1400,141894],
|
||||
"enemy_9007_acelem": [2,2,0,17143,309587],
|
||||
"enemy_9017_achunt_2": [2,0,0,58691,1852251],
|
||||
"enemy_9018_actrpa": [1,0,0,44364,722451],
|
||||
"enemy_9019_actrpb": [1,0,0,28255,660498],
|
||||
"enemy_9020_actrpc": [1,0,0,23012,1168947]
|
||||
"enemy_1267_nhpbr_2": [6,6,0,1500,141894],
|
||||
"enemy_9007_acelem": [2,2,0,18532,309587],
|
||||
"enemy_9017_achunt_2": [2,0,0,59249,1969388],
|
||||
"enemy_9018_actrpa": [1,0,0,55276,817281],
|
||||
"enemy_9019_actrpb": [1,0,0,32171,721099],
|
||||
"enemy_9020_actrpc": [1,0,0,23279,1188232]
|
||||
},
|
||||
"hooks": [1,66,6000,1682,1682,6586,12669,2825,29,42,95,91,286,44763,2551,19,13,0,1,30,0,16,0],
|
||||
"events": {"atk":2097,"deploy":47,"die":42,"dmg":12154,"engage":23,"fx":2024,"heal":885,"skill":186,"spawn":52,"status":769},
|
||||
"hooks": [1,66,6000,1758,1758,7275,13707,2687,28,39,95,89,290,48364,2980,15,13,0,1,36,0,16,0],
|
||||
"events": {"atk":2126,"deploy":47,"die":39,"dmg":13183,"engage":22,"fx":2170,"heal":969,"skill":184,"spawn":53,"status":815},
|
||||
"fx": {
|
||||
"airstrike": 88,
|
||||
"beam": 27,
|
||||
"airstrike": 90,
|
||||
"beam": 30,
|
||||
"blessing": 1,
|
||||
"blink": 5,
|
||||
"bombard": 72,
|
||||
@@ -1180,37 +1182,38 @@
|
||||
"camouflage": 1,
|
||||
"copy": 3,
|
||||
"dash": 24,
|
||||
"displace": 20,
|
||||
"dp": 2,
|
||||
"drone": 190,
|
||||
"droneLock": 9,
|
||||
"drones": 3,
|
||||
"displace": 14,
|
||||
"dp": 3,
|
||||
"drone": 320,
|
||||
"droneLock": 14,
|
||||
"drones": 4,
|
||||
"extraAttack": 7,
|
||||
"finale": 4,
|
||||
"firewall": 3,
|
||||
"firewall": 2,
|
||||
"garrisonGrant": 1,
|
||||
"lightning": 117,
|
||||
"lightning": 124,
|
||||
"link": 1141,
|
||||
"lock": 72,
|
||||
"lure": 2,
|
||||
"phase": 11,
|
||||
"phase": 12,
|
||||
"radiantSword": 3,
|
||||
"revive": 3,
|
||||
"scorchBurst": 1,
|
||||
"shieldBreak": 9,
|
||||
"shieldBreak": 10,
|
||||
"slash": 44,
|
||||
"snow": 26,
|
||||
"snow": 27,
|
||||
"split": 2,
|
||||
"steal": 5,
|
||||
"storm": 11,
|
||||
"summon": 5,
|
||||
"sunBurst": 3,
|
||||
"talent": 6,
|
||||
"tide": 3,
|
||||
"talent": 5,
|
||||
"tide": 4,
|
||||
"undying": 1,
|
||||
"wanted": 6,
|
||||
"zone": 6
|
||||
},
|
||||
"snaps": "2a921421 57801ce9 151fd5ae 991b7440 79722413 1faab651 85db54ec 88d6f82e 6d938e5f fc881a30 9c294f55 4373e468 af475c5f df3e9b70 b0474d4c 538602b8 4e66de79 e70dcab9 481e5d84 e8e351b1"
|
||||
"snaps": "2a921421 57801ce9 e8f35705 fba04fd7 d2a6440c a3b24855 aaf86c72 6f6a7236 9ab1a1c0 cc7ebf44 74e3130d 4886a375 96efb424 6885b63d 54551891 71bfe69c 67cfb8f5 a4f55f17 8e12a9a1 ca3b950e"
|
||||
},
|
||||
"hidden-boss_9-solo": {
|
||||
"about": "假想敌:铳 solo pool 2800000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
|
||||
|
||||
+21
-21
@@ -600,7 +600,7 @@
|
||||
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
|
||||
"trophies": 4,
|
||||
"reward": 400,
|
||||
"stats": {"activatedLayers":250,"bossDamage":524924,"dmgDealt":3182383,"gold":139,"itemsEquipped":12,"kills":336,"leaks":7,"lpLost":7,"merges":5,"perfectRounds":12,"refreshes":23},
|
||||
"stats": {"activatedLayers":250,"bossDamage":511134,"dmgDealt":3170636,"gold":139,"itemsEquipped":12,"kills":335,"leaks":7,"lpLost":7,"merges":5,"perfectRounds":12,"refreshes":23},
|
||||
"lineup": ["3_19_b@11,7[2_04_e_b]","5_12_a@11,8","4_10_a@10,5[1_02_e_b+2_01_e_a]","6_06_a@9,4","1_08_b@9,5","6_16_a@9,7","5_20_a@9,8[3_05_e_a+3_02_e_b]","3_13_b@9,9"],
|
||||
"bonds": ["arcaneShip 2/86","miraShip 1/12","preciShip 0/10","sargonShip 0/10","siracusaShip 1/110","skillfulShip 1/36","soloShip 1/6","suntShip 1/0","swiftShip 0/32"]
|
||||
},
|
||||
@@ -614,7 +614,7 @@
|
||||
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
|
||||
"trophies": 4,
|
||||
"reward": 400,
|
||||
"stats": {"activatedLayers":199,"bossDamage":892576,"dmgDealt":3768838,"gold":137,"itemsEquipped":18,"kills":323,"leaks":6,"lpLost":4,"merges":5,"perfectRounds":11,"refreshes":13},
|
||||
"stats": {"activatedLayers":199,"bossDamage":906366,"dmgDealt":3780569,"gold":137,"itemsEquipped":18,"kills":323,"leaks":6,"lpLost":4,"merges":5,"perfectRounds":11,"refreshes":13},
|
||||
"lineup": ["4_20_a@12,8[3_06_e_a]","1_17_b@11,7[3_08_e_a]","4_02_b@11,8[3_02_e_a+4_03_e_b]","4_01_b@10,7[4_04_e_a+1_02_e_a]","6_17_a@10,8[4_06_e_a+4_08_e_a]","6_19_a@9,4[1_05_e_a+1_01_e_a]","4_14_a@9,8","5_07_a@9,9"],
|
||||
"bonds": ["arcaneShip 2/34","kazimierzShip 1/38","kjeragShip 0/8","lateranoShip 0/8","preciShip 2/55","raidShip 1/0","sargonShip 0/10","suntShip 1/0","swiftShip 1/72"]
|
||||
}
|
||||
@@ -1107,28 +1107,28 @@
|
||||
},
|
||||
{
|
||||
"round": 10,
|
||||
"ai_0": [1,21,13,0,2,5,8,"a8c1652a",208,"arcaneShip 2/16, deputShip 0/2, indomShip 1/22, kazimierzShip 1/50, kjeragShip 0/5, preciShip 2/80, suntShip 1/2, swiftShip 1/38",13,25,12,86],
|
||||
"ai_0": [1,21,13,0,2,5,8,"a8c1652a",199,"arcaneShip 2/16, deputShip 0/2, indomShip 1/22, kazimierzShip 1/45, kjeragShip 0/5, preciShip 2/76, suntShip 1/2, swiftShip 1/38",13,25,12,86],
|
||||
"ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60],
|
||||
"ai_2": [1,13,13,0,2,5,8,"b6041c07",181,"arcaneShip 2/27, deputShip 1/26, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/10, soloShip 1/24, steadShip 1/68, swiftShip 0/21, victoriaShip 1/26, yanShip 0/2",25,25,0,88],
|
||||
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63]
|
||||
},
|
||||
{
|
||||
"round": 11,
|
||||
"ai_0": [1,11,14,0,3,5,8,"7de6a28e",274,"arcaneShip 2/22, deputShip 0/2, indomShip 0/22, kazimierzShip 1/81, kjeragShip 0/16, preciShip 2/98, suntShip 1/2, swiftShip 1/71",10,25,15,101],
|
||||
"ai_0": [1,11,14,0,3,5,8,"7de6a28e",265,"arcaneShip 2/22, deputShip 0/2, indomShip 0/22, kazimierzShip 1/76, kjeragShip 0/16, preciShip 2/94, suntShip 1/2, swiftShip 1/71",9,25,16,101],
|
||||
"ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60],
|
||||
"ai_2": [1,7,14,0,1,5,8,"e9b19bda",237,"arcaneShip 1/37, deputShip 2/32, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/16, soloShip 1/30, steadShip 1/82, suntShip 1/4, swiftShip 0/21, victoriaShip 1/36, yanShip 0/4",19,25,6,102],
|
||||
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63]
|
||||
},
|
||||
{
|
||||
"round": 12,
|
||||
"ai_0": [1,1,15,0,0,6,8,"2ed340cf",320,"arcaneShip 2/22, deputShip 0/2, indomShip 0/22, kazimierzShip 1/99, kjeragShip 0/16, preciShip 2/111, suntShip 1/2, swiftShip 1/86",8,47,39,115],
|
||||
"ai_0": [1,1,15,0,0,6,8,"2ed340cf",311,"arcaneShip 2/22, deputShip 0/2, indomShip 0/22, kazimierzShip 1/94, kjeragShip 0/16, preciShip 2/107, suntShip 1/2, swiftShip 1/86",8,47,39,115],
|
||||
"ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60],
|
||||
"ai_2": [0,0,13,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/36, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/34, steadShip 0/98, suntShip 0/6, swiftShip 0/21, victoriaShip 0/42, yanShip 0/6",20,47,27,114],
|
||||
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63]
|
||||
},
|
||||
{
|
||||
"round": 13,
|
||||
"ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/2, indomShip 0/22, kazimierzShip 0/114, kjeragShip 0/19, preciShip 0/125, suntShip 0/2, swiftShip 0/107",11,39,28,126],
|
||||
"ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/2, indomShip 0/22, kazimierzShip 0/109, kjeragShip 0/19, preciShip 0/121, suntShip 0/2, swiftShip 0/107",11,39,28,126],
|
||||
"ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60],
|
||||
"ai_2": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/36, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/34, steadShip 0/98, suntShip 0/6, swiftShip 0/21, victoriaShip 0/42, yanShip 0/6",null,null,null,114],
|
||||
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63]
|
||||
@@ -1145,9 +1145,9 @@
|
||||
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
|
||||
"trophies": 3,
|
||||
"reward": 298,
|
||||
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3420814,"gold":126,"itemsEquipped":13,"kills":113,"leaks":135,"lpLost":54,"merges":3,"perfectRounds":5,"refreshes":15},
|
||||
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3412269,"gold":126,"itemsEquipped":13,"kills":112,"leaks":136,"lpLost":54,"merges":3,"perfectRounds":5,"refreshes":15},
|
||||
"lineup": [],
|
||||
"bonds": ["arcaneShip 0/32","deputShip 0/2","indomShip 0/22","kazimierzShip 0/114","kjeragShip 0/19","preciShip 0/125","suntShip 0/2","swiftShip 0/107"]
|
||||
"bonds": ["arcaneShip 0/32","deputShip 0/2","indomShip 0/22","kazimierzShip 0/109","kjeragShip 0/19","preciShip 0/121","suntShip 0/2","swiftShip 0/107"]
|
||||
},
|
||||
"ai_1": {
|
||||
"alive": false,
|
||||
@@ -1265,12 +1265,12 @@
|
||||
{
|
||||
"round": 12,
|
||||
"ai_0": [1,19,12,0,0,6,8,"9673c983",228,"arcaneShip 1/39, deputShip 1/14, emptyShip 1/8, indomShip 0/8, kjeragShip 0/2, preciShip 1/41, siracusaShip 1/73, soloShip 1/25, steadShip 0/2, suntShip 1/8, swiftShip 1/20, victoriaShip 0/8, visiShip 0/8",36,46,10,118],
|
||||
"ai_1": [1,23,12,0,2,5,8,"7af40c48",229,"arcaneShip 1/30, indomShip 0/8, kjeragShip 0/13, miraShip 1/8, preciShip 1/9, siracusaShip 2/176, soloShip 1/0, steadShip 0/8, swiftShip 1/6, victoriaShip 0/8, visiShip 0/8",46,46,0,112]
|
||||
"ai_1": [1,23,12,0,2,5,8,"7af40c48",221,"arcaneShip 1/30, indomShip 0/8, kjeragShip 0/13, miraShip 1/8, preciShip 1/9, siracusaShip 2/168, soloShip 1/0, steadShip 0/8, swiftShip 1/6, victoriaShip 0/8, visiShip 0/8",46,46,0,112]
|
||||
},
|
||||
{
|
||||
"round": 13,
|
||||
"ai_0": [1,19,12,0,0,6,8,"6b48239d",268,"arcaneShip 1/47, deputShip 1/16, emptyShip 1/10, indomShip 0/8, kjeragShip 0/2, preciShip 1/48, siracusaShip 1/83, soloShip 1/27, steadShip 0/2, suntShip 1/10, swiftShip 1/27, victoriaShip 0/8, visiShip 0/8",28,39,11,128],
|
||||
"ai_1": [1,23,14,0,0,6,8,"03a221b4",274,"arcaneShip 1/32, indomShip 0/8, kjeragShip 0/13, miraShip 1/11, preciShip 1/9, siracusaShip 2/216, soloShip 1/0, steadShip 0/8, swiftShip 1/6, victoriaShip 0/8, visiShip 0/8",39,39,0,126]
|
||||
"ai_1": [1,23,14,0,0,6,8,"03a221b4",270,"arcaneShip 1/32, indomShip 0/8, kjeragShip 0/13, miraShip 1/11, preciShip 1/9, siracusaShip 2/212, soloShip 1/0, steadShip 0/8, swiftShip 1/6, victoriaShip 0/8, visiShip 0/8",39,39,0,126]
|
||||
}
|
||||
],
|
||||
"players": {
|
||||
@@ -1284,7 +1284,7 @@
|
||||
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
|
||||
"trophies": 4,
|
||||
"reward": 400,
|
||||
"stats": {"activatedLayers":312,"bossDamage":209415,"dmgDealt":3316971,"gold":143,"itemsEquipped":17,"kills":257,"leaks":34,"lpLost":11,"merges":3,"perfectRounds":8,"refreshes":26},
|
||||
"stats": {"activatedLayers":312,"bossDamage":190349,"dmgDealt":3265362,"gold":143,"itemsEquipped":17,"kills":253,"leaks":34,"lpLost":11,"merges":3,"perfectRounds":8,"refreshes":26},
|
||||
"lineup": ["2_14_a@12,3","5_10_a@11,3[1_01_e_a+4_08_e_a]","1_17_a@11,6[1_02_e_a+1_05_e_a]","1_06_b@11,7","4_14_a@10,3[4_06_e_a+4_02_e_a]","4_10_a@10,7[3_11_e_a+6_01_e_a]","1_08_b@10,8[5_02_e_a+4_03_e_b]","3_18_a@9,9[3_04_e_a+4_05_e_a]"],
|
||||
"bonds": ["arcaneShip 1/57","deputShip 1/18","emptyShip 1/12","indomShip 0/8","kjeragShip 0/2","preciShip 1/57","siracusaShip 1/93","soloShip 1/29","steadShip 0/2","suntShip 1/12","swiftShip 1/34","victoriaShip 0/8","visiShip 0/8"]
|
||||
},
|
||||
@@ -1298,9 +1298,9 @@
|
||||
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
|
||||
"trophies": 4,
|
||||
"reward": 400,
|
||||
"stats": {"activatedLayers":298,"bossDamage":1140585,"dmgDealt":5153261,"gold":136,"itemsEquipped":19,"kills":284,"leaks":7,"lpLost":5,"merges":4,"perfectRounds":11,"refreshes":26},
|
||||
"stats": {"activatedLayers":294,"bossDamage":1159651,"dmgDealt":5116628,"gold":136,"itemsEquipped":19,"kills":284,"leaks":7,"lpLost":5,"merges":4,"perfectRounds":11,"refreshes":26},
|
||||
"lineup": ["5_20_a@11,3[3_11_e_a+5_02_e_a]","1_17_a@11,6[5_07_e_a+1_02_e_b]","3_19_a@11,7","6_18_a@10,3[3_06_e_b]","4_10_a@10,7[2_01_e_b+3_04_e_a]","1_08_b@10,8","6_05_a@9,8[1_01_e_b+4_07_e_a]","3_18_a@9,9[4_05_e_a+4_06_e_b]"],
|
||||
"bonds": ["arcaneShip 1/38","indomShip 0/8","kjeragShip 0/13","miraShip 1/11","preciShip 1/9","siracusaShip 2/234","soloShip 1/0","steadShip 0/8","swiftShip 1/6","victoriaShip 0/8","visiShip 0/8"]
|
||||
"bonds": ["arcaneShip 1/38","indomShip 0/8","kjeragShip 0/13","miraShip 1/11","preciShip 1/9","siracusaShip 2/230","soloShip 1/0","steadShip 0/8","swiftShip 1/6","victoriaShip 0/8","visiShip 0/8"]
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1314,7 +1314,7 @@
|
||||
"combat": "client",
|
||||
"boost": {"lp":400,"layers":300},
|
||||
"setup": {"stageId":"act1autochess_m02","bossId":"boss_5","hiddenBossId":"boss_10","factions":["TIMES","ELEMENT","DOT"]},
|
||||
"end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":397,"bossPoolLeft":0,"virtualMs":113700},
|
||||
"end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":399,"bossPoolLeft":0,"virtualMs":113700},
|
||||
"rng": {"setup":25,"shop":346,"waves":0,"draft":42,"bots":10350,"meta":3},
|
||||
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
|
||||
"rounds": [
|
||||
@@ -1377,12 +1377,12 @@
|
||||
"victory": true,
|
||||
"roundsPassed": 15,
|
||||
"eliminatedRound": null,
|
||||
"lp": 397,
|
||||
"lp": 399,
|
||||
"bandId": "band_paganini",
|
||||
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
|
||||
"trophies": 0,
|
||||
"reward": 425,
|
||||
"stats": {"activatedLayers":2281,"bossDamage":4580000,"dmgDealt":6374751,"gold":175,"itemsEquipped":25,"kills":376,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":34},
|
||||
"stats": {"activatedLayers":2281,"bossDamage":4580000,"dmgDealt":6374793,"gold":175,"itemsEquipped":25,"kills":378,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":34},
|
||||
"lineup": ["4_02_b@12,7[3_08_e_a+1_02_e_b]","6_01_a@12,8[3_03_e_a+3_02_e_a]","6_16_a@11,5","3_18_a@11,8[4_11_e_a+4_05_e_b]","4_10_a@10,4[1_05_e_b]","6_05_a@10,5","4_01_b@10,6[4_06_e_a+4_05_e_a]","1_08_b@9,9[4_10_e_a]"],
|
||||
"bonds": ["arcaneShip 2/389","deputShip 0/300","egirShip 0/300","emptyShip 0/300","indomShip 0/308","investShip 0/300","kazimierzShip 0/308","kjeragShip 0/300","lateranoShip 1/322","maniShip 0/300","miraShip 0/300","preciShip 1/302","raidShip 0/300","sargonShip 0/300","siracusaShip 1/345","skillfulShip 0/335","soloShip 1/307","steadShip 0/300","suntShip 1/300","swiftShip 1/316","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"]
|
||||
}
|
||||
@@ -1398,7 +1398,7 @@
|
||||
"combat": "client",
|
||||
"boost": {"lp":400,"layers":300},
|
||||
"setup": {"stageId":"act2autochess_m04","bossId":"boss_5","hiddenBossId":"boss_9","factions":["FLY","ELEMENT","INVISIBLE"]},
|
||||
"end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":698,"bossPoolLeft":0,"virtualMs":124650},
|
||||
"end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":793,"bossPoolLeft":0,"virtualMs":124650},
|
||||
"rng": {"setup":25,"shop":750,"waves":0,"draft":61,"bots":22165,"meta":198},
|
||||
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
|
||||
"rounds": [
|
||||
@@ -1474,12 +1474,12 @@
|
||||
"victory": true,
|
||||
"roundsPassed": 15,
|
||||
"eliminatedRound": null,
|
||||
"lp": 349,
|
||||
"lp": 397,
|
||||
"bandId": "band_sarkazb",
|
||||
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
|
||||
"trophies": 8,
|
||||
"reward": 425,
|
||||
"stats": {"activatedLayers":3346,"bossDamage":8584552,"dmgDealt":21757593,"gold":154,"itemsEquipped":21,"kills":287,"leaks":8,"lpLost":0,"merges":7,"perfectRounds":12,"refreshes":21},
|
||||
"stats": {"activatedLayers":3346,"bossDamage":7712110,"dmgDealt":20535636,"gold":154,"itemsEquipped":21,"kills":287,"leaks":8,"lpLost":0,"merges":7,"perfectRounds":12,"refreshes":21},
|
||||
"lineup": ["4_09_b@11,5[3_11_e_a+3_11_e_b]","6_11_a@11,8","3_13_b@10,3","3_05_b@10,8[1_01_e_a+6_09_e_a]","6_16_a@9,6","6_05_a@9,7[3_02_e_a]","4_14_b@9,8[2_01_e_a+1_02_e_b]","5_07_a@9,9[4_10_e_b]"],
|
||||
"bonds": ["arcaneShip 1/365","deputShip 0/304","egirShip 1/364","emptyShip 0/300","indomShip 0/300","investShip 0/300","kazimierzShip 0/302","kjeragShip 0/308","lateranoShip 0/300","maniShip 1/300","miraShip 0/300","preciShip 1/345","raidShip 1/405","sargonShip 1/300","siracusaShip 0/300","skillfulShip 1/338","soloShip 1/307","steadShip 0/338","suntShip 1/300","swiftShip 1/322","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"]
|
||||
},
|
||||
@@ -1488,12 +1488,12 @@
|
||||
"victory": true,
|
||||
"roundsPassed": 15,
|
||||
"eliminatedRound": null,
|
||||
"lp": 349,
|
||||
"lp": 396,
|
||||
"bandId": "band_doberm",
|
||||
"title": {"id":"comment_3","name":"坚若磐石","picId":"comment_icon_3","text":"目标生命值损失最少"},
|
||||
"trophies": 8,
|
||||
"reward": 425,
|
||||
"stats": {"activatedLayers":2801,"bossDamage":5304736,"dmgDealt":21479720,"gold":191,"itemsEquipped":32,"kills":287,"leaks":1,"lpLost":0,"merges":5,"perfectRounds":12,"refreshes":55},
|
||||
"stats": {"activatedLayers":2801,"bossDamage":6180513,"dmgDealt":24059056,"gold":191,"itemsEquipped":32,"kills":287,"leaks":1,"lpLost":0,"merges":5,"perfectRounds":12,"refreshes":55},
|
||||
"lineup": ["4_10_a@11,5[3_05_e_a+4_03_e_a]","6_05_a@11,8[4_08_e_a+6_09_e_a]","6_16_a@10,3[3_11_e_a+1_05_e_b]","2_13_a@10,7[4_04_e_a+4_05_e_a]","1_08_b@10,8[4_07_e_b+5_07_e_a]","6_08_a@9,6[2_01_e_b+3_01_e_b]","5_20_a@9,7[1_05_e_a+3_04_e_a]","6_08_a@9,8[3_03_e_a+1_01_e_a]","3_19_b@9,9[2_04_e_a+3_07_e_b]"],
|
||||
"bonds": ["arcaneShip 1/371","deputShip 0/332","egirShip 0/300","emptyShip 0/308","indomShip 0/300","investShip 0/300","kazimierzShip 0/300","kjeragShip 0/300","lateranoShip 0/300","maniShip 0/300","miraShip 1/334","preciShip 1/311","raidShip 0/300","sargonShip 0/300","siracusaShip 1/465","skillfulShip 1/356","soloShip 1/322","steadShip 0/312","suntShip 1/308","swiftShip 1/334","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"]
|
||||
}
|
||||
|
||||
+238
-239
@@ -24,47 +24,47 @@
|
||||
"total": 31,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 63,
|
||||
"rngDraws": 71,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":26,"total":31,"perfect":false,"leaks":5,"leaksUncounted":0,"coins":8,"dmg":178506,"bossDmg":0,"heal":12998,"deaths":6,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":26,"total":31,"perfect":false,"leaks":5,"leaksUncounted":0,"coins":8,"dmg":187475,"bossDmg":0,"heal":12128,"deaths":6,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_1_02_a",1,null,3115.05,1,7,0,0,792,0,0,1],
|
||||
["p1",2,"op","chess_char_1_04_a",1,null,2758.75,1,9,5,21996,544,0,44,2],
|
||||
["p1",3,"op","chess_char_1_10_a",0,null,1171.3,1,48,1,2993,2147,2862,24,13],
|
||||
["p1",4,"op","chess_char_1_08_a",1,null,0,0,12,4,27726,8360,0,27,2],
|
||||
["p1",5,"op","chess_char_1_12_a",1,null,0,0,15,3,21392,5549,1509,23,1],
|
||||
["p1",6,"op","chess_char_1_01_a",1,null,1403.75,1,4,3,9478,0,0,21,1],
|
||||
["p1",1,"op","chess_char_1_02_a",1,null,2478.05,1,7,0,0,1435,0,0,1],
|
||||
["p1",2,"op","chess_char_1_04_a",1,null,146.83,1,9,3,23185,4942,0,47,2],
|
||||
["p1",3,"op","chess_char_1_10_a",0,null,424.05,1,48,0,3856,3742,3046,28,13],
|
||||
["p1",4,"op","chess_char_1_08_a",1,null,0,0,12,3,11737,6202,0,18,1],
|
||||
["p1",5,"op","chess_char_1_12_a",1,null,0,0,15,4,20668,5498,1459,23,1],
|
||||
["p1",6,"op","chess_char_1_01_a",1,null,558.75,1,4,3,14495,895,0,38,1],
|
||||
["p1",7,"op","chess_char_1_03_a",1,null,964.63,1,5,0,0,898,0,0,0],
|
||||
["p1",8,"op","chess_char_1_06_a",1,null,0,0,11,4,14905,2765,5774,37,1],
|
||||
["p1",9,"op","chess_char_1_07_a",0,null,0,0,13,4,17329,2979,0,27,0],
|
||||
["p1",10,"op","chess_char_1_09_a",1,null,2032.5,1,6,1,25161,5400,0,23,1],
|
||||
["p1",11,"op","chess_char_1_13_a",1,null,0,0,14,0,11348,4262,0,25,1],
|
||||
["p1",12,"op","chess_char_1_14_a",1,null,997.48,1,8,1,26177,2355,0,15,1],
|
||||
["p1",8,"op","chess_char_1_06_a",1,null,597.56,1,49,1,11022,3038,3553,23,1],
|
||||
["p1",9,"op","chess_char_1_07_a",0,null,0,0,13,3,14602,2371,0,23,0],
|
||||
["p1",10,"op","chess_char_1_09_a",1,null,1268.3,1,6,0,34377,6304,0,27,1],
|
||||
["p1",11,"op","chess_char_1_13_a",1,null,1141.25,1,50,0,9909,3261,0,20,1],
|
||||
["p1",12,"op","chess_char_1_14_a",1,null,653.21,1,8,9,43626,3827,0,18,1],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null],
|
||||
["p1","~1","token","char_605_cmedic",null,null,1202,1,16,0,0,0,2853,32,2]
|
||||
["p1","~1","token","char_605_cmedic",null,null,1202,1,16,0,0,0,4070,32,2]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_10001_trslim": [1,1,0,9,4320],
|
||||
"enemy_1005_yokai_3": [1,1,0,6138,28800],
|
||||
"enemy_1010_demon_2": [1,1,0,3684,14400],
|
||||
"enemy_1005_yokai_3": [1,1,0,4900,28800],
|
||||
"enemy_1010_demon_2": [1,1,0,3877,14400],
|
||||
"enemy_1026_aghost": [1,1,0,0,3648],
|
||||
"enemy_1112_emppnt_2": [1,0,0,0,8001],
|
||||
"enemy_1116_liprr": [18,17,0,283,91496],
|
||||
"enemy_1168_dumage": [1,1,0,1384,4320],
|
||||
"enemy_1112_emppnt_2": [1,0,0,0,10957],
|
||||
"enemy_1116_liprr": [18,17,0,382,92690],
|
||||
"enemy_1168_dumage": [1,1,0,2482,4320],
|
||||
"enemy_1198_msfshu_2": [1,1,0,0,4],
|
||||
"enemy_1229_darmy_2": [1,1,0,669,5280],
|
||||
"enemy_1288_duskls": [1,1,0,251,4805],
|
||||
"enemy_1288_duskls": [1,1,0,396,4805],
|
||||
"enemy_1381_winman": [1,1,0,13,5568],
|
||||
"enemy_1500_skulsr": [1,0,0,720,4020],
|
||||
"enemy_2004_balloon": [1,0,0,0,3844],
|
||||
"enemy_1500_skulsr": [1,0,0,478,5672],
|
||||
"enemy_2004_balloon": [1,0,0,0,7012],
|
||||
"enemy_9010_acpupp": [1,0,0,0,0]
|
||||
},
|
||||
"hooks": [1,48,2700,375,375,667,669,326,32,32,26,24,16,15535,115,29,31,0,1,33,0,0,0],
|
||||
"events": {"atk":419,"bounty":4,"deploy":14,"die":32,"dmg":669,"engage":10,"fx":76,"heal":322,"skill":51,"spawn":47,"status":128},
|
||||
"fx": {"aoe":2,"bombard":8,"bombardShell":9,"counter":15,"crit":15,"dp":2,"ember":1,"explode":6,"heal":13,"phase":1,"summon":1,"taunt":1,"telegraph":1,"zone":1},
|
||||
"snaps": "4fb2b17d c3ab03ad ba4fbecd be5ad383 5c83697d 2c7bd427 95651ac0 d4f0d811 4c663319"
|
||||
"hooks": [1,50,2700,386,386,697,699,322,32,32,25,23,16,14727,101,32,31,0,1,33,0,0,0],
|
||||
"events": {"atk":433,"bounty":4,"deploy":16,"die":32,"dmg":699,"engage":10,"fx":76,"heal":318,"skill":49,"spawn":47,"status":113},
|
||||
"fx": {"aoe":1,"bombard":9,"bombardShell":9,"counter":12,"crit":19,"dp":1,"ember":1,"explode":5,"heal":13,"liberate":1,"phase":1,"summon":1,"taunt":1,"telegraph":1,"zone":1},
|
||||
"snaps": "4fb2b17d c3ab03ad ba4fbecd 8acf7af3 38caabab f066cab4 47ee9cdf f118754f 0cea250b"
|
||||
},
|
||||
"roster-002": {
|
||||
"about": "pass 0 band 2: chess_char_1_02_b chess_char_1_20_a chess_char_1_04_b chess_char_1_08_b chess_char_1_18_a chess_char_1_19_a chess_char_1_17_a chess_char_1_01_b chess_char_1_03_b chess_char_1_06_b chess_char_1_07_b chess_char_1_09_b",
|
||||
@@ -1016,40 +1016,40 @@
|
||||
"time": 230,
|
||||
"ticks": 6900,
|
||||
"reason": "timeout",
|
||||
"killed": 87,
|
||||
"killed": 92,
|
||||
"total": 126,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 576,
|
||||
"rngDraws": 580,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":87,"total":126,"perfect":false,"leaks":39,"leaksUncounted":0,"coins":6,"dmg":4144019,"bossDmg":0,"heal":71137,"deaths":9,"layerGains":{"preciShip":4}}
|
||||
"p1": {"killed":92,"total":126,"perfect":false,"leaks":34,"leaksUncounted":0,"coins":6,"dmg":4413978,"bossDmg":0,"heal":82323,"deaths":8,"layerGains":{"preciShip":4}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",1353.95,1,115,8,466769,7558,1098,87,4],
|
||||
["p1",2,"op","chess_char_6_03_a",2,null,1302.82,1,108,2,60032,17828,6704,48,2],
|
||||
["p1",3,"op","chess_char_6_06_a",2,null,0,0,151,9,418619,19914,422,91,2],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,88,9,226865,26968,5973,297,2],
|
||||
["p1",5,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,10,0,140799,0,0,47,5],
|
||||
["p1",6,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,85,1,322660,3069,854,126,3],
|
||||
["p1",7,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,1,1,29902,1242,1037,14,4],
|
||||
["p1",8,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,3,0,0,2192,52244,80,4],
|
||||
["p1",9,"op","chess_char_6_01_a",2,null,1158,1,92,35,805723,1346,119,83,4],
|
||||
["p1",10,"op","chess_char_6_02_a",2,null,1687,1,7,19,1300307,1242,169,76,3],
|
||||
["p1",11,"op","chess_char_6_04_a",2,null,1202,1,110,1,71446,10286,1562,0,4],
|
||||
["p1",12,"op","chess_char_6_05_a",2,null,1215,1,59,0,300898,2559,955,69,5],
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",2863.48,1,115,8,547728,6081,1130,87,4],
|
||||
["p1",2,"op","chess_char_6_03_a",2,null,2703,1,108,3,96724,21638,8650,75,2],
|
||||
["p1",3,"op","chess_char_6_06_a",2,null,2223,1,142,8,482800,21116,738,97,3],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,88,6,219859,29728,8163,298,2],
|
||||
["p1",5,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,10,0,138378,0,0,46,5],
|
||||
["p1",6,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,85,2,283224,3069,854,125,3],
|
||||
["p1",7,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,1,2,30193,1242,1037,14,4],
|
||||
["p1",8,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,3,0,0,2192,58777,82,4],
|
||||
["p1",9,"op","chess_char_6_01_a",2,null,1158,1,92,34,857246,1346,119,83,4],
|
||||
["p1",10,"op","chess_char_6_02_a",2,null,1687,1,7,26,1374046,1242,169,76,3],
|
||||
["p1",11,"op","chess_char_6_04_a",2,null,1202,1,110,2,75912,10286,1730,0,4],
|
||||
["p1",12,"op","chess_char_6_05_a",2,null,1215,1,59,0,307866,2559,955,69,5],
|
||||
["p1",13,"token","token_10017_skadi2_dedant",null,null,100,0,13,0,0,0,0,0,null],
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,60,0,0,0,0,0,null],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,111,0,0,0,0,0,null],
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,148,0,0,0,0,0,null]
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,149,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_10045_parrot": [1,0,1,0,49131],
|
||||
"enemy_10098_crhro": [1,1,0,8717,185752],
|
||||
"enemy_10124_uashld_2": [12,3,6,43100,1102888],
|
||||
"enemy_10098_crhro": [1,1,0,9588,185752],
|
||||
"enemy_10124_uashld_2": [12,6,5,49762,1290422],
|
||||
"enemy_1019_jshoot_2": [1,1,0,1515,16718],
|
||||
"enemy_1043_zomsbr": [72,56,16,133,1008813],
|
||||
"enemy_1061_zomshd": [30,21,8,17571,1673893],
|
||||
"enemy_1043_zomsbr": [72,56,16,151,1022835],
|
||||
"enemy_1061_zomshd": [30,23,7,16313,1746604],
|
||||
"enemy_1072_dlancer": [1,1,0,352,37150],
|
||||
"enemy_1165_duhond": [1,1,0,127,17337],
|
||||
"enemy_1196_msfyin_2": [1,1,0,0,9],
|
||||
@@ -1060,10 +1060,10 @@
|
||||
"enemy_2001_duckmi_2": [1,0,1,0,13530],
|
||||
"enemy_9006_actoxi": [1,0,1,0,3658]
|
||||
},
|
||||
"hooks": [1,150,6900,1031,1111,7275,7468,68979,96,135,42,40,22,39588,1096,52,126,35,1,105,2,6,6],
|
||||
"events": {"atk":2342,"bounty":3,"deploy":24,"die":100,"dmg":7403,"engage":10,"fx":539,"heal":125,"layer":2,"leak":35,"skill":82,"spawn":142,"status":2634},
|
||||
"fx": {"aoe":8,"bombard":22,"bombardShell":22,"burst":6,"crit":46,"dodge":6,"explode":20,"firewall":2,"garrison":2,"iceSpike":99,"lightning":141,"lock":22,"lure":3,"revive":1,"snow":73,"soul":1,"sp":2,"storm":5,"talent":2,"telegraph":7,"tide":4,"wanted":40,"weightless":5},
|
||||
"snaps": "c8992dd8 ef513924 6c381013 9a9944c6 820e2ebc de2648be 660ed54d ac3fc2b6 d1d36151 a862bf89 bd738773 54785a54 82f3a510 45d4ecfb ad4dd27f 4fcc42fe a68d6587 4210cb26 1b937847 5950e793 b1442398 8ea99017 6da4d589"
|
||||
"hooks": [1,150,6900,1070,1146,7889,8141,69291,100,137,43,40,22,39797,1133,51,126,33,1,109,2,10,7],
|
||||
"events": {"atk":2528,"bounty":3,"deploy":24,"die":104,"dmg":8076,"engage":10,"fx":554,"heal":128,"layer":2,"leak":33,"skill":83,"spawn":142,"status":2686},
|
||||
"fx": {"aoe":8,"bombard":22,"bombardShell":22,"burst":10,"crit":39,"dodge":7,"explode":20,"firewall":2,"garrison":2,"iceSpike":99,"lightning":157,"lock":22,"lure":3,"revive":1,"snow":75,"soul":1,"sp":1,"storm":5,"talent":2,"telegraph":7,"tide":4,"wanted":40,"weightless":5},
|
||||
"snaps": "c8992dd8 ef513924 6c381013 9a9944c6 820e2ebc de2648be 660ed54d ac3fc2b6 4b057061 c76044d5 1e3183dd 69b18662 97b0a95e ea897c2c 02baa76c cc3b79ca 5fe0ed47 a83d31e0 017f9645 bb7476b6 45f4958f 3b6429a1 4e60499c"
|
||||
},
|
||||
"roster-017": {
|
||||
"about": "pass 0 band 6: chess_char_6_15_a chess_char_6_19_a chess_char_6_07_a chess_char_6_17_a chess_char_6_08_a chess_char_6_09_a chess_char_6_11_a chess_char_6_12_a chess_char_6_13_a chess_char_6_14_a chess_char_6_16_a chess_char_6_18_a",
|
||||
@@ -1153,7 +1153,7 @@
|
||||
"total": 117,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 483,
|
||||
"rngDraws": 502,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {
|
||||
@@ -1163,9 +1163,9 @@
|
||||
"leaks": 0,
|
||||
"leaksUncounted": 0,
|
||||
"coins": 12,
|
||||
"dmg": 1561453,
|
||||
"dmg": 1560928,
|
||||
"bossDmg": 0,
|
||||
"heal": 30059,
|
||||
"heal": 29516,
|
||||
"deaths": 1,
|
||||
"layerGains": {"lateranoShip":12,"preciShip":12,"sargonShip":26}
|
||||
}
|
||||
@@ -1174,50 +1174,50 @@
|
||||
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",4558.4,1,3,0,0,0,0,0,0],
|
||||
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",3620.85,1,6,0,0,0,0,0,0],
|
||||
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3820.43,1,9,0,0,0,0,0,0],
|
||||
["p1",4,"op","chess_char_6_20_a",2,null,1523.98,1,4,0,0,0,20701,40,2],
|
||||
["p1",5,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1811.04,1,7,12,169583,0,0,16,5],
|
||||
["p1",6,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",4314.46,1,10,5,53428,1556,548,8,2],
|
||||
["p1",7,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1968.74,1,13,3,31605,8646,121,0,4],
|
||||
["p1",8,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",0,0,15,16,207958,8900,2823,36,7],
|
||||
["p1",9,"op","chess_char_6_08_b",2,"uniequip_002_reed2",2054.98,1,5,3,77599,0,1994,8,1],
|
||||
["p1",10,"op","chess_char_6_09_b",0,"uniequip_002_cello",1628.7,1,8,0,14472,0,0,4,4],
|
||||
["p1",11,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2332.18,1,11,18,148198,1500,188,142,4],
|
||||
["p1",12,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",4826.73,1,14,57,774576,7688,564,73,4],
|
||||
["p1",4,"op","chess_char_6_20_a",2,null,1523.98,1,4,0,0,0,20541,39,2],
|
||||
["p1",5,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1811.04,1,7,12,169697,0,0,16,5],
|
||||
["p1",6,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",4314.46,1,10,5,53428,1556,486,8,2],
|
||||
["p1",7,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1968.74,1,13,4,29961,8646,173,0,4],
|
||||
["p1",8,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",0,0,15,16,204487,8769,2713,36,7],
|
||||
["p1",9,"op","chess_char_6_08_b",2,"uniequip_002_reed2",2054.98,1,5,3,63902,0,1900,8,1],
|
||||
["p1",10,"op","chess_char_6_09_b",0,"uniequip_002_cello",1628.7,1,8,0,14472,0,0,5,5],
|
||||
["p1",11,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2332.18,1,11,20,138355,1500,50,136,4],
|
||||
["p1",12,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",4826.73,1,14,58,801146,7190,535,73,4],
|
||||
["p1",13,"token","token_10017_skadi2_dedant",null,null,100,0,16,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10030_mlyss_wtrman",null,null,2540.38,1,12,4,48440,1886,0,89,1],
|
||||
["p1",14,"token","token_10030_mlyss_wtrman",null,null,2540.38,1,12,1,50974,1886,0,89,1],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,37,0,6556,3093,866,11,null],
|
||||
["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,37,0,6556,3091,864,11,null],
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,123.2,0,59,0,0,0,0,0,null],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,1003.7,0,70,2,9216,2375,839,12,null],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,2008.19,0,99,1,9168,996,777,12,null],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,1113.22,0,70,0,8395,2266,839,12,null],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,2008.19,0,99,2,8901,996,777,12,null],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,101,0,0,0,0,0,null],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,1171.51,0,131,1,10654,1773,638,12,null],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,603.66,0,131,1,10654,2271,638,12,null],
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,123.2,1,137,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_1005_yokai": [1,1,0,0,1327],
|
||||
"enemy_1009_lurker": [1,1,0,0,3650],
|
||||
"enemy_1023_jmage": [1,1,0,697,3650],
|
||||
"enemy_1092_mdgint": [1,1,0,754,165888],
|
||||
"enemy_1092_mdgint": [1,1,0,751,165888],
|
||||
"enemy_1166_dusbr": [1,1,0,0,4977],
|
||||
"enemy_1197_sfshu_2": [1,1,0,0,5557],
|
||||
"enemy_1198_msfshu_2": [3,3,0,0,21],
|
||||
"enemy_1210_msfden_2": [1,1,0,0,75],
|
||||
"enemy_1229_darmy": [27,27,0,0,188117],
|
||||
"enemy_1229_darmy_2": [57,57,0,0,520059],
|
||||
"enemy_1275_dwlock_2": [21,21,0,24231,487711],
|
||||
"enemy_1275_dwlock_2": [21,21,0,23653,487711],
|
||||
"enemy_1283_sgkill": [1,1,0,2234,19907],
|
||||
"enemy_1364_spnaxe_2": [1,1,0,917,62641],
|
||||
"enemy_1364_spnaxe_2": [1,1,0,917,62117],
|
||||
"enemy_1367_dseed": [2,2,0,0,9953],
|
||||
"enemy_1439_dslntf": [1,1,0,0,49766],
|
||||
"enemy_2002_bearmi_2": [1,1,0,0,18248],
|
||||
"enemy_9008_acbunn": [1,1,0,2434,19907]
|
||||
"enemy_9008_acbunn": [1,1,0,2771,19907]
|
||||
},
|
||||
"hooks": [1,145,5849,513,513,1336,1487,3519,124,130,34,30,37,24659,381,5,122,0,1,124,11,6,0],
|
||||
"events": {"atk":606,"bounty":6,"deploy":21,"die":130,"dmg":1407,"engage":12,"fx":260,"heal":185,"layer":11,"skill":64,"spawn":145,"status":385},
|
||||
"fx": {"beam":4,"bombard":31,"bombardShell":31,"burst":6,"camouflage":2,"copy":1,"dp":4,"explode":1,"garrison":8,"lightning":87,"link":1,"lock":37,"lure":2,"scorchBurst":17,"snow":7,"split":4,"storm":7,"summon":2,"talent":1,"tide":4,"wanted":3},
|
||||
"snaps": "19eb7843 2593e6ad ced96303 9384a4db 45274713 75c80112 cd1ef1a1 6ff0d830 14dbf244 b55f9101 060019d3 8b4d624b 170d8186 4e4fbe70 f9844c3a d8a1becb eec26a32 99466fc4 2cf9d317 4ac77e1f"
|
||||
"hooks": [1,145,5849,507,507,1319,1469,3395,124,130,35,31,37,24779,382,5,122,0,1,124,11,6,0],
|
||||
"events": {"atk":597,"bounty":6,"deploy":21,"die":130,"dmg":1389,"engage":12,"fx":256,"heal":181,"layer":11,"skill":66,"spawn":145,"status":387},
|
||||
"fx": {"beam":4,"bombard":31,"bombardShell":31,"burst":6,"camouflage":2,"copy":1,"dp":4,"explode":1,"garrison":8,"lightning":85,"link":1,"lock":37,"lure":2,"scorchBurst":15,"snow":7,"split":4,"storm":7,"summon":2,"talent":1,"tide":4,"wanted":3},
|
||||
"snaps": "19eb7843 2593e6ad ced96303 0eb26dfa ec0145aa 242536e7 f29e47e6 6cadbb8b 646db1a6 6781eee8 c12a0126 6a5987c6 6fa6fdf6 4d6c0b9b 4b882db3 b7a0d66f 8fd2cbdc d79f7ad3 8d4ba4b8 2d341070"
|
||||
},
|
||||
"roster-019": {
|
||||
"about": "pass 0 band 7: chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_5_05_b chess_char_6_17_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b chess_char_5_02_b chess_char_5_03_b",
|
||||
@@ -1228,14 +1228,14 @@
|
||||
"round": 13,
|
||||
"seed": 116466041,
|
||||
"waveId": "act1autochess_h06",
|
||||
"time": 197.33,
|
||||
"ticks": 5920,
|
||||
"time": 200.93,
|
||||
"ticks": 6028,
|
||||
"reason": "cleared",
|
||||
"killed": 108,
|
||||
"total": 108,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 755,
|
||||
"rngDraws": 672,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {
|
||||
@@ -1247,27 +1247,27 @@
|
||||
"coins": 12,
|
||||
"dmg": 3002858,
|
||||
"bossDmg": 0,
|
||||
"heal": 141615,
|
||||
"heal": 151109,
|
||||
"deaths": 0,
|
||||
"layerGains": {"deputShip":12}
|
||||
}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",6796.8,1,14,25,906021,52826,0,205,3],
|
||||
["p1",2,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",6087.4,1,9,8,258235,2105,0,8,4],
|
||||
["p1",3,"op","chess_char_5_01_b",0,"uniequip_003_excu2",4149.22,1,10,0,12329,1953,300,5,0],
|
||||
["p1",1,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",6263.63,1,14,26,881807,49881,0,208,3],
|
||||
["p1",2,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",6087.4,1,9,8,257902,2105,0,9,3],
|
||||
["p1",3,"op","chess_char_5_01_b",0,"uniequip_003_excu2",4049.22,1,10,0,8361,1953,200,3,0],
|
||||
["p1",4,"op","chess_char_5_05_b",0,"none",12815,1,7,0,0,1000,100,0,0],
|
||||
["p1",5,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",10599.35,1,24,21,389315,46523,0,97,3],
|
||||
["p1",6,"op","chess_char_6_13_b",1,"uniequip_002_angel2",4824.27,1,2,30,616754,10442,1358,64,2],
|
||||
["p1",7,"op","chess_char_6_14_b",2,"uniequip_002_lumen",4177.8,1,3,0,0,0,9404,76,1],
|
||||
["p1",8,"op","chess_char_6_16_b",2,"uniequip_002_halo2",3165.8,1,4,1,79775,0,0,48,2],
|
||||
["p1",9,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",3390.2,1,8,17,556140,1000,0,72,3],
|
||||
["p1",10,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",3475.3,1,12,0,0,27274,130454,67,2],
|
||||
["p1",5,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",10122.44,1,24,20,425280,48361,0,105,3],
|
||||
["p1",6,"op","chess_char_6_13_b",1,"uniequip_002_angel2",4873,1,2,28,540782,10588,1317,60,2],
|
||||
["p1",7,"op","chess_char_6_14_b",2,"uniequip_002_lumen",4177.8,1,3,0,0,0,9754,78,1],
|
||||
["p1",8,"op","chess_char_6_16_b",2,"uniequip_002_halo2",3165.8,1,4,1,81240,0,0,48,2],
|
||||
["p1",9,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",3390.2,1,8,17,575679,1000,0,72,3],
|
||||
["p1",10,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",3475.3,1,12,0,0,37945,139738,69,2],
|
||||
["p1",11,"op","chess_char_5_02_b",0,"none",2945.8,1,1,0,0,0,0,0,0],
|
||||
["p1",12,"op","chess_char_5_03_b",0,"uniequip_003_blaze2",3414.4,1,5,4,136237,0,0,68,9],
|
||||
["p1",12,"op","chess_char_5_03_b",0,"uniequip_003_blaze2",3414.4,1,5,5,170767,0,0,86,11],
|
||||
["p1","~1","token","token_10019_nearl2_sword",null,null,6491.98,0,27,0,0,1788,0,0,null],
|
||||
["p1","~2","token","token_10019_nearl2_sword",null,null,6324.82,0,82,1,19770,1916,0,20,null],
|
||||
["p1","~3","token","token_10019_nearl2_sword",null,null,4911.82,0,115,1,28283,1688,0,9,null]
|
||||
["p1","~2","token","token_10019_nearl2_sword",null,null,6438.66,0,80,1,21873,1764,0,18,null],
|
||||
["p1","~3","token","token_10019_nearl2_sword",null,null,2379.55,0,114,2,39169,4220,0,25,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_1005_yokai_2": [1,1,0,51,4443],
|
||||
@@ -1276,19 +1276,19 @@
|
||||
"enemy_1112_emppnt": [1,1,0,0,37265],
|
||||
"enemy_1166_dusbr_2": [1,1,0,30,12613],
|
||||
"enemy_1198_msfshu": [1,1,0,0,9],
|
||||
"enemy_1229_darmy": [28,28,0,5500,337106],
|
||||
"enemy_1229_darmy_2": [57,57,0,33649,898662],
|
||||
"enemy_1229_darmy": [28,28,0,6548,337106],
|
||||
"enemy_1229_darmy_2": [57,57,0,32511,898662],
|
||||
"enemy_1283_sgkill_2": [1,1,0,14433,51598],
|
||||
"enemy_1367_dseed": [1,1,0,0,8600],
|
||||
"enemy_1439_dslntf_2": [1,1,0,20025,94596],
|
||||
"enemy_2003_rockman": [1,1,0,1417,214991],
|
||||
"enemy_9007_acelem": [12,12,0,39646,1238347],
|
||||
"enemy_9009_acfort": [1,1,0,4054,68797]
|
||||
"enemy_9007_acelem": [12,12,0,41756,1238347],
|
||||
"enemy_9009_acfort": [1,1,0,3643,68797]
|
||||
},
|
||||
"hooks": [1,125,5920,886,886,2764,3341,664,108,113,29,26,59,22540,1430,76,108,0,1,108,2,6,0],
|
||||
"events": {"atk":1273,"bounty":6,"deploy":17,"die":113,"dmg":3139,"engage":10,"fx":524,"heal":534,"layer":2,"skill":55,"spawn":123,"status":434},
|
||||
"fx": {"airstrike":19,"aoe":9,"beam":20,"blink":2,"bombard":10,"bombardShell":10,"burst":6,"cleanse":2,"displace":4,"drone":341,"droneLock":50,"drones":3,"emergency":1,"extraAttack":1,"finale":4,"garrison":2,"garrisonGrant":1,"link":5,"radiantSword":3,"slash":22,"steal":2,"summon":3,"sunBurst":1,"talent":3},
|
||||
"snaps": "01a34277 0e7ad63e efd260c2 e5d761b8 09e06c1f e2015a51 1b84ecbd 66a4bb37 d5349acd 92a0e019 e2770fd2 ad03eaae 979013d9 6daad463 50ac1a94 3bd9f1b9 c168ed0a 0203a659 b9f0ce4f c81058f7"
|
||||
"hooks": [1,125,6028,925,925,2810,3369,649,108,113,30,27,55,22777,1447,79,108,0,1,108,2,7,0],
|
||||
"events": {"atk":1296,"bounty":6,"deploy":17,"die":113,"dmg":3164,"engage":10,"fx":532,"heal":537,"layer":2,"skill":57,"spawn":123,"status":448},
|
||||
"fx": {"airstrike":17,"aoe":11,"beam":24,"blink":2,"bombard":10,"bombardShell":10,"burst":7,"cleanse":2,"displace":4,"drone":353,"droneLock":45,"drones":3,"emergency":1,"finale":3,"garrison":2,"garrisonGrant":1,"link":4,"radiantSword":3,"slash":21,"steal":2,"summon":3,"sunBurst":1,"talent":3},
|
||||
"snaps": "01a34277 0e7ad63e efd260c2 caa9f746 70118f40 b3efb03c de6d6921 949345a2 044a2b7f 708e7b55 4d219240 d5449fa5 16d7d388 9acd59d5 6a170c8e 5cb70efa f2ae5891 7f3e163c 63a11ec8 d5bcbf3a"
|
||||
},
|
||||
"roster-020": {
|
||||
"about": "pass 1 band 1: chess_char_1_02_a chess_char_1_04_a chess_char_1_10_a chess_char_1_08_a chess_char_1_12_a chess_char_1_01_a chess_char_1_03_a chess_char_1_06_a chess_char_1_07_a chess_char_1_09_a chess_char_1_13_a chess_char_1_14_a",
|
||||
@@ -1626,24 +1626,24 @@
|
||||
"time": 140,
|
||||
"ticks": 4200,
|
||||
"reason": "timeout",
|
||||
"killed": 18,
|
||||
"killed": 19,
|
||||
"total": 71,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 164,
|
||||
"rngDraws": 169,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":18,"total":71,"perfect":false,"leaks":55,"leaksUncounted":0,"coins":6,"dmg":183879,"bossDmg":0,"heal":1883,"deaths":21,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":19,"total":71,"perfect":false,"leaks":54,"leaksUncounted":0,"coins":6,"dmg":188151,"bossDmg":0,"heal":1883,"deaths":21,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_3_12_a",0,null,0,0,96,1,7787,4668,1883,19,4],
|
||||
["p1",2,"op","chess_char_3_16_a",0,null,0,0,6,1,3499,2173,0,12,1],
|
||||
["p1",3,"op","chess_char_3_18_a",0,null,0,0,99,3,10069,2962,0,12,5],
|
||||
["p1",1,"op","chess_char_3_12_a",0,null,0,0,97,1,7787,4668,1883,19,4],
|
||||
["p1",2,"op","chess_char_3_16_a",0,null,1616.62,1,104,1,3518,2729,0,13,1],
|
||||
["p1",3,"op","chess_char_3_18_a",0,null,0,0,99,4,14899,2962,0,12,9],
|
||||
["p1",4,"op","chess_char_3_08_a",0,null,0,0,4,4,24642,1594,0,8,1],
|
||||
["p1",5,"op","chess_char_3_09_a",0,null,1267,1,103,0,13020,1267,0,21,3],
|
||||
["p1",5,"op","chess_char_3_09_a",0,null,1267,1,103,0,13472,1267,0,22,3],
|
||||
["p1",6,"op","chess_char_3_10_a",0,null,0,0,87,1,29177,3300,0,17,4],
|
||||
["p1",7,"op","chess_char_3_11_a",0,null,1316,1,101,1,12760,1316,0,8,1],
|
||||
["p1",7,"op","chess_char_3_11_a",0,null,1316,1,101,1,11143,1316,0,7,1],
|
||||
["p1",8,"op","chess_char_3_13_a",0,null,0,0,54,0,4477,4727,0,26,0],
|
||||
["p1",9,"op","chess_char_3_14_a",0,null,0,0,75,0,4055,2502,0,5,0],
|
||||
["p1",10,"op","chess_char_3_17_a",0,null,1265.45,1,97,3,44464,3227,0,53,10],
|
||||
["p1",10,"op","chess_char_3_17_a",0,null,938.6,1,96,2,45052,3553,0,53,10],
|
||||
["p1",11,"op","chess_char_3_19_a",0,null,0,0,78,1,17767,2878,0,32,0],
|
||||
["p1",12,"op","chess_char_3_20_a",0,null,0,0,100,1,5659,3654,0,23,1],
|
||||
["p1",13,"token","token_10028_vigil_wolf",null,null,739.7,0,15,1,4873,969,0,9,null],
|
||||
@@ -1654,22 +1654,22 @@
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_10042_prtrop": [12,0,12,8673,25590],
|
||||
"enemy_10042_prtrop_2": [12,0,10,1579,15250],
|
||||
"enemy_10043_sailor": [39,11,28,18236,171566],
|
||||
"enemy_10042_prtrop_2": [12,0,10,2136,15720],
|
||||
"enemy_10043_sailor": [39,12,27,19228,175686],
|
||||
"enemy_1005_yokai_2": [1,1,0,68,2678],
|
||||
"enemy_10156_mncrer": [1,1,0,825,6912],
|
||||
"enemy_1116_liprr_2": [1,1,0,1518,12960],
|
||||
"enemy_1195_sfyin_2": [1,1,0,147,5357],
|
||||
"enemy_1196_msfyin_2": [2,2,0,0,10],
|
||||
"enemy_1251_lysyta_2": [1,1,0,198,5530],
|
||||
"enemy_1355_mrfly_2": [1,0,1,0,6038],
|
||||
"enemy_1513_dekght_2": [1,0,1,4110,1400],
|
||||
"enemy_1355_mrfly_2": [1,0,1,0,5692],
|
||||
"enemy_1513_dekght_2": [1,0,1,3445,1400],
|
||||
"enemy_9010_acpupp": [1,0,1,0,1540]
|
||||
},
|
||||
"hooks": [1,102,4200,383,383,1447,1501,12,40,94,30,30,0,9243,22,42,73,53,1,43,0,0,0],
|
||||
"events": {"atk":436,"bounty":3,"deploy":26,"die":41,"dmg":1499,"engage":14,"fx":27,"heal":11,"leak":53,"skill":60,"spawn":90,"status":63},
|
||||
"fx": {"dp":5,"explode":4,"liberate":1,"phase":1,"revive":4,"shield":2,"sp":1,"strike":1,"summon":2,"telegraph":3,"wolfShadow":1,"wolfShadowLost":2},
|
||||
"snaps": "1a7d12d1 7955f440 d99919a7 09818fe9 5d85594c eb4b0484 1591b58e c034a33b 2c27bf89 7a9f0e18 14dd1382 37e5dbf7 b8884791 2ad0053c"
|
||||
"hooks": [1,103,4200,388,388,1457,1512,12,41,94,34,34,0,9236,19,43,73,52,1,45,0,0,0],
|
||||
"events": {"atk":441,"bounty":3,"deploy":27,"die":42,"dmg":1510,"engage":14,"fx":33,"heal":11,"leak":52,"skill":68,"spawn":90,"status":58},
|
||||
"fx": {"dp":9,"explode":4,"liberate":1,"phase":1,"revive":4,"shield":2,"sp":3,"strike":1,"summon":2,"telegraph":3,"wolfShadow":1,"wolfShadowLost":2},
|
||||
"snaps": "1a7d12d1 7955f440 d99919a7 8f3de359 ca4544ed ac2e998f dbf58d8a f303c36c caf236c9 7253f57f c1c36e19 a1a42928 20f83061 78ac55cb"
|
||||
},
|
||||
"roster-027": {
|
||||
"about": "pass 1 band 4: chess_char_3_06_b chess_char_3_12_b chess_char_3_02_b chess_char_3_03_b chess_char_3_04_b chess_char_3_05_b chess_char_3_21_a chess_char_3_01_b chess_char_3_08_b chess_char_3_09_b chess_char_3_10_b chess_char_3_11_b",
|
||||
@@ -2017,64 +2017,64 @@
|
||||
"round": 12,
|
||||
"seed": 3754088384,
|
||||
"waveId": "act1autochess_h05",
|
||||
"time": 221.1,
|
||||
"ticks": 6633,
|
||||
"time": 219.47,
|
||||
"ticks": 6584,
|
||||
"reason": "cleared",
|
||||
"killed": 47,
|
||||
"killed": 35,
|
||||
"total": 167,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 178,
|
||||
"rngDraws": 182,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {
|
||||
"killed": 47,
|
||||
"killed": 35,
|
||||
"total": 167,
|
||||
"perfect": false,
|
||||
"leaks": 120,
|
||||
"leaks": 132,
|
||||
"leaksUncounted": 0,
|
||||
"coins": 2,
|
||||
"dmg": 403494,
|
||||
"dmg": 366322,
|
||||
"bossDmg": 0,
|
||||
"heal": 47666,
|
||||
"deaths": 26,
|
||||
"layerGains": {"indomShip":30}
|
||||
"heal": 45493,
|
||||
"deaths": 31,
|
||||
"layerGains": {"indomShip":35}
|
||||
}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_11_a",0,null,0,0,175,1,14689,14105,7927,29,5],
|
||||
["p1",2,"op","chess_char_5_19_a",0,null,0,0,187,4,37230,11144,3583,17,2],
|
||||
["p1",3,"op","chess_char_5_13_a",0,null,2313.27,1,197,9,97109,16590,1330,31,1],
|
||||
["p1",4,"op","chess_char_5_14_a",0,null,719.25,1,198,2,10998,7283,2806,33,3],
|
||||
["p1",5,"op","chess_char_5_06_b",0,"uniequip_003_etlchi",0,0,10,18,148358,13823,9857,39,9],
|
||||
["p1",6,"op","chess_char_5_17_a",0,null,2250,1,200,0,15762,27066,1599,29,8],
|
||||
["p1",7,"op","chess_char_5_12_a",1,null,0,0,3,3,11483,1787,383,10,1],
|
||||
["p1",8,"op","chess_char_5_15_a",0,null,697.29,1,199,3,15771,1390,235,69,20],
|
||||
["p1",9,"op","chess_char_5_20_a",0,null,0,0,180,0,7091,3427,103,15,1],
|
||||
["p1",10,"op","chess_char_5_21_a",0,null,0,0,186,0,4781,7990,180,8,0],
|
||||
["p1",11,"op","chess_char_5_22_a",0,null,0,0,193,7,37672,2726,252,60,2],
|
||||
["p1",12,"op","chess_char_5_23_a",0,null,0,0,183,0,0,5809,18905,32,12],
|
||||
["p1",1,"op","chess_char_5_11_a",0,null,0,0,7,3,18161,12816,11936,37,6],
|
||||
["p1",2,"op","chess_char_5_19_a",0,null,0,0,181,1,24090,10511,2980,9,1],
|
||||
["p1",3,"op","chess_char_5_13_a",0,null,0,0,182,4,69847,16642,1033,31,1],
|
||||
["p1",4,"op","chess_char_5_14_a",0,null,0,0,200,0,2553,6628,1432,9,2],
|
||||
["p1",5,"op","chess_char_5_06_b",0,"uniequip_003_etlchi",0,0,88,14,152980,19394,11582,36,8],
|
||||
["p1",6,"op","chess_char_5_17_a",0,null,0,0,198,0,16224,20093,192,30,7],
|
||||
["p1",7,"op","chess_char_5_12_a",1,null,0,0,3,3,14164,3395,1991,13,2],
|
||||
["p1",8,"op","chess_char_5_15_a",0,null,0,0,201,5,18715,1950,98,75,20],
|
||||
["p1",9,"op","chess_char_5_20_a",0,null,0,0,184,0,7091,3502,178,15,1],
|
||||
["p1",10,"op","chess_char_5_21_a",0,null,0,0,189,0,5581,7990,180,9,0],
|
||||
["p1",11,"op","chess_char_5_22_a",0,null,0,0,193,5,34367,5558,1385,49,2],
|
||||
["p1",12,"op","chess_char_5_23_a",0,null,1422,1,202,0,0,6488,11768,20,7],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["p1","~1","token","token_10015_dusk_drgn",null,null,1715.06,0,38,0,2547,787,505,8,null]
|
||||
["p1","~1","token","token_10015_dusk_drgn",null,null,1947.38,0,38,0,2547,787,737,8,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_1005_yokai_3": [1,0,1,6184,8755],
|
||||
"enemy_1009_lurker": [72,17,55,579,106043],
|
||||
"enemy_10159_mntrjn": [1,0,1,0,25571],
|
||||
"enemy_1019_jshoot_2": [51,22,29,17053,115897],
|
||||
"enemy_1005_yokai_3": [1,0,1,5891,11900],
|
||||
"enemy_1009_lurker": [72,17,55,921,93670],
|
||||
"enemy_10159_mntrjn": [1,0,1,0,25020],
|
||||
"enemy_1019_jshoot_2": [51,12,39,19173,94135],
|
||||
"enemy_1118_lidbox_2": [1,1,0,39,14774],
|
||||
"enemy_1196_msfyin": [1,1,0,0,3],
|
||||
"enemy_1252_lysytb_2": [1,0,1,307,12737],
|
||||
"enemy_1364_spnaxe_2": [1,0,1,5874,7375],
|
||||
"enemy_1404_msnip": [36,6,30,75984,145857],
|
||||
"enemy_1516_jakill": [1,0,1,7909,6021],
|
||||
"enemy_9011_acrefr": [1,0,1,0,9501]
|
||||
"enemy_1252_lysytb_2": [1,0,1,338,11250],
|
||||
"enemy_1364_spnaxe_2": [1,0,1,5266,7966],
|
||||
"enemy_1404_msnip": [36,4,32,77659,149942],
|
||||
"enemy_1516_jakill": [1,0,1,6133,5143],
|
||||
"enemy_9011_acrefr": [1,0,1,336,2479]
|
||||
},
|
||||
"hooks": [1,200,6633,907,907,3373,3390,8730,73,194,64,64,0,20306,167,105,167,120,1,76,6,0,10],
|
||||
"events": {"atk":1015,"bounty":1,"deploy":31,"die":74,"dmg":3386,"engage":12,"fx":64,"heal":73,"layer":6,"leak":120,"skill":128,"spawn":182,"status":171},
|
||||
"fx": {"aoe":3,"crit":2,"dodge":10,"dollEnd":1,"garrison":6,"healAoe":5,"hpShare":1,"palsy":1,"reborn":1,"revive":4,"sp":4,"substitute":3,"summon":1,"swap":2,"zone":20},
|
||||
"snaps": "0092f82c ff2b39c2 ec300a50 280fca14 776e2fec 99dfc47a 3e6b6598 13676f11 9744c299 6f00c4e5 040ad1c7 d83a4d16 3926c670 f34f4c6b de9b6acf 4477f6ab 44c403f0 c156273c 20f49ab4 dffa19a7 3a1bdade 6cead901 e5e5f0d6"
|
||||
"hooks": [1,202,6584,853,853,3205,3222,10125,66,199,57,57,0,18157,181,97,167,132,1,69,7,0,8],
|
||||
"events": {"atk":955,"bounty":1,"deploy":33,"die":67,"dmg":3218,"engage":12,"fx":68,"heal":56,"layer":7,"leak":132,"skill":114,"spawn":182,"status":191},
|
||||
"fx": {"aoe":2,"crit":4,"dodge":8,"dollEnd":3,"garrison":7,"healAoe":6,"hpShare":1,"palsy":1,"reborn":2,"revive":6,"sp":4,"substitute":3,"summon":1,"zone":20},
|
||||
"snaps": "0092f82c 0dd327ad 53a3d810 58ba1139 90f0fe1e 37f52c37 cd5a8c36 c2f3acff ca099967 25de291a 2f88cb0f 5966eb8a c429d9ee 2513f9c2 c0f223dd 17c04486 0f59775e 7a41457d 4c1669d7 078e9615 676431e7 b6538f95"
|
||||
},
|
||||
"roster-034": {
|
||||
"about": "pass 1 band 6: chess_char_5_08_b chess_char_5_11_b chess_char_5_19_b chess_char_5_13_b chess_char_5_14_b chess_char_5_07_b chess_char_5_17_b chess_char_5_10_b chess_char_5_12_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b",
|
||||
@@ -2088,47 +2088,47 @@
|
||||
"time": 230,
|
||||
"ticks": 6900,
|
||||
"reason": "timeout",
|
||||
"killed": 81,
|
||||
"killed": 86,
|
||||
"total": 104,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 639,
|
||||
"rngDraws": 621,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":81,"total":104,"perfect":false,"leaks":23,"leaksUncounted":0,"coins":6,"dmg":4772471,"bossDmg":0,"heal":144036,"deaths":1,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":86,"total":104,"perfect":false,"leaks":18,"leaksUncounted":0,"coins":8,"dmg":5013885,"bossDmg":0,"heal":163673,"deaths":1,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_08_b",0,"uniequip_003_horn",3000,1,7,16,1491888,37623,1068,96,77],
|
||||
["p1",2,"op","chess_char_5_11_b",0,"uniequip_003_demkni",4064.38,1,10,1,73736,11343,63644,194,34],
|
||||
["p1",3,"op","chess_char_5_19_b",0,"none",3682,1,11,5,219874,7768,7934,139,5],
|
||||
["p1",4,"op","chess_char_5_13_b",0,"uniequip_003_ghost2",3448.92,1,13,4,163179,41271,41387,210,5],
|
||||
["p1",5,"op","chess_char_5_14_b",0,"none",3261,1,15,0,16840,27231,26974,217,13],
|
||||
["p1",6,"op","chess_char_5_07_b",0,"uniequip_003_surtr",2680,1,8,9,325026,17428,924,114,60],
|
||||
["p1",7,"op","chess_char_5_17_b",0,"uniequip_003_f12yin",2728,1,100,8,227632,3038,310,107,46],
|
||||
["p1",8,"op","chess_char_5_10_b",0,"uniequip_003_lisa",1470,1,4,6,170650,0,0,117,6],
|
||||
["p1",9,"op","chess_char_5_12_b",1,"uniequip_003_dusk",1667,1,5,21,1526499,0,0,91,5],
|
||||
["p1",10,"op","chess_char_5_15_b",0,"none",1907.5,1,12,1,58730,0,0,166,123],
|
||||
["p1",11,"op","chess_char_5_20_b",0,"uniequip_003_aglina",1352,1,14,5,202363,1794,1794,138,6],
|
||||
["p1",12,"op","chess_char_5_21_b",0,"none",3330.35,1,6,5,296053,0,0,58,3],
|
||||
["p1",1,"op","chess_char_5_08_b",0,"uniequip_003_horn",3000,1,7,25,1690098,32737,709,96,86],
|
||||
["p1",2,"op","chess_char_5_11_b",0,"uniequip_003_demkni",4176.51,1,10,0,29905,12253,69243,182,38],
|
||||
["p1",3,"op","chess_char_5_19_b",0,"none",3682,1,11,3,184370,9411,9828,136,5],
|
||||
["p1",4,"op","chess_char_5_13_b",0,"uniequip_003_ghost2",3050.48,1,13,3,99196,55309,54515,210,5],
|
||||
["p1",5,"op","chess_char_5_14_b",0,"none",3261,1,15,0,16840,26781,26785,217,15],
|
||||
["p1",6,"op","chess_char_5_07_b",0,"uniequip_003_surtr",1804.11,1,8,6,337400,27088,605,137,60],
|
||||
["p1",7,"op","chess_char_5_17_b",0,"uniequip_003_f12yin",214.49,1,97,4,324747,5435,193,119,54],
|
||||
["p1",8,"op","chess_char_5_10_b",0,"uniequip_003_lisa",1470,1,4,4,161523,0,0,118,6],
|
||||
["p1",9,"op","chess_char_5_12_b",1,"uniequip_003_dusk",1667,1,5,33,1577956,0,0,89,5],
|
||||
["p1",10,"op","chess_char_5_15_b",0,"none",1907.5,1,12,0,47882,0,0,166,89],
|
||||
["p1",11,"op","chess_char_5_20_b",0,"uniequip_003_aglina",1352,1,14,3,205107,1794,1794,138,7],
|
||||
["p1",12,"op","chess_char_5_21_b",0,"none",3330.35,1,6,5,338859,0,0,67,3],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,0,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_10018_sgrobh": [1,1,0,8642,46438],
|
||||
"enemy_10094_crstf": [1,1,0,184,24767],
|
||||
"enemy_1043_zomsbr": [1,1,0,38,16245],
|
||||
"enemy_10018_sgrobh": [1,1,0,7268,46438],
|
||||
"enemy_10094_crstf": [1,1,0,158,24767],
|
||||
"enemy_1043_zomsbr": [1,1,0,19,16095],
|
||||
"enemy_1165_duhond_2": [1,1,0,114,24767],
|
||||
"enemy_1204_msfhu": [1,1,0,0,12],
|
||||
"enemy_1288_duskls": [1,1,0,3189,30964],
|
||||
"enemy_1381_winman": [27,24,3,16551,928870],
|
||||
"enemy_1381_winman_2": [39,28,10,38254,1664969],
|
||||
"enemy_1387_winshd": [30,23,4,78842,1981114],
|
||||
"enemy_1425_lrcmra_2": [1,0,1,1682,40234],
|
||||
"enemy_2009_csaudc": [1,0,1,0,14091]
|
||||
"enemy_1288_duskls": [1,1,0,1594,30964],
|
||||
"enemy_1381_winman": [27,23,4,6312,906059],
|
||||
"enemy_1381_winman_2": [39,29,9,26620,1665434],
|
||||
"enemy_1387_winshd": [30,26,2,114701,2095022],
|
||||
"enemy_1425_lrcmra_2": [1,1,0,11329,154793],
|
||||
"enemy_2009_csaudc": [1,1,0,2690,49534]
|
||||
},
|
||||
"hooks": [1,120,6900,2644,2644,3994,3993,8937,82,102,383,379,0,34812,5720,95,104,19,1,83,0,0,8],
|
||||
"events": {"atk":3066,"bounty":3,"deploy":13,"die":83,"dmg":3982,"engage":12,"fx":371,"heal":34,"leak":19,"skill":762,"spawn":119,"status":794},
|
||||
"fx": {"aoe":13,"crit":20,"dodge":8,"ember":1,"healAoe":34,"hpShare":5,"sp":147,"zone":143},
|
||||
"snaps": "de3bd2e2 66e9b470 efceaf9d 858e310e 0f4624f4 096d020b d67a49c3 252c2d4e e44385a0 49f2051f a4fa6a66 dde9cff7 bfc37778 e988e30c 033979c4 7d8f533e d2e87327 180843ba 330c5c8a c36250df a65b77ec 6da88ede b9087957"
|
||||
"hooks": [1,120,6900,2623,2623,4011,4006,10250,87,103,373,370,0,31826,6617,100,104,15,1,88,0,0,14],
|
||||
"events": {"atk":3112,"bounty":4,"deploy":13,"die":88,"dmg":3995,"engage":12,"fx":345,"heal":38,"leak":15,"skill":743,"spawn":119,"status":810},
|
||||
"fx": {"aoe":15,"crit":21,"dodge":14,"ember":1,"healAoe":38,"hpShare":5,"sp":140,"zone":111},
|
||||
"snaps": "de3bd2e2 efefe0a2 43519431 531ae1eb aa084bc8 507c87eb 0f5120b4 9a46e524 080c06c4 5b040f54 0c7a6be0 c2043b05 ae95d0ab e2cd74c3 5ca51241 aaf4ddc9 9f2d19ce dd8d93e5 7dbbf487 3f8ce0c6 325e24cf 4a98b418 a0f8abef"
|
||||
},
|
||||
"roster-035": {
|
||||
"about": "pass 1 band 6: chess_char_6_03_a chess_char_6_06_a chess_char_6_07_a chess_char_5_22_b chess_char_5_23_b chess_char_6_01_a chess_char_6_02_a chess_char_6_04_a chess_char_6_05_a chess_char_6_08_a chess_char_6_09_a chess_char_6_11_a token_10017_skadi2_dedant token_10030_mlyss_wtrman",
|
||||
@@ -2264,26 +2264,26 @@
|
||||
"round": 13,
|
||||
"seed": 1486935477,
|
||||
"waveId": "act1autochess_h06",
|
||||
"time": 216.4,
|
||||
"ticks": 6492,
|
||||
"time": 218.23,
|
||||
"ticks": 6547,
|
||||
"reason": "cleared",
|
||||
"killed": 51,
|
||||
"killed": 47,
|
||||
"total": 86,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 136,
|
||||
"rngDraws": 99,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {
|
||||
"killed": 51,
|
||||
"killed": 47,
|
||||
"total": 86,
|
||||
"perfect": false,
|
||||
"leaks": 80,
|
||||
"leaks": 84,
|
||||
"leaksUncounted": 0,
|
||||
"coins": 4,
|
||||
"dmg": 1189101,
|
||||
"dmg": 1133862,
|
||||
"bossDmg": 0,
|
||||
"heal": 36013,
|
||||
"heal": 36020,
|
||||
"deaths": 26,
|
||||
"layerGains": {"sargonShip":6}
|
||||
}
|
||||
@@ -2292,15 +2292,15 @@
|
||||
["p1",1,"op","chess_char_6_06_b",0,"uniequip_003_pepe",0,0,8,1,40812,3361,372,9,3],
|
||||
["p1",2,"op","chess_char_6_15_b",0,"uniequip_003_qiubai",0,0,6,3,99385,3407,823,19,4],
|
||||
["p1",3,"op","chess_char_6_07_b",0,"uniequip_003_siege2",0,0,9,0,82237,2661,0,11,4],
|
||||
["p1",4,"op","chess_char_6_04_b",0,"uniequip_003_skadi2",3523.2,1,174,0,0,19492,10978,0,4],
|
||||
["p1",5,"op","chess_char_6_05_b",0,"uniequip_003_pasngr",0,0,5,7,287103,1502,0,31,16],
|
||||
["p1",6,"op","chess_char_6_08_b",0,"uniequip_003_reed2",1663,1,150,0,135318,7690,4364,84,3],
|
||||
["p1",7,"op","chess_char_6_09_b",1,"uniequip_003_cello",1352,1,177,2,23410,4222,166,11,1],
|
||||
["p1",8,"op","chess_char_6_11_b",0,"uniequip_003_mlyss",1873,1,162,1,63830,6930,1311,115,3],
|
||||
["p1",4,"op","chess_char_6_04_b",0,"uniequip_003_skadi2",3523.2,1,173,0,0,18848,10334,0,4],
|
||||
["p1",5,"op","chess_char_6_05_b",0,"uniequip_003_pasngr",0,0,5,7,305406,1502,0,33,17],
|
||||
["p1",6,"op","chess_char_6_08_b",0,"uniequip_003_reed2",0,0,91,0,85304,7960,4634,55,2],
|
||||
["p1",7,"op","chess_char_6_09_b",1,"uniequip_003_cello",1352,1,176,2,24741,4222,166,12,1],
|
||||
["p1",8,"op","chess_char_6_11_b",0,"uniequip_003_mlyss",1873,1,161,1,67066,7571,1952,118,2],
|
||||
["p1",9,"op","chess_char_6_12_b",0,"uniequip_003_rosmon",0,0,64,1,236193,7253,1949,31,9],
|
||||
["p1",10,"op","chess_char_6_13_b",0,"none",2005,1,171,5,147703,12336,5932,62,6],
|
||||
["p1",10,"op","chess_char_6_13_b",0,"none",2005,1,171,3,102535,10222,3817,49,5],
|
||||
["p1",11,"op","chess_char_6_14_b",0,"uniequip_003_lumen",0,0,68,0,0,8834,5745,7,2],
|
||||
["p1",12,"op","chess_char_6_16_b",0,"none",0,0,173,2,68279,5296,0,20,1],
|
||||
["p1",12,"op","chess_char_6_16_b",0,"none",1324,1,175,3,86651,8113,2817,28,2],
|
||||
["p1",13,"token","token_10017_skadi2_dedant",null,null,100,0,17,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10030_mlyss_wtrman",null,null,0,0,11,0,1413,4338,2730,14,1],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,0,1,0,0,0,0,0,null],
|
||||
@@ -2310,28 +2310,28 @@
|
||||
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,54,0,0,0,0,0,null],
|
||||
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,77,0,39,1608,0,1,1],
|
||||
["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,106,0,0,0,0,0,null],
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,0,0,114,0,251,3448,1643,8,1],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,0,0,163,0,3054,1497,0,4,1],
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,1,175,0,0,0,0,0,null],
|
||||
["p1","~5","token","token_10030_mlyss_wtrman",null,null,1804.5,1,176,0,0,0,0,0,1]
|
||||
["p1","~3","token","token_10030_mlyss_wtrman",null,null,0,0,117,0,1818,2002,680,5,1],
|
||||
["p1","~4","token","token_10030_mlyss_wtrman",null,null,0,0,162,0,188,1805,0,5,1],
|
||||
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,174,0,0,0,0,0,null],
|
||||
["p1","~5","token","token_10030_mlyss_wtrman",null,null,1804.5,1,177,0,0,0,0,0,1]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_10042_prtrop": [1,1,0,698,17199],
|
||||
"enemy_10118_ymgprc": [1,0,1,5032,115511],
|
||||
"enemy_1045_hammer_2": [18,4,14,12429,339260],
|
||||
"enemy_1061_zomshd": [60,12,48,33940,682093],
|
||||
"enemy_1045_hammer_2": [18,4,14,15105,341760],
|
||||
"enemy_1061_zomshd": [60,12,48,33152,636194],
|
||||
"enemy_1071_dftman": [1,1,0,0,8026],
|
||||
"enemy_1172_dugago": [1,0,1,1324,39158],
|
||||
"enemy_1172_dugago": [1,0,1,2010,40965],
|
||||
"enemy_1210_msfden_2": [1,0,1,0,55],
|
||||
"enemy_1269_nhfly": [45,33,12,24133,24943],
|
||||
"enemy_1321_wdarft": [1,0,1,0,2107],
|
||||
"enemy_1501_demonk": [1,0,1,12765,34202],
|
||||
"enemy_1269_nhfly": [45,29,16,21835,14954],
|
||||
"enemy_1321_wdarft": [1,0,1,0,0],
|
||||
"enemy_1501_demonk": [1,0,1,12642,34412],
|
||||
"enemy_2052_smgia": [1,0,1,0,21689]
|
||||
},
|
||||
"hooks": [1,175,6492,504,504,2453,2631,28400,82,166,61,59,39,10872,1110,32,131,80,1,57,1,2,0],
|
||||
"events": {"atk":605,"bounty":2,"deploy":41,"die":86,"dmg":2534,"engage":15,"fx":82,"heal":20,"layer":1,"leak":80,"skill":120,"spawn":156,"status":656},
|
||||
"fx": {"airstrike":11,"aoe":8,"burst":2,"copy":5,"explode":29,"garrison":1,"heal":4,"healField":2,"link":2,"revive":1,"split":1,"stone":1,"summon":15},
|
||||
"snaps": "e7f57cb9 5d2f7fdf a34e9406 8a58323a 7d07bc24 abc407ce 319e7ebf 95f85fd9 9a3a7827 7b2bbf31 12b76db4 084b6d1d ed65c31c dbb67422 b1a1c69a 25e7a551 0c4ac123 51e0bc76 65d11431 1570d59d 03fbdd0e 985fd819"
|
||||
"hooks": [1,175,6547,476,476,2445,2593,26429,78,167,60,57,31,10377,1183,31,131,84,1,56,1,2,0],
|
||||
"events": {"atk":583,"bounty":2,"deploy":41,"die":83,"dmg":2512,"engage":15,"fx":75,"heal":20,"layer":1,"leak":84,"skill":117,"spawn":156,"status":682},
|
||||
"fx": {"airstrike":7,"aoe":8,"burst":2,"copy":5,"explode":26,"garrison":1,"heal":4,"healField":2,"link":2,"revive":1,"split":1,"stone":1,"summon":15},
|
||||
"snaps": "e7f57cb9 5d2f7fdf a34e9406 8a58323a 7d07bc24 abc407ce 319e7ebf 676fd561 9476379e 1f8fd930 05f6ae3b df6151b2 b08fe9cc 7c94318f 7ad4cf67 9dd8fd94 4792f6d4 49d18528 573fd27f 632af769 aeb18398 660866c0"
|
||||
},
|
||||
"roster-038": {
|
||||
"about": "pass 1 band 7: chess_char_5_08_b chess_char_6_19_b chess_char_5_01_b chess_char_5_05_b chess_char_5_06_b chess_char_6_17_b chess_char_5_07_b chess_char_6_18_b chess_char_6_20_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b",
|
||||
@@ -2948,57 +2948,56 @@
|
||||
"round": 13,
|
||||
"seed": 328939409,
|
||||
"waveId": "act1autochess_h06",
|
||||
"time": 205.47,
|
||||
"ticks": 6164,
|
||||
"time": 204.23,
|
||||
"ticks": 6127,
|
||||
"reason": "cleared",
|
||||
"killed": 34,
|
||||
"killed": 51,
|
||||
"total": 86,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 145,
|
||||
"rngDraws": 277,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {
|
||||
"killed": 34,
|
||||
"killed": 51,
|
||||
"total": 86,
|
||||
"perfect": false,
|
||||
"leaks": 53,
|
||||
"leaks": 35,
|
||||
"leaksUncounted": 0,
|
||||
"coins": 2,
|
||||
"dmg": 1294259,
|
||||
"coins": 0,
|
||||
"dmg": 1359874,
|
||||
"bossDmg": 0,
|
||||
"heal": 11340,
|
||||
"deaths": 7,
|
||||
"layerGains": {"egirShip":5,"swiftShip":78}
|
||||
"heal": 8755,
|
||||
"deaths": 5,
|
||||
"layerGains": {"egirShip":5,"swiftShip":62}
|
||||
}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_6_19_b",1,"none",2858.76,1,99,10,142277,13040,68,27,11],
|
||||
["p1",2,"op","chess_char_5_13_b",1,"none",3202.92,1,81,9,136856,12306,407,36,2],
|
||||
["p1",3,"op","chess_char_6_20_b",1,"none",1480.68,1,4,0,0,782,10844,14,5],
|
||||
["p1",4,"op","chess_char_5_12_b",0,"none",1800.36,1,52,10,581523,1800,0,46,40],
|
||||
["p1",5,"op","chess_char_5_20_b",2,"none",1292,1,59,0,251904,1314,22,46,5],
|
||||
["p1",6,"op","chess_char_6_05_b",2,"none",1557.36,1,100,5,181698,5922,0,25,3],
|
||||
["p1",1,"op","chess_char_6_19_b",1,"none",2858.76,1,64,19,258702,5492,68,46,18],
|
||||
["p1",2,"op","chess_char_5_13_b",1,"none",3202.92,1,81,1,42223,6473,68,19,1],
|
||||
["p1",3,"op","chess_char_6_20_b",1,"none",1480.68,1,4,0,0,782,8597,11,5],
|
||||
["p1",4,"op","chess_char_5_12_b",0,"none",1800.36,1,51,3,264406,2572,0,31,27],
|
||||
["p1",5,"op","chess_char_5_20_b",2,"none",1292,1,58,2,250771,1314,22,46,5],
|
||||
["p1",6,"op","chess_char_6_05_b",2,"none",1557.36,1,65,25,543772,6036,0,46,11],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_10027_vtsk": [1,0,1,12336,20415],
|
||||
"enemy_10098_crhro": [1,0,1,4066,17712],
|
||||
"enemy_1045_hammer_2": [19,4,15,13006,404659],
|
||||
"enemy_1061_zomshd": [60,28,32,4033,906454],
|
||||
"enemy_10027_vtsk": [1,0,1,13505,16174],
|
||||
"enemy_10098_crhro": [1,0,1,3357,9770],
|
||||
"enemy_1045_hammer_2": [19,11,8,0,443111],
|
||||
"enemy_1061_zomshd": [60,39,21,3592,888063],
|
||||
"enemy_1166_dusbr_2": [1,1,0,0,7299],
|
||||
"enemy_1207_sfji": [1,1,0,0,18248],
|
||||
"enemy_1208_msfji": [1,0,1,0,0],
|
||||
"enemy_1292_duskld": [1,0,1,0,2528],
|
||||
"enemy_1430_lrrook": [1,0,1,0,18234],
|
||||
"enemy_2017_csphts": [1,0,1,1723,1260]
|
||||
"enemy_1207_sfji": [1,0,1,0,8734],
|
||||
"enemy_1292_duskld": [1,0,1,0,2868],
|
||||
"enemy_1430_lrrook": [1,0,1,0,46482],
|
||||
"enemy_2017_csphts": [1,0,1,2215,2257]
|
||||
},
|
||||
"hooks": [1,103,6164,249,249,2817,2826,30376,41,94,66,66,0,9498,399,25,87,53,1,74,9,1,0],
|
||||
"events": {"atk":463,"bounty":1,"deploy":13,"die":41,"dmg":2826,"engage":5,"fx":129,"heal":44,"layer":9,"leak":53,"skill":132,"spawn":96,"status":835},
|
||||
"fx": {"burst":1,"dollEnd":1,"explode":1,"garrison":8,"layer":1,"lightning":58,"shield":5,"slash":11,"sp":28,"storm":3,"substitute":3,"summon":1,"swap":2,"telegraph":1,"weightless":5},
|
||||
"snaps": "114138f7 91b6a2fa cc32ef2d c73b8b92 cfc9b573 7b3dd24c 0c53a125 af35b361 6fca06d6 2c88ae52 e6b5584c b5db6ac3 b1fe0c6c 1b308f78 394e7946 d6b4633c 08432cc7 25ebf66b 22366e40 448fd11e e921151e"
|
||||
"hooks": [1,100,6127,238,238,2150,2158,21451,56,91,67,67,0,10009,674,24,86,35,1,83,8,0,1],
|
||||
"events": {"atk":490,"deploy":11,"die":56,"dmg":2158,"engage":5,"fx":311,"heal":32,"layer":8,"leak":35,"skill":134,"spawn":95,"status":1019},
|
||||
"fx": {"dodge":1,"dollEnd":1,"explode":2,"garrison":7,"layer":1,"lightning":223,"shield":5,"slash":18,"sp":35,"storm":11,"substitute":1,"telegraph":1,"weightless":5},
|
||||
"snaps": "114138f7 91b6a2fa 7610acfd 3d21f676 8b814efe f52c75c7 7bf31005 97bafb07 219c56f9 4f52058d fb2c665c 9e07511a c65f6592 2f5b9396 d20a5349 7cff5211 3a98f4c8 d3c065bc 6e8f918b f69dface ad3b6031"
|
||||
},
|
||||
"roster-049": {
|
||||
"about": "pass 3 band 5: chess_char_4_23_b chess_char_3_04_b chess_char_4_09_b chess_char_3_21_b chess_char_4_13_b",
|
||||
|
||||
@@ -19,6 +19,9 @@ import { installFakePixi, fakeViewCtx } from './fakepixi.js';
|
||||
import { presetCamera } from '../../public/js/render/projection.js';
|
||||
import { UF, ANIM } from '../../shared/constants.js';
|
||||
import { makeBattle, chessRec } from '../helpers/battleHarness.js';
|
||||
import * as enemiesMod from '../../server/sim/content/enemies.js';
|
||||
import { enemyStealthed } from '../../server/sim/targeting.js';
|
||||
import { flagsOf } from '../../server/sim/snapshot.js';
|
||||
|
||||
const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
|
||||
const assets = JSON.parse(readFileSync(path.join(ROOT, 'data/assets.json'), 'utf8'));
|
||||
@@ -133,6 +136,194 @@ async function enemy(id, info = {}) {
|
||||
return v;
|
||||
}
|
||||
|
||||
describe('骨刺 effective stealth drives A/B clips', () => {
|
||||
const BONE = 'enemy_9008_acbunn';
|
||||
const near = (a, b) => assert.ok(Math.abs(a - b) < 1e-6, `${a} ≈ ${b}`);
|
||||
function arena() {
|
||||
const h = makeBattle({
|
||||
content: 'generic', extraContent: [enemiesMod], seed: 7, autoFinish: false,
|
||||
defs: { chess: { wall: chessRec({ id: 'wall', profession: 'TANK', stats: { atk: 0, maxHp: 1e7, def: 0, res: 0, blockCnt: 3 }, rangeGrid: [[0, 0]], skill: null }) } },
|
||||
kits: { wall: () => ({ trait: { noAttack: true } }) }, units: [{ chessId: 'wall', row: 9, col: 6 }],
|
||||
});
|
||||
h.step();
|
||||
const e = h.spawn(BONE, { pos: [9, 6], routeIndex: 0, mods: { speedMul: 0 } });
|
||||
return { h, e, wall: h.unit('wall') };
|
||||
}
|
||||
function pose(v, h, e, hidden) {
|
||||
const flags = flagsOf(e);
|
||||
assert.equal(enemyStealthed(e), hidden);
|
||||
assert.equal(!!(flags & UF.STEALTH), hidden);
|
||||
v.sync({ ...sample(flags), x: e.x, y: e.y }, h.b.time);
|
||||
assert.equal(v.form, hidden ? null : 'revealed');
|
||||
assert.equal(clip(v), hidden ? 'Idle_A' : 'Idle_B');
|
||||
v.fadeIn = 1;
|
||||
v.update(1 / 60, cam(), h.b.time);
|
||||
assert.equal(v.root.alpha, hidden ? 0.45 : 1);
|
||||
}
|
||||
|
||||
test('骨刺: actual blocking, blocker stun, reveal and expiry give A → B → A → B → A', async () => {
|
||||
const { h, e, wall } = arena();
|
||||
const v = await enemy(BONE);
|
||||
try {
|
||||
pose(v, h, e, true);
|
||||
h.step(2); assert.equal(e.blockedBy, wall); pose(v, h, e, false);
|
||||
h.b.applyStatus(wall, 'stun', { duration: 30, force: true });
|
||||
h.step(2); assert.equal(e.blockedBy, null); pose(v, h, e, true);
|
||||
h.b.addBuff(e, { key: 'test:reveal', duration: 1, flags: { reveal: true } });
|
||||
pose(v, h, e, false);
|
||||
h.run(1.1); pose(v, h, e, true);
|
||||
} finally { v.destroy(); }
|
||||
});
|
||||
|
||||
test('骨刺: overlapping block and reveal keep B until both end', async () => {
|
||||
const { h, e, wall } = arena();
|
||||
const v = await enemy(BONE);
|
||||
try {
|
||||
h.step(2); assert.equal(e.blockedBy, wall);
|
||||
h.b.addBuff(e, { key: 'test:reveal', duration: 0.1, flags: { reveal: true } });
|
||||
pose(v, h, e, false);
|
||||
h.run(0.2); assert.equal(e.blockedBy, wall); pose(v, h, e, false);
|
||||
h.b.addBuff(e, { key: 'test:reveal', duration: 1, flags: { reveal: true } });
|
||||
h.b.applyStatus(wall, 'stun', { duration: 30, force: true });
|
||||
h.step(2); assert.equal(e.blockedBy, null); pose(v, h, e, false);
|
||||
h.run(1.1); pose(v, h, e, true);
|
||||
} finally { v.destroy(); }
|
||||
});
|
||||
|
||||
test('骨刺: switching an ongoing attack maps A 0.8 ↔ B 1.0 without another attack or a repeated-snapshot restart', async () => {
|
||||
const v = await enemy(BONE);
|
||||
try {
|
||||
v.sync(sample(UF.STEALTH), 1);
|
||||
v.atkInterval = 4;
|
||||
v.onAttack(null, 1.1);
|
||||
v.actor.clock = 2;
|
||||
v.actor.spine.state.tracks[0].trackTime = 0.8;
|
||||
const last = v.lastAtk, interval = v.atkInterval;
|
||||
v.imp = { dirty: false };
|
||||
v.sync(sample(0), 2);
|
||||
assert.equal(clip(v), 'Attack_B');
|
||||
near(v.actor.spine.state.tracks[0].trackTime, 1);
|
||||
near(v.actor.attackUntil, 2.5);
|
||||
assert.equal(v.imp.dirty, true);
|
||||
const track = v.actor.spine.state.tracks[0];
|
||||
v.sync(sample(0), 2.1);
|
||||
assert.equal(v.actor.spine.state.tracks[0], track);
|
||||
v.sync(sample(UF.STEALTH), 2.2);
|
||||
assert.equal(clip(v), 'Attack_A');
|
||||
near(v.actor.spine.state.tracks[0].trackTime, 0.8);
|
||||
near(v.actor.attackUntil, 2.7);
|
||||
assert.equal(v.lastAtk, last);
|
||||
assert.equal(v.atkInterval, interval);
|
||||
assert.equal(v.actor.wound, false);
|
||||
v.imp = null;
|
||||
} finally { v.imp = null; v.destroy(); }
|
||||
});
|
||||
|
||||
for (const fromB of [false, true]) {
|
||||
test(`骨刺: ${fromB ? 'B → A truncated' : 'A → B'} wind-up retains its deadline and tail speed`, async () => {
|
||||
const v = await enemy(BONE);
|
||||
try {
|
||||
v.sync(sample(fromB ? 0 : UF.STEALTH), 1);
|
||||
v.actor.clock = 2;
|
||||
const lead = fromB ? 0.633 : 0.333;
|
||||
assert.ok(v.actor.windUp(4, lead));
|
||||
v.actor.spine.state.tracks[0].trackTime = fromB ? 0.1 : 0.2;
|
||||
const until = v.actor.windUntil, last = v.lastAtk, interval = v.atkInterval;
|
||||
v.sync(sample(fromB ? UF.STEALTH : 0), 2);
|
||||
const track = v.actor.spine.state.tracks[0];
|
||||
assert.equal(clip(v), fromB ? 'Attack_A' : 'Attack_B');
|
||||
near(track.trackTime, fromB ? 0 : 0.4);
|
||||
near(track.timeScale, fromB ? 0.533 / lead : 1);
|
||||
assert.equal(v.actor.windUntil, until);
|
||||
assert.equal(v.actor.windTs, 1);
|
||||
assert.equal(v.actor.wound, true);
|
||||
near(v.actor.attackUntil, 2 + lead + 1.5 - (fromB ? 0.533 : 0.733));
|
||||
assert.equal(v.lastAtk, last);
|
||||
assert.equal(v.atkInterval, interval);
|
||||
v.sync(sample(fromB ? UF.STEALTH : 0), 2.1);
|
||||
assert.equal(v.actor.spine.state.tracks[0], track);
|
||||
v.actor.update(lead + 0.001);
|
||||
assert.equal(track.timeScale, 1, 'the original tail speed resumes');
|
||||
} finally { v.destroy(); }
|
||||
});
|
||||
}
|
||||
|
||||
for (const control of [UF.FROZEN, UF.STUNNED, UF.SLEEP]) {
|
||||
test(`骨刺: control ${control} keeps the skeleton frozen while B/A attachments are applied immediately`, async () => {
|
||||
const v = await enemy(BONE);
|
||||
try {
|
||||
v.sync(sample(UF.STEALTH | control), 1);
|
||||
let zeroUpdates = 0;
|
||||
const update = v.actor.spine.update.bind(v.actor.spine);
|
||||
v.actor.spine.update = (dt) => { if (dt === 0) zeroUpdates++; update(dt); };
|
||||
for (const hidden of [false, true]) {
|
||||
v.sync(sample(control | (hidden ? UF.STEALTH : 0)), 2);
|
||||
assert.equal(clip(v), hidden ? 'Idle_A' : 'Idle_B');
|
||||
assert.equal(v.actor.mode, 'stun');
|
||||
assert.equal(v.actor.frozen, true);
|
||||
assert.equal(v.actor.spine.state.tracks[0].mixDuration, 0);
|
||||
}
|
||||
assert.equal(zeroUpdates, 2);
|
||||
v.sync(sample(UF.STEALTH, ANIM.MOVE), 3);
|
||||
assert.equal(v.actor.frozen, false);
|
||||
assert.equal(clip(v), 'Move_A');
|
||||
} finally { v.destroy(); }
|
||||
});
|
||||
}
|
||||
|
||||
test('骨刺: a first snapshot with flags = 0 selects B even though previous flags were also 0', async () => {
|
||||
const v = await enemy(BONE);
|
||||
try {
|
||||
assert.equal(v.flags, 0);
|
||||
v.sync(sample(0), 1);
|
||||
assert.equal(v.form, 'revealed');
|
||||
assert.equal(clip(v), 'Idle_B');
|
||||
} finally { v.destroy(); }
|
||||
});
|
||||
|
||||
for (const finalFlags of [0, UF.STEALTH, UF.FROZEN]) {
|
||||
test(`骨刺: delayed model loading applies the latest snapshot (${finalFlags}), including frozen B`, async () => {
|
||||
const a = store(BONE);
|
||||
let resolve;
|
||||
a.spine.acquire = () => new Promise((r) => { resolve = r; });
|
||||
const v = new UnitView(fakeViewCtx(fake.P, { assets: a, cam }), { id: 9, side: 'enemy', kind: 'enemy', defId: BONE, spine: BONE, maxHp: 1000 });
|
||||
const proto = fake.P.spine.Spine.prototype, update = proto.update;
|
||||
let zeroUpdates = 0;
|
||||
proto.update = function (dt) { if (dt === 0) zeroUpdates++; return update.call(this, dt); };
|
||||
try {
|
||||
v.sync(sample(0), 1);
|
||||
assert.equal(v.actor, null);
|
||||
assert.equal(v.form, 'revealed');
|
||||
v.sync(sample(finalFlags), 2);
|
||||
resolve({ animations: Object.keys(a.spineEntry().animations).map((name) => ({ name })) });
|
||||
await tick(); await tick();
|
||||
assert.ok(v.actor);
|
||||
assert.equal(clip(v), finalFlags & UF.STEALTH ? 'Idle_A' : 'Idle_B');
|
||||
assert.ok(zeroUpdates > 0, 'the loaded pose is applied at zero time');
|
||||
assert.equal(v.actor.frozen, !!(finalFlags & UF.FROZEN));
|
||||
} finally { proto.update = update; v.destroy(); }
|
||||
});
|
||||
}
|
||||
|
||||
for (const hidden of [true, false]) {
|
||||
test(`骨刺: ${hidden ? 'A' : 'B'} idle, move and death; a DIE snapshot selects its form before dying`, async () => {
|
||||
const flags = hidden ? UF.STEALTH : 0, suffix = hidden ? 'A' : 'B';
|
||||
const v = await enemy(BONE), w = await enemy(BONE);
|
||||
try {
|
||||
v.sync(sample(flags, ANIM.MOVE), 1); assert.equal(clip(v), `Move_${suffix}`);
|
||||
v.sync(sample(flags, ANIM.IDLE), 2); assert.equal(clip(v), `Idle_${suffix}`);
|
||||
v.die(); assert.equal(clip(v), `Die_${suffix}`);
|
||||
w.sync(sample(hidden ? 0 : UF.STEALTH), 1);
|
||||
w.sync(sample(flags, ANIM.DIE), 2); assert.equal(clip(w), `Die_${suffix}`);
|
||||
w.sync(sample(hidden ? 0 : UF.STEALTH, ANIM.DIE), 3);
|
||||
frames(w, 10);
|
||||
assert.equal(clip(w), `Die_${suffix}`, 'death keeps its chosen form');
|
||||
assert.equal(w.form, hidden ? null : 'revealed');
|
||||
} finally { v.destroy(); w.destroy(); }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe('转译基底·α forms (user report after 0.1.0, #5)', () => {
|
||||
const TR = 'enemy_10081_mpplai';
|
||||
test('every clip of the three forms exists in the skeleton; the change clips last the official 2 s; the manifest keeps the original form', () => {
|
||||
|
||||
@@ -66,6 +66,36 @@ test('#1 the user\'s case: ground-only operators never hit a 近地悬浮 enemy
|
||||
}
|
||||
});
|
||||
|
||||
test('#220 (the owner\'s decision of 2026-10-08): a 速射手 blocking a ground enemy shoots a flyer in its range; a 神射手 keeps hitting the enemy it blocks', () => {
|
||||
const defs = { enemies: {
|
||||
e_walker: enemyRec({ key: 'e_walker', hp: 1e8, atk: 0, def: 800, speed: 1 }),
|
||||
e_soft: enemyRec({ key: 'e_soft', hp: 1e8, atk: 0, def: 0, speed: 0 }),
|
||||
e_bat: enemyRec({ key: 'e_bat', hp: 1e8, atk: 0, def: 0, speed: 0, motion: 'FLY' }),
|
||||
} };
|
||||
const shots = (chessId, other) => {
|
||||
const h = makeBattle({ seed: 3, autoFinish: false, timeLimit: 120, captureNoisy: true, defs, units: [{ chessId, row: 10, col: 4 }] });
|
||||
h.step();
|
||||
const u = h.unit(chessId);
|
||||
h.b.addBuff(u, { key: 'test:mute', flags: { silence: true } });
|
||||
const walker = h.spawn('e_walker', { pos: [10, 7], routeIndex: 0, route: { motion: 'WALK', start: [10, 7], end: [10, 0], checkpoints: [] } });
|
||||
assert.ok(h.runUntil(() => walker.blockedBy === u, 10), `${u.name} on a melee tile blocks the walker`);
|
||||
const o = h.spawn(other, { pos: [10, 6], routeIndex: 0, route: { motion: other === 'e_bat' ? 'FLY' : 'WALK', start: [10, 6], end: [10, 6], checkpoints: [] } });
|
||||
h.step();
|
||||
assert.ok(h.b.enemiesInKeys(u.rangeKeys, u, u.profile).includes(o), `${other} in range`);
|
||||
const n0 = h.hooksOf('damaged').length;
|
||||
h.run(4);
|
||||
const hits = (t) => h.hooksOf('damaged').slice(n0).filter((c) => c.source === u && c.target === t).length;
|
||||
checkInvariants(h.b);
|
||||
return { blocked: hits(walker), other: hits(o) };
|
||||
};
|
||||
const exu = shots('chess_char_3_01_a', 'e_bat'); // 能天使 (速射手: 优先攻击空中单位)
|
||||
assert.ok(exu.other > 0 && exu.blocked === 0, `速射手: the flyer over her own blocked enemy (${JSON.stringify(exu)})`);
|
||||
for (const other of ['e_soft', 'e_bat']) {
|
||||
const far = shots('chess_char_4_20_a', other); // 远牙 (神射手: 优先攻击防御力最低)
|
||||
assert.ok(far.blocked > 0 && far.other === 0, `神射手: still the enemy it blocks, not ${other} (${JSON.stringify(far)})`);
|
||||
}
|
||||
});
|
||||
|
||||
test('#1 ground-only splash spares a hovering enemy next to its ground target (迷迭香 + aftershocks)', () => {
|
||||
const h = makeBattle({ units: [{ chessId: 'chess_char_6_12_a', row: 10, col: 3 }], seed: 3, autoFinish: false, timeLimit: 120, captureNoisy: true, defs: SYN });
|
||||
h.step();
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { makeBattle, enemyRec } from '../helpers/battleHarness.js';
|
||||
|
||||
function setup() {
|
||||
const h = makeBattle({
|
||||
defs: { enemies: { enemy_test: enemyRec({ key: 'enemy_test', hp: 1e6, atk: 100, def: 1000, speed: 0 }) } },
|
||||
enemies: [{ key: 'enemy_test', pos: [11, 8] }], content: 'none', autoFinish: false,
|
||||
});
|
||||
h.step();
|
||||
return { h, e: h.enemy('enemy_test') };
|
||||
}
|
||||
|
||||
const orders = [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]];
|
||||
const approx = (actual, expected) => assert.ok(Math.abs(actual - expected) < 1e-6, `${actual} ≈ ${expected}`);
|
||||
|
||||
for (const plain of [false, true]) {
|
||||
for (const order of orders) {
|
||||
test(`${plain ? 'applyStrongest' : 'fragile'}: three effects expire in strength order after application order ${order}`, () => {
|
||||
const { h, e } = setup();
|
||||
const effects = [{ value: 0.8, duration: 2 }, { value: 0.6, duration: 5 }, { value: 0.3, duration: 10 }];
|
||||
const key = plain ? 'test:strongest' : 'fragile';
|
||||
for (const i of order) {
|
||||
if (plain) h.b.applyStrongest(e, key, { ...effects[i], mods: (v) => ({ dmgTakenMul: 1 + v }) });
|
||||
else h.b.applyStatus(e, key, effects[i]);
|
||||
}
|
||||
for (const [elapsed, multiplier, damage] of [[0, 1.8, 180], [2.1, 1.6, 160], [3, 1.3, 130], [5, 1, 100]]) {
|
||||
if (elapsed) h.run(elapsed);
|
||||
approx(e.s.dmgTakenMul, multiplier);
|
||||
assert.equal(h.b.dealDamage(null, e, { amount: 100, type: 'true' }), damage);
|
||||
assert.equal(e.buffs.filter((b) => b.key === key).length, multiplier === 1 ? 0 : 1);
|
||||
}
|
||||
assert.deepEqual(h.b.errors, []);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
test('strongest statuses: a weaker effect that expires under the winner never resumes', () => {
|
||||
const { h, e } = setup();
|
||||
h.b.applyStatus(e, 'fragile', { value: 0.6, duration: 3 });
|
||||
h.b.applyStatus(e, 'fragile', { value: 0.3, duration: 10 });
|
||||
h.b.applyStatus(e, 'fragile', { value: 0.8, duration: 5 });
|
||||
h.run(5.1);
|
||||
approx(e.s.dmgTakenMul, 1.3);
|
||||
h.run(5);
|
||||
assert.equal(e.findBuff('fragile'), null);
|
||||
});
|
||||
|
||||
test('strongest statuses: equal-strength refresh skips expired fallbacks but keeps the later one', () => {
|
||||
const { h, e } = setup();
|
||||
for (const [value, duration] of [[0.8, 2], [0.6, 5], [0.3, 10]]) h.b.applyStatus(e, 'fragile', { value, duration });
|
||||
h.run(1);
|
||||
h.b.applyStatus(e, 'fragile', { value: 0.8, duration: 6 });
|
||||
h.b.applyStatus(e, 'fragile', { value: 0.8, duration: 1 });
|
||||
h.run(5.1);
|
||||
approx(e.s.dmgTakenMul, 1.8);
|
||||
h.run(1);
|
||||
approx(e.s.dmgTakenMul, 1.3);
|
||||
h.run(3);
|
||||
assert.equal(e.findBuff('fragile'), null);
|
||||
});
|
||||
|
||||
test('strongest statuses: refreshing a waiting effect preserves the weaker later fallback', () => {
|
||||
const { h, e } = setup();
|
||||
for (const [value, duration] of [[0.8, 2], [0.6, 5], [0.3, 10]]) h.b.applyStatus(e, 'fragile', { value, duration });
|
||||
h.run(1);
|
||||
h.b.applyStatus(e, 'fragile', { value: 0.6, duration: 6 });
|
||||
h.run(4.1);
|
||||
approx(e.s.dmgTakenMul, 1.6);
|
||||
h.run(2);
|
||||
approx(e.s.dmgTakenMul, 1.3);
|
||||
h.run(3);
|
||||
assert.equal(e.findBuff('fragile'), null);
|
||||
});
|
||||
|
||||
test('strongest statuses: stackAs controls every fallback without changing its actual effect', () => {
|
||||
const { h, e } = setup();
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.1, stackAs: 0.9, duration: 2 });
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.2, stackAs: 0.8, duration: 5 });
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.3, duration: 10 });
|
||||
approx(e.s.atk, 90);
|
||||
h.run(2.1);
|
||||
approx(e.s.atk, 80);
|
||||
h.run(3);
|
||||
approx(e.s.atk, 70);
|
||||
h.run(5);
|
||||
approx(e.s.atk, 100);
|
||||
});
|
||||
|
||||
test('strongest statuses: equal-priority waiting effects keep the longest-lived application value', () => {
|
||||
const { h, e } = setup();
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.9, duration: 2 });
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.1, stackAs: 0.8, duration: 5 });
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.3, duration: 10 });
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.2, stackAs: 0.8, duration: 7 });
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.4, stackAs: 0.8, duration: 6 });
|
||||
h.b.applyStatus(e, 'weaken', { value: 0.5, stackAs: 0.8, duration: 7 });
|
||||
h.run(2.1);
|
||||
approx(e.s.atk, 80);
|
||||
h.run(3);
|
||||
approx(e.s.atk, 80);
|
||||
h.run(2);
|
||||
approx(e.s.atk, 70);
|
||||
h.run(3);
|
||||
approx(e.s.atk, 100);
|
||||
});
|
||||
|
||||
for (const plain of [false, true]) {
|
||||
test(`${plain ? 'removeBuff' : 'removeStatus'} discards every waiting strongest effect`, () => {
|
||||
const { h, e } = setup();
|
||||
const key = plain ? 'test:strongest' : 'fragile';
|
||||
for (const [value, duration] of [[0.8, 2], [0.6, 5], [0.3, 10]]) {
|
||||
if (plain) h.b.applyStrongest(e, key, { value, duration, mods: (v) => ({ dmgTakenMul: 1 + v }) });
|
||||
else h.b.applyStatus(e, key, { value, duration });
|
||||
}
|
||||
assert.equal(plain ? h.b.removeBuff(e, key) : h.b.removeStatus(e, key), 1);
|
||||
h.b.applyStatus(e, 'fragile', { value: 0.1, duration: 1 });
|
||||
h.run(2.1);
|
||||
approx(e.s.dmgTakenMul, 1);
|
||||
h.run(8);
|
||||
approx(e.s.dmgTakenMul, 1);
|
||||
assert.equal(e.findBuff(key), null);
|
||||
assert.deepEqual(h.b.errors, []);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,416 @@
|
||||
// test/sim/trait_attack_speed.test.js — the ENGINE-level consumption of a trait's attack-speed rider
|
||||
// (server/sim/content/traitMods.js, wired from server/sim/battle/players.js `_setupUnit` after `kit.install`; PR #293 by
|
||||
// @LimitlessHPPK).
|
||||
//
|
||||
// Background (the def shape is docs/SIM.md `traitBb`; the profile merge is professions.js resolveProfile): build-data.mjs folds
|
||||
// a module's trait blackboard into `trait.bb` unconditionally, so `{key:'attack_speed', value:12}` reached
|
||||
// `resolveProfile` and stopped there — nothing read it, because the CONDITION only exists in the module sentence
|
||||
// (「攻击范围内存在2名及以上敌人时攻击速度+12」). The line was therefore inert as DATA, and the two operators that
|
||||
// carry it implemented it by hand in their kits (shared/tier5.js `crowdAspd`, deleted by this change): the engine now
|
||||
// applies the same line for everyone.
|
||||
//
|
||||
// The tests below pin the four things that make this a fix rather than a special case:
|
||||
// 1. the two REA-Y beneficiaries get +12 ASPD POINTS, and only while the engine's own targeting sees the required
|
||||
// enemies — no bonus with 1 enemy in range, a measurably shorter attack interval from 2, back to base when the
|
||||
// condition is left, and back on when it holds again;
|
||||
// 2. the SAME engine rule serves both, although their numbers live on DIFFERENT blackboards (圣约送葬人 REA-Y:
|
||||
// a hidden module talent, index −1; 隐德来希 REA-Y: `trait.bb` folded in by build-data) — there is no operator-id
|
||||
// whitelist anywhere in the path;
|
||||
// 3. operators with no such line are untouched;
|
||||
// 4. the trait attack-speed lines a hand-written kit already implemented are neither double-counted nor changed
|
||||
// (史尔特尔 / 维娜·维多利亚 / 山 / 空弦 / 斯卡蒂), and the whole shipped data set is closed against silent gaps.
|
||||
//
|
||||
// ASPD is a POINT score, not a percentage: `aspd = clamp(base + Σaspd, 20, 600)` and
|
||||
// `interval = bat × (1 + ΣbatPct) × 100 / aspd` (the units.js header), so +12 means 100 → 112 (interval × 100/112), which is
|
||||
// how every existing module / item / enemy implementation reads `attack_speed` too.
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { makeBattle, enemyRec, checkInvariants } from '../helpers/battleHarness.js';
|
||||
import { getDefaultSource } from '../../server/sim/simdata.js';
|
||||
import { TICK } from '../../server/sim/constants.js';
|
||||
import { traitAttackSpeedRule, installTraitAttackSpeed, conditionClause, plainText, TRAIT_ASPD_BUFF } from '../../server/sim/content/traitMods.js';
|
||||
import { diySlotIds, diySlot, diyPool, isDiyModule } from '../../shared/diy.js';
|
||||
import { unitForm } from '../../shared/standIn.js';
|
||||
|
||||
const ds = getDefaultSource();
|
||||
const HOOKS = ['attack', 'damaged', 'deploy', 'skillStart', 'skillEnd', 'tick'];
|
||||
const dummy = (key, o = {}) => enemyRec({ key, hp: 1e7, speed: 0, ...o });
|
||||
const DEFS = { enemies: { enemy_dummy: dummy('enemy_dummy') } };
|
||||
/** Battle + one tick (t = 0 spawns exist afterwards). `autoFinish:false`: the battles below outlive their enemies. */
|
||||
const run = (o) => makeBattle({ seed: 7, autoFinish: false, timeLimit: 400, hooks: HOOKS, captureNoisy: true, ...o }).step();
|
||||
/** No skill casts while a window is measured (a silence buff, as the other kit tests do). */
|
||||
const mute = (h, u) => h.b.addBuff(u, { key: 'test:mute', flags: { silence: true } });
|
||||
const approx = (a, b, msg = '', rel = 1e-9) => assert.ok(Math.abs(a - b) <= rel * Math.max(1, Math.abs(b)), `${msg} ${a} ≈ ${b}`);
|
||||
const median = (a) => { const s = [...a].sort((x, y) => x - y); return s[s.length >> 1]; };
|
||||
/** The enemies the ENGINE counts for `u` (the call traitMods.js itself makes: live range keys + its own profile). */
|
||||
const inRange = (h, u) => h.b.enemiesInKeys(u.rangeKeys, u, u.profile);
|
||||
/** The cadence the engine can actually produce: `atkCd` counts down in whole ticks, so a gap is ⌈interval/TICK⌉ ticks. */
|
||||
const cadence = (interval) => Math.ceil(interval / TICK - 1e-9) * TICK;
|
||||
/** Run `seconds` and return the gaps (s) between `u`'s consecutive ordinary attacks inside that window. */
|
||||
function attackGaps(h, u, seconds) {
|
||||
const t0 = h.b.time;
|
||||
h.run(seconds);
|
||||
const ts = h.hooksOf('attack').filter((c) => c.attacker === u && !c.isSkill && c.t >= t0 - 1e-9).map((c) => c.t);
|
||||
const gaps = [];
|
||||
for (let i = 1; i < ts.length; i++) gaps.push(ts[i] - ts[i - 1]);
|
||||
return gaps;
|
||||
}
|
||||
/** `chessId` on the board with `moduleId`, 1 dummy in range (the placement every REA-Y module test uses). */
|
||||
function board(id, o = {}) {
|
||||
return run({ defs: DEFS, units: [{ chessId: id, row: 10, col: 4, ...o }], enemies: [{ key: 'enemy_dummy', pos: [10, 5] }] });
|
||||
}
|
||||
/** Spawn dummies on the candidate tiles (skipping occupied ones) until `n` of them stand in `u`'s own range. */
|
||||
function spawnInRange(h, u, n, tiles = [[10, 5], [11, 5], [9, 5], [9, 4], [8, 5]]) {
|
||||
const occupied = new Set(h.enemies().map((e) => `${Math.round(e.y)},${Math.round(e.x)}`));
|
||||
const out = [];
|
||||
for (const pos of tiles) {
|
||||
if (inRange(h, u).length >= n) break;
|
||||
if (occupied.has(pos.join(','))) continue;
|
||||
out.push(h.spawn('enemy_dummy', { pos }));
|
||||
occupied.add(pos.join(','));
|
||||
h.step();
|
||||
}
|
||||
assert.ok(inRange(h, u).length >= n, `${u.defId}: ${n} enemies stand in its range (${inRange(h, u).length})`);
|
||||
return out;
|
||||
}
|
||||
const done = (h) => { checkInvariants(h.b); assert.equal(h.b.errors.length, 0, JSON.stringify(h.b.errors[0])); };
|
||||
|
||||
/** The two operators the engine serves; `legacy` = the buff key their deleted hand-written copy used. */
|
||||
const REA_Y = [
|
||||
// 圣约送葬人 chess_char_5_01_b: the module's number rides a HIDDEN module talent (`talentChanges[0].bb.attack_speed`)
|
||||
{ id: 'chess_char_5_01_b', moduleId: 'uniequip_003_excu2', legacy: 'excu2:module', base: 100 },
|
||||
// 隐德来希 chess_char_5_06_b: build-data folds it straight into `trait.bb`
|
||||
{ id: 'chess_char_5_06_b', moduleId: 'uniequip_003_etlchi', legacy: 'etlchi:module', base: 105 },
|
||||
];
|
||||
|
||||
// =================================================================================================================
|
||||
// 1. the two REA-Y beneficiaries: entered, left and re-entered, with the cadence measured
|
||||
|
||||
test('圣约送葬人 / 隐德来希 REA-Y: 1 名敌人 → 正好 base,2 名 → 正好 +12 点(不是 +24)且实测攻击间隔按 ASPD 比缩短,击杀后恢复,重新进范围再加回', () => {
|
||||
for (const { id, moduleId, legacy, base } of REA_Y) {
|
||||
const h = board(id, { moduleId });
|
||||
const u = h.unit(id);
|
||||
const rule = traitAttackSpeedRule(u.def);
|
||||
assert.equal(rule.value, 12, `${id}: the REA-Y line is +12`);
|
||||
assert.equal(rule.reason, 'ok', `${id}: the engine owns it`);
|
||||
assert.equal(rule.clause, '攻击范围内存在2名及以上敌人时', `${id}: read from the module sentence`);
|
||||
assert.equal(u.base.aspd, base, `${id}: base ASPD`);
|
||||
mute(h, u); // a skill that widened the range would move the measured condition under our feet
|
||||
|
||||
// --- one enemy in range: the 「存在2名及以上敌人」 clause does not hold, so nothing is installed
|
||||
h.run(1);
|
||||
assert.equal(inRange(h, u).length, 1, `${id}: exactly one enemy stands in its range`);
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, `${id}: 1 enemy → the module line is NOT installed`);
|
||||
assert.equal(u.findBuff(legacy), null, `${id}: the kit copy of the line is gone (${legacy})`);
|
||||
assert.equal(u.s.aspd, u.base.aspd, `${id}: 1 enemy → exactly the base (NOT base + 12: no kit + engine double count)`);
|
||||
approx(u.s.interval, u.base.bat * 100 / u.base.aspd, `${id}: interval = bat × 100 / aspd`);
|
||||
const g1 = attackGaps(h, u, 8);
|
||||
assert.ok(g1.length >= 4, `${id}: enough attacks to measure (${g1.length})`);
|
||||
approx(median(g1), cadence(u.s.interval), `${id}: baseline cadence matches the interval`, 0.02);
|
||||
|
||||
// --- a second enemy walks in: the stat is on within one tick
|
||||
const interval0 = u.s.interval;
|
||||
const second = h.spawn('enemy_dummy', { pos: [11, 5] });
|
||||
h.step();
|
||||
assert.equal(inRange(h, u).length, 2, `${id}: the second enemy is in range (the engine's own targeting)`);
|
||||
assert.equal(u.s.aspd, u.base.aspd + 12, `${id}: 2 enemies → +12 ASPD POINTS`);
|
||||
assert.notEqual(u.s.aspd, u.base.aspd + 24, `${id}: the engine rule only — the hand-written copy is deleted`);
|
||||
approx(u.s.interval, u.base.bat * 100 / (u.base.aspd + 12), `${id}: the shortened interval`);
|
||||
assert.ok(u.s.interval < interval0 - 1e-9, `${id}: the attack interval really shrank`);
|
||||
const buff = u.findBuff(TRAIT_ASPD_BUFF);
|
||||
assert.ok(buff, `${id}: the engine rule installed the buff`);
|
||||
assert.equal(buff.mods.aspd, 12, `${id}: 12 points`);
|
||||
const g2 = attackGaps(h, u, 8);
|
||||
approx(median(g2), cadence(u.s.interval), `${id}: buffed cadence matches the shortened interval`, 0.02);
|
||||
assert.ok(median(g2) < median(g1) - 0.02, `${id}: measured gaps shrank (${median(g2).toFixed(4)} < ${median(g1).toFixed(4)})`);
|
||||
approx(median(g1) / median(g2), (u.base.aspd + 12) / u.base.aspd, `${id}: the measured cadence ratio is the ASPD ratio`, 0.03);
|
||||
|
||||
// --- the condition is left: the stat goes away again
|
||||
h.b.dealDamage(null, second, { type: 'true', amount: 1e9 });
|
||||
h.step();
|
||||
assert.equal(second.alive, false, `${id}: the second enemy is dead`);
|
||||
assert.equal(u.s.aspd, u.base.aspd, `${id}: back to the baseline`);
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, `${id}: buff removed`);
|
||||
const g3 = attackGaps(h, u, 8);
|
||||
approx(median(g3), cadence(u.s.interval), `${id}: cadence back to the baseline interval`, 0.02);
|
||||
approx(median(g3), median(g1), `${id}: and back to the measured baseline cadence`, 0.03);
|
||||
|
||||
// --- and it comes back on a new enemy
|
||||
h.spawn('enemy_dummy', { pos: [11, 5] });
|
||||
h.step();
|
||||
assert.equal(u.s.aspd, u.base.aspd + 12, `${id}: re-entering the condition re-applies it`);
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF)?.mods.aspd, 12, `${id}: still 12 points`);
|
||||
done(h);
|
||||
}
|
||||
});
|
||||
|
||||
test('两名受益者的取值来源不同(隐藏天赋 / traitBb),引擎两条路都读;默认模组都没有这条词条', () => {
|
||||
// 圣约送葬人 REA-Y: `talentChanges[0]` targets the hidden talent, so the number is NOT on the trait blackboard
|
||||
const excu2 = ds.getChess('chess_char_5_01_b', { moduleId: 'uniequip_003_excu2' });
|
||||
const hidden = (excu2.raw.talents ?? []).filter((t) => t.index === -1);
|
||||
assert.equal(excu2.raw.trait.bb.attack_speed, undefined, '圣约送葬人: the number is not on trait.bb');
|
||||
assert.equal(hidden.length, 1, '圣约送葬人: …it is on the hidden module talent (index −1)');
|
||||
assert.equal(hidden[0].bb.attack_speed, 12, '圣约送葬人: +12 there');
|
||||
const r1 = traitAttackSpeedRule(excu2);
|
||||
assert.equal(r1.value, 12);
|
||||
assert.equal(r1.reason, 'ok');
|
||||
assert.equal(r1.clause, '攻击范围内存在2名及以上敌人时');
|
||||
assert.equal(plainText(r1.source), '攻击范围内存在2名及以上敌人时攻击速度+12');
|
||||
|
||||
// 隐德来希 REA-Y: build-data folded the line into trait.bb, and she has no hidden module talent at all
|
||||
const etlchi = ds.getChess('chess_char_5_06_b', { moduleId: 'uniequip_003_etlchi' });
|
||||
assert.equal(etlchi.raw.trait.bb.attack_speed, 12, '隐德来希: the number is on trait.bb');
|
||||
assert.deepEqual((etlchi.raw.talents ?? []).filter((t) => t.index === -1), [], '隐德来希: no hidden module talent');
|
||||
const r2 = traitAttackSpeedRule(etlchi);
|
||||
assert.equal(r2.value, 12);
|
||||
assert.equal(r2.reason, 'ok');
|
||||
assert.equal(r2.clause, '攻击范围内存在2名及以上敌人时');
|
||||
assert.equal(plainText(r2.source), '攻击范围内存在2名及以上敌人时攻击速度+12');
|
||||
|
||||
// the module has to be EQUIPPED: without it neither carries the line (no permanent rider on the default loadout)
|
||||
assert.equal(traitAttackSpeedRule(ds.getChess('chess_char_5_01_b')), null, '圣约送葬人 默认模组: no such line');
|
||||
assert.equal(traitAttackSpeedRule(ds.getChess('chess_char_5_06_b')), null, '隐德来希 默认模组: no such line');
|
||||
});
|
||||
|
||||
// =================================================================================================================
|
||||
// 2. regression — operators without the line
|
||||
|
||||
test('回归: 没有该词条的干员完全不变(3 名敌人也不动)', () => {
|
||||
for (const id of ['chess_char_1_01_a', 'chess_char_5_01_a']) { // 隐现; 圣约送葬人的 NORMAL 棋子(未装备 REA-Y)
|
||||
assert.equal(traitAttackSpeedRule(ds.getChess(id)), null, `${id}: no trait attack-speed line`);
|
||||
const h = board(id);
|
||||
const u = h.unit(id);
|
||||
mute(h, u);
|
||||
h.run(0.5);
|
||||
const as0 = u.s.aspd;
|
||||
spawnInRange(h, u, 3);
|
||||
h.run(0.5);
|
||||
assert.equal(u.s.aspd, as0, `${id}: ASPD unchanged with 3 enemies in range`);
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, `${id}: no engine buff`);
|
||||
done(h);
|
||||
}
|
||||
});
|
||||
|
||||
test('回归: 手写实现的那几条特性词条,引擎显式拒绝接管(防止二次加成)', () => {
|
||||
const cases = [
|
||||
['chess_char_3_05_b', null, 30, 'kit'], // DRE-Y 被击倒时不撤退 +30(kit: ops/chess_char_3_05-skadi.js)
|
||||
['chess_char_6_17_b', 'uniequip_003_nearl2', 30, 'kit'], // DRE-Y 耀骑士临光
|
||||
['chess_char_5_07_b', null, 8, 'kit'], // AFT-X 未阻挡 +8(史尔特尔)
|
||||
['chess_char_6_07_b', null, 8, 'kit'], // AFT-X 维娜·维多利亚
|
||||
['chess_char_5_08_b', 'uniequip_003_horn', 10, 'kit'], // FOR-Y 号角 不阻挡敌人时 +10
|
||||
['chess_char_5_17_b', null, 10, 'kit'], // FGT-Y 生命值高于50% +10(山)
|
||||
['chess_char_3_21_b', null, 8, 'kit'], // MAR-Y 空弦 范围内地面敌人 +8
|
||||
['chess_char_3_01_b', 'uniequip_003_angel', 8, 'kit'], // MAR-Y 能天使
|
||||
['chess_char_6_20_b', 'uniequip_003_agoat2', 8, 'kit'], // WDM-Y 纯烬艾雅法拉
|
||||
['chess_char_4_09_b', 'uniequip_004_mizuki', 50, 'mode'], // ISW-A 水月(集成战略专用,本模式不适用)
|
||||
];
|
||||
for (const [id, moduleId, value, reason] of cases) {
|
||||
const def = ds.getChess(id, moduleId ? { moduleId } : null);
|
||||
const r = traitAttackSpeedRule(def);
|
||||
assert.ok(r, `${id}: carries a trait attack-speed line`);
|
||||
assert.equal(r.value, value, `${id}: value`);
|
||||
assert.equal(r.condition, null, `${id}: the engine installs nothing`);
|
||||
assert.equal(r.reason, reason, `${id}: refused as '${reason}'`);
|
||||
assert.ok(r.clause.length > 0, `${id}: the clause it read is reported (${JSON.stringify(r.clause)})`);
|
||||
}
|
||||
});
|
||||
|
||||
test('回归: 史尔特尔 / 维娜·维多利亚 / 山 / 空弦 / 斯卡蒂 的数值与改动前一致(各自的 kit 路径照旧)', () => {
|
||||
// 史尔特尔 AFT-X: 未阻挡敌人时 +8
|
||||
{
|
||||
const h = run({ defs: DEFS, units: [{ chessId: 'chess_char_5_07_b', row: 10, col: 4 }], enemies: [{ key: 'enemy_dummy', pos: [10, 9] }] });
|
||||
const u = h.unit('chess_char_5_07_b');
|
||||
mute(h, u);
|
||||
const as = u.def.traitBb.attack_speed;
|
||||
assert.equal(as, 8, '史尔特尔: trait.bb 上的 +8');
|
||||
h.run(1);
|
||||
assert.equal(u.blocking.length, 0, '未阻挡');
|
||||
assert.equal(u.s.aspd, u.base.aspd + as, '未阻挡: kit 的 +8');
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, 'engine 未接管');
|
||||
done(h);
|
||||
}
|
||||
// 维娜·维多利亚 AFT-X: 未阻挡敌人时 +8
|
||||
{
|
||||
const h = run({ defs: DEFS, units: [{ chessId: 'chess_char_6_07_b', row: 10, col: 4 }], enemies: [{ key: 'enemy_dummy', pos: [10, 9] }] });
|
||||
const u = h.unit('chess_char_6_07_b');
|
||||
mute(h, u);
|
||||
const as = u.def.traitBb.attack_speed;
|
||||
assert.equal(as, 8, '维娜·维多利亚: trait.bb 上的 +8');
|
||||
h.run(1);
|
||||
assert.equal(u.blocking.length, 0, '未阻挡');
|
||||
assert.equal(u.s.aspd, u.base.aspd + as, '未阻挡: kit 的 +8');
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, 'engine 未接管');
|
||||
done(h);
|
||||
}
|
||||
// 山 FGT-Y: 生命值高于 50% 时 +10
|
||||
{
|
||||
const h = board('chess_char_5_17_b');
|
||||
const u = h.unit('chess_char_5_17_b');
|
||||
mute(h, u);
|
||||
const as = u.def.traitBb.attack_speed;
|
||||
assert.equal(as, 10, '山: trait.bb 上的 +10');
|
||||
h.run(1);
|
||||
assert.ok(u.hpRatio > 0.5, 'full HP');
|
||||
assert.equal(u.s.aspd, u.base.aspd + as, 'HP > 50 %: kit 的 +10');
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, 'engine 未接管');
|
||||
done(h);
|
||||
}
|
||||
// 空弦 MAR-Y: 范围内存在地面敌人时 +8 —— 数值在隐藏天赋上(与圣约送葬人同一个来源),kit(shared/tier3.js groundAspd)负责
|
||||
{
|
||||
const h = board('chess_char_3_21_b');
|
||||
const u = h.unit('chess_char_3_21_b');
|
||||
mute(h, u);
|
||||
const as = (u.def.raw.talents ?? []).find((t) => t.index === -1)?.bb.attack_speed;
|
||||
assert.equal(as, 8, '空弦: MAR-Y 的 +8 在隐藏天赋 (index −1) 上');
|
||||
h.run(1);
|
||||
assert.equal(u.s.aspd, u.base.aspd + as, '地面敌人在范围内: kit 的 +8');
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, 'engine 未接管');
|
||||
done(h);
|
||||
}
|
||||
// 斯卡蒂 DRE-Y: 被击倒时不撤退 + 攻击速度 +30(kit 的 trait:skadi_tide)
|
||||
{
|
||||
const h = run({ defs: DEFS, units: [{ chessId: 'chess_char_3_05_b', row: 10, col: 4 }], enemies: [{ key: 'enemy_dummy', pos: [10, 9] }] });
|
||||
const u = h.unit('chess_char_3_05_b');
|
||||
mute(h, u);
|
||||
const as = u.def.traitBb.attack_speed;
|
||||
assert.equal(as, 30, '斯卡蒂: trait.bb 上的 +30');
|
||||
h.run(0.5);
|
||||
assert.equal(u.s.aspd, u.base.aspd, 'before the lethal blow');
|
||||
h.b.dealDamage(null, u, { type: 'true', amount: 1e9 });
|
||||
h.step();
|
||||
assert.equal(u.alive, true, 'DRE-Y 不撤退');
|
||||
assert.ok(u.findBuff('trait:skadi_tide'), 'kit 的复活 buff');
|
||||
assert.equal(u.s.aspd, u.base.aspd + as, '复活后 +30(只有 kit 这一份)');
|
||||
assert.equal(u.findBuff(TRAIT_ASPD_BUFF), null, 'engine 未接管');
|
||||
done(h);
|
||||
}
|
||||
});
|
||||
|
||||
// =================================================================================================================
|
||||
// 3. the rule itself: what it reads, and that it installs nothing when unsure
|
||||
|
||||
test('规则解析: 条件子句 + 取值被显式报出;读不出条件 / 不认识的形状 → 什么都不装', () => {
|
||||
const def = ds.getChess('chess_char_5_01_b', { moduleId: 'uniequip_003_excu2' });
|
||||
const r = traitAttackSpeedRule(def);
|
||||
assert.equal(r.value, 12);
|
||||
assert.equal(r.reason, 'ok');
|
||||
assert.equal(r.clause, '攻击范围内存在2名及以上敌人时');
|
||||
assert.equal(typeof r.condition, 'function');
|
||||
assert.equal(plainText(r.source), '攻击范围内存在2名及以上敌人时攻击速度+12');
|
||||
assert.equal(conditionClause(r.source), '攻击范围内存在2名及以上敌人时');
|
||||
|
||||
// a line whose 「攻击速度」 comes first is unconditional → no clause → nothing installed (never a permanent stat)
|
||||
const tail = { ...def, raw: { ...def.raw, trait: { desc: '攻击速度+9,攻击力+1%', bb: { attack_speed: 9 } } } };
|
||||
const rt = traitAttackSpeedRule(tail);
|
||||
assert.equal(rt.value, 9);
|
||||
assert.equal(rt.reason, 'no-text', 'no condition clause → refused');
|
||||
assert.equal(rt.clause, '');
|
||||
assert.equal(rt.source, null);
|
||||
assert.equal(rt.condition, null, 'the engine installs nothing');
|
||||
|
||||
// an unknown clause shape
|
||||
const odd = { ...def, raw: { ...def.raw, trait: { desc: '心情好的时候攻击速度+9', bb: { attack_speed: 9 } } } };
|
||||
const ro = traitAttackSpeedRule(odd);
|
||||
assert.equal(ro.value, 9);
|
||||
assert.equal(ro.reason, 'unknown');
|
||||
assert.equal(ro.condition, null, 'an unrecognised condition never becomes a permanent stat');
|
||||
|
||||
// no trait attack-speed line at all
|
||||
assert.equal(traitAttackSpeedRule(ds.getChess('chess_char_1_01_a')), null);
|
||||
assert.equal(traitAttackSpeedRule(null), null);
|
||||
// tokens are never touched
|
||||
assert.equal(installTraitAttackSpeed({}, { kind: 'token' }), null);
|
||||
});
|
||||
|
||||
test('规则解析: 仇白 LOR-Y 同文案但数值写进具名天赋 —— 引擎连这条词条都看不到(她的 kit 负责,绝不二次加成)', () => {
|
||||
const def = ds.getChess('chess_char_6_15_b', { moduleId: 'uniequip_003_qiubai' });
|
||||
assert.equal(def.raw.trait.bb.attack_speed, undefined, 'trait.bb 上没有攻速');
|
||||
assert.deepEqual((def.raw.talents ?? []).filter((t) => t.index === -1), [], '也没有隐藏天赋');
|
||||
assert.equal(def.raw.talents[0].bb.attack_speed, 12, '数值在具名天赋 入隙 (index 0) 上');
|
||||
assert.equal(def.raw.talents[0].bb.cnt, 2, '连条件计数也一起');
|
||||
assert.equal(traitAttackSpeedRule(def), null, '引擎看不到 → 由 kits/ops/chess_char_6_15-qiubai.js 消费');
|
||||
});
|
||||
|
||||
test('覆盖锁定: 全数据 266 个棋子 × 全部模组选择里,被引擎接管的只有那两条 REA-Y,其余全部显式拒绝(unknown = 0)', () => {
|
||||
const installed = [];
|
||||
const refused = [];
|
||||
const reasons = {};
|
||||
let scanned = 0;
|
||||
for (const id of ds.chessIds()) {
|
||||
const rec = ds.rawChess(id);
|
||||
if (!rec) continue;
|
||||
const choices = [null, ...(rec.modules || []).map((m) => ({ moduleId: m.uniEquipId })), { moduleId: 'none' }];
|
||||
for (const lo of choices) {
|
||||
let d;
|
||||
try { d = ds.getChess(id, lo); } catch { continue; }
|
||||
if (!d) continue;
|
||||
scanned++;
|
||||
const r = traitAttackSpeedRule(d);
|
||||
if (!r) continue;
|
||||
const tag = `${id}|${lo?.moduleId ?? 'default'}|${r.value}|${r.reason}`;
|
||||
if (r.condition) installed.push(tag);
|
||||
else { refused.push(tag); reasons[r.reason] = (reasons[r.reason] ?? 0) + 1; }
|
||||
}
|
||||
}
|
||||
assert.ok(scanned > 500, `the whole data set was scanned (${scanned} defs)`);
|
||||
assert.deepEqual(installed.sort(), [
|
||||
'chess_char_5_01_b|uniequip_003_excu2|12|ok', // 圣约送葬人 REA-Y(数值在隐藏天赋上)
|
||||
'chess_char_5_06_b|uniequip_003_etlchi|12|ok', // 隐德来希 REA-Y(数值在 trait.bb 上)
|
||||
]);
|
||||
assert.deepEqual(Object.keys(reasons).sort(), ['kit', 'mode'], 'no silent gap — every refusal carries a known reason');
|
||||
assert.equal(reasons.unknown ?? 0, 0, 'nothing falls through as unknown');
|
||||
assert.ok((reasons.kit ?? 0) >= 13, `every other carrier is refused explicitly (${reasons.kit} kit)`);
|
||||
assert.equal(reasons.mode, 1, '集成战略专用的一条(水月 ISW-A)');
|
||||
assert.ok(refused.length >= 13, `refused lines (${refused.length})`);
|
||||
for (const t of refused) {
|
||||
assert.ok(/\|(kit|mode)$/.test(t), `refused with a known reason: ${t}`);
|
||||
}
|
||||
assert.ok(refused.some((t) => t.startsWith('chess_char_3_05_b|default|30|kit')), '斯卡蒂 DRE-Y is in the list');
|
||||
assert.ok(refused.some((t) => t.startsWith('chess_char_3_21_b|default|8|kit')), '空弦 MAR-Y is in the list');
|
||||
assert.ok(refused.some((t) => t.startsWith('chess_char_4_09_b|uniequip_004_mizuki|50|mode')), '水月 ISW-A is in the list');
|
||||
});
|
||||
|
||||
test('覆盖锁定(补位 / 自选): 每个补位干员和每个自选组合(池内干员 × 两种形态 × 技能 × 可选模组)都不被引擎接管', () => {
|
||||
// 0.2.2 maintainer addition to PR #293: the battle also fields 补位 stand-ins (getChess(id, { standIn: true })) and
|
||||
// 自选 picks (getChess(slot, { diy })) — 6★ operators whose own modules carry trait attack-speed lines. None may gain
|
||||
// the engine rule: their lines are either absent or owned by their kits (黑键 / 维伊 MSC-Y, 赤刃明霄陈 AFT, 重岳 / 贝洛内
|
||||
// FGT-Y, 止颂 DRE-Y → 'kit'); a module of another game mode is not a legal pick (isDiyModule, validateDiyPicks).
|
||||
const applied = [];
|
||||
const reasons = {};
|
||||
const tally = { standIn: 0, diy: 0 };
|
||||
const see = (kind, tag, d) => {
|
||||
tally[kind]++;
|
||||
const r = traitAttackSpeedRule(d);
|
||||
if (!r) return;
|
||||
if (r.condition) applied.push(`${kind} ${tag}`);
|
||||
reasons[r.reason] = (reasons[r.reason] ?? 0) + 1;
|
||||
};
|
||||
for (const id of ds.chessIds()) {
|
||||
let d;
|
||||
try { d = ds.getChess(id, { standIn: true }); } catch { d = null; }
|
||||
if (d) see('standIn', `${id}|${d.charId}`, d);
|
||||
}
|
||||
const backups = ds.rawBackups();
|
||||
for (const slotId of diySlotIds(ds)) {
|
||||
const slot = diySlot(slotId, ds);
|
||||
for (const chessId of [slot.baseId, slot.goldenId]) {
|
||||
const status = ds.rawChess(chessId)?.status;
|
||||
for (const charId of diyPool(slot.tier, { data: ds })) {
|
||||
const form = unitForm(backups, charId, status);
|
||||
if (!form) continue;
|
||||
const skills = (form.skills ?? []).map((sk) => sk.index);
|
||||
for (const skillIndex of skills.length ? skills : [null]) {
|
||||
for (const uniEquipId of [null, ...(form.modules ?? []).filter(isDiyModule).map((m) => m.uniEquipId)]) {
|
||||
let d;
|
||||
try { d = ds.getChess(chessId, { diy: { charId, skillIndex, uniEquipId } }); } catch { d = null; }
|
||||
if (d) see('diy', `${chessId}|${charId}|${skillIndex}|${uniEquipId}`, d);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
assert.ok(tally.standIn > 100, `every stand-in was scanned (${tally.standIn})`);
|
||||
assert.ok(tally.diy > 1000, `every 自选 combination was scanned (${tally.diy})`);
|
||||
assert.deepEqual(applied, [], 'no stand-in or 自选 pick gains the engine rule');
|
||||
assert.deepEqual(Object.keys(reasons).sort(), ['kit'], 'every line they carry is a kit-owned shape (no unknown, no other mode)');
|
||||
});
|
||||
@@ -1,6 +1,7 @@
|
||||
// Community report of 2026-10-06 「独行这种盟约是不能叠层的(顺便排查下还有没有类似的)」 (item 21). PRTS 卫戍协议:盟约 下半/
|
||||
// PRTS盟约记录, its header: 「下述盟约中部分盟约不会显示叠加层数,但是叠加层数的特质/策略/装备等效果仍然对其生效」 — the four
|
||||
// bonds.json `noStack` bonds (调和 协防干员 独行 绝技) do take layers (助力, 余, 华法琳 …), the game only never shows them. The
|
||||
// bonds.json `noStack` bonds (调和 协防干员 独行 绝技) do take layers (助力, 华法琳 … — not 余's 文火慢炖, the owner's decision
|
||||
// of 2026-10-08), the game only never shows them. The
|
||||
// bond strip and its popup hide them since 0.1.4 (PR #66, test/ui/feedback1b-bonds.test.js); the result card still printed
|
||||
// them (「独行 24」) and ordered its six bonds by them. resultBonds: no number, no rank for a hidden count.
|
||||
import { test } from 'node:test';
|
||||
|
||||
Reference in new issue
Block a user