feedback4: merge W4A — 高台 for every 「可以放置于远程位」 trait holder (歌蕾蒂娅, 崖心, 见行者, any form or module; PR #69's PRTS source), 阿戈尔 revive slots to the first 3 knocked out (one per operator, own savers take none), 联防 devour of whoever stands in front
This commit is contained in:
commit
13808e347a
24 files changed
+1056
-877
No files matched your search
+132
-78
@@ -374,38 +374,39 @@ test('阿戈尔 devour order: left first, then top first (row 0 is the bottom: t
|
||||
checkInvariants(h.b);
|
||||
});
|
||||
|
||||
test('阿戈尔 5: the first 3 members by position (left column first, top first) revive at once on their first knock-out, whatever the order of knock-outs; the others never; a second knock-out is final', () => {
|
||||
test('阿戈尔 5: the 3 slots go to the first 3 members knocked out, wherever they stand; a later first knock-out stays down; a second knock-out is final; 3 members: none', () => {
|
||||
const list = [];
|
||||
for (let i = 0; i < 5; i++) list.push([`g${i}_a`, ['egirShip'], { skill: { spCost: 30, initSp: 5, duration: 10 } }]);
|
||||
// one per row pair so nobody devours anybody: col 3 rows 9–12 (g0 bottom … g3 top), g4 at (9,5). PRTS 盟约记录 阿戈尔
|
||||
// "前3名【阿戈尔】干员首次被击倒时立刻复活", the first 3 being the first deployed — "更靠左和靠上": g3, g2, g1
|
||||
// "前3名【阿戈尔】干员首次被击倒时立刻复活"; the owner's decision of 2026-10-05: the first 3 knocked out, in knock-out order
|
||||
const units = list.map(([id], i) => ({ chessId: id, row: 9 + (i % 4), col: 3 + 2 * Math.floor(i / 4) }));
|
||||
const h = makeBattle({ defs: defsOf(list), units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: ['death', 'deploy'] });
|
||||
h.step(1);
|
||||
const us = list.map(([id]) => h.unit(id));
|
||||
const kill = (u) => h.b.dealDamage(null, u, { amount: 1e9, type: 'true' });
|
||||
const redeploys = (u) => h.hooksOf('deploy').filter((c) => c.unit === u && !c.initial).length;
|
||||
// knocked out first, yet no beneficiary: g0 (bottom of the first column) and g4 (second column) stay down
|
||||
for (const u of [us[0], us[4]]) {
|
||||
kill(u);
|
||||
assert.ok(!u.alive, `${u.defId} is not among the first 3 by position: no revive`);
|
||||
assert.equal(redeploys(u), 0);
|
||||
}
|
||||
us[1].skill.gainSp(20, 'test');
|
||||
us[0].skill.gainSp(20, 'test');
|
||||
const tiles = us.map((u) => [u.tileR, u.tileC]);
|
||||
for (const i of [1, 3, 2]) {
|
||||
// g4 (second column) and g0 (bottom of the first column) first — the last two by position — then g2
|
||||
for (const i of [4, 0, 2]) {
|
||||
const u = us[i];
|
||||
const before = redeploys(u);
|
||||
kill(u);
|
||||
assert.ok(u.alive && u.deployed, `member ${i} back on the field`);
|
||||
close(u.hp, u.s.maxHp);
|
||||
assert.deepEqual([u.tileR, u.tileC], tiles[i], 'same tile');
|
||||
assert.ok(h.hooksOf('death').some((c) => c.unit === u && c.reason === 'killed'), 'it was knocked out (被击倒 triggers fire)');
|
||||
assert.equal(redeploys(u), before + 1, `member ${i} redeployed`);
|
||||
assert.equal(redeploys(u), 1, `member ${i} redeployed`);
|
||||
}
|
||||
assert.equal(us[1].skill.sp, 5, 'a redeploy restarts from the initial SP');
|
||||
kill(us[1]);
|
||||
assert.ok(!us[1].alive, 'second knock-out is final');
|
||||
assert.equal(us[0].skill.sp, 5, 'a redeploy restarts from the initial SP');
|
||||
// the 3 are gone: g3 (top-left, first by position) and g1 stay down on their first knock-out
|
||||
for (const i of [3, 1]) {
|
||||
kill(us[i]);
|
||||
assert.ok(!us[i].alive, `member ${i}: no slot left`);
|
||||
assert.equal(redeploys(us[i]), 0);
|
||||
}
|
||||
kill(us[4]);
|
||||
assert.ok(!us[4].alive, 'a second knock-out is final');
|
||||
assert.equal(h.eventsOf('fx').filter((x) => x[1] === 'revive').length, 3, 'three revives');
|
||||
checkInvariants(h.b);
|
||||
// a member moved off its board tile (突袭 / relocation) revives where it was knocked out; later redeploys go home
|
||||
const hm = makeBattle({ defs: defsOf(list), units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: [] });
|
||||
@@ -424,44 +425,126 @@ test('阿戈尔 5: the first 3 members by position (left column first, top first
|
||||
assert.ok(!h3.unit('g3_a').alive);
|
||||
});
|
||||
|
||||
test('阿戈尔 5 + the devour chain (GitHub #33): the devour knocks out the food, only the members among the first 3 by position come back; the others keep theirs for the fight (normal and 联防)', () => {
|
||||
// one row, all facing right: 浊心斯卡蒂 → 乌尔比安 → 幽灵鲨 → 海霓 → 深巡 → 隐现. PRTS 盟约记录 阿戈尔 备注 "标记按付与顺序触发
|
||||
// 【吞噬】效果,目标首次被击倒后解除自身被付与但还未触发的【吞噬】效果". The 3 revives belong to the first 3 by position
|
||||
// (浊心斯卡蒂, 乌尔比安, 幽灵鲨 — community reports 「阿戈尔盟约复活有bug,只能复活一个干员」); until 0.1.3 the first 3
|
||||
// knocked out took them, so the food (幽灵鲨, 海霓, 深巡) spent all 3 at t = 0 and nobody came back in the fight
|
||||
const ids = ['chess_char_6_04_a', 'chess_char_5_05_a', 'chess_char_2_07_a', 'chess_char_3_09_a', 'chess_char_1_04_a', 'chess_char_1_01_a'];
|
||||
test('阿戈尔 5 + the devour chain (GitHub #33, #105, #140): the eaten members take the 3 slots in knock-out order, uneaten ones keep none — survivors = uneaten + 3 (normal and 联防)', () => {
|
||||
// row 10, all facing right: 浊心斯卡蒂 → 幽灵鲨 → 海霓 → 深巡 → 歌蕾蒂娅 → 隐现; 乌尔比安 on row 12 faces an empty tile.
|
||||
// PRTS 盟约记录 阿戈尔 备注 "标记按付与顺序触发【吞噬】效果,目标首次被击倒后解除自身被付与但还未触发的【吞噬】效果". Until 0.1.3
|
||||
// the slots belonged to the first 3 by position (浊心斯卡蒂, 乌尔比安, 幽灵鲨: two uneaten members held them, so only 幽灵鲨
|
||||
// of the food came back — "没被吃的阿戈尔干员也会占用复活名额", "无论食物链怎么吃最终都只有三名阿戈尔人存活")
|
||||
const ids = ['chess_char_6_04_a', 'chess_char_2_07_a', 'chess_char_3_09_a', 'chess_char_1_04_a', 'chess_char_4_12_a', 'chess_char_1_01_a'];
|
||||
const ULPIA = 'chess_char_5_05_a';
|
||||
for (const kind of ['normal', 'unite']) {
|
||||
const h = makeBattle({
|
||||
kind, units: ids.map((chessId, i) => ({ chessId, row: 10, col: 2 + i })), bonds: { egirShip: bondOn(5, 0, null, [3, 5]) },
|
||||
hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60,
|
||||
kind, units: [...ids.map((chessId, i) => ({ chessId, row: 10, col: 2 + i })), { chessId: ULPIA, row: 12, col: 3 }],
|
||||
bonds: { egirShip: bondOn(6, 0, null, [3, 5]) }, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60,
|
||||
});
|
||||
h.step(1);
|
||||
const [skadi, ulpia, ghost, hn, deep, fodder] = ids.map((id) => h.unit(id));
|
||||
// 浊心斯卡蒂 marks the whole row and resolves first; every later mark is on a unit already knocked out (乌尔比安's), or
|
||||
// comes from one (幽灵鲨's, 海霓's, 深巡's)
|
||||
const [skadi, ghost, hn, deep, glady, fodder] = ids.map((id) => h.unit(id));
|
||||
const ulpia = h.unit(ULPIA);
|
||||
// 浊心斯卡蒂 marks the whole row (through the members) and resolves first; every later mark is on a unit knocked out
|
||||
assert.deepEqual(tagged(h, 'bond:egir:devour').map((c) => [c.source.defId, c.target.defId]),
|
||||
[ulpia, ghost, hn, deep, fodder].map((t) => [skadi.defId, t.defId]), kind);
|
||||
[ghost, hn, deep, glady, fodder].map((t) => [skadi.defId, t.defId]), kind);
|
||||
const kos = (u) => h.hooksOf('death').filter((c) => c.unit === u && c.reason === 'killed').length;
|
||||
const revived = (u) => h.hooksOf('deploy').filter((c) => c.unit === u && !c.initial).length;
|
||||
for (const u of [ghost, hn, deep]) {
|
||||
assert.equal(h.hooksOf('death').filter((c) => c.unit === u && c.reason === 'killed').length, 1, `${kind}: ${u.defId} knocked out once`);
|
||||
}
|
||||
assert.equal(revived(ghost), 1, `${kind}: 幽灵鲨 (third by position) revived at once`);
|
||||
assert.equal(revived(hn) + revived(deep), 0, `${kind}: 海霓 and 深巡 (fourth, fifth) not revived`);
|
||||
for (const u of [ghost, hn, deep, glady]) assert.equal(kos(u), 1, `${kind}: ${u.defId} knocked out once`);
|
||||
for (const u of [ghost, hn, deep]) assert.equal(revived(u), 1, `${kind}: ${u.defId} (knocked out 1st–3rd) revived at once`);
|
||||
assert.equal(revived(glady), 0, `${kind}: 歌蕾蒂娅 (knocked out 4th) stays down`);
|
||||
assert.equal(kos(skadi) + kos(ulpia) + revived(skadi) + revived(ulpia), 0, `${kind}: the uneaten members take no slot`);
|
||||
h.run(3);
|
||||
for (const u of [skadi, ulpia, ghost]) assert.ok(u.alive && u.deployed && u.hp > 0, `${kind}: ${u.defId} standing`);
|
||||
for (const u of [hn, deep, fodder]) assert.ok(!u.alive, `${kind}: ${u.defId} down`);
|
||||
// 浊心斯卡蒂 and 乌尔比安 still hold theirs: their first knock-out in the fight is revived, 幽灵鲨's second is final
|
||||
for (const u of [skadi, ulpia]) {
|
||||
const members = [skadi, ghost, hn, deep, glady, ulpia];
|
||||
assert.deepEqual(members.filter((u) => u.alive).map((u) => u.defId), [skadi, ghost, hn, deep, ulpia].map((u) => u.defId),
|
||||
`${kind}: survivors = the 2 uneaten + 3`);
|
||||
assert.ok(!fodder.alive, `${kind}: the fodder (no member) is down`);
|
||||
// nothing is left for the fight: 浊心斯卡蒂's first knock-out and 幽灵鲨's second stay down
|
||||
for (const u of [skadi, ghost]) {
|
||||
h.b.dealDamage(null, u, { amount: 1e9, type: 'true' });
|
||||
assert.ok(u.alive && revived(u) === 1, `${kind}: ${u.defId} revived in the fight`);
|
||||
assert.ok(!u.alive, `${kind}: ${u.defId} stays down`);
|
||||
}
|
||||
h.b.dealDamage(null, ghost, { amount: 1e9, type: 'true' });
|
||||
assert.ok(!ghost.alive, `${kind}: 幽灵鲨 has no revive left`);
|
||||
checkInvariants(h.b);
|
||||
}
|
||||
});
|
||||
|
||||
test('阿戈尔 5 beneficiaries: fixed at battle start — a 联防 member entering down keeps the slot, a 调和 member is one, the mirrored boss side counts from its own left', () => {
|
||||
test('阿戈尔 5: a member devoured by several 阿戈尔 spends one slot at most — its pending marks are cancelled once it is knocked out', () => {
|
||||
// A (10,3) → B (10,4) → X (10,5) and C (11,5, facing DOWN) → X: three marks on X; D (12,8) faces an empty tile
|
||||
const list = [['A_a', ['egirShip']], ['B_a', ['egirShip']], ['X_a', ['egirShip']], ['C_a', ['egirShip']], ['D_a', ['egirShip']]];
|
||||
const defs = defsOf(list.map(([id, b]) => [id, b, { stats: { maxHp: 3000 } }]));
|
||||
const units = [
|
||||
{ chessId: 'A_a', row: 10, col: 3 }, { chessId: 'B_a', row: 10, col: 4 }, { chessId: 'X_a', row: 10, col: 5 },
|
||||
{ chessId: 'C_a', row: 11, col: 5, dir: 'DOWN' }, { chessId: 'D_a', row: 12, col: 8 },
|
||||
];
|
||||
const h = makeBattle({ defs, units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60 });
|
||||
h.step(1);
|
||||
const [a, b, x, c, d] = ['A_a', 'B_a', 'X_a', 'C_a', 'D_a'].map((id) => h.unit(id));
|
||||
const kos = (u) => h.hooksOf('death').filter((e) => e.unit === u && e.reason === 'killed').length;
|
||||
const revived = (u) => h.hooksOf('deploy').filter((e) => e.unit === u && !e.initial).length;
|
||||
// marked by A (through B), by B and by C; A's mark knocks it out, B's and C's are cancelled
|
||||
assert.deepEqual(tagged(h, 'bond:egir:devour').map((e) => [e.source.defId, e.target.defId]), [['A_a', 'B_a'], ['A_a', 'X_a']]);
|
||||
for (const u of [b, x]) assert.ok(u.alive && kos(u) === 1 && revived(u) === 1, `${u.defId}: one knock-out, one slot`);
|
||||
close(x.hp, x.s.maxHp, 1e-6, 'X at full HP: no second mark');
|
||||
// two slots used: D's first knock-out takes the third, C's stays down
|
||||
h.b.dealDamage(null, d, { amount: 1e9, type: 'true' });
|
||||
assert.ok(d.alive, 'D: the third slot');
|
||||
h.b.dealDamage(null, c, { amount: 1e9, type: 'true' });
|
||||
assert.ok(!c.alive, 'C: none left');
|
||||
assert.ok(a.alive && kos(a) === 0, 'A never knocked out');
|
||||
checkInvariants(h.b);
|
||||
// X with more HP survives A's and B's marks and falls to C's: still one knock-out, one slot
|
||||
const tough = defsOf(list.map(([id, bd]) => [id, bd, { stats: { maxHp: id === 'X_a' ? 8000 : 3000 } }]));
|
||||
const t = makeBattle({ defs: tough, units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60 });
|
||||
t.step(1);
|
||||
const tx = t.unit('X_a');
|
||||
assert.deepEqual(tagged(t, 'bond:egir:devour').map((e) => [e.source.defId, e.target.defId]), [['A_a', 'B_a'], ['A_a', 'X_a'], ['B_a', 'X_a'], ['C_a', 'X_a']]);
|
||||
assert.equal(t.hooksOf('death').filter((e) => e.unit === tx && e.reason === 'killed').length, 1, 'X knocked out once, by the third mark');
|
||||
assert.ok(tx.alive && t.eventsOf('fx').filter((e) => e[1] === 'revive').length === 2, 'B and X: two slots');
|
||||
checkInvariants(t.b);
|
||||
});
|
||||
|
||||
test('阿戈尔 5: an operator\'s own save uses no slot (斯卡蒂\'s DRE-Y, M3茧甲, 埃芒加德 [ASSUMED for the band]); the slot waits for its first real knock-out', () => {
|
||||
// 斯卡蒂 (elite, module DRE-Y by default) enters 联防 at half HP in front of 乌尔比安: his mark is lethal, DRE-Y saves her
|
||||
// (PRTS: once per deployment, full HP with max HP −60 %) — no knock-out, so no slot
|
||||
const SKADI = 'chess_char_3_05_b', ULPIA = 'chess_char_5_05_a', GHOST = 'chess_char_2_07_a', HN = 'chess_char_3_09_a', DEEP = 'chess_char_1_04_a';
|
||||
const h = makeBattle({
|
||||
kind: 'unite', autoFinish: false, timeLimit: 60, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true,
|
||||
units: [
|
||||
{ chessId: ULPIA, row: 10, col: 3 }, { chessId: SKADI, row: 10, col: 4, dir: 'UP', carryState: { hpPct: 0.5 } },
|
||||
{ chessId: GHOST, row: 12, col: 3 }, { chessId: HN, row: 12, col: 5 }, { chessId: DEEP, row: 12, col: 7 },
|
||||
],
|
||||
bonds: { egirShip: bondOn(5, 0, null, [3, 5]) },
|
||||
});
|
||||
h.step(1);
|
||||
const sk = h.unit(SKADI);
|
||||
assert.deepEqual(tagged(h, 'bond:egir:devour').map((c) => [c.source.defId, c.target.defId]), [[ULPIA, SKADI]]);
|
||||
assert.ok(sk.alive && buffOf(sk, 'trait:skadi_tide'), 'saved by her module');
|
||||
assert.equal(h.hooksOf('death').filter((c) => c.unit === sk).length, 0, 'not knocked out');
|
||||
assert.equal(h.eventsOf('fx').filter((x) => x[1] === 'revive' && x[4] && x[4].n).length, 0, 'no 阿戈尔 revive');
|
||||
const kill = (id) => { const u = h.unit(id); h.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); return u.alive; };
|
||||
// all 3 slots are still there: 幽灵鲨, 海霓 and then 斯卡蒂 (DRE-Y spent in this deployment) come back, 深巡 does not
|
||||
assert.deepEqual([GHOST, HN, SKADI, DEEP].map(kill), [true, true, true, false]);
|
||||
checkInvariants(h.b);
|
||||
|
||||
const list = [['g0_a', ['egirShip']], ['g1_a', ['egirShip']], ['g2_a', ['egirShip']], ['g3_a', ['egirShip']], ['g4_a', ['egirShip']]];
|
||||
const units = (it = {}) => list.map(([chessId], i) => ({ chessId, row: 9 + (i % 2) * 3, col: 3 + i, items: it[i] }));
|
||||
const killed = (b, id) => { const u = b.unit(id); b.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); return u; };
|
||||
// M3茧甲 (an item 复活, in place): g0 is saved, the 3 slots go to g1, g2, g3; g4 stays down
|
||||
const hi = makeBattle({ defs: defsOf(list), autoFinish: false, timeLimit: 60, hooks: ['death', 'deploy'], units: units({ 0: ['chess_item_4_12_e_a'] }), bonds: { egirShip: bondOn(5, 0, null, [3, 5]) } });
|
||||
hi.step(1);
|
||||
const g0 = killed(hi, 'g0_a');
|
||||
assert.ok(g0.alive && hi.hooksOf('death').filter((c) => c.unit === g0).length === 0, 'item: saved in place (no knock-out)');
|
||||
assert.deepEqual(['g1_a', 'g2_a', 'g3_a', 'g4_a'].map((id) => killed(hi, id).alive), [true, true, true, false], 'item: three slots left after the save');
|
||||
checkInvariants(hi.b);
|
||||
// 埃芒加德 (命结之秘: the battle's first 3 knock-downs revive in place — its own count, unchanged): g0, g1, g2 saved by it;
|
||||
// the 阿戈尔 slots then go to g3, g4 and g0's first real knock-out; g1's real one finds none
|
||||
const hb = makeBattle({ defs: defsOf(list), autoFinish: false, timeLimit: 60, hooks: ['death', 'deploy'], units: units(), bandId: 'band_ermengard', bonds: { egirShip: bondOn(5, 0, null, [3, 5]) } });
|
||||
hb.step(1);
|
||||
for (const id of ['g0_a', 'g1_a', 'g2_a']) {
|
||||
const u = killed(hb, id);
|
||||
assert.ok(u.alive && hb.hooksOf('death').filter((c) => c.unit === u).length === 0, `band: ${id} saved in place`);
|
||||
}
|
||||
assert.deepEqual(hb.eventsOf('fx').filter((x) => x[1] === 'revive' && x[4] && x[4].left != null).map((x) => x[4].left), [2, 1, 0], '埃芒加德 spent its 3');
|
||||
assert.deepEqual(['g3_a', 'g4_a', 'g0_a', 'g1_a'].map((id) => killed(hb, id).alive), [true, true, true, false], 'band: the 阿戈尔 slots are untouched');
|
||||
checkInvariants(hb.b);
|
||||
});
|
||||
|
||||
test('阿戈尔 5 slots in 联防 and on the boss field: a member entering down takes none until it is knocked out after standing up; a 调和 member takes one; a mirrored player counts its own knock-outs', () => {
|
||||
const list = [['g0_a', ['egirShip']], ['g1_a', ['egirShip']], ['g2_a', ['egirShip']], ['g3_a', ['egirShip']], ['g4_a', ['egirShip']], ['mani_a', ['maniShip']]];
|
||||
// five members in five columns (one per column, nobody in front of anybody): g0 col 3 … g4 col 7
|
||||
const units = list.slice(0, 5).map(([chessId], i) => ({ chessId, row: 9 + (i % 2) * 3, col: 3 + i }));
|
||||
@@ -470,8 +553,8 @@ test('阿戈尔 5 beneficiaries: fixed at battle start — a 联防 member enter
|
||||
h.b.dealDamage(null, u, { amount: 1e9, type: 'true' });
|
||||
return u.alive;
|
||||
};
|
||||
// 联防: g0 entered down (forced out before battleStart). The slots stay the first 3 by position — g0, g1, g2.
|
||||
// The forced exit is not a 击倒, so g0's charge waits until they stand back up. g3 is not promoted into it.
|
||||
// 联防: g0 entered down (forced out before battleStart — not a 击倒, so no slot); g4 and g3 take two slots, g0's first
|
||||
// knock-out after it stands back up takes the third, g1 finds none
|
||||
const hu = makeBattle({
|
||||
kind: 'unite', defs: defsOf(list), autoFinish: false, timeLimit: 60, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) },
|
||||
units: units.map((u, i) => (i === 0 ? { ...u, carryState: { down: true } } : u)),
|
||||
@@ -479,59 +562,30 @@ test('阿戈尔 5 beneficiaries: fixed at battle start — a 联防 member enter
|
||||
hu.step(1);
|
||||
const g0 = hu.unit('g0_a');
|
||||
assert.ok(!g0.alive, 'g0 forced out');
|
||||
assert.deepEqual(['g4_a', 'g3_a', 'g1_a', 'g2_a'].map((id) => revives(hu, id)), [false, false, true, true]);
|
||||
assert.deepEqual(['g4_a', 'g3_a'].map((id) => revives(hu, id)), [true, true]);
|
||||
assert.ok(hu.runUntil(() => g0.alive && g0.deployed, 25), 'g0 stands back up inside the redeploy time');
|
||||
assert.equal(revives(hu, 'g0_a'), true, 'g0 still held the first slot');
|
||||
hu.b.dealDamage(null, g0, { amount: 1e9, type: 'true' });
|
||||
assert.ok(!g0.alive, 'g0 has no second revive');
|
||||
assert.equal(revives(hu, 'g0_a'), true, 'g0: its first knock-out takes the third slot');
|
||||
assert.equal(revives(hu, 'g1_a'), false, 'g1: none left');
|
||||
checkInvariants(hu.b);
|
||||
// 调和 (an active 调和 member enjoys the core bonds) in the first column: one of the 3
|
||||
// 调和 (an active 调和 member enjoys the core bonds): knocked out first, it takes the first slot
|
||||
const hm = makeBattle({
|
||||
defs: defsOf(list), autoFinish: false, timeLimit: 60,
|
||||
units: [{ chessId: 'mani_a', row: 11, col: 2 }, ...units.slice(0, 4)],
|
||||
bonds: { egirShip: bondOn(5, 0, null, [3, 5]), maniShip: { count: 1, active: true, tier: 1, layers: 0 } },
|
||||
});
|
||||
hm.step(1);
|
||||
assert.deepEqual(['g2_a', 'mani_a', 'g0_a', 'g1_a'].map((id) => revives(hm, id)), [false, true, true, true]);
|
||||
// the right-hand boss player (mirrored): its board's left is the field's right — board cols 3, 4, 5 = field cols 17,
|
||||
// 16, 15 hold the revives (read in field columns from the left they would go to g4, g3, g2)
|
||||
assert.deepEqual(['mani_a', 'g3_a', 'g2_a', 'g0_a'].map((id) => revives(hm, id)), [true, true, true, false]);
|
||||
// the right-hand boss player (mirrored): the order of its own knock-outs, wherever they stand
|
||||
const hb = makeBattle({
|
||||
kind: 'boss', defs: defsOf(list), autoFinish: false, timeLimit: 60,
|
||||
players: [{ playerId: 'R1', side: 'R', colOffset: 8, units: units.map((u, i) => ({ ...u, uid: i + 1 })), bonds: { egirShip: bondOn(5, 0, null, [3, 5]) } }],
|
||||
});
|
||||
hb.step(1);
|
||||
assert.deepEqual(['g4_a', 'g3_a', 'g0_a', 'g1_a', 'g2_a'].map((id) => [hb.unit(id).tileC, revives(hb, id)]),
|
||||
[[13, false], [14, false], [17, true], [16, true], [15, true]]);
|
||||
[[13, true], [14, true], [17, true], [16, false], [15, false]]);
|
||||
checkInvariants(hb.b);
|
||||
});
|
||||
|
||||
test('阿戈尔 5: a beneficiary 埃芒加德 or M3茧甲 save in place has used its 阿戈尔 revive [ASSUMED]; the others keep theirs', () => {
|
||||
const list = [['g0_a', ['egirShip']], ['g1_a', ['egirShip']], ['g2_a', ['egirShip']], ['g3_a', ['egirShip']], ['g4_a', ['egirShip']]];
|
||||
const units = (it = {}) => list.map(([chessId], i) => ({ chessId, row: 9 + (i % 2) * 3, col: 3 + i, items: it[i] }));
|
||||
const kill = (h, id) => { const u = h.unit(id); h.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); return u; };
|
||||
for (const how of ['band', 'item']) {
|
||||
const h = makeBattle({
|
||||
defs: defsOf(list), autoFinish: false, timeLimit: 60, hooks: ['death', 'deploy'],
|
||||
units: units(how === 'item' ? { 0: ['chess_item_4_12_e_a'] } : {}), ...(how === 'band' ? { bandId: 'band_ermengard' } : {}),
|
||||
bonds: { egirShip: bondOn(5, 0, null, [3, 5]) },
|
||||
});
|
||||
h.step(1);
|
||||
// g0, g1, g2 (columns 3–5) hold the 阿戈尔 revives; g0 is saved in place first
|
||||
const g0 = kill(h, 'g0_a');
|
||||
assert.ok(g0.alive && h.hooksOf('death').filter((c) => c.unit === g0).length === 0, `${how}: saved in place (no knock-out)`);
|
||||
// 埃芒加德 saves the battle's first 3 knock-downs: its other 2 go to g3 and g4 (no 阿戈尔 beneficiaries)
|
||||
if (how === 'band') for (const id of ['g3_a', 'g4_a']) assert.ok(kill(h, id).alive, 'band revive');
|
||||
kill(h, 'g0_a');
|
||||
assert.ok(!g0.alive, `${how}: its 阿戈尔 revive went with the save — its first knock-out is final`);
|
||||
assert.equal(h.hooksOf('deploy').filter((c) => c.unit === g0 && !c.initial).length, 0);
|
||||
for (const id of ['g1_a', 'g2_a']) {
|
||||
const u = kill(h, id);
|
||||
assert.ok(u.alive && h.hooksOf('deploy').filter((c) => c.unit === u && !c.initial).length === 1, `${how}: ${id} revived by 阿戈尔`);
|
||||
}
|
||||
checkInvariants(h.b);
|
||||
}
|
||||
});
|
||||
|
||||
test('阿戈尔 devour, a unit back during the pass: a marker revived by the 5-tier revive still gives its marks; a target revived in place (埃芒加德) or redeployed (不屈) takes none', () => {
|
||||
// g1 (10,3) → g2 (10,4, 3000 × 1.35 HP: knocked out by g1's mark, revived) → g3 (10,5) → fodder (10,6); g4 / g5 face empty tiles
|
||||
const list = [
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
// test/content/feedback4-egir-unite.test.js — 阿戈尔's battle-start devour in 联防 (GitHub #105, #140 comment 4; the
|
||||
// owner's decision of 2026-10-05). PRTS 盟约记录 阿戈尔: "战斗开始时【阿戈尔】干员依次吞噬身前一格干员" — no own-side limit:
|
||||
// the operator on the front tile is devoured whoever owns it, a teammate's living operator or a teammate's operator
|
||||
// that entered 联防 knocked out (carry.down, forced out right after the deployment), and the marker gains its base ATK
|
||||
// and block count exactly as in a solo battle. 联防 still adds no layers ("该阶段不能叠加层数"). The remake's two 联防
|
||||
// helpers stand on board cols 3–9 and 11–17 (colOffset 8) with the road column 10 between them, so these fields put the
|
||||
// teammate's operator on col 10 (a LOW tile the sim deploys on) to be in front. The last test runs the own-board case
|
||||
// through unite.js's carry: a chain whose food is down since the own combat gives 联防 the gains of the own combat.
|
||||
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { makeBattle, checkInvariants } from '../helpers/battleHarness.js';
|
||||
import { uniteBattleOpts } from '../../server/match/unite.js';
|
||||
import { makeMatch } from '../match/harness.js';
|
||||
import { FORCED_EXIT } from '../../server/sim/constants.js';
|
||||
|
||||
const close = (a, b, eps = 1e-6, msg = '') => assert.ok(Math.abs(a - b) <= eps, `${msg} expected ${b}, got ${a}`);
|
||||
const bondOn = (count, layers = 0) => ({ count, active: count >= 3, tier: count >= 5 ? 2 : count >= 3 ? 1 : 0, layers });
|
||||
const buffOf = (u, key) => u.buffs.find((b) => b.key === key) ?? null;
|
||||
const devours = (h) => h.hooksOf('damaged').filter((c) => c.dmg && c.dmg.tags && c.dmg.tags.includes('bond:egir:devour'));
|
||||
|
||||
const ULPIA = 'chess_char_5_05_a', GHOST = 'chess_char_2_07_a', GLADY = 'chess_char_4_12_a', DEEP = 'chess_char_1_04_a';
|
||||
const HN = 'chess_char_3_09_a', MIZUKI = 'chess_char_4_09_a', FODDER = 'chess_char_1_01_a';
|
||||
|
||||
/** p1's 3 阿戈尔: 乌尔比安 on (10,9) facing right — its front tile is field (10,10) — and two facing empty tiles. */
|
||||
const p1Units = () => [
|
||||
{ uid: 1, kind: 'chess', chessId: ULPIA, row: 10, col: 9, dir: 'RIGHT' },
|
||||
{ uid: 2, kind: 'chess', chessId: GLADY, row: 12, col: 3, dir: 'RIGHT' },
|
||||
{ uid: 3, kind: 'chess', chessId: DEEP, row: 12, col: 5, dir: 'RIGHT' },
|
||||
];
|
||||
const player = (playerId, seat, colOffset, units, bonds) => ({ playerId, seat, side: 'L', colOffset, units, bonds, bandId: null, playerEffects: [] });
|
||||
|
||||
/**
|
||||
* A battle where `front` (chess ids, left to right) stands on field (10,10), (10,11) …: owned by p1 itself (`owner`
|
||||
* 'own', board cols 10, 11 …) or by the teammate p2 (`owner` 'mate', colOffset 8: board cols 2, 3 …).
|
||||
*/
|
||||
function field({ kind = 'unite', owner = 'own', front = [FODDER], extra = {}, p2Bonds = {}, p2Units = [] } = {}) {
|
||||
const lane = front.map((chessId, i) => ({ uid: 100 + i, kind: 'chess', chessId, row: 10, dir: 'RIGHT', ...(extra[i] || {}) }));
|
||||
const players = owner === 'own'
|
||||
? [player('p1', 0, 0, [...p1Units(), ...lane.map((u, i) => ({ ...u, col: 10 + i }))], { egirShip: bondOn(3, 10) })]
|
||||
: [player('p1', 0, 0, p1Units(), { egirShip: bondOn(3, 10) }),
|
||||
player('p2', 1, 8, [...lane.map((u, i) => ({ ...u, col: 2 + i })), ...p2Units], p2Bonds)];
|
||||
const h = makeBattle({ kind, players, autoFinish: false, timeLimit: 60, hooks: ['damaged', 'death', 'deploy', 'kill', 'layerGain'], captureNoisy: true });
|
||||
h.step();
|
||||
return h;
|
||||
}
|
||||
|
||||
test('联防: an 阿戈尔 devours a teammate\'s living operator in front — the same base ATK and block count as an own one, the 物理流失 lands, no layers', () => {
|
||||
const solo = field({ kind: 'normal' });
|
||||
const own = field();
|
||||
const mate = field({ owner: 'mate' });
|
||||
const ref = buffOf(solo.unit(1), 'bond:egir:devour');
|
||||
const fodderBase = solo.unit(100).base;
|
||||
assert.ok(ref, 'solo: 乌尔比安 devours the operator in front');
|
||||
close(ref.mods.atkFlat, fodderBase.atk, 1e-9, 'its base ATK');
|
||||
assert.equal(ref.mods.blockCnt, fodderBase.blockCnt, 'its block count');
|
||||
for (const [tag, h] of [['own', own], ['teammate\'s', mate]]) {
|
||||
const ulpia = h.unit(1), t = h.unit(100);
|
||||
assert.deepEqual(buffOf(ulpia, 'bond:egir:devour')?.mods, ref.mods, `${tag}: the solo gains`);
|
||||
close(ulpia.s.atk, own.unit(1).s.atk, 1e-6, `${tag}: 乌尔比安's ATK`);
|
||||
assert.equal(ulpia.s.blockCnt, solo.unit(1).s.blockCnt, `${tag}: the block count`);
|
||||
const d = devours(h);
|
||||
assert.deepEqual(d.map((c) => [c.source.uid, c.target.uid]), [[1, 100]], `${tag}: one mark`);
|
||||
close(d[0].amount, devours(solo)[0].amount, 1e-6, `${tag}: the same 物理流失`);
|
||||
assert.ok(!t.alive && h.hooksOf('kill').some((c) => c.victim === t && c.killer === ulpia), `${tag}: knocked out, credited to 乌尔比安`);
|
||||
assert.equal(h.b.getPlayer('p1').bonds.egirShip.layers, 10, `${tag}: 联防 adds no layers`);
|
||||
assert.equal(h.hooksOf('layerGain').length, 0, `${tag}: no layer gain at all`);
|
||||
checkInvariants(h.b);
|
||||
}
|
||||
assert.equal(solo.b.getPlayer('p1').bonds.egirShip.layers, 10 + 1, 'solo: the devoured tier as layers');
|
||||
assert.equal(mate.unit(100).ownerId, 'p2');
|
||||
});
|
||||
|
||||
test('联防: a teammate\'s operator that entered 联防 down is devoured as if it stood — the same gains, nothing lands on it, it stays forced out', () => {
|
||||
const up = field({ owner: 'mate' });
|
||||
const down = field({ owner: 'mate', extra: { 0: { carryState: { down: true } } } });
|
||||
const ownDown = field({ extra: { 0: { carryState: { down: true } } } });
|
||||
const t = down.unit(100);
|
||||
assert.ok(!t.alive && t.removeReason === FORCED_EXIT && down.b.isDown(t), 'the teammate\'s operator lies on (10,10), forced out');
|
||||
for (const [tag, h] of [['teammate\'s', down], ['own', ownDown]]) {
|
||||
assert.deepEqual(buffOf(h.unit(1), 'bond:egir:devour')?.mods, buffOf(up.unit(1), 'bond:egir:devour').mods, `${tag} down: the gains of the standing one`);
|
||||
assert.equal(devours(h).length, 0, `${tag} down: no 物理流失 on it`);
|
||||
assert.equal(h.hooksOf('death').filter((c) => c.unit === h.unit(100) && c.reason === 'killed').length, 0, `${tag} down: no knock-out`);
|
||||
assert.equal(h.b.getPlayer('p1').bonds.egirShip.layers, 10, `${tag} down: no layers`);
|
||||
checkInvariants(h.b);
|
||||
}
|
||||
});
|
||||
|
||||
test('联防: the chain goes on through a teammate\'s 阿戈尔 — the gains equal the same chain of own operators; its knock-out spends its owner\'s 5-tier slot', () => {
|
||||
const own = field({ front: [GHOST, FODDER] });
|
||||
// p2 holds 5 阿戈尔 (5-tier active): 幽灵鲨 in front of 乌尔比安, four more on its board facing empty tiles
|
||||
const p2Units = [HN, MIZUKI, GLADY, DEEP].map((chessId, i) => ({ uid: 200 + i, kind: 'chess', chessId, row: 12, col: 3 + 2 * i, dir: 'RIGHT' }));
|
||||
const mate = field({ owner: 'mate', front: [GHOST, FODDER], p2Units, p2Bonds: { egirShip: bondOn(5) } });
|
||||
const ref = buffOf(own.unit(1), 'bond:egir:devour');
|
||||
close(ref.mods.atkFlat, own.unit(100).base.atk + own.unit(101).base.atk, 1e-9, 'own chain: 幽灵鲨 and, through her, the fodder');
|
||||
assert.deepEqual(buffOf(mate.unit(1), 'bond:egir:devour')?.mods, ref.mods, 'the teammate\'s chain gives the same');
|
||||
assert.deepEqual(devours(mate).map((c) => [c.source.uid, c.target.uid]), devours(own).map((c) => [c.source.uid, c.target.uid]));
|
||||
const ghost = mate.unit(100);
|
||||
assert.equal(mate.hooksOf('death').filter((c) => c.unit === ghost && c.reason === 'killed').length, 1, '幽灵鲨 knocked out by p1\'s mark');
|
||||
assert.ok(ghost.alive && mate.hooksOf('deploy').some((c) => c.unit === ghost && !c.initial), 'p2\'s 5-tier revives her at once');
|
||||
assert.ok(!own.unit(100).alive, 'p1 has no 5-tier: its own 幽灵鲨 stays down');
|
||||
assert.equal(mate.b.getPlayer('p1').bonds.egirShip.layers, 10, 'no layers');
|
||||
checkInvariants(mate.b);
|
||||
});
|
||||
|
||||
// ---------------------------------------------------------------------------------------------------------------------
|
||||
// the own board through unite.js: a chain whose food is down since the own combat
|
||||
|
||||
let gdCache = null;
|
||||
const gd = () => (gdCache ??= makeMatch({ mode: 'coop', humans: 3, seed: 1, fake: true }).start().m.gd);
|
||||
|
||||
test('联防 through unite.js: food knocked out by the own combat\'s devour enters down, and 乌尔比安 gets exactly the own combat\'s base ATK and block count', () => {
|
||||
// 乌尔比安 → 幽灵鲨 → 歌蕾蒂娅 → fodder on row 10 (3 阿戈尔: no revive), 30 s own combat
|
||||
const ids = [ULPIA, GHOST, GLADY, FODDER];
|
||||
const units = ids.map((chessId, i) => ({ uid: i + 1, kind: 'chess', chessId, row: 10, col: 3 + i, dir: 'RIGHT', items: [] }));
|
||||
const bonds = { egirShip: bondOn(3, 10) };
|
||||
const own = makeBattle({ players: [player('p1', 0, 0, units, bonds)], autoFinish: false, timeLimit: 30 });
|
||||
own.runToEnd(60);
|
||||
const gain = buffOf(own.unit(1), 'bond:egir:devour').mods;
|
||||
const unitsEnd = own.result().perPlayer.p1.unitsEnd;
|
||||
assert.deepEqual(unitsEnd.filter((u) => !u.alive).map((u) => u.uid).sort(), [2, 3, 4], 'the food is down at the end');
|
||||
// the helper's 联防 input as unite.js builds it from that result
|
||||
const ps = {
|
||||
playerId: 'p1', seat: 0,
|
||||
board: new Map(units.map((u) => [`${u.row},${u.col}`, { uid: u.uid, kind: 'chess' }])),
|
||||
battleInput: ({ side, colOffset, carry }) => ({
|
||||
...player('p1', 0, colOffset, units.map((u) => ({ ...u, ...(carry.has(u.uid) ? { carryState: carry.get(u.uid) } : {}) })), bonds), side,
|
||||
}),
|
||||
};
|
||||
const m = { gd: gd(), round: 3, lastResults: new Map([['p1', { unitsEnd }]]), dispatch() {} };
|
||||
const { players } = uniteBattleOpts(m, { helpers: [ps], leaked: [] }, 60);
|
||||
assert.deepEqual(players[0].units.filter((u) => u.carryState?.down).map((u) => u.uid), [2, 3, 4]);
|
||||
const u = makeBattle({ kind: 'unite', players, autoFinish: false, timeLimit: 60 });
|
||||
u.step();
|
||||
const ulpia = u.unit(1);
|
||||
assert.deepEqual(buffOf(ulpia, 'bond:egir:devour')?.mods, gain, 'the own combat\'s gains');
|
||||
close(gain.atkFlat, [2, 3, 4].reduce((s, uid) => s + u.unit(uid).base.atk, 0), 1e-9, '幽灵鲨 + 歌蕾蒂娅 + fodder base ATK');
|
||||
assert.equal(gain.blockCnt, [2, 3, 4].reduce((s, uid) => s + u.unit(uid).base.blockCnt, 0));
|
||||
for (const uid of [2, 3, 4]) assert.ok(!u.unit(uid).alive && u.unit(uid).removeReason === FORCED_EXIT, `${uid} forced out`);
|
||||
assert.equal(u.b.getPlayer('p1').bonds.egirShip.layers, 10, 'no layers in 联防');
|
||||
checkInvariants(u.b);
|
||||
});
|
||||
+106
-104
@@ -122,7 +122,7 @@
|
||||
"snaps": "b677776a 05df3ce3 3f4ea1ef 7c86ba28 c343548f 5e5789b8"
|
||||
},
|
||||
"bond-deputShip-high": {
|
||||
"about": "助力 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_12_b chess_char_1_06_b chess_char_1_13_b chess_char_2_14_b chess_char_1_06_a chess_char_1_13_a chess_char_4_10_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "助力 high: tier 2 layers 999; chess_char_4_11_b chess_char_1_06_b chess_char_1_13_b chess_char_2_14_b chess_char_1_06_a chess_char_1_13_a chess_char_4_10_b chess_char_4_12_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": true,
|
||||
"kind": "normal",
|
||||
"stageId": "act2autochess_m03",
|
||||
@@ -130,8 +130,8 @@
|
||||
"round": 10,
|
||||
"seed": 1208009840,
|
||||
"waveId": "act1autochess_h03",
|
||||
"time": 101.97,
|
||||
"ticks": 3059,
|
||||
"time": 98.27,
|
||||
"ticks": 2948,
|
||||
"reason": "cleared",
|
||||
"killed": 8,
|
||||
"total": 8,
|
||||
@@ -139,27 +139,27 @@
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 1,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":129773,"bossDmg":0,"heal":7530,"deaths":0,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":129773,"bossDmg":0,"heal":7138,"deaths":0,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,5,0,0,0,0,0,0],
|
||||
["p1",2,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,6,0,14088,0,0,8,1],
|
||||
["p1",3,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1044.45,1,7,4,47025,6060,2478,45,3],
|
||||
["p1",4,"op","chess_char_1_13_b",1,"uniequip_002_podego",815.5,1,9,1,36853,0,0,38,5],
|
||||
["p1",5,"op","chess_char_2_14_b",1,"uniequip_002_flower",1544,1,10,0,0,160,4465,22,2],
|
||||
["p1",6,"op","chess_char_1_06_a",1,null,1137,1,11,1,21655,1572,587,40,1],
|
||||
["p1",7,"op","chess_char_1_13_a",1,null,913,1,4,0,870,0,0,1,1],
|
||||
["p1",8,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,8,1,9282,95,0,7,2],
|
||||
["p1",2,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1017.15,1,7,2,42201,5880,2440,41,3],
|
||||
["p1",3,"op","chess_char_1_13_b",1,"uniequip_002_podego",815.5,1,9,1,34934,0,0,35,5],
|
||||
["p1",4,"op","chess_char_2_14_b",1,"uniequip_002_flower",1544,1,10,0,0,0,4084,19,1],
|
||||
["p1",5,"op","chess_char_1_06_a",1,null,1137,1,11,1,21655,1548,587,40,1],
|
||||
["p1",6,"op","chess_char_1_13_a",1,null,913,1,4,0,0,0,0,0,0],
|
||||
["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,8,1,12717,64,0,9,2],
|
||||
["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,6,2,18266,31,28,10,1],
|
||||
["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null],
|
||||
["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null],
|
||||
["-","~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_1005_yokai_2":[4,4,0,96,5357],"enemy_1005_yokai_3":[2,2,0,1022,69120],"enemy_9009_acfort":[2,2,0,709,55296]},
|
||||
"hooks": [1,21,3059,230,230,369,369,234,8,8,15,12,0,11504,115,0,8,0,1,7,0,0,0],
|
||||
"events": {"atk":230,"deploy":10,"die":8,"dmg":369,"fx":37,"heal":205,"skill":27,"spawn":21,"status":84},
|
||||
"fx": {"beam":2,"counter":16,"pull":1,"slippery":2,"taunt":4,"tornado":1,"tornadoPulse":5,"zone":6},
|
||||
"snaps": "f7c1fb30 f778388d 11849b13 7f8feebb 1cf8e108 fe9861c9 f8b5d1a0 8331d55b 5e3c8779 87f00fe0 a72ffac2"
|
||||
"enemies": {"enemy_1005_yokai_2":[4,4,0,96,5357],"enemy_1005_yokai_3":[2,2,0,862,69120],"enemy_9009_acfort":[2,2,0,685,55296]},
|
||||
"hooks": [1,21,2948,217,217,357,357,231,8,8,13,11,0,11234,107,0,8,0,1,7,0,0,0],
|
||||
"events": {"atk":217,"deploy":10,"die":8,"dmg":357,"fx":36,"heal":189,"skill":24,"spawn":21,"status":80},
|
||||
"fx": {"beam":2,"counter":16,"pull":1,"slippery":2,"taunt":4,"tornado":1,"tornadoPulse":5,"zone":5},
|
||||
"snaps": "f66ffc26 0aedc293 48dbf768 e46fb28f af06619a 9bc3f9d6 ea76c807 fc688b81 22b52f32 978323eb"
|
||||
},
|
||||
"bond-egirShip-low": {
|
||||
"about": "阿戈尔 low: tier 1 layers 1; chess_char_1_04_a chess_char_3_16_a chess_char_2_07_a chess_char_3_18_a chess_char_3_05_a chess_char_3_14_a chess_char_3_17_a chess_char_3_19_a token_10028_vigil_wolf",
|
||||
@@ -321,7 +321,7 @@
|
||||
"snaps": "48d2a0bc 7a5c72a3 804d5560 8c6ca634 c9bf651b 26081476 486ac1ff 38cf6fca 1c52bb36 3480567c b20bd7bb 65dfc07e"
|
||||
},
|
||||
"bond-indomShip-low": {
|
||||
"about": "不屈 low: tier 1 layers 1; chess_char_1_20_a chess_char_4_11_a chess_char_4_12_a chess_char_2_12_a chess_char_4_09_a chess_char_4_10_a chess_char_4_13_a chess_char_4_14_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "不屈 low: tier 1 layers 1; chess_char_1_20_a chess_char_4_11_a chess_char_2_12_a chess_char_4_09_a chess_char_4_10_a chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "normal",
|
||||
"stageId": "act1autochess_m03",
|
||||
@@ -329,36 +329,38 @@
|
||||
"round": 5,
|
||||
"seed": 1441167629,
|
||||
"waveId": "act1autochess_05",
|
||||
"time": 54.53,
|
||||
"ticks": 1636,
|
||||
"time": 62.9,
|
||||
"ticks": 1887,
|
||||
"reason": "cleared",
|
||||
"killed": 18,
|
||||
"total": 18,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 17,
|
||||
"rngDraws": 12,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":18,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":86976,"bossDmg":0,"heal":245,"deaths":3,"layerGains":{"indomShip":2}}},
|
||||
"players": {
|
||||
"p1": {"killed":18,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":86976,"bossDmg":0,"heal":1462,"deaths":3,"layerGains":{"indomShip":2}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_1_20_a",1,null,2198,1,4,0,0,0,0,0,0],
|
||||
["p1",2,"op","chess_char_4_11_a",1,null,2144,1,5,0,0,0,0,0,0],
|
||||
["p1",3,"op","chess_char_4_12_a",2,null,1311.76,1,7,2,11330,687,245,24,1],
|
||||
["p1",4,"op","chess_char_2_12_a",1,null,668.98,1,34,1,945,1545,0,22,2],
|
||||
["p1",5,"op","chess_char_4_09_a",1,null,1909.15,1,10,8,39617,228,0,16,2],
|
||||
["p1",6,"op","chess_char_4_10_a",1,null,1029.36,1,6,6,16627,259,0,17,1],
|
||||
["p1",7,"op","chess_char_4_13_a",1,null,0,0,9,0,13012,1587,0,22,5],
|
||||
["p1",8,"op","chess_char_4_14_a",1,null,0,0,11,1,5446,1276,0,8,1],
|
||||
["p1",1,"op","chess_char_1_20_a",1,null,1148.2,1,5,0,354,1050,0,21,0],
|
||||
["p1",2,"op","chess_char_4_11_a",1,null,0,0,6,0,0,3002,0,0,1],
|
||||
["p1",3,"op","chess_char_2_12_a",1,null,1107,1,34,0,141,1107,0,8,2],
|
||||
["p1",4,"op","chess_char_4_09_a",1,null,1978.85,1,9,7,39160,159,0,13,1],
|
||||
["p1",5,"op","chess_char_4_10_a",1,null,1288,1,7,4,22387,0,0,17,1],
|
||||
["p1",6,"op","chess_char_4_12_a",2,null,802.65,1,10,0,0,2414,1462,0,0],
|
||||
["p1",7,"op","chess_char_4_13_a",1,null,0,0,11,0,6895,1587,0,13,2],
|
||||
["p1",8,"op","chess_char_4_14_a",1,null,1276,1,4,7,18039,0,0,11,4],
|
||||
["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null],
|
||||
["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null],
|
||||
["-","~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_1158_divman":[15,15,0,2779,57024],"enemy_1160_hvyslr":[2,2,0,1458,23040],"enemy_1161_tidmag":[1,1,0,1346,6912]},
|
||||
"hooks": [1,32,1636,158,158,248,250,168,21,21,12,10,0,5617,221,3,18,0,1,21,1,0,7],
|
||||
"events": {"atk":195,"deploy":11,"die":21,"dmg":245,"fx":44,"layer":1,"skill":22,"spawn":31,"status":97},
|
||||
"fx": {"dilemma":2,"displace":8,"dodge":7,"explosion":1,"frostNova":5,"garrison":1,"levitate":7,"pull":1,"revive":1,"shield":2,"slippery":1,"splash":2,"tornado":1,"tornadoPulse":5},
|
||||
"snaps": "8db24db5 69482d02 bf502995 575947d9 47ac9ccf a8929550"
|
||||
"enemies": {"enemy_1158_divman":[15,15,0,2085,57024],"enemy_1160_hvyslr":[2,2,0,4543,23040],"enemy_1161_tidmag":[1,1,0,2691,6912]},
|
||||
"hooks": [1,32,1887,159,159,249,257,1001,21,21,11,11,0,5499,102,7,18,0,1,21,1,1,3],
|
||||
"events": {"atk":207,"deploy":11,"die":21,"dmg":257,"fx":25,"layer":1,"skill":22,"spawn":31,"status":80},
|
||||
"fx": {"burst":1,"dilemma":1,"dodge":3,"explosion":4,"frostNova":2,"garrison":1,"levitate":7,"overclock":1,"shield":2,"slippery":1,"splash":2},
|
||||
"snaps": "910f43b9 691d4675 c5aa756a 98b2fa4d ce14416b c2b3dc9f f49377cb"
|
||||
},
|
||||
"bond-indomShip-high": {
|
||||
"about": "不屈 high: tier 2 layers 999; chess_char_1_20_b chess_char_3_16_b chess_char_4_23_b chess_char_5_01_b chess_char_2_12_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b",
|
||||
@@ -853,7 +855,7 @@
|
||||
"snaps": "d2b18fc5 bd98a396 2815c1da cd98bca5 f9430f26 13b06e1e c8764716 073aa206 ddb6d29d c8d7eba3 26ac5044 a58c61f6 2c76342d ae7f4a4d 301020be c76c6184"
|
||||
},
|
||||
"bond-preciShip-low": {
|
||||
"about": "精准 low: tier 1 layers 1; chess_char_4_11_a chess_char_4_12_a chess_char_4_04_a chess_char_4_07_a chess_char_4_09_a chess_char_1_09_a chess_char_1_17_a chess_char_4_10_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "精准 low: tier 1 layers 1; chess_char_4_11_a chess_char_4_04_a chess_char_4_07_a chess_char_4_09_a chess_char_1_09_a chess_char_1_17_a chess_char_4_10_a chess_char_4_12_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "normal",
|
||||
"stageId": "act1autochess_m01",
|
||||
@@ -861,8 +863,8 @@
|
||||
"round": 5,
|
||||
"seed": 2452926770,
|
||||
"waveId": "act1autochess_05",
|
||||
"time": 50.6,
|
||||
"ticks": 1518,
|
||||
"time": 56.8,
|
||||
"ticks": 1704,
|
||||
"reason": "cleared",
|
||||
"killed": 21,
|
||||
"total": 21,
|
||||
@@ -870,30 +872,30 @@
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 23,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":71891,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"visiShip":6}}},
|
||||
"players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":73125,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"visiShip":6}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_11_a",1,null,2144,1,6,0,0,0,0,0,0],
|
||||
["p1",2,"op","chess_char_4_12_a",2,null,1754,1,7,3,12820,0,0,14,1],
|
||||
["p1",3,"op","chess_char_4_04_a",1,null,1748.07,1,8,4,11117,12,0,34,1],
|
||||
["p1",4,"op","chess_char_4_07_a",1,null,840,1,10,4,7317,898,0,22,6],
|
||||
["p1",5,"op","chess_char_4_09_a",1,null,2137.6,1,11,8,25814,0,0,14,2],
|
||||
["p1",6,"op","chess_char_1_09_a",1,null,1770,1,4,0,533,0,0,1,0],
|
||||
["p1",7,"op","chess_char_1_17_a",1,null,1139,1,5,1,1670,0,0,1,0],
|
||||
["p1",8,"op","chess_char_4_10_a",1,null,1288,1,9,1,12621,0,0,12,1],
|
||||
["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null],
|
||||
["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null],
|
||||
["p1",2,"op","chess_char_4_04_a",1,null,1760,1,7,3,4947,0,0,28,1],
|
||||
["p1",3,"op","chess_char_4_07_a",1,null,840,1,8,3,6402,898,0,23,5],
|
||||
["p1",4,"op","chess_char_4_09_a",1,null,2137.6,1,10,10,33856,0,0,18,2],
|
||||
["p1",5,"op","chess_char_1_09_a",1,null,1770,1,4,0,0,0,0,0,0],
|
||||
["p1",6,"op","chess_char_1_17_a",1,null,1139,1,5,0,0,0,0,0,0],
|
||||
["p1",7,"op","chess_char_4_10_a",1,null,1288,1,9,2,10099,0,0,11,1],
|
||||
["p1",8,"op","chess_char_4_12_a",2,null,1754,1,11,3,17821,0,0,19,1],
|
||||
["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null],
|
||||
["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null],
|
||||
["-","~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_1249_lysdb_2":[5,5,0,0,27000],"enemy_1251_lysyta":[15,15,0,12,37125],"enemy_1328_cbjedi":[1,1,0,898,9000]},
|
||||
"hooks": [1,34,1518,101,101,163,158,0,21,21,11,9,0,6597,32,2,21,0,1,21,3,0,0],
|
||||
"events": {"atk":122,"deploy":10,"die":21,"dmg":158,"fx":64,"layer":3,"skill":20,"spawn":34,"status":49},
|
||||
"fx": {"charge":6,"dilemma":2,"displace":13,"garrison":3,"levitate":11,"pull":1,"shadowWeave":13,"shieldBreak":5,"slippery":1,"splash":2,"stealth":1,"tornado":1,"tornadoPulse":5},
|
||||
"snaps": "e57ceca7 ee1e6d01 b4685d91 00468627 a46c574e"
|
||||
"enemies": {"enemy_1249_lysdb_2":[5,5,0,0,27000],"enemy_1251_lysyta":[15,15,0,0,37125],"enemy_1328_cbjedi":[1,1,0,898,9000]},
|
||||
"hooks": [1,34,1704,101,101,161,156,0,21,21,10,8,0,6803,29,1,21,0,1,21,3,0,0],
|
||||
"events": {"atk":125,"deploy":10,"die":21,"dmg":156,"fx":59,"layer":3,"skill":18,"spawn":34,"status":46},
|
||||
"fx": {"charge":5,"dilemma":2,"displace":14,"garrison":3,"levitate":11,"pull":1,"shadowWeave":8,"shieldBreak":5,"slippery":1,"splash":2,"stealth":1,"tornado":1,"tornadoPulse":5},
|
||||
"snaps": "c27c0600 6b7bfecf d505aebd b3d60eec b1e621c0 52cc3598"
|
||||
},
|
||||
"bond-preciShip-high": {
|
||||
"about": "精准 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_12_b chess_char_4_09_b chess_char_1_09_b chess_char_1_17_b chess_char_2_01_b chess_char_4_10_b chess_char_4_13_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "精准 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_09_b chess_char_1_09_b chess_char_1_17_b chess_char_2_01_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": true,
|
||||
"kind": "normal",
|
||||
"stageId": "act1autochess_m04",
|
||||
@@ -908,29 +910,29 @@
|
||||
"total": 24,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 19,
|
||||
"rngDraws": 21,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":144083,"bossDmg":0,"heal":0,"deaths":2,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":144293,"bossDmg":0,"heal":1227,"deaths":2,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1261.53,1,8,0,0,2143,0,0,1],
|
||||
["p1",2,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,6,0,0,0,0,0,0],
|
||||
["p1",3,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",3992.8,1,9,0,17552,0,0,7,1],
|
||||
["p1",4,"op","chess_char_1_09_b",1,"uniequip_002_caper",3876.25,1,4,10,33806,0,0,13,1],
|
||||
["p1",5,"op","chess_char_1_17_b",1,"uniequip_002_indigo",1356,1,5,0,0,0,0,5,1],
|
||||
["p1",6,"op","chess_char_2_01_b",1,"uniequip_002_excu",0,0,11,6,38016,2146,0,6,1],
|
||||
["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,7,5,52591,0,0,7,1],
|
||||
["p1",8,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,10,3,2118,1989,0,0,3],
|
||||
["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1459,1,8,0,0,1837,0,0,1],
|
||||
["p1",2,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",3992.8,1,6,0,0,0,0,0,0],
|
||||
["p1",3,"op","chess_char_1_09_b",1,"uniequip_002_caper",3876.25,1,4,12,50704,0,0,12,1],
|
||||
["p1",4,"op","chess_char_1_17_b",1,"uniequip_002_indigo",1356,1,5,0,0,0,0,8,1],
|
||||
["p1",5,"op","chess_char_2_01_b",1,"uniequip_002_excu",0,0,11,6,38016,2146,0,6,1],
|
||||
["p1",6,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,7,5,53097,0,0,7,1],
|
||||
["p1",7,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,9,0,948,1227,1227,2,1],
|
||||
["p1",8,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,10,1,1527,1989,0,0,1],
|
||||
["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null],
|
||||
["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null],
|
||||
["-","~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_1019_jshoot_2":[7,7,0,4441,21773],"enemy_1299_ymkilr_2":[3,3,0,1837,38016],"enemy_1422_lrsldr_2":[14,14,0,0,88704]},
|
||||
"hooks": [1,37,2071,84,84,151,151,0,26,26,9,8,0,4304,189,10,24,0,1,26,0,0,0],
|
||||
"events": {"atk":85,"deploy":10,"die":26,"dmg":151,"fx":17,"skill":17,"spawn":37,"status":13},
|
||||
"fx": {"crit":2,"dilemma":1,"frostNova":3,"levitate":7,"overclock":1,"slippery":1,"strike":2},
|
||||
"snaps": "88ecbc01 8a1ee02f cd042d3b 73363111 6ff4e2d8 de909066 a4a9c65d"
|
||||
"enemies": {"enemy_1019_jshoot_2":[7,7,0,3373,21773],"enemy_1299_ymkilr_2":[3,3,0,1837,38016],"enemy_1422_lrsldr_2":[14,14,0,0,88704]},
|
||||
"hooks": [1,37,2071,84,84,166,166,663,26,26,7,6,0,4290,103,10,24,0,1,26,0,0,0],
|
||||
"events": {"atk":84,"deploy":10,"die":26,"dmg":166,"fx":21,"skill":13,"spawn":37,"status":10},
|
||||
"fx": {"crit":2,"frostNova":1,"levitate":7,"overclock":1,"pull":1,"slippery":1,"strike":2,"tornado":1,"tornadoPulse":5},
|
||||
"snaps": "1c35197a b5a550c2 449f2d84 3e5d7032 3c466668 15903287 c2362cab"
|
||||
},
|
||||
"bond-raidShip-low": {
|
||||
"about": "突袭 low: tier 1 layers 1; chess_char_4_17_a chess_char_4_18_a chess_char_2_09_a chess_char_4_19_a chess_char_1_18_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a",
|
||||
@@ -1416,7 +1418,7 @@
|
||||
"snaps": "d1a4c271 3f59c254 aa4de239 40a5e684 b35896d7 c3fa7c5d 3d19b457 305a5a12 0cbbe4fe 220ff09a d4060b93 f4a07a32 b6167539"
|
||||
},
|
||||
"bond-suntShip-low": {
|
||||
"about": "绝技 low: tier 1 layers 1; chess_char_1_02_b chess_char_4_17_a chess_char_4_18_a chess_char_4_12_a chess_char_4_16_a chess_char_1_01_b chess_char_4_13_a chess_char_4_14_a",
|
||||
"about": "绝技 low: tier 1 layers 1; chess_char_1_02_b chess_char_4_17_a chess_char_4_18_a chess_char_4_16_a chess_char_1_01_b chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a",
|
||||
"fast": false,
|
||||
"kind": "normal",
|
||||
"stageId": "act2autochess_m03",
|
||||
@@ -1424,34 +1426,34 @@
|
||||
"round": 5,
|
||||
"seed": 3833599911,
|
||||
"waveId": "act1autochess_05",
|
||||
"time": 57.07,
|
||||
"ticks": 1712,
|
||||
"time": 53.47,
|
||||
"ticks": 1604,
|
||||
"reason": "cleared",
|
||||
"killed": 21,
|
||||
"total": 21,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 9,
|
||||
"rngDraws": 19,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":92173,"bossDmg":0,"heal":385,"deaths":2,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":93600,"bossDmg":0,"heal":468,"deaths":1,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",3154,1,4,0,0,0,0,0,0],
|
||||
["p1",2,"op","chess_char_4_17_a",1,null,2803.99,1,5,1,2550,45,0,6,0],
|
||||
["p1",3,"op","chess_char_4_18_a",1,null,4587.2,1,8,2,7589,15,15,8,2],
|
||||
["p1",4,"op","chess_char_4_12_a",2,null,0,0,10,4,17392,2076,322,16,1],
|
||||
["p1",5,"op","chess_char_4_16_a",2,null,1246,1,33,2,11205,1294,48,22,3],
|
||||
["p1",6,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,6,7,20882,0,0,33,1],
|
||||
["p1",7,"op","chess_char_4_13_a",1,null,1587,1,7,3,7646,0,0,19,5],
|
||||
["p1",8,"op","chess_char_4_14_a",1,null,1276,1,9,2,24907,0,0,15,3],
|
||||
["p1",2,"op","chess_char_4_17_a",1,null,2698.96,1,5,4,8462,150,0,18,0],
|
||||
["p1",3,"op","chess_char_4_18_a",1,null,4587.2,1,8,5,17570,15,15,17,2],
|
||||
["p1",4,"op","chess_char_4_16_a",2,null,0,0,10,3,13468,1699,453,25,2],
|
||||
["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,6,7,26370,0,0,43,2],
|
||||
["p1",6,"op","chess_char_4_12_a",2,null,1754,1,7,0,0,0,0,0,0],
|
||||
["p1",7,"op","chess_char_4_13_a",1,null,1587,1,9,1,11450,0,0,28,6],
|
||||
["p1",8,"op","chess_char_4_14_a",1,null,1276,1,11,1,16279,0,0,14,3],
|
||||
["-","~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_1249_lysdb_2":[5,5,0,1434,34560],"enemy_1251_lysyta":[15,15,0,108,47520],"enemy_1328_cbjedi":[1,1,0,1887,11520]},
|
||||
"hooks": [1,33,1712,141,141,224,218,227,24,23,15,15,14,6339,521,16,21,0,1,24,0,0,0],
|
||||
"events": {"atk":141,"deploy":9,"die":23,"dmg":214,"fx":67,"heal":2,"skill":32,"spawn":32,"status":71},
|
||||
"fx": {"block":1,"displace":21,"explosion":3,"frostNova":5,"pull":1,"rockslide":2,"shieldBreak":9,"sp":1,"swordRain":12,"swordStorm":3,"thorns":3,"tornado":1,"tornadoPulse":5},
|
||||
"snaps": "d4d5e757 c6e256bb 6ea24a32 119afe24 54871beb d1707192"
|
||||
"enemies": {"enemy_1249_lysdb_2":[5,5,0,453,34560],"enemy_1251_lysyta":[15,15,0,229,47520],"enemy_1328_cbjedi":[1,1,0,1182,11520]},
|
||||
"hooks": [1,32,1604,173,173,234,225,9,23,22,15,14,21,5887,502,14,21,0,1,23,0,0,0],
|
||||
"events": {"atk":173,"deploy":8,"die":22,"dmg":219,"fx":50,"heal":2,"skill":31,"spawn":32,"status":98},
|
||||
"fx": {"block":4,"explosion":3,"frostNova":6,"rockslide":2,"shieldBreak":11,"swordRain":12,"swordStorm":2,"thorns":10},
|
||||
"snaps": "241cb7e7 8164a048 e60d878b 54b007e8 2a842e99 9f62b1be"
|
||||
},
|
||||
"bond-suntShip-high": {
|
||||
"about": "绝技 high: tier 2 layers 999; chess_char_1_02_b chess_char_1_04_b chess_char_4_19_a chess_char_1_01_b chess_char_1_03_b chess_char_1_06_b chess_char_4_20_a chess_char_4_21_a",
|
||||
@@ -1524,7 +1526,7 @@
|
||||
"snaps": "5fab4324 df1c9981 5d0b2fb3 40f389ee beecf492"
|
||||
},
|
||||
"bond-swiftShip-high": {
|
||||
"about": "迅捷 high: tier 1 layers 999; chess_char_4_11_b chess_char_4_12_b chess_char_1_19_b chess_char_4_07_b chess_char_4_09_b chess_char_1_01_b chess_char_4_06_b chess_char_4_10_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "迅捷 high: tier 1 layers 999; chess_char_4_11_b chess_char_1_19_b chess_char_4_07_b chess_char_4_09_b chess_char_1_01_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": true,
|
||||
"kind": "normal",
|
||||
"stageId": "act2autochess_m01",
|
||||
@@ -1532,33 +1534,33 @@
|
||||
"round": 10,
|
||||
"seed": 1175070139,
|
||||
"waveId": "act1autochess_h03",
|
||||
"time": 103.63,
|
||||
"ticks": 3109,
|
||||
"time": 108.37,
|
||||
"ticks": 3251,
|
||||
"reason": "cleared",
|
||||
"killed": 24,
|
||||
"killed": 23,
|
||||
"total": 24,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 224,
|
||||
"rngDraws": 271,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":235584,"bossDmg":0,"heal":480,"deaths":1,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":23,"total":24,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":219573,"bossDmg":0,"heal":742,"deaths":4,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,4,0,0,0,0,0,0],
|
||||
["p1",2,"op","chess_char_4_12_b",2,"uniequip_002_glady",1016.68,1,6,2,29666,1695,480,31,4],
|
||||
["p1",3,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,7,0,1756,1971,0,14,1],
|
||||
["p1",4,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,5,0,0,0,0,0,0],
|
||||
["p1",5,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,8,11,94881,0,0,39,5],
|
||||
["p1",6,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,2,13278,0,0,71,5],
|
||||
["p1",7,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,7,57803,0,0,103,3],
|
||||
["p1",8,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,3,2,38201,0,0,21,2],
|
||||
["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,4,0,0,4098,0,0,1],
|
||||
["p1",2,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,6,1,4054,1971,0,20,1],
|
||||
["p1",3,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,7,0,1332,2383,0,10,10],
|
||||
["p1",4,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,5,5,65655,0,0,24,3],
|
||||
["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,2,17948,0,0,76,5],
|
||||
["p1",6,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,10,67651,0,0,110,3],
|
||||
["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,3,2,36325,0,0,22,2],
|
||||
["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,8,3,26608,2974,742,16,2],
|
||||
["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,9,0,0,0,0,0,null],
|
||||
["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,10,0,0,0,0,0,null]
|
||||
],
|
||||
"enemies": {"enemy_1010_demon":[7,7,0,0,60480],"enemy_1422_lrsldr_2":[14,14,0,0,88704],"enemy_1425_lrcmra_2":[3,3,0,3666,86400]},
|
||||
"hooks": [1,34,3109,284,284,542,542,258,25,25,20,17,71,4344,125,2,24,0,1,25,0,0,0],
|
||||
"events": {"atk":333,"deploy":10,"die":25,"dmg":542,"fx":138,"skill":37,"spawn":34,"status":204},
|
||||
"fx": {"crit":44,"dilemma":5,"displace":11,"garrisonGrant":1,"levitate":21,"pull":4,"quadShot":2,"slippery":2,"sp":16,"splash":8,"tornado":4,"tornadoPulse":20},
|
||||
"snaps": "7f9eb07c 6cb4394b 48a9dc2c 1868bf88 9ee5e814 16737220 b499038a 6744d7c7 1aae168f ed248e7d 6113cb8d"
|
||||
"enemies": {"enemy_1010_demon":[7,7,0,1205,60480],"enemy_1422_lrsldr_2":[14,14,0,74,88704],"enemy_1425_lrcmra_2":[3,2,1,10147,70389]},
|
||||
"hooks": [1,34,3251,301,301,557,557,400,27,28,27,25,76,3567,117,10,24,1,1,27,0,0,0],
|
||||
"events": {"atk":349,"deploy":10,"die":27,"dmg":557,"fx":146,"leak":1,"skill":52,"spawn":34,"status":196},
|
||||
"fx": {"charge":10,"crit":53,"dilemma":3,"displace":16,"garrisonGrant":1,"levitate":21,"overclock":1,"pull":1,"quadShot":2,"slippery":2,"sp":23,"splash":7,"tornado":1,"tornadoPulse":5},
|
||||
"snaps": "52481b26 a970d314 2696635b 9c15cc8e 501817d0 a8faf661 7e05b7cf ffceee93 c505d863 f99ccd20 1c4895d8"
|
||||
},
|
||||
"bond-victoriaShip-low": {
|
||||
"about": "维多利亚 low: tier 1 layers 1; chess_char_3_06_a chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_1_06_a chess_char_2_05_a chess_char_2_10_a",
|
||||
|
||||
+279
-249
@@ -127,7 +127,7 @@
|
||||
"snaps": "a5dad180 d125af54 48cee8b5 3b07616c bc0eda5a e532e5f3 d3b187a2 2c98a5f8 559544bf 798c9fad 22a3c133 b3cbd348 1d516e17 4fa0428c b96b4cc9 c98f2306 628c0fee dd8030f8 3266c412 97ddd90c"
|
||||
},
|
||||
"boss-boss_2-pair": {
|
||||
"about": "假想敌:铳 pair pool 3000000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "假想敌:铳 pair pool 3000000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "boss",
|
||||
"stageId": "act2autochess_m04",
|
||||
@@ -138,45 +138,45 @@
|
||||
"time": 200,
|
||||
"ticks": 6000,
|
||||
"reason": "forced",
|
||||
"killed": 7,
|
||||
"killed": 8,
|
||||
"total": 8,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 2350060,
|
||||
"rngDraws": 418,
|
||||
"bossHpLeft": 2400141,
|
||||
"rngDraws": 845,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":7,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":586039,"bossDmg":301935,"heal":15824,"deaths":2,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":798436,"bossDmg":343471,"heal":3544,"deaths":2,"layerGains":{}}
|
||||
"p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":626248,"bossDmg":304799,"heal":17583,"deaths":1,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":834649,"bossDmg":291562,"heal":6439,"deaths":2,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,9,2,202006,1042,20,75,3],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,11,0,13291,13409,413,57,1],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,7,0,30220,1028,162,56,18],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,13,0,10185,0,0,83,1],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,1,0,85052,0,540,46,8],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2418.5,1,3,0,60506,0,0,33,3],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2769.3,1,43,1,13270,2989,220,10,2],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,40,1,120745,1611,0,41,16],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,5,0,0,0,14468,18,2],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,15,0,50762,0,0,32,2],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1729.97,1,47,0,0,4971,481,0,1],
|
||||
["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,12,0,31398,0,0,44,3],
|
||||
["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,49,1,285207,0,0,307,8],
|
||||
["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,14,0,2151,2782,399,13,6],
|
||||
["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,48,0,72409,4006,678,141,8],
|
||||
["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",316.22,1,16,0,86815,3101,640,76,5],
|
||||
["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,0,1319,0,0,13,1],
|
||||
["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,4,0,72378,0,0,61,2],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,18,0,103544,1346,1346,153,45],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,20,2,143215,0,0,73,17],
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,9,0,249834,1042,0,78,3],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,11,0,29219,11570,267,58,1],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,7,0,27397,800,176,51,16],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,13,1,10837,0,0,65,1],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,1,0,97920,0,1127,37,9],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2418.5,1,3,0,66530,0,0,33,3],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2769.3,1,17,2,54241,1768,771,107,4],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,44,1,27880,2026,415,27,6],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,5,0,0,0,14784,23,3],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,15,0,62391,1393,44,48,3],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1015.52,1,12,0,177,3929,1579,5,2],
|
||||
["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,50,2,239489,421,0,268,9],
|
||||
["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2260.31,1,8,0,2831,1159,1036,18,7],
|
||||
["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,49,1,64489,3762,255,118,9],
|
||||
["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1997.24,1,10,0,62966,1270,489,59,4],
|
||||
["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,1,306521,0,0,213,3],
|
||||
["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,4,0,0,0,0,0,0],
|
||||
["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1823.67,1,18,0,42546,3489,3080,38,4],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,40,0,25053,1989,0,42,13],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,6,0,90576,0,0,58,14],
|
||||
["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_1005_yokai_2":[6,6,0,2913,62190],"enemy_1430_lrrook":[2,1,1,0,677032],"enemy_9017_achunt":[2,0,0,33371,649940]},
|
||||
"hooks": [1,47,6000,1359,1364,2576,2608,2946,11,24,152,147,20,38829,1514,0,10,1,1,12,0,10,1],
|
||||
"events": {"atk":1412,"deploy":37,"die":23,"dmg":2604,"fx":485,"heal":39,"leak":1,"skill":299,"spawn":32,"status":512},
|
||||
"fx": {"aoe":40,"appear":2,"blink":12,"burst":10,"catShield":1,"charge":6,"counter":20,"crit":15,"dilemma":5,"disappear":2,"dodge":1,"explosion":17,"frostNova":45,"iceSpike":10,"overclock":1,"pull":3,"ripple":14,"sentry":5,"sermon":1,"shadowWeave":10,"shield":5,"slippery":2,"soul":3,"sp":14,"stealth":8,"swordRain":71,"swordStorm":8,"tornado":3,"tornadoPulse":15,"weightless":3,"zone":133},
|
||||
"snaps": "bded3f8f 24cbefe9 671c8869 999a4ff1 8528a501 ba0ffb54 819c81f5 c480501c 5f51d940 f5f9be37 3b6dcc0d 59143ccc e8b26cd0 42745026 c22fe961 29db481b 69c7d37e caa1e5a5 11718d27 2f9da877"
|
||||
"enemies": {"enemy_1005_yokai_2":[6,6,0,4575,62190],"enemy_1430_lrrook":[2,2,0,0,802449],"enemy_9017_achunt":[2,0,0,30041,599859]},
|
||||
"hooks": [1,48,6000,1302,1334,2676,2707,5199,12,24,114,108,24,37654,903,0,10,0,1,12,0,7,0],
|
||||
"events": {"atk":1357,"deploy":38,"die":24,"dmg":2701,"fx":654,"heal":54,"skill":222,"spawn":32,"status":441},
|
||||
"fx": {"aoe":27,"appear":2,"blink":13,"burst":7,"catShield":1,"charge":7,"counter":24,"crit":112,"dilemma":4,"disappear":2,"explosion":14,"frostNova":13,"garrisonGrant":1,"iceSpike":91,"overclock":2,"pull":3,"quadShot":3,"ripple":25,"sentry":7,"sermon":1,"shadowWeave":13,"shield":6,"soul":1,"sp":7,"stealth":9,"swordRain":59,"swordStorm":9,"tornado":4,"tornadoPulse":17,"weightless":3,"zone":167},
|
||||
"snaps": "3cd698b1 c4c10bef a30f10e2 16900e85 a9a35856 dbfa73dc 81650d2d f76c2446 eac77ab1 120c61fe 7df80570 8eeabc2d 0de7de10 f0f4eb24 cca3fbad 2faf03af 37cb63f6 ec50b27e e5066532 6987cb61"
|
||||
},
|
||||
"boss-boss_2-solo": {
|
||||
"about": "假想敌:铳 solo pool 750000: 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",
|
||||
@@ -335,7 +335,7 @@
|
||||
"snaps": "350d2037 5eb324a9 93890c27 cfd3cc69 9d47cb8d 97a81071 03889d40 e843828d 92884942 e6498744 15391702 f00b712f fcb3da1c 0b44c227 2802904f c8eaf7b3 a142e278 b3656951 bd850e24 0b8940d4"
|
||||
},
|
||||
"boss-boss_4-pair": {
|
||||
"about": "盐风主教昆图斯 pair pool 4200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "盐风主教昆图斯 pair pool 4200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "boss",
|
||||
"stageId": "act2autochess_m02",
|
||||
@@ -346,83 +346,81 @@
|
||||
"time": 200,
|
||||
"ticks": 6000,
|
||||
"reason": "forced",
|
||||
"killed": 11,
|
||||
"killed": 12,
|
||||
"total": 14,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 2963186,
|
||||
"rngDraws": 379,
|
||||
"bossHpLeft": 3180709,
|
||||
"rngDraws": 709,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":11,"total":14,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1301416,"bossDmg":462784,"heal":55328,"deaths":14,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":958751,"bossDmg":774030,"heal":4401,"deaths":17,"layerGains":{}}
|
||||
"p1": {"killed":12,"total":14,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1029506,"bossDmg":334992,"heal":29299,"deaths":18,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1050372,"bossDmg":684299,"heal":4583,"deaths":16,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,50,2,181433,8233,419,23,1],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",1480.42,1,56,0,18660,9555,996,14,2],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",0,0,53,1,32068,7498,1041,8,6],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,52,0,27339,18659,2152,32,2],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",760.49,1,58,1,440543,3484,13958,106,18],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",748.73,1,60,1,109385,11025,551,39,4],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1147.47,1,19,1,152890,4386,257,193,5],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1093.46,1,61,1,184949,2582,454,38,16],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1608.42,1,7,0,0,4983,35154,63,4],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1213.47,1,15,1,154147,4386,348,71,3],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,48,0,0,6794,52,0,1],
|
||||
["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,47,0,26743,5448,984,10,1],
|
||||
["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",0,0,26,0,390348,6532,239,289,7],
|
||||
["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,59,0,17337,7149,0,18,6],
|
||||
["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,57,1,146039,18319,1075,120,6],
|
||||
["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,54,1,139224,6925,369,53,5],
|
||||
["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,55,0,0,3470,348,0,0],
|
||||
["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1109.26,1,12,0,85141,4386,467,68,4],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,20,1,108475,4244,435,153,39],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1144.47,1,62,0,45445,2540,433,15,6],
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,51,3,160707,8165,351,23,1],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",0,0,49,1,16423,9730,556,15,2],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",1928.47,1,58,0,25513,10463,1317,10,6],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,53,0,21949,13121,338,14,1],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",805.93,1,59,0,364463,3178,6363,105,18],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",768.47,1,57,0,90550,10652,588,39,4],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,1,106186,2529,24,117,4],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1147.01,1,65,5,123065,2539,464,42,18],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,54,0,0,4347,19178,37,3],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1265.2,1,63,0,120648,3016,120,48,2],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,47,0,1132,6945,203,3,1],
|
||||
["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",1587.75,1,52,1,199948,5092,120,199,7],
|
||||
["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,62,0,32398,7436,183,51,12],
|
||||
["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1430.31,1,56,0,104132,6881,140,167,5],
|
||||
["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,55,0,219022,6239,275,44,4],
|
||||
["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",998.42,1,60,0,196698,2588,464,168,3],
|
||||
["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,3152,73,0,0],
|
||||
["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1729.12,1,61,0,63320,6263,1513,72,4],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1876.82,1,64,0,73971,3250,1149,75,23],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1194.87,1,66,1,159751,2521,464,69,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,9763,200612],"enemy_1438_dspred":[10,7,3,30762,822741],"enemy_1521_dslily":[1,0,0,92273,1236814]},
|
||||
"hooks": [1,60,6000,1224,1327,3023,3152,6681,43,48,136,134,14,36235,1594,23,15,3,1,44,0,37,5],
|
||||
"events": {"atk":1450,"deploy":45,"die":45,"dmg":3143,"fx":842,"heal":271,"leak":3,"skill":270,"spawn":37,"status":941},
|
||||
"enemies": {"enemy_1010_demon":[4,4,0,2035,200612],"enemy_1438_dspred":[10,8,2,18391,859975],"enemy_1521_dslily":[1,0,0,89880,1019291]},
|
||||
"hooks": [1,64,6000,1264,1327,3121,3243,5401,46,50,131,130,9,32811,1211,12,15,2,1,49,0,28,6],
|
||||
"events": {"atk":1527,"deploy":49,"die":48,"dmg":3236,"fx":809,"heal":191,"leak":2,"skill":261,"spawn":37,"status":830},
|
||||
"fx": {
|
||||
"aoe": 25,
|
||||
"appear": 10,
|
||||
"blink": 3,
|
||||
"burst": 37,
|
||||
"charge": 6,
|
||||
"counter": 14,
|
||||
"crit": 1,
|
||||
"dilemma": 5,
|
||||
"disappear": 10,
|
||||
"displace": 29,
|
||||
"dodge": 5,
|
||||
"explosion": 6,
|
||||
"frostNova": 39,
|
||||
"aoe": 30,
|
||||
"appear": 8,
|
||||
"blink": 2,
|
||||
"burst": 28,
|
||||
"charge": 12,
|
||||
"counter": 9,
|
||||
"crit": 91,
|
||||
"dilemma": 4,
|
||||
"disappear": 8,
|
||||
"displace": 31,
|
||||
"dodge": 6,
|
||||
"explosion": 13,
|
||||
"frostNova": 23,
|
||||
"grow": 1,
|
||||
"iceSpike": 148,
|
||||
"levitate": 2,
|
||||
"iceSpike": 88,
|
||||
"overclock": 1,
|
||||
"pull": 1,
|
||||
"ripple": 27,
|
||||
"rockfall": 18,
|
||||
"pull": 4,
|
||||
"quadShot": 3,
|
||||
"ripple": 18,
|
||||
"rockfall": 16,
|
||||
"sentry": 2,
|
||||
"sermon": 2,
|
||||
"shadowWeave": 1,
|
||||
"shield": 5,
|
||||
"slippery": 4,
|
||||
"soul": 7,
|
||||
"sp": 14,
|
||||
"splash": 2,
|
||||
"shadowWeave": 6,
|
||||
"shield": 2,
|
||||
"soul": 6,
|
||||
"sp": 13,
|
||||
"stealth": 7,
|
||||
"swordRain": 65,
|
||||
"swordStorm": 6,
|
||||
"swordRain": 28,
|
||||
"swordStorm": 5,
|
||||
"tentacle": 6,
|
||||
"tide": 5,
|
||||
"tornado": 1,
|
||||
"tornadoPulse": 5,
|
||||
"tornado": 4,
|
||||
"tornadoPulse": 20,
|
||||
"weightless": 4,
|
||||
"zone": 318
|
||||
"zone": 303
|
||||
},
|
||||
"snaps": "9ebfb59f ebaa506f f9e0adbc 78861a0d fc253243 261e35f6 da034a99 20c77428 1a1e5a85 8e3269d0 cf47638c e41592e8 bb36e8db 5cac1f53 42ce30eb ba5c97a1 c2fb0718 ce0af9ba f02c4273 3f5c1461"
|
||||
"snaps": "198ab503 54596a20 a140dd19 93be3154 e521703f 9e626685 0477c945 3940ca57 0e017b92 406320ee dbbbde0f 19e3cd9c b6f545a7 27ee4dfe 591fe6c2 473addeb d7b0f4cc e8895645 ea2412e0 532a2fda"
|
||||
},
|
||||
"boss-boss_4-solo": {
|
||||
"about": "盐风主教昆图斯 solo pool 1050000: 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",
|
||||
@@ -608,7 +606,7 @@
|
||||
"snaps": "1b2c287a eaa9179b 630f3c60 4d66a11e 1bb71808 3f98dccb 22cb18a1 217a35ef 09de2906 ba0f42cc 81fbd1d0 398611ec 0abd9c6f 252f015d fe9c3866 f9bb937f"
|
||||
},
|
||||
"boss-boss_6-pair": {
|
||||
"about": "阿利斯泰尔,帝国余晖 pair pool 3980000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "阿利斯泰尔,帝国余晖 pair pool 3980000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "boss",
|
||||
"stageId": "act1autochess_m07",
|
||||
@@ -622,49 +620,82 @@
|
||||
"killed": 4,
|
||||
"total": 6,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 2830586,
|
||||
"rngDraws": 115,
|
||||
"bossHpLeft": 2822603,
|
||||
"rngDraws": 622,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":4,"total":6,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":851952,"bossDmg":418475,"heal":4847,"deaths":6,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":809842,"bossDmg":730939,"heal":429,"deaths":13,"layerGains":{}}
|
||||
"p1": {"killed":4,"total":6,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1014139,"bossDmg":530340,"heal":8898,"deaths":5,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1261961,"bossDmg":627057,"heal":1505,"deaths":9,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,1,124853,0,0,36,2],
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,1,156498,0,0,35,2],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,1,0,0,0,0,0,0],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,5,0,33331,0,0,0,11],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,0,28361,3948,2626,18,1],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,3,294785,0,1322,63,11],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,171474,0,0,39,3],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,38,0,17693,3258,0,30,1],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,39,0,133204,3222,0,43,14],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,40,0,1934,3220,899,1,1],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,0,46318,0,0,37,2],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,41,0,0,12099,91,0,1],
|
||||
["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,2,0,0,0,0,0,0],
|
||||
["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",0,0,26,0,135017,5043,208,208,6],
|
||||
["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,10,0,0,0,0,0,0],
|
||||
["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,52,0,54215,8558,131,149,5],
|
||||
["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,48,0,161587,5555,0,65,4],
|
||||
["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,0,0,0,0,0,0],
|
||||
["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,12,0,280207,0,0,107,4],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,49,0,115884,3978,0,105,27],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,50,0,62932,4878,0,22,4],
|
||||
["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null],
|
||||
["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null]
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,5,0,20943,0,0,0,11],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,1,27873,4163,2876,15,1],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,1,257892,0,4030,52,9],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,180268,0,0,52,4],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,15,0,40804,3209,204,79,3],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,46,0,281643,4798,209,80,26],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,47,0,1934,4800,1580,2,1],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,1,46286,0,0,33,2],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,39,0,0,12101,65,0,1],
|
||||
["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",3438.4,1,52,0,190553,9186,912,222,6],
|
||||
["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,6,0,0,0,0,0,0],
|
||||
["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,48,0,43037,6067,157,161,5],
|
||||
["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,14,0,233626,0,0,116,6],
|
||||
["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,0,477873,0,0,136,2],
|
||||
["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,12,0,0,0,0,0,0],
|
||||
["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,16,0,83667,0,0,168,6],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,49,0,131093,1989,0,125,31],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",384.36,1,50,0,102112,4864,371,34,6],
|
||||
["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_10028_vtswd": [2,2,0,0,0],
|
||||
"enemy_10029_vtshld": [6,6,0,0,0],
|
||||
"enemy_10030_vtwand": [1,1,0,0,0],
|
||||
"enemy_10085_hllevi_2": [2,0,2,0,311768],
|
||||
"enemy_1010_demon": [4,4,0,16047,200612],
|
||||
"enemy_9032_aclionk": [1,0,0,37713,1149414]
|
||||
"enemy_10029_vtshld": [4,4,0,0,0],
|
||||
"enemy_10030_vtwand": [4,4,0,0,0],
|
||||
"enemy_10085_hllevi_2": [2,0,2,0,918091],
|
||||
"enemy_1010_demon": [4,4,0,16264,200612],
|
||||
"enemy_9032_aclionk": [1,0,0,34912,1157397]
|
||||
},
|
||||
"hooks": [1,51,6000,924,932,1505,1589,667,32,36,97,95,0,30558,1153,4,16,2,1,26,0,8,1],
|
||||
"events": {"atk":1036,"deploy":35,"die":34,"dmg":1545,"fx":448,"heal":11,"leak":2,"skill":192,"spawn":38,"status":691},
|
||||
"fx": {"aoe":33,"appear":4,"blink":2,"burst":8,"crit":1,"dilemma":4,"disappear":4,"displace":8,"dodge":1,"equip":10,"explosion":4,"frostNova":27,"garrisonGrant":1,"iceSpike":28,"overclock":1,"revive":2,"ripple":18,"sentry":2,"shadowWeave":1,"shield":1,"slippery":4,"soul":2,"sp":10,"stealth":6,"sword":1,"swordRain":27,"swordStorm":5,"telegraph":15,"vest":6,"weightless":3,"zone":209},
|
||||
"snaps": "ae4c2d42 930756f4 dfc027de 067097c8 063c8181 4f0dee8a db069676 6457f437 3f8f2a7b b398399a 5c778a50 56497384 c05a22f0 58b7c8c9 4ed8f59d 8c6d8923 e673e1f7 dd8b1c6e c6fdbae0 00aaa057"
|
||||
"hooks": [1,50,6000,1272,1302,2358,2376,1878,26,30,122,120,0,38644,1437,4,15,2,1,21,0,5,1],
|
||||
"events": {"atk":1371,"deploy":35,"die":28,"dmg":2328,"fx":600,"heal":36,"leak":2,"skill":242,"spawn":37,"status":955},
|
||||
"fx": {
|
||||
"aoe": 43,
|
||||
"appear": 4,
|
||||
"blink": 2,
|
||||
"burst": 5,
|
||||
"crit": 91,
|
||||
"dilemma": 6,
|
||||
"disappear": 4,
|
||||
"displace": 13,
|
||||
"dodge": 1,
|
||||
"equip": 12,
|
||||
"explosion": 6,
|
||||
"frostNova": 31,
|
||||
"garrisonGrant": 1,
|
||||
"iceSpike": 71,
|
||||
"overclock": 1,
|
||||
"pull": 6,
|
||||
"quadShot": 2,
|
||||
"revive": 2,
|
||||
"ripple": 18,
|
||||
"sentry": 3,
|
||||
"shadowWeave": 4,
|
||||
"shield": 1,
|
||||
"soul": 5,
|
||||
"sp": 11,
|
||||
"stealth": 6,
|
||||
"swordRain": 16,
|
||||
"swordStorm": 5,
|
||||
"telegraph": 15,
|
||||
"tornado": 6,
|
||||
"tornadoPulse": 30,
|
||||
"vest": 4,
|
||||
"weightless": 4,
|
||||
"zone": 171
|
||||
},
|
||||
"snaps": "85b544a3 e2a69c95 8ea8c580 a10ce8ba 1bf89398 d315c9bd 76e46275 8291ad43 2b9e512d 507672c3 ca4b6dc9 c63916fa 2bece0ec 36bf65d2 dbc730bd e7e62749 b5af54bb 3c940652 4ebff223 e6bd71c0"
|
||||
},
|
||||
"boss-boss_6-solo": {
|
||||
"about": "阿利斯泰尔,帝国余晖 solo pool 995000: 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",
|
||||
@@ -823,7 +854,7 @@
|
||||
"snaps": "4de66f1a 63c08f30 825591c9 d0ce31a1 7aef05fb 1ec56c35 f5134898 a3987ee3 f826ddd0 8536abb7 e61cb2af eb4dc819 ccfdf14f 98da64f1 27310d84 6f8f4bac 8f4f0950 bd66a2ba e033ff9d 33a4d212"
|
||||
},
|
||||
"hidden-boss_8-pair": {
|
||||
"about": "假想敌:胄 pair pool 7200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "假想敌:胄 pair pool 7200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "hidden",
|
||||
"stageId": "act1autochess_m05",
|
||||
@@ -834,95 +865,93 @@
|
||||
"time": 200,
|
||||
"ticks": 6000,
|
||||
"reason": "forced",
|
||||
"killed": 12,
|
||||
"killed": 14,
|
||||
"total": 18,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 6077350,
|
||||
"rngDraws": 712,
|
||||
"bossHpLeft": 6146493,
|
||||
"rngDraws": 684,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":12,"total":18,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1745573,"bossDmg":937264,"heal":66120,"deaths":15,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":389964,"bossDmg":185386,"heal":7841,"deaths":25,"layerGains":{}}
|
||||
"p1": {"killed":14,"total":18,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1530308,"bossDmg":540995,"heal":37591,"deaths":18,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":660811,"bossDmg":511926,"heal":7513,"deaths":22,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",5244.92,1,85,2,93962,25464,853,43,3],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",6488.78,1,76,0,4978,12151,903,7,2],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",3988,1,87,0,40053,15591,4140,41,7],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",5476,1,88,1,45108,22564,3261,24,2],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1602.62,1,74,1,744558,4047,17936,100,11],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2764,1,82,3,449489,17324,228,43,4],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,1,1,144401,4077,819,12,2],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,64,1,19039,6619,175,12,3],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",3220,1,71,0,0,14759,37696,35,4],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,77,4,203984,10279,109,9,1],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,4,0,0,4260,161,0,1],
|
||||
["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,70,0,25247,5349,885,14,2],
|
||||
["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,90,0,9322,15881,103,48,3],
|
||||
["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,63,0,8814,10282,1941,3,2],
|
||||
["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1185.56,1,83,1,96977,19717,1326,32,10],
|
||||
["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,62,1,73045,9516,232,18,2],
|
||||
["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,86,0,18579,3122,0,163,3],
|
||||
["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,18,1,119533,6337,363,64,2],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,73,0,33296,6531,2553,37,12],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,61,0,5151,3529,277,3,1],
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,3,6,292256,22464,364,30,2],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",0,0,7,0,9900,9238,344,9,1],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",3988,1,81,2,59905,12855,2175,33,10],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,77,0,31244,23536,239,35,3],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1214.62,1,73,1,517678,3465,15688,98,10],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,71,1,87295,11850,264,21,2],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",3258,1,80,1,147502,3731,473,5,1],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1855.46,1,82,3,323524,4933,344,36,14],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,86,0,0,11728,17700,15,1],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,76,1,61002,10170,0,7,0],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",802.43,1,72,0,0,6510,0,0,2],
|
||||
["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,84,0,7967,15670,48,45,2],
|
||||
["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,64,0,7602,11656,3315,2,2],
|
||||
["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",873.53,1,79,1,78142,16039,45,26,9],
|
||||
["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,61,0,69469,9246,259,27,2],
|
||||
["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,87,2,310656,1561,0,156,3],
|
||||
["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,20,0,59619,4499,409,62,2],
|
||||
["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,75,0,44999,7547,3083,34,2],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,65,0,19343,4017,39,32,9],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,66,1,63014,3567,315,25,4],
|
||||
["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_10027_vtsk": [6,0,4,138479,677740],
|
||||
"enemy_10027_vtsk": [6,2,2,125746,825346],
|
||||
"enemy_1005_yokai": [4,4,0,0,1600],
|
||||
"enemy_1229_darmy_2": [8,8,0,3451,294231],
|
||||
"enemy_9013_acstmk_2": [1,0,0,51007,1122650],
|
||||
"enemy_9014_acstma": [5,4,0,5742,7466],
|
||||
"enemy_9015_acstmb": [3,2,0,18719,56499],
|
||||
"enemy_9016_acstmr": [8,7,0,0,52]
|
||||
"enemy_1229_darmy_2": [8,8,0,4691,294231],
|
||||
"enemy_9013_acstmk_2": [1,0,0,44306,1053507],
|
||||
"enemy_9014_acstma": [5,4,0,6912,28366],
|
||||
"enemy_9015_acstmb": [3,2,0,12628,12856],
|
||||
"enemy_9016_acstmr": [8,7,0,0,42]
|
||||
},
|
||||
"hooks": [1,88,6000,813,814,2708,2782,7397,66,71,77,74,7,21230,726,15,35,4,1,69,0,0,6],
|
||||
"events": {"atk":977,"deploy":53,"die":67,"dmg":2779,"fx":604,"heal":181,"leak":4,"skill":151,"spawn":57,"status":726},
|
||||
"hooks": [1,87,6000,808,809,2627,2815,4682,68,71,81,79,9,21642,625,21,35,2,1,69,0,8,3],
|
||||
"events": {"atk":940,"deploy":52,"die":69,"dmg":2811,"fx":550,"heal":130,"leak":2,"skill":160,"spawn":57,"status":569},
|
||||
"fx": {
|
||||
"aoe": 19,
|
||||
"appear": 10,
|
||||
"beam": 45,
|
||||
"blink": 15,
|
||||
"charge": 9,
|
||||
"counter": 7,
|
||||
"crit": 79,
|
||||
"aoe": 31,
|
||||
"appear": 7,
|
||||
"beam": 47,
|
||||
"blink": 14,
|
||||
"burst": 8,
|
||||
"charge": 8,
|
||||
"counter": 9,
|
||||
"crit": 89,
|
||||
"dilemma": 2,
|
||||
"disappear": 10,
|
||||
"displace": 1,
|
||||
"dodge": 6,
|
||||
"explode": 7,
|
||||
"explosion": 1,
|
||||
"frostNova": 12,
|
||||
"iceSpike": 12,
|
||||
"levitate": 7,
|
||||
"overclock": 1,
|
||||
"palsy": 7,
|
||||
"phase": 1,
|
||||
"pull": 1,
|
||||
"disappear": 7,
|
||||
"dodge": 3,
|
||||
"explode": 4,
|
||||
"explosion": 4,
|
||||
"frostNova": 9,
|
||||
"iceSpike": 4,
|
||||
"overclock": 2,
|
||||
"palsy": 2,
|
||||
"phase": 4,
|
||||
"pull": 2,
|
||||
"quadShot": 2,
|
||||
"revive": 2,
|
||||
"ripple": 2,
|
||||
"sentry": 5,
|
||||
"sermon": 2,
|
||||
"sentry": 4,
|
||||
"sermon": 1,
|
||||
"shadowWeave": 5,
|
||||
"shell": 8,
|
||||
"shield": 7,
|
||||
"shield": 5,
|
||||
"slippery": 2,
|
||||
"sp": 3,
|
||||
"spGain": 4,
|
||||
"splash": 1,
|
||||
"stealth": 3,
|
||||
"soul": 8,
|
||||
"sp": 6,
|
||||
"spGain": 5,
|
||||
"stealth": 2,
|
||||
"summon": 4,
|
||||
"swordRain": 78,
|
||||
"swordStorm": 10,
|
||||
"swordRain": 55,
|
||||
"swordStorm": 9,
|
||||
"telegraph": 6,
|
||||
"tornado": 2,
|
||||
"tornadoPulse": 8,
|
||||
"weightless": 4,
|
||||
"zone": 194
|
||||
"tornadoPulse": 10,
|
||||
"weightless": 2,
|
||||
"zone": 156
|
||||
},
|
||||
"snaps": "264b53d3 6fb1395f acf19f90 c8b5fd49 ffacda1f acd792c1 1cb10cd2 fe369e7d b7b9d050 c11e4e8e 5bb9e66b a1356611 34955c15 942d0207 eff26c91 0641e8c1 ffdfb125 bf8b5166 4a71053e 70aee475"
|
||||
"snaps": "3795cfd4 891856fd fa1c1210 2c30aa4b d8e5b303 a2e870a9 2c890acc 9c3510e1 c0c588c6 b4adfe33 919f2f15 3096a982 11725bf2 da1f3dc4 43291420 c44f7791 f63a2f31 d153dec1 dea37ac5 1edec0c5"
|
||||
},
|
||||
"hidden-boss_8-solo": {
|
||||
"about": "假想敌:胄 solo pool 1800000: 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",
|
||||
@@ -1136,7 +1165,7 @@
|
||||
"snaps": "d71f569c a47a1d66 df4b4783 0854c875 846091e0 9890e33e 5fdb72ff fb639060 fcd20f12 04a361dc d58cf1d0 1482a16a 606d5129 d394ce04 39d5d7f5 6adac8ac 09d55362"
|
||||
},
|
||||
"hidden-boss_10-pair": {
|
||||
"about": "假想敌:管 pair pool 7600000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "假想敌:管 pair pool 7600000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "hidden",
|
||||
"stageId": "act1autochess_m03",
|
||||
@@ -1150,86 +1179,87 @@
|
||||
"killed": 12,
|
||||
"total": 12,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": 6533029,
|
||||
"rngDraws": 447,
|
||||
"bossHpLeft": 6832620,
|
||||
"rngDraws": 975,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":424664,"bossDmg":253185,"heal":8710,"deaths":1,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":976811,"bossDmg":813786,"heal":4705,"deaths":6,"layerGains":{}}
|
||||
"p1": {"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":367861,"bossDmg":200159,"heal":4914,"deaths":2,"layerGains":{}},
|
||||
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":734023,"bossDmg":567221,"heal":9205,"deaths":5,"layerGains":{}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,5,0,0,0,0,0,0],
|
||||
["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,9,0,0,0,0,0,0],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",3489.5,1,15,1,3864,0,0,0,3],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,42,0,5478,4818,1781,19,2],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1989,1,11,5,216376,0,3535,25,6],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,19,0,63613,3102,23,55,5],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,21,2,118113,2929,347,221,6],
|
||||
["p1",3,"op","chess_char_5_14_b",1,"none",3489.5,1,15,0,15418,0,0,0,4],
|
||||
["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,43,1,4432,5429,1643,19,2],
|
||||
["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1989,1,11,2,166810,0,2200,29,6],
|
||||
["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,19,0,64611,957,0,64,6],
|
||||
["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,49,3,93384,2895,113,214,6],
|
||||
["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,3,0,0,0,0,0,0],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,7,0,0,0,3025,4,2],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,13,0,17221,0,0,10,1],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,49,0,0,4098,0,0,1],
|
||||
["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,47,0,7846,2420,188,13,1],
|
||||
["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,30,0,320008,0,0,251,7],
|
||||
["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,48,0,2076,6222,1217,4,2],
|
||||
["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,38,0,28887,2204,585,341,2],
|
||||
["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2060.34,1,20,7,349105,2945,1629,123,6],
|
||||
["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,10,1,10469,40,40,13,2],
|
||||
["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,18,0,98654,416,416,111,4],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,22,0,112204,630,630,200,49],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,4,0,47559,0,0,17,5],
|
||||
["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,7,0,0,0,957,1,1],
|
||||
["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,13,0,23206,0,0,10,1],
|
||||
["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,6,0,0,0,0,0,1],
|
||||
["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,52,0,112471,6080,385,174,6],
|
||||
["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",213.43,1,53,0,3840,7314,855,1,1],
|
||||
["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,33,0,104516,0,0,238,2],
|
||||
["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1233.93,1,18,6,199328,2261,717,84,5],
|
||||
["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,12,2,160101,0,0,271,4],
|
||||
["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1249.33,1,20,0,9407,1072,657,7,2],
|
||||
["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1282.27,1,22,0,52752,7540,6590,122,5],
|
||||
["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,4,1,32179,0,0,40,11],
|
||||
["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,8,1,59429,0,0,24,6],
|
||||
["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,23,0,0,0,0,0,null],
|
||||
["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,24,0,0,0,0,0,null],
|
||||
["-","~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_1402_tgshd_2": [2,2,0,9259,173864],
|
||||
"enemy_9010_acpupp": [2,2,0,3029,160520],
|
||||
"enemy_9021_acduml_2": [1,0,0,0,1066971],
|
||||
"enemy_9022_acdumm": [1,0,0,373,0],
|
||||
"enemy_9023_acdums": [12,12,0,10960,120]
|
||||
"enemy_1402_tgshd_2": [2,2,0,6522,173864],
|
||||
"enemy_9010_acpupp": [2,2,0,3501,160520],
|
||||
"enemy_9021_acduml_2": [1,0,0,343,767380],
|
||||
"enemy_9022_acdumm": [1,0,0,453,0],
|
||||
"enemy_9023_acdums": [12,12,0,17083,120]
|
||||
},
|
||||
"hooks": [1,49,6000,1246,1377,2368,2483,4223,23,24,104,101,0,32963,1844,8,18,0,1,26,0,3,0],
|
||||
"events": {"atk":1352,"deploy":29,"die":24,"dmg":2465,"fx":877,"heal":64,"skill":205,"spawn":42,"status":671},
|
||||
"hooks": [1,51,6000,1128,1262,2491,2638,5656,23,25,69,65,0,29939,1498,5,18,0,1,25,0,5,0],
|
||||
"events": {"atk":1227,"deploy":31,"die":25,"dmg":2627,"fx":988,"heal":28,"skill":134,"spawn":42,"status":587},
|
||||
"fx": {
|
||||
"aoe": 5,
|
||||
"appear": 2,
|
||||
"beam": 13,
|
||||
"blink": 1,
|
||||
"burst": 3,
|
||||
"charge": 2,
|
||||
"crit": 7,
|
||||
"dilemma": 6,
|
||||
"disappear": 2,
|
||||
"displace": 4,
|
||||
"aoe": 6,
|
||||
"beam": 12,
|
||||
"blink": 2,
|
||||
"burst": 5,
|
||||
"charge": 1,
|
||||
"crit": 126,
|
||||
"dilemma": 5,
|
||||
"ember": 2,
|
||||
"explode": 178,
|
||||
"explosion": 5,
|
||||
"expose": 209,
|
||||
"frostNova": 49,
|
||||
"iceSpike": 175,
|
||||
"explode": 193,
|
||||
"explosion": 6,
|
||||
"expose": 190,
|
||||
"frostNova": 11,
|
||||
"garrisonGrant": 1,
|
||||
"iceSpike": 179,
|
||||
"levitate": 4,
|
||||
"overclock": 1,
|
||||
"phase": 33,
|
||||
"pull": 1,
|
||||
"pull": 5,
|
||||
"quadShot": 4,
|
||||
"ripple": 10,
|
||||
"sentry": 1,
|
||||
"shadowWeave": 1,
|
||||
"sentry": 3,
|
||||
"shadowWeave": 5,
|
||||
"shield": 1,
|
||||
"shieldBreak": 2,
|
||||
"slippery": 4,
|
||||
"sp": 2,
|
||||
"stealth": 7,
|
||||
"shieldBreak": 1,
|
||||
"slippery": 2,
|
||||
"sp": 3,
|
||||
"splash": 2,
|
||||
"stealth": 6,
|
||||
"summon": 8,
|
||||
"swordRain": 14,
|
||||
"swordRain": 7,
|
||||
"swordStorm": 2,
|
||||
"telegraph": 2,
|
||||
"tornado": 1,
|
||||
"tornadoPulse": 5,
|
||||
"weightless": 5,
|
||||
"tornado": 5,
|
||||
"tornadoPulse": 25,
|
||||
"weightless": 6,
|
||||
"zone": 114
|
||||
},
|
||||
"snaps": "2c69fe6c abc6b86b f72f3e77 8614e1a0 400871dc 3b1793ec d3f50041 7a737a83 03e5d8a4 19d891ad 49ae8f1a 81011e7a eba67866 a900037d 0c5a9938 086b50ab a6d68dfb e3154077 37c85fa4 d28a4203"
|
||||
"snaps": "8c189829 81a8fef7 3a4efaf3 440bf668 b43d07bc c46051bd 2bcf8382 efce6da0 a46087d4 5f55eb3f f9676b16 b50095b5 2f6e3a01 4ac1b23a abb356ab 46054e7e 664989bd 9279976f d91a3dbd c2732ee9"
|
||||
},
|
||||
"hidden-boss_10-solo": {
|
||||
"about": "假想敌:管 solo pool 1900000: 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",
|
||||
|
||||
+162
-198
@@ -549,7 +549,7 @@
|
||||
"snaps": "74efae3f f0ba5ed6 7f080293 ce089018 72fd5b40 aa7cfc03 9cd4911e 59794743 22e30ffb a647f35c 1fac8532 af13d758 f00ae8e0 3abb265c d6a41faf b70c8a95"
|
||||
},
|
||||
"roster-010": {
|
||||
"about": "pass 0 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_12_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "pass 0 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": true,
|
||||
"kind": "normal",
|
||||
"stageId": "act2autochess_m03",
|
||||
@@ -560,56 +560,56 @@
|
||||
"time": 170,
|
||||
"ticks": 5100,
|
||||
"reason": "timeout",
|
||||
"killed": 40,
|
||||
"killed": 35,
|
||||
"total": 102,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 114,
|
||||
"rngDraws": 64,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":40,"total":102,"perfect":false,"leaks":62,"leaksUncounted":0,"coins":4,"dmg":469309,"bossDmg":0,"heal":4633,"deaths":21,"layerGains":{"preciShip":8}}
|
||||
"p1": {"killed":35,"total":102,"perfect":false,"leaks":67,"leaksUncounted":0,"coins":4,"dmg":370317,"bossDmg":0,"heal":1892,"deaths":22,"layerGains":{"preciShip":12}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_17_a",1,null,0,0,4,0,947,2849,0,7,0],
|
||||
["p1",2,"op","chess_char_4_18_a",1,null,0,0,5,1,8608,3319,452,4,4],
|
||||
["p1",3,"op","chess_char_4_11_a",1,null,2144,1,125,0,0,3002,0,0,1],
|
||||
["p1",4,"op","chess_char_4_12_a",2,null,0,0,102,5,70347,5044,1536,37,2],
|
||||
["p1",5,"op","chess_char_4_19_a",2,null,0,0,82,0,6224,3120,0,9,1],
|
||||
["p1",6,"op","chess_char_4_07_a",1,null,0,0,112,0,423,3476,0,2,1],
|
||||
["p1",7,"op","chess_char_4_16_a",2,null,1,1,129,5,100862,8873,2644,33,9],
|
||||
["p1",8,"op","chess_char_4_09_a",1,null,0,0,15,0,16650,1336,0,14,2],
|
||||
["p1",9,"op","chess_char_4_10_a",1,null,0,0,6,0,40704,2190,0,17,1],
|
||||
["p1",10,"op","chess_char_4_13_a",1,null,0,0,111,1,30141,3174,0,43,5],
|
||||
["p1",11,"op","chess_char_4_14_a",1,null,0,0,104,14,173742,2552,0,33,2],
|
||||
["p1",12,"op","chess_char_4_20_a",2,null,0,0,93,4,20658,2434,0,10,1],
|
||||
["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null],
|
||||
["p1",1,"op","chess_char_4_17_a",1,null,0,0,5,0,1673,2849,0,10,0],
|
||||
["p1",2,"op","chess_char_4_18_a",1,null,0,0,6,0,1211,4202,1335,2,2],
|
||||
["p1",3,"op","chess_char_4_11_a",1,null,0,0,10,0,2906,2813,0,6,1],
|
||||
["p1",4,"op","chess_char_4_19_a",2,null,0,0,97,1,14708,3120,0,23,1],
|
||||
["p1",5,"op","chess_char_4_07_a",1,null,1738,1,132,0,1309,3476,0,1,1],
|
||||
["p1",6,"op","chess_char_4_16_a",2,null,0,0,128,0,76151,6230,0,27,5],
|
||||
["p1",7,"op","chess_char_4_09_a",1,null,0,0,11,1,18583,1336,0,12,1],
|
||||
["p1",8,"op","chess_char_4_10_a",1,null,0,0,108,1,26881,4894,0,19,1],
|
||||
["p1",9,"op","chess_char_4_12_a",2,null,0,0,119,0,30032,4065,557,22,1],
|
||||
["p1",10,"op","chess_char_4_13_a",1,null,0,0,99,2,28416,3174,0,49,4],
|
||||
["p1",11,"op","chess_char_4_14_a",1,null,0,0,94,12,135099,2552,0,25,2],
|
||||
["p1",12,"op","chess_char_4_20_a",2,null,0,0,4,3,33349,1217,0,13,1],
|
||||
["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null],
|
||||
["-","~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_10034_cnvsax": [1,1,0,4495,42998],
|
||||
"enemy_1005_yokai": [24,16,8,0,60158],
|
||||
"enemy_1005_yokai_2": [27,11,14,5256,113643],
|
||||
"enemy_1005_yokai_3": [6,0,5,11587,126060],
|
||||
"enemy_10034_cnvsax": [1,1,0,681,42998],
|
||||
"enemy_1005_yokai": [24,12,12,0,56519],
|
||||
"enemy_1005_yokai_2": [27,5,17,5019,75583],
|
||||
"enemy_1005_yokai_3": [6,0,6,16842,92050],
|
||||
"enemy_10083_hlbird": [1,1,0,0,6450],
|
||||
"enemy_10144_xdelk_2": [1,0,1,2904,32957],
|
||||
"enemy_1050_lslime": [1,0,1,11734,13748],
|
||||
"enemy_1158_divman": [1,1,0,130,14189],
|
||||
"enemy_1174_duholy_2": [1,0,1,801,15691],
|
||||
"enemy_1204_msfhu_2": [1,0,1,0,3],
|
||||
"enemy_1267_nhpbr_2": [1,0,1,61,3079],
|
||||
"enemy_1269_nhfly": [33,10,23,3841,20722],
|
||||
"enemy_1321_wdarft": [1,0,1,0,0],
|
||||
"enemy_1422_lrsldr_2": [1,0,1,0,19051],
|
||||
"enemy_1516_jakill": [1,0,1,559,559],
|
||||
"enemy_10144_xdelk_2": [1,0,1,3226,30020],
|
||||
"enemy_1050_lslime": [1,0,1,11038,24737],
|
||||
"enemy_1158_divman": [1,1,0,140,14189],
|
||||
"enemy_1174_duholy_2": [1,0,1,1192,3341],
|
||||
"enemy_1204_msfhu_2": [1,0,1,0,4],
|
||||
"enemy_1267_nhpbr_2": [1,0,1,61,1368],
|
||||
"enemy_1269_nhfly": [33,15,18,1358,19707],
|
||||
"enemy_1321_wdarft": [1,0,1,0,2047],
|
||||
"enemy_1422_lrsldr_2": [1,0,1,290,1118],
|
||||
"enemy_1516_jakill": [1,0,1,81,186],
|
||||
"enemy_2034_sythef_2": [1,0,1,0,0]
|
||||
},
|
||||
"hooks": [1,130,5100,428,428,1138,1119,1063,65,120,29,30,0,8699,498,10,102,59,1,200,2,0,36],
|
||||
"events": {"atk":499,"bounty":2,"deploy":25,"die":61,"dmg":1106,"fx":217,"heal":8,"layer":2,"leak":59,"skill":60,"spawn":119,"status":299},
|
||||
"fx": {"beam":22,"block":3,"catShield":2,"charge":1,"dilemma":2,"dodge":36,"explode":10,"explosion":2,"featherArrow":1,"flame":1,"frostNova":5,"garrison":2,"garrisonGrant":1,"overclock":1,"phase":2,"pull":1,"riposte":6,"rockslide":4,"shieldBreak":4,"slippery":1,"summon":11,"swordRain":65,"swordStorm":9,"telegraph":2,"thorns":5,"tornado":2,"tornadoPulse":9,"undying":7},
|
||||
"snaps": "a11f2665 9baaf19a e920dc19 198d3a45 baa40e7a 3b94af70 106e002a fdd90efe e21ec604 fe43a631 8239580b d00386be b6d9a443 250fb743 0e44df17 4b9bacbc ac746ded"
|
||||
"hooks": [1,130,5100,419,419,1069,1051,388,57,119,20,21,0,7357,426,12,102,62,1,207,3,0,10],
|
||||
"events": {"atk":485,"bounty":2,"deploy":25,"die":57,"dmg":959,"fx":147,"heal":4,"layer":3,"leak":62,"skill":42,"spawn":119,"status":274},
|
||||
"fx": {"block":8,"catShield":1,"charge":1,"dilemma":1,"dodge":10,"explode":18,"explosion":2,"featherArrow":1,"flame":1,"frostNova":4,"garrison":3,"garrisonGrant":1,"overclock":1,"pull":1,"riposte":2,"rockslide":2,"shieldBreak":5,"slippery":1,"summon":11,"swordRain":48,"swordStorm":5,"telegraph":1,"thorns":6,"tornado":1,"tornadoPulse":5,"undying":7},
|
||||
"snaps": "57fe2e2f 4a53b7b8 2e0d662f c2473d0c d61f8291 0f879595 34e652a4 ea9b995f 19d258e5 019f5b39 2e2a3d4d 8b38907c 2927da2c 3ad7a87f ce8d9d20 0b381f42 180cd6d8"
|
||||
},
|
||||
"roster-011": {
|
||||
"about": "pass 0 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_21_a chess_char_4_24_a chess_char_4_25_a chess_char_4_26_a chess_char_4_02_b chess_char_4_06_b",
|
||||
@@ -672,7 +672,7 @@
|
||||
"snaps": "c002e613 10a048e4 83882719 48595aaf c4331395 cfece443 01fb830e 82f827f8 d791c555 fec11375 d25c1e59 b986924f 415cc8f6 cc8bf2ac 1aec718d d2106326 d7cd1fea 2093bc04 facf1e90"
|
||||
},
|
||||
"roster-012": {
|
||||
"about": "pass 0 band 5: chess_char_4_17_b chess_char_4_18_b chess_char_4_11_b chess_char_4_12_b chess_char_4_19_b chess_char_4_22_b chess_char_4_16_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b chess_char_4_20_b chess_char_4_21_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "pass 0 band 5: chess_char_4_17_b chess_char_4_18_b chess_char_4_11_b chess_char_4_19_b chess_char_4_22_b chess_char_4_16_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b chess_char_4_20_b chess_char_4_21_b token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": true,
|
||||
"kind": "normal",
|
||||
"stageId": "act1autochess_m01",
|
||||
@@ -680,33 +680,33 @@
|
||||
"round": 10,
|
||||
"seed": 1517795683,
|
||||
"waveId": "act1autochess_h03",
|
||||
"time": 174.73,
|
||||
"ticks": 5242,
|
||||
"time": 161.8,
|
||||
"ticks": 4854,
|
||||
"reason": "cleared",
|
||||
"killed": 97,
|
||||
"total": 98,
|
||||
"total": 100,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 278,
|
||||
"rngDraws": 191,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":97,"total":98,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":10,"dmg":997508,"bossDmg":0,"heal":27788,"deaths":12,"layerGains":{"preciShip":16}}
|
||||
"p1": {"killed":97,"total":100,"perfect":false,"leaks":3,"leaksUncounted":0,"coins":10,"dmg":973740,"bossDmg":0,"heal":22888,"deaths":5,"layerGains":{"preciShip":8}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_17_b",1,"uniequip_002_hsguma",0,0,7,0,276,3513,0,11,0],
|
||||
["p1",2,"op","chess_char_4_18_b",1,"uniequip_002_mudrok",6069,1,10,21,192055,12064,12029,56,29],
|
||||
["p1",3,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,104,0,2798,7356,0,3,2],
|
||||
["p1",4,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,97,10,66884,6424,1960,27,3],
|
||||
["p1",5,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",1681.22,1,123,5,49023,4673,0,36,3],
|
||||
["p1",6,"op","chess_char_4_22_b",2,"uniequip_002_svrash",0,0,8,8,93767,11156,0,47,2],
|
||||
["p1",7,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,9,0,4627,2645,0,43,1],
|
||||
["p1",8,"op","chess_char_4_10_b",1,"uniequip_002_aroma",319.84,1,4,33,359780,1344,0,54,4],
|
||||
["p1",9,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,5,1,21641,1926,0,46,18],
|
||||
["p1",10,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,101,17,148925,3252,0,25,11],
|
||||
["p1",11,"op","chess_char_4_20_b",2,"uniequip_002_fartth",0,0,91,2,57733,2838,0,22,2],
|
||||
["p1",12,"op","chess_char_4_21_b",1,"uniequip_002_plosis",1584,1,6,0,0,641,13799,35,1],
|
||||
["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null],
|
||||
["p1",1,"op","chess_char_4_17_b",1,"uniequip_002_hsguma",1863.45,1,7,1,772,1650,0,30,0],
|
||||
["p1",2,"op","chess_char_4_18_b",1,"uniequip_002_mudrok",6104,1,9,5,79773,1534,1534,35,6],
|
||||
["p1",3,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,122,1,6068,3486,0,11,2],
|
||||
["p1",4,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",0,0,99,2,41844,4236,0,35,3],
|
||||
["p1",5,"op","chess_char_4_22_b",2,"uniequip_002_svrash",2169,1,121,9,79043,5538,0,22,3],
|
||||
["p1",6,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,8,0,9,1137,0,9,1],
|
||||
["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",145.6,1,4,0,0,1518,0,0,0],
|
||||
["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,5,2,10223,1114,1114,8,2],
|
||||
["p1",9,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,11,19,181690,2791,0,91,37],
|
||||
["p1",10,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1526,1,13,42,466520,7956,0,56,23],
|
||||
["p1",11,"op","chess_char_4_20_b",2,"uniequip_002_fartth",700.8,1,6,16,107798,718,0,38,6],
|
||||
["p1",12,"op","chess_char_4_21_b",1,"uniequip_002_plosis",1484,1,14,0,0,9693,20240,100,2],
|
||||
["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null],
|
||||
["-","~1","device","trap_1105_accrate",null,null,100,0,1,0,0,0,0,0,null],
|
||||
["-","~2","device","trap_1105_accrate",null,null,100,0,2,0,0,0,0,0,null],
|
||||
["-","~3","device","trap_1105_accrate",null,null,100,0,3,0,0,0,0,0,null]
|
||||
@@ -715,58 +715,24 @@
|
||||
"enemy_10042_prtrop": [1,1,0,0,6912],
|
||||
"enemy_10085_hllevi_2": [1,1,0,0,92160],
|
||||
"enemy_10159_mntrjn": [1,1,0,0,32256],
|
||||
"enemy_1062_rager_2": [1,1,0,2649,34560],
|
||||
"enemy_1062_rager_2": [1,1,0,0,34560],
|
||||
"enemy_1160_hvyslr_2": [1,1,0,0,16128],
|
||||
"enemy_1183_mlasrt": [1,1,0,1417,7488],
|
||||
"enemy_1207_sfji_2": [1,1,0,1923,16128],
|
||||
"enemy_1208_msfji_2": [2,2,0,0,60],
|
||||
"enemy_1267_nhpbr": [45,45,0,8681,233280],
|
||||
"enemy_1267_nhpbr_2": [24,24,0,6514,152064],
|
||||
"enemy_1270_nhstlk": [1,1,0,21,13824],
|
||||
"enemy_1270_nhstlk_2": [15,15,0,11284,276480],
|
||||
"enemy_1325_cbgpro_2": [1,1,0,15,5299],
|
||||
"enemy_1425_lrcmra_2": [1,1,0,1199,28800],
|
||||
"enemy_1525_blkswb": [1,0,1,17888,47988],
|
||||
"enemy_2050_smsha": [1,1,0,6241,46080]
|
||||
"enemy_1183_mlasrt": [1,1,0,1482,7488],
|
||||
"enemy_1207_sfji_2": [1,1,0,0,16128],
|
||||
"enemy_1208_msfji_2": [4,2,2,0,112],
|
||||
"enemy_1267_nhpbr": [45,45,0,14256,233280],
|
||||
"enemy_1267_nhpbr_2": [24,24,0,6700,152064],
|
||||
"enemy_1270_nhstlk": [1,1,0,0,13824],
|
||||
"enemy_1270_nhstlk_2": [15,15,0,8469,276480],
|
||||
"enemy_1325_cbgpro_2": [1,1,0,0,5299],
|
||||
"enemy_1425_lrcmra_2": [1,1,0,718,28800],
|
||||
"enemy_1525_blkswb": [1,0,1,7561,23419],
|
||||
"enemy_2050_smsha": [1,1,0,2185,46080]
|
||||
},
|
||||
"hooks": [1,121,5242,526,526,1444,1693,1144,109,113,76,75,0,13597,1632,56,98,1,1,119,2,1,11],
|
||||
"events": {"atk":832,"bounty":5,"deploy":20,"die":112,"dmg":1676,"fx":378,"heal":78,"layer":2,"leak":1,"skill":152,"spawn":115,"status":479},
|
||||
"fx": {
|
||||
"beam": 5,
|
||||
"blink": 2,
|
||||
"block": 2,
|
||||
"burst": 1,
|
||||
"displace": 25,
|
||||
"dodge": 11,
|
||||
"explode": 5,
|
||||
"explosion": 11,
|
||||
"featherArrow": 2,
|
||||
"flame": 3,
|
||||
"frostNova": 18,
|
||||
"garrison": 2,
|
||||
"garrisonGrant": 1,
|
||||
"healField": 1,
|
||||
"levitate": 83,
|
||||
"overclock": 2,
|
||||
"palsy": 4,
|
||||
"pull": 2,
|
||||
"revive": 1,
|
||||
"riposte": 9,
|
||||
"rockslide": 29,
|
||||
"shieldBreak": 17,
|
||||
"slash": 19,
|
||||
"slippery": 4,
|
||||
"splash": 29,
|
||||
"summon": 1,
|
||||
"swordStorm": 1,
|
||||
"telegraph": 2,
|
||||
"thorns": 2,
|
||||
"tornado": 3,
|
||||
"tornadoPulse": 10,
|
||||
"truesilver": 2,
|
||||
"zone": 69
|
||||
},
|
||||
"snaps": "c0395dfa 0bc3a88e 16ea4fc8 44910193 6b2d71a2 4c4f69c8 95b16219 8cea36a9 c1cf499b 2e4e30b2 5b44582c 697803ae 5af424df 15bc9baa 36e7dd7e 29ea8855 8bce8feb e3404557"
|
||||
"hooks": [1,121,4854,470,470,1388,1387,830,102,108,85,83,0,16257,1775,20,100,3,1,112,1,0,3],
|
||||
"events": {"atk":628,"bounty":5,"deploy":18,"die":105,"dmg":1379,"fx":236,"heal":222,"layer":1,"leak":3,"skill":170,"spawn":117,"status":878},
|
||||
"fx": {"beam":6,"blink":2,"block":1,"displace":10,"dodge":3,"explode":4,"explosion":23,"featherArrow":6,"flame":3,"frostNova":37,"garrison":1,"garrisonGrant":1,"healField":2,"overclock":2,"palsy":1,"pull":2,"revive":1,"riposte":3,"rockslide":6,"shieldBreak":8,"slash":19,"summon":1,"swordStorm":1,"telegraph":3,"thorns":6,"tornado":2,"tornadoPulse":10,"truesilver":3,"zone":69},
|
||||
"snaps": "273dcc8e c323f708 7c1d7d8a 0f1c8a5d fa1faa7c 5973c4b4 1abb6f51 fc254e01 5e27fbd7 4c75c9e8 3d3d371b d21abedf 1215afdd c03925aa 45aadc00 eecaaba5 03eee058"
|
||||
},
|
||||
"roster-013": {
|
||||
"about": "pass 0 band 5: chess_char_4_23_b chess_char_5_08_a chess_char_5_01_a chess_char_5_05_a chess_char_5_06_a chess_char_5_07_a chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b chess_char_5_02_a chess_char_5_03_a chess_char_5_10_a",
|
||||
@@ -1754,7 +1720,7 @@
|
||||
"snaps": "7c092213 7eeed0b1 ac8f2ed3 3858c149 e8ea91a7 8453351a 4fc7b210 32f63df8 4e74f555 5bfbe308 7746a517 c9e84d55 480b39df 046d3213 b82f6b7a f22d156a 686086b5"
|
||||
},
|
||||
"roster-029": {
|
||||
"about": "pass 1 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_12_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"about": "pass 1 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld",
|
||||
"fast": false,
|
||||
"kind": "normal",
|
||||
"stageId": "act1autochess_m07",
|
||||
@@ -1762,52 +1728,52 @@
|
||||
"round": 8,
|
||||
"seed": 3016944661,
|
||||
"waveId": "act1autochess_h01",
|
||||
"time": 158.8,
|
||||
"ticks": 4764,
|
||||
"time": 154.7,
|
||||
"ticks": 4641,
|
||||
"reason": "cleared",
|
||||
"killed": 78,
|
||||
"killed": 76,
|
||||
"total": 85,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 99,
|
||||
"rngDraws": 83,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":78,"total":85,"perfect":false,"leaks":7,"leaksUncounted":0,"coins":4,"dmg":318167,"bossDmg":0,"heal":3327,"deaths":10,"layerGains":{"preciShip":4}}
|
||||
"p1": {"killed":76,"total":85,"perfect":false,"leaks":9,"leaksUncounted":0,"coins":4,"dmg":309220,"bossDmg":0,"heal":3524,"deaths":6,"layerGains":{"preciShip":4}}
|
||||
},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_17_a",0,null,1139.6,1,110,2,20509,2880,0,64,2],
|
||||
["p1",2,"op","chess_char_4_18_a",0,null,2867,1,6,7,22524,4394,2929,55,2],
|
||||
["p1",3,"op","chess_char_4_11_a",0,null,2144,1,106,2,3579,3145,0,11,0],
|
||||
["p1",4,"op","chess_char_4_12_a",0,null,1754,1,104,3,8643,2902,398,27,9],
|
||||
["p1",5,"op","chess_char_4_19_a",0,null,1560,1,105,4,8607,3442,0,39,4],
|
||||
["p1",6,"op","chess_char_4_07_a",0,null,1738,1,89,2,13301,2526,0,35,2],
|
||||
["p1",7,"op","chess_char_4_16_a",0,null,257.6,1,63,20,55897,11230,0,97,5],
|
||||
["p1",8,"op","chess_char_4_09_a",0,null,386,1,3,7,25390,1000,0,12,9],
|
||||
["p1",9,"op","chess_char_4_10_a",0,null,0,0,5,0,0,1338,0,0,0],
|
||||
["p1",10,"op","chess_char_4_13_a",0,null,0,0,7,8,30420,2137,0,64,19],
|
||||
["p1",11,"op","chess_char_4_14_a",0,null,1096,1,107,8,39405,5906,0,16,1],
|
||||
["p1",12,"op","chess_char_4_20_a",0,null,1217,1,11,15,89892,500,0,55,2],
|
||||
["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,15,0,0,0,0,0,null],
|
||||
["p1",1,"op","chess_char_4_17_a",0,null,1139.6,1,101,0,13558,2008,0,47,2],
|
||||
["p1",2,"op","chess_char_4_18_a",0,null,2580,1,5,2,5324,3725,2225,30,1],
|
||||
["p1",3,"op","chess_char_4_11_a",0,null,2144,1,105,0,1383,3073,0,15,0],
|
||||
["p1",4,"op","chess_char_4_19_a",0,null,1560,1,94,1,353,1860,0,12,4],
|
||||
["p1",5,"op","chess_char_4_07_a",0,null,331.2,1,11,5,8888,2907,0,33,2],
|
||||
["p1",6,"op","chess_char_4_16_a",0,null,601.6,1,63,12,37012,9546,0,66,5],
|
||||
["p1",7,"op","chess_char_4_09_a",0,null,1326,1,14,17,84925,520,0,36,17],
|
||||
["p1",8,"op","chess_char_4_10_a",0,null,338,1,4,0,0,1500,0,0,0],
|
||||
["p1",9,"op","chess_char_4_12_a",0,null,1754,1,6,0,0,1899,1299,0,0],
|
||||
["p1",10,"op","chess_char_4_13_a",0,null,1587,1,8,3,14535,500,0,40,13],
|
||||
["p1",11,"op","chess_char_4_14_a",0,null,0,0,10,16,48517,7376,0,26,2],
|
||||
["p1",12,"op","chess_char_4_20_a",0,null,223,1,12,20,94726,1094,0,56,2],
|
||||
["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,15,0,0,0,0,0,null],
|
||||
["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null],
|
||||
["-","~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_10081_mpplai": [1,1,0,0,2000],
|
||||
"enemy_1026_aghost": [1,1,0,0,3040],
|
||||
"enemy_1148_dssbr": [45,44,1,2857,99163],
|
||||
"enemy_1148_dssbr_2": [27,27,0,434,77760],
|
||||
"enemy_1160_hvyslr_2": [1,0,1,3783,2416],
|
||||
"enemy_1200_msfjin_2": [1,0,1,0,29],
|
||||
"enemy_1272_nhtank_2": [1,1,0,12240,12000],
|
||||
"enemy_1407_hummbd": [1,1,0,48,3600],
|
||||
"enemy_1439_dslntf": [6,3,3,7340,112566],
|
||||
"enemy_2002_bearmi_2": [1,0,1,2252,5593]
|
||||
"enemy_1148_dssbr": [45,43,2,146,99626],
|
||||
"enemy_1148_dssbr_2": [27,26,1,150,76514],
|
||||
"enemy_1160_hvyslr_2": [1,0,1,6789,9376],
|
||||
"enemy_1200_msfjin_2": [1,1,0,0,35],
|
||||
"enemy_1272_nhtank_2": [1,0,1,8756,2813],
|
||||
"enemy_1407_hummbd": [1,1,0,20,3600],
|
||||
"enemy_1439_dslntf": [6,2,4,4696,103415],
|
||||
"enemy_2002_bearmi_2": [1,1,0,1311,8800]
|
||||
},
|
||||
"hooks": [1,109,4764,670,670,1086,1879,759,88,95,55,54,0,22092,730,68,85,7,1,88,1,10,8],
|
||||
"events": {"atk":685,"bounty":2,"deploy":22,"die":88,"dmg":1865,"fx":73,"heal":477,"layer":1,"leak":7,"skill":112,"spawn":101,"status":236},
|
||||
"fx": {"block":10,"burst":10,"displace":3,"dodge":8,"dp":4,"explode":1,"expose":2,"garrison":1,"garrisonGrant":1,"phase":1,"riposte":8,"shieldBreak":14,"swordRain":5,"zone":5},
|
||||
"snaps": "5ee1d302 1c02fbcd cbb518f8 fc90ae00 98195e0a 21da2468 b9aa38e0 db0862b7 a4015752 c3d0537c 5e0bdc1d b3dd31dc 595b167d 137aa308 f30e8d89 932e6025"
|
||||
"hooks": [1,106,4641,470,470,920,1638,1314,82,91,48,48,0,22203,805,35,85,9,1,82,1,4,1],
|
||||
"events": {"atk":508,"bounty":2,"deploy":19,"die":82,"dmg":1628,"fx":45,"heal":418,"layer":1,"leak":9,"skill":99,"spawn":101,"status":149},
|
||||
"fx": {"block":11,"burst":4,"dodge":1,"dp":4,"explode":1,"expose":1,"garrison":1,"garrisonGrant":1,"phase":1,"riposte":1,"shieldBreak":10,"swordRain":5,"zone":4},
|
||||
"snaps": "d1a66fbb 1e4c3412 cfa655f4 33ae5aea be858e5a e390032f a14b2f14 f815866a e4173185 0a72a5c9 f546a0e1 e7e58926 f223a279 820a4de9 842392b8 3e71a88c"
|
||||
},
|
||||
"roster-030": {
|
||||
"about": "pass 1 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_21_a chess_char_4_24_a chess_char_4_25_a chess_char_4_26_a chess_char_4_02_b chess_char_4_06_b",
|
||||
@@ -2411,7 +2377,7 @@
|
||||
"snaps": "7039516f 1f992cb5 0f5e59af c4b1bbc5 07a0826f 56c348a1 323da105 91eb067a 068e4335 66187a93 1732df53 b1fbe31f f69a53e8 250909f9 25729cd3 5c78fdcd 2b29dd1f"
|
||||
},
|
||||
"roster-040": {
|
||||
"about": "pass 2 band 4: chess_char_4_01_a chess_char_4_17_a chess_char_4_18_a chess_char_4_12_a chess_char_4_04_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_3_19_b chess_char_3_21_b chess_char_4_02_a chess_char_4_13_a token_10028_vigil_wolf",
|
||||
"about": "pass 2 band 4: chess_char_4_01_a chess_char_4_17_a chess_char_4_18_a chess_char_4_04_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_3_19_b chess_char_3_21_b chess_char_4_02_a chess_char_4_12_a chess_char_4_13_a token_10028_vigil_wolf",
|
||||
"fast": false,
|
||||
"kind": "normal",
|
||||
"stageId": "act1autochess_m07",
|
||||
@@ -2422,50 +2388,50 @@
|
||||
"time": 170,
|
||||
"ticks": 5100,
|
||||
"reason": "timeout",
|
||||
"killed": 23,
|
||||
"killed": 28,
|
||||
"total": 65,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 243,
|
||||
"rngDraws": 295,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {"p1":{"killed":23,"total":65,"perfect":false,"leaks":42,"leaksUncounted":0,"coins":2,"dmg":401720,"bossDmg":0,"heal":502,"deaths":25,"layerGains":{}}},
|
||||
"players": {"p1":{"killed":28,"total":65,"perfect":false,"leaks":37,"leaksUncounted":0,"coins":2,"dmg":561253,"bossDmg":0,"heal":2277,"deaths":24,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_01_a",1,null,0,0,4,0,3410,2638,0,29,1],
|
||||
["p1",2,"op","chess_char_4_17_a",2,null,0,0,7,0,13400,2849,0,10,1],
|
||||
["p1",3,"op","chess_char_4_18_a",2,null,0,0,9,0,12723,2867,0,11,1],
|
||||
["p1",4,"op","chess_char_4_12_a",1,null,0,0,87,1,22797,3856,348,27,1],
|
||||
["p1",5,"op","chess_char_4_04_a",2,null,1260.13,1,96,2,10615,7540,0,12,5],
|
||||
["p1",6,"op","chess_char_4_07_a",2,null,0,0,77,0,9369,7998,0,23,1],
|
||||
["p1",7,"op","chess_char_4_16_a",1,null,0,0,94,2,53656,7476,0,11,7],
|
||||
["p1",8,"op","chess_char_4_09_a",2,null,0,0,3,0,0,1336,0,0,0],
|
||||
["p1",9,"op","chess_char_3_19_b",1,"none",0,0,5,5,51724,1648,0,66,4],
|
||||
["p1",10,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,95,8,151296,3180,0,81,9],
|
||||
["p1",11,"op","chess_char_4_02_a",1,null,0,0,84,1,20900,2856,0,8,1],
|
||||
["p1",12,"op","chess_char_4_13_a",2,null,0,0,79,4,51831,3174,0,54,1],
|
||||
["p1",13,"token","token_10028_vigil_wolf",null,null,0,0,6,0,0,2567,154,0,null],
|
||||
["p1",1,"op","chess_char_4_01_a",1,null,0,0,3,0,1603,2638,0,26,1],
|
||||
["p1",2,"op","chess_char_4_17_a",2,null,0,0,6,0,15529,2849,0,9,1],
|
||||
["p1",3,"op","chess_char_4_18_a",2,null,0,0,8,0,11377,3440,573,16,1],
|
||||
["p1",4,"op","chess_char_4_04_a",2,null,1463.44,1,97,2,30861,7337,0,20,5],
|
||||
["p1",5,"op","chess_char_4_07_a",2,null,0,0,83,0,9257,8298,0,12,1],
|
||||
["p1",6,"op","chess_char_4_16_a",1,null,663.39,1,96,4,69623,9155,1097,22,9],
|
||||
["p1",7,"op","chess_char_4_09_a",2,null,655.94,1,88,0,19617,2016,0,21,1],
|
||||
["p1",8,"op","chess_char_3_19_b",1,"none",0,0,4,7,55272,1648,0,69,5],
|
||||
["p1",9,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,95,4,220834,3180,0,104,11],
|
||||
["p1",10,"op","chess_char_4_02_a",1,null,0,0,86,5,50113,2856,0,18,1],
|
||||
["p1",11,"op","chess_char_4_12_a",1,null,0,0,11,4,43045,2207,453,38,1],
|
||||
["p1",12,"op","chess_char_4_13_a",2,null,0,0,74,2,34124,3174,0,56,1],
|
||||
["p1",13,"token","token_10028_vigil_wolf",null,null,0,0,5,0,0,3541,154,0,null],
|
||||
["-","~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": [24,11,13,0,43819],
|
||||
"enemy_1005_yokai_2": [27,8,15,8571,80022],
|
||||
"enemy_1005_yokai_3": [6,1,5,18161,169071],
|
||||
"enemy_10065_ftzlc": [1,1,0,461,16339],
|
||||
"enemy_10162_mnctpt": [1,0,1,8289,20600],
|
||||
"enemy_1119_vofsd": [1,0,1,187,45251],
|
||||
"enemy_1005_yokai": [24,13,11,0,54982],
|
||||
"enemy_1005_yokai_2": [27,11,12,9355,92235],
|
||||
"enemy_1005_yokai_3": [6,1,5,16269,278698],
|
||||
"enemy_10065_ftzlc": [1,1,0,0,16339],
|
||||
"enemy_10162_mnctpt": [1,0,1,7018,55537],
|
||||
"enemy_1119_vofsd": [1,0,1,862,32824],
|
||||
"enemy_1196_msfyin_2": [1,1,0,0,3],
|
||||
"enemy_1254_lypa_2": [1,0,1,7915,22178],
|
||||
"enemy_1367_dseed": [1,0,1,0,1619],
|
||||
"enemy_1517_xi": [1,0,1,6402,2809],
|
||||
"enemy_1254_lypa_2": [1,0,1,10056,22924],
|
||||
"enemy_1367_dseed": [1,0,1,0,1882],
|
||||
"enemy_1517_xi": [1,0,1,8269,5820],
|
||||
"enemy_9016_acstmr": [1,1,0,0,8]
|
||||
},
|
||||
"hooks": [1,95,5100,558,558,836,872,514,50,88,32,31,16,8324,314,21,65,38,1,60,0,1,10],
|
||||
"events": {"atk":630,"bounty":1,"deploy":28,"die":50,"dmg":866,"fx":109,"heal":1,"leak":38,"skill":63,"spawn":80,"status":155},
|
||||
"fx": {"beam":5,"block":3,"buff":5,"burst":1,"coldWind":1,"displace":17,"dodge":10,"dp":4,"iceSpike":1,"liberate":1,"overclock":1,"overload":1,"palsy":4,"revive":3,"rockfall":1,"sentry":6,"shadowWeave":8,"shield":7,"shieldBreak":6,"stone":1,"swordStorm":7,"telegraph":2,"volley":9,"wake":1,"wolfShadow":1,"wolfShadowLost":2,"zone":1},
|
||||
"snaps": "ed481fc3 8e0dc466 ef4ce4ad d085ef7a c9763ca6 af64f527 2d3af1d5 67a9d60b 2e59cb78 c998981e 2978105f aef54882 19722e20 04daeecd b596b323 c3b27682 6a8a0ef3"
|
||||
"hooks": [1,96,5100,650,650,1044,1076,731,55,87,38,37,13,10088,270,14,65,33,1,66,0,2,19],
|
||||
"events": {"atk":742,"bounty":1,"deploy":29,"die":54,"dmg":1064,"fx":117,"heal":3,"leak":33,"skill":75,"spawn":80,"status":169},
|
||||
"fx": {"beam":5,"block":4,"buff":4,"burst":2,"coldWind":1,"dodge":19,"dp":5,"explode":1,"liberate":1,"overclock":1,"overload":1,"palsy":3,"revive":3,"ripple":1,"rockfall":1,"sentry":6,"shadowWeave":14,"shield":7,"shieldBreak":7,"stone":1,"swordStorm":9,"telegraph":3,"volley":11,"wake":1,"wolfShadow":2,"wolfShadowLost":3,"zone":1},
|
||||
"snaps": "96990ab6 47d9fcbb b6682854 8a9c5942 60e5c9ed 6b9c44fe a5ca7551 1568032d 1be5ada7 b119dbd8 85869e7c 3af299cb d618f1e8 5d28b358 1cf9df99 ca9b5cd1 9233013f"
|
||||
},
|
||||
"roster-041": {
|
||||
"about": "pass 2 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_19_a chess_char_4_22_a chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_20_a chess_char_4_24_a chess_char_4_25_a chess_char_4_02_b",
|
||||
"about": "pass 2 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_19_a chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_20_a chess_char_4_24_a chess_char_4_25_a chess_char_4_02_b chess_char_4_12_b",
|
||||
"fast": false,
|
||||
"kind": "normal",
|
||||
"stageId": "act2autochess_m01",
|
||||
@@ -2476,46 +2442,44 @@
|
||||
"time": 190,
|
||||
"ticks": 5700,
|
||||
"reason": "timeout",
|
||||
"killed": 41,
|
||||
"killed": 46,
|
||||
"total": 47,
|
||||
"unspawned": 0,
|
||||
"bossHpLeft": null,
|
||||
"rngDraws": 119,
|
||||
"rngDraws": 34,
|
||||
"errors": {"count":0,"kinds":[]},
|
||||
"players": {
|
||||
"p1": {"killed":41,"total":47,"perfect":false,"leaks":6,"leaksUncounted":0,"coins":8,"dmg":528616,"bossDmg":0,"heal":26818,"deaths":6,"layerGains":{"visiShip":4}}
|
||||
},
|
||||
"players": {"p1":{"killed":46,"total":47,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":8,"dmg":559871,"bossDmg":0,"heal":11418,"deaths":7,"layerGains":{}}},
|
||||
"units": [
|
||||
["p1",1,"op","chess_char_4_23_a",1,null,0,0,59,3,33316,4358,0,36,2],
|
||||
["p1",2,"op","chess_char_4_01_b",1,"none",1272.73,1,9,2,18415,3718,0,125,2],
|
||||
["p1",3,"op","chess_char_4_19_a",1,null,0,0,56,0,1987,3120,0,57,2],
|
||||
["p1",4,"op","chess_char_4_22_a",1,null,2022,1,7,0,1927,5565,1006,57,1],
|
||||
["p1",5,"op","chess_char_4_12_b",1,"none",4562.3,1,11,0,35227,17118,13682,86,5],
|
||||
["p1",6,"op","chess_char_4_04_b",2,"uniequip_002_ines",2149,1,14,11,181631,3872,0,149,1],
|
||||
["p1",7,"op","chess_char_4_07_b",2,"none",0,0,52,1,33633,4466,0,51,2],
|
||||
["p1",8,"op","chess_char_4_09_b",2,"uniequip_004_mizuki",1756,1,1,1,6302,263,0,1,1],
|
||||
["p1",9,"op","chess_char_4_20_a",1,null,1217,1,2,1,29735,0,0,78,3],
|
||||
["p1",10,"op","chess_char_4_24_a",2,null,1726,1,3,13,140546,0,0,36,4],
|
||||
["p1",11,"op","chess_char_4_25_a",1,null,1221,1,4,6,28378,0,764,0,3],
|
||||
["p1",12,"op","chess_char_4_02_b",1,"none",2966.25,1,5,3,17519,0,0,5,2],
|
||||
["p1","~1","token","char_613_acmedc",null,null,1314,1,13,0,0,0,11367,37,2]
|
||||
["p1",1,"op","chess_char_4_23_a",1,null,2179,1,65,0,6366,2179,0,34,1],
|
||||
["p1",2,"op","chess_char_4_01_b",1,"none",2245.72,1,9,0,6233,2745,0,95,2],
|
||||
["p1",3,"op","chess_char_4_19_a",1,null,0,0,67,0,1134,4680,0,25,2],
|
||||
["p1",4,"op","chess_char_4_22_a",1,null,2022,1,7,0,1073,3917,711,32,1],
|
||||
["p1",5,"op","chess_char_4_04_b",2,"uniequip_002_ines",2149,1,66,4,59256,11203,0,61,4],
|
||||
["p1",6,"op","chess_char_4_07_b",2,"none",2233,1,8,0,770,1498,0,5,2],
|
||||
["p1",7,"op","chess_char_4_09_b",2,"uniequip_004_mizuki",702.4,1,12,26,324777,2301,0,52,2],
|
||||
["p1",8,"op","chess_char_4_20_a",1,null,1217,1,2,4,22337,0,0,82,3],
|
||||
["p1",9,"op","chess_char_4_24_a",2,null,1726,1,3,10,99599,0,0,25,3],
|
||||
["p1",10,"op","chess_char_4_25_a",1,null,1221,1,4,2,12750,0,436,0,3],
|
||||
["p1",11,"op","chess_char_4_02_b",1,"none",2966.25,1,1,0,0,0,0,0,0],
|
||||
["p1",12,"op","chess_char_4_12_b",1,"none",4562.3,1,5,0,25577,0,0,67,4],
|
||||
["p1","~1","token","char_613_acmedc",null,null,1314,1,13,0,0,0,10271,24,1]
|
||||
],
|
||||
"enemies": {
|
||||
"enemy_1001_bigbo": [1,1,0,2989,17600],
|
||||
"enemy_1001_bigbo": [1,1,0,2027,17600],
|
||||
"enemy_10097_crshd": [1,1,0,0,8000],
|
||||
"enemy_1045_hammer": [1,1,0,532,8000],
|
||||
"enemy_1045_hammer_2": [6,5,0,10419,81316],
|
||||
"enemy_1061_zomshd": [33,28,0,23958,384890],
|
||||
"enemy_1045_hammer": [1,1,0,0,8000],
|
||||
"enemy_1045_hammer_2": [6,5,0,19501,93024],
|
||||
"enemy_1061_zomshd": [33,33,0,4261,399634],
|
||||
"enemy_1166_dusbr": [1,1,0,0,2400],
|
||||
"enemy_1204_msfhu_2": [1,1,0,0,6],
|
||||
"enemy_1288_duskls_2": [1,1,0,0,4805],
|
||||
"enemy_1427_lrnazg": [1,1,0,1405,12000],
|
||||
"enemy_2010_csdcr": [1,1,0,2913,9600]
|
||||
"enemy_1288_duskls_2": [1,1,0,0,9607],
|
||||
"enemy_1427_lrnazg": [1,1,0,720,12000],
|
||||
"enemy_2010_csdcr": [1,1,0,960,9600]
|
||||
},
|
||||
"hooks": [1,64,5700,1157,1157,1435,1439,27488,47,48,30,24,73,26690,96,56,47,0,1,48,1,0,14],
|
||||
"events": {"atk":1342,"bounty":4,"deploy":17,"die":48,"dmg":1409,"fx":192,"heal":72,"layer":1,"skill":54,"spawn":60,"status":325},
|
||||
"fx": {"aoe":2,"beam":1,"buff":2,"devour":4,"displace":4,"dodge":14,"ember":1,"garrison":1,"garrisonGrant":1,"link":3,"mote":98,"overload":4,"reweave":3,"riposte":4,"ripple":1,"sentry":2,"shadowWeave":37,"shield":1,"snow":1,"summon":1,"wake":5,"zone":2},
|
||||
"snaps": "39e7ce6d 6bf38ad7 b97d538a cd636ea4 171d3c97 cdfd8c44 d612e433 5f097ac7 053027bd a16e3f13 288a1e29 9b60247c 73a0d04c 4935688a fe7f1739 1881d361 9c94ffe2 24053735 3403994c"
|
||||
"hooks": [1,67,5700,642,642,1055,1059,20714,53,54,28,23,62,26339,94,58,47,0,1,55,0,0,6],
|
||||
"events": {"atk":946,"bounty":4,"deploy":20,"die":54,"dmg":1015,"fx":168,"heal":48,"skill":51,"spawn":60,"status":343},
|
||||
"fx": {"aoe":2,"beam":4,"buff":2,"devour":3,"displace":29,"dodge":6,"ember":2,"garrisonGrant":1,"link":3,"mote":71,"overload":3,"revive":1,"reweave":3,"riposte":2,"ripple":2,"sentry":5,"shadowWeave":19,"shield":4,"snow":1,"summon":1,"wake":4},
|
||||
"snaps": "10b0fc57 1879e30f 44354394 dddd1d0a 627a31ff cf3c19d7 47582a23 87c2e2e7 2d0f5158 d9b586e6 18b235f7 fdb8d063 12d39f7e f01978fd f7e457a8 eb5e327f fccdb560 79c7c5d0 4f791ba7"
|
||||
},
|
||||
"roster-042": {
|
||||
"about": "pass 2 band 5: 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_5_01_a chess_char_4_16_b chess_char_4_13_b chess_char_4_20_b chess_char_4_24_b chess_char_4_25_b chess_char_5_02_a",
|
||||
|
||||
+13
-14
@@ -55,27 +55,26 @@ test('glyph rules: melee only on LOW buildable ALL/MELEE; ranged also on HIGH/RA
|
||||
assert.ok(canPlace(buildDeployMap(null), 'melee', 10, 5));
|
||||
});
|
||||
|
||||
test('positionClass: melee stays ground-only; only elite 歌蕾蒂娅 + HOK-Y is widened (owner 2026-10-04)', () => {
|
||||
test('positionClass: a MELEE chess whose trait reads 「可以放置于远程位」 is widened, normal or elite, whatever the module (owner 2026-10-05)', () => {
|
||||
assert.equal(positionClass({ position: 'MELEE' }), 'melee');
|
||||
assert.equal(positionClass({ position: 'MELEE', placement: 'all' }), 'melee', 'the old placement field is ignored');
|
||||
assert.equal(basePositionClass({ position: 'MELEE', isGolden: true, charId: 'char_474_glady' }), 'melee');
|
||||
assert.equal(positionClass({ position: 'MELEE', trait: { desc: '技能可以使敌人产生位移\n可以放置于远程位' } }), 'all', 'the trait line');
|
||||
assert.equal(positionClass({ position: 'MELEE', trait: { desc: '可以额外部署在远程位' } }), 'melee', 'another wording is not the line');
|
||||
assert.equal(positionClass({ position: 'RANGED', trait: { desc: '可以放置于远程位' } }), 'ranged', 'a ranged record keeps its class');
|
||||
assert.equal(basePositionClass({ position: 'MELEE', trait: { desc: '可以放置于远程位' } }), 'melee', 'the battle class stays melee');
|
||||
assert.equal(positionClass({ position: 'RANGED' }), 'ranged');
|
||||
assert.equal(positionClass({ position: 'ALL' }), 'all');
|
||||
assert.equal(positionClass(null), 'all');
|
||||
const HOK_Y = 'uniequip_003_glady';
|
||||
const gladE = DATA.chess.chess_char_4_12_b;
|
||||
const map = buildDeployMap(DATA.stages.act2autochess_m01);
|
||||
assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_4_12_a, HOK_Y), 10, 4), 'normal 歌蕾蒂娅, even with the id, not');
|
||||
assert.ok(!canPlace(map, positionClass(gladE), 10, 4), 'elite with no module id (default is not passed) not');
|
||||
assert.ok(!canPlace(map, positionClass(gladE, 'uniequip_002_glady'), 10, 4), 'HOK-X not');
|
||||
assert.ok(!canPlace(map, positionClass(gladE, 'none'), 10, 4), 'no module not');
|
||||
assert.ok(canPlace(map, positionClass(gladE, HOK_Y), 10, 4), 'elite + HOK-Y on the 高台');
|
||||
assert.ok(canPlace(map, positionClass(gladE, HOK_Y), 9, 3), 'and still on the ground');
|
||||
assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_2_03_b, HOK_Y), 10, 4), '崖心 not');
|
||||
assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_3_07_b, HOK_Y), 10, 4), '见行者 not');
|
||||
// the six trait holders: 歌蕾蒂娅 / 崖心 (钩索师) and 见行者 (推击手), normal and elite
|
||||
for (const id of ['chess_char_4_12_a', 'chess_char_4_12_b', 'chess_char_2_03_a', 'chess_char_2_03_b', 'chess_char_3_07_a', 'chess_char_3_07_b']) {
|
||||
assert.equal(positionClass(DATA.chess[id]), 'all', id);
|
||||
assert.ok(canPlace(map, positionClass(DATA.chess[id]), 10, 4), `${id} on the 高台`);
|
||||
assert.ok(canPlace(map, positionClass(DATA.chess[id]), 9, 3), `${id} still on the ground`);
|
||||
assert.equal(basePositionClass(DATA.chess[id]), 'melee', `${id} blocks like a melee unit`);
|
||||
assert.equal(DATA.chess[id].placement, undefined);
|
||||
}
|
||||
assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_1_02_a), 10, 4), '角峰 (重装) not');
|
||||
assert.equal(DATA.chess.chess_char_4_12_a.placement, undefined);
|
||||
assert.equal(gladE.placement, undefined);
|
||||
});
|
||||
|
||||
test('g.move: legality per chess position, BAD_TILE outside, deploy cap 8, swaps allowed at cap', () => {
|
||||
|
||||
@@ -11,13 +11,15 @@
|
||||
// nowhere to go); moving the owner sends it back anyway (PRTS 卫戍协议/帮助 "移动干员时,其所属召唤物全部退场并重置
|
||||
// 至手牌区") — with no room it leaves the board until the next round start.
|
||||
// The sim side (突袭 landing tile, tactical point) is test/sim/feedback1-water.test.js.
|
||||
// Owner's decision 2026-10-04 reverses DESIGN §22.6: the trait 「可以放置于远程位」 is not trusted. Only elite
|
||||
// 歌蕾蒂娅 carrying HOK-Y 淡金坠饰 (uniequip_003_glady) may stand on a 高台. The battle keeps position MELEE
|
||||
// (on a 高台 she attacks but blocks nothing). A bot may plan that one loadout on a 高台; everyone else stays on the ground.
|
||||
// 高台: the owner's decision of 2026-10-05 (reversing the one of 2026-10-04, elite 歌蕾蒂娅 with HOK-Y only) follows
|
||||
// PRTS — every MELEE chess whose trait reads 「可以放置于远程位」 (the 钩索师 / 推击手 branch trait: 歌蕾蒂娅, 崖心, 见行者,
|
||||
// normal and elite) may stand on a 高台, with any module or none; raised with the PRTS source in PR #69 by
|
||||
// @sunstricken. The battle keeps position MELEE (on a 高台 they attack but block nothing). The bots plan them on a 高台
|
||||
// that covers the enemy road; every other melee unit stays on the ground.
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { buildDeployMap, canPlace as boardCanPlace, legalTiles, positionClass, placeClass, tileKey, ownerRangeKeys } from '../../server/match/board.js';
|
||||
import { GLADIIA_HOK_Y } from '../../shared/highGround.js';
|
||||
import { PLACE_ON_RANGED, meleeOnHighGround } from '../../shared/highGround.js';
|
||||
import { ERR } from '../../shared/constants.js';
|
||||
import { DATA, makeMatch, give, giveItem, checkInvariants, chessOfTier } from './harness.js';
|
||||
import { botPrep, planLayout, fieldModel } from '../../server/match/bot.js';
|
||||
@@ -304,75 +306,67 @@ test('#9 bots place 狼群 / 流形 only inside their owner\'s range', () => {
|
||||
});
|
||||
|
||||
// ---------------------------------------------------------------------------------------------------------------------
|
||||
// 高台: only elite 歌蕾蒂娅 + HOK-Y (owner's decision 2026-10-04)
|
||||
// 高台: every melee chess whose trait reads 「可以放置于远程位」, any module (the owner's decision of 2026-10-05)
|
||||
|
||||
const HIGH_STAGE = 'act2autochess_m01';
|
||||
const HIGH = ['10,4', '11,4', '12,4']; // 战场#01(下半)'s ranged-only (高台) tiles
|
||||
const GLAD_N = 'chess_char_4_12_a';
|
||||
const GLAD_E = 'chess_char_4_12_b'; // the golden record
|
||||
const CLIFF_N = 'chess_char_2_03_a';
|
||||
const CLIFF_E = 'chess_char_2_03_b';
|
||||
const FORCER_N = 'chess_char_3_07_a';
|
||||
const FORCER_E = 'chess_char_3_07_b';
|
||||
const HOLDERS = [GLAD_N, GLAD_E, CLIFF_N, CLIFF_E, FORCER_N, FORCER_E];
|
||||
const HOK_X = 'uniequip_002_glady';
|
||||
const HOK_Y = 'uniequip_003_glady';
|
||||
const TANK = (c) => c.profession === 'TANK' && c.position === 'MELEE';
|
||||
const rc = (k) => k.split(',').map(Number);
|
||||
const toHand = (m, ps, p) => move(m, p.uid, { area: 'hand', idx: ps.hand.findIndex((x) => x == null) });
|
||||
const equip = (ps, module) => {
|
||||
assert.equal(ps.setLoadout({ [GLAD_N]: { module } }), true, module);
|
||||
};
|
||||
/**
|
||||
* The loadouts each holder is tried with: its default (null), no module, and every module it has. 崖心 and 见行者 are
|
||||
* hidden this season (never in the pool): a player cannot set their loadout (shared/protocol.js checkLoadout), so they
|
||||
* are tried with their defaults (elite: HOK-X / PUS-X).
|
||||
*/
|
||||
const loadoutsOf = (id) => (DATA.chess[DATA.chess[id].baseId].isHidden ? [null]
|
||||
: [null, 'none', ...(DATA.chess[DATA.chess[id].baseId].goldenId ? DATA.chess[DATA.chess[DATA.chess[id].baseId].goldenId].modules : []).map((x) => x.uniEquipId)]);
|
||||
|
||||
test('高台 data: no chess stores placement; HOK-Y is 淡金坠饰 on the elite 歌蕾蒂娅 only', () => {
|
||||
test('高台 data: no chess stores placement; 「可以放置于远程位」 is the trait of exactly the six 钩索师 / 推击手 records, and every module keeps it', () => {
|
||||
assert.equal(Object.values(DATA.chess).some((c) => c.placement !== undefined), false);
|
||||
for (const t of Object.values(DATA.tokens)) assert.equal(t.placement, undefined, t.tokenId);
|
||||
const e = DATA.chess[GLAD_E];
|
||||
const y = e.modules.find((m) => m.uniEquipId === GLADIIA_HOK_Y);
|
||||
assert.equal(e.charId, 'char_474_glady');
|
||||
assert.equal(e.isGolden, true);
|
||||
assert.equal(y.typeName, 'HOK-Y');
|
||||
assert.equal(y.name, '淡金坠饰');
|
||||
assert.equal(e.modules.find((m) => m.isDefault).uniEquipId, HOK_X, 'the default module is HOK-X, ground-only');
|
||||
assert.equal(DATA.chess[GLAD_N].isGolden, false);
|
||||
assert.ok(!DATA.chess[CLIFF_E].modules.some((m) => m.uniEquipId === GLADIIA_HOK_Y), '崖心 has no HOK-Y');
|
||||
assert.equal(DATA.chess[GLAD_N].position, 'MELEE');
|
||||
assert.equal(e.position, 'MELEE');
|
||||
const widened = Object.values(DATA.chess).filter((c) => meleeOnHighGround(c)).map((c) => c.chessId).sort();
|
||||
assert.deepEqual(widened, HOLDERS.slice().sort());
|
||||
for (const id of HOLDERS) {
|
||||
const c = DATA.chess[id];
|
||||
assert.equal(c.position, 'MELEE', id);
|
||||
assert.ok(['钩索师', '推击手'].includes(c.subProfessionName), id);
|
||||
for (const x of c.modules || []) assert.ok(x.traitOverride.desc.includes(PLACE_ON_RANGED), `${id} ${x.typeName} keeps the line`);
|
||||
}
|
||||
// the module text never adds the line to anybody else (教官 Y "可以额外部署在远程位" is a talent, not the trait)
|
||||
for (const c of Object.values(DATA.chess)) {
|
||||
if (HOLDERS.includes(c.chessId)) continue;
|
||||
for (const x of c.modules || []) assert.ok(!(x.traitOverride?.desc || '').includes(PLACE_ON_RANGED), `${c.chessId} ${x.typeName}`);
|
||||
}
|
||||
assert.equal(DATA.chess[GLAD_E].modules.find((x) => x.uniEquipId === HOK_Y).typeName, 'HOK-Y');
|
||||
});
|
||||
|
||||
test('高台 table: (operator, module, tile) → allowed only for elite 歌蕾蒂娅 + HOK-Y on a 高台; ranged unchanged', () => {
|
||||
test('高台 table: every trait holder, normal and elite, with its default, no module or any module, may take each 高台; a 重装 is refused; ranged unchanged', () => {
|
||||
const { m, ps } = prep(HIGH_STAGE);
|
||||
assert.deepEqual([...ps.deployMap()].filter(([, cls]) => cls === 'ranged').map(([k]) => k).sort(), HIGH);
|
||||
// rows: chess id, module set on the 歌蕾蒂娅 loadout (null = leave the default), expect 高台
|
||||
const rows = [
|
||||
[GLAD_E, GLADIIA_HOK_Y, true],
|
||||
[GLAD_E, HOK_X, false],
|
||||
[GLAD_E, 'none', false],
|
||||
[GLAD_N, GLADIIA_HOK_Y, false],
|
||||
[GLAD_N, null, false],
|
||||
[CLIFF_E, GLADIIA_HOK_Y, false],
|
||||
[FORCER_N, null, false],
|
||||
[FORCER_E, null, false],
|
||||
];
|
||||
const owned = new Map();
|
||||
for (const [id, module, allowHigh] of rows) {
|
||||
if (module) equip(ps, module);
|
||||
else ps.setLoadout({});
|
||||
let p = owned.get(id);
|
||||
if (!p) { p = give(m, ps, id); owned.set(id, p); }
|
||||
else if (ps.find(p.uid)?.area === 'board') assert.deepEqual(toHand(m, ps, p), { ok: true });
|
||||
for (const k of HIGH) {
|
||||
const [r, c] = rc(k);
|
||||
const res = move(m, p.uid, board(r, c), 'DOWN');
|
||||
if (allowHigh) {
|
||||
assert.deepEqual(res, { ok: true }, `${id} ${module} → ${k}`);
|
||||
for (const id of HOLDERS) {
|
||||
const p = give(m, ps, id);
|
||||
for (const module of loadoutsOf(id)) {
|
||||
assert.equal(ps.setLoadout(module ? { [DATA.chess[id].baseId]: { module } } : {}), true, `${id} ${module}`);
|
||||
for (const k of HIGH) {
|
||||
const [r, c] = rc(k);
|
||||
assert.deepEqual(move(m, p.uid, board(r, c), 'DOWN'), { ok: true }, `${id} ${module || 'default'} → ${k}`);
|
||||
assert.equal(ps.board.get(k), p);
|
||||
checkInvariants(m);
|
||||
assert.deepEqual(toHand(m, ps, p), { ok: true });
|
||||
} else {
|
||||
assert.equal(res.error, ERR.BAD_TILE, `${id} ${module || 'default'} → ${k}`);
|
||||
}
|
||||
assert.deepEqual(move(m, p.uid, board(9, 3)), { ok: true }, `${id}: the ground stays legal`);
|
||||
assert.equal(placeClass(ps, DATA.chess[id]), 'all', id);
|
||||
assert.deepEqual(toHand(m, ps, p), { ok: true });
|
||||
}
|
||||
assert.deepEqual(move(m, p.uid, board(9, 3)), { ok: true }, `${id}: the ground stays legal`);
|
||||
assert.equal(placeClass(ps, DATA.chess[id]) === 'all', allowHigh, id);
|
||||
assert.deepEqual(toHand(m, ps, p), { ok: true });
|
||||
ps.setLoadout({});
|
||||
}
|
||||
const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x)));
|
||||
@@ -389,43 +383,41 @@ test('高台 table: (operator, module, tile) → allowed only for elite 歌蕾
|
||||
m.dispose();
|
||||
});
|
||||
|
||||
test('高台 client: drag highlights follow the loadout; a 重装 keeps "近战单位只能部署在地面"', () => {
|
||||
test('高台 client: drag highlights = the server for every trait holder under any module; a 重装 keeps "近战单位只能部署在地面"', () => {
|
||||
const { m, ps } = prep(HIGH_STAGE);
|
||||
equip(ps, GLADIIA_HOK_Y);
|
||||
const glad = give(m, ps, GLAD_E);
|
||||
const normal = give(m, ps, GLAD_N);
|
||||
const cliff = give(m, ps, CLIFF_E);
|
||||
const holders = HOLDERS.map((id) => give(m, ps, id));
|
||||
const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x)));
|
||||
const ranged = give(m, ps, chessOfTier(1, RANGED).find((x) => m.pool.has(x)));
|
||||
const ctx = clientCtx(m, ps);
|
||||
const map = ps.deployMap();
|
||||
for (const p of [glad, normal, cliff, tank, ranged]) {
|
||||
const lit = boardTargets(ctx, p.uid).legal.map(([r, c]) => tileKey(r, c)).sort();
|
||||
assert.deepEqual(lit, legalTiles(map, placeClass(ps, DATA.chess[p.id])).map(([r, c]) => tileKey(r, c)).sort(), `${p.id}: highlights = the server`);
|
||||
}
|
||||
for (const k of HIGH) {
|
||||
const [r, c] = rc(k);
|
||||
assert.equal(clientCanPlace(ctx, glad.uid, board(r, c)).ok, true, k);
|
||||
for (const p of [normal, cliff, tank]) {
|
||||
const res = clientCanPlace(ctx, p.uid, board(r, c));
|
||||
assert.equal(res.ok, false, p.id);
|
||||
for (const loadout of [{}, { [GLAD_N]: { module: HOK_Y } }, { [GLAD_N]: { module: HOK_X } }, { [GLAD_N]: { module: 'none' } }]) {
|
||||
assert.equal(ps.setLoadout(loadout), true);
|
||||
const ctx = clientCtx(m, ps);
|
||||
for (const p of [...holders, tank, ranged]) {
|
||||
const lit = boardTargets(ctx, p.uid).legal.map(([r, c]) => tileKey(r, c)).sort();
|
||||
assert.deepEqual(lit, legalTiles(map, placeClass(ps, DATA.chess[p.id])).map(([r, c]) => tileKey(r, c)).sort(), `${p.id}: highlights = the server`);
|
||||
}
|
||||
for (const k of HIGH) {
|
||||
const [r, c] = rc(k);
|
||||
for (const p of holders) assert.equal(clientCanPlace(ctx, p.uid, board(r, c)).ok, true, `${p.id} → ${k}`);
|
||||
const res = clientCanPlace(ctx, tank.uid, board(r, c));
|
||||
assert.equal(res.ok, false);
|
||||
assert.equal(res.reason, '近战单位只能部署在地面');
|
||||
assert.equal(clientCanPlace(ctx, ranged.uid, board(r, c)).ok, true);
|
||||
}
|
||||
assert.equal(clientCanPlace(ctx, ranged.uid, board(r, c)).ok, true);
|
||||
}
|
||||
m.dispose();
|
||||
});
|
||||
|
||||
test('高台 swaps: elite 歌蕾蒂娅 + HOK-Y trades with a ranged operator, not with a 重装', () => {
|
||||
test('高台 swaps: 歌蕾蒂娅 (normal, no module) trades with a ranged operator, not with a 重装', () => {
|
||||
const { m, ps } = prep(HIGH_STAGE);
|
||||
equip(ps, GLADIIA_HOK_Y);
|
||||
const glad = give(m, ps, GLAD_E);
|
||||
const glad = give(m, ps, GLAD_N);
|
||||
const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x)));
|
||||
const ranged = give(m, ps, chessOfTier(1, RANGED).find((x) => m.pool.has(x)));
|
||||
assert.deepEqual(move(m, glad.uid, board(10, 4), 'DOWN'), { ok: true });
|
||||
assert.deepEqual(move(m, tank.uid, board(9, 3)), { ok: true });
|
||||
assert.deepEqual(move(m, ranged.uid, board(11, 4)), { ok: true });
|
||||
let ctx = clientCtx(m, ps);
|
||||
// swapping 歌蕾蒂娅 (高台) with the 重装 (ground) would put the 重装 on the 高台
|
||||
assert.equal(clientCanPlace(ctx, glad.uid, board(9, 3)).ok, false);
|
||||
assert.equal(move(m, glad.uid, board(9, 3)).error, ERR.BAD_TILE);
|
||||
assert.equal(clientCanPlace(ctx, tank.uid, board(10, 4)).ok, false);
|
||||
@@ -443,16 +435,14 @@ test('高台 swaps: elite 歌蕾蒂娅 + HOK-Y trades with a ranged operator, no
|
||||
m.dispose();
|
||||
});
|
||||
|
||||
test('高台 battle input: elite 歌蕾蒂娅 + HOK-Y is fielded on (10,4) and blocks nothing there; on the ground she blocks', () => {
|
||||
test('高台 battle input: 歌蕾蒂娅 is fielded on (10,4) and blocks nothing there; on the ground she blocks', () => {
|
||||
const { m, ps } = prep(HIGH_STAGE);
|
||||
equip(ps, GLADIIA_HOK_Y);
|
||||
const glad = give(m, ps, GLAD_E);
|
||||
const glad = give(m, ps, GLAD_N);
|
||||
assert.deepEqual(move(m, glad.uid, board(10, 4), 'DOWN'), { ok: true });
|
||||
const u0 = ps.battleInput().units.find((u) => u.uid === glad.uid);
|
||||
assert.deepEqual([u0.row, u0.col, u0.dir, u0.moduleId], [10, 4, 'DOWN', GLADIIA_HOK_Y]);
|
||||
assert.deepEqual([u0.row, u0.col, u0.dir], [10, 4, 'DOWN']);
|
||||
m.dispose();
|
||||
// position stays MELEE either way: the normal record (the same body the 0.1.2 measurement used) attacks the lane
|
||||
// from the 高台 and blocks nothing there. HOK-Y's own range is not what this asserts.
|
||||
// position stays MELEE either way: she attacks the lane from the 高台 and blocks nothing there
|
||||
for (const [r, c, dir, high] of [[10, 4, 'DOWN', true], [9, 5, 'RIGHT', false]]) {
|
||||
const h = makeBattle({
|
||||
stageId: HIGH_STAGE, seed: 3, timeLimit: 60, autoFinish: false,
|
||||
@@ -472,42 +462,36 @@ test('高台 battle input: elite 歌蕾蒂娅 + HOK-Y is fielded on (10,4) and b
|
||||
}
|
||||
});
|
||||
|
||||
test('高台 bots: elite 歌蕾蒂娅 + HOK-Y takes a 高台 that covers the road while the ground is still free', () => {
|
||||
test('高台 bots: every trait holder, normal and elite, takes a 高台 that covers the road while the ground is still free; a plain melee stays on the road', () => {
|
||||
const { m, ps } = prep(HIGH_STAGE, 11);
|
||||
equip(ps, GLADIIA_HOK_Y);
|
||||
const elite = give(m, ps, GLAD_E);
|
||||
const k = planLayout(m, ps, [elite]).get(elite.uid);
|
||||
assert.equal(ps.deployMap().get(k), 'ranged', `planned on a 高台 with the road open (${k})`);
|
||||
const [r, c] = rc(k);
|
||||
assert.deepEqual(move(m, elite.uid, board(r, c)), { ok: true });
|
||||
m.dispose();
|
||||
});
|
||||
|
||||
test('高台 bots: everyone else stays on the road; elite 歌蕾蒂娅 + HOK-Y may take a 高台 when the ground is full', () => {
|
||||
const { m, ps } = prep(HIGH_STAGE, 11);
|
||||
const pieces = ['chess_char_4_02_a', GLAD_N, FORCER_N, 'chess_char_2_03_a'].map((id) => give(m, ps, id));
|
||||
const plan = planLayout(m, ps, pieces);
|
||||
const map = ps.deployMap();
|
||||
const road = fieldModel(m, ps).ground;
|
||||
for (const p of pieces.slice(1)) {
|
||||
const k = plan.get(p.uid);
|
||||
assert.equal(map.get(k), 'melee', `${p.id} on a ground tile (${k})`);
|
||||
assert.ok(road.has(k), `${p.id} on an enemy road tile (${k})`);
|
||||
assert.equal(move(m, p.uid, board(10, 4)).error, ERR.BAD_TILE, `${p.id} deploy refused`);
|
||||
for (const id of HOLDERS) {
|
||||
const p = give(m, ps, id);
|
||||
for (const module of loadoutsOf(id)) {
|
||||
assert.equal(ps.setLoadout(module ? { [DATA.chess[id].baseId]: { module } } : {}), true);
|
||||
const plan = planLayout(m, ps, [p]);
|
||||
const k = plan.get(p.uid);
|
||||
assert.equal(map.get(k), 'ranged', `${id} ${module || 'default'}: planned on a 高台 with the road open (${k})`);
|
||||
const [r, c] = rc(k);
|
||||
const cover = ownerRangeKeys(DATA.chess[id].rangeGrid, r, c, plan.dirOf(p.uid));
|
||||
assert.ok([...cover].some((t) => road.has(t)), `${id}: its range from ${k} covers the road`);
|
||||
assert.deepEqual(move(m, p.uid, board(r, c), plan.dirOf(p.uid)), { ok: true });
|
||||
assert.deepEqual(toHand(m, ps, p), { ok: true });
|
||||
}
|
||||
}
|
||||
const elite = give(m, ps, GLAD_E);
|
||||
equip(ps, GLADIIA_HOK_Y);
|
||||
const melee = [...map].filter(([, cls]) => cls === 'melee').map(([k]) => k);
|
||||
const highPlan = planLayout(m, ps, [elite], undefined, { occupied: new Set(melee) });
|
||||
const hk = highPlan.get(elite.uid);
|
||||
assert.equal(map.get(hk), 'ranged', `HOK-Y planned on a 高台 (${hk})`);
|
||||
const [hr, hc] = rc(hk);
|
||||
assert.deepEqual(move(m, elite.uid, board(hr, hc)), { ok: true });
|
||||
ps.setLoadout({});
|
||||
// a plain melee operator (a 重装) stays on an enemy road tile, and a 高台 is no fallback for it once the ground is full
|
||||
const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x)));
|
||||
const k = planLayout(m, ps, [tank]).get(tank.uid);
|
||||
assert.equal(map.get(k), 'melee', `the 重装 on a ground tile (${k})`);
|
||||
assert.ok(road.has(k), `the 重装 on an enemy road tile (${k})`);
|
||||
assert.equal(move(m, tank.uid, board(10, 4)).error, ERR.BAD_TILE, 'the 重装 deploy refused');
|
||||
const melee = new Set([...map].filter(([, cls]) => cls === 'melee').map(([key]) => key));
|
||||
assert.equal(planLayout(m, ps, [tank], undefined, { occupied: melee }).get(tank.uid), undefined, 'no ground left: no plan');
|
||||
const glad = give(m, ps, GLAD_E);
|
||||
const hk = planLayout(m, ps, [glad], undefined, { occupied: melee }).get(glad.uid);
|
||||
assert.equal(map.get(hk), 'ranged', `elite 歌蕾蒂娅 still gets a 高台 (${hk})`);
|
||||
checkInvariants(m);
|
||||
assert.deepEqual(toHand(m, ps, elite), { ok: true });
|
||||
equip(ps, 'none');
|
||||
const refused = planLayout(m, ps, [elite], undefined, { occupied: new Set(melee) });
|
||||
assert.equal(refused.get(elite.uid), undefined, 'no module: a 高台 is not a fallback');
|
||||
assert.equal(move(m, elite.uid, board(10, 4)).error, ERR.BAD_TILE);
|
||||
m.dispose();
|
||||
});
|
||||
+13
-20
@@ -245,28 +245,21 @@ describe('placement mirror (canPlace)', () => {
|
||||
assert.equal(canPlace(ctx, m.uid, null).ok, false);
|
||||
assert.equal(canPlace(ctx, m.uid, { area: 'temp', idx: 0 }).ok, false, 'no temp target');
|
||||
});
|
||||
test('only elite 歌蕾蒂娅 carrying HOK-Y lights the 高台; 崖心, 见行者, a normal record and other modules stay on the ground', () => {
|
||||
const HOK_Y = 'uniequip_003_glady';
|
||||
const gladE = piece('chess_char_4_12_b');
|
||||
const gladN = piece('chess_char_4_12_a');
|
||||
const cliff = piece('chess_char_2_03_b');
|
||||
const forcer = piece('chess_char_3_07_b');
|
||||
test('every trait holder (歌蕾蒂娅, 崖心, 见行者, normal and elite) lights the 高台 whatever the module; a plain melee stays on the ground', () => {
|
||||
const holders = ['chess_char_4_12_a', 'chess_char_4_12_b', 'chess_char_2_03_a', 'chess_char_2_03_b', 'chess_char_3_07_a', 'chess_char_3_07_b'].map((id) => piece(id));
|
||||
const m = piece(MELEE);
|
||||
const loadout = { chess_char_4_12_a: { module: HOK_Y } };
|
||||
const ctx = ctxFor(privWith({ hand: [gladE, gladN, cliff, forcer, m], loadout }));
|
||||
for (const [row, col] of [[10, 4], [11, 4], [12, 4], [9, 3]]) assert.equal(canPlace(ctx, gladE.uid, { area: 'board', row, col }).ok, true, `elite HOK-Y on ${row},${col}`);
|
||||
const lit = boardTargets(ctx, gladE.uid).legal.map(([a, b]) => tileKey(a, b));
|
||||
assert.equal(lit.length, STAGE.deployTiles.normal.melee.length + STAGE.deployTiles.normal.rangedOnly.length, 'every deploy tile lit');
|
||||
for (const p of [gladN, cliff, forcer, m]) {
|
||||
assert.deepEqual(canPlace(ctx, p.uid, { area: 'board', row: 10, col: 4 }), { ok: false, code: 'BAD_TILE', reason: '近战单位只能部署在地面' }, p.id);
|
||||
assert.equal(canPlace(ctx, p.uid, { area: 'board', row: 9, col: 3 }).ok, true, `${p.id} on the ground`);
|
||||
const every = STAGE.deployTiles.normal.melee.length + STAGE.deployTiles.normal.rangedOnly.length;
|
||||
// the module does not matter: the default, HOK-Y, HOK-X and none on 歌蕾蒂娅; 崖心's HOK-X; none on 见行者
|
||||
for (const loadout of [null, { chess_char_4_12_a: { module: 'uniequip_003_glady' } }, { chess_char_4_12_a: { module: 'uniequip_002_glady' } },
|
||||
{ chess_char_4_12_a: { module: 'none' }, chess_char_2_03_a: { module: 'none' }, chess_char_3_07_a: { module: 'none' } }]) {
|
||||
const ctx = ctxFor(privWith({ hand: [...holders, m], loadout }));
|
||||
for (const p of holders) {
|
||||
for (const [row, col] of [[10, 4], [11, 4], [12, 4], [9, 3]]) assert.equal(canPlace(ctx, p.uid, { area: 'board', row, col }).ok, true, `${p.id} on ${row},${col} (${JSON.stringify(loadout)})`);
|
||||
assert.equal(boardTargets(ctx, p.uid).legal.length, every, `${p.id}: every deploy tile lit`);
|
||||
}
|
||||
assert.deepEqual(canPlace(ctx, m.uid, { area: 'board', row: 10, col: 4 }), { ok: false, code: 'BAD_TILE', reason: '近战单位只能部署在地面' }, '角峰');
|
||||
assert.equal(canPlace(ctx, m.uid, { area: 'board', row: 9, col: 3 }).ok, true, '角峰 on the ground');
|
||||
}
|
||||
const none = ctxFor(privWith({ hand: [gladE], loadout: { chess_char_4_12_a: { module: 'none' } } }));
|
||||
assert.equal(canPlace(none, gladE.uid, { area: 'board', row: 10, col: 4 }).ok, false, 'no module');
|
||||
const xmod = ctxFor(privWith({ hand: [gladE], loadout: { chess_char_4_12_a: { module: 'uniequip_002_glady' } } }));
|
||||
assert.equal(canPlace(xmod, gladE.uid, { area: 'board', row: 10, col: 4 }).ok, false, 'HOK-X');
|
||||
const bare = ctxFor(privWith({ hand: [gladE] }));
|
||||
assert.equal(canPlace(bare, gladE.uid, { area: 'board', row: 10, col: 4 }).ok, false, 'default module is HOK-X');
|
||||
});
|
||||
test('not editable ⇒ nothing is legal', () => {
|
||||
const m = piece(MELEE);
|
||||
|
||||
Reference in new issue
Block a user