From d40cb4e79ed8d4c4b392fe5db01739109d14a954 Mon Sep 17 00:00:00 2001 From: sganggs Date: Wed, 7 Oct 2026 01:59:52 +0800 Subject: [PATCH] =?UTF-8?q?feedback5=20CB4:=20=E8=90=A8=E5=8D=A1=E5=85=B9?= =?UTF-8?q?=E7=A9=BF=E5=88=BA=E6=89=8B=20=E2=80=94=20a=20stun=20or=20?= =?UTF-8?q?=E6=9D=9F=E7=BC=9A=20ends=20its=20acceleration=20and=20drops=20?= =?UTF-8?q?the=20speed=20layers;=20its=20first=20hit=20after=20a=20block?= =?UTF-8?q?=20adds=20current=20move=20speed=20=C3=97=20600=20physical=20as?= =?UTF-8?q?=20its=20own=20instance=20(community=20report=20of=202026-10-06?= =?UTF-8?q?,=20item=2036)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Official: PRTS 天赋 and the battle prefab's templates (dlancer_t_listener[a/b/c] every 0.1 s: STUNNED / UNMOVABLE end dlancer_t[trigger], not blocked starts it; a MULTIPLIER layer every 0.5 s up to 25 tries, blocked or not; dlancer_t_atk: DamageViaAttr MOVE_SPEED × 600, physical, ignoreForSp, then ends the trigger). Until now it kept accelerating through a stun and kept the speed, and the hit was one attack multiplied ×(1 + 6 × layers / 25), a stun in between included. A slow is no reset (official). Golden: 6 scenarios, each with 萨卡兹穿刺手: roster-016, standin-04, standin-08, diy-028, diy-124, coop2-HARD-4. Tests: test/content/enemies_bosses.test.js (3, fail on the parent). Docs: DESIGN §25.18.6. --- docs/history/0.2.0.md | 29 ++++++- server/sim/content/enemies/special.js | 50 ++++++++--- test/content/enemies_bosses.test.js | 70 ++++++++++++++-- test/golden/diy.json | 82 +++++++++--------- test/golden/matches.json | 8 +- test/golden/roster.json | 79 ++++++++---------- test/golden/standins.json | 114 +++++++++++++------------- 7 files changed, 261 insertions(+), 171 deletions(-) diff --git a/docs/history/0.2.0.md b/docs/history/0.2.0.md index 2a9fc164..12b6b4ea 100644 --- a/docs/history/0.2.0.md +++ b/docs/history/0.2.0.md @@ -27,8 +27,8 @@ a merged elite 拉普兰德 as a new one (GitHub #169), the leader pool per play model quirks (PR #211) → §25.13; the community reports of 2026-10-06 (the 孤岛风云 prisoners drawn freed, 忍冬's trigger, a bounty burned to death by the 活性源石, 枯朽之种 paying a bounty) → §25.14; the second batch of community reports of 2026-10-06, stream CB4 (enemies, bosses, waves, movement: the 突袭 landing on the 临时整备区 row and the other half of the -联防 map, a silenced 萨卡兹枯朽战士's death pollution; the briefing types' 7–9 waves, 新硎's 断刃 and a freed prisoner in 联防 -already answered, …) → §25.18. +联防 map, a silenced 萨卡兹枯朽战士's death pollution, 萨卡兹穿刺手's speed after a stun and its first hit; the briefing types' +7–9 waves, 新硎's 断刃 and a freed prisoner in 联防 already answered, …) → §25.18. Decisions of the owner: 2026-10-04 — the server stays on plain `node:http` + `ws`, no web framework (§25.1); 2026-10-05 — the 补位 plan (§25.3); the 自选编队 rules, the collab operators out of the pool, ISW-A refused (§25.4); @@ -1066,7 +1066,7 @@ fixed (W5AA's commits name every golden scenario moved); two were already fixed is the report; on this tree only the 使徒's own leak carries it. - Golden: unchanged. Pinned: `test/sim/feedback5-community-pins.test.js`. -### 25.18 Community reports of 2026-10-06, stream CB4: enemies, bosses, waves, movement — `sim/battle/players.js onOwnBoard`, `content/bonds/addon/battle.js raidTile`, `content/enemies/archetypes.js kitPolluted` +### 25.18 Community reports of 2026-10-06, stream CB4: enemies, bosses, waves, movement — `sim/battle/players.js onOwnBoard`, `content/bonds/addon/battle.js raidTile`, `content/enemies/archetypes.js kitPolluted`, `content/enemies/special.js kitRush` The owner's second collection of community reports (2026-10-06/07) was split over five streams; CB4 took the items about enemies, bosses, waves and movement (items 6, 10, 16.3, 24, 29, 35, 36, 38, 39, 40, 47, 52, 53, 57 of the list). Each was @@ -1151,3 +1151,26 @@ The real ones are fixed, one commit each with its golden scenarios named; the re - Golden: unchanged. Pinned: `test/sim/feedback5-cb4-pins.test.js` (freed in its own combat, leaked, confined in 联防, freed at its 4th attack there). +#### 25.18.6 「萨卡兹穿刺手被眩晕或者减速恢复之后移速不会重置(降低),伤害也异常」 (item 36): a stun or 束缚 ends its acceleration; its first hit adds speed × 600 — `content/enemies/special.js kitRush` + +- **Seen**: after a stun it walked on at the speed it had built up (it even kept accelerating while stunned: 1 → 1.5 in a + 2 s stun); its first hit after a block was one multiplied attack (×(1 + 6 × layers / 25), 2286 at 17 layers), also + after a stun that came in between. +- **Official**: PRTS 天赋 「每0.1秒检测一次:①若受晕眩/束缚影响,停止加速 ②若未被阻挡,开始加速…每0.5秒尝试获得1层移动速度+50% + 的增益,最多尝试25次(增益于停止加速时解除…),同时普通攻击附加的Buff会额外造成一次当前移动速度×600的…物理伤害并停止加速」. The + battle prefab agrees: listeners every 0.1 s end `dlancer_t[trigger]` on STUNNED (a) or UNMOVABLE (b) and start it when + not blocked (c); the trigger stacks a MULTIPLIER move-speed layer every 0.5 s, blocked or not; the FirstAttack buff + `dlancer_t_atk` deals `DamageViaAttr` MOVE_SPEED × atk_scale (physical, melee, ignoreForSp) while the trigger exists, + then ends it. A slow (减速) is no reset — the report's slow is the official behaviour; it only lowers the speed while it + lasts, and so the extra damage. +- **Now**: kitRush follows the templates: a 0.1 s listener (晕眩 / 束缚 statuses end the acceleration and drop its layers; + not blocked starts it, from the spawn), a layer every 0.5 s up to 25 tries, the extra damage = its current move speed + × 600 as a second, non-attack physical instance with no 受击回复, ending the acceleration (so a block's first hit only). + Reproduced after the fix: 2 s stun → base speed, a fresh build-up; blocked at 2.375 → 450 + 1500 (2.5 × 600, one more + layer before the hit). +- [ASSUMED]: 冻结, 沉睡 and 浮空 do not stop it (they set FROZEN / SLEEPING / LEVITATE, not the two flags the listeners + read); the client's 0.1 s listener order is folded into one check. +- Golden: 6 scenarios, each with 萨卡兹穿刺手 in it: roster-016, standin-04, standin-08, diy-028, diy-124 and the bot match + coop2-HARD-4 (160 spawned). Tests: `test/content/enemies_bosses.test.js` (3: the layers and the cap, the resets, the + first hit; all fail on the parent). + diff --git a/server/sim/content/enemies/special.js b/server/sim/content/enemies/special.js index 962e6515..74bd0631 100644 --- a/server/sim/content/enemies/special.js +++ b/server/sim/content/enemies/special.js @@ -126,23 +126,49 @@ function kitParrot(ab) { }]; } +/** + * 萨卡兹穿刺手 (PRTS 天赋; the battle prefab's Rush / FirstAttack abilities — templates dlancer_t_listener[a] / [b] / [c], + * dlancer_t[trigger], dlancer_t_atk): every RUSH_LISTEN (0.1) s — 晕眩 (STUNNED) or 束缚 (UNMOVABLE) ends the acceleration + * and its speed layers with it; not blocked and not accelerating starts it. While it accelerates, every + * `rush.dlancer_t[trigger].interval` (0.5) s — the first one 0.5 s after the start — one more layer of move speed + * +`move_speed` (50 %, MULTIPLIER, the layers add up), at most `trig_cnt` (25) tries — blocked or not, frozen, asleep or + * slowed or not (only the two flags stop it). Every normal attack carries dlancer_t_atk: while it accelerates, the hit + * adds 当前移动速度 × `firstattack.atk_scale` (600) physical damage — a second instance, melee, no 受击回复 (ignoreForSp) — + * and ends the acceleration, so once blocked only its first hit has it. Until 0.2.0 it kept accelerating through a stun + * and kept the speed after it, and the first hit after a block multiplied the attack instead (×(1 + 6 × layers / 25)), + * a stun in between included (community report of 2026-10-06, item 36). + */ +const RUSH_LISTEN = 0.1; + function kitRush(ab) { const ms = T(ab, 'rush.dlancer_t[trigger].move_speed') ?? 0, iv = T(ab, 'rush.dlancer_t[trigger].interval') ?? 0.5; - const max = T(ab, 'rush.dlancer_t[trigger].trig_cnt') ?? 0, first = T(ab, 'firstattack.atk_scale') ?? 0; + const max = T(ab, 'rush.dlancer_t[trigger].trig_cnt') ?? 0, scale = T(ab, 'firstattack.atk_scale') ?? 0; + // 晕眩 / 束缚 only (the client's STUNNED / UNMOVABLE flags: not 冻结, 沉睡 or 浮空, which hold flags.stun here too) + const held = (e) => e.buffs.some((x) => x.status === 'stun' || x.status === 'bind'); + const stop = (b, e, a) => { a.on = false; a.n = 0; b.removeBuff(e, 'ab:rush'); }; return [{ - iv, - spawn(b, e, a) { a.n = 0; }, - tick(b, e, a) { - if (!e.moving || e.blockedBy || a.n >= max) return; - a.n++; - b.addBuff(e, { key: 'ab:rush', mods: { moveMul: 1 + ms * a.n }, persist: true }); + iv: RUSH_LISTEN, + // the listeners first look at once (waitFirstTriggerInterval 0): a walker spawned unblocked starts at t = 0 + spawn(b, e, a) { a.on = !e.blockedBy && !held(e); a.n = 0; a.tries = 0; a.acc = 0; }, + tick(b, e, a, dt) { + if (held(e)) { if (a.on) stop(b, e, a); return; } + if (!a.on) { + if (!e.blockedBy) { a.on = true; a.tries = 0; a.acc = 0; } + return; + } + if (a.tries >= max || !(iv > 0)) return; + a.acc += dt; + let grew = false; + while (a.acc >= iv - 1e-9 && a.tries < max) { a.acc -= iv; a.tries++; a.n++; grew = true; } + if (grew) b.addBuff(e, { key: 'ab:rush', mods: { moveMul: 1 + ms * a.n }, persist: true }); }, - blocked(c, b, e, a) { a.charge = a.n; }, - hitOut(c, b, e, a) { - if (!c.dmg.isAttack || !(a.charge > 0) || !(max > 0)) return; - c.dmg.amount *= 1 + (first / 100) * (a.charge / max); // 被阻挡后的首次攻击: extra damage from the built-up speed + dealt(c, b, e, a) { + if (!a.on) return; + const t = c.target; + const amount = e.s.moveSpeed * scale; + stop(b, e, a); + if (t && t.alive && amount > 0) b.dealDamage(e, t, { amount, type: 'phys', canDodge: false, isSkill: true, noSp: true, tags: ['enemyAbility', 'rush'] }); }, - attack(c, b, e, a) { if (a.charge > 0) { a.charge = 0; a.n = 0; b.removeBuff(e, 'ab:rush'); } }, }]; } diff --git a/test/content/enemies_bosses.test.js b/test/content/enemies_bosses.test.js index 6a9f0b1d..edf6dde0 100644 --- a/test/content/enemies_bosses.test.js +++ b/test/content/enemies_bosses.test.js @@ -1071,16 +1071,68 @@ for (const key of ['enemy_1116_liprr', 'enemy_1116_liprr_2', 'enemy_1118_lidbox_ }); } -test(`${nm('enemy_1072_dlancer')}: accelerates while walking; the first hit after being blocked scales with the build-up`, () => { - const h = arena({ units: [{ chessId: 't_wall', row: 9, col: 3 }], captureNoisy: true, hooks: ['damaged'] }); +// PRTS 天赋 + the client's templates dlancer_t_listener[a/b/c], dlancer_t[trigger], dlancer_t_atk (DESIGN §25.18): every +// 0.1 s 晕眩 / 束缚 end the acceleration (its layers with it), not blocked starts it; a layer of move speed +50 % every +// 0.5 s, at most 25 tries, blocked or not; a hit while it accelerates adds 当前移动速度 × 600 phys (its own instance) and +// ends it (community report of 2026-10-06, item 36: until 0.2.0 a stun kept the speed, and the hit was multiplied) +const DL = 'enemy_1072_dlancer'; +const dlBase = () => E[DL].stats.moveSpeed; +const dlMul = (n) => 1 + tb(DL, 'rush.dlancer_t[trigger].move_speed') * n; +const DL_ROUTE = { motion: 'WALK', start: [9, 18], end: [9, 2], checkpoints: [] }; +test(`${nm(DL)}: a layer of move speed +${tb(DL, 'rush.dlancer_t[trigger].move_speed') * 100} % every ${tb(DL, 'rush.dlancer_t[trigger].interval')} s while it walks, at most ${tb(DL, 'rush.dlancer_t[trigger].trig_cnt')}`, () => { + const h = arena(); h.step(); - const e = put(h, 'enemy_1072_dlancer', [9, 10], { move: true }); - h.run(3); - assert.ok(e.s.moveSpeed > E.enemy_1072_dlancer.stats.moveSpeed * 2); - h.runUntil(() => e.stats.attacks >= 2, 120); - const hits = h.hooksOf('damaged').filter((c) => c.source === e && c.dmg.isAttack).map((c) => c.amount); - assert.ok(hits[0] > hits[1] * 1.5, `${hits[0]} vs ${hits[1]}`); - approx(hits[1], e.s.atk); + const e = h.spawn(DL, { route: DL_ROUTE }); + h.run(0.45); + approx(e.s.moveSpeed, dlBase(), 1e-9, 'the first layer 0.5 s after the start'); + h.run(2.6); + approx(e.s.moveSpeed, dlBase() * dlMul(6), 1e-9, '6 layers after 3 s'); + // the cap: a pinned one (speed ×0, never blocked) keeps trying — 25 tries, then the layers stay + const p = put(h, DL, [11, 12]); + h.run(14); + const max = tb(DL, 'rush.dlancer_t[trigger].trig_cnt'); + assert.equal(p.mem.ab.list[0].n, max); + approx(p.findBuff('ab:rush').mods.moveMul, dlMul(max), 1e-9, 'capped at 25 layers'); +}); + +test(`${nm(DL)}: a stun or a 束缚 ends the acceleration — its speed back to the base, building up again only afterwards; a slow, a freeze or a sleep does not`, () => { + for (const [status, value, resets] of [['stun', undefined, true], ['bind', undefined, true], ['slow', 0.5, false], ['freeze', undefined, false], ['sleep', undefined, false]]) { + const h = arena(); + h.step(); + const e = h.spawn(DL, { route: DL_ROUTE }); + h.run(3.05); + approx(e.s.moveSpeed, dlBase() * dlMul(6), 1e-9, status); + h.b.applyStatus(e, status, { duration: 2, value }); + h.run(2.2); + if (resets) { + approx(e.s.moveSpeed, dlBase(), 1e-9, `${status}: reset`); + h.run(1.05); + approx(e.s.moveSpeed, dlBase() * dlMul(2), 1e-9, `${status}: a fresh build-up`); + } else assert.ok(e.s.moveSpeed > dlBase() * dlMul(6) - 1e-9, `${status}: kept (${e.s.moveSpeed})`); + } +}); + +test(`${nm(DL)}: blocked, its first hit adds 当前移动速度 × ${tb(DL, 'firstattack.atk_scale')} physical damage (a second instance) and ends the acceleration; a stun between the block and the hit takes it away`, () => { + const hitsOf = (stunAtBlock) => { + const h = arena({ units: [{ chessId: 't_wall', row: 9, col: 4 }], captureNoisy: true, hooks: ['damaged'] }); + h.step(); + const e = h.spawn(DL, { route: DL_ROUTE }); + let speedAtHit = null; + h.b.on('damaged', (c) => { if (c.source === e && c.dmg.isAttack && speedAtHit === null) speedAtHit = e.s.moveSpeed; }, { priority: 100 }); + assert.ok(h.runUntil(() => e.blockedBy, 120), 'blocked'); + if (stunAtBlock) h.b.applyStatus(e, 'stun', { duration: 1 }); + assert.ok(h.runUntil(() => e.stats.attacks >= 2, 60)); + const own = h.hooksOf('damaged').filter((c) => c.source === e); + return { e, speedAtHit, attacks: own.filter((c) => c.dmg.isAttack).map((c) => c.amount), extra: own.filter((c) => !c.dmg.isAttack).map((c) => c.amount) }; + }; + const r = hitsOf(false); + assert.ok(r.speedAtHit > dlBase() * 4, `built up: ${r.speedAtHit}`); + assert.deepEqual(r.attacks.map((a) => Math.round(a)), [r.e.s.atk, r.e.s.atk], 'the attacks themselves are plain'); + assert.equal(r.extra.length, 1, 'one extra instance, on the first hit only'); + approx(r.extra[0], r.speedAtHit * tb(DL, 'firstattack.atk_scale'), 1e-6, 'speed × 600 (DEF 0)'); + approx(r.e.s.moveSpeed, dlBase(), 1e-9, 'the hit ended the acceleration'); + const s = hitsOf(true); + assert.deepEqual(s.extra, [], 'stunned after the block: no extra damage'); }); test(`${nm('enemy_1320_wdrrl_2')}: only blockers with block ≥3; first attack splashes ATK×${tb('enemy_1320_wdrrl_2', 'AOEAttack.atk_scale')} around the target`, () => { diff --git a/test/golden/diy.json b/test/golden/diy.json index 982b576b..12625851 100644 --- a/test/golden/diy.json +++ b/test/golden/diy.json @@ -1115,35 +1115,35 @@ "round": 13, "seed": 2789905475, "waveId": "act1autochess_h06", - "time": 213.13, - "ticks": 6394, + "time": 209.47, + "ticks": 6284, "reason": "cleared", - "killed": 23, + "killed": 24, "total": 147, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 267, + "rngDraws": 334, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":23,"total":147,"perfect":false,"leaks":124,"leaksUncounted":0,"coins":0,"dmg":1691383,"bossDmg":0,"heal":0,"deaths":21,"layerGains":{}}}, + "players": {"p1":{"killed":24,"total":147,"perfect":false,"leaks":123,"leaksUncounted":0,"coins":0,"dmg":1441375,"bossDmg":0,"heal":0,"deaths":21,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_6_diy1_b",0,"uniequip_002_narant",2331,1,162,4,550355,2331,0,96,2], - ["p1",2,"op","chess_char_6_diy2_b",1,"uniequip_002_narant",2331,1,170,5,169611,4662,0,45,2], - ["p1",3,"op","chess_char_6_diy1_b",2,"uniequip_002_narant",0,0,123,1,161168,4662,0,46,2], - ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_narant",0,0,140,1,176278,5262,0,36,2], - ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_003_narant",0,0,152,8,468412,5262,0,89,2], - ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_003_narant",2631,1,171,4,121589,2631,0,28,1], - ["p1",7,"op","chess_char_5_diy1_a",0,null,0,0,78,0,2832,2594,0,6,0], - ["p1",8,"op","chess_char_5_diy2_a",1,null,0,0,94,0,6919,2594,0,15,1], - ["p1",9,"op","chess_char_5_diy1_a",2,null,0,0,84,0,4842,2594,0,9,0], - ["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,83,0,3441,3080,0,7,0], - ["p1",11,"op","chess_char_5_diy1_b",1,"none",0,0,4,0,18086,1540,0,27,1], - ["p1",12,"op","chess_char_5_diy2_b",2,"none",0,0,89,0,7850,3080,0,13,0] + ["p1",1,"op","chess_char_6_diy1_b",0,"uniequip_002_narant",0,0,113,4,225132,4662,0,45,2], + ["p1",2,"op","chess_char_6_diy2_b",1,"uniequip_002_narant",2331,1,171,1,183931,4662,0,52,2], + ["p1",3,"op","chess_char_6_diy1_b",2,"uniequip_002_narant",0,0,138,4,181139,4662,0,42,1], + ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_narant",0,0,148,1,247083,5262,0,47,2], + ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_003_narant",484.58,1,159,9,431571,4777,0,75,2], + ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_003_narant",2105.15,1,168,4,115965,5788,0,57,2], + ["p1",7,"op","chess_char_5_diy1_a",0,null,0,0,78,0,3199,2594,0,6,0], + ["p1",8,"op","chess_char_5_diy2_a",1,null,0,0,7,0,11162,1297,0,23,1], + ["p1",9,"op","chess_char_5_diy1_a",2,null,0,0,84,0,5660,2594,0,10,0], + ["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,83,0,4405,3080,0,8,0], + ["p1",11,"op","chess_char_5_diy1_b",1,"none",0,0,4,1,23711,1540,0,39,1], + ["p1",12,"op","chess_char_5_diy2_b",2,"none",0,0,93,0,8419,3080,0,13,0] ], - "enemies": {"enemy_1010_demon_2":[36,1,35,20195,818412],"enemy_1071_dftman":[51,12,39,4233,376807],"enemy_1072_dlancer":[60,10,50,15864,496164]}, - "hooks": [1,171,6394,534,534,1265,1244,0,44,168,13,11,0,6032,182,35,147,124,1,44,0,0,21], - "events": {"atk":534,"deploy":24,"die":44,"dmg":1244,"engage":12,"fx":455,"leak":124,"skill":24,"spawn":159,"status":268}, - "fx": {"aoe":28,"bounce":344,"dodge":58,"logosLexicon":25}, - "snaps": "46cae241 4126bfe2 3597168d ef44620e 25aa24d2 bef8ed11 e114314a 75ea4626 14a7267e d136ce0e cd0f1cb6 a5f2f534 04f217e4 84e96cae e87a36e7 163b985d 0de49904 6dbacbcc 41cdeac6 9bb308c2 40ba42e6 1823cbb2" + "enemies": {"enemy_1010_demon_2":[36,3,33,28588,679603],"enemy_1071_dftman":[51,12,39,4181,301561],"enemy_1072_dlancer":[60,9,51,11229,460211]}, + "hooks": [1,171,6284,545,545,1173,1145,0,45,168,13,12,0,6532,195,41,147,123,1,46,0,0,28], + "events": {"atk":545,"deploy":24,"die":45,"dmg":1145,"engage":12,"fx":358,"leak":123,"skill":25,"spawn":159,"status":262}, + "fx": {"aoe":29,"bounce":228,"dodge":62,"logosLexicon":39}, + "snaps": "a3f1b53f 65ad96a3 1e27c835 c471b183 a9d117e1 1230958c c5f01b31 e2f16dc4 13b7ff34 fff6f70c ff28c518 960ad469 07783e9f cfb1dd16 eb64d4e5 b8b84845 95ff5870 65dcc089 4092ee32 0fa97a73 4c82d2a7" }, "diy-029": { "about": "5_diy1_b=logos/S1/002_logos 5_diy2_b=logos/S2/002_logos 5_diy1_b=logos/S3/002_logos 5_diy2_b=logos/S1/003_logos 5_diy1_b=logos/S2/003_logos 5_diy2_b=logos/S3/003_logos 6_diy1_a=logos/S1 6_diy2_a=logos/S2 6_diy1_a=logos/S3 6_diy2_b=logos/S1 6_diy1_b=logos/S2 6_diy2_b=logos/S3", @@ -5305,35 +5305,35 @@ "time": 230, "ticks": 6900, "reason": "timeout", - "killed": 3, + "killed": 2, "total": 147, "unspawned": 0, "bossHpLeft": null, "rngDraws": 0, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":3,"total":147,"perfect":false,"leaks":144,"leaksUncounted":0,"coins":0,"dmg":348342,"bossDmg":0,"heal":121624,"deaths":2,"layerGains":{}}}, + "players": {"p1":{"killed":2,"total":147,"perfect":false,"leaks":145,"leaksUncounted":0,"coins":0,"dmg":361912,"bossDmg":0,"heal":143362,"deaths":1,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_6_diy1_b",0,"uniequip_002_slent2",2298,1,6,1,21379,0,26921,120,4], - ["p1",2,"op","chess_char_6_diy2_b",1,"uniequip_002_slent2",2298,1,11,0,31263,0,8537,126,5], - ["p1",3,"op","chess_char_6_diy1_b",2,"uniequip_002_slent2",2298,1,14,1,18776,0,10738,96,2], - ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_slent2",1965,1,4,0,31475,0,6332,77,4], - ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_003_slent2",1965,1,5,0,48142,0,4350,114,5], - ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_003_slent2",2358,1,7,0,29166,22769,17305,107,2], - ["p1",7,"op","chess_char_5_diy1_a",0,null,1556.5,1,12,0,17432,0,7466,103,5], - ["p1",8,"op","chess_char_5_diy2_a",1,null,1556.5,1,15,0,23629,0,9192,52,2], - ["p1",9,"op","chess_char_5_diy1_a",2,null,1546,1,8,1,34961,32714,8309,102,3], - ["p1",10,"op","chess_char_5_diy2_b",0,"none",1900.8,1,10,0,20476,27840,7147,103,5], - ["p1",11,"op","chess_char_5_diy1_b",1,"none",1900.8,1,85,0,43974,20825,6683,53,2], - ["p1",12,"op","chess_char_5_diy2_b",2,"none",1900.8,1,157,0,27668,21289,8644,69,2], + ["p1",1,"op","chess_char_6_diy1_b",0,"uniequip_002_slent2",2298,1,6,0,21216,0,29039,124,4], + ["p1",2,"op","chess_char_6_diy2_b",1,"uniequip_002_slent2",2298,1,11,1,30725,0,10525,133,5], + ["p1",3,"op","chess_char_6_diy1_b",2,"uniequip_002_slent2",2298,1,14,0,18054,0,12278,94,2], + ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_003_slent2",1965,1,4,0,31024,0,8511,82,4], + ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_003_slent2",1965,1,5,0,45080,0,5550,106,5], + ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_003_slent2",2358,1,7,1,31619,19740,20167,112,2], + ["p1",7,"op","chess_char_5_diy1_a",0,null,1556.5,1,12,0,17910,0,9908,113,5], + ["p1",8,"op","chess_char_5_diy2_a",1,null,1556.5,1,15,0,22693,0,7723,50,2], + ["p1",9,"op","chess_char_5_diy1_a",2,null,842.5,1,8,0,29890,48209,8088,107,3], + ["p1",10,"op","chess_char_5_diy2_b",0,"none",1900.8,1,10,0,20476,30138,9922,112,5], + ["p1",11,"op","chess_char_5_diy1_b",1,"none",1900.8,1,85,0,50279,20651,7939,57,2], + ["p1",12,"op","chess_char_5_diy2_b",2,"none",1900.8,1,9,0,42947,27240,13712,119,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_1010_demon_2":[36,0,36,34867,60280],"enemy_1071_dftman":[51,1,50,11383,65774],"enemy_1072_dlancer":[60,2,56,79187,222288]}, - "hooks": [1,164,6900,1364,1364,1576,1576,650,5,147,41,38,0,41208,54,57,147,142,1,5,0,0,0], - "events": {"atk":1546,"deploy":14,"die":5,"dmg":1570,"engage":12,"fx":607,"heal":388,"leak":142,"skill":79,"spawn":162,"status":589}, - "fx": {"aoe":72,"heal":231,"levitate":54,"shield":250}, - "snaps": "0fc819e5 0de8f25c cbd99739 53bf2362 bf211e55 3b1d12b8 0ac8e0aa 9dba465e 5c93fe8c 41f070f9 c15b74b1 e8c12aaa 5e0dcaaa 4ae2edb1 c8d02dee 9098c07b 573d1807 e87ef02e 54edadf7 7f5feeb6 a1637ee7 6473e5cd 28977ec1" + "enemies": {"enemy_1010_demon_2":[36,0,35,51346,79660],"enemy_1071_dftman":[51,0,51,2463,49416],"enemy_1072_dlancer":[60,2,55,92168,232837]}, + "hooks": [1,163,6900,1481,1481,1677,1677,699,3,144,42,38,0,42822,48,52,147,141,1,3,0,0,0], + "events": {"atk":1676,"deploy":13,"die":3,"dmg":1669,"engage":12,"fx":667,"heal":473,"leak":141,"skill":80,"spawn":162,"status":641}, + "fx": {"aoe":77,"heal":263,"levitate":48,"shield":279}, + "snaps": "0fc819e5 0de8f25c cbd99739 77c95ad9 8647c63d 61c97ad4 b295ab13 ae5b7267 75d5473a bf103537 52a28a1a e92bdbc7 726765f0 32462a64 73f3b008 4a5d58d5 f54e088a 3bc5d685 8664c2c2 3d0b0f6a 78392737 747f298e f70dc197" }, "diy-125": { "about": "5_diy1_b=haruka/S1/002_haruka 5_diy2_b=haruka/S2/002_haruka 5_diy1_b=haruka/S3/002_haruka 6_diy1_a=haruka/S1 6_diy2_a=haruka/S2 6_diy1_a=haruka/S3 6_diy2_b=haruka/S1 6_diy1_b=haruka/S2 6_diy2_b=haruka/S3 6_diy1_b=haruka/S1/002_haruka 6_diy2_b=haruka/S2/002_haruka 6_diy1_b=haruka/S3/002_haruka", diff --git a/test/golden/matches.json b/test/golden/matches.json index 5590cccd..89c3235a 100644 --- a/test/golden/matches.json +++ b/test/golden/matches.json @@ -687,8 +687,8 @@ }, { "round": 12, - "ai_0": [1,3,13,0,0,6,8,"dc00c87b",133,"kazimierzShip 1/33, kjeragShip 0/2, raidShip 1/49, skillfulShip 0/9, soloShip 1/3, steadShip 2/22, suntShip 1/0, swiftShip 1/26, visiShip 1/0",21,50,29,114], - "ai_1": [0,0,13,0,0,6,0,"811c9dc5",0,"arcaneShip 0/2, kazimierzShip 0/2, preciShip 0/59, sargonShip 0/4, siracusaShip 0/10, skillfulShip 0/6, swiftShip 0/23",21,50,29,114] + "ai_0": [1,3,13,0,0,6,8,"dc00c87b",133,"kazimierzShip 1/33, kjeragShip 0/2, raidShip 1/49, skillfulShip 0/9, soloShip 1/3, steadShip 2/22, suntShip 1/0, swiftShip 1/26, visiShip 1/0",25,50,25,114], + "ai_1": [0,0,13,0,0,6,0,"811c9dc5",0,"arcaneShip 0/2, kazimierzShip 0/2, preciShip 0/59, sargonShip 0/4, siracusaShip 0/10, skillfulShip 0/6, swiftShip 0/23",17,50,33,114] }, { "round": 13, @@ -707,7 +707,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 3, "reward": 298, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2574318,"gold":126,"itemsEquipped":8,"kills":206,"leaks":81,"lpLost":32,"merges":4,"perfectRounds":9,"refreshes":13}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2600903,"gold":126,"itemsEquipped":8,"kills":210,"leaks":77,"lpLost":32,"merges":4,"perfectRounds":9,"refreshes":13}, "lineup": [], "bonds": ["kazimierzShip 0/41","kjeragShip 0/2","miraShip 0/7","preciShip 0/4","raidShip 0/49","skillfulShip 0/9","soloShip 0/3","steadShip 0/22","swiftShip 0/34","yanShip 0/6"] }, @@ -721,7 +721,7 @@ "title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"}, "trophies": 2, "reward": 255, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1426006,"gold":114,"itemsEquipped":11,"kills":164,"leaks":69,"lpLost":34,"merges":3,"perfectRounds":5,"refreshes":19}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1344369,"gold":114,"itemsEquipped":11,"kills":160,"leaks":73,"lpLost":34,"merges":3,"perfectRounds":5,"refreshes":19}, "lineup": [], "bonds": ["arcaneShip 0/2","kazimierzShip 0/2","preciShip 0/59","sargonShip 0/4","siracusaShip 0/10","skillfulShip 0/6","swiftShip 0/23"] } diff --git a/test/golden/roster.json b/test/golden/roster.json index c76666f8..c38a021e 100644 --- a/test/golden/roster.json +++ b/test/golden/roster.json @@ -1012,66 +1012,55 @@ "time": 230, "ticks": 6900, "reason": "timeout", - "killed": 79, + "killed": 81, "total": 126, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 568, + "rngDraws": 571, "errors": {"count":0,"kinds":[]}, "players": { - "p1": { - "killed": 79, - "total": 126, - "perfect": false, - "leaks": 47, - "leaksUncounted": 0, - "coins": 6, - "dmg": 3625965, - "bossDmg": 0, - "heal": 73726, - "deaths": 12, - "layerGains": {"preciShip":2} - } + "p1": {"killed":81,"total":126,"perfect":false,"leaks":45,"leaksUncounted":0,"coins":6,"dmg":3939977,"bossDmg":0,"heal":90944,"deaths":6,"layerGains":{"preciShip":4}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,155,9,319089,12578,505,57,4], - ["p1",2,"op","chess_char_6_03_a",2,null,3649.5,1,153,1,63347,9646,3389,40,2], - ["p1",3,"op","chess_char_6_06_a",2,null,2223,1,141,9,376232,17794,732,73,2], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,74,6,134249,34756,12617,295,2], - ["p1",5,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,10,0,114705,1182,705,42,5], - ["p1",6,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,84,0,216022,2324,401,113,3], - ["p1",7,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,1,1,42732,1056,1056,11,4], - ["p1",8,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,3,0,0,2485,51822,72,4], - ["p1",9,"op","chess_char_6_01_a",2,null,1158,1,106,30,645243,1291,81,72,3], - ["p1",10,"op","chess_char_6_02_a",2,null,1687,1,7,20,1384858,7686,498,74,3], - ["p1",11,"op","chess_char_6_04_a",2,null,1161.9,1,130,1,64654,8281,903,0,3], - ["p1",12,"op","chess_char_6_05_a",2,null,1215,1,59,2,264834,2542,1017,68,5], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",699.59,1,112,13,452146,8026,912,86,4], + ["p1",2,"op","chess_char_6_03_a",2,null,2433,1,108,0,89227,20851,8651,68,2], + ["p1",3,"op","chess_char_6_06_a",2,null,2223,1,6,9,453929,27394,1598,112,3], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,124,3,128622,31811,12917,287,2], + ["p1",5,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,10,0,111106,1182,705,40,5], + ["p1",6,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,83,0,211134,2324,401,112,3], + ["p1",7,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,1,1,24955,1242,844,10,4], + ["p1",8,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,3,0,0,2192,61470,82,4], + ["p1",9,"op","chess_char_6_01_a",2,null,1158,1,92,22,825066,1317,106,81,4], + ["p1",10,"op","chess_char_6_02_a",2,null,1687,1,7,28,1280417,1242,278,74,3], + ["p1",11,"op","chess_char_6_04_a",2,null,1202,1,9,2,80419,7606,2044,0,4], + ["p1",12,"op","chess_char_6_05_a",2,null,1215,1,59,2,282958,2542,1017,68,5], ["p1",13,"token","token_10017_skadi2_dedant",null,null,100,0,13,0,0,0,0,0,null], ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,60,0,0,0,0,0,null], - ["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,131,0,0,0,0,0,null], - ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,154,0,0,0,0,0,null] + ["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,101,0,0,0,0,0,null], + ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,142,0,0,0,0,0,null], + ["p1","~4","token","token_10017_skadi2_dedant",null,null,100,1,150,0,0,0,0,0,null] ], "enemies": { "enemy_10045_parrot": [1,0,1,0,44064], - "enemy_10098_crhro": [1,0,1,4685,94997], - "enemy_10124_uashld_2": [12,0,10,34007,659017], - "enemy_1019_jshoot_2": [1,1,0,1861,16718], - "enemy_1043_zomsbr": [72,54,18,618,974327], - "enemy_1061_zomshd": [30,18,12,24836,1664045], - "enemy_1072_dlancer": [1,1,0,2738,37150], - "enemy_1165_duhond": [1,1,0,0,17337], + "enemy_10098_crhro": [1,1,0,9194,185752], + "enemy_10124_uashld_2": [12,2,6,48061,1052907], + "enemy_1019_jshoot_2": [1,1,0,1498,16718], + "enemy_1043_zomsbr": [72,52,20,114,986155], + "enemy_1061_zomshd": [30,20,10,24481,1553823], + "enemy_1072_dlancer": [1,1,0,508,37150], + "enemy_1165_duhond": [1,1,0,127,17337], "enemy_1196_msfyin_2": [1,1,0,0,3], - "enemy_1209_sfden_2": [1,0,1,0,40185], - "enemy_1273_stmgun_2": [1,1,0,30037,111451], + "enemy_1209_sfden_2": [1,0,1,896,53527], + "enemy_1273_stmgun_2": [1,0,1,18044,12298], "enemy_1355_mrfly": [1,1,0,0,37150], - "enemy_1433_dsbasi_2": [1,1,0,134,35293], - "enemy_2001_duckmi_2": [1,0,1,0,9483], - "enemy_9006_actoxi": [1,0,1,0,2384] + "enemy_1433_dsbasi_2": [1,1,0,0,35293], + "enemy_2001_duckmi_2": [1,0,1,0,21574], + "enemy_9006_actoxi": [1,0,1,0,2453] }, - "hooks": [1,154,6900,951,1017,7281,7430,78804,91,140,40,36,17,35845,1032,57,126,45,1,102,1,7,6], - "events": {"atk":2283,"bounty":3,"deploy":28,"die":95,"dmg":7385,"engage":10,"fx":552,"heal":121,"layer":1,"leak":45,"skill":76,"spawn":142,"status":2410}, - "fx": {"aoe":8,"bombard":17,"bombardShell":17,"burst":7,"crit":50,"dodge":6,"explode":40,"firewall":2,"garrison":1,"iceSpike":90,"lightning":148,"lock":17,"lure":3,"revive":1,"snow":82,"soul":1,"sp":1,"storm":5,"talent":2,"telegraph":8,"tide":3,"wanted":38,"weightless":5}, - "snaps": "ee17d257 d832b8ac 2ca210aa 3cd3fc22 022376cf a362140e 0ca09d66 1f446040 29245222 70bfb33a 2b4ce12f 51a65ad5 1216d2fa f2d3b899 86e068de 5a0bbda6 1bb53622 0ef45b3c a98167d6 5245239e eac46280 b7e2f8ef 905be587" + "hooks": [1,149,6900,1051,1115,7953,8194,74598,87,132,43,40,23,40522,1066,52,126,41,1,101,2,9,7], + "events": {"atk":2422,"bounty":3,"deploy":23,"die":91,"dmg":8114,"engage":10,"fx":558,"heal":126,"layer":2,"leak":41,"skill":83,"spawn":143,"status":2555}, + "fx": {"aoe":8,"bombard":23,"bombardShell":23,"burst":9,"crit":50,"dodge":7,"explode":20,"firewall":2,"garrison":2,"iceSpike":90,"lightning":151,"lock":23,"lure":3,"revive":1,"snow":80,"soul":1,"sp":3,"storm":5,"talent":2,"telegraph":7,"tide":4,"wanted":39,"weightless":5}, + "snaps": "ee17d257 d832b8ac 2ca210aa cbf4f6c5 9834d1a9 ab1e0274 d7943543 8c87350d 084b216e c699ce3c 94504937 e9978482 b74cefae ad3da315 655ea66f ca6ce347 30b1520b a1d6a040 3d66ba82 7f221d61 cd67a2de b5f075de 9844b6b9" }, "roster-017": { "about": "pass 0 band 6: chess_char_6_15_a chess_char_6_19_a chess_char_6_07_a chess_char_6_17_a chess_char_6_08_a chess_char_6_09_a chess_char_6_11_a chess_char_6_12_a chess_char_6_13_a chess_char_6_14_a chess_char_6_16_a chess_char_6_18_a", diff --git a/test/golden/standins.json b/test/golden/standins.json index 6171527d..19488857 100644 --- a/test/golden/standins.json +++ b/test/golden/standins.json @@ -186,62 +186,62 @@ "round": 12, "seed": 428893583, "waveId": "act1autochess_h05", - "time": 196.37, - "ticks": 5891, + "time": 201.73, + "ticks": 6052, "reason": "cleared", - "killed": 127, + "killed": 146, "total": 158, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 656, + "rngDraws": 614, "errors": {"count":0,"kinds":[]}, "players": { "p1": { - "killed": 127, + "killed": 146, "total": 158, "perfect": false, - "leaks": 31, + "leaks": 12, "leaksUncounted": 0, "coins": 8, - "dmg": 1279084, + "dmg": 1417534, "bossDmg": 0, - "heal": 23617, - "deaths": 13, + "heal": 25396, + "deaths": 8, "layerGains": {"sargonShip":5} } }, "units": [ - ["p1",1,"op","chess_char_6_03_a",2,null,0,0,173,0,379,7812,0,3,0], - ["p1",2,"op","chess_char_6_02_a",2,null,0,0,175,2,4099,4587,0,9,1], - ["p1",3,"op","chess_char_6_07_a",0,null,0,0,169,9,146057,3730,0,77,1], - ["p1",4,"op","chess_char_6_10_a",0,null,1865,1,182,0,26824,3730,0,28,1], - ["p1",5,"op","chess_char_6_11_a",2,null,1529,1,179,11,105846,7699,0,33,4], - ["p1",6,"op","chess_char_6_06_a",2,null,2080.4,1,157,13,102010,19207,0,105,3], - ["p1",7,"op","chess_char_5_22_a",2,null,1272,1,3,2,36737,0,0,27,2], - ["p1",8,"op","chess_char_6_01_a",2,null,1272,1,4,41,375365,0,0,160,3], - ["p1",9,"op","chess_char_6_04_a",2,null,1160,1,13,5,66082,0,0,118,2], - ["p1",10,"op","chess_char_6_05_a",2,null,1272,1,14,16,199814,2964,0,123,2], - ["p1",11,"op","chess_char_6_08_a",2,null,1372,1,5,28,215871,0,0,59,2], - ["p1",12,"op","chess_char_6_09_a",2,null,1224,1,11,0,0,0,23617,34,2], + ["p1",1,"op","chess_char_6_03_a",2,null,0,0,169,0,2034,5814,0,24,1], + ["p1",2,"op","chess_char_6_02_a",2,null,1026.4,1,171,6,34754,2032,0,3,6], + ["p1",3,"op","chess_char_6_07_a",0,null,1865,1,178,7,177671,1865,0,104,2], + ["p1",4,"op","chess_char_6_10_a",0,null,1865,1,177,5,99606,1865,0,99,2], + ["p1",5,"op","chess_char_6_11_a",2,null,0,0,167,25,173830,8783,0,48,7], + ["p1",6,"op","chess_char_6_06_a",2,null,2638,1,158,15,108249,19250,0,107,4], + ["p1",7,"op","chess_char_5_22_a",2,null,1272,1,3,2,27182,0,0,23,2], + ["p1",8,"op","chess_char_6_01_a",2,null,1272,1,4,38,276396,0,0,159,2], + ["p1",9,"op","chess_char_6_04_a",2,null,1160,1,13,8,63813,0,0,118,2], + ["p1",10,"op","chess_char_6_05_a",2,null,1272,1,14,18,244695,2453,0,128,2], + ["p1",11,"op","chess_char_6_08_a",2,null,1372,1,5,21,209303,0,0,53,3], + ["p1",12,"op","chess_char_6_09_a",2,null,1224,1,11,0,0,0,25396,42,2], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null] ], "enemies": { "enemy_10098_crhro": [1,1,0,1577,41472], - "enemy_10099_crvln": [1,1,0,2964,20736], - "enemy_1009_lurker": [1,1,0,16,3041], + "enemy_10099_crvln": [1,1,0,2453,20736], + "enemy_1009_lurker": [1,1,0,23,3041], "enemy_1010_demon": [1,1,0,0,10368], - "enemy_1010_demon_2": [28,20,8,11373,543506], + "enemy_1010_demon_2": [28,24,4,9519,566154], "enemy_10112_ymgds": [1,1,0,0,6912], - "enemy_10116_ymgtop": [1,1,0,3450,13824], - "enemy_10118_ymgprc": [1,0,1,5235,10561], - "enemy_1071_dftman": [63,60,3,290,241610], - "enemy_1072_dlancer": [60,41,19,24824,407969] + "enemy_10116_ymgtop": [1,1,0,2924,13824], + "enemy_10118_ymgprc": [1,0,1,8633,47535], + "enemy_1071_dftman": [63,63,0,666,243855], + "enemy_1072_dlancer": [60,53,7,16266,482782] }, - "hooks": [1,182,5891,853,853,1865,1862,60,140,171,23,22,0,28489,4121,43,158,31,1,141,2,0,12], - "events": {"atk":998,"bounty":4,"deploy":22,"die":140,"dmg":1862,"engage":11,"fx":77,"heal":44,"layer":2,"leak":31,"skill":45,"spawn":172,"status":464}, - "fx": {"aoe":4,"dodge":15,"dp":18,"garrison":2,"revive":1,"slash":24,"sp":8,"spGain":3,"telegraph":2}, - "snaps": "1184691a ac872d2c 04c21bcf 302d411f 5ea6c6b7 1d6c2c6a d1adbc33 d86e6315 835cf160 a3576945 32ffef8a f9d81c1e 035b4b09 12f6f260 41a84026 a6a6ba61 9dd38c5e dcbccdf8 93092800 8b97b584" + "hooks": [1,178,6052,992,992,2073,2070,71,154,166,35,33,0,37600,3935,56,158,12,1,155,2,0,11], + "events": {"atk":1138,"bounty":4,"deploy":18,"die":154,"dmg":2070,"engage":11,"fx":174,"heal":53,"layer":2,"leak":12,"skill":68,"spawn":172,"status":449}, + "fx": {"aoe":8,"dodge":14,"dp":44,"garrison":2,"revive":1,"slash":86,"sp":14,"spGain":3,"telegraph":2}, + "snaps": "484fd662 4f4e076d 081948b0 d7bf1df0 c0aa2905 1b27e150 ab6cac50 1cbbd19b 1109a00b b8a562d0 58ac9b92 3126d9be 7b2d0323 7a11d03f b313b514 a71c9972 09816903 02ed5449 40a13ed4 00252786 174d9027" }, "standin-05": { "about": "normal band 6 as stand-ins: chess_char_6_17_a→char_608_acpion chess_char_6_13_a→char_615_acspec chess_char_6_19_a→char_615_acspec chess_char_6_12_a→char_612_accast chess_char_6_15_a→char_614_acsupo chess_char_6_18_a→char_612_accast chess_char_6_20_a→char_613_acmedc", @@ -438,47 +438,47 @@ "time": 230, "ticks": 6900, "reason": "timeout", - "killed": 36, + "killed": 35, "total": 179, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 1087, + "rngDraws": 1045, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":36,"total":179,"perfect":false,"leaks":143,"leaksUncounted":0,"coins":2,"dmg":1859123,"bossDmg":0,"heal":138461,"deaths":10,"layerGains":{}}}, + "players": {"p1":{"killed":35,"total":179,"perfect":false,"leaks":144,"leaksUncounted":0,"coins":2,"dmg":1736036,"bossDmg":0,"heal":110120,"deaths":11,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_acfend",3167.17,1,165,4,83889,36030,0,116,3], - ["p1",2,"op","chess_char_5_14_b",2,"uniequip_002_acpion",1904,1,194,7,473061,9225,0,48,8], - ["p1",3,"op","chess_char_5_19_b",0,"uniequip_002_sharp2",0,0,156,7,350021,33747,0,99,3], - ["p1",4,"op","chess_char_5_07_b",2,"none",3334,1,203,1,30240,30649,0,29,2], - ["p1",5,"op","chess_char_5_13_b",2,"uniequip_002_acguad",2176.17,1,129,7,177239,32096,0,89,4], - ["p1",6,"op","chess_char_5_17_b",2,"uniequip_002_acspec",1448,1,188,5,87979,26616,0,142,0], - ["p1",7,"op","chess_char_5_10_b",2,"none",1131,1,4,0,74712,0,0,155,4], - ["p1",8,"op","chess_char_5_11_b",2,"uniequip_002_acmedc",2262.4,1,5,0,0,0,138461,78,3], - ["p1",9,"op","chess_char_5_12_b",2,"uniequip_002_acsupo",1430,1,11,2,99017,0,0,136,3], - ["p1",10,"op","chess_char_5_15_b",2,"none",1510,1,13,0,76181,0,0,234,4], - ["p1",11,"op","chess_char_5_18_b",2,"uniequip_002_acnipe",2380.5,1,6,3,299976,0,0,164,3], - ["p1",12,"op","chess_char_5_20_b",2,"uniequip_002_acsupo",1430,1,14,0,106807,0,0,136,3], + ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_acfend",2051.95,1,164,4,77661,36640,0,117,3], + ["p1",2,"op","chess_char_5_14_b",2,"uniequip_002_acpion",1904,1,194,9,521070,9584,0,48,8], + ["p1",3,"op","chess_char_5_19_b",0,"uniequip_002_sharp2",4154.5,1,204,5,256988,30222,0,77,3], + ["p1",4,"op","chess_char_5_07_b",2,"none",2619.79,1,203,2,42832,27659,0,38,3], + ["p1",5,"op","chess_char_5_13_b",2,"uniequip_002_acguad",3411,1,205,4,86863,13306,0,44,2], + ["p1",6,"op","chess_char_5_17_b",2,"uniequip_002_acspec",1448,1,189,4,87684,26616,0,145,0], + ["p1",7,"op","chess_char_5_10_b",2,"none",1131,1,4,0,76667,0,0,155,4], + ["p1",8,"op","chess_char_5_11_b",2,"uniequip_002_acmedc",2262.4,1,5,0,0,0,110120,78,3], + ["p1",9,"op","chess_char_5_12_b",2,"uniequip_002_acsupo",1430,1,11,2,101246,0,0,136,3], + ["p1",10,"op","chess_char_5_15_b",2,"none",1510,1,13,0,87081,0,0,232,4], + ["p1",11,"op","chess_char_5_18_b",2,"uniequip_002_acnipe",2380.5,1,6,5,303540,0,0,167,3], + ["p1",12,"op","chess_char_5_20_b",2,"uniequip_002_acsupo",1430,1,14,0,94405,0,0,125,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_1072_dlancer": [1,1,0,3008,37150], - "enemy_1081_sotisd": [1,0,1,0,27095], - "enemy_1092_mdgint": [1,0,1,0,33], + "enemy_1072_dlancer": [1,1,0,1609,37150], + "enemy_1081_sotisd": [1,0,1,194,28396], + "enemy_1092_mdgint": [1,0,1,0,505], "enemy_1116_liprr": [1,0,1,0,6095], "enemy_1116_liprr_2": [1,0,1,0,2364], "enemy_1118_lidbox_2": [1,0,1,0,1344], "enemy_1119_vofsd": [1,0,1,0,889], "enemy_1121_lifbos": [1,0,1,0,1997], - "enemy_1249_lysdb_2": [60,16,44,44297,925272], - "enemy_1251_lysyta": [63,18,45,8302,477784], - "enemy_1254_lypa_2": [48,1,46,112756,379100] + "enemy_1249_lysdb_2": [60,14,46,46440,808178], + "enemy_1251_lysyta": [63,18,45,8182,493665], + "enemy_1254_lypa_2": [48,2,45,87602,355453] }, - "hooks": [1,203,6900,1914,1914,3154,3238,154,46,188,40,41,0,27753,17018,59,179,142,1,51,0,0,24], - "events": {"atk":2198,"bounty":1,"deploy":21,"die":46,"dmg":3227,"engage":11,"fx":296,"heal":145,"leak":142,"skill":85,"spawn":194,"status":1301}, - "fx": {"aoe":89,"displace":4,"dodge":50,"dp":15,"shieldBreak":60,"slash":64,"sp":4,"spGain":10}, - "snaps": "c4ba1bfb 2dfd8eae 9edfcbdb 398871eb 8ec5c018 bdeb7f73 3a80c711 b3542ba8 7c2bcdeb 332b7d77 cfba3c82 e42b9504 e04cec26 299bbeab 55c539ae fb163352 d1b5dcef e0628f10 16c64f3c f935f6ce dfa3bfea 0a6ae300 8f573ae7" + "hooks": [1,205,6900,1792,1792,3023,3084,153,46,189,39,41,0,26837,16854,58,179,143,1,46,0,0,6], + "events": {"atk":2045,"bounty":1,"deploy":23,"die":46,"dmg":3073,"engage":11,"fx":280,"heal":140,"leak":143,"skill":84,"spawn":194,"status":1275}, + "fx": {"aoe":90,"displace":4,"dodge":34,"dp":17,"shieldBreak":59,"slash":64,"sp":2,"spGain":10}, + "snaps": "c4ba1bfb fae78ec3 d95288ac 1e7366a4 dbbd0efb 2511f256 d2703cda dc932034 2d5006eb 8fcfa286 0f2d3b1e af1f7c99 b655c535 e4d7c5af 88362233 8adc2140 c0aab784 c923256c 5e8e81a4 b5c29988 bf00ddb2 6593e2b4 58d326a5" }, "standin-09": { "about": "elite band 7 as stand-ins: chess_char_6_03_b→char_610_acfend chess_char_6_02_b→char_608_acpion chess_char_6_07_b→char_617_sharp2 chess_char_6_10_b→char_617_sharp2 chess_char_6_11_b→char_608_acpion chess_char_6_06_b→char_609_acguad chess_char_5_22_b→char_611_acnipe chess_char_6_01_b→char_611_acnipe chess_char_6_04_b→char_614_acsupo chess_char_6_05_b→char_611_acnipe chess_char_6_08_b→char_612_accast chess_char_6_09_b→char_613_acmedc",