diff --git a/docs/SIM.md b/docs/SIM.md index 41662235..d1521bf7 100644 --- a/docs/SIM.md +++ b/docs/SIM.md @@ -826,6 +826,7 @@ or guard with a per-unit flag while dealing it. When the guard trips, the logged | `addLayers(playerId, bondId, n, reason, {source})`, `addCoins(playerId, n)` | layers are a no-op when `flags.layerGainsEnabled` is false (unite/boss); a gain adds at most the room left under `BOND_LAYER_CAP` (999, shared/constants.js `layerGainRoom`: the client's `AddBondCount` min(L + n, 999)) on the live copy — or, without one, on the battle's own gains — and returns what it added (0 at the cap: no hook, no event) | | `getPlayer(playerId)` | `{ playerId, seat, side, colOffset, mirror, dir (default unit direction: RIGHT, mirrored side LEFT), facing (its sign), bonds (live copy, layers updated by addLayers), bandId, playerEffects, lpForBoss, dp, units }` | | `mapTile(ps, row, col, abs?)` / `mapDir(ps, dir, abs?)` | board → field tile / direction of a player (the FA right-side mirror) | +| `onOwnBoard(ps, r, c)` | whether a field tile lies on the player's own board — GEO.FIELD (rows 9–12, cols 2–10) mapped onto this field: the 联防 right-hand helper's +8 columns, the boss field's rows 2–5 (never its hand / 临时整备区 rows 0–1), the mirrored right half; the 突袭 landing takes only such tiles (DESIGN §25.18) | | `addDp(playerId, n)`, `retreat(unit, {reason, permanent, dying})`, `relocate(unit, r, c)` | `relocate` only changes the tile (state kept, no event) | | `moveRedeploy(unit, r, c, { clearSp })` | a 【移动】 (PRTS 术语释义: "不退场,以当前血量在目标位置部署", a special retreat + redeploy): `relocate`'s checks (false = refused, nothing changed), then a new deployment (`deploySeq` / `aggroSeq` / `deployedAt`) and `deploy {initial:false, move:true}` (deploy effects fire again); no `die` / `death`, timer or cost (不屈 / 阿戈尔's revive never see it); HP, buffs and a running skill are kept (owner's deviation, DESIGN §22.3); `clearSp` empties the SP before the deploy handlers run — 乌尔比安 S3's move (kits/ops/chess_char_5_05-ulpia.js) and 【返回】 (`clearSp`; also the 从不混淆的方向 fallback, content/tokens.js) | | `redeploy(unit, { free=true, tile, keepSp })` | immediate (re)deployment of a dead/retreated ally (full HP, `deploy {initial:false}`); `free: false` pays `base.cost` DP (refused without it); without `tile` it lands on the unit's rest tile (`restTile`: where a knocked-out operator lies, else home); `tile: [r, c]` lands on that tile once (home unchanged; refused when off-rect, occupied or a knocked-out operator's tile, no fallback); `keepSp` keeps SP/charges (保留技力), restored before `deploy` fires — 突袭 raids, 阿戈尔 / 不屈 revives where the unit lies | diff --git a/docs/history/0.2.0.md b/docs/history/0.2.0.md index ce61c9d8..70144f09 100644 --- a/docs/history/0.2.0.md +++ b/docs/history/0.2.0.md @@ -25,7 +25,9 @@ settled (泥岩's 闭锁; 忍冬, 深靛, 阿) → §25.11; release packaging an with no Spine model) → §25.12; round 18 — 拟态物质 at the copy cap (GitHub #207), 华法琳's 7 / 14 (GitHub #175, PR #192), a merged elite 拉普兰德 as a new one (GitHub #169), the leader pool per player alive (PR #209), the flying lift and two 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. +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, …) → §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); @@ -1062,3 +1064,32 @@ fixed (W5AA's commits name every golden scenario moved); two were already fixed bounty 使徒 whose seeds leaked sent every seed into 联防 carrying the card — 15 of 16 re-entries paid it again — which 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` + +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 +reproduced on the 0.2.0 tree with a script first, then checked against the official data (enemy_database, +enemy_handbook_table, activity_table → act2autochess, the level files) and PRTS (备注 included) and the earlier decisions. +The real ones are fixed, one commit each with its golden scenarios named; the rest are answered with the evidence. + +#### 25.18.1 「…新约能天使在开了突袭之后蹦到了下方…临时放置溢出的干员和道具的那一栏高台」, 「单人联防时突袭也可以跑到对面的场地上」 (items 40, 16.3): 突袭 lands only on its player's own board — `sim/battle/players.js onOwnBoard`, `content/bonds/addon/battle.js raidTile` + +- **Seen**: in a solo leader round a ranged 突袭 member (新约能天使 with the 转职球 and the 突袭手雷) jumped onto the + boss field's 临时整备区 row; in a 联防 with one helper a member jumped onto the right half of the map. +- **Cause**: `raidTile` took any tile of the battle rect its position may stand on (grid.canStand). BOSS_RECT holds rows + 0–5, so the boss field's hand row 0 and 临时整备区 row 1 (tile_achand: high ground, buildable ALL) were landing tiles + for a ranged member (reproduced: an enemy on the left telin (1,3) of 战场#01 drew the member onto the hand tile (0,3)); + UNITE_RECT spans both halves of the 联防 map (cols 0–20) while a lone helper's board is the left half (escaped_single's + deploy tiles: cols 3–9), and on a pair field a member jumped onto its partner's half. +- **Official**: the bond text 「保留技力立即再部署至一名地面敌人周围」 — a 再部署 goes where its player deploys; the stage data + lists each player's deploy tiles per half (data/stages.json `deployTiles`: normal, bossLeft, bossRight). +- **Now**: `Battle.onOwnBoard(ps, r, c)` — the board region (rows 9–12, cols 2–10) mapped onto the field as `mapTile` + maps the player's pieces (the right-hand helper's +8 columns, the boss rows 2–5, the mirrored right half) — and + `raidTile` takes only those tiles; a target only reachable from elsewhere is skipped (the next candidate is tried, else + the member stays and the next poll looks again, as before). +- [ASSUMED]: none beyond §22.2's landing rule (the official landing tile among the legal ones is not known). +- Golden: 8 scenarios, each a member that used to land on the other half (checked with the parent instrumented): + boss-boss_2 / 3 / 4 / 5 / 6-pair, hidden-boss_8 / 10-pair (members landing on the partner's half, 1–7 per battle) and + the bot match coop2-ABYSS-10-boosted (ai_0's members on the right half of its leader fields). Tests: `test/sim/feedback5-raid-own-board.test.js` (4 cases; + each fails on the parent). Docs: docs/SIM.md (`onOwnBoard`). diff --git a/server/sim/battle/players.js b/server/sim/battle/players.js index 04b73486..5f658f0b 100644 --- a/server/sim/battle/players.js +++ b/server/sim/battle/players.js @@ -3,6 +3,7 @@ // Installed on Battle.prototype by server/sim/Battle.js (a method container: never instantiated; `this` is the battle). import { COLS, BOSS_ROW_OFFSET } from '../constants.js'; +import { GEO } from '../../../shared/constants.js'; import { Unit } from '../units.js'; import { normDir, mirrorDir } from '../dir.js'; import { SkillRuntime } from '../skills.js'; @@ -70,6 +71,29 @@ export class BattlePlayers { /** Board → field tile for a player (see header). */ mapTile(ps, row, col, abs = false) { if (abs || ps.coords === 'field') return [row, col]; + return this._boardTile(ps, row, col); + } + + /** + * Whether field tile (r, c) lies on player `ps`'s own board: the board region GEO.FIELD (rows 9–12, cols 2–10, the + * tiles its pieces are deployed on) mapped onto this field — the 联防 right-hand helper's +8 columns, the boss field's + * rows 2–5, the mirrored right half of a pair (whatever coordinates the player's input uses). Never the hand / 临时 + * 整备区 rows of a boss field (rows 0–1, inside BOSS_RECT) nor the other half of a 联防 or boss field. Automatic + * redeployments that must stay where the player could deploy read it (the 突袭 landing, bonds/addon/battle.js raidTile). + */ + onOwnBoard(ps, r, c) { + if (!ps) return false; + let keys = ps._boardKeys; + if (!keys) { + keys = ps._boardKeys = new Set(); + for (let br = GEO.FIELD.r0; br <= GEO.FIELD.r1; br++) { + for (let bc = GEO.FIELD.c0; bc <= GEO.FIELD.c1; bc++) { const [fr, fc] = this._boardTile(ps, br, bc); keys.add(fr * COLS + fc); } + } + } + return keys.has(r * COLS + c); + } + + _boardTile(ps, row, col) { const bossLike = this.kind === 'boss' || this.kind === 'hidden'; let r = row; if (ps.rowOffset != null) r = row + ps.rowOffset; diff --git a/server/sim/content/bonds/addon/battle.js b/server/sim/content/bonds/addon/battle.js index 0409d520..e4843bab 100644 --- a/server/sim/content/bonds/addon/battle.js +++ b/server/sim/content/bonds/addon/battle.js @@ -33,7 +33,9 @@ // 助力 deputShip all operators DEF +(base + per·L), redeploy time ×(1 + respawn_time) // 突袭 raidShip member idle ≥ no_attack_duration s (or skill ready — a passive skill that is on counts, GitHub // #49, and so does a deploy-timed skill while it runs, #109) with no enemy in range → "保留技力立即再部署" -// next to the most advanced ground enemy it can reach: on a free tile its position may be deployed +// next to the most advanced ground enemy it can reach: on a free tile of its own board (Battle.onOwnBoard: +// never a boss field's hand / 临时整备区 rows, never the other half of a 联防 or boss field — community +// reports of 2026-10-06, items 40 and 16.3) its position may be deployed // on from which its range covers that enemy (GitHub issue #51 [ASSUMED]: the first of the 8 most // advanced that has such a tile; none → it stays and the next poll looks again, never a jump that // hits nothing) — for a melee member that blocks, a tile where its block applies first (ground @@ -269,7 +271,11 @@ function raidReach(u) { /** * Landing tile [row, col] of a jump to enemy `e`, or null: a tile from which the member's range (`reach`, raidReach) * covers the enemy's body (a huge enemy: any tile it occupies — body.js), within RAID_SEARCH tiles (Chebyshev) of the - * enemy, inside the field rect, that the member's position may be deployed on (grid.canStand: never the 深水区 — + * enemy, inside the field rect and on the member's own board (Battle.onOwnBoard — "再部署" goes where its player deploys: + * never a boss field's hand row 0 or 临时整备区 row 1, both inside BOSS_RECT and buildable high ground, nor the half of the + * 联防 or boss field that is not its player's; community reports of 2026-10-06, items 40 and 16.3: a ranged member landed + * on the 临时整备区 row of a solo leader round, and on the right half of the one-helper 联防 map), that the member's + * position may be deployed on (grid.canStand: never the 深水区 — * player report #3 after 0.1.0 —, and for a melee member low ground only, never a 高台: GitHub #148) and that is free * (Battle.isReservedTile: no living unit, no knocked-out operator's body — player report F5 —, no waiting piece's tile). * A melee member that blocks takes a tile where its block applies first — ground units pass it (not a 围墙 / 围栏 tile, @@ -293,7 +299,7 @@ function raidTile(battle, u, e, reach) { for (let i = 0; i < reach.length; i += 2) { const r = br - reach[i], c = bc - reach[i + 1], dr = r - er, dc = c - ec; if (Math.abs(dr) > RAID_SEARCH || Math.abs(dc) > RAID_SEARCH) continue; - if (!battle.grid.inRect(r, c) || !battle.grid.canStand(r, c, { ranged }) || battle.isReservedTile(r, c)) continue; + if (!battle.grid.inRect(r, c) || !battle.onOwnBoard(u.player, r, c) || !battle.grid.canStand(r, c, { ranged }) || battle.isReservedTile(r, c)) continue; const t = r * COLS + c; const p = path && battle.grid.tile(r, c).pass === 'ALL' && (path.has(t) || body.includes(t)) ? 0 : 1; // its block applies const d = Math.max(Math.abs(dr), Math.abs(dc)) + 0.01 * (Math.abs(dr) + Math.abs(dc)); diff --git a/test/golden/fields.json b/test/golden/fields.json index 35fc2c3b..c2bd0161 100644 --- a/test/golden/fields.json +++ b/test/golden/fields.json @@ -138,45 +138,78 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 7, + "killed": 8, "total": 8, "unspawned": 0, - "bossHpLeft": 5323494, - "rngDraws": 861, + "bossHpLeft": 5364478, + "rngDraws": 913, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":7,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":591887,"bossDmg":312274,"heal":19641,"deaths":0,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":878330,"bossDmg":361136,"heal":6843,"deaths":1,"layerGains":{}} + "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":616081,"bossDmg":345229,"heal":26489,"deaths":2,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":880840,"bossDmg":287130,"heal":5585,"deaths":1,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,9,0,176503,1132,0,72,3], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,11,0,723,12906,183,34,1], - ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,7,0,26692,1028,261,54,14], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,13,0,13640,0,0,80,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,1,0,59962,0,1515,33,6], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2418.5,1,3,0,72626,0,0,43,4], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2769.3,1,17,0,28364,0,0,57,3], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,19,4,174454,2047,1463,57,21], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,5,0,0,0,16175,20,3], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,15,0,38923,1393,44,40,2], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",599.39,1,12,0,0,3929,1201,0,2], - ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,48,1,241366,511,511,284,8], - ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",1898.31,1,8,0,2347,1249,764,15,6], - ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,47,1,101686,2806,1366,162,10], - ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1931.91,1,10,0,56922,1270,424,53,3], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,0,275392,0,0,175,2], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,9,0,197572,2597,100,74,3], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,11,0,17911,21305,253,56,1], + ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,7,0,23508,1118,106,12,14], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,13,0,1795,0,0,14,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,1,0,130284,0,7756,70,11], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2418.5,1,3,0,59757,0,0,44,4], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2769.3,1,45,2,26256,3155,385,54,2], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,43,0,112386,1831,220,45,16], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,5,0,0,0,17669,25,3], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,15,1,46613,1393,0,31,2], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",965.67,1,12,0,0,3839,1557,0,2], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,46,2,233157,0,0,265,6], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2236.31,1,8,0,2429,1159,1012,15,6], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,44,0,59323,1488,148,88,7], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,10,0,73699,0,0,69,4], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,1,332967,0,0,251,3], ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,4,0,0,0,0,0,0], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1636.54,1,18,1,44668,3170,2575,41,4], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,41,0,62779,1991,2,96,26], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,6,0,93170,0,0,61,17], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1857.24,1,18,1,46534,3241,2866,40,3], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,41,1,50318,1991,2,69,19], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,6,0,82414,0,0,54,13], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], - "enemies": {"enemy_1005_yokai_2":[6,6,0,3187,62190],"enemy_1430_lrrook":[2,1,1,0,734721],"enemy_9017_achunt":[2,0,0,30243,676506]}, - "hooks": [1,46,6000,1359,1379,2883,2933,5284,9,22,136,129,20,37832,1034,0,10,1,1,9,0,12,0], - "events": {"atk":1384,"deploy":36,"die":21,"dmg":2925,"engage":17,"fx":608,"heal":50,"leak":1,"skill":265,"spawn":32,"status":505}, - "fx": {"aoe":38,"appear":2,"blink":13,"burst":12,"catShield":1,"charge":6,"counter":20,"crit":105,"dilemma":3,"disappear":2,"explosion":17,"frostNova":26,"garrisonGrant":1,"iceSpike":53,"overclock":2,"pull":3,"quadShot":2,"ripple":20,"sentry":5,"sermon":1,"shadowWeave":10,"shield":5,"soul":6,"sp":8,"stealth":8,"swordRain":91,"swordStorm":10,"tornado":4,"tornadoPulse":16,"weightless":4,"zone":114}, - "snaps": "8c0abe54 9b607288 336a3889 ab855b37 55a7f144 2239f0b8 855b08a6 d6883aa1 06da7541 da586a98 f0803d88 8d33a16a c1c54b58 68e1874e a0524730 737daaf0 ebd64be9 ec096e18 d99e1d14 bf343ba5" + "enemies": {"enemy_1005_yokai_2":[6,6,0,5219,62190],"enemy_1430_lrrook":[2,2,0,0,802449],"enemy_9017_achunt":[2,0,0,37896,635522]}, + "hooks": [1,44,6000,1296,1320,2757,2793,4386,11,20,120,118,30,38324,958,0,10,0,1,11,0,10,1], + "events": {"atk":1325,"deploy":34,"die":20,"dmg":2785,"engage":17,"fx":668,"heal":107,"skill":238,"spawn":32,"status":453}, + "fx": { + "aoe": 37, + "appear": 2, + "blink": 9, + "burst": 10, + "catShield": 1, + "charge": 6, + "counter": 30, + "crit": 126, + "dilemma": 4, + "disappear": 2, + "dodge": 1, + "explosion": 13, + "frostNova": 19, + "garrisonGrant": 1, + "iceSpike": 48, + "overclock": 2, + "pull": 3, + "quadShot": 3, + "ripple": 20, + "sentry": 3, + "sermon": 1, + "shadowWeave": 7, + "shield": 7, + "soul": 3, + "sp": 10, + "stealth": 6, + "swordRain": 56, + "swordStorm": 7, + "tornado": 3, + "tornadoPulse": 15, + "weightless": 4, + "zone": 209 + }, + "snaps": "8c0abe54 9b607288 941cd501 25535c11 fb3139ca 9fef10e6 862493a5 c02461d1 7a7b723d e92ed2e1 87505792 02ea30b3 7ca8af6e e52d3d9d 68f1a4d7 7258cbc2 76a4c411 046e818b 2e54adea aa8b9cc0" }, "boss-boss_2-solo": { "about": "假想敌:铳 solo pool 3000000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -230,102 +263,98 @@ "killed": 21, "total": 21, "unspawned": 0, - "bossHpLeft": 32389, - "rngDraws": 1396, + "bossHpLeft": 145080, + "rngDraws": 1385, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1695850,"bossDmg":1631787,"heal":2418,"deaths":0,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2455567,"bossDmg":2335824,"heal":25654,"deaths":0,"layerGains":{}} + "p1": {"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1679564,"bossDmg":1583484,"heal":2172,"deaths":0,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2359162,"bossDmg":2271437,"heal":16328,"deaths":0,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3430,1,7,0,0,0,0,0,0], + ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3430,1,7,0,0,0,605,0,1], ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,11,0,0,0,0,0,0], ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,9,0,0,0,0,0,0], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2131.5,1,13,2,904165,0,0,62,8], - ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,17,2,323380,39,5,62,3], - ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1214.37,1,19,1,36269,8963,1922,0,5], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2307.2,1,21,1,303279,1552,491,96,8], - ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,0,0,0,0,0,0], - ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,1,10,0,0,3,3], - ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,23,0,89889,0,0,207,5], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2131.5,1,13,1,877126,0,0,62,8], + ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,17,0,349841,28,2,63,3], + ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1214.37,1,19,1,35820,8433,1241,0,5], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2307.2,1,21,2,293209,1008,323,97,8], + ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,1,3064,0,1,11,1], + ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,1,21050,0,0,8,8], + ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,23,0,89834,0,0,206,5], ["p1",11,"token","token_10017_skadi2_dedant",null,null,130.4,0,26,0,0,0,0,0,null], - ["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3801.6,1,31,1,449725,8103,1186,204,3], - ["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,12,1,16446,0,0,3,1], - ["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",1653.08,1,10,1,6,1222,360,6,1], - ["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6215.89,1,32,0,268872,836,0,81,4], - ["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3117.74,1,16,3,190441,856,166,73,4], - ["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2392.2,1,20,2,1232637,5257,991,368,6], - ["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2050.92,1,22,0,0,2064,3414,47,1], - ["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,25,1,79495,579,0,148,4], - ["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,6,5,181467,0,0,11,3], - ["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,18,0,0,0,19537,50,2], + ["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3985.92,1,31,6,345376,3222,0,183,3], + ["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,12,1,27218,0,0,6,1], + ["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,10,0,0,0,0,0,0], + ["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6215.89,1,46,0,293226,0,0,85,4], + ["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3117.74,1,16,2,189809,0,0,74,4], + ["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2392.2,1,20,3,1205701,5257,423,365,6], + ["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2050.92,1,22,0,0,0,2846,42,1], + ["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,25,0,87945,932,0,163,4], + ["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,6,3,182528,0,0,13,3], + ["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,18,0,0,0,13059,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], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null], ["-","~4","device","trap_1105_accrate",null,null,100,1,4,0,0,0,0,0,null], - ["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,24,0,8296,1880,0,17,1], - ["p2","~1","token","token_10019_nearl2_sword",null,null,7824,0,41,0,9120,0,0,0,null], - ["p1","~2","token","token_10030_mlyss_wtrman",null,null,860.02,0,42,0,1348,1020,0,2,null], - ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,47,0,0,0,0,0,null], - ["p1","~3","token","token_10030_mlyss_wtrman",null,null,1557.36,1,50,0,29214,0,0,62,1], - ["p2","~2","token","token_10019_nearl2_sword",null,null,6480,0,51,0,9120,0,0,0,null], - ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1880.37,0,53,0,0,0,0,0,null], - ["p1","~2","token","token_10017_skadi2_dedant",null,null,130.4,0,55,0,0,0,0,0,null], - ["p1","~5","token","token_10030_mlyss_wtrman",null,null,1880.37,0,57,0,0,0,0,0,null], - ["p2","~3","token","token_10019_nearl2_sword",null,null,6480,0,58,0,9120,0,0,0,null], - ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,61,0,0,0,0,0,null], - ["p1","~6","token","token_10030_mlyss_wtrman",null,null,1557.36,0,62,0,0,0,0,0,null], - ["p2","~4","token","token_10019_nearl2_sword",null,null,6480,1,64,0,9120,0,0,0,null] + ["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,24,0,8947,1880,0,18,1], + ["p1","~2","token","token_10030_mlyss_wtrman",null,null,860.02,0,41,0,674,1020,0,1,null], + ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,48,0,0,0,0,0,null], + ["p2","~1","token","token_10019_nearl2_sword",null,null,6480,0,50,0,9120,0,0,0,null], + ["p1","~2","token","token_10017_skadi2_dedant",null,null,130.4,0,53,0,0,0,0,0,null], + ["p2","~2","token","token_10019_nearl2_sword",null,null,6480,0,55,0,9120,0,0,0,null], + ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,57,0,0,0,0,0,null], + ["p2","~3","token","token_10019_nearl2_sword",null,null,6480,1,60,0,9120,0,0,0,null] ], "enemies": { "enemy_1197_sfshu_2": [2,2,0,0,28809], "enemy_1198_msfshu_2": [6,6,0,0,24], - "enemy_1209_sfden_2": [2,2,0,11003,154793], + "enemy_1209_sfden_2": [2,2,0,2901,154793], "enemy_1210_msfden_2": [2,2,0,0,90], - "enemy_9021_acduml": [1,0,0,0,3967611], - "enemy_9023_acdums": [9,9,0,8178,90] + "enemy_9021_acduml": [1,0,0,0,3854920], + "enemy_9023_acdums": [9,9,0,5690,90] }, - "hooks": [1,62,6000,1512,1512,3171,3572,2628,22,35,63,56,376,44379,1588,4,22,0,1,22,0,1,0], - "events": {"atk":1661,"deploy":36,"die":35,"dmg":3271,"engage":16,"fx":1035,"heal":306,"skill":119,"spawn":60,"status":513}, + "hooks": [1,58,6000,1444,1444,3043,3408,2091,22,32,68,62,368,46997,1658,3,22,0,1,22,0,2,0], + "events": {"atk":1595,"deploy":32,"die":32,"dmg":3120,"engage":15,"fx":1016,"heal":279,"skill":130,"spawn":55,"status":503}, "fx": { - "airstrike": 135, + "airstrike": 121, "appear": 1, "beam": 9, - "blink": 2, - "bombard": 66, - "bombardShell": 66, + "blink": 3, + "bombard": 65, + "bombardShell": 65, "buff": 3, - "burst": 1, - "copy": 2, + "burst": 2, + "copy": 1, "disappear": 1, - "displace": 2, + "displace": 3, "dp": 5, - "drone": 339, - "droneLock": 17, + "drone": 338, + "droneLock": 16, "drones": 3, - "explode": 138, - "extraAttack": 1, + "explode": 132, "finale": 1, + "firewall": 1, "garrisonGrant": 1, - "lightning": 74, - "link": 5, - "lock": 66, + "lightning": 73, + "link": 6, + "lock": 65, "lure": 3, "phase": 18, - "radiantSword": 4, + "radiantSword": 3, + "scorchBurst": 2, "slash": 11, - "snow": 11, - "split": 4, + "snow": 16, + "split": 1, "steal": 6, "storm": 8, - "summon": 15, - "sunBurst": 1, + "summon": 14, + "sunBurst": 3, "talent": 4, "telegraph": 4, "tide": 5, "wanted": 3 }, - "snaps": "b5e578c7 08019f4b 2414497e e8ccf404 0a757964 27f19ffa dc979221 9a9cddad 37887448 9597c3ad 3331f98b 22dca952 01026ee5 afe32a6d 65ca8fec ed617f42 3ed37aad 2975ad94 80313e62 c870870c" + "snaps": "a6583904 690f5f09 7e46b90a 79bd80c0 5d5ea6ac 2ca45e6d 3659a185 afe7b53b 892e0590 b65ea5dc cf69b274 73119efb 179b6e9b 193c2ccd 968321a9 c9d3fb50 a2530bb0 bfb8edc2 7f870c83 8b01997c" }, "boss-boss_3-solo": { "about": "假想敌:管 solo pool 2000000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", @@ -390,81 +419,81 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 9, + "killed": 12, "total": 14, "unspawned": 0, - "bossHpLeft": 7601883, - "rngDraws": 496, + "bossHpLeft": 7548877, + "rngDraws": 541, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":9,"total":14,"perfect":false,"leaks":3,"leaksUncounted":0,"coins":0,"dmg":832066,"bossDmg":272991,"heal":24644,"deaths":21,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":815098,"bossDmg":525125,"heal":3151,"deaths":24,"layerGains":{}} + "p1": {"killed":12,"total":14,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":893986,"bossDmg":308902,"heal":31619,"deaths":19,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":962354,"bossDmg":542221,"heal":6389,"deaths":22,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,51,3,138264,7838,24,22,1], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",0,0,5,0,16815,6179,893,10,1], - ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,62,0,49407,10951,912,3,8], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,59,0,4545,12126,187,2,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",751.16,1,66,2,302889,4343,4325,83,13], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,60,1,81029,10790,504,39,4], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,0,91590,2005,24,110,3], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,56,2,61149,3914,692,30,11], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,57,0,0,4410,17059,32,3], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,15,0,86379,2071,24,36,2], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,50,0,0,6877,135,0,1], - ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",1827.12,1,68,0,125101,9355,115,125,6], - ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,65,0,26395,7425,67,37,9], - ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,63,0,103636,9247,100,151,6], - ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,55,0,185661,6408,233,40,4], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,58,0,114013,3511,389,114,2], - ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,3417,24,0,0], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,64,0,61768,6768,1277,69,4], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,61,0,53260,4339,361,56,16], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,67,1,145265,3703,451,68,13], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,57,1,144856,8141,327,24,1], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",0,0,62,1,21035,11064,1107,16,2], + ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,63,1,36157,11533,601,6,7], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,67,0,13062,13688,855,15,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",761.83,1,65,2,347988,3266,8910,106,15], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",601.22,1,64,0,74511,10416,444,39,4], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,0,78150,3367,24,135,4], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1093.46,1,69,2,86709,2593,464,31,11], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,59,0,0,4410,18864,34,3], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,15,1,91518,3433,24,44,2], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,55,0,0,6776,33,0,1], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,72,0,160850,6885,116,158,7], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,68,0,25917,7233,84,32,8], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,66,3,171812,20720,1824,108,14], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,60,0,208060,6129,269,46,4], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,61,0,117319,3470,348,113,2], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,2988,119,0,0], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,20,0,61353,4837,2395,67,4], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1543.48,1,70,0,59776,3172,737,61,19], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1144.47,1,71,1,157265,2572,464,69,13], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], - "enemies": {"enemy_1010_demon":[4,4,0,1913,200612],"enemy_1438_dspred":[10,5,5,22724,648434],"enemy_1521_dslily":[1,0,0,93299,798117]}, - "hooks": [1,66,6000,1002,1068,2527,2646,4783,54,61,108,107,10,27478,1110,16,15,5,1,57,0,24,2], - "events": {"atk":1226,"deploy":51,"die":56,"dmg":2639,"engage":17,"fx":653,"heal":160,"leak":5,"skill":215,"spawn":37,"status":755}, + "enemies": {"enemy_1010_demon":[4,4,0,0,200612],"enemy_1438_dspred":[10,8,2,32559,804605],"enemy_1521_dslily":[1,0,0,96332,851123]}, + "hooks": [1,70,6000,1061,1132,2768,2891,6042,55,61,122,121,16,31476,1150,23,15,2,1,56,0,24,2], + "events": {"atk":1283,"deploy":55,"die":59,"dmg":2881,"engage":17,"fx":792,"heal":216,"leak":2,"skill":243,"spawn":37,"status":834}, "fx": { - "aoe": 21, - "appear": 9, - "blink": 2, + "aoe": 20, + "appear": 5, + "blink": 6, "burst": 24, - "charge": 9, - "counter": 10, - "crit": 44, + "charge": 8, + "counter": 16, + "crit": 49, "dilemma": 4, - "disappear": 9, - "displace": 28, + "disappear": 5, + "displace": 27, "dodge": 2, "explosion": 13, - "frostNova": 16, + "frostNova": 19, "grow": 1, - "iceSpike": 88, + "iceSpike": 106, "overclock": 1, "pull": 4, "quadShot": 2, - "ripple": 9, - "rockfall": 11, - "sentry": 4, - "sermon": 1, - "shadowWeave": 5, - "shield": 3, + "ripple": 14, + "rockfall": 17, + "sentry": 3, + "sermon": 2, + "shadowWeave": 4, + "shield": 5, "soul": 3, - "sp": 9, - "stealth": 6, - "swordRain": 40, - "swordStorm": 6, + "sp": 8, + "stealth": 7, + "swordRain": 103, + "swordStorm": 14, "tentacle": 6, "tide": 5, "tornado": 4, "tornadoPulse": 20, "weightless": 4, - "zone": 230 + "zone": 261 }, - "snaps": "9d889e0e f29df90d 7a4bf6fc 19fe1302 bbe35359 e3aae426 3f978616 3d9f6e1d dcc49f9b e2e26bac eaf0159e 0d0a2271 04949e73 baad20e5 dca9ced6 a4351d0b b4846197 afc80a44 a6e80893 96d194a3" + "snaps": "f65be30a 3fab4736 85e2bb50 91bfa19d 93214291 4b83b01b 615be497 b793dacf d713f4bf a63a221d c2db01e9 0546ff9b 17661f26 edf65cc8 addd19b1 59530186 37cddc6b 2c477685 7e246006 61595031" }, "boss-boss_4-solo": { "about": "盐风主教昆图斯 solo pool 4200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -514,99 +543,103 @@ "round": 14, "seed": 2302764647, "waveId": "act2autochess_h07_05", - "time": 116.4, - "ticks": 3492, + "time": 159.97, + "ticks": 4799, "reason": "cleared", - "killed": 17, - "total": 17, + "killed": 23, + "total": 23, "unspawned": 0, "bossHpLeft": 0, - "rngDraws": 957, + "rngDraws": 1140, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":999785,"bossDmg":756103,"heal":20375,"deaths":2,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1020000,"bossDmg":803897,"heal":61815,"deaths":3,"layerGains":{}} + "p1": {"killed":23,"total":23,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1078355,"bossDmg":854910,"heal":22023,"deaths":2,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1001429,"bossDmg":705090,"heal":86289,"deaths":3,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",7216.72,1,7,0,54707,5937,9130,20,2], - ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",1074.06,1,12,0,46186,6044,294,16,2], - ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3688.8,1,14,0,57400,4698,189,27,2], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1487.68,1,1,3,432902,4386,1760,36,3], - ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2520.63,1,16,1,76617,192,0,17,2], - ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1769.09,1,3,0,12934,9173,717,0,3], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1880.37,1,18,3,109704,1707,478,9,6], - ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",0,0,5,0,52484,4602,6914,33,2], - ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1723.89,1,20,2,113889,4068,505,20,20], - ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",0,0,9,0,31419,2968,195,44,2], + ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3430,1,7,1,53498,8311,12460,26,2], + ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,12,0,61955,3891,0,19,2], + ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,14,0,91917,10020,129,42,2], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1470,1,68,1,210159,1691,0,29,2], + ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,16,1,136389,1672,0,33,2], + ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1598,1,69,0,8143,4362,61,0,3], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1442,1,18,2,182005,4889,826,17,8], + ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,0,66889,2036,6709,54,3], + ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,20,2,161885,5631,862,30,30], + ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,9,1,71696,4482,0,130,4], ["p1",11,"token","token_10017_skadi2_dedant",null,null,130.4,0,22,0,0,0,0,0,null], - ["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,10,0,8925,2566,195,17,1], - ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",0,0,42,2,260273,13743,0,91,3], - ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2873.29,1,13,0,157481,6073,0,44,3], - ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,15,0,43092,3945,1631,40,1], - ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6089.82,1,55,2,138155,15493,0,43,3], - ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",5503.36,1,2,1,209692,1801,1375,27,2], - ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",0,0,17,1,61810,8849,2844,8,1], - ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1710.2,1,4,0,0,1532,10285,13,1], - ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1876.46,1,19,2,24349,1047,0,38,2], - ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1125.01,1,6,1,110394,2111,0,0,2], - ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1970.34,1,21,0,0,3202,45680,36,2], + ["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,10,0,10254,1668,0,20,1], + ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3117.59,1,74,6,320376,24405,0,103,5], + ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,13,0,114213,9139,0,33,3], + ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,15,0,16826,3744,840,18,1], + ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",5928.45,1,71,4,184426,11128,0,60,3], + ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",5051.9,1,2,3,191473,2701,2473,25,2], + ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",3765.5,1,17,1,36144,9714,1669,8,1], + ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1899,1,4,0,0,4530,14528,22,1], + ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,19,1,22747,3140,0,37,3], + ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,66,0,100465,1541,0,14,2], + ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,21,0,0,2617,66779,48,2], ["p2","~1","token","token_10019_nearl2_sword",null,null,1468.72,0,32,0,7863,6355,0,11,null], - ["p1","~1","token","token_10030_mlyss_wtrman",null,null,2175.07,0,36,0,2618,0,0,7,null], - ["p1","~1","token","token_10040_siege2_vlion",null,null,3173.37,0,39,0,0,1078,0,0,null], - ["p2","~2","token","token_10019_nearl2_sword",null,null,5622.56,0,46,0,0,857,0,0,null], - ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,47,0,0,0,0,0,null], - ["p1","~2","token","token_10040_siege2_vlion",null,null,4677.04,1,57,0,0,539,0,0,null], - ["p2","~3","token","token_10019_nearl2_sword",null,null,7087.59,1,58,0,6892,736,0,0,null] + ["p1","~1","token","token_10030_mlyss_wtrman",null,null,2175.07,0,36,0,3496,0,0,10,null], + ["p1","~1","token","token_10040_siege2_vlion",null,null,2883.16,0,40,0,475,1239,0,1,null], + ["p2","~2","token","token_10019_nearl2_sword",null,null,0,0,46,0,5,6000,0,10,null], + ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,50,0,0,0,0,0,null], + ["p1","~2","token","token_10030_mlyss_wtrman",null,null,1267.96,1,58,1,12448,2876,976,23,1], + ["p2","~3","token","token_10019_nearl2_sword",null,null,7087.59,0,61,0,6892,736,0,0,null], + ["p1","~2","token","token_10040_siege2_vlion",null,null,2158.7,0,63,0,1900,3057,0,4,null], + ["p1","~3","token","token_10030_mlyss_wtrman",null,null,1668,1,67,0,5246,0,0,14,null], + ["p1","~2","token","token_10017_skadi2_dedant",null,null,100,1,70,0,0,0,0,0,null] ], "enemies": { "enemy_1010_demon_2": [2,2,0,3615,128995], - "enemy_2009_csaudc": [4,4,0,2146,137594], - "enemy_2010_csdcr": [2,2,0,4710,103196], - "enemy_2016_csphtm": [2,2,0,94164,1560000], - "enemy_2017_csphts": [9,9,0,88,90000] + "enemy_2009_csaudc": [4,4,0,2382,137594], + "enemy_2010_csdcr": [2,2,0,5808,103196], + "enemy_2016_csphtm": [2,2,0,119394,1560000], + "enemy_2017_csphts": [15,15,0,368,150000] }, - "hooks": [1,56,3492,654,654,1833,2142,3194,25,39,65,55,50,29032,1203,31,19,0,1,23,0,16,66], - "events": {"atk":802,"deploy":37,"die":39,"dmg":1979,"engage":19,"fx":640,"heal":383,"skill":120,"spawn":48,"status":568}, + "hooks": [1,72,4799,936,936,2277,2696,2622,32,50,83,75,28,34452,1423,41,25,0,1,33,0,21,102], + "events": {"atk":1185,"deploy":47,"die":50,"dmg":2489,"engage":25,"fx":655,"heal":520,"skill":158,"spawn":57,"status":697}, "fx": { - "airstrike": 18, - "blink": 17, - "bombard": 27, - "bombardShell": 27, - "burst": 16, - "cleanse": 1, - "copy": 1, - "dodge": 66, - "dp": 2, - "drone": 202, - "droneLock": 8, + "airstrike": 9, + "blink": 26, + "bombard": 9, + "bombardShell": 9, + "burst": 21, + "cleanse": 2, + "copy": 2, + "dodge": 102, + "dp": 4, + "drone": 165, + "droneLock": 6, "drones": 2, - "emergency": 1, - "explode": 24, - "extraAttack": 13, + "emergency": 2, + "explode": 34, + "extraAttack": 4, "finale": 3, "firewall": 2, "garrisonGrant": 1, - "lightning": 55, - "link": 3, - "lock": 27, + "lightning": 88, + "link": 4, + "lock": 11, "lure": 2, + "palsy": 1, "radiantSword": 3, "scorchBurst": 3, - "shield": 14, + "shield": 15, "slash": 33, - "snow": 22, - "split": 1, + "snow": 30, + "split": 2, "steal": 1, - "storm": 6, + "storm": 8, "strike": 3, - "summon": 14, - "sunBurst": 5, - "talent": 4, - "telegraph": 2, + "summon": 20, + "sunBurst": 6, + "talent": 5, + "telegraph": 8, "tide": 3, - "wanted": 8 + "wanted": 6 }, - "snaps": "726b45e6 655ee79a 912e8d78 fe351355 d02de871 2de23192 90fc2124 37da201e 332c960d a6a1a21f 4df5e422 d780f15c" + "snaps": "726b45e6 655ee79a 912e8d78 81d2f8b1 9991a68d 0e03e621 f723e6f0 97ed9230 1f30bf26 95c04677 7c0bb26e c00d1ee6 310abe5c d5b420f5 4a50230e 8f5aa000" }, "boss-boss_5-solo": { "about": "卢西恩,“猩红血钻” solo pool 780000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", @@ -667,62 +700,62 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 4, + "killed": 5, "total": 6, "unspawned": 0, - "bossHpLeft": 6660590, - "rngDraws": 559, + "bossHpLeft": 6937575, + "rngDraws": 481, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":4,"total":6,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1051226,"bossDmg":642651,"heal":3896,"deaths":5,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1151422,"bossDmg":656759,"heal":1055,"deaths":12,"layerGains":{}} + "p1": {"killed":5,"total":6,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":962744,"bossDmg":480128,"heal":1353,"deaths":4,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1105264,"bossDmg":542298,"heal":401,"deaths":15,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,2,107043,0,0,26,3], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,2,150079,0,0,34,2], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,1,0,0,0,0,0,0], - ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,5,0,38065,0,0,0,13], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,0,2464,0,0,3,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,2,332249,0,1482,73,12], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,198299,0,0,75,6], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,15,0,28901,1629,0,50,2], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,47,0,287701,3222,0,85,28], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,49,0,2900,3220,2414,4,1], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,0,53605,0,0,40,2], + ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,5,1,53410,0,0,0,15], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,0,0,0,0,0,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,1,288098,0,269,74,11], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,199470,0,0,73,6], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,15,0,33233,0,0,49,2], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,47,0,181975,3222,0,53,16], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,49,0,1934,4573,1083,1,1], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,0,54545,0,0,41,2], ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,46,0,0,12182,281,0,1], - ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",0,0,41,0,136097,9003,729,279,6], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",0,0,53,0,132250,11795,83,210,5], ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,6,0,0,0,0,0,0], - ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,43,0,57804,9849,44,187,5], - ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,14,0,239542,0,0,118,6], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,0,456796,0,0,132,2], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,56,0,60073,10804,37,181,7], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,14,0,204305,0,0,117,6], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,1,383161,0,0,107,2], ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,12,0,0,0,0,0,0], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,48,0,37231,4464,0,91,4], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,44,0,120920,3978,0,113,27], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,52,0,103033,3252,0,33,6], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,48,0,70233,2232,0,102,4], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,44,0,97692,3978,0,86,21], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,45,0,157549,3252,0,49,9], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], "enemies": { - "enemy_10028_vtswd": [5,5,0,0,0], + "enemy_10028_vtswd": [6,6,0,0,0], "enemy_10029_vtshld": [2,2,0,0,0], - "enemy_10030_vtwand": [1,1,0,0,0], - "enemy_10085_hllevi_2": [2,0,2,0,702625], - "enemy_1010_demon": [4,4,0,15134,200612], - "enemy_9032_aclionk": [1,0,0,35665,1299410] + "enemy_10030_vtwand": [3,3,0,0,0], + "enemy_10085_hllevi_2": [2,1,1,0,844970], + "enemy_1010_demon": [4,4,0,12182,200612], + "enemy_9032_aclionk": [1,0,0,39855,1022425] }, - "hooks": [1,50,6000,1291,1314,2325,2345,811,29,33,125,123,0,36836,1303,4,15,2,1,25,0,5,0], - "events": {"atk":1354,"deploy":35,"die":31,"dmg":2324,"engage":14,"fx":616,"heal":20,"leak":2,"skill":248,"spawn":37,"status":889}, + "hooks": [1,55,6000,1156,1181,2148,2161,330,35,38,111,109,0,34074,1139,2,18,1,1,28,0,3,0], + "events": {"atk":1239,"deploy":37,"die":37,"dmg":2090,"engage":13,"fx":582,"heal":3,"leak":1,"skill":220,"spawn":40,"status":950}, "fx": { - "aoe": 48, + "aoe": 37, "appear": 4, "blink": 2, - "burst": 5, - "crit": 75, + "burst": 3, + "crit": 60, "dilemma": 6, "disappear": 4, "displace": 19, - "equip": 9, - "explosion": 6, - "frostNova": 27, + "equip": 14, + "explosion": 9, + "frostNova": 21, "garrisonGrant": 1, "iceSpike": 44, "overclock": 1, @@ -730,23 +763,23 @@ "quadShot": 2, "revive": 2, "ripple": 18, - "sentry": 3, - "shadowWeave": 2, + "sentry": 4, + "shadowWeave": 4, "shield": 1, - "soul": 5, - "sp": 18, - "stealth": 6, + "soul": 3, + "sp": 13, + "stealth": 5, "sword": 4, - "swordRain": 21, - "swordStorm": 5, - "telegraph": 14, + "swordRain": 31, + "swordStorm": 7, + "telegraph": 18, "tornado": 4, "tornadoPulse": 20, "vest": 2, "weightless": 6, - "zone": 228 + "zone": 209 }, - "snaps": "5feb83ed f13ed3b4 56be9cfd 39b0aa8a e95d527f 3acb6fe4 5cf64994 3a284512 941757f8 a04e88b3 04d5b3e2 1390b339 3e94c413 ad43bd42 f1b1463c af767763 1630b47b 0444ec4e 3be9c125 022e8e64" + "snaps": "9c6ce142 8a6dcc91 4f97bc5f 50bf0124 38b0c8c6 45c468a3 44e29257 4724879b 8c7622b1 5290f2f6 0bbfb1a6 51e0b266 c1f639dd 8c0da971 125f843e 3efd2bda fdec864d f9735dd3 51aa9170 3db9cfa4" }, "boss-boss_6-solo": { "about": "阿利斯泰尔,帝国余晖 solo pool 3980000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -925,92 +958,94 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 13, + "killed": 12, "total": 18, "unspawned": 0, - "bossHpLeft": 12749411, - "rngDraws": 469, + "bossHpLeft": 12629621, + "rngDraws": 468, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":13,"total":18,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1782144,"bossDmg":862264,"heal":34974,"deaths":19,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1063494,"bossDmg":787168,"heal":3526,"deaths":23,"layerGains":{}} + "p1": {"killed":12,"total":18,"perfect":false,"leaks":3,"leaksUncounted":0,"coins":0,"dmg":1813792,"bossDmg":944377,"heal":33830,"deaths":17,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1106705,"bossDmg":824962,"heal":6361,"deaths":24,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,73,2,70060,30258,344,15,1], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5411.15,1,78,0,6068,12135,463,20,2], - ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,82,0,47436,18275,3606,26,11], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",5476,1,88,0,43232,18483,434,21,3], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",161.56,1,79,2,719512,4898,9898,98,11], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2764,1,93,1,69538,10605,41,18,2], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2053.18,1,83,1,288400,7730,9,2,1], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1084.8,1,72,1,524208,5369,9,40,13], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",3220,1,90,0,0,11772,20169,18,2], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,80,1,13692,10170,0,9,1], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,75,0,0,7525,137,0,2], - ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,84,2,27393,10756,5,74,5], - ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",4170.25,1,92,1,15991,9948,1608,6,3], - ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,87,0,78679,12401,119,22,8], - ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,67,0,126046,8396,309,30,3], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,71,1,301353,3122,0,77,1], - ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,20,0,52829,6922,264,53,2], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,86,0,42669,2582,350,30,3], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,63,2,356112,4467,489,68,20], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,64,1,62422,3497,245,25,4], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",7814,1,87,2,99556,22699,524,33,2], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",7074,1,76,0,5363,9113,632,5,1], + ["p1",3,"op","chess_char_5_14_b",1,"none",3988,1,82,0,51953,11489,1912,18,7], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",5476,1,83,2,64073,18040,1691,23,2], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,71,0,683642,5223,11602,89,10], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,72,2,377669,13930,191,24,2], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,54,0,1445,6516,0,3,1], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",2469.42,1,69,3,433079,3975,0,26,9], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,70,0,0,8508,17279,15,1], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",2175.85,1,79,1,97012,7994,0,24,2], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,78,0,0,8375,179,0,2], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,81,1,12100,12569,39,82,4], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,60,1,16724,11556,3215,13,4], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,85,0,52687,10354,93,18,6], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,63,1,136890,11467,404,44,5], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,67,1,299704,3122,0,68,1], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,84,0,61299,4658,245,63,3], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,68,0,23874,6560,2096,11,1], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,61,0,69433,3978,0,73,20], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,62,2,433992,3341,89,57,11], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], "enemies": { - "enemy_10027_vtsk": [6,1,4,138886,892170], + "enemy_10027_vtsk": [6,1,3,119156,802040], "enemy_1005_yokai": [4,4,0,0,1600], - "enemy_1229_darmy_2": [8,8,0,3486,294231], - "enemy_9013_acstmk_2": [1,0,0,45577,1650589], - "enemy_9014_acstma": [5,4,0,2385,30898], - "enemy_9015_acstmb": [2,1,0,8977,5739], - "enemy_9016_acstmr": [8,7,0,0,41] + "enemy_1229_darmy_2": [8,7,1,4411,292434], + "enemy_9013_acstmk_2": [1,0,0,46945,1770379], + "enemy_9014_acstma": [5,4,0,4133,27092], + "enemy_9015_acstmb": [3,2,0,8822,56064], + "enemy_9016_acstmr": [8,7,0,0,38] }, - "hooks": [1,91,6000,753,753,2602,2727,3433,67,73,98,95,6,20855,903,13,34,4,1,71,0,4,11], - "events": {"atk":855,"deploy":57,"die":69,"dmg":2724,"engage":17,"fx":566,"heal":95,"leak":4,"skill":193,"spawn":56,"status":571}, + "hooks": [1,87,6000,794,795,2574,2713,4313,66,71,94,93,5,24475,892,16,35,4,1,64,0,6,12], + "events": {"atk":915,"deploy":52,"die":67,"dmg":2712,"engage":17,"fx":539,"heal":101,"leak":4,"skill":187,"spawn":57,"status":666}, "fx": { - "aoe": 37, - "appear": 8, + "aoe": 26, + "appear": 9, "beam": 48, "blink": 13, - "burst": 4, - "charge": 9, - "counter": 6, - "crit": 44, - "dilemma": 3, - "disappear": 8, - "dodge": 11, + "burst": 6, + "charge": 10, + "counter": 5, + "crit": 43, + "dilemma": 5, + "disappear": 9, + "dodge": 12, "explode": 6, - "explosion": 4, + "explosion": 11, "frostNova": 20, - "iceSpike": 2, + "iceSpike": 3, "overclock": 2, + "palsy": 1, "phase": 3, - "pull": 2, + "pull": 1, "quadShot": 1, "revive": 2, + "ripple": 9, "sentry": 4, - "sermon": 2, + "sermon": 1, "shadowWeave": 8, "shell": 8, - "shield": 4, - "slippery": 2, - "soul": 4, - "sp": 9, - "spGain": 2, - "stealth": 5, + "shield": 5, + "slippery": 3, + "soul": 5, + "sp": 7, + "spGain": 10, + "stealth": 4, "summon": 4, - "swordRain": 67, - "swordStorm": 8, + "swordRain": 37, + "swordStorm": 6, "telegraph": 6, - "tornado": 3, - "tornadoPulse": 11, + "tornado": 1, + "tornadoPulse": 5, "weightless": 2, - "zone": 184 + "zone": 178 }, - "snaps": "1b4d1c90 5e89ae3a 18b0277b 718ea4d9 fb14ee3f 2c5d7b5a 90a9e918 535d6535 ff46bb00 d6a87ebe a53bce20 63043c57 e1656d7b 7fb55cb8 8d7c7ef0 ced6863b 72e4c7b9 574e2998 fcaf465c 0ac59845" + "snaps": "1b4d1c90 fb246339 f1dd6c3a f6d6e05e 52ebafed 068e9a5e 29f24601 932c2a97 8f79d53e 376fa541 2d8ce13d e0ab9b09 87adcf7a a8ebe0bd 0714a18a 50636ff0 5ed52282 d05808ac 964062c6 c6a3ead9" }, "hidden-boss_8-solo": { "about": "假想敌:胄 solo pool 7200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -1238,63 +1273,61 @@ "killed": 12, "total": 12, "unspawned": 0, - "bossHpLeft": 14505955, - "rngDraws": 1001, + "bossHpLeft": 14515498, + "rngDraws": 988, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":358279,"bossDmg":203660,"heal":4886,"deaths":1,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":670269,"bossDmg":490385,"heal":8820,"deaths":8,"layerGains":{}} + "p1": {"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":394375,"bossDmg":227133,"heal":12075,"deaths":0,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":624631,"bossDmg":457370,"heal":8804,"deaths":8,"layerGains":{}} }, "units": [ ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,5,0,0,0,0,0,0], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,9,0,0,0,0,0,0], ["p1",3,"op","chess_char_5_14_b",1,"none",3489.5,1,15,0,0,0,0,0,0], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,17,1,24417,1893,995,40,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1989,1,11,2,129281,0,2712,20,4], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,19,1,62301,949,20,64,6], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,51,2,105321,2848,231,226,6], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,17,2,18626,5825,2147,41,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1989,1,11,2,172080,0,8481,23,6], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,19,2,60569,981,0,64,6], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,21,0,97740,5270,467,222,6], ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,3,0,0,0,0,0,0], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,7,0,0,0,929,2,1], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,13,0,36960,0,0,30,3], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,7,0,0,0,981,1,1], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,13,0,45360,0,0,30,3], ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,6,0,0,0,0,0,0], - ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,54,0,113346,5807,112,174,5], - ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,49,0,4,5859,855,2,2], - ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,50,0,42778,7059,344,190,5], - ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1268.93,1,18,5,204995,2254,745,84,5], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,12,3,160077,0,0,271,4], - ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1449.33,1,20,0,9408,888,673,8,2], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1532.27,1,22,0,50178,6810,6090,122,4], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,4,1,30075,0,0,34,11], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,8,1,59410,0,0,24,6], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,52,0,113544,5807,112,174,5], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,49,0,0,5859,855,0,0], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,44,1,27238,4358,68,23,5], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1135.93,1,18,5,203469,2387,745,84,5], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,12,2,158875,0,0,271,4], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,20,1,11085,2337,673,8,2], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1142.27,1,22,0,50178,7440,6350,122,5], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,4,1,13350,0,0,20,7], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,8,0,46893,0,0,20,5], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,23,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,24,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null] ], "enemies": { - "enemy_1402_tgshd_2": [2,2,0,6652,173864], - "enemy_9010_acpupp": [2,2,0,1619,160520], - "enemy_9021_acduml_2": [1,0,0,0,694045], - "enemy_9022_acdumm": [1,0,0,877,0], - "enemy_9023_acdums": [12,12,0,19360,120] + "enemy_1402_tgshd_2": [2,2,0,6854,173864], + "enemy_9010_acpupp": [2,2,0,6188,160520], + "enemy_9021_acduml_2": [1,0,0,343,684502], + "enemy_9022_acdumm": [1,0,0,453,0], + "enemy_9023_acdums": [12,12,0,20566,120] }, - "hooks": [1,52,6000,1110,1260,2516,2697,5451,25,27,65,62,0,30164,1499,5,18,0,1,27,0,7,1], - "events": {"atk":1215,"deploy":32,"die":27,"dmg":2691,"engage":14,"fx":1023,"heal":31,"skill":127,"spawn":42,"status":602}, + "hooks": [1,50,6000,941,1070,2359,2526,5809,25,26,61,57,0,29827,1409,6,18,0,1,27,0,7,0], + "events": {"atk":1039,"deploy":30,"die":26,"dmg":2515,"engage":13,"fx":1003,"heal":80,"skill":118,"spawn":42,"status":551}, "fx": { "beam": 13, "blink": 2, "burst": 7, - "charge": 2, - "crit": 135, + "crit": 131, "dilemma": 5, - "dodge": 1, "ember": 2, - "explode": 195, - "explosion": 6, - "expose": 200, - "frostNova": 11, + "explode": 191, + "explosion": 5, + "expose": 197, + "frostNova": 7, "garrisonGrant": 1, - "iceSpike": 190, + "iceSpike": 174, "levitate": 5, "phase": 33, "pull": 4, @@ -1305,18 +1338,19 @@ "shield": 1, "shieldBreak": 1, "slippery": 2, + "sp": 2, "splash": 2, "stealth": 5, "summon": 8, - "swordRain": 37, + "swordRain": 11, "swordStorm": 5, "telegraph": 2, - "tornado": 4, + "tornado": 5, "tornadoPulse": 20, "weightless": 6, - "zone": 76 + "zone": 114 }, - "snaps": "069c7e32 c7501279 b8a16379 183de18f 603028d5 6047bb6b 7dcf828f 66417d52 af439cf5 e7cd47f0 519c8da9 23a57b78 b6a29491 1afdf228 1f1c2f89 87c303a4 5772dcce 1ee11042 d00caaad 4e17c1ae" + "snaps": "49432b5c cddad0da 3993b67f fe18e827 e325aa6f e3507596 6dae8854 9ec756b3 f6992ec7 719c1d70 000a8c83 e21724b6 048a2272 e503c179 6ee22b0f 01d2c4eb e4be8103 ce55c589 e0d4a7eb 826b43d7" }, "hidden-boss_10-solo": { "about": "假想敌:管 solo pool 7600000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", diff --git a/test/golden/matches.json b/test/golden/matches.json index e2f8e487..82eb6781 100644 --- a/test/golden/matches.json +++ b/test/golden/matches.json @@ -1468,7 +1468,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 8, "reward": 425, - "stats": {"activatedLayers":2713,"bossDamage":1676605,"dmgDealt":10050362,"gold":153,"itemsEquipped":19,"kills":283,"leaks":6,"lpLost":0,"merges":4,"perfectRounds":12,"refreshes":33}, + "stats": {"activatedLayers":2713,"bossDamage":1778254,"dmgDealt":9818569,"gold":153,"itemsEquipped":19,"kills":282,"leaks":6,"lpLost":0,"merges":4,"perfectRounds":12,"refreshes":33}, "lineup": ["2_18_b@11,5[2_01_e_a+3_03_e_a]","3_13_b@11,8","4_09_a@10,3","3_05_a@10,8[1_01_e_b+4_05_e_b]","3_09_a@9,6","6_16_a@9,7[3_11_e_a+1_02_e_b]","4_20_a@9,8","3_12_a@9,9[4_03_e_a]"], "bonds": ["arcaneShip 1/387","deputShip 0/304","egirShip 1/353","emptyShip 0/300","indomShip 0/300","investShip 0/300","kazimierzShip 1/356","kjeragShip 0/302","lateranoShip 0/300","maniShip 0/300","miraShip 0/300","preciShip 0/318","raidShip 1/330","sargonShip 0/300","siracusaShip 0/300","skillfulShip 1/340","soloShip 1/304","steadShip 1/343","suntShip 1/300","swiftShip 0/302","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"] }, @@ -1482,7 +1482,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 8, "reward": 425, - "stats": {"activatedLayers":2334,"bossDamage":12218936,"dmgDealt":34332028,"gold":157,"itemsEquipped":29,"kills":286,"leaks":3,"lpLost":0,"merges":4,"perfectRounds":11,"refreshes":30}, + "stats": {"activatedLayers":2334,"bossDamage":12117276,"dmgDealt":34476820,"gold":157,"itemsEquipped":29,"kills":286,"leaks":3,"lpLost":0,"merges":4,"perfectRounds":11,"refreshes":30}, "lineup": ["3_16_a@12,8[3_09_e_b+4_07_e_a]","2_10_a@11,5[3_11_e_a+2_03_e_b]","6_05_a@11,8[3_05_e_b+3_10_e_b]","6_08_a@10,3[3_01_e_b+1_01_e_b]","5_11_a@10,4[4_12_e_a+5_09_e_a]","6_14_a@9,7[4_09_e_a+4_04_e_b]","1_06_b@9,8[1_05_e_b+2_01_e_b]","1_17_b@9,9[2_03_e_b+2_03_e_a]"], "bonds": ["arcaneShip 1/330","deputShip 1/326","egirShip 0/300","emptyShip 0/300","indomShip 0/326","investShip 0/300","kazimierzShip 0/305","kjeragShip 0/300","lateranoShip 0/300","maniShip 0/300","miraShip 0/300","preciShip 2/366","raidShip 0/300","sargonShip 0/300","siracusaShip 0/300","skillfulShip 0/300","soloShip 1/316","steadShip 1/340","suntShip 1/310","swiftShip 0/300","victoriaShip 1/346","visiShip 0/300","yanShip 0/305"] } diff --git a/test/sim/feedback5-raid-own-board.test.js b/test/sim/feedback5-raid-own-board.test.js new file mode 100644 index 00000000..1e7a71cc --- /dev/null +++ b/test/sim/feedback5-raid-own-board.test.js @@ -0,0 +1,87 @@ +// test/sim/feedback5-raid-own-board.test.js — 突袭 lands only on its player's own board (community reports of +// 2026-10-06, items 40 and 16.3; DESIGN §25.18): +// 「…新约能天使在开了突袭之后蹦到了下方原本用来临时放置溢出的干员和道具的那一栏高台的最左侧位置」 — on a boss field the +// battle rect (BOSS_RECT rows 0–5) holds the hand row (0) and the 临时整备区 row (1), high ground buildable ALL, so a +// ranged member could land there; +// 「单人联防时突袭也可以跑到对面的场地上」 — on the 联防 map of one helper (escaped_single) the right half (cols 11–18) +// is in the rect but is nobody's board. +// raidTile now takes only tiles of Battle.onOwnBoard: the board region (rows 9–12, cols 2–10) mapped onto the field. +// Run: node --test test/sim/feedback5-raid-own-board.test.js + +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { makeBattle, enemyRec, checkInvariants } from '../helpers/battleHarness.js'; +import { getDefaultSource } from '../../server/sim/simdata.js'; + +const ID = 'chess_char_6_13_a'; // 新约能天使 (RANGED), given the 突袭 bond as the 转职球 / 突袭手雷 would +const raw = getDefaultSource().rawChess(ID); +const raider = { ...raw, bonds: [...raw.bonds, 'raidShip'] }; +const BONDS = { raidShip: { count: 2, active: true, tier: 1, layers: 0 } }; +const dummy = enemyRec({ key: 'dummy', hp: 1e9, speed: 0, mass: 0 }); +const defs = { enemies: { dummy }, chess: { [ID]: raider } }; + +function jump({ kind, stageId, players, enemyPos, seconds = 11 }) { + const h = makeBattle({ kind, stageId, autoFinish: false, timeLimit: 60, defs, players }); + h.step(); + const mine = h.b.allyUnits.filter((u) => u.defId === ID); + const homes = mine.map((u) => [u.tileR, u.tileC]); + h.spawn('dummy', { pos: enemyPos }); + h.run(seconds); + checkInvariants(h.b); + assert.equal(h.b.errors.length, 0, JSON.stringify(h.b.errors[0])); + return { h, mine, homes }; +} +const seat = (playerId, s, o = {}) => ({ playerId, seat: s, side: o.side ?? 'L', colOffset: o.colOffset ?? 0, bonds: BONDS, units: o.units ?? [] }); +const unitAt = (row, col, uid = 1) => ({ uid, kind: 'chess', chessId: ID, row, col }); + +test('boss field (solo 最终攻势): a ranged 突袭 member never lands on the hand row 0 or the 临时整备区 row 1', () => { + // 战场#01: the enemy on the telin (1,3); before the fix the member landed on the hand tile (0,3) + const { h, mine } = jump({ kind: 'boss', stageId: 'act1autochess_m01', players: [seat('p1', 0, { units: [unitAt(12, 3)] })], enemyPos: [1, 3] }); + const u = mine[0]; + assert.deepEqual([u.tileR, u.tileC], [2, 3], 'the board tile next to it, not (0,3)'); + assert.ok(h.b.onOwnBoard(u.player, u.tileR, u.tileC)); + // every row-0 / row-1 tile is off the board, every board tile (rows 2–5, cols 2–10) is on it + for (let c = 0; c <= 20; c++) for (const r of [0, 1]) assert.equal(h.b.onOwnBoard(u.player, r, c), false, `(${r},${c})`); + for (let r = 2; r <= 5; r++) for (let c = 2; c <= 10; c++) assert.equal(h.b.onOwnBoard(u.player, r, c), true, `(${r},${c})`); + for (let r = 2; r <= 5; r++) for (let c = 11; c <= 20; c++) assert.equal(h.b.onOwnBoard(u.player, r, c), false, `(${r},${c}) is the right half`); + // an enemy only the temp row could reach: it stays home and does not hop + const far = jump({ kind: 'boss', stageId: 'act1autochess_m01', players: [seat('p1', 0, { units: [unitAt(12, 3)] })], enemyPos: [0, 9] }); + assert.deepEqual([far.mine[0].tileR, far.mine[0].tileC], far.homes[0]); +}); + +test('boss field pair: the mirrored right player lands on its own half only', () => { + const { h, mine } = jump({ + kind: 'boss', stageId: 'act1autochess_m01', + players: [seat('p1', 0), seat('p2', 1, { side: 'R', units: [unitAt(12, 3)] })], enemyPos: [3, 9], + }); + const u = mine[0]; + assert.equal(u.ownerId, 'p2'); + // the enemy stands on the partner's half next to the middle: the member takes a tile of its own half that reaches it + // (before the fix: (2,9), the partner's road) + assert.ok(u.tileR >= 2 && u.tileC >= 10, `landed on (${u.tileR},${u.tileC})`); + assert.ok(h.b.onOwnBoard(u.player, u.tileR, u.tileC)); + assert.equal(h.b.onOwnBoard(u.player, 3, 5), false, 'the left half is the partner\'s'); + assert.equal(h.b.onOwnBoard(u.player, 3, 15), true); +}); + +test('联防 with one helper (escaped_single): 突袭 does not jump onto the right half', () => { + for (const pos of [[10, 15], [11, 17], [9, 12]]) { + const { h, mine, homes } = jump({ kind: 'unite', stageId: 'act1autochess_escaped_single', players: [seat('H', 0, { units: [unitAt(12, 9)] })], enemyPos: pos }); + const u = mine[0]; + assert.ok(u.tileC <= 10, `enemy ${pos}: landed on (${u.tileR},${u.tileC})`); + assert.ok(h.b.onOwnBoard(u.player, u.tileR, u.tileC), `enemy ${pos}`); + if (pos[1] >= 13) assert.deepEqual([u.tileR, u.tileC], homes[0], `enemy ${pos}: out of reach from the left half, it stays`); + } + // an enemy the left half can reach: it still jumps (onto the left half) + const { mine } = jump({ kind: 'unite', stageId: 'act1autochess_escaped_single', players: [seat('H', 0, { units: [unitAt(12, 3)] })], enemyPos: [9, 9] }); + assert.ok(mine[0].tileC <= 10 && mine[0].tileC >= 7, `landed on (${mine[0].tileR},${mine[0].tileC})`); +}); + +test('联防 with two helpers (escaped_multi): each helper lands on its own half', () => { + const players = [seat('L', 0, { units: [unitAt(12, 3, 1)] }), seat('R', 1, { colOffset: 8, units: [unitAt(12, 9, 2)] })]; + const { h, mine } = jump({ kind: 'unite', stageId: 'act1autochess_escaped_multi', players, enemyPos: [10, 15] }); + const right = mine.find((u) => u.ownerId === 'R'), left = mine.find((u) => u.ownerId === 'L'); + assert.ok(right.tileC >= 11, `the right helper lands on its half: (${right.tileR},${right.tileC})`); + assert.ok(h.b.onOwnBoard(right.player, right.tileR, right.tileC)); + assert.ok(left.tileC <= 10, `the left helper stays on its half: (${left.tileR},${left.tileC})`); +});