diff --git a/docs/SIM.md b/docs/SIM.md index a0040d45..688adec2 100644 --- a/docs/SIM.md +++ b/docs/SIM.md @@ -1065,6 +1065,11 @@ has the generic spec. Summons: `battle.tokenDef(tokenId, unit)` / `battle.spawnT (token skill of that slot: `variants[owner].bySkill[i]`, module attributes: `.byModule[id]`). Coverage of the selectable skills: `node tools/kit-coverage.mjs --missing [--tier N] [--strict]`. +忍冬's 追凶 records the per-enemy start time and applies its arts addition in the same `damaged` callback, +including the first instance (PRTS talent remarks; DESIGN §29.15). It does not refresh the ten-second window on +repeated hits. Its `vulpisHunt` / `addition` tags and re-entrancy guard prevent the rider from feeding itself. +`test/content/vulpis-first-hit.test.js` checks actual HP loss and damage events with naturally ready skills. + Timed deployment kits: 宴 S2 uses `bb.duration` and skill ATK mods, loses current HP once on landing, and converts normal physical attacks to arts only while S2 is active; S1 has no such conversion. 斯卡蒂 S2 uses its own record's `s.bb.duration` / `s.bb.atk`; DRE-Y revival in place does not restart it. 野鬃 S1 uses its record's `duration` / diff --git a/docs/design/engine.md b/docs/design/engine.md index ffe067f7..2358c21c 100644 --- a/docs/design/engine.md +++ b/docs/design/engine.md @@ -172,6 +172,8 @@ Profession traits (default behaviours implemented once in the engine, keyed by ` Each domain file `server/sim/content/{tokens,bonds,garrisons,items,bands,enemies,bosses,devices,choices}.js` exports `install(battle)` (battle side; called once per Battle by `content/index.js → installContent`) and `registerMeta(registry)` (prep side; called once at server boot by `match/effectsMeta.js`, API documented in `docs/META.md`). Kits live one per file in `content/kits/ops/` (`export default { [baseChessId]: (bb, chess, def) => Kit }`), listed in `content/kits/index.js` (guide: `content/kits/README.md`). Content must be **data-driven from blackboards** (numbers never hard-coded when a blackboard key exists). Every effect gets at least one unit test in `test/content/*.test.js` using the `test/helpers/battleHarness.js` harness (provided by sim-core). - kits: all 112 visible chess + hidden ones used by effects (盟约·辅助干员), default skill + talents + trait specifics; tokens. The 72 non-collaboration 6★ DIY operators include 克莱门莎 (§28.1); her launch-day provisional mechanics are local to her kit. 黍 GUA-Y and 乌尔比安 CRU-Y follow the generated module blackboards and existing module-level rules (§28.2). + 忍冬's 追凶 adds arts damage on the first qualifying instance too; the per-enemy window starts on that instance, + and repeated hits do not extend it. The addition keeps its own tag and re-entrancy guard (§29.15). 克莱门莎 S2 removes dead, hidden, self-bound / teleport-immune and unreachable passengers before checking new boarding in the same tick. Each released passenger returns its current weight to the cabin's remaining budget and frees its slot (§28.27); neither corpses nor failed carries reserve capacity. diff --git a/docs/history/0.2.4.md b/docs/history/0.2.4.md index 9f5c8917..1c99bca8 100644 --- a/docs/history/0.2.4.md +++ b/docs/history/0.2.4.md @@ -274,3 +274,22 @@ enemy: picking emitted a unit click with no definition, instead of the tile clic engine-canvas regression retains the card/100 HP assertions and also covers another field refresh, live HP loss and closing the card when the crate is destroyed. Device metadata supplied by the new entry still wins; changing fields does not carry old devices across. Gameplay and allied targeting rules are unchanged. + +### 29.15 Vulpisfoglia's first Hunt instance + +[PRTS 忍冬](https://prts.wiki/w/忍冬), 追凶's remarks, includes the first damage instance in its arts addition. +The mode's generated talent blackboard (`chess_char_3_18_a/b`, `atk_scale` 0.3, `interval` 10) supplies the numbers; +no mode-specific first-hit exception was found. The old callback recorded the first timestamp and returned, +skipping the addition on every new enemy. Kit hooks are installed before initial deployment, so this was not a +delayed stat or talent installation. + +The callback now records the timestamp and continues to the existing addition path on that same instance. +The fixed window, damage tags, dodge settings and recursion guard retain their previous behavior; skills, +modules and other operators are unchanged. Full-content controlled-enemy tests cover ordinary first hits in both +forms and all selectable modules/skills, first skill damage from S1–S3, per-enemy timing and actual HP/event totals. +The existing HP-loss conversion regression now expects one rider on every attack, including the first. + +The intended golden moves are `roster-007/009/026/039`, `bond-soloShip-low`, `bond-yanShip-low`, +`coop2-NORMAL-3`, `coop4-ABYSS-7` and `coop2-NORMAL-5-coverage-diy`: the extra first instance changes damage, +kills and downstream battle/match choices in scenarios that field Vulpisfoglia. Fields, stand-ins and DIY +scenarios retain their digests. diff --git a/server/sim/content/kits/ops/chess_char_3_18-vulpis.js b/server/sim/content/kits/ops/chess_char_3_18-vulpis.js index 1e8b77e6..b7e4b449 100644 --- a/server/sim/content/kits/ops/chess_char_3_18-vulpis.js +++ b/server/sim/content/kits/ops/chess_char_3_18-vulpis.js @@ -94,8 +94,9 @@ export default { battle.on('damaged', (ctx) => { const e = ctx.target; if (busy || ctx.source !== unit || e.side !== 'enemy' || ctx.type === 'element' || ctx.dmg?.tags?.includes('vulpisHunt')) return; - const t = marks.get(e.id); - if (t == null) { marks.set(e.id, battle.time); return; } + let t = marks.get(e.id); + // PRTS talent remarks: the first damage instance also receives the arts addition. + if (t == null) { t = battle.time; marks.set(e.id, t); } if (battle.time - t <= num(t0.interval, 10) + 1e-9 && e.alive) { busy = true; // PRTS 备注 "伤害类型为法术附加伤害": tag addition (no 叙拉古 6 roll) diff --git a/test/content/kits_t3.test.js b/test/content/kits_t3.test.js index bf8923cf..76e3abd2 100644 --- a/test/content/kits_t3.test.js +++ b/test/content/kits_t3.test.js @@ -1249,7 +1249,7 @@ test('忍冬 追凶 never feeds on itself: a hit turned into HP loss credited to const e = h.enemy('enemy_times'); const atks = u.stats.attacks; assert.ok(atks >= 3); - // first attack marks the enemy (1 HP), every later attack: 1 HP + one 追凶 bonus instance (1 HP) - assert.equal(e.s.maxHp - e.hp, 1 + 2 * (atks - 1)); + // Every attack, the first included: 1 HP + one 追凶 bonus instance (1 HP), never recursive bonuses. + assert.equal(e.s.maxHp - e.hp, 2 * atks); done(h); }); diff --git a/test/content/vulpis-first-hit.test.js b/test/content/vulpis-first-hit.test.js new file mode 100644 index 00000000..b7284430 --- /dev/null +++ b/test/content/vulpis-first-hit.test.js @@ -0,0 +1,94 @@ +// 追凶's first damage instance also carries its arts addition (PRTS 忍冬, talent remarks). +// Real full-content battles with controlled durable enemies; no HP/SP/ATK writes or forced casts. +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { makeBattle, enemyRec, checkInvariants } from '../helpers/battleHarness.js'; + +const NORMAL = 'chess_char_3_18_a'; +const ELITE = 'chess_char_3_18_b'; +const ENEMY = 'enemy_vulpis_probe'; +const approx = (a, b) => assert.ok(Math.abs(a - b) < 1e-6, `${a} vs ${b}`); +const hunt = (c) => c.dmg?.tags?.includes('vulpisHunt'); +const finished = (h) => { assert.deepEqual(h.b.errors, []); checkInvariants(h.b); }; +function scenario(entry = {}, enemy = {}) { + return makeBattle({ + units: [{ chessId: NORMAL, row: 10, col: 4, ...entry }], + defs: { enemies: { [ENEMY]: enemyRec({ key: ENEMY, hp: 1e7, speed: 0, ...enemy }) } }, + autoFinish: false, timeLimit: 40, flags: { startOpCooldown: 3 }, hooks: ['damaged'], captureNoisy: true, + }); +} +const variants = [ + { label: 'normal', chessId: NORMAL }, + { label: 'elite without module', chessId: ELITE, moduleId: 'none' }, + { label: 'elite SOL-X', chessId: ELITE, moduleId: 'uniequip_002_vulpis' }, + { label: 'elite SOL-Y', chessId: ELITE, moduleId: 'uniequip_003_vulpis' }, +]; + +for (const { label, ...entry } of variants) for (const skillIndex of [0, 1, 2]) { + test(`追凶: first ordinary hit includes one arts addition (${label}, S${skillIndex + 1})`, () => { + const h = scenario({ ...entry, skillIndex }); + h.step(); + const u = h.unit(entry.chessId); + if (entry.moduleId) assert.equal(u.def.loadout.moduleId, entry.moduleId, 'the requested module is equipped'); + const e = h.spawn(ENEMY, { pos: [10, 5] }); + const hp = e.hp; + assert.ok(h.runUntil(() => h.hooksOf('damaged').some((c) => c.source === u), 1)); + const hits = h.hooksOf('damaged').filter((c) => c.source === u); + const main = hits.filter((c) => !hunt(c)); + assert.equal(main.length, 1, 'one ordinary attack'); + assert.equal(main[0].dmg.isSkill, false, 'no skill at the first hit'); + assert.equal(main[0].type, 'phys'); + assert.ok(e.alive && e.hp > 0, 'the first attack did not kill the target'); + const riders = hits.filter(hunt); + assert.equal(riders.length, 1, 'the very first hit carries 追凶'); + assert.equal(riders[0].t, main[0].t); + assert.equal(riders[0].type, 'arts'); + assert.ok(riders[0].dmg.tags.includes('addition')); + approx(riders[0].amount, u.s.atk * u.def.talents[0].bb.atk_scale); + approx(hp - e.hp, main[0].amount + riders[0].amount); + assert.equal(h.eventsOf('dmg').filter((c) => c[1] === e.id).length, 2, 'both actual damage events exist'); + finished(h); + }); +} + +for (const chessId of [NORMAL, ELITE]) for (const skillIndex of [0, 1, 2]) { + test(`追凶: first skill damage carries its addition (${chessId}, S${skillIndex + 1})`, () => { + const h = scenario({ chessId, skillIndex }); + h.run(16); // every selected skill is naturally ready, with no enemies yet + const u = h.unit(chessId); + const e = h.spawn(ENEMY, { pos: [10, skillIndex === 1 ? 7 : skillIndex === 2 ? 6 : 5] }); + const hp = e.hp; + assert.ok(h.runUntil(() => h.hooksOf('damaged').some((c) => c.source === u && c.dmg.isSkill), 2)); + const hits = h.hooksOf('damaged').filter((c) => c.source === u && c.target === e); + const main = hits.filter((c) => !hunt(c)); + assert.ok(main.some((c) => c.dmg.isSkill)); + // S1 has a physical attack and a separate arts skill instance; S2/S3 have one main instance each. + assert.equal(main.length, skillIndex === 0 ? 2 : 1); + const riders = hits.filter(hunt); + assert.equal(riders.length, main.length, 'one addition per qualifying damage instance, including the first'); + for (const c of riders) approx(c.amount, u.s.atk * u.def.talents[0].bb.atk_scale); + approx(hp - e.hp, hits.reduce((s, c) => s + c.amount, 0)); + assert.ok(e.alive && e.hp > 0); + finished(h); + }); +} + +test('追凶: each enemy starts its own fixed window; repeated damage does not extend it', () => { + const h = scenario(); + h.step(); + const u = h.unit(NORMAL); + const e = h.spawn(ENEMY, { pos: [10, 5] }); + h.run(12); + const main = h.hooksOf('damaged').filter((c) => c.source === u && c.target === e && !hunt(c)); + const riders = h.hooksOf('damaged').filter((c) => c.source === u && c.target === e && hunt(c)); + assert.ok(main.some((c) => c.t > main[0].t + 10)); + assert.equal(riders.length, main.filter((c) => c.t - main[0].t <= 10 + 1e-9).length); + assert.ok(riders.every((c) => c.t - main[0].t <= 10 + 1e-9)); + const another = h.spawn(ENEMY, { pos: [10, 6] }); + // Naturally ready S3 can reach both enemies; the new target gets its own first-hit addition. + assert.ok(h.runUntil(() => h.hooksOf('damaged').some((c) => c.target === another), 10)); + const first = h.hooksOf('damaged').filter((c) => c.target === another); + assert.equal(first.filter(hunt).length, 1); + assert.equal(first.filter(hunt)[0].t, first.find((c) => !hunt(c)).t); + finished(h); +}); diff --git a/test/golden/bonds.json b/test/golden/bonds.json index e3ae5a5c..778928c7 100644 --- a/test/golden/bonds.json +++ b/test/golden/bonds.json @@ -1285,20 +1285,20 @@ ["p1",1,"op","chess_char_3_16_a",1,null,2987.88,1,3,0,0,0,0,0,0], ["p1",2,"op","chess_char_4_01_a",2,null,4077.11,1,5,2,8508,566,0,10,1], ["p1",3,"op","chess_char_1_08_a",1,null,0,0,6,1,7992,2615,0,13,1], - ["p1",4,"op","chess_char_3_18_a",2,null,0,0,10,5,39236,2036,0,38,1], + ["p1",4,"op","chess_char_3_18_a",2,null,0,0,10,5,40927,2036,0,38,1], ["p1",5,"op","chess_char_3_19_a",2,null,1978.63,1,7,2,10333,0,0,21,1], ["p1",6,"op","chess_char_3_20_a",1,null,1541.38,1,9,2,682,0,0,8,1], ["p1",7,"op","chess_char_3_21_a",2,null,1875.5,1,11,1,19449,0,0,23,1], - ["p1",8,"op","chess_char_4_02_a",2,null,1963.5,1,4,4,38728,0,0,7,1], + ["p1",8,"op","chess_char_4_02_a",2,null,1963.5,1,4,4,37037,0,0,7,1], ["p1",9,"token","token_10028_vigil_wolf",null,null,852.9,1,8,0,1216,27,0,2,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_1116_liprr":[11,11,0,41,69696],"enemy_1116_liprr_2":[4,4,0,297,34560],"enemy_1118_lidbox_2":[2,2,0,4906,21888]}, - "hooks": [1,28,1502,150,150,266,266,0,19,19,7,4,3,6742,32,17,17,0,1,23,2,0,0], - "events": {"atk":187,"deploy":9,"die":19,"dmg":264,"engage":8,"fx":39,"layer":2,"skill":11,"spawn":28,"status":98}, - "fx": {"aoe":1,"camouflage":1,"counter":3,"displace":17,"dp":2,"garrison":2,"liberate":2,"phase":3,"ripple":4,"sermon":1,"shield":2,"wolfShadow":1}, - "snaps": "a9326071 61ede413 67d5b134 ed466837 32fec6af" + "hooks": [1,28,1502,150,150,266,266,0,19,19,7,4,3,6742,29,17,17,0,1,20,2,0,0], + "events": {"atk":183,"deploy":9,"die":19,"dmg":264,"engage":8,"fx":38,"layer":2,"skill":11,"spawn":28,"status":92}, + "fx": {"aoe":1,"camouflage":1,"counter":3,"displace":16,"dp":2,"garrison":2,"liberate":2,"phase":3,"ripple":4,"sermon":1,"shield":2,"wolfShadow":1}, + "snaps": "a9326071 ba5f4858 674158f2 668d5d48 ab9377c5" }, "bond-soloShip-high": { "about": "独行 high: tier 1 layers 999; chess_char_5_19_b chess_char_1_08_b chess_char_5_13_b chess_char_5_14_b chess_char_5_17_b chess_char_5_12_b chess_char_5_15_b chess_char_5_20_b", @@ -1744,8 +1744,8 @@ "round": 5, "seed": 1009948961, "waveId": "act1autochess_05", - "time": 54.6, - "ticks": 1638, + "time": 54.17, + "ticks": 1625, "reason": "cleared", "killed": 22, "total": 22, @@ -1753,15 +1753,15 @@ "bossHpLeft": null, "rngDraws": 0, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":22,"total":22,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":91008,"bossDmg":0,"heal":38,"deaths":0,"layerGains":{}}}, + "players": {"p1":{"killed":22,"total":22,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":91008,"bossDmg":0,"heal":3,"deaths":0,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_3_16_a",1,null,2390.3,1,8,0,0,0,0,0,0], - ["p1",2,"op","chess_char_3_03_a",1,null,1515.8,1,9,3,14449,0,0,22,0], - ["p1",3,"op","chess_char_3_18_a",2,null,583.3,1,10,7,26209,1084,38,38,2], - ["p1",4,"op","chess_char_1_03_a",1,null,1145.1,1,4,1,3119,0,0,4,1], + ["p1",2,"op","chess_char_3_03_a",1,null,1515.8,1,9,4,13532,0,0,21,0], + ["p1",3,"op","chess_char_3_18_a",2,null,548.01,1,10,5,26735,1084,3,36,2], + ["p1",4,"op","chess_char_1_03_a",1,null,1145.1,1,4,2,2971,0,0,4,1], ["p1",5,"op","chess_char_2_04_a",1,null,1074.7,1,5,0,0,0,0,0,0], - ["p1",6,"op","chess_char_3_14_a",1,null,1376.1,1,11,3,6509,0,0,28,1], - ["p1",7,"op","chess_char_3_17_a",1,null,2470.6,1,12,8,40722,0,0,46,3], + ["p1",6,"op","chess_char_3_14_a",1,null,1376.1,1,11,3,6548,0,0,28,1], + ["p1",7,"op","chess_char_3_17_a",1,null,2470.6,1,12,8,41222,0,0,46,3], ["p1",8,"op","chess_char_3_19_a",2,null,1582.9,1,6,0,0,0,0,0,1], ["p1",9,"token","token_10028_vigil_wolf",null,null,880,1,7,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], @@ -1769,10 +1769,10 @@ ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], "enemies": {"enemy_1166_dusbr":[15,15,0,54,51840],"enemy_1169_duphlx":[5,5,0,0,23040],"enemy_1170_dushld":[2,2,0,1030,16128]}, - "hooks": [1,34,1638,145,145,225,225,14,22,22,8,6,0,6587,37,4,22,0,1,28,0,0,0], - "events": {"atk":181,"deploy":9,"die":22,"dmg":225,"engage":5,"fx":8,"skill":14,"spawn":34,"status":107}, + "hooks": [1,34,1625,142,142,233,233,1,22,22,8,6,0,6560,35,4,22,0,1,26,0,0,0], + "events": {"atk":177,"deploy":9,"die":22,"dmg":233,"engage":5,"fx":8,"skill":14,"spawn":34,"status":102}, "fx": {"camouflage":1,"dp":3,"volley":3,"wolfShadow":1}, - "snaps": "f3cb4a09 d9ee8095 8cf05251 475fb772 f816b385 6d26de1c" + "snaps": "f3cb4a09 ead3ba17 97f1f28e 6f24aae2 b498c568 eb22abcb" }, "bond-yanShip-high": { "about": "炎 high: tier 3 layers 999; chess_char_4_17_b chess_char_6_03_b chess_char_3_03_b chess_char_3_04_b chess_char_1_03_b chess_char_2_04_b chess_char_5_03_b chess_char_5_12_b chess_char_5_23_b", diff --git a/test/golden/matches.json b/test/golden/matches.json index d03ea8ed..a704a16b 100644 --- a/test/golden/matches.json +++ b/test/golden/matches.json @@ -522,8 +522,8 @@ "combat": "client", "boost": null, "setup": {"stageId":"act2autochess_m04","bossId":"boss_3","hiddenBossId":"boss_8","factions":["FLY","TIMES","DOT"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":51,"bossPoolLeft":0,"virtualMs":121400}, - "rng": {"setup":25,"shop":487,"waves":0,"draft":40,"bots":21624,"meta":2}, + "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":49,"bossPoolLeft":0,"virtualMs":121400}, + "rng": {"setup":25,"shop":535,"waves":0,"draft":40,"bots":21598,"meta":11}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ { @@ -564,32 +564,32 @@ { "round": 8, "ai_0": [1,45,13,0,0,4,8,"6c88ecba",62,"arcaneShip 1/6, lateranoShip 1/8, preciShip 0/10, raidShip 1/5, sargonShip 0/10, siracusaShip 1/18, soloShip 1/6, steadShip 0/3, suntShip 1/0, swiftShip 1/19",19,19,0,66], - "ai_1": [1,28,12,0,0,4,8,"f54970b9",27,"arcaneShip 0/2, deputShip 0/3, kazimierzShip 0/4, kjeragShip 1/4, preciShip 0/12, sargonShip 0/10, siracusaShip 0/6, soloShip 1/0, steadShip 1/8, swiftShip 1/10, victoriaShip 0/3, visiShip 1/5",18,19,1,63] + "ai_1": [1,28,12,0,0,4,8,"a7744aff",28,"arcaneShip 0/2, deputShip 0/3, kazimierzShip 0/4, kjeragShip 1/4, preciShip 0/12, sargonShip 0/10, siracusaShip 0/6, soloShip 1/0, steadShip 1/9, swiftShip 1/10, victoriaShip 0/3, visiShip 1/5",17,19,2,63] }, { "round": 9, "ai_0": [1,45,12,0,3,4,8,"c2512400",74,"arcaneShip 1/12, lateranoShip 1/8, preciShip 0/10, raidShip 1/5, sargonShip 0/10, siracusaShip 1/24, soloShip 1/6, steadShip 0/3, suntShip 1/0, swiftShip 1/19",17,20,3,78], - "ai_1": [1,28,12,0,3,4,8,"47bdf5df",38,"arcaneShip 1/16, deputShip 0/3, kazimierzShip 0/4, kjeragShip 1/4, preciShip 0/12, sargonShip 0/10, siracusaShip 0/6, soloShip 1/0, steadShip 1/8, suntShip 1/0, swiftShip 0/10, victoriaShip 0/3, visiShip 1/10",20,20,0,77] + "ai_1": [1,28,12,0,3,4,8,"05d077ca",49,"arcaneShip 1/16, deputShip 0/3, kazimierzShip 0/4, kjeragShip 0/4, preciShip 0/12, sargonShip 0/10, siracusaShip 1/12, soloShip 1/0, steadShip 1/11, suntShip 1/0, swiftShip 0/10, victoriaShip 0/3, visiShip 1/10",20,20,0,77] }, { "round": 10, - "ai_0": [1,45,15,0,0,5,8,"4b7370c2",82,"arcaneShip 1/16, lateranoShip 1/8, preciShip 0/10, raidShip 1/5, sargonShip 0/10, siracusaShip 1/28, soloShip 1/6, steadShip 0/3, suntShip 1/0, swiftShip 1/19, visiShip 1/0",6,8,2,92], - "ai_1": [1,28,15,0,2,5,8,"5066a6c4",54,"arcaneShip 1/20, deputShip 0/3, kazimierzShip 0/4, kjeragShip 0/6, preciShip 0/12, sargonShip 0/10, siracusaShip 1/8, soloShip 1/0, steadShip 1/11, suntShip 1/0, swiftShip 0/10, victoriaShip 0/3, visiShip 1/15",8,8,0,91] + "ai_0": [1,43,15,0,0,5,8,"4b7370c2",82,"arcaneShip 1/16, lateranoShip 1/8, preciShip 0/10, raidShip 1/5, sargonShip 0/10, siracusaShip 1/28, soloShip 1/6, steadShip 0/3, suntShip 1/0, swiftShip 1/19, visiShip 1/0",6,8,2,92], + "ai_1": [1,26,15,0,2,5,8,"e9d17281",73,"arcaneShip 2/30, deputShip 0/3, kazimierzShip 0/8, kjeragShip 0/4, preciShip 0/12, sargonShip 0/10, siracusaShip 1/14, soloShip 1/0, steadShip 0/11, suntShip 1/0, swiftShip 1/14, victoriaShip 0/3, visiShip 1/15",6,8,2,91] }, { "round": 11, - "ai_0": [1,45,12,0,0,5,8,"dcb718bd",113,"arcaneShip 1/24, lateranoShip 1/8, preciShip 0/10, raidShip 1/5, sargonShip 0/10, siracusaShip 1/42, soloShip 1/6, steadShip 1/3, suntShip 1/0, swiftShip 1/25",23,23,0,105], - "ai_1": [1,28,14,0,2,5,8,"e3e0465d",90,"arcaneShip 1/34, deputShip 0/3, kazimierzShip 0/4, kjeragShip 0/6, preciShip 0/12, sargonShip 0/10, siracusaShip 1/14, soloShip 1/0, steadShip 0/11, swiftShip 1/22, victoriaShip 0/3, visiShip 1/20",23,23,0,105] + "ai_0": [1,43,12,0,1,5,8,"fadbd916",105,"arcaneShip 1/24, lateranoShip 1/8, preciShip 0/10, raidShip 1/7, sargonShip 0/10, siracusaShip 1/36, soloShip 1/6, steadShip 1/5, suntShip 1/0, swiftShip 1/19",23,23,0,103], + "ai_1": [1,26,14,0,2,5,8,"4d7ce6c8",93,"arcaneShip 2/46, deputShip 0/3, kazimierzShip 0/8, kjeragShip 0/4, preciShip 0/12, sargonShip 0/10, siracusaShip 1/18, soloShip 1/0, steadShip 0/11, suntShip 1/0, swiftShip 1/14, victoriaShip 0/3, visiShip 1/15",20,23,3,105] }, { "round": 12, - "ai_0": [1,45,12,0,0,6,8,"396b1bd7",113,"arcaneShip 1/24, lateranoShip 1/8, preciShip 0/10, raidShip 1/5, sargonShip 0/10, siracusaShip 1/42, soloShip 1/6, steadShip 1/3, suntShip 1/0, swiftShip 1/25",105,32,0,116], - "ai_1": [1,28,14,0,0,6,8,"27b22698",78,"arcaneShip 1/36, deputShip 0/3, kazimierzShip 0/4, kjeragShip 1/6, preciShip 0/12, sargonShip 0/10, siracusaShip 0/14, soloShip 1/0, steadShip 1/11, suntShip 1/0, swiftShip 0/22, victoriaShip 0/3, visiShip 1/25",95,32,10,118] + "ai_0": [1,43,13,0,2,6,8,"6d080195",123,"arcaneShip 1/28, lateranoShip 1/8, preciShip 0/10, raidShip 1/12, sargonShip 0/10, siracusaShip 1/40, soloShip 1/6, steadShip 1/10, suntShip 1/0, swiftShip 1/19",104,32,1,116], + "ai_1": [1,26,14,0,0,6,8,"b95f0a7a",105,"arcaneShip 2/54, deputShip 0/3, kazimierzShip 0/12, kjeragShip 0/4, preciShip 0/12, sargonShip 0/10, siracusaShip 1/18, soloShip 1/0, steadShip 0/11, suntShip 1/0, swiftShip 1/18, victoriaShip 0/3, visiShip 1/15",105,32,0,118] }, { "round": 13, - "ai_0": [1,35,12,0,0,6,8,"f34ca72b",143,"arcaneShip 1/36, lateranoShip 1/11, preciShip 0/10, raidShip 1/5, sargonShip 0/10, siracusaShip 1/54, soloShip 1/6, steadShip 1/3, suntShip 1/0, swiftShip 1/28, visiShip 1/0",23,34,11,128], - "ai_1": [1,18,12,0,2,6,8,"fed35118",108,"arcaneShip 1/40, deputShip 0/3, kazimierzShip 0/4, kjeragShip 1/6, preciShip 0/12, raidShip 1/21, sargonShip 0/10, siracusaShip 0/14, soloShip 1/0, steadShip 1/11, suntShip 1/0, swiftShip 0/22, victoriaShip 0/3, visiShip 1/30",11,34,23,130] + "ai_0": [1,33,14,0,0,6,8,"980dcd48",163,"arcaneShip 2/40, lateranoShip 1/8, miraShip 1/0, preciShip 0/10, raidShip 1/28, sargonShip 0/10, siracusaShip 1/52, soloShip 1/6, steadShip 1/10, suntShip 1/0, swiftShip 1/19",19,34,15,128], + "ai_1": [1,16,12,0,4,6,8,"0602e500",131,"arcaneShip 2/72, deputShip 0/3, kazimierzShip 0/12, kjeragShip 0/4, preciShip 0/12, raidShip 1/10, sargonShip 0/10, siracusaShip 1/24, soloShip 1/0, steadShip 0/11, suntShip 1/0, swiftShip 0/18, victoriaShip 0/3, visiShip 1/25",23,34,11,130] } ], "players": { @@ -598,28 +598,28 @@ "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 34, + "lp": 33, "bandId": "band_sarkazb", "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":162,"bossDamage":470300,"dmgDealt":3029618,"gold":139,"itemsEquipped":14,"kills":336,"leaks":16,"lpLost":10,"merges":3,"perfectRounds":10,"refreshes":21}, - "lineup": ["1_01_b@11,7","4_02_a@11,8[4_03_e_b]","4_10_b@10,5[3_05_e_a+4_07_e_a]","4_01_a@10,8","3_05_a@9,4[3_11_e_a]","1_08_b@9,5[4_04_e_a+4_02_e_b]","6_04_a@9,7","3_18_a@9,9[4_04_e_b]"], - "bonds": ["arcaneShip 1/48","lateranoShip 1/11","preciShip 0/10","raidShip 0/5","sargonShip 0/10","siracusaShip 1/66","soloShip 1/6","steadShip 1/3","suntShip 1/0","swiftShip 1/28","visiShip 1/0"] + "stats": {"activatedLayers":187,"bossDamage":574046,"dmgDealt":3153026,"gold":141,"itemsEquipped":13,"kills":324,"leaks":21,"lpLost":12,"merges":3,"perfectRounds":9,"refreshes":28}, + "lineup": ["1_01_b@11,7","4_02_a@11,8","4_10_b@10,5[3_06_e_a+5_02_e_b]","4_01_a@10,7","5_07_a@10,8","3_05_a@9,4[3_11_e_a]","1_08_b@9,5[4_04_e_a+4_05_e_a]","3_18_a@9,9[4_04_e_b+4_02_e_a]"], + "bonds": ["arcaneShip 2/52","lateranoShip 1/8","miraShip 1/0","preciShip 0/10","raidShip 1/28","sargonShip 0/10","siracusaShip 1/64","soloShip 1/6","steadShip 1/10","suntShip 1/0","swiftShip 1/19"] }, "ai_1": { "alive": true, "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 17, + "lp": 16, "bandId": "band_dusk", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":131,"bossDamage":947200,"dmgDealt":3352454,"gold":144,"itemsEquipped":18,"kills":300,"leaks":34,"lpLost":10,"merges":2,"perfectRounds":10,"refreshes":22}, - "lineup": ["3_14_a@12,8[2_01_e_a+4_08_e_b]","6_08_a@11,7[4_11_e_a+4_02_e_a]","5_12_a@11,8","4_10_a@10,5[4_09_e_a+1_01_e_a]","5_07_a@10,7[3_11_e_a+4_06_e_a]","4_04_a@10,8[4_04_e_a+2_03_e_a]","5_10_a@9,8","1_08_b@9,9[4_02_e_b+4_10_e_a]"], - "bonds": ["arcaneShip 2/50","deputShip 0/3","kazimierzShip 0/4","kjeragShip 0/6","preciShip 0/12","raidShip 1/26","sargonShip 0/10","siracusaShip 1/20","soloShip 1/0","steadShip 0/11","swiftShip 0/22","victoriaShip 0/3","visiShip 1/35"] + "stats": {"activatedLayers":181,"bossDamage":843454,"dmgDealt":3336088,"gold":146,"itemsEquipped":24,"kills":315,"leaks":18,"lpLost":12,"merges":4,"perfectRounds":9,"refreshes":21}, + "lineup": ["6_16_a@12,8[4_03_e_a+3_07_e_a]","6_11_a@11,7","5_12_a@11,8[6_09_e_a+2_01_e_b]","4_10_a@10,5[4_09_e_a+1_01_e_b]","6_15_a@10,7[2_04_e_b]","4_04_b@10,8[4_04_e_a+4_07_e_a]","5_10_a@9,8","1_08_b@9,9[4_02_e_b]"], + "bonds": ["arcaneShip 2/92","deputShip 0/3","kazimierzShip 0/12","kjeragShip 0/4","maniShip 1/0","preciShip 0/12","raidShip 1/20","sargonShip 0/10","siracusaShip 1/30","soloShip 1/0","steadShip 0/11","suntShip 1/0","swiftShip 0/18","victoriaShip 0/3","visiShip 1/35","yanShip 1/4"] } } }, @@ -1096,35 +1096,35 @@ { "round": 7, "ai_0": [1,28,10,0,0,4,8,"8091958a",45,"arcaneShip 0/4, kazimierzShip 0/8, kjeragShip 0/5, preciShip 2/19, suntShip 1/0, swiftShip 1/26",12,21,9,52], - "ai_1": [1,19,10,0,0,4,8,"6f0ccfc7",36,"arcaneShip 0/2, kazimierzShip 0/7, kjeragShip 0/4, preciShip 0/2, sargonShip 1/19, siracusaShip 0/6, soloShip 1/0, steadShip 2/4, swiftShip 1/13",14,21,7,51], + "ai_1": [1,20,10,0,0,4,8,"6f0ccfc7",36,"arcaneShip 0/2, kazimierzShip 0/7, kjeragShip 0/4, preciShip 0/2, sargonShip 1/19, siracusaShip 0/6, soloShip 1/0, steadShip 2/4, swiftShip 1/13",15,21,6,51], "ai_2": [1,20,10,0,2,4,8,"2e2efaba",82,"arcaneShip 0/2, deputShip 1/23, egirShip 0/4, kazimierzShip 0/2, kjeragShip 0/12, raidShip 0/4, soloShip 1/10, steadShip 2/23, swiftShip 0/4, victoriaShip 1/26, yanShip 0/2",17,21,4,52], "ai_3": [1,8,10,0,0,4,8,"34745c3a",14,"arcaneShip 0/2, preciShip 0/2, sargonShip 0/4, siracusaShip 1/3, soloShip 1/11, steadShip 1/0",5,21,16,49] }, { "round": 8, "ai_0": [1,26,11,0,0,4,8,"c8fd6622",73,"arcaneShip 1/4, kazimierzShip 0/8, kjeragShip 1/12, preciShip 2/24, skillfulShip 0/5, suntShip 1/0, swiftShip 1/33",7,9,2,63], - "ai_1": [1,11,11,0,0,4,8,"9a145335",54,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 0/7, kjeragShip 1/11, preciShip 0/2, sargonShip 1/26, siracusaShip 0/6, skillfulShip 1/7, soloShip 1/2, steadShip 1/6, swiftShip 0/13",1,9,8,60], + "ai_1": [1,12,11,0,0,4,8,"9a145335",54,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 0/7, kjeragShip 1/11, preciShip 0/2, sargonShip 1/26, siracusaShip 0/6, skillfulShip 1/7, soloShip 1/2, steadShip 1/6, swiftShip 0/13",1,9,8,60], "ai_2": [1,19,13,0,0,4,8,"b6617ece",118,"arcaneShip 1/8, deputShip 1/27, egirShip 0/6, kazimierzShip 0/2, kjeragShip 0/14, lateranoShip 0/2, raidShip 0/6, soloShip 1/12, steadShip 1/33, suntShip 1/2, swiftShip 0/4, victoriaShip 1/36, yanShip 0/10",8,9,1,66], "ai_3": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",0,9,9,59] }, { "round": 9, "ai_0": [1,26,12,0,2,4,8,"2ff9d045",108,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/19, preciShip 2/33, skillfulShip 1/10, suntShip 1/0, swiftShip 1/38",9,19,10,74], - "ai_1": [1,10,12,0,0,4,8,"08726f68",90,"arcaneShip 0/2, deputShip 2/6, kazimierzShip 0/7, kjeragShip 1/15, preciShip 0/2, sargonShip 1/48, siracusaShip 0/6, skillfulShip 1/11, soloShip 0/2, steadShip 1/10, swiftShip 0/13",14,19,5,72], + "ai_1": [1,11,12,0,0,4,8,"08726f68",90,"arcaneShip 0/2, deputShip 2/6, kazimierzShip 0/7, kjeragShip 1/15, preciShip 0/2, sargonShip 1/48, siracusaShip 0/6, skillfulShip 1/11, soloShip 0/2, steadShip 1/10, swiftShip 0/13",14,19,5,72], "ai_2": [1,19,12,0,1,4,8,"820dc650",123,"arcaneShip 1/12, deputShip 0/27, egirShip 0/8, indomShip 1/12, kazimierzShip 0/2, kjeragShip 0/20, lateranoShip 0/4, raidShip 0/6, soloShip 1/12, steadShip 1/45, suntShip 1/2, swiftShip 0/4, victoriaShip 1/40, yanShip 0/10",19,19,0,78], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] }, { "round": 10, "ai_0": [1,26,14,0,0,5,8,"9a50fda6",139,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/30, preciShip 2/38, skillfulShip 1/20, suntShip 1/0, swiftShip 1/43",25,25,0,88], - "ai_1": [1,10,12,0,0,5,8,"07d01884",128,"arcaneShip 0/2, deputShip 2/10, kazimierzShip 0/7, kjeragShip 1/19, preciShip 0/2, sargonShip 1/70, siracusaShip 0/6, skillfulShip 1/15, soloShip 0/2, steadShip 1/14, swiftShip 0/13",25,25,0,83], + "ai_1": [1,11,12,0,0,5,8,"07d01884",128,"arcaneShip 0/2, deputShip 2/10, kazimierzShip 0/7, kjeragShip 1/19, preciShip 0/2, sargonShip 1/70, siracusaShip 0/6, skillfulShip 1/15, soloShip 0/2, steadShip 1/14, swiftShip 0/13",25,25,0,83], "ai_2": [1,19,13,0,0,5,8,"27c37702",162,"arcaneShip 0/12, deputShip 0/29, egirShip 0/8, indomShip 1/27, investShip 0/2, kazimierzShip 0/2, kjeragShip 1/22, lateranoShip 0/4, raidShip 0/6, soloShip 1/14, steadShip 1/53, suntShip 1/2, swiftShip 0/6, victoriaShip 1/44, yanShip 0/10",25,25,0,90], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] }, { "round": 11, "ai_0": [1,26,12,0,0,5,8,"3fb16be0",147,"arcaneShip 2/14, kazimierzShip 0/8, kjeragShip 1/42, preciShip 2/43, skillfulShip 0/20, suntShip 1/0, swiftShip 1/48",24,24,0,102], - "ai_1": [1,7,12,0,0,5,8,"0f9e40f0",166,"arcaneShip 0/2, deputShip 2/14, kazimierzShip 0/7, kjeragShip 1/23, preciShip 0/2, sargonShip 1/92, siracusaShip 0/6, skillfulShip 1/19, soloShip 0/2, steadShip 1/18, swiftShip 0/13",20,24,4,93], + "ai_1": [1,8,12,0,0,5,8,"0f9e40f0",166,"arcaneShip 0/2, deputShip 2/14, kazimierzShip 0/7, kjeragShip 1/23, preciShip 0/2, sargonShip 1/92, siracusaShip 0/6, skillfulShip 1/19, soloShip 0/2, steadShip 1/18, swiftShip 0/13",20,24,4,93], "ai_2": [1,18,12,0,0,5,8,"170da7d8",171,"arcaneShip 2/20, deputShip 0/31, egirShip 0/8, indomShip 0/27, investShip 0/4, kazimierzShip 0/2, kjeragShip 1/26, lateranoShip 0/6, raidShip 0/6, soloShip 1/14, steadShip 1/59, suntShip 1/2, swiftShip 0/8, victoriaShip 1/50, yanShip 0/10",23,24,1,101], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] }, @@ -1168,7 +1168,7 @@ "title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"}, "trophies": 2, "reward": 255, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4098745,"gold":104,"itemsEquipped":10,"kills":163,"leaks":59,"lpLost":29,"merges":0,"perfectRounds":7,"refreshes":19}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4099645,"gold":104,"itemsEquipped":10,"kills":164,"leaks":58,"lpLost":28,"merges":0,"perfectRounds":7,"refreshes":19}, "lineup": [], "bonds": ["arcaneShip 0/4","deputShip 0/18","kazimierzShip 0/7","kjeragShip 0/27","preciShip 0/4","sargonShip 0/105","siracusaShip 0/6","skillfulShip 0/23","soloShip 0/2","steadShip 0/22","swiftShip 0/13"] }, @@ -1868,7 +1868,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act2autochess_m03","bossId":"boss_4","hiddenBossId":"boss_9","factions":["FLY","TIMES","REFLECTION"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":30,"bossPoolLeft":0,"virtualMs":122900}, + "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":31,"bossPoolLeft":0,"virtualMs":122900}, "rng": {"setup":25,"shop":690,"waves":0,"draft":40,"bots":19229,"meta":10}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -1927,7 +1927,7 @@ { "round": 13, "h_0": [1,25,12,0,0,6,8,"d867f422",194,"deputShip 1/26, indomShip 1/30, investShip 0/8, kazimierzShip 0/2, kjeragShip 0/8, preciShip 2/19, skillfulShip 1/20, soloShip 0/20, steadShip 0/76, swiftShip 1/66, victoriaShip 1/25, visiShip 1/8",33,43,10,121], - "ai_0": [1,7,18,0,0,6,8,"4b1d99d4",368,"deputShip 1/52, emptyShip 0/6, investShip 0/8, kazimierzShip 0/8, kjeragShip 1/35, miraShip 1/2, raidShip 1/21, siracusaShip 1/120, soloShip 0/24, suntShip 1/6, swiftShip 1/83, visiShip 1/49, yanShip 0/1",20,43,23,133] + "ai_0": [1,7,18,0,0,6,8,"95334040",371,"deputShip 1/52, emptyShip 0/6, investShip 0/8, kazimierzShip 0/8, kjeragShip 1/38, miraShip 1/2, raidShip 1/21, siracusaShip 1/120, soloShip 0/24, suntShip 1/6, swiftShip 1/83, visiShip 1/49, yanShip 0/1",20,43,23,133] } ], "players": { @@ -1936,12 +1936,12 @@ "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 23, + "lp": 24, "bandId": "band_sarkazb", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":240,"bossDamage":712550,"dmgDealt":4190550,"gold":132,"itemsEquipped":22,"kills":294,"leaks":26,"lpLost":20,"merges":1,"perfectRounds":10,"refreshes":42}, + "stats": {"activatedLayers":240,"bossDamage":806551,"dmgDealt":4310123,"gold":132,"itemsEquipped":22,"kills":295,"leaks":26,"lpLost":20,"merges":1,"perfectRounds":10,"refreshes":42}, "lineup": ["4_21_a@12,7","4_14_b@12,8[2_01_e_a+3_02_e_a]","1_06_a@11,6[3_11_e_a+2_01_e_b]","6_11_a@11,7","6_12_a@11,8[3_05_e_b+3_01_e_b]","6_05_a@10,5[3_06_e_b+4_07_e_a]","4_07_a@10,8[5_01_e_b+6_09_e_a]","5_06_a@9,9[4_08_e_b+3_09_e_a]"], "bonds": ["deputShip 1/28","indomShip 1/35","investShip 0/8","kazimierzShip 0/2","kjeragShip 0/8","maniShip 1/2","preciShip 2/31","skillfulShip 1/22","soloShip 0/20","steadShip 0/76","swiftShip 1/78","victoriaShip 1/31","visiShip 1/13"] }, @@ -1955,9 +1955,9 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":402,"bossDamage":704950,"dmgDealt":3520238,"gold":145,"itemsEquipped":12,"kills":222,"leaks":55,"lpLost":20,"merges":3,"perfectRounds":7,"refreshes":29}, + "stats": {"activatedLayers":405,"bossDamage":610949,"dmgDealt":3351434,"gold":145,"itemsEquipped":12,"kills":222,"leaks":55,"lpLost":20,"merges":3,"perfectRounds":7,"refreshes":29}, "lineup": ["2_14_b@12,7","3_20_a@12,8","3_14_a@11,7","5_10_a@11,8","6_19_a@10,6[4_04_e_a]","4_04_a@10,7","3_18_b@10,8[3_04_e_b+5_02_e_a]","4_16_a@9,9[4_05_e_a+4_11_e_a]"], - "bonds": ["deputShip 1/54","emptyShip 1/8","investShip 0/8","kazimierzShip 0/8","kjeragShip 1/37","miraShip 0/2","raidShip 1/28","siracusaShip 1/126","soloShip 0/24","suntShip 1/8","swiftShip 1/85","visiShip 1/56","yanShip 0/1"] + "bonds": ["deputShip 1/54","emptyShip 1/8","investShip 0/8","kazimierzShip 0/8","kjeragShip 1/40","miraShip 0/2","raidShip 1/28","siracusaShip 1/126","soloShip 0/24","suntShip 1/8","swiftShip 1/85","visiShip 1/56","yanShip 0/1"] } }, "diy": { diff --git a/test/golden/roster.json b/test/golden/roster.json index c05a0ec6..35edc419 100644 --- a/test/golden/roster.json +++ b/test/golden/roster.json @@ -384,56 +384,56 @@ "time": 140, "ticks": 4200, "reason": "timeout", - "killed": 139, + "killed": 145, "total": 71, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 64, + "rngDraws": 61, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":139,"total":71,"perfect":false,"leaks":44,"leaksUncounted":1,"coins":6,"dmg":239871,"bossDmg":0,"heal":1028,"deaths":9,"layerGains":{}}}, + "players": {"p1":{"killed":145,"total":71,"perfect":false,"leaks":41,"leaksUncounted":1,"coins":6,"dmg":247377,"bossDmg":0,"heal":1028,"deaths":10,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_3_12_a",2,null,2567.4,1,205,6,2610,2567,364,12,1], - ["p1",2,"op","chess_char_3_16_a",1,null,0,0,6,2,5774,3419,664,18,1], - ["p1",3,"op","chess_char_3_18_a",2,null,1629.1,1,209,8,13367,3258,0,31,1], - ["p1",4,"op","chess_char_3_08_a",1,null,1519.4,1,4,17,16401,234,0,18,2], - ["p1",5,"op","chess_char_3_09_a",1,null,1004.34,1,7,17,22163,389,0,64,2], - ["p1",6,"op","chess_char_3_10_a",1,null,267.96,1,10,22,24180,1547,0,40,3], - ["p1",7,"op","chess_char_3_11_a",1,null,1447.6,1,208,10,10520,1448,0,18,3], - ["p1",8,"op","chess_char_3_13_a",1,null,1170.4,1,200,3,5679,1170,0,21,9], - ["p1",9,"op","chess_char_3_14_a",1,null,59.11,1,5,16,22081,1317,0,57,2], - ["p1",10,"op","chess_char_3_17_a",1,null,0,0,8,10,60765,2471,0,79,4], - ["p1",11,"op","chess_char_3_19_a",2,null,900.9,1,164,16,35379,2265,0,97,2], - ["p1",12,"op","chess_char_3_20_a",1,null,1233.1,1,204,3,5976,1233,0,38,1], - ["p1",13,"token","token_10028_vigil_wolf",null,null,1.96,0,110,3,2852,1877,0,14,null], + ["p1",1,"op","chess_char_3_12_a",2,null,2567.4,1,207,0,3677,2567,353,11,1], + ["p1",2,"op","chess_char_3_16_a",1,null,0,0,6,2,5588,3419,675,19,1], + ["p1",3,"op","chess_char_3_18_a",2,null,1629.1,1,212,15,14973,3258,0,31,1], + ["p1",4,"op","chess_char_3_08_a",1,null,1519.4,1,4,16,22610,234,0,18,2], + ["p1",5,"op","chess_char_3_09_a",1,null,1004.34,1,7,17,22708,389,0,61,2], + ["p1",6,"op","chess_char_3_10_a",1,null,0,0,10,21,21857,1815,0,36,2], + ["p1",7,"op","chess_char_3_11_a",1,null,1447.6,1,211,10,10520,1448,0,18,3], + ["p1",8,"op","chess_char_3_13_a",1,null,1170.4,1,201,3,5697,1170,0,21,9], + ["p1",9,"op","chess_char_3_14_a",1,null,59.11,1,5,24,21888,1317,0,55,2], + ["p1",10,"op","chess_char_3_17_a",1,null,0,0,8,14,61687,2471,0,83,5], + ["p1",11,"op","chess_char_3_19_a",2,null,900.9,1,162,16,38143,2265,0,97,2], + ["p1",12,"op","chess_char_3_20_a",1,null,1233.1,1,208,3,6055,1233,0,39,1], + ["p1",13,"token","token_10028_vigil_wolf",null,null,149.52,0,110,0,2738,1729,0,11,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], - ["p1","~1","token","token_10028_vigil_wolf",null,null,880,1,165,6,12123,1550,0,28,null] + ["p1","~1","token","token_10028_vigil_wolf",null,null,405.92,1,163,4,9234,2143,0,28,null] ], "enemies": { "enemy_10029_vtshld": [1,0,0,0,0], "enemy_10073_mpcar": [1,1,0,0,2304], - "enemy_10127_rkmbst_2": [1,1,0,4090,31680], - "enemy_1045_hammer": [1,0,1,283,5668], - "enemy_1121_lifbos_2": [1,0,1,1126,4805], - "enemy_1172_dugago": [1,0,1,266,7005], - "enemy_1195_sfyin": [36,33,3,640,80191], - "enemy_1195_sfyin_2": [15,9,6,1334,44374], - "enemy_1196_msfyin": [66,58,8,0,121], - "enemy_1196_msfyin_2": [18,8,10,0,35], - "enemy_1197_sfshu": [9,8,1,736,24436], - "enemy_1198_msfshu": [24,18,6,0,58], + "enemy_10127_rkmbst_2": [1,1,0,4010,31680], + "enemy_1045_hammer": [1,0,1,459,7964], + "enemy_1121_lifbos_2": [1,0,1,1126,5398], + "enemy_1172_dugago": [1,0,1,266,7442], + "enemy_1195_sfyin": [36,33,3,505,79752], + "enemy_1195_sfyin_2": [15,12,3,2360,47819], + "enemy_1196_msfyin": [66,60,6,0,125], + "enemy_1196_msfyin_2": [24,12,12,0,45], + "enemy_1197_sfshu": [9,7,2,409,23009], + "enemy_1198_msfshu": [21,15,6,0,47], "enemy_1203_sfhu": [1,1,0,4220,7488], "enemy_1204_msfhu": [4,0,4,0,4], - "enemy_1252_lysytb_2": [1,0,1,1965,3893], + "enemy_1252_lysytb_2": [1,1,0,1645,10368], "enemy_1305_mhslim": [1,1,0,223,1382], "enemy_1407_hummbd": [1,1,0,140,5184], - "enemy_1512_mcmstr": [1,0,1,8998,20801], - "enemy_2021_syfish": [1,0,1,0,442] + "enemy_1512_mcmstr": [1,0,1,9371,16497], + "enemy_2021_syfish": [1,0,1,0,868] }, - "hooks": [1,208,4200,695,695,959,964,418,149,194,31,30,0,21272,20,45,184,44,1,158,0,0,0], - "events": {"atk":848,"bounty":3,"deploy":22,"die":150,"dmg":953,"engage":14,"fx":128,"heal":1,"leak":44,"skill":61,"spawn":200,"status":71}, - "fx": {"aoe":2,"camouflage":1,"displace":15,"dp":2,"explode":20,"expose":1,"phase":1,"pull":15,"revive":2,"sp":1,"strike":3,"summon":53,"volley":7,"wolfShadow":2,"wolfShadowLost":3}, - "snaps": "17399d51 bc366431 6d1caf23 214021b0 fc9ea9d8 690dd6a1 82c58709 9d0b4556 1d498d33 3e16098f 5925a25e 4540e18b 3fc289e7 efffdf3b" + "hooks": [1,211,4200,677,677,976,981,425,156,198,31,30,0,20874,14,45,187,41,1,169,0,0,0], + "events": {"atk":837,"bounty":3,"deploy":22,"die":157,"dmg":970,"engage":14,"fx":138,"heal":1,"leak":41,"skill":61,"spawn":203,"status":63}, + "fx": {"aoe":2,"camouflage":1,"displace":19,"dp":2,"explode":19,"expose":1,"phase":1,"pull":19,"revive":2,"sp":1,"strike":3,"summon":55,"volley":8,"wolfShadow":2,"wolfShadowLost":3}, + "snaps": "17399d51 bc366431 21fe510b f839da24 d1fe4d4c c4152be4 8d5ba672 753767a2 28635406 698c23c9 f112a1ff 42bc52f5 fe7d0a4b b52a36c1" }, "roster-008": { "about": "pass 0 band 4: chess_char_3_06_b chess_char_3_12_b chess_char_3_02_b chess_char_3_03_b chess_char_3_04_b chess_char_3_05_b chess_char_3_21_a chess_char_3_01_b chess_char_3_08_b chess_char_3_09_b chess_char_3_10_b chess_char_3_11_b", @@ -539,14 +539,14 @@ "units": [ ["p1",1,"op","chess_char_3_16_b",1,"uniequip_002_snakek",5899.3,1,3,0,0,0,0,0,0], ["p1",2,"op","chess_char_4_01_a",2,null,5020.11,1,6,0,0,0,0,0,0], - ["p1",3,"op","chess_char_3_18_b",2,"uniequip_002_vulpis",3844.06,1,8,0,3,0,0,2,1], + ["p1",3,"op","chess_char_3_18_b",2,"uniequip_002_vulpis",3844.06,1,8,1,4,0,0,2,1], ["p1",4,"op","chess_char_4_04_a",1,null,2831.68,1,12,8,25880,518,0,125,4], ["p1",5,"op","chess_char_3_13_b",1,"uniequip_002_malist",2616.63,1,9,22,11643,0,0,69,32], ["p1",6,"op","chess_char_3_14_b",1,"uniequip_002_slbell",3073.35,1,10,7,3115,0,0,37,3], ["p1",7,"op","chess_char_3_17_b",1,"uniequip_002_shotst",4154.31,1,14,18,30514,1359,0,58,9], ["p1",8,"op","chess_char_3_19_b",2,"uniequip_002_vigil",3421.59,1,4,0,1,0,0,1,4], ["p1",9,"op","chess_char_3_20_b",1,"uniequip_002_kjera",2759.35,1,7,0,2,0,0,1,1], - ["p1",10,"op","chess_char_3_21_b",2,"uniequip_002_archet",3025.77,1,11,82,136301,0,0,188,5], + ["p1",10,"op","chess_char_3_21_b",2,"uniequip_002_archet",3025.77,1,11,81,136300,0,0,188,5], ["p1",11,"op","chess_char_4_02_a",2,null,2717.48,1,166,16,58984,2717,0,36,1], ["p1",12,"op","chess_char_4_06_a",1,null,2371.14,1,13,18,12337,0,0,75,2], ["p1",13,"token","token_10028_vigil_wolf",null,null,1026,1,5,0,839,1920,0,6,null], @@ -573,10 +573,10 @@ "enemy_1513_dekght_2": [1,1,0,5803,43200], "enemy_2034_sythef": [1,1,0,0,8640] }, - "hooks": [1,187,4616,606,606,1080,1064,0,172,172,62,60,0,20682,91,5,171,0,1,174,0,0,0], - "events": {"atk":733,"bounty":6,"deploy":14,"die":172,"dmg":1064,"engage":11,"fx":164,"skill":122,"spawn":186,"status":205}, - "fx": {"crit":24,"displace":23,"dp":4,"explode":3,"phase":1,"ripple":8,"shadowWeave":26,"shield":2,"stealth":4,"summon":51,"telegraph":3,"volley":9,"wolfShadow":3,"wolfShadowLost":2,"zone":1}, - "snaps": "01350beb 8f7744b2 43f13b56 f68a04e7 1d0741e4 7c08a4ae 9834f8a4 8799cf88 a348e60f ddf80120 61a93dd9 82dbcbf0 375b88cd 76e6861d 9d5ac76a 9849b6c7" + "hooks": [1,187,4616,606,606,1080,1064,0,172,172,62,60,0,20682,90,5,171,0,1,174,0,0,0], + "events": {"atk":733,"bounty":6,"deploy":14,"die":172,"dmg":1064,"engage":11,"fx":165,"skill":122,"spawn":186,"status":205}, + "fx": {"camouflage":1,"crit":24,"displace":23,"dp":4,"explode":3,"phase":1,"ripple":8,"shadowWeave":26,"shield":2,"stealth":4,"summon":51,"telegraph":3,"volley":9,"wolfShadow":3,"wolfShadowLost":2,"zone":1}, + "snaps": "01350beb 8f7744b2 43f13b56 f68a04e7 1d0741e4 7c08a4ae 9834f8a4 8799cf88 a348e60f ddf80120 3446f99a 80b90afd 38f6a8b2 8aa08e8e c1ed526b a0c06d83" }, "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_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", @@ -1630,13 +1630,13 @@ "bossHpLeft": null, "rngDraws": 179, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":19,"total":71,"perfect":false,"leaks":54,"leaksUncounted":0,"coins":6,"dmg":212430,"bossDmg":0,"heal":2065,"deaths":22,"layerGains":{}}}, + "players": {"p1":{"killed":19,"total":71,"perfect":false,"leaks":54,"leaksUncounted":0,"coins":6,"dmg":212914,"bossDmg":0,"heal":2065,"deaths":22,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_3_12_a",0,null,0,0,99,2,9831,6171,2065,21,4], ["p1",2,"op","chess_char_3_16_a",0,null,0,0,101,0,4246,4781,0,15,1], - ["p1",3,"op","chess_char_3_18_a",0,null,0,0,100,3,15944,3258,0,11,7], + ["p1",3,"op","chess_char_3_18_a",0,null,0,0,100,3,16505,3258,0,11,7], ["p1",4,"op","chess_char_3_08_a",0,null,0,0,4,3,27227,1753,0,8,1], - ["p1",5,"op","chess_char_3_09_a",0,null,1393.7,1,103,1,16928,1394,0,24,3], + ["p1",5,"op","chess_char_3_09_a",0,null,1393.7,1,103,2,16851,1394,0,24,3], ["p1",6,"op","chess_char_3_10_a",0,null,0,0,89,1,36230,3630,0,22,5], ["p1",7,"op","chess_char_3_11_a",0,null,0,0,7,1,12325,1448,0,6,1], ["p1",8,"op","chess_char_3_13_a",0,null,0,0,53,0,3936,5199,0,23,1], @@ -1653,7 +1653,7 @@ "enemies": { "enemy_10042_prtrop": [12,0,12,7101,28836], "enemy_10042_prtrop_2": [12,0,10,6218,18414], - "enemy_10043_sailor": [39,12,27,20980,197254], + "enemy_10043_sailor": [39,12,27,20980,197629], "enemy_1005_yokai_2": [1,1,0,68,2678], "enemy_10156_mncrer": [1,1,0,140,6912], "enemy_1116_liprr_2": [1,1,0,247,12960], @@ -1664,10 +1664,10 @@ "enemy_1513_dekght_2": [1,0,1,3692,1400], "enemy_9010_acpupp": [1,0,1,0,1540] }, - "hooks": [1,102,4200,412,412,1525,1585,10,42,95,33,33,0,10321,22,47,73,52,1,46,0,0,0], - "events": {"atk":478,"bounty":3,"deploy":26,"die":43,"dmg":1585,"engage":14,"fx":26,"heal":10,"leak":52,"skill":66,"spawn":90,"status":54}, + "hooks": [1,102,4200,412,412,1527,1586,10,42,95,33,33,0,10321,22,47,73,52,1,46,0,0,0], + "events": {"atk":478,"bounty":3,"deploy":26,"die":43,"dmg":1586,"engage":14,"fx":26,"heal":10,"leak":52,"skill":66,"spawn":90,"status":54}, "fx": {"dp":7,"explode":3,"revive":4,"sp":4,"strike":1,"summon":2,"telegraph":2,"wolfShadow":1,"wolfShadowLost":2}, - "snaps": "226d72ef 4944a14f b2954de1 522e52cb dd46cce1 b1febb8b ac7e7cf4 bb6af571 080c3ba3 fc1505bd c0528264 4a64f7c2 beffba7c a423b42e" + "snaps": "226d72ef 4944a14f b2954de1 522e52cb a93fc3b9 074f1209 ce4e1ade 44124797 0fc18c09 2d9940bf 4d8876e6 9f3a7acb ff692f0f 46a3724f" }, "roster-027": { "about": "pass 1 band 4: chess_char_3_06_b chess_char_3_12_b chess_char_3_02_b chess_char_3_03_b chess_char_3_04_b chess_char_3_05_b chess_char_3_21_a chess_char_3_01_b chess_char_3_08_b chess_char_3_09_b chess_char_3_10_b chess_char_3_11_b", @@ -2398,7 +2398,7 @@ "total": 52, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 17, + "rngDraws": 27, "errors": {"count":0,"kinds":[]}, "players": { "p1": { @@ -2408,45 +2408,45 @@ "leaks": 5, "leaksUncounted": 1, "coins": 6, - "dmg": 444073, + "dmg": 443923, "bossDmg": 0, - "heal": 8216, + "heal": 8296, "deaths": 1, - "layerGains": {"miraShip":2,"raidShip":26} + "layerGains": {"miraShip":2,"raidShip":29} } }, "units": [ - ["p1",1,"op","chess_char_3_12_a",1,null,4903.73,1,29,6,52361,2635,2636,216,8], - ["p1",2,"op","chess_char_3_12_b",1,"none",6168.54,1,31,10,75999,577,577,149,5], - ["p1",3,"op","chess_char_3_18_a",1,null,1629.1,1,10,0,5729,0,0,0,7], - ["p1",4,"op","chess_char_3_18_b",1,"none",2029.5,1,60,6,91821,3397,1367,140,9], - ["p1",5,"op","chess_char_3_04_a",2,null,2050.4,1,71,3,15129,17,17,46,2], - ["p1",6,"op","chess_char_3_05_a",1,null,6463.6,1,11,1,27031,3439,3439,71,1], - ["p1",7,"op","chess_char_3_04_b",2,"uniequip_004_swire2",2924.78,1,72,5,41623,169,167,36,2], - ["p1",8,"op","chess_char_3_05_b",1,"none",7464.85,1,34,3,31444,13,13,22,2], - ["p1",9,"op","chess_char_3_01_a",1,null,1663.13,1,1,2,7098,0,0,14,2], - ["p1",10,"op","chess_char_3_19_a",1,null,1582.9,1,4,2,31143,0,0,94,1], - ["p1",11,"op","chess_char_3_21_a",1,null,1500.4,1,7,8,54590,0,0,168,17], - ["p1",12,"op","chess_char_3_01_b",1,"none",2162.16,1,2,1,10104,0,0,14,2], - ["p1",13,"token","token_10028_vigil_wolf",null,null,880,1,5,0,0,0,0,0,null] + ["p1",1,"op","chess_char_3_12_a",1,null,4874.88,1,29,3,21916,1725,1619,200,7], + ["p1",2,"op","chess_char_3_12_b",1,"none",6265.42,1,31,8,72759,988,988,146,6], + ["p1",3,"op","chess_char_3_18_a",1,null,1629.1,1,10,0,10418,0,0,0,7], + ["p1",4,"op","chess_char_3_18_b",1,"none",1893.1,1,64,11,105467,3102,936,134,9], + ["p1",5,"op","chess_char_3_04_a",2,null,2050.4,1,73,6,30594,0,0,68,3], + ["p1",6,"op","chess_char_3_05_a",1,null,6463.6,1,11,2,24240,4322,4322,80,1], + ["p1",7,"op","chess_char_3_04_b",2,"uniequip_004_swire2",2924.78,1,74,4,30535,119,119,28,1], + ["p1",8,"op","chess_char_3_05_b",1,"none",7582.1,1,66,4,31574,312,312,22,3], + ["p1",9,"op","chess_char_3_01_a",1,null,1663.13,1,1,0,2435,0,0,48,1], + ["p1",10,"op","chess_char_3_19_a",1,null,1582.9,1,4,2,38123,0,0,111,3], + ["p1",11,"op","chess_char_3_21_a",1,null,1500.4,1,7,5,63343,0,0,183,18], + ["p1",12,"op","chess_char_3_01_b",1,"none",2162.16,1,2,2,12194,0,0,48,2], + ["p1",13,"token","token_10028_vigil_wolf",null,null,880,1,5,0,324,0,0,6,null] ], "enemies": { "enemy_10030_vtwand": [1,0,0,0,0], - "enemy_1010_demon": [1,1,0,1307,8100], - "enemy_1061_zomshd": [1,1,0,824,19217], - "enemy_1169_duphlx": [1,1,0,13,4320], + "enemy_1010_demon": [1,1,0,713,8100], + "enemy_1061_zomshd": [1,1,0,1213,18560], + "enemy_1169_duphlx": [1,1,0,0,4320], "enemy_1208_msfji_2": [1,1,0,0,32], "enemy_1302_ymtro_2": [1,1,0,0,32400], - "enemy_1381_winman": [21,21,0,711,131544], - "enemy_1381_winman_2": [12,12,0,511,101088], - "enemy_1387_winshd": [12,7,0,5457,124476], - "enemy_1438_dspred": [1,1,0,1386,14256], - "enemy_2034_sythef": [1,1,0,38,8640] + "enemy_1381_winman": [21,21,0,864,131544], + "enemy_1381_winman_2": [12,12,0,460,101088], + "enemy_1387_winshd": [12,7,0,6309,124983], + "enemy_1438_dspred": [1,1,0,958,14256], + "enemy_2034_sythef": [1,1,0,51,8640] }, - "hooks": [1,74,5100,1179,1179,1561,1561,2461,48,55,58,58,0,15108,82,78,53,0,1,53,7,0,0], - "events": {"atk":1179,"bounty":3,"deploy":21,"die":55,"dmg":1561,"engage":11,"fx":113,"heal":8,"layer":7,"skill":116,"spawn":66,"status":133}, - "fx": {"aoe":28,"blink":3,"bondMilestone":1,"buff":3,"coin":33,"displace":2,"dp":17,"garrison":7,"shield":1,"volley":17,"wolfShadow":1}, - "snaps": "9cb798d2 b852ba52 fb7b86e9 fd6bd137 d07787a9 1916d241 97989bd1 a2b670bd 2418243d 016fa0f7 b9159b06 b7617675 b474b79b 1892bc12 94e6e90d 7e618143 0045b497" + "hooks": [1,75,5100,1284,1284,1748,1748,2225,48,56,61,61,0,14193,87,86,53,0,1,54,9,0,0], + "events": {"atk":1284,"bounty":3,"deploy":22,"die":56,"dmg":1748,"engage":12,"fx":123,"heal":6,"layer":9,"skill":122,"spawn":66,"status":143}, + "fx": {"aoe":28,"blink":4,"bondMilestone":1,"buff":5,"coin":35,"displace":2,"dp":19,"garrison":9,"shield":1,"volley":18,"wolfShadow":1}, + "snaps": "c7a49802 0faddf59 8e107d4b dd8e4fed 6fd98184 f15f4b11 7b967031 68468258 674b5d7f 6109fb91 bfaff06c 1b0fe3bd 3276a8fc a83e0316 f9919085 d6e610b6 d621b20b" }, "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_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",