From 83fc408a557e96c0f2bb05a0fb5bfc205a0e5e87 Mon Sep 17 00:00:00 2001 From: sganggs Date: Mon, 5 Oct 2026 23:20:56 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feedback4:=20every=20melee=20chess=20whose?= =?UTF-8?q?=20trait=20reads=20=E5=8F=AF=E4=BB=A5=E6=94=BE=E7=BD=AE?= =?UTF-8?q?=E4=BA=8E=E8=BF=9C=E7=A8=8B=E4=BD=8D=20may=20stand=20on=20a=20?= =?UTF-8?q?=E9=AB=98=E5=8F=B0,=20normal=20or=20elite,=20any=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The owner's decision of 2026-10-05 reverses the one of 2026-10-04 (elite 歌蕾蒂娅 with HOK-Y only) and follows PRTS: the line is the 钩索师 / 推击手 branch trait (歌蕾蒂娅, 崖心, 见行者, normal and elite) and every module keeps it, so the loadout no longer matters. Raised with the PRTS source in PR #69 by @sunstricken (its own change covered only 歌蕾蒂娅; its test page is not taken). GitHub #153. - shared/highGround.js: meleeOnHighGround(rec) reads the trait without a module (traitBase, else trait); no module id. - board.js positionClass(rec) widens those six records; placeClass(ps, rec) = positionClass(rec) for every server check (g.move, swaps, merge tile, evictions, audit, invariants). The client's piecePosition mirrors it. - bot.js: the existing 高台 preference (a 高台 whose range covers the road) now applies to all six; comments. - Docs: DESIGN §3 and §6.6, DATA (placement), PLAYING §4, META, research 03 C2, code comments. data/ unchanged (build-data --offline gives identical files). - Tests: board, feedback1-placement (each holder with default / no module / every module on each 高台, a 重装 refused, client highlights, swap, battle, bots), gameLogic. Golden: 16 scenarios moved, every one because tools/golden.mjs lays operators out by positionClass and now places 歌蕾蒂娅 (normal, or elite with HOK-X) beside the enemy path like a ranged operator instead of on the busiest melee tile, which shifts the others: roster-010, roster-012, roster-029, roster-040, roster-041; bond-deputShip-high, bond-indomShip-low, bond-preciShip-low, bond-preciShip-high, bond-suntShip-low, bond-swiftShip-high; boss-boss_2-pair, boss-boss_4-pair, boss-boss_6-pair, hidden-boss_8-pair, hidden-boss_10-pair. roster-031 (elite with HOK-Y, already widened) and all matches are unchanged. --- docs/DATA.md | 2 +- docs/DESIGN.md | 4 +- docs/META.md | 2 +- docs/PLAYING.md | 2 +- docs/research/03-operators.md | 2 +- public/js/ui/gameLogic.js | 15 +- server/match/PlayerState.js | 2 +- server/match/board.js | 47 +-- server/match/bot.js | 11 +- shared/highGround.js | 35 +- test/golden/bonds.json | 210 +++++----- test/golden/fields.json | 528 +++++++++++++------------ test/golden/roster.json | 360 ++++++++--------- test/match/board.test.js | 27 +- test/match/feedback1-placement.test.js | 198 +++++----- test/ui/gameLogic.test.js | 33 +- tools/build-data.mjs | 8 +- tools/golden.mjs | 4 +- 18 files changed, 734 insertions(+), 756 deletions(-) diff --git a/docs/DATA.md b/docs/DATA.md index afa99b0b..ad3d4535 100644 --- a/docs/DATA.md +++ b/docs/DATA.md @@ -150,7 +150,7 @@ Top level: `{ season, seasonName, modes, economy, lpCapPerRound, bossOvertimeAft | `name`, `appellation` | `"隐现"`, `"Insider"` | | | `rarity` | `5` | stars 1–6 | | `profession`, `subProfessionId`, `subProfessionName`, `position` | `"SNIPER"`, `"fastshot"`, `"速射手"`, `"RANGED"` | | -| `placement` | | not stored. A MELEE chess may stand on a 高台 only when it is elite 歌蕾蒂娅 (`char_474_glady`, `isGolden`) carrying HOK-Y 淡金坠饰 (`uniequip_003_glady`), decided at place time from the loadout (`shared/highGround.js`, `board.js placeClass`). The trait 「可以放置于远程位」 is not read. Owner's decision 2026-10-04; §22.6's `placement: "all"` is gone. `position` stays MELEE for the battle | +| `placement` | | not stored. A MELEE chess may also stand on a 高台 when its trait without a module (`traitBase`, else `trait`) reads 「可以放置于远程位」 — the 钩索师 / 推击手 branch trait: 歌蕾蒂娅, 崖心, 见行者, normal and elite; the module does not matter (every module of the three keeps the line). Read at place time (`shared/highGround.js meleeOnHighGround`, `board.js positionClass`); the owner's decision of 2026-10-05, following PRTS (it reverses the 2026-10-04 one: elite 歌蕾蒂娅 with HOK-Y only). `position` stays MELEE for the battle | | `nationId` | `"laterano"` | | | `bonds[]` | `["lateranoShip","swiftShip"]` | bondIds (→ `bonds.json`) | | `garrisonIds[]` | `["garrison_16_b"]` | 特质 (→ `garrisons.json`); first = displayed trait | diff --git a/docs/DESIGN.md b/docs/DESIGN.md index 0e0465f4..a4ef794e 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -131,7 +131,7 @@ Ownership rule for parallel agents: **only edit files assigned to you**; if you - **Partner display** cols 11–18 of rows 9–12 (the unite field uses them). - **Boss field**: rows 1–5; left half cols 2–10, right half cols 10–18. - Enemy preview pen rows 14–18 × cols 7–13 (row 16 empty): during prep the next round's enemies idle there (upper-gate enemies rows 17–18, lower-gate rows 14–15, ≤ 50 models, spawn-time order) — research 08 §4 / 09 §2. -- Tile semantics come from `data/stages.json` legend: height (LOW/HIGH), buildable (ALL/MELEE/RANGED/NONE — the **effective** deploy type: the 深水区 `tile_deepsea` refuses deployment, NONE with the level's `buildableType` ALL kept, PRTS 深水区 地形信息 "拒绝部署(待补充)"; an active 特制水上平台 makes its tile deployable in the prep deploy map only, §21.3), ground-passable, fly-only, special terrain (mire, smog, deepsea, infection). The fenced tiles (围墙 `tile_fence_bound` / 围栏 `tile_fence`, legend `b`: LOW, buildable ALL, passable to flyers only) take units, which attack normally from there but block no ground enemy (PRTS 地形机制, §21.23). Melee chess may stand only on LOW tiles with buildable ALL/MELEE — except elite 歌蕾蒂娅 carrying module HOK-Y 淡金坠饰 (`uniequip_003_glady`), who may use the ranged tiles too (owner's decision 2026-10-04; the branch trait 「可以放置于远程位」 is not read, §22.6 reversed); ranged chess on ALL/RANGED **and** on LOW ALL/MELEE tiles ("所有行动内远程干员可部署在近战位"). Tokens follow their own `position`; a summon marked `ownerRange` (狼群, 流形: "只能部署在召唤者攻击范围内") goes only on a tile of its owner's attack range — the loadout grid rotated by the owner's facing around its tile (`PlayerState.summonRange`, §21.3). +- Tile semantics come from `data/stages.json` legend: height (LOW/HIGH), buildable (ALL/MELEE/RANGED/NONE — the **effective** deploy type: the 深水区 `tile_deepsea` refuses deployment, NONE with the level's `buildableType` ALL kept, PRTS 深水区 地形信息 "拒绝部署(待补充)"; an active 特制水上平台 makes its tile deployable in the prep deploy map only, §21.3), ground-passable, fly-only, special terrain (mire, smog, deepsea, infection). The fenced tiles (围墙 `tile_fence_bound` / 围栏 `tile_fence`, legend `b`: LOW, buildable ALL, passable to flyers only) take units, which attack normally from there but block no ground enemy (PRTS 地形机制, §21.23). Melee chess may stand only on LOW tiles with buildable ALL/MELEE — except a melee chess whose trait reads 「可以放置于远程位」 (the 钩索师 / 推击手 branch trait: 歌蕾蒂娅, 崖心, 见行者, normal and elite, with any module or none), which may use the ranged tiles too (`shared/highGround.js`; the owner's decision of 2026-10-05, following PRTS — it reverses the 2026-10-04 one that allowed only elite 歌蕾蒂娅 with HOK-Y; on a 高台 it attacks and blocks nothing); ranged chess on ALL/RANGED **and** on LOW ALL/MELEE tiles ("所有行动内远程干员可部署在近战位"). Tokens follow their own `position`; a summon marked `ownerRange` (狼群, 流形: "只能部署在召唤者攻击范围内") goes only on a tile of its owner's attack range — the loadout grid rotated by the owner's facing around its tile (`PlayerState.summonRange`, §21.3). - **Facing (corrected, see research 09 §1.2):** like standard Arknights, every board piece has a direction `dir ∈ UP|RIGHT|DOWN|LEFT` chosen with the 4-direction deploy wheel after dropping it on a tile (also re-orientable in place); default `RIGHT`; persists across rounds. Range grid entries are `[dRow, dCol]` relative to facing RIGHT and are rotated: RIGHT `(dr,dc)`, UP `(dc,−dr)`, LEFT `(−dr,−dc)`, DOWN `(−dc,dr)` (row 0 = bottom); `rangeExtend` applies along +dCol before rotating — to a running skill's range too, unless that skill ignores 攻击距离 (`targeting.noRangeExtend`, 信仰搅拌机 S3, §21.16). The right-side Final Assault player is mirrored col `c→20−c` with RIGHT↔LEFT (UP/DOWN unchanged). - **Range test:** an enemy is inside a grid range if the tile containing it (`round(y), round(x)`) is one of the range tiles; a huge enemy (data `hitArea`: 巨型单位, a 4.95 × 2.95 rectangle moved 1.0 up) if any tile its hit rectangle overlaps is one (PRTS 作战机制 "巨型BOSS单位的每一个占据的格子都可以让其本身通过格子判定"; `sim/body.js`, §19.4). Radius ranges (enemies, auras, AoE) use Euclidean distance in tiles — to a huge enemy's rectangle [ASSUMED] — except splash around a struck target, a 中点判定 on positions (PRTS 作战机制 "中点判定…案例:阻挡,酒神1天赋的1.3溅射半径"). A ranged enemy's normal attack takes an ally whose collider (radius 0.25, PRTS 作战机制 §碰撞体积 "我方干员碰撞体积基本均为以0.25格为半径的圆形") touches its range circle: centre distance ≤ `rangeRadius` + 0.25 (`constants.js ALLY_COLLIDER_RADIUS`, `ai.js enemyAttack`; §20.4). - **Fields at runtime:** a `Battle` receives a **field rect** (rows/cols subset) and the full stage grid. Normal battles use rows 9–12 × cols 0–10; unite uses rows 9–12 × cols 0–20; boss uses rows 0–5 × cols 0–20 (solo boss uses the left half only). Pathfinding never leaves the rect. @@ -394,7 +394,7 @@ Per match: pick stage (weighted among the mode's `config.modes[m].stages`, weigh ### 6.6 AI players (bot.js) -Deterministic-ish heuristic player used for (a) AI teammates, (b) auto-play for disconnected humans (only auto-ready + auto-picks, not shopping, unless "AI 托管" is toggled), (c) tests. Strategy (§21.6): pick a band (weighted by starting LP; never one built around a bond the mode switches off — `gd.bandBondIds`, §21.26); each prep: take offers, sell dead bench weight, fill the board, complete affordable merges, level on the curve, then buy only merge progress / lineup upgrades worth more than the refreshes their price would buy (shop odds of completing held pairs), freeze for an unaffordable third copy (坎诺特 keeps 5 funds back); build around a committed focus core bond (a teammate's main bond on its strip counts against it; bonds the mode switches off never) + a second bond; value dealers by DPS vs the round's DEF / RES (an attack on every enemy in range counts double — 阵法术师 / 轰击术师), with the range the unit is deployed with; place by the exposure model + rehearsal on the server's deploy map (no 深水区; a tactician's 援军 within `PlayerState.summonRange`; a 钩索师 / 推击手 on the ground tiles, as a blocker — §22.6; `g.move` judges legality); items by effect (META §1.5: 突变细胞 on the least valuable normal single below 6阶, a cell left in temp gets a hand slot made for it, the operator its transformation gains is deployed by the next prep's lineup step like any owned unit — AI 托管 too; the buy loop's bench shed never sells a piece gained since the bot's last prep, §21.1); 机变 bounties by expected payout − expected LP loss over the offered cards; resolve temp — on a human seat under AI 托管 never by destroying an item while a bench operator can be sold for the slot —; ready. A bot's whole prep — shop decisions and layout planning (`botPrepBeginSteps`, 25–70 ms late in a 4-bot match), the layout rehearsal and `botPrepEndSteps` — runs in wall-clock slices of `botSliceMs` (8 ms) per scheduler callback on a real host (step generators that yield between whole actions, never with a transient board; the same actions in the same order, so decisions are unchanged; at once in virtual time). +Deterministic-ish heuristic player used for (a) AI teammates, (b) auto-play for disconnected humans (only auto-ready + auto-picks, not shopping, unless "AI 托管" is toggled), (c) tests. Strategy (§21.6): pick a band (weighted by starting LP; never one built around a bond the mode switches off — `gd.bandBondIds`, §21.26); each prep: take offers, sell dead bench weight, fill the board, complete affordable merges, level on the curve, then buy only merge progress / lineup upgrades worth more than the refreshes their price would buy (shop odds of completing held pairs), freeze for an unaffordable third copy (坎诺特 keeps 5 funds back); build around a committed focus core bond (a teammate's main bond on its strip counts against it; bonds the mode switches off never) + a second bond; value dealers by DPS vs the round's DEF / RES (an attack on every enemy in range counts double — 阵法术师 / 轰击术师), with the range the unit is deployed with; place by the exposure model + rehearsal on the server's deploy map (no 深水区; a tactician's 援军 within `PlayerState.summonRange`; a melee chess whose trait reads 「可以放置于远程位」 (钩索师 / 推击手) on a 高台 whose range covers the enemy road, else on the ground, counted as a blocker in the lineup either way — §3; `g.move` judges legality); items by effect (META §1.5: 突变细胞 on the least valuable normal single below 6阶, a cell left in temp gets a hand slot made for it, the operator its transformation gains is deployed by the next prep's lineup step like any owned unit — AI 托管 too; the buy loop's bench shed never sells a piece gained since the bot's last prep, §21.1); 机变 bounties by expected payout − expected LP loss over the offered cards; resolve temp — on a human seat under AI 托管 never by destroying an item while a bench operator can be sold for the slot —; ready. A bot's whole prep — shop decisions and layout planning (`botPrepBeginSteps`, 25–70 ms late in a 4-bot match), the layout rehearsal and `botPrepEndSteps` — runs in wall-clock slices of `botSliceMs` (8 ms) per scheduler callback on a real host (step generators that yield between whole actions, never with a transient board; the same actions in the same order, so decisions are unchanged; at once in virtual time). --- diff --git a/docs/META.md b/docs/META.md index 50e97ded..ba6c455b 100644 --- a/docs/META.md +++ b/docs/META.md @@ -12,7 +12,7 @@ server/match/ (data/tuning.json, §3.1) pool.js SharedPool (copies per base chess, across players), per-match bans, copy-weighted rolls board.js placement legality from the stage legend on the deploy field (own board / boss half); a 高台 - also takes elite 歌蕾蒂娅 with HOK-Y (shared/highGround.js), slot helpers, + also takes a melee chess whose trait reads 可以放置于远程位 (shared/highGround.js), slot helpers, reading order (boardOrder), a merge's elite tile in deployment order (mergeTile) bondsMeta.js bond counting modes, tiers, 调和 / 独行 / 助力 / 绝技, layers effectsMeta.js MetaRegistry + EffectDispatcher + the handler ctx (this document, §2) diff --git a/docs/PLAYING.md b/docs/PLAYING.md index 65754748..c29434a0 100644 --- a/docs/PLAYING.md +++ b/docs/PLAYING.md @@ -62,7 +62,7 @@ ## 4. 摆阵与朝向 -- 从整备区把干员拖到棋盘:近战位 / 远程位高亮为可放置格。**只有精锐歌蕾蒂娅、并且装备了模组 HOK-Y「淡金坠饰」,才能放到高台上**;崖心、见行者、没晋升的歌蕾蒂娅、换了别的模组或者不装备模组,都只能放在地面。站在高台上时照常攻击,但不阻挡敌人。**水里不能部署**:战场#08(涨潮控制)中间的那条水池(深水区)和官方一样拒绝部署,任何干员和召唤物都放不上去;突袭盟约的干员再部署、战术家的援军自动选战术点时也只会落在岸上。松手后出现**方向轮盘**,向上 / 右 / 下 / 左滑动,棋盘上会用橙色条纹预览旋转后的攻击范围,松手确认;松在中心或点「✕ 点击取消」取消。 +- 从整备区把干员拖到棋盘:近战位 / 远程位高亮为可放置格。**特性写着「可以放置于远程位」的近战干员(钩索师、推击手:歌蕾蒂娅、崖心、见行者)也能放到高台上**,普通和精锐都可以,装什么模组或者不装模组都一样;其他近战干员只能放在地面。站在高台上时照常攻击,但不阻挡敌人。**水里不能部署**:战场#08(涨潮控制)中间的那条水池(深水区)和官方一样拒绝部署,任何干员和召唤物都放不上去;突袭盟约的干员再部署、战术家的援军自动选战术点时也只会落在岸上。松手后出现**方向轮盘**,向上 / 右 / 下 / 左滑动,棋盘上会用橙色条纹预览旋转后的攻击范围,松手确认;松在中心或点「✕ 点击取消」取消。 - 想只改朝向:把干员拖回它自己所在的格子再选方向。朝向会一直保留到下一回合。 - **点选按地上的方格**:点哪个方格就选中站在那个方格上的单位,点空方格不选任何单位(点到后一格干员画出来的头部,算作点了后面那一格)。作战中友方同样按方格;敌人在格子之间走动,点它的身体或脚下附近(0.6 格内)即可,飞行敌人点它的身体。 - 拖动时模型一直在指针 / 手指下(脚在指针下方约半格,鼠标和触屏一样),**指针所在的格子**就是落点并高亮;装备拖到哪个格子,就配发给那个格子上的干员;在商店栏上松手则放回原位。 diff --git a/docs/research/03-operators.md b/docs/research/03-operators.md index ab5f7b9e..ab20cdc5 100644 --- a/docs/research/03-operators.md +++ b/docs/research/03-operators.md @@ -1981,7 +1981,7 @@ Consequences for the current pool: - Tokens marked `DEFAULT` in `shopStateTokenDict` are these placeable pieces: 医疗探机, 诅咒娃娃, 狼群, 斯卡蒂的海嗣, 流形. `HIDDEN` tokens exist only in battle. - [ASSUMED] Summons do **not** use one of the 8 deploy slots, as in the base game. Keep this as a config flag. - **Battle start:** every board unit deploys for free, in order **从上到下>从左到右** (下半): down each column, the columns left to right (research 01 §4.3). In the boss round the order is mirrored for the right-side player. After that, knocked-out units redeploy automatically on their tile when the respawn timer is done and DP ≥ `cost` (DP starts at 10, +1/s, cap 99). -- **Ranged units may stand on melee tiles** ("所有行动内远程干员可部署在近战位"). Melee units may **not** use ranged-only tiles (HIGH `h`) — except elite 歌蕾蒂娅 carrying HOK-Y 淡金坠饰 (`uniequip_003_glady`). The branch trait 「可以放置于远程位」 (钩索师 / 推击手; PRTS 新人入门 "可部署在高台和地面") is on every variant and is **not** read (owner's decision 2026-10-04, reversing the §22.6 reading of GitHub #32 item 4). 崖心 has only HOK-X; 见行者, a normal record, any other module and no module stay on the ground. Maps: see 05. +- **Ranged units may stand on melee tiles** ("所有行动内远程干员可部署在近战位"). Melee units may **not** use ranged-only tiles (HIGH `h`) — except those whose trait reads 「可以放置于远程位」: the 钩索师 / 推击手 branch trait (歌蕾蒂娅, 崖心, 见行者, normal and elite; PRTS 歌蕾蒂娅 · 特性 and 新人入门 "可部署在高台和地面"), which every module of the three keeps, so any module or none. The owner's decision of 2026-10-05 follows PRTS (raised with the PRTS source in PR #69 by @sunstricken) and reverses the 2026-10-04 one (elite 歌蕾蒂娅 with HOK-Y only). A module's 部署效果 (教官 Y "可以额外部署在远程位") stays off in this mode (PRTS 卫戍协议/帮助 §战斗部署). Maps: see 05. ### C3. Pool membership per match The per-match ban removes every visible chess whose bonds are **all** in the disabled set. The rule is verified; see 01 Addendum A2. Elites of banned chess are also unobtainable. Hidden chess (17) stay out of the shop as §1.2 says. diff --git a/public/js/ui/gameLogic.js b/public/js/ui/gameLogic.js index c4316474..2ee8400d 100644 --- a/public/js/ui/gameLogic.js +++ b/public/js/ui/gameLogic.js @@ -4,8 +4,8 @@ // light legal tiles while dragging; the server stays authoritative and may still refuse a move. // // Board = own normal field (GEO.FIELD rows 9–12, cols 2–10). Melee chess stand on `melee` deploy tiles -// (LOW, buildable ALL/MELEE) — elite 歌蕾蒂娅 carrying HOK-Y (shared/highGround.js, the player's loadout) on any -// deploy tile, the 高台 included (piecePosition 'ALL'); ranged chess on `melee ∪ rangedOnly` (stages.json → deployTiles.normal, +// (LOW, buildable ALL/MELEE) — a melee chess whose trait reads 「可以放置于远程位」 (shared/highGround.js: 歌蕾蒂娅, 崖心, +// 见行者, any module) on any deploy tile, the 高台 included (piecePosition 'ALL'); ranged chess on `melee ∪ rangedOnly` (stages.json → deployTiles.normal, // derived from the tile legend when missing — the legend's `buildable` is the effective type: 深水区 tile_deepsea // refuses deployment, PRTS 深水区 地形信息 "拒绝部署(待补充)", player report #3 after 0.1.0). Tokens follow their // own `position`; a summon whose text reads "只能部署在召唤者攻击范围内" (tokens.json `ownerRange`: 伺夜's 狼群, @@ -1049,17 +1049,16 @@ export function placementContext({ priv, stage, editable, field = 'normal', getC } /** - * Deploy position ('MELEE'|'RANGED'|'ALL') of a chess/token piece, or null for items. Elite 歌蕾蒂娅 carrying HOK-Y - * (the viewer's loadout, shared/highGround.js) is 'ALL': any deployable tile, the 高台 included - * (server/match/board.js placeClass; owner's decision 2026-10-04). Every other MELEE chess is ground-only. + * Deploy position ('MELEE'|'RANGED'|'ALL') of a chess/token piece, or null for items. A MELEE chess whose trait reads + * 「可以放置于远程位」 (shared/highGround.js: 歌蕾蒂娅, 崖心, 见行者, normal and elite, any module) is 'ALL': any deployable + * tile, the 高台 included (server/match/board.js positionClass; the owner's decision of 2026-10-05). Every other MELEE + * chess is ground-only. */ export function piecePosition(ctx, piece) { if (!isObj(piece)) return null; if (piece.kind === 'chess') { const rec = ctx.getChess(piece.id); - let moduleId = null; - try { moduleId = resolveLoadout(ctx.priv?.loadout ?? null, rec, ctx.getChess)?.moduleId ?? null; } catch { moduleId = null; } - if (meleeOnHighGround(rec, moduleId)) return 'ALL'; + if (meleeOnHighGround(rec)) return 'ALL'; return rec?.position === 'MELEE' ? 'MELEE' : 'RANGED'; } // tokens: MELEE → ground only; RANGED / ALL → any deployable tile diff --git a/server/match/PlayerState.js b/server/match/PlayerState.js index c364935f..8ba8af64 100644 --- a/server/match/PlayerState.js +++ b/server/match/PlayerState.js @@ -1012,7 +1012,7 @@ export class PlayerState { _placementOf(piece) { const rec = piece.kind === 'token' ? this.gd.token(piece.id) : this.gd.chess(piece.id); - // elite 歌蕾蒂娅 + HOK-Y may use a 高台; the module is this player's loadout (owner's decision 2026-10-04) + // a melee chess whose trait reads 「可以放置于远程位」 may use a 高台, whatever its module (shared/highGround.js) return placeClass(this, rec); } diff --git a/server/match/board.js b/server/match/board.js index 5bd8067f..5a48248d 100644 --- a/server/match/board.js +++ b/server/match/board.js @@ -4,8 +4,8 @@ // stage legend (data/stages.json `tiles[glyph]`: height + buildable) and the stage devices: // 'melee' — LOW tile with buildable ALL/MELEE, or a 深水区 under an active 特制水上平台 (waterPlatform, "在水上建立可以 // 部署任意单位的平台"): melee AND ranged chess may stand here ("所有行动内远程干员可部署在近战位"). -// 'ranged' — HIGH tile with buildable ALL/RANGED, or a tile under an active platform (射击台): ranged only (and elite -// 歌蕾蒂娅 carrying HOK-Y, placeClass below). +// 'ranged' — HIGH tile with buildable ALL/RANGED, or a tile under an active platform (射击台): ranged only (and the +// melee chess whose trait reads 「可以放置于远程位」, positionClass below). // (absent) — not deployable (NONE, forbidden, road lanes, tiles under active crates/mounds, the 深水区 — the legend's // `buildable` is the effective type: tile_deepsea refuses deployment, PRTS 深水区 地形信息 // "拒绝部署(待补充)", although its level buildableType is ALL; player report #3 after 0.1.0, 战场#08's @@ -23,10 +23,10 @@ // (10–12, 8), which are '#' on the normal field. The result equals stages[id].deployTiles.bossLeft / bossRight // mapped to board coordinates (test/match/playtest5-deploy.test.js). // -// Chess follow their `position` (MELEE ⇒ melee tiles, RANGED ⇒ any deployable), except elite 歌蕾蒂娅 carrying module -// HOK-Y 淡金坠饰 (uniequip_003_glady: `placeClass` / shared/highGround.js ⇒ any deployable tile). The branch trait -// 「可以放置于远程位」 is not read (owner's decision 2026-10-04, reversing DESIGN §22.6): 崖心, 见行者, a normal record, -// any other module and no module are ground-only. The equipped module is the player's loadout at place time. +// Chess follow their `position` (MELEE ⇒ melee tiles, RANGED ⇒ any deployable), except a MELEE chess whose trait reads +// 「可以放置于远程位」 — the 钩索师 / 推击手 branch trait: 歌蕾蒂娅, 崖心, 见行者, normal and elite, any module or none +// (shared/highGround.js ⇒ any deployable tile; the owner's decision of 2026-10-05, following PRTS). The loadout does +// not change the class. // Tokens follow their own `position` (ALL ⇒ any deployable tile, MELEE ⇒ melee tiles, RANGED ⇒ any deployable). // A token whose text reads "只能部署在召唤者攻击范围内" (tokens.json `ownerRange`: the tacticians' 援军 — 伺夜's 狼群, // 缪尔赛思's 流形; PRTS 狼群 特性) also needs a tile of its owner's attack range: `ownerRangeKeys` = the owner's range @@ -135,37 +135,30 @@ export function buildDeployMap(stage, { deviceOverrides = {}, tileOverrides = {} } /** - * Placement class of a chess / token record: 'melee' | 'ranged' | 'all'. Widened to 'all' only for elite 歌蕾蒂娅 - * carrying HOK-Y (`moduleId` = uniequip_003_glady, shared/highGround.js): she may stand on the ranged (高台) tiles. - * Any other module, no module, and every other MELEE record stay 'melee'. `chess.json` has no `placement` field. + * Placement class of a chess / token record: 'melee' | 'ranged' | 'all'. A MELEE chess whose trait reads + * 「可以放置于远程位」 (shared/highGround.js: 歌蕾蒂娅, 崖心, 见行者, normal and elite) is widened to 'all': it may also + * stand on the ranged (高台) tiles. Every other MELEE record stays 'melee'. `chess.json` has no `placement` field. * @param {object|null} rec - * @param {string|null} [moduleId] equipped module; ignored for tokens and non-golden records */ -export function positionClass(rec, moduleId = null) { - return meleeOnHighGround(rec, moduleId) ? 'all' : basePositionClass(rec); +export function positionClass(rec) { + return meleeOnHighGround(rec) ? 'all' : basePositionClass(rec); } /** - * Placement class of a record under a player's loadout (the module `ps.loadoutFor` resolves, defaults included). - * Tokens and records without a chess id ignore the loadout. - * @param {{ loadoutFor?: (rec: object) => { moduleId?: string|null }|null }|null} ps + * Placement class of a record on a player's board — the server's single entry point for pieces (g.move, swaps, merges, + * the audit, the invariants, the bot). Since the owner's decision of 2026-10-05 the player's loadout no longer changes + * it (any module, or none), so this is `positionClass(rec)`. + * @param {object|null} _ps the player (unused) + * @param {object|null} rec */ -export function placeClass(ps, rec) { - if (!rec || !rec.chessId || !ps || typeof ps.loadoutFor !== 'function') return positionClass(rec); - let moduleId = null; - try { - const lo = ps.loadoutFor(rec); - moduleId = lo && typeof lo.moduleId === 'string' ? lo.moduleId : null; - } catch { - moduleId = null; - } - return positionClass(rec, moduleId); +export function placeClass(_ps, rec) { + return positionClass(rec); } /** * The record's own position class ('melee' | 'ranged' | 'all'), without the placement widening — the class the battle - * plays (a MELEE operator still blocks on a ground tile; on a 高台 it blocks nothing): the bots' blocker test and the - * tiles they plan for it (bot.js). + * plays (a MELEE operator still blocks on a ground tile; on a 高台 it blocks nothing): the bots' blocker test and their + * 高台 preference for a widened melee chess (bot.js isBlocker / planLayoutSteps). */ export function basePositionClass(rec) { const p = rec && typeof rec.position === 'string' ? rec.position.toUpperCase() : 'ALL'; diff --git a/server/match/bot.js b/server/match/bot.js index 1e2eab83..dea8b04f 100644 --- a/server/match/bot.js +++ b/server/match/bot.js @@ -34,8 +34,10 @@ // covering units against the round's DEF / RES, blocker hold time, flyers only for anti-air) is maximized // greedily — blockers first, then damage dealers by DPS, then healers — over every // (legal tile, direction) pair of the server's deploy map (no 深水区). A MELEE operator is planned on the ground -// tiles, where it blocks — except elite 歌蕾蒂娅 carrying HOK-Y, who may also take a 高台 (placeClass; owner's -// decision 2026-10-04). She stays a blocker in the lineup (basePositionClass). Each unit's range grid — the one it is +// tiles, where it blocks — except one whose trait reads 「可以放置于远程位」 (歌蕾蒂娅, 崖心, 见行者, any module: +// placeClass 'all', shared/highGround.js), which takes a 高台 whose range covers the enemy road, else the ground +// (owner 2026-10-04 for the 高台 preference, 2026-10-05 for who may use one). It stays a blocker in the lineup +// (basePositionClass). Each unit's range grid — the one it is // deployed with, rangeRec (loadoutRecord attackRangeGrid) — is rotated per direction (DESIGN §3; RIGHT is tried first // and kept on ties, so symmetric ranges and melee units whose front adds nothing stay facing the gates), so // ranged units turn toward the enemy path tiles they cover best and blockers toward the road; on 气流 tiles @@ -949,8 +951,9 @@ export function* planLayoutSteps(m, ps, pieces, params = LAYOUT_PARAMS, { occupi let bestV = -Infinity; // a "只能部署在召唤者攻击范围内" summon (伺夜's 狼群, 缪尔赛思's 流形): only the tiles of its owner's range const within = p.kind === 'token' && typeof ps.summonRange === 'function' ? ps.summonRange(p) : null; - // ground tiles for a MELEE blocker. placeClass 'all' is only elite 歌蕾蒂娅 + HOK-Y: she may stand on a 高台, - // and when one of those tiles covers the enemy road she is planned there (owner 2026-10-04: the bot uses the 高台). + // ground tiles for a MELEE blocker. placeClass 'all' on a MELEE record is a chess whose trait reads 「可以放置于远程位」 + // (歌蕾蒂娅, 崖心, 见行者, any module): it may stand on a 高台, and when one of those tiles covers the enemy road it is + // planned there even with the ground free (owner 2026-10-04: the bot uses the 高台; 2026-10-05: every such chess). const cls = p.kind === 'token' ? basePositionClass(r0) : placeClass(ps, m.gd.chess(p.id) || r0); const preferHigh = cls === 'all' && basePositionClass(r0) === 'melee'; let bestHigh = null; diff --git a/shared/highGround.js b/shared/highGround.js index cf379cfb..ff025a14 100644 --- a/shared/highGround.js +++ b/shared/highGround.js @@ -1,21 +1,32 @@ // shared/highGround.js — which MELEE chess may stand on a 高台 (a ranged deploy tile). // -// Owner's decision 2026-10-04, reversing DESIGN §22.6. The branch trait 「可以放置于远程位」 is written on -// every 钩索师 / 推击手 variant (歌蕾蒂娅, 崖心, 见行者, normal and elite) and is not trusted. Only elite -// 歌蕾蒂娅 carrying module HOK-Y 淡金坠饰 may use a ranged tile. 崖心 (HOK-X only), 见行者, a normal -// record, any other module, and no module are ground-only. The golden record is the elite (`isGolden`); -// the same module test applies to it. A missing module id is ground-only. +// The owner's decision of 2026-10-05, reversing the one of 2026-10-04 (elite 歌蕾蒂娅 with HOK-Y only): follow PRTS. A +// MELEE chess whose trait reads 「可以放置于远程位」 may stand on a 高台 as well as on the ground. The line is the 钩索师 / +// 推击手 branch trait (PRTS 歌蕾蒂娅 · 特性, raised with the PRTS source in PR #69 by @sunstricken; PRTS 新人入门: both +// branches "可部署在高台和地面"): 歌蕾蒂娅, 崖心 and 见行者, normal and elite. It is the branch's own text, not a module +// effect — every module of the three keeps it — so the loadout does not matter: any module, or none. The text read is +// the record's trait without a module (`traitBase`, which an elite with modules carries; else `trait`). A module talent +// such as the 教官's Y module ("可以额外部署在远程位") is a 部署效果, which 卫戍协议 switches off (PRTS 卫戍协议/帮助 +// §战斗部署), and is not read. The battle keeps position MELEE: on a 高台 the unit attacks and blocks nothing. -/** char_474_glady — 歌蕾蒂娅. */ -export const GLADIIA_CHAR_ID = 'char_474_glady'; -/** HOK-Y 淡金坠饰 (data/chess.json chess_char_4_12_b.modules, typeName HOK-Y). */ -export const GLADIIA_HOK_Y = 'uniequip_003_glady'; +/** The trait line that lets a MELEE chess stand on a ranged (高台) tile. */ +export const PLACE_ON_RANGED = '可以放置于远程位'; /** + * The record's trait text without a module ('' when it has none). + * @param {object|null} rec a chess record + * @returns {string} + */ +export function baseTraitText(rec) { + const t = rec ? rec.traitBase || rec.trait : null; + return t && typeof t.desc === 'string' ? t.desc : ''; +} + +/** + * Whether a MELEE chess record may also stand on a 高台: its trait reads 「可以放置于远程位」. Normal or elite, any module. * @param {object|null} rec a chess record (normal or golden) - * @param {string|null|undefined} moduleId the equipped module (`resolveLoadout().moduleId`) * @returns {boolean} */ -export function meleeOnHighGround(rec, moduleId) { - return !!(rec && rec.isGolden === true && rec.charId === GLADIIA_CHAR_ID && moduleId === GLADIIA_HOK_Y); +export function meleeOnHighGround(rec) { + return !!rec && rec.position === 'MELEE' && baseTraitText(rec).includes(PLACE_ON_RANGED); } diff --git a/test/golden/bonds.json b/test/golden/bonds.json index 5e64df21..278901c7 100644 --- a/test/golden/bonds.json +++ b/test/golden/bonds.json @@ -122,7 +122,7 @@ "snaps": "b677776a 05df3ce3 3f4ea1ef 7c86ba28 c343548f 5e5789b8" }, "bond-deputShip-high": { - "about": "助力 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_12_b chess_char_1_06_b chess_char_1_13_b chess_char_2_14_b chess_char_1_06_a chess_char_1_13_a chess_char_4_10_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "助力 high: tier 2 layers 999; chess_char_4_11_b chess_char_1_06_b chess_char_1_13_b chess_char_2_14_b chess_char_1_06_a chess_char_1_13_a chess_char_4_10_b chess_char_4_12_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": true, "kind": "normal", "stageId": "act2autochess_m03", @@ -130,8 +130,8 @@ "round": 10, "seed": 1208009840, "waveId": "act1autochess_h03", - "time": 101.97, - "ticks": 3059, + "time": 98.27, + "ticks": 2948, "reason": "cleared", "killed": 8, "total": 8, @@ -139,27 +139,27 @@ "bossHpLeft": null, "rngDraws": 1, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":129773,"bossDmg":0,"heal":7530,"deaths":0,"layerGains":{}}}, + "players": {"p1":{"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":129773,"bossDmg":0,"heal":7138,"deaths":0,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,5,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,6,0,14088,0,0,8,1], - ["p1",3,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1044.45,1,7,4,47025,6060,2478,45,3], - ["p1",4,"op","chess_char_1_13_b",1,"uniequip_002_podego",815.5,1,9,1,36853,0,0,38,5], - ["p1",5,"op","chess_char_2_14_b",1,"uniequip_002_flower",1544,1,10,0,0,160,4465,22,2], - ["p1",6,"op","chess_char_1_06_a",1,null,1137,1,11,1,21655,1572,587,40,1], - ["p1",7,"op","chess_char_1_13_a",1,null,913,1,4,0,870,0,0,1,1], - ["p1",8,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,8,1,9282,95,0,7,2], + ["p1",2,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1017.15,1,7,2,42201,5880,2440,41,3], + ["p1",3,"op","chess_char_1_13_b",1,"uniequip_002_podego",815.5,1,9,1,34934,0,0,35,5], + ["p1",4,"op","chess_char_2_14_b",1,"uniequip_002_flower",1544,1,10,0,0,0,4084,19,1], + ["p1",5,"op","chess_char_1_06_a",1,null,1137,1,11,1,21655,1548,587,40,1], + ["p1",6,"op","chess_char_1_13_a",1,null,913,1,4,0,0,0,0,0,0], + ["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,8,1,12717,64,0,9,2], + ["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,6,2,18266,31,28,10,1], ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null], ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], - "enemies": {"enemy_1005_yokai_2":[4,4,0,96,5357],"enemy_1005_yokai_3":[2,2,0,1022,69120],"enemy_9009_acfort":[2,2,0,709,55296]}, - "hooks": [1,21,3059,230,230,369,369,234,8,8,15,12,0,11504,115,0,8,0,1,7,0,0,0], - "events": {"atk":230,"deploy":10,"die":8,"dmg":369,"fx":37,"heal":205,"skill":27,"spawn":21,"status":84}, - "fx": {"beam":2,"counter":16,"pull":1,"slippery":2,"taunt":4,"tornado":1,"tornadoPulse":5,"zone":6}, - "snaps": "f7c1fb30 f778388d 11849b13 7f8feebb 1cf8e108 fe9861c9 f8b5d1a0 8331d55b 5e3c8779 87f00fe0 a72ffac2" + "enemies": {"enemy_1005_yokai_2":[4,4,0,96,5357],"enemy_1005_yokai_3":[2,2,0,862,69120],"enemy_9009_acfort":[2,2,0,685,55296]}, + "hooks": [1,21,2948,217,217,357,357,231,8,8,13,11,0,11234,107,0,8,0,1,7,0,0,0], + "events": {"atk":217,"deploy":10,"die":8,"dmg":357,"fx":36,"heal":189,"skill":24,"spawn":21,"status":80}, + "fx": {"beam":2,"counter":16,"pull":1,"slippery":2,"taunt":4,"tornado":1,"tornadoPulse":5,"zone":5}, + "snaps": "f66ffc26 0aedc293 48dbf768 e46fb28f af06619a 9bc3f9d6 ea76c807 fc688b81 22b52f32 978323eb" }, "bond-egirShip-low": { "about": "阿戈尔 low: tier 1 layers 1; chess_char_1_04_a chess_char_3_16_a chess_char_2_07_a chess_char_3_18_a chess_char_3_05_a chess_char_3_14_a chess_char_3_17_a chess_char_3_19_a token_10028_vigil_wolf", @@ -321,7 +321,7 @@ "snaps": "48d2a0bc 7a5c72a3 804d5560 8c6ca634 c9bf651b 26081476 486ac1ff 38cf6fca 1c52bb36 3480567c b20bd7bb 65dfc07e" }, "bond-indomShip-low": { - "about": "不屈 low: tier 1 layers 1; chess_char_1_20_a chess_char_4_11_a chess_char_4_12_a chess_char_2_12_a chess_char_4_09_a chess_char_4_10_a chess_char_4_13_a chess_char_4_14_a token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "不屈 low: tier 1 layers 1; chess_char_1_20_a chess_char_4_11_a chess_char_2_12_a chess_char_4_09_a chess_char_4_10_a chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "normal", "stageId": "act1autochess_m03", @@ -329,36 +329,38 @@ "round": 5, "seed": 1441167629, "waveId": "act1autochess_05", - "time": 54.53, - "ticks": 1636, + "time": 62.9, + "ticks": 1887, "reason": "cleared", "killed": 18, "total": 18, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 17, + "rngDraws": 12, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":18,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":86976,"bossDmg":0,"heal":245,"deaths":3,"layerGains":{"indomShip":2}}}, + "players": { + "p1": {"killed":18,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":86976,"bossDmg":0,"heal":1462,"deaths":3,"layerGains":{"indomShip":2}} + }, "units": [ - ["p1",1,"op","chess_char_1_20_a",1,null,2198,1,4,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_11_a",1,null,2144,1,5,0,0,0,0,0,0], - ["p1",3,"op","chess_char_4_12_a",2,null,1311.76,1,7,2,11330,687,245,24,1], - ["p1",4,"op","chess_char_2_12_a",1,null,668.98,1,34,1,945,1545,0,22,2], - ["p1",5,"op","chess_char_4_09_a",1,null,1909.15,1,10,8,39617,228,0,16,2], - ["p1",6,"op","chess_char_4_10_a",1,null,1029.36,1,6,6,16627,259,0,17,1], - ["p1",7,"op","chess_char_4_13_a",1,null,0,0,9,0,13012,1587,0,22,5], - ["p1",8,"op","chess_char_4_14_a",1,null,0,0,11,1,5446,1276,0,8,1], + ["p1",1,"op","chess_char_1_20_a",1,null,1148.2,1,5,0,354,1050,0,21,0], + ["p1",2,"op","chess_char_4_11_a",1,null,0,0,6,0,0,3002,0,0,1], + ["p1",3,"op","chess_char_2_12_a",1,null,1107,1,34,0,141,1107,0,8,2], + ["p1",4,"op","chess_char_4_09_a",1,null,1978.85,1,9,7,39160,159,0,13,1], + ["p1",5,"op","chess_char_4_10_a",1,null,1288,1,7,4,22387,0,0,17,1], + ["p1",6,"op","chess_char_4_12_a",2,null,802.65,1,10,0,0,2414,1462,0,0], + ["p1",7,"op","chess_char_4_13_a",1,null,0,0,11,0,6895,1587,0,13,2], + ["p1",8,"op","chess_char_4_14_a",1,null,1276,1,4,7,18039,0,0,11,4], ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null], ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], - "enemies": {"enemy_1158_divman":[15,15,0,2779,57024],"enemy_1160_hvyslr":[2,2,0,1458,23040],"enemy_1161_tidmag":[1,1,0,1346,6912]}, - "hooks": [1,32,1636,158,158,248,250,168,21,21,12,10,0,5617,221,3,18,0,1,21,1,0,7], - "events": {"atk":195,"deploy":11,"die":21,"dmg":245,"fx":44,"layer":1,"skill":22,"spawn":31,"status":97}, - "fx": {"dilemma":2,"displace":8,"dodge":7,"explosion":1,"frostNova":5,"garrison":1,"levitate":7,"pull":1,"revive":1,"shield":2,"slippery":1,"splash":2,"tornado":1,"tornadoPulse":5}, - "snaps": "8db24db5 69482d02 bf502995 575947d9 47ac9ccf a8929550" + "enemies": {"enemy_1158_divman":[15,15,0,2085,57024],"enemy_1160_hvyslr":[2,2,0,4543,23040],"enemy_1161_tidmag":[1,1,0,2691,6912]}, + "hooks": [1,32,1887,159,159,249,257,1001,21,21,11,11,0,5499,102,7,18,0,1,21,1,1,3], + "events": {"atk":207,"deploy":11,"die":21,"dmg":257,"fx":25,"layer":1,"skill":22,"spawn":31,"status":80}, + "fx": {"burst":1,"dilemma":1,"dodge":3,"explosion":4,"frostNova":2,"garrison":1,"levitate":7,"overclock":1,"shield":2,"slippery":1,"splash":2}, + "snaps": "910f43b9 691d4675 c5aa756a 98b2fa4d ce14416b c2b3dc9f f49377cb" }, "bond-indomShip-high": { "about": "不屈 high: tier 2 layers 999; chess_char_1_20_b chess_char_3_16_b chess_char_4_23_b chess_char_5_01_b chess_char_2_12_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -853,7 +855,7 @@ "snaps": "d2b18fc5 bd98a396 2815c1da cd98bca5 f9430f26 13b06e1e c8764716 073aa206 ddb6d29d c8d7eba3 26ac5044 a58c61f6 2c76342d ae7f4a4d 301020be c76c6184" }, "bond-preciShip-low": { - "about": "精准 low: tier 1 layers 1; chess_char_4_11_a chess_char_4_12_a chess_char_4_04_a chess_char_4_07_a chess_char_4_09_a chess_char_1_09_a chess_char_1_17_a chess_char_4_10_a token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "精准 low: tier 1 layers 1; chess_char_4_11_a chess_char_4_04_a chess_char_4_07_a chess_char_4_09_a chess_char_1_09_a chess_char_1_17_a chess_char_4_10_a chess_char_4_12_a token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "normal", "stageId": "act1autochess_m01", @@ -861,8 +863,8 @@ "round": 5, "seed": 2452926770, "waveId": "act1autochess_05", - "time": 50.6, - "ticks": 1518, + "time": 56.8, + "ticks": 1704, "reason": "cleared", "killed": 21, "total": 21, @@ -870,30 +872,30 @@ "bossHpLeft": null, "rngDraws": 23, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":71891,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"visiShip":6}}}, + "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":73125,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"visiShip":6}}}, "units": [ ["p1",1,"op","chess_char_4_11_a",1,null,2144,1,6,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_12_a",2,null,1754,1,7,3,12820,0,0,14,1], - ["p1",3,"op","chess_char_4_04_a",1,null,1748.07,1,8,4,11117,12,0,34,1], - ["p1",4,"op","chess_char_4_07_a",1,null,840,1,10,4,7317,898,0,22,6], - ["p1",5,"op","chess_char_4_09_a",1,null,2137.6,1,11,8,25814,0,0,14,2], - ["p1",6,"op","chess_char_1_09_a",1,null,1770,1,4,0,533,0,0,1,0], - ["p1",7,"op","chess_char_1_17_a",1,null,1139,1,5,1,1670,0,0,1,0], - ["p1",8,"op","chess_char_4_10_a",1,null,1288,1,9,1,12621,0,0,12,1], - ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null], - ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null], + ["p1",2,"op","chess_char_4_04_a",1,null,1760,1,7,3,4947,0,0,28,1], + ["p1",3,"op","chess_char_4_07_a",1,null,840,1,8,3,6402,898,0,23,5], + ["p1",4,"op","chess_char_4_09_a",1,null,2137.6,1,10,10,33856,0,0,18,2], + ["p1",5,"op","chess_char_1_09_a",1,null,1770,1,4,0,0,0,0,0,0], + ["p1",6,"op","chess_char_1_17_a",1,null,1139,1,5,0,0,0,0,0,0], + ["p1",7,"op","chess_char_4_10_a",1,null,1288,1,9,2,10099,0,0,11,1], + ["p1",8,"op","chess_char_4_12_a",2,null,1754,1,11,3,17821,0,0,19,1], + ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null], + ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], - "enemies": {"enemy_1249_lysdb_2":[5,5,0,0,27000],"enemy_1251_lysyta":[15,15,0,12,37125],"enemy_1328_cbjedi":[1,1,0,898,9000]}, - "hooks": [1,34,1518,101,101,163,158,0,21,21,11,9,0,6597,32,2,21,0,1,21,3,0,0], - "events": {"atk":122,"deploy":10,"die":21,"dmg":158,"fx":64,"layer":3,"skill":20,"spawn":34,"status":49}, - "fx": {"charge":6,"dilemma":2,"displace":13,"garrison":3,"levitate":11,"pull":1,"shadowWeave":13,"shieldBreak":5,"slippery":1,"splash":2,"stealth":1,"tornado":1,"tornadoPulse":5}, - "snaps": "e57ceca7 ee1e6d01 b4685d91 00468627 a46c574e" + "enemies": {"enemy_1249_lysdb_2":[5,5,0,0,27000],"enemy_1251_lysyta":[15,15,0,0,37125],"enemy_1328_cbjedi":[1,1,0,898,9000]}, + "hooks": [1,34,1704,101,101,161,156,0,21,21,10,8,0,6803,29,1,21,0,1,21,3,0,0], + "events": {"atk":125,"deploy":10,"die":21,"dmg":156,"fx":59,"layer":3,"skill":18,"spawn":34,"status":46}, + "fx": {"charge":5,"dilemma":2,"displace":14,"garrison":3,"levitate":11,"pull":1,"shadowWeave":8,"shieldBreak":5,"slippery":1,"splash":2,"stealth":1,"tornado":1,"tornadoPulse":5}, + "snaps": "c27c0600 6b7bfecf d505aebd b3d60eec b1e621c0 52cc3598" }, "bond-preciShip-high": { - "about": "精准 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_12_b chess_char_4_09_b chess_char_1_09_b chess_char_1_17_b chess_char_2_01_b chess_char_4_10_b chess_char_4_13_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "精准 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_09_b chess_char_1_09_b chess_char_1_17_b chess_char_2_01_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": true, "kind": "normal", "stageId": "act1autochess_m04", @@ -908,29 +910,29 @@ "total": 24, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 19, + "rngDraws": 21, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":144083,"bossDmg":0,"heal":0,"deaths":2,"layerGains":{}}}, + "players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":144293,"bossDmg":0,"heal":1227,"deaths":2,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1261.53,1,8,0,0,2143,0,0,1], - ["p1",2,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,6,0,0,0,0,0,0], - ["p1",3,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",3992.8,1,9,0,17552,0,0,7,1], - ["p1",4,"op","chess_char_1_09_b",1,"uniequip_002_caper",3876.25,1,4,10,33806,0,0,13,1], - ["p1",5,"op","chess_char_1_17_b",1,"uniequip_002_indigo",1356,1,5,0,0,0,0,5,1], - ["p1",6,"op","chess_char_2_01_b",1,"uniequip_002_excu",0,0,11,6,38016,2146,0,6,1], - ["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,7,5,52591,0,0,7,1], - ["p1",8,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,10,3,2118,1989,0,0,3], + ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1459,1,8,0,0,1837,0,0,1], + ["p1",2,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",3992.8,1,6,0,0,0,0,0,0], + ["p1",3,"op","chess_char_1_09_b",1,"uniequip_002_caper",3876.25,1,4,12,50704,0,0,12,1], + ["p1",4,"op","chess_char_1_17_b",1,"uniequip_002_indigo",1356,1,5,0,0,0,0,8,1], + ["p1",5,"op","chess_char_2_01_b",1,"uniequip_002_excu",0,0,11,6,38016,2146,0,6,1], + ["p1",6,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,7,5,53097,0,0,7,1], + ["p1",7,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,9,0,948,1227,1227,2,1], + ["p1",8,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,10,1,1527,1989,0,0,1], ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null], ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], - "enemies": {"enemy_1019_jshoot_2":[7,7,0,4441,21773],"enemy_1299_ymkilr_2":[3,3,0,1837,38016],"enemy_1422_lrsldr_2":[14,14,0,0,88704]}, - "hooks": [1,37,2071,84,84,151,151,0,26,26,9,8,0,4304,189,10,24,0,1,26,0,0,0], - "events": {"atk":85,"deploy":10,"die":26,"dmg":151,"fx":17,"skill":17,"spawn":37,"status":13}, - "fx": {"crit":2,"dilemma":1,"frostNova":3,"levitate":7,"overclock":1,"slippery":1,"strike":2}, - "snaps": "88ecbc01 8a1ee02f cd042d3b 73363111 6ff4e2d8 de909066 a4a9c65d" + "enemies": {"enemy_1019_jshoot_2":[7,7,0,3373,21773],"enemy_1299_ymkilr_2":[3,3,0,1837,38016],"enemy_1422_lrsldr_2":[14,14,0,0,88704]}, + "hooks": [1,37,2071,84,84,166,166,663,26,26,7,6,0,4290,103,10,24,0,1,26,0,0,0], + "events": {"atk":84,"deploy":10,"die":26,"dmg":166,"fx":21,"skill":13,"spawn":37,"status":10}, + "fx": {"crit":2,"frostNova":1,"levitate":7,"overclock":1,"pull":1,"slippery":1,"strike":2,"tornado":1,"tornadoPulse":5}, + "snaps": "1c35197a b5a550c2 449f2d84 3e5d7032 3c466668 15903287 c2362cab" }, "bond-raidShip-low": { "about": "突袭 low: tier 1 layers 1; chess_char_4_17_a chess_char_4_18_a chess_char_2_09_a chess_char_4_19_a chess_char_1_18_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a", @@ -1416,7 +1418,7 @@ "snaps": "d1a4c271 3f59c254 aa4de239 40a5e684 b35896d7 c3fa7c5d 3d19b457 305a5a12 0cbbe4fe 220ff09a d4060b93 f4a07a32 b6167539" }, "bond-suntShip-low": { - "about": "绝技 low: tier 1 layers 1; chess_char_1_02_b chess_char_4_17_a chess_char_4_18_a chess_char_4_12_a chess_char_4_16_a chess_char_1_01_b chess_char_4_13_a chess_char_4_14_a", + "about": "绝技 low: tier 1 layers 1; chess_char_1_02_b chess_char_4_17_a chess_char_4_18_a chess_char_4_16_a chess_char_1_01_b chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a", "fast": false, "kind": "normal", "stageId": "act2autochess_m03", @@ -1424,34 +1426,34 @@ "round": 5, "seed": 3833599911, "waveId": "act1autochess_05", - "time": 57.07, - "ticks": 1712, + "time": 53.47, + "ticks": 1604, "reason": "cleared", "killed": 21, "total": 21, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 9, + "rngDraws": 19, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":92173,"bossDmg":0,"heal":385,"deaths":2,"layerGains":{}}}, + "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":93600,"bossDmg":0,"heal":468,"deaths":1,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",3154,1,4,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_17_a",1,null,2803.99,1,5,1,2550,45,0,6,0], - ["p1",3,"op","chess_char_4_18_a",1,null,4587.2,1,8,2,7589,15,15,8,2], - ["p1",4,"op","chess_char_4_12_a",2,null,0,0,10,4,17392,2076,322,16,1], - ["p1",5,"op","chess_char_4_16_a",2,null,1246,1,33,2,11205,1294,48,22,3], - ["p1",6,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,6,7,20882,0,0,33,1], - ["p1",7,"op","chess_char_4_13_a",1,null,1587,1,7,3,7646,0,0,19,5], - ["p1",8,"op","chess_char_4_14_a",1,null,1276,1,9,2,24907,0,0,15,3], + ["p1",2,"op","chess_char_4_17_a",1,null,2698.96,1,5,4,8462,150,0,18,0], + ["p1",3,"op","chess_char_4_18_a",1,null,4587.2,1,8,5,17570,15,15,17,2], + ["p1",4,"op","chess_char_4_16_a",2,null,0,0,10,3,13468,1699,453,25,2], + ["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,6,7,26370,0,0,43,2], + ["p1",6,"op","chess_char_4_12_a",2,null,1754,1,7,0,0,0,0,0,0], + ["p1",7,"op","chess_char_4_13_a",1,null,1587,1,9,1,11450,0,0,28,6], + ["p1",8,"op","chess_char_4_14_a",1,null,1276,1,11,1,16279,0,0,14,3], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], - "enemies": {"enemy_1249_lysdb_2":[5,5,0,1434,34560],"enemy_1251_lysyta":[15,15,0,108,47520],"enemy_1328_cbjedi":[1,1,0,1887,11520]}, - "hooks": [1,33,1712,141,141,224,218,227,24,23,15,15,14,6339,521,16,21,0,1,24,0,0,0], - "events": {"atk":141,"deploy":9,"die":23,"dmg":214,"fx":67,"heal":2,"skill":32,"spawn":32,"status":71}, - "fx": {"block":1,"displace":21,"explosion":3,"frostNova":5,"pull":1,"rockslide":2,"shieldBreak":9,"sp":1,"swordRain":12,"swordStorm":3,"thorns":3,"tornado":1,"tornadoPulse":5}, - "snaps": "d4d5e757 c6e256bb 6ea24a32 119afe24 54871beb d1707192" + "enemies": {"enemy_1249_lysdb_2":[5,5,0,453,34560],"enemy_1251_lysyta":[15,15,0,229,47520],"enemy_1328_cbjedi":[1,1,0,1182,11520]}, + "hooks": [1,32,1604,173,173,234,225,9,23,22,15,14,21,5887,502,14,21,0,1,23,0,0,0], + "events": {"atk":173,"deploy":8,"die":22,"dmg":219,"fx":50,"heal":2,"skill":31,"spawn":32,"status":98}, + "fx": {"block":4,"explosion":3,"frostNova":6,"rockslide":2,"shieldBreak":11,"swordRain":12,"swordStorm":2,"thorns":10}, + "snaps": "241cb7e7 8164a048 e60d878b 54b007e8 2a842e99 9f62b1be" }, "bond-suntShip-high": { "about": "绝技 high: tier 2 layers 999; chess_char_1_02_b chess_char_1_04_b chess_char_4_19_a chess_char_1_01_b chess_char_1_03_b chess_char_1_06_b chess_char_4_20_a chess_char_4_21_a", @@ -1524,7 +1526,7 @@ "snaps": "5fab4324 df1c9981 5d0b2fb3 40f389ee beecf492" }, "bond-swiftShip-high": { - "about": "迅捷 high: tier 1 layers 999; chess_char_4_11_b chess_char_4_12_b chess_char_1_19_b chess_char_4_07_b chess_char_4_09_b chess_char_1_01_b chess_char_4_06_b chess_char_4_10_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "迅捷 high: tier 1 layers 999; chess_char_4_11_b chess_char_1_19_b chess_char_4_07_b chess_char_4_09_b chess_char_1_01_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": true, "kind": "normal", "stageId": "act2autochess_m01", @@ -1532,33 +1534,33 @@ "round": 10, "seed": 1175070139, "waveId": "act1autochess_h03", - "time": 103.63, - "ticks": 3109, + "time": 108.37, + "ticks": 3251, "reason": "cleared", - "killed": 24, + "killed": 23, "total": 24, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 224, + "rngDraws": 271, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":235584,"bossDmg":0,"heal":480,"deaths":1,"layerGains":{}}}, + "players": {"p1":{"killed":23,"total":24,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":219573,"bossDmg":0,"heal":742,"deaths":4,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,4,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_12_b",2,"uniequip_002_glady",1016.68,1,6,2,29666,1695,480,31,4], - ["p1",3,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,7,0,1756,1971,0,14,1], - ["p1",4,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,5,0,0,0,0,0,0], - ["p1",5,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,8,11,94881,0,0,39,5], - ["p1",6,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,2,13278,0,0,71,5], - ["p1",7,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,7,57803,0,0,103,3], - ["p1",8,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,3,2,38201,0,0,21,2], + ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,4,0,0,4098,0,0,1], + ["p1",2,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,6,1,4054,1971,0,20,1], + ["p1",3,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,7,0,1332,2383,0,10,10], + ["p1",4,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,5,5,65655,0,0,24,3], + ["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,2,17948,0,0,76,5], + ["p1",6,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,10,67651,0,0,110,3], + ["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,3,2,36325,0,0,22,2], + ["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,8,3,26608,2974,742,16,2], ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,9,0,0,0,0,0,null], ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,10,0,0,0,0,0,null] ], - "enemies": {"enemy_1010_demon":[7,7,0,0,60480],"enemy_1422_lrsldr_2":[14,14,0,0,88704],"enemy_1425_lrcmra_2":[3,3,0,3666,86400]}, - "hooks": [1,34,3109,284,284,542,542,258,25,25,20,17,71,4344,125,2,24,0,1,25,0,0,0], - "events": {"atk":333,"deploy":10,"die":25,"dmg":542,"fx":138,"skill":37,"spawn":34,"status":204}, - "fx": {"crit":44,"dilemma":5,"displace":11,"garrisonGrant":1,"levitate":21,"pull":4,"quadShot":2,"slippery":2,"sp":16,"splash":8,"tornado":4,"tornadoPulse":20}, - "snaps": "7f9eb07c 6cb4394b 48a9dc2c 1868bf88 9ee5e814 16737220 b499038a 6744d7c7 1aae168f ed248e7d 6113cb8d" + "enemies": {"enemy_1010_demon":[7,7,0,1205,60480],"enemy_1422_lrsldr_2":[14,14,0,74,88704],"enemy_1425_lrcmra_2":[3,2,1,10147,70389]}, + "hooks": [1,34,3251,301,301,557,557,400,27,28,27,25,76,3567,117,10,24,1,1,27,0,0,0], + "events": {"atk":349,"deploy":10,"die":27,"dmg":557,"fx":146,"leak":1,"skill":52,"spawn":34,"status":196}, + "fx": {"charge":10,"crit":53,"dilemma":3,"displace":16,"garrisonGrant":1,"levitate":21,"overclock":1,"pull":1,"quadShot":2,"slippery":2,"sp":23,"splash":7,"tornado":1,"tornadoPulse":5}, + "snaps": "52481b26 a970d314 2696635b 9c15cc8e 501817d0 a8faf661 7e05b7cf ffceee93 c505d863 f99ccd20 1c4895d8" }, "bond-victoriaShip-low": { "about": "维多利亚 low: tier 1 layers 1; chess_char_3_06_a chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_1_06_a chess_char_2_05_a chess_char_2_10_a", diff --git a/test/golden/fields.json b/test/golden/fields.json index 9e9bdc4e..aaf9615c 100644 --- a/test/golden/fields.json +++ b/test/golden/fields.json @@ -127,7 +127,7 @@ "snaps": "a5dad180 d125af54 48cee8b5 3b07616c bc0eda5a e532e5f3 d3b187a2 2c98a5f8 559544bf 798c9fad 22a3c133 b3cbd348 1d516e17 4fa0428c b96b4cc9 c98f2306 628c0fee dd8030f8 3266c412 97ddd90c" }, "boss-boss_2-pair": { - "about": "假想敌:铳 pair pool 3000000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "假想敌:铳 pair pool 3000000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "boss", "stageId": "act2autochess_m04", @@ -138,45 +138,45 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 7, + "killed": 8, "total": 8, "unspawned": 0, - "bossHpLeft": 2350060, - "rngDraws": 418, + "bossHpLeft": 2400141, + "rngDraws": 845, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":7,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":586039,"bossDmg":301935,"heal":15824,"deaths":2,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":798436,"bossDmg":343471,"heal":3544,"deaths":2,"layerGains":{}} + "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":626248,"bossDmg":304799,"heal":17583,"deaths":1,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":834649,"bossDmg":291562,"heal":6439,"deaths":2,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,9,2,202006,1042,20,75,3], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,11,0,13291,13409,413,57,1], - ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,7,0,30220,1028,162,56,18], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,13,0,10185,0,0,83,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,1,0,85052,0,540,46,8], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2418.5,1,3,0,60506,0,0,33,3], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2769.3,1,43,1,13270,2989,220,10,2], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,40,1,120745,1611,0,41,16], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,5,0,0,0,14468,18,2], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,15,0,50762,0,0,32,2], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1729.97,1,47,0,0,4971,481,0,1], - ["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,12,0,31398,0,0,44,3], - ["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,49,1,285207,0,0,307,8], - ["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,14,0,2151,2782,399,13,6], - ["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,48,0,72409,4006,678,141,8], - ["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",316.22,1,16,0,86815,3101,640,76,5], - ["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,0,1319,0,0,13,1], - ["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,4,0,72378,0,0,61,2], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,18,0,103544,1346,1346,153,45], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,20,2,143215,0,0,73,17], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,9,0,249834,1042,0,78,3], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,11,0,29219,11570,267,58,1], + ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,7,0,27397,800,176,51,16], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,13,1,10837,0,0,65,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,1,0,97920,0,1127,37,9], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2418.5,1,3,0,66530,0,0,33,3], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2769.3,1,17,2,54241,1768,771,107,4], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,44,1,27880,2026,415,27,6], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,5,0,0,0,14784,23,3], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,15,0,62391,1393,44,48,3], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",1015.52,1,12,0,177,3929,1579,5,2], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,50,2,239489,421,0,268,9], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2260.31,1,8,0,2831,1159,1036,18,7], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,49,1,64489,3762,255,118,9], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1997.24,1,10,0,62966,1270,489,59,4], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,1,306521,0,0,213,3], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,4,0,0,0,0,0,0], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1823.67,1,18,0,42546,3489,3080,38,4], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,40,0,25053,1989,0,42,13], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,6,0,90576,0,0,58,14], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], - "enemies": {"enemy_1005_yokai_2":[6,6,0,2913,62190],"enemy_1430_lrrook":[2,1,1,0,677032],"enemy_9017_achunt":[2,0,0,33371,649940]}, - "hooks": [1,47,6000,1359,1364,2576,2608,2946,11,24,152,147,20,38829,1514,0,10,1,1,12,0,10,1], - "events": {"atk":1412,"deploy":37,"die":23,"dmg":2604,"fx":485,"heal":39,"leak":1,"skill":299,"spawn":32,"status":512}, - "fx": {"aoe":40,"appear":2,"blink":12,"burst":10,"catShield":1,"charge":6,"counter":20,"crit":15,"dilemma":5,"disappear":2,"dodge":1,"explosion":17,"frostNova":45,"iceSpike":10,"overclock":1,"pull":3,"ripple":14,"sentry":5,"sermon":1,"shadowWeave":10,"shield":5,"slippery":2,"soul":3,"sp":14,"stealth":8,"swordRain":71,"swordStorm":8,"tornado":3,"tornadoPulse":15,"weightless":3,"zone":133}, - "snaps": "bded3f8f 24cbefe9 671c8869 999a4ff1 8528a501 ba0ffb54 819c81f5 c480501c 5f51d940 f5f9be37 3b6dcc0d 59143ccc e8b26cd0 42745026 c22fe961 29db481b 69c7d37e caa1e5a5 11718d27 2f9da877" + "enemies": {"enemy_1005_yokai_2":[6,6,0,4575,62190],"enemy_1430_lrrook":[2,2,0,0,802449],"enemy_9017_achunt":[2,0,0,30041,599859]}, + "hooks": [1,48,6000,1302,1334,2676,2707,5199,12,24,114,108,24,37654,903,0,10,0,1,12,0,7,0], + "events": {"atk":1357,"deploy":38,"die":24,"dmg":2701,"fx":654,"heal":54,"skill":222,"spawn":32,"status":441}, + "fx": {"aoe":27,"appear":2,"blink":13,"burst":7,"catShield":1,"charge":7,"counter":24,"crit":112,"dilemma":4,"disappear":2,"explosion":14,"frostNova":13,"garrisonGrant":1,"iceSpike":91,"overclock":2,"pull":3,"quadShot":3,"ripple":25,"sentry":7,"sermon":1,"shadowWeave":13,"shield":6,"soul":1,"sp":7,"stealth":9,"swordRain":59,"swordStorm":9,"tornado":4,"tornadoPulse":17,"weightless":3,"zone":167}, + "snaps": "3cd698b1 c4c10bef a30f10e2 16900e85 a9a35856 dbfa73dc 81650d2d f76c2446 eac77ab1 120c61fe 7df80570 8eeabc2d 0de7de10 f0f4eb24 cca3fbad 2faf03af 37cb63f6 ec50b27e e5066532 6987cb61" }, "boss-boss_2-solo": { "about": "假想敌:铳 solo pool 750000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -335,7 +335,7 @@ "snaps": "350d2037 5eb324a9 93890c27 cfd3cc69 9d47cb8d 97a81071 03889d40 e843828d 92884942 e6498744 15391702 f00b712f fcb3da1c 0b44c227 2802904f c8eaf7b3 a142e278 b3656951 bd850e24 0b8940d4" }, "boss-boss_4-pair": { - "about": "盐风主教昆图斯 pair pool 4200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "盐风主教昆图斯 pair pool 4200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "boss", "stageId": "act2autochess_m02", @@ -346,83 +346,81 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 11, + "killed": 12, "total": 14, "unspawned": 0, - "bossHpLeft": 2963186, - "rngDraws": 379, + "bossHpLeft": 3180709, + "rngDraws": 709, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":11,"total":14,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1301416,"bossDmg":462784,"heal":55328,"deaths":14,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":958751,"bossDmg":774030,"heal":4401,"deaths":17,"layerGains":{}} + "p1": {"killed":12,"total":14,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1029506,"bossDmg":334992,"heal":29299,"deaths":18,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1050372,"bossDmg":684299,"heal":4583,"deaths":16,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,50,2,181433,8233,419,23,1], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",1480.42,1,56,0,18660,9555,996,14,2], - ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,53,1,32068,7498,1041,8,6], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,52,0,27339,18659,2152,32,2], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",760.49,1,58,1,440543,3484,13958,106,18], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",748.73,1,60,1,109385,11025,551,39,4], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1147.47,1,19,1,152890,4386,257,193,5], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1093.46,1,61,1,184949,2582,454,38,16], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1608.42,1,7,0,0,4983,35154,63,4], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1213.47,1,15,1,154147,4386,348,71,3], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,48,0,0,6794,52,0,1], - ["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,47,0,26743,5448,984,10,1], - ["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",0,0,26,0,390348,6532,239,289,7], - ["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,59,0,17337,7149,0,18,6], - ["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,57,1,146039,18319,1075,120,6], - ["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,54,1,139224,6925,369,53,5], - ["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,55,0,0,3470,348,0,0], - ["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1109.26,1,12,0,85141,4386,467,68,4], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,20,1,108475,4244,435,153,39], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1144.47,1,62,0,45445,2540,433,15,6], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,51,3,160707,8165,351,23,1], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",0,0,49,1,16423,9730,556,15,2], + ["p1",3,"op","chess_char_5_14_b",1,"none",1928.47,1,58,0,25513,10463,1317,10,6], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,53,0,21949,13121,338,14,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",805.93,1,59,0,364463,3178,6363,105,18], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",768.47,1,57,0,90550,10652,588,39,4], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,1,106186,2529,24,117,4], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1147.01,1,65,5,123065,2539,464,42,18], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,54,0,0,4347,19178,37,3], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1265.2,1,63,0,120648,3016,120,48,2], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,47,0,1132,6945,203,3,1], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",1587.75,1,52,1,199948,5092,120,199,7], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,62,0,32398,7436,183,51,12], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1430.31,1,56,0,104132,6881,140,167,5], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,55,0,219022,6239,275,44,4], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",998.42,1,60,0,196698,2588,464,168,3], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,3152,73,0,0], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1729.12,1,61,0,63320,6263,1513,72,4], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1876.82,1,64,0,73971,3250,1149,75,23], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1194.87,1,66,1,159751,2521,464,69,13], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], - "enemies": {"enemy_1010_demon":[4,4,0,9763,200612],"enemy_1438_dspred":[10,7,3,30762,822741],"enemy_1521_dslily":[1,0,0,92273,1236814]}, - "hooks": [1,60,6000,1224,1327,3023,3152,6681,43,48,136,134,14,36235,1594,23,15,3,1,44,0,37,5], - "events": {"atk":1450,"deploy":45,"die":45,"dmg":3143,"fx":842,"heal":271,"leak":3,"skill":270,"spawn":37,"status":941}, + "enemies": {"enemy_1010_demon":[4,4,0,2035,200612],"enemy_1438_dspred":[10,8,2,18391,859975],"enemy_1521_dslily":[1,0,0,89880,1019291]}, + "hooks": [1,64,6000,1264,1327,3121,3243,5401,46,50,131,130,9,32811,1211,12,15,2,1,49,0,28,6], + "events": {"atk":1527,"deploy":49,"die":48,"dmg":3236,"fx":809,"heal":191,"leak":2,"skill":261,"spawn":37,"status":830}, "fx": { - "aoe": 25, - "appear": 10, - "blink": 3, - "burst": 37, - "charge": 6, - "counter": 14, - "crit": 1, - "dilemma": 5, - "disappear": 10, - "displace": 29, - "dodge": 5, - "explosion": 6, - "frostNova": 39, + "aoe": 30, + "appear": 8, + "blink": 2, + "burst": 28, + "charge": 12, + "counter": 9, + "crit": 91, + "dilemma": 4, + "disappear": 8, + "displace": 31, + "dodge": 6, + "explosion": 13, + "frostNova": 23, "grow": 1, - "iceSpike": 148, - "levitate": 2, + "iceSpike": 88, "overclock": 1, - "pull": 1, - "ripple": 27, - "rockfall": 18, + "pull": 4, + "quadShot": 3, + "ripple": 18, + "rockfall": 16, "sentry": 2, "sermon": 2, - "shadowWeave": 1, - "shield": 5, - "slippery": 4, - "soul": 7, - "sp": 14, - "splash": 2, + "shadowWeave": 6, + "shield": 2, + "soul": 6, + "sp": 13, "stealth": 7, - "swordRain": 65, - "swordStorm": 6, + "swordRain": 28, + "swordStorm": 5, "tentacle": 6, "tide": 5, - "tornado": 1, - "tornadoPulse": 5, + "tornado": 4, + "tornadoPulse": 20, "weightless": 4, - "zone": 318 + "zone": 303 }, - "snaps": "9ebfb59f ebaa506f f9e0adbc 78861a0d fc253243 261e35f6 da034a99 20c77428 1a1e5a85 8e3269d0 cf47638c e41592e8 bb36e8db 5cac1f53 42ce30eb ba5c97a1 c2fb0718 ce0af9ba f02c4273 3f5c1461" + "snaps": "198ab503 54596a20 a140dd19 93be3154 e521703f 9e626685 0477c945 3940ca57 0e017b92 406320ee dbbbde0f 19e3cd9c b6f545a7 27ee4dfe 591fe6c2 473addeb d7b0f4cc e8895645 ea2412e0 532a2fda" }, "boss-boss_4-solo": { "about": "盐风主教昆图斯 solo pool 1050000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -608,7 +606,7 @@ "snaps": "1b2c287a eaa9179b 630f3c60 4d66a11e 1bb71808 3f98dccb 22cb18a1 217a35ef 09de2906 ba0f42cc 81fbd1d0 398611ec 0abd9c6f 252f015d fe9c3866 f9bb937f" }, "boss-boss_6-pair": { - "about": "阿利斯泰尔,帝国余晖 pair pool 3980000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "阿利斯泰尔,帝国余晖 pair pool 3980000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "boss", "stageId": "act1autochess_m07", @@ -622,49 +620,82 @@ "killed": 4, "total": 6, "unspawned": 0, - "bossHpLeft": 2830586, - "rngDraws": 115, + "bossHpLeft": 2822603, + "rngDraws": 622, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":4,"total":6,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":851952,"bossDmg":418475,"heal":4847,"deaths":6,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":809842,"bossDmg":730939,"heal":429,"deaths":13,"layerGains":{}} + "p1": {"killed":4,"total":6,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1014139,"bossDmg":530340,"heal":8898,"deaths":5,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1261961,"bossDmg":627057,"heal":1505,"deaths":9,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,1,124853,0,0,36,2], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,1,156498,0,0,35,2], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,1,0,0,0,0,0,0], - ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,5,0,33331,0,0,0,11], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,0,28361,3948,2626,18,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,3,294785,0,1322,63,11], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,171474,0,0,39,3], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,38,0,17693,3258,0,30,1], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,39,0,133204,3222,0,43,14], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,40,0,1934,3220,899,1,1], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,0,46318,0,0,37,2], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,41,0,0,12099,91,0,1], - ["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,2,0,0,0,0,0,0], - ["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",0,0,26,0,135017,5043,208,208,6], - ["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,10,0,0,0,0,0,0], - ["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,52,0,54215,8558,131,149,5], - ["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,48,0,161587,5555,0,65,4], - ["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,0,0,0,0,0,0], - ["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,12,0,280207,0,0,107,4], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,49,0,115884,3978,0,105,27], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,50,0,62932,4878,0,22,4], - ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null], - ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null] + ["p1",3,"op","chess_char_5_14_b",1,"none",1994,1,5,0,20943,0,0,0,11], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,1,27873,4163,2876,15,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,1,257892,0,4030,52,9], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,180268,0,0,52,4], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,15,0,40804,3209,204,79,3], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,46,0,281643,4798,209,80,26], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,47,0,1934,4800,1580,2,1], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,1,46286,0,0,33,2], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,39,0,0,12101,65,0,1], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",3438.4,1,52,0,190553,9186,912,222,6], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,6,0,0,0,0,0,0], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,48,0,43037,6067,157,161,5], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,14,0,233626,0,0,116,6], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,0,477873,0,0,136,2], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,12,0,0,0,0,0,0], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,16,0,83667,0,0,168,6], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,49,0,131093,1989,0,125,31], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",384.36,1,50,0,102112,4864,371,34,6], + ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], + ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], "enemies": { - "enemy_10028_vtswd": [2,2,0,0,0], - "enemy_10029_vtshld": [6,6,0,0,0], - "enemy_10030_vtwand": [1,1,0,0,0], - "enemy_10085_hllevi_2": [2,0,2,0,311768], - "enemy_1010_demon": [4,4,0,16047,200612], - "enemy_9032_aclionk": [1,0,0,37713,1149414] + "enemy_10029_vtshld": [4,4,0,0,0], + "enemy_10030_vtwand": [4,4,0,0,0], + "enemy_10085_hllevi_2": [2,0,2,0,918091], + "enemy_1010_demon": [4,4,0,16264,200612], + "enemy_9032_aclionk": [1,0,0,34912,1157397] }, - "hooks": [1,51,6000,924,932,1505,1589,667,32,36,97,95,0,30558,1153,4,16,2,1,26,0,8,1], - "events": {"atk":1036,"deploy":35,"die":34,"dmg":1545,"fx":448,"heal":11,"leak":2,"skill":192,"spawn":38,"status":691}, - "fx": {"aoe":33,"appear":4,"blink":2,"burst":8,"crit":1,"dilemma":4,"disappear":4,"displace":8,"dodge":1,"equip":10,"explosion":4,"frostNova":27,"garrisonGrant":1,"iceSpike":28,"overclock":1,"revive":2,"ripple":18,"sentry":2,"shadowWeave":1,"shield":1,"slippery":4,"soul":2,"sp":10,"stealth":6,"sword":1,"swordRain":27,"swordStorm":5,"telegraph":15,"vest":6,"weightless":3,"zone":209}, - "snaps": "ae4c2d42 930756f4 dfc027de 067097c8 063c8181 4f0dee8a db069676 6457f437 3f8f2a7b b398399a 5c778a50 56497384 c05a22f0 58b7c8c9 4ed8f59d 8c6d8923 e673e1f7 dd8b1c6e c6fdbae0 00aaa057" + "hooks": [1,50,6000,1272,1302,2358,2376,1878,26,30,122,120,0,38644,1437,4,15,2,1,21,0,5,1], + "events": {"atk":1371,"deploy":35,"die":28,"dmg":2328,"fx":600,"heal":36,"leak":2,"skill":242,"spawn":37,"status":955}, + "fx": { + "aoe": 43, + "appear": 4, + "blink": 2, + "burst": 5, + "crit": 91, + "dilemma": 6, + "disappear": 4, + "displace": 13, + "dodge": 1, + "equip": 12, + "explosion": 6, + "frostNova": 31, + "garrisonGrant": 1, + "iceSpike": 71, + "overclock": 1, + "pull": 6, + "quadShot": 2, + "revive": 2, + "ripple": 18, + "sentry": 3, + "shadowWeave": 4, + "shield": 1, + "soul": 5, + "sp": 11, + "stealth": 6, + "swordRain": 16, + "swordStorm": 5, + "telegraph": 15, + "tornado": 6, + "tornadoPulse": 30, + "vest": 4, + "weightless": 4, + "zone": 171 + }, + "snaps": "85b544a3 e2a69c95 8ea8c580 a10ce8ba 1bf89398 d315c9bd 76e46275 8291ad43 2b9e512d 507672c3 ca4b6dc9 c63916fa 2bece0ec 36bf65d2 dbc730bd e7e62749 b5af54bb 3c940652 4ebff223 e6bd71c0" }, "boss-boss_6-solo": { "about": "阿利斯泰尔,帝国余晖 solo pool 995000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -823,7 +854,7 @@ "snaps": "4de66f1a 63c08f30 825591c9 d0ce31a1 7aef05fb 1ec56c35 f5134898 a3987ee3 f826ddd0 8536abb7 e61cb2af eb4dc819 ccfdf14f 98da64f1 27310d84 6f8f4bac 8f4f0950 bd66a2ba e033ff9d 33a4d212" }, "hidden-boss_8-pair": { - "about": "假想敌:胄 pair pool 7200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "假想敌:胄 pair pool 7200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "hidden", "stageId": "act1autochess_m05", @@ -834,95 +865,93 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 12, + "killed": 14, "total": 18, "unspawned": 0, - "bossHpLeft": 6077350, - "rngDraws": 712, + "bossHpLeft": 6146493, + "rngDraws": 684, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":12,"total":18,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1745573,"bossDmg":937264,"heal":66120,"deaths":15,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":389964,"bossDmg":185386,"heal":7841,"deaths":25,"layerGains":{}} + "p1": {"killed":14,"total":18,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1530308,"bossDmg":540995,"heal":37591,"deaths":18,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":660811,"bossDmg":511926,"heal":7513,"deaths":22,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",5244.92,1,85,2,93962,25464,853,43,3], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",6488.78,1,76,0,4978,12151,903,7,2], - ["p1",3,"op","chess_char_5_14_b",1,"none",3988,1,87,0,40053,15591,4140,41,7], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",5476,1,88,1,45108,22564,3261,24,2], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1602.62,1,74,1,744558,4047,17936,100,11], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2764,1,82,3,449489,17324,228,43,4], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,1,1,144401,4077,819,12,2], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,64,1,19039,6619,175,12,3], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",3220,1,71,0,0,14759,37696,35,4], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,77,4,203984,10279,109,9,1], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,4,0,0,4260,161,0,1], - ["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,70,0,25247,5349,885,14,2], - ["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,90,0,9322,15881,103,48,3], - ["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,63,0,8814,10282,1941,3,2], - ["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1185.56,1,83,1,96977,19717,1326,32,10], - ["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,62,1,73045,9516,232,18,2], - ["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,86,0,18579,3122,0,163,3], - ["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,18,1,119533,6337,363,64,2], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,73,0,33296,6531,2553,37,12], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,61,0,5151,3529,277,3,1], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,3,6,292256,22464,364,30,2], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",0,0,7,0,9900,9238,344,9,1], + ["p1",3,"op","chess_char_5_14_b",1,"none",3988,1,81,2,59905,12855,2175,33,10], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,77,0,31244,23536,239,35,3], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1214.62,1,73,1,517678,3465,15688,98,10], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,71,1,87295,11850,264,21,2], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",3258,1,80,1,147502,3731,473,5,1], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1855.46,1,82,3,323524,4933,344,36,14], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,86,0,0,11728,17700,15,1], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,76,1,61002,10170,0,7,0], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",802.43,1,72,0,0,6510,0,0,2], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,84,0,7967,15670,48,45,2], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,64,0,7602,11656,3315,2,2], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",873.53,1,79,1,78142,16039,45,26,9], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,61,0,69469,9246,259,27,2], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,87,2,310656,1561,0,156,3], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,20,0,59619,4499,409,62,2], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,75,0,44999,7547,3083,34,2], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,65,0,19343,4017,39,32,9], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,66,1,63014,3567,315,25,4], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], "enemies": { - "enemy_10027_vtsk": [6,0,4,138479,677740], + "enemy_10027_vtsk": [6,2,2,125746,825346], "enemy_1005_yokai": [4,4,0,0,1600], - "enemy_1229_darmy_2": [8,8,0,3451,294231], - "enemy_9013_acstmk_2": [1,0,0,51007,1122650], - "enemy_9014_acstma": [5,4,0,5742,7466], - "enemy_9015_acstmb": [3,2,0,18719,56499], - "enemy_9016_acstmr": [8,7,0,0,52] + "enemy_1229_darmy_2": [8,8,0,4691,294231], + "enemy_9013_acstmk_2": [1,0,0,44306,1053507], + "enemy_9014_acstma": [5,4,0,6912,28366], + "enemy_9015_acstmb": [3,2,0,12628,12856], + "enemy_9016_acstmr": [8,7,0,0,42] }, - "hooks": [1,88,6000,813,814,2708,2782,7397,66,71,77,74,7,21230,726,15,35,4,1,69,0,0,6], - "events": {"atk":977,"deploy":53,"die":67,"dmg":2779,"fx":604,"heal":181,"leak":4,"skill":151,"spawn":57,"status":726}, + "hooks": [1,87,6000,808,809,2627,2815,4682,68,71,81,79,9,21642,625,21,35,2,1,69,0,8,3], + "events": {"atk":940,"deploy":52,"die":69,"dmg":2811,"fx":550,"heal":130,"leak":2,"skill":160,"spawn":57,"status":569}, "fx": { - "aoe": 19, - "appear": 10, - "beam": 45, - "blink": 15, - "charge": 9, - "counter": 7, - "crit": 79, + "aoe": 31, + "appear": 7, + "beam": 47, + "blink": 14, + "burst": 8, + "charge": 8, + "counter": 9, + "crit": 89, "dilemma": 2, - "disappear": 10, - "displace": 1, - "dodge": 6, - "explode": 7, - "explosion": 1, - "frostNova": 12, - "iceSpike": 12, - "levitate": 7, - "overclock": 1, - "palsy": 7, - "phase": 1, - "pull": 1, + "disappear": 7, + "dodge": 3, + "explode": 4, + "explosion": 4, + "frostNova": 9, + "iceSpike": 4, + "overclock": 2, + "palsy": 2, + "phase": 4, + "pull": 2, "quadShot": 2, "revive": 2, - "ripple": 2, - "sentry": 5, - "sermon": 2, + "sentry": 4, + "sermon": 1, "shadowWeave": 5, "shell": 8, - "shield": 7, + "shield": 5, "slippery": 2, - "sp": 3, - "spGain": 4, - "splash": 1, - "stealth": 3, + "soul": 8, + "sp": 6, + "spGain": 5, + "stealth": 2, "summon": 4, - "swordRain": 78, - "swordStorm": 10, + "swordRain": 55, + "swordStorm": 9, "telegraph": 6, "tornado": 2, - "tornadoPulse": 8, - "weightless": 4, - "zone": 194 + "tornadoPulse": 10, + "weightless": 2, + "zone": 156 }, - "snaps": "264b53d3 6fb1395f acf19f90 c8b5fd49 ffacda1f acd792c1 1cb10cd2 fe369e7d b7b9d050 c11e4e8e 5bb9e66b a1356611 34955c15 942d0207 eff26c91 0641e8c1 ffdfb125 bf8b5166 4a71053e 70aee475" + "snaps": "3795cfd4 891856fd fa1c1210 2c30aa4b d8e5b303 a2e870a9 2c890acc 9c3510e1 c0c588c6 b4adfe33 919f2f15 3096a982 11725bf2 da1f3dc4 43291420 c44f7791 f63a2f31 d153dec1 dea37ac5 1edec0c5" }, "hidden-boss_8-solo": { "about": "假想敌:胄 solo pool 1800000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -1136,7 +1165,7 @@ "snaps": "d71f569c a47a1d66 df4b4783 0854c875 846091e0 9890e33e 5fdb72ff fb639060 fcd20f12 04a361dc d58cf1d0 1482a16a 606d5129 d394ce04 39d5d7f5 6adac8ac 09d55362" }, "hidden-boss_10-pair": { - "about": "假想敌:管 pair pool 7600000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "假想敌:管 pair pool 7600000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "hidden", "stageId": "act1autochess_m03", @@ -1150,86 +1179,87 @@ "killed": 12, "total": 12, "unspawned": 0, - "bossHpLeft": 6533029, - "rngDraws": 447, + "bossHpLeft": 6832620, + "rngDraws": 975, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":424664,"bossDmg":253185,"heal":8710,"deaths":1,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":976811,"bossDmg":813786,"heal":4705,"deaths":6,"layerGains":{}} + "p1": {"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":367861,"bossDmg":200159,"heal":4914,"deaths":2,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":734023,"bossDmg":567221,"heal":9205,"deaths":5,"layerGains":{}} }, "units": [ ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,5,0,0,0,0,0,0], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,9,0,0,0,0,0,0], - ["p1",3,"op","chess_char_5_14_b",1,"none",3489.5,1,15,1,3864,0,0,0,3], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,42,0,5478,4818,1781,19,2], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1989,1,11,5,216376,0,3535,25,6], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,19,0,63613,3102,23,55,5], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,21,2,118113,2929,347,221,6], + ["p1",3,"op","chess_char_5_14_b",1,"none",3489.5,1,15,0,15418,0,0,0,4], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",2738,1,43,1,4432,5429,1643,19,2], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1989,1,11,2,166810,0,2200,29,6], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,19,0,64611,957,0,64,6], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,49,3,93384,2895,113,214,6], ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,3,0,0,0,0,0,0], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,7,0,0,0,3025,4,2], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,13,0,17221,0,0,10,1], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,49,0,0,4098,0,0,1], - ["p2",12,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,47,0,7846,2420,188,13,1], - ["p2",13,"op","chess_char_4_04_b",1,"uniequip_002_ines",3545.85,1,30,0,320008,0,0,251,7], - ["p2",14,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,48,0,2076,6222,1217,4,2], - ["p2",15,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,38,0,28887,2204,585,341,2], - ["p2",16,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2060.34,1,20,7,349105,2945,1629,123,6], - ["p2",17,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,10,1,10469,40,40,13,2], - ["p2",18,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,18,0,98654,416,416,111,4], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,22,0,112204,630,630,200,49], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,4,0,47559,0,0,17,5], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,7,0,0,0,957,1,1], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,13,0,23206,0,0,10,1], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,6,0,0,0,0,0,1], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,52,0,112471,6080,385,174,6], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",213.43,1,53,0,3840,7314,855,1,1], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",2671.35,1,33,0,104516,0,0,238,2], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1233.93,1,18,6,199328,2261,717,84,5], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,12,2,160101,0,0,271,4], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1249.33,1,20,0,9407,1072,657,7,2], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1282.27,1,22,0,52752,7540,6590,122,5], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,4,1,32179,0,0,40,11], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1626,1,8,1,59429,0,0,24,6], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,23,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,24,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null] ], "enemies": { - "enemy_1402_tgshd_2": [2,2,0,9259,173864], - "enemy_9010_acpupp": [2,2,0,3029,160520], - "enemy_9021_acduml_2": [1,0,0,0,1066971], - "enemy_9022_acdumm": [1,0,0,373,0], - "enemy_9023_acdums": [12,12,0,10960,120] + "enemy_1402_tgshd_2": [2,2,0,6522,173864], + "enemy_9010_acpupp": [2,2,0,3501,160520], + "enemy_9021_acduml_2": [1,0,0,343,767380], + "enemy_9022_acdumm": [1,0,0,453,0], + "enemy_9023_acdums": [12,12,0,17083,120] }, - "hooks": [1,49,6000,1246,1377,2368,2483,4223,23,24,104,101,0,32963,1844,8,18,0,1,26,0,3,0], - "events": {"atk":1352,"deploy":29,"die":24,"dmg":2465,"fx":877,"heal":64,"skill":205,"spawn":42,"status":671}, + "hooks": [1,51,6000,1128,1262,2491,2638,5656,23,25,69,65,0,29939,1498,5,18,0,1,25,0,5,0], + "events": {"atk":1227,"deploy":31,"die":25,"dmg":2627,"fx":988,"heal":28,"skill":134,"spawn":42,"status":587}, "fx": { - "aoe": 5, - "appear": 2, - "beam": 13, - "blink": 1, - "burst": 3, - "charge": 2, - "crit": 7, - "dilemma": 6, - "disappear": 2, - "displace": 4, + "aoe": 6, + "beam": 12, + "blink": 2, + "burst": 5, + "charge": 1, + "crit": 126, + "dilemma": 5, "ember": 2, - "explode": 178, - "explosion": 5, - "expose": 209, - "frostNova": 49, - "iceSpike": 175, + "explode": 193, + "explosion": 6, + "expose": 190, + "frostNova": 11, + "garrisonGrant": 1, + "iceSpike": 179, + "levitate": 4, "overclock": 1, "phase": 33, - "pull": 1, + "pull": 5, + "quadShot": 4, "ripple": 10, - "sentry": 1, - "shadowWeave": 1, + "sentry": 3, + "shadowWeave": 5, "shield": 1, - "shieldBreak": 2, - "slippery": 4, - "sp": 2, - "stealth": 7, + "shieldBreak": 1, + "slippery": 2, + "sp": 3, + "splash": 2, + "stealth": 6, "summon": 8, - "swordRain": 14, + "swordRain": 7, "swordStorm": 2, "telegraph": 2, - "tornado": 1, - "tornadoPulse": 5, - "weightless": 5, + "tornado": 5, + "tornadoPulse": 25, + "weightless": 6, "zone": 114 }, - "snaps": "2c69fe6c abc6b86b f72f3e77 8614e1a0 400871dc 3b1793ec d3f50041 7a737a83 03e5d8a4 19d891ad 49ae8f1a 81011e7a eba67866 a900037d 0c5a9938 086b50ab a6d68dfb e3154077 37c85fa4 d28a4203" + "snaps": "8c189829 81a8fef7 3a4efaf3 440bf668 b43d07bc c46051bd 2bcf8382 efce6da0 a46087d4 5f55eb3f f9676b16 b50095b5 2f6e3a01 4ac1b23a abb356ab 46054e7e 664989bd 9279976f d91a3dbd c2732ee9" }, "hidden-boss_10-solo": { "about": "假想敌:管 solo pool 1900000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", diff --git a/test/golden/roster.json b/test/golden/roster.json index a79717d7..1f2b92fe 100644 --- a/test/golden/roster.json +++ b/test/golden/roster.json @@ -549,7 +549,7 @@ "snaps": "74efae3f f0ba5ed6 7f080293 ce089018 72fd5b40 aa7cfc03 9cd4911e 59794743 22e30ffb a647f35c 1fac8532 af13d758 f00ae8e0 3abb265c d6a41faf b70c8a95" }, "roster-010": { - "about": "pass 0 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_12_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "pass 0 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld", "fast": true, "kind": "normal", "stageId": "act2autochess_m03", @@ -560,56 +560,56 @@ "time": 170, "ticks": 5100, "reason": "timeout", - "killed": 40, + "killed": 35, "total": 102, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 114, + "rngDraws": 64, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":40,"total":102,"perfect":false,"leaks":62,"leaksUncounted":0,"coins":4,"dmg":469309,"bossDmg":0,"heal":4633,"deaths":21,"layerGains":{"preciShip":8}} + "p1": {"killed":35,"total":102,"perfect":false,"leaks":67,"leaksUncounted":0,"coins":4,"dmg":370317,"bossDmg":0,"heal":1892,"deaths":22,"layerGains":{"preciShip":12}} }, "units": [ - ["p1",1,"op","chess_char_4_17_a",1,null,0,0,4,0,947,2849,0,7,0], - ["p1",2,"op","chess_char_4_18_a",1,null,0,0,5,1,8608,3319,452,4,4], - ["p1",3,"op","chess_char_4_11_a",1,null,2144,1,125,0,0,3002,0,0,1], - ["p1",4,"op","chess_char_4_12_a",2,null,0,0,102,5,70347,5044,1536,37,2], - ["p1",5,"op","chess_char_4_19_a",2,null,0,0,82,0,6224,3120,0,9,1], - ["p1",6,"op","chess_char_4_07_a",1,null,0,0,112,0,423,3476,0,2,1], - ["p1",7,"op","chess_char_4_16_a",2,null,1,1,129,5,100862,8873,2644,33,9], - ["p1",8,"op","chess_char_4_09_a",1,null,0,0,15,0,16650,1336,0,14,2], - ["p1",9,"op","chess_char_4_10_a",1,null,0,0,6,0,40704,2190,0,17,1], - ["p1",10,"op","chess_char_4_13_a",1,null,0,0,111,1,30141,3174,0,43,5], - ["p1",11,"op","chess_char_4_14_a",1,null,0,0,104,14,173742,2552,0,33,2], - ["p1",12,"op","chess_char_4_20_a",2,null,0,0,93,4,20658,2434,0,10,1], - ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], - ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null], + ["p1",1,"op","chess_char_4_17_a",1,null,0,0,5,0,1673,2849,0,10,0], + ["p1",2,"op","chess_char_4_18_a",1,null,0,0,6,0,1211,4202,1335,2,2], + ["p1",3,"op","chess_char_4_11_a",1,null,0,0,10,0,2906,2813,0,6,1], + ["p1",4,"op","chess_char_4_19_a",2,null,0,0,97,1,14708,3120,0,23,1], + ["p1",5,"op","chess_char_4_07_a",1,null,1738,1,132,0,1309,3476,0,1,1], + ["p1",6,"op","chess_char_4_16_a",2,null,0,0,128,0,76151,6230,0,27,5], + ["p1",7,"op","chess_char_4_09_a",1,null,0,0,11,1,18583,1336,0,12,1], + ["p1",8,"op","chess_char_4_10_a",1,null,0,0,108,1,26881,4894,0,19,1], + ["p1",9,"op","chess_char_4_12_a",2,null,0,0,119,0,30032,4065,557,22,1], + ["p1",10,"op","chess_char_4_13_a",1,null,0,0,99,2,28416,3174,0,49,4], + ["p1",11,"op","chess_char_4_14_a",1,null,0,0,94,12,135099,2552,0,25,2], + ["p1",12,"op","chess_char_4_20_a",2,null,0,0,4,3,33349,1217,0,13,1], + ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null], + ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], "enemies": { - "enemy_10034_cnvsax": [1,1,0,4495,42998], - "enemy_1005_yokai": [24,16,8,0,60158], - "enemy_1005_yokai_2": [27,11,14,5256,113643], - "enemy_1005_yokai_3": [6,0,5,11587,126060], + "enemy_10034_cnvsax": [1,1,0,681,42998], + "enemy_1005_yokai": [24,12,12,0,56519], + "enemy_1005_yokai_2": [27,5,17,5019,75583], + "enemy_1005_yokai_3": [6,0,6,16842,92050], "enemy_10083_hlbird": [1,1,0,0,6450], - "enemy_10144_xdelk_2": [1,0,1,2904,32957], - "enemy_1050_lslime": [1,0,1,11734,13748], - "enemy_1158_divman": [1,1,0,130,14189], - "enemy_1174_duholy_2": [1,0,1,801,15691], - "enemy_1204_msfhu_2": [1,0,1,0,3], - "enemy_1267_nhpbr_2": [1,0,1,61,3079], - "enemy_1269_nhfly": [33,10,23,3841,20722], - "enemy_1321_wdarft": [1,0,1,0,0], - "enemy_1422_lrsldr_2": [1,0,1,0,19051], - "enemy_1516_jakill": [1,0,1,559,559], + "enemy_10144_xdelk_2": [1,0,1,3226,30020], + "enemy_1050_lslime": [1,0,1,11038,24737], + "enemy_1158_divman": [1,1,0,140,14189], + "enemy_1174_duholy_2": [1,0,1,1192,3341], + "enemy_1204_msfhu_2": [1,0,1,0,4], + "enemy_1267_nhpbr_2": [1,0,1,61,1368], + "enemy_1269_nhfly": [33,15,18,1358,19707], + "enemy_1321_wdarft": [1,0,1,0,2047], + "enemy_1422_lrsldr_2": [1,0,1,290,1118], + "enemy_1516_jakill": [1,0,1,81,186], "enemy_2034_sythef_2": [1,0,1,0,0] }, - "hooks": [1,130,5100,428,428,1138,1119,1063,65,120,29,30,0,8699,498,10,102,59,1,200,2,0,36], - "events": {"atk":499,"bounty":2,"deploy":25,"die":61,"dmg":1106,"fx":217,"heal":8,"layer":2,"leak":59,"skill":60,"spawn":119,"status":299}, - "fx": {"beam":22,"block":3,"catShield":2,"charge":1,"dilemma":2,"dodge":36,"explode":10,"explosion":2,"featherArrow":1,"flame":1,"frostNova":5,"garrison":2,"garrisonGrant":1,"overclock":1,"phase":2,"pull":1,"riposte":6,"rockslide":4,"shieldBreak":4,"slippery":1,"summon":11,"swordRain":65,"swordStorm":9,"telegraph":2,"thorns":5,"tornado":2,"tornadoPulse":9,"undying":7}, - "snaps": "a11f2665 9baaf19a e920dc19 198d3a45 baa40e7a 3b94af70 106e002a fdd90efe e21ec604 fe43a631 8239580b d00386be b6d9a443 250fb743 0e44df17 4b9bacbc ac746ded" + "hooks": [1,130,5100,419,419,1069,1051,388,57,119,20,21,0,7357,426,12,102,62,1,207,3,0,10], + "events": {"atk":485,"bounty":2,"deploy":25,"die":57,"dmg":959,"fx":147,"heal":4,"layer":3,"leak":62,"skill":42,"spawn":119,"status":274}, + "fx": {"block":8,"catShield":1,"charge":1,"dilemma":1,"dodge":10,"explode":18,"explosion":2,"featherArrow":1,"flame":1,"frostNova":4,"garrison":3,"garrisonGrant":1,"overclock":1,"pull":1,"riposte":2,"rockslide":2,"shieldBreak":5,"slippery":1,"summon":11,"swordRain":48,"swordStorm":5,"telegraph":1,"thorns":6,"tornado":1,"tornadoPulse":5,"undying":7}, + "snaps": "57fe2e2f 4a53b7b8 2e0d662f c2473d0c d61f8291 0f879595 34e652a4 ea9b995f 19d258e5 019f5b39 2e2a3d4d 8b38907c 2927da2c 3ad7a87f ce8d9d20 0b381f42 180cd6d8" }, "roster-011": { "about": "pass 0 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_21_a chess_char_4_24_a chess_char_4_25_a chess_char_4_26_a chess_char_4_02_b chess_char_4_06_b", @@ -672,7 +672,7 @@ "snaps": "c002e613 10a048e4 83882719 48595aaf c4331395 cfece443 01fb830e 82f827f8 d791c555 fec11375 d25c1e59 b986924f 415cc8f6 cc8bf2ac 1aec718d d2106326 d7cd1fea 2093bc04 facf1e90" }, "roster-012": { - "about": "pass 0 band 5: chess_char_4_17_b chess_char_4_18_b chess_char_4_11_b chess_char_4_12_b chess_char_4_19_b chess_char_4_22_b chess_char_4_16_b chess_char_4_10_b chess_char_4_13_b chess_char_4_14_b chess_char_4_20_b chess_char_4_21_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "pass 0 band 5: chess_char_4_17_b chess_char_4_18_b chess_char_4_11_b chess_char_4_19_b chess_char_4_22_b chess_char_4_16_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b chess_char_4_20_b chess_char_4_21_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": true, "kind": "normal", "stageId": "act1autochess_m01", @@ -680,33 +680,33 @@ "round": 10, "seed": 1517795683, "waveId": "act1autochess_h03", - "time": 174.73, - "ticks": 5242, + "time": 161.8, + "ticks": 4854, "reason": "cleared", "killed": 97, - "total": 98, + "total": 100, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 278, + "rngDraws": 191, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":97,"total":98,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":10,"dmg":997508,"bossDmg":0,"heal":27788,"deaths":12,"layerGains":{"preciShip":16}} + "p1": {"killed":97,"total":100,"perfect":false,"leaks":3,"leaksUncounted":0,"coins":10,"dmg":973740,"bossDmg":0,"heal":22888,"deaths":5,"layerGains":{"preciShip":8}} }, "units": [ - ["p1",1,"op","chess_char_4_17_b",1,"uniequip_002_hsguma",0,0,7,0,276,3513,0,11,0], - ["p1",2,"op","chess_char_4_18_b",1,"uniequip_002_mudrok",6069,1,10,21,192055,12064,12029,56,29], - ["p1",3,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,104,0,2798,7356,0,3,2], - ["p1",4,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,97,10,66884,6424,1960,27,3], - ["p1",5,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",1681.22,1,123,5,49023,4673,0,36,3], - ["p1",6,"op","chess_char_4_22_b",2,"uniequip_002_svrash",0,0,8,8,93767,11156,0,47,2], - ["p1",7,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,9,0,4627,2645,0,43,1], - ["p1",8,"op","chess_char_4_10_b",1,"uniequip_002_aroma",319.84,1,4,33,359780,1344,0,54,4], - ["p1",9,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,5,1,21641,1926,0,46,18], - ["p1",10,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,101,17,148925,3252,0,25,11], - ["p1",11,"op","chess_char_4_20_b",2,"uniequip_002_fartth",0,0,91,2,57733,2838,0,22,2], - ["p1",12,"op","chess_char_4_21_b",1,"uniequip_002_plosis",1584,1,6,0,0,641,13799,35,1], - ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], - ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null], + ["p1",1,"op","chess_char_4_17_b",1,"uniequip_002_hsguma",1863.45,1,7,1,772,1650,0,30,0], + ["p1",2,"op","chess_char_4_18_b",1,"uniequip_002_mudrok",6104,1,9,5,79773,1534,1534,35,6], + ["p1",3,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,122,1,6068,3486,0,11,2], + ["p1",4,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",0,0,99,2,41844,4236,0,35,3], + ["p1",5,"op","chess_char_4_22_b",2,"uniequip_002_svrash",2169,1,121,9,79043,5538,0,22,3], + ["p1",6,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,8,0,9,1137,0,9,1], + ["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",145.6,1,4,0,0,1518,0,0,0], + ["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,5,2,10223,1114,1114,8,2], + ["p1",9,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,11,19,181690,2791,0,91,37], + ["p1",10,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1526,1,13,42,466520,7956,0,56,23], + ["p1",11,"op","chess_char_4_20_b",2,"uniequip_002_fartth",700.8,1,6,16,107798,718,0,38,6], + ["p1",12,"op","chess_char_4_21_b",1,"uniequip_002_plosis",1484,1,14,0,0,9693,20240,100,2], + ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null], + ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,0,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,0,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,0,3,0,0,0,0,0,null] @@ -715,58 +715,24 @@ "enemy_10042_prtrop": [1,1,0,0,6912], "enemy_10085_hllevi_2": [1,1,0,0,92160], "enemy_10159_mntrjn": [1,1,0,0,32256], - "enemy_1062_rager_2": [1,1,0,2649,34560], + "enemy_1062_rager_2": [1,1,0,0,34560], "enemy_1160_hvyslr_2": [1,1,0,0,16128], - "enemy_1183_mlasrt": [1,1,0,1417,7488], - "enemy_1207_sfji_2": [1,1,0,1923,16128], - "enemy_1208_msfji_2": [2,2,0,0,60], - "enemy_1267_nhpbr": [45,45,0,8681,233280], - "enemy_1267_nhpbr_2": [24,24,0,6514,152064], - "enemy_1270_nhstlk": [1,1,0,21,13824], - "enemy_1270_nhstlk_2": [15,15,0,11284,276480], - "enemy_1325_cbgpro_2": [1,1,0,15,5299], - "enemy_1425_lrcmra_2": [1,1,0,1199,28800], - "enemy_1525_blkswb": [1,0,1,17888,47988], - "enemy_2050_smsha": [1,1,0,6241,46080] + "enemy_1183_mlasrt": [1,1,0,1482,7488], + "enemy_1207_sfji_2": [1,1,0,0,16128], + "enemy_1208_msfji_2": [4,2,2,0,112], + "enemy_1267_nhpbr": [45,45,0,14256,233280], + "enemy_1267_nhpbr_2": [24,24,0,6700,152064], + "enemy_1270_nhstlk": [1,1,0,0,13824], + "enemy_1270_nhstlk_2": [15,15,0,8469,276480], + "enemy_1325_cbgpro_2": [1,1,0,0,5299], + "enemy_1425_lrcmra_2": [1,1,0,718,28800], + "enemy_1525_blkswb": [1,0,1,7561,23419], + "enemy_2050_smsha": [1,1,0,2185,46080] }, - "hooks": [1,121,5242,526,526,1444,1693,1144,109,113,76,75,0,13597,1632,56,98,1,1,119,2,1,11], - "events": {"atk":832,"bounty":5,"deploy":20,"die":112,"dmg":1676,"fx":378,"heal":78,"layer":2,"leak":1,"skill":152,"spawn":115,"status":479}, - "fx": { - "beam": 5, - "blink": 2, - "block": 2, - "burst": 1, - "displace": 25, - "dodge": 11, - "explode": 5, - "explosion": 11, - "featherArrow": 2, - "flame": 3, - "frostNova": 18, - "garrison": 2, - "garrisonGrant": 1, - "healField": 1, - "levitate": 83, - "overclock": 2, - "palsy": 4, - "pull": 2, - "revive": 1, - "riposte": 9, - "rockslide": 29, - "shieldBreak": 17, - "slash": 19, - "slippery": 4, - "splash": 29, - "summon": 1, - "swordStorm": 1, - "telegraph": 2, - "thorns": 2, - "tornado": 3, - "tornadoPulse": 10, - "truesilver": 2, - "zone": 69 - }, - "snaps": "c0395dfa 0bc3a88e 16ea4fc8 44910193 6b2d71a2 4c4f69c8 95b16219 8cea36a9 c1cf499b 2e4e30b2 5b44582c 697803ae 5af424df 15bc9baa 36e7dd7e 29ea8855 8bce8feb e3404557" + "hooks": [1,121,4854,470,470,1388,1387,830,102,108,85,83,0,16257,1775,20,100,3,1,112,1,0,3], + "events": {"atk":628,"bounty":5,"deploy":18,"die":105,"dmg":1379,"fx":236,"heal":222,"layer":1,"leak":3,"skill":170,"spawn":117,"status":878}, + "fx": {"beam":6,"blink":2,"block":1,"displace":10,"dodge":3,"explode":4,"explosion":23,"featherArrow":6,"flame":3,"frostNova":37,"garrison":1,"garrisonGrant":1,"healField":2,"overclock":2,"palsy":1,"pull":2,"revive":1,"riposte":3,"rockslide":6,"shieldBreak":8,"slash":19,"summon":1,"swordStorm":1,"telegraph":3,"thorns":6,"tornado":2,"tornadoPulse":10,"truesilver":3,"zone":69}, + "snaps": "273dcc8e c323f708 7c1d7d8a 0f1c8a5d fa1faa7c 5973c4b4 1abb6f51 fc254e01 5e27fbd7 4c75c9e8 3d3d371b d21abedf 1215afdd c03925aa 45aadc00 eecaaba5 03eee058" }, "roster-013": { "about": "pass 0 band 5: chess_char_4_23_b chess_char_5_08_a chess_char_5_01_a chess_char_5_05_a chess_char_5_06_a chess_char_5_07_a chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b chess_char_5_02_a chess_char_5_03_a chess_char_5_10_a", @@ -1754,7 +1720,7 @@ "snaps": "7c092213 7eeed0b1 ac8f2ed3 3858c149 e8ea91a7 8453351a 4fc7b210 32f63df8 4e74f555 5bfbe308 7746a517 c9e84d55 480b39df 046d3213 b82f6b7a f22d156a 686086b5" }, "roster-029": { - "about": "pass 1 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_12_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "pass 1 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "normal", "stageId": "act1autochess_m07", @@ -1762,52 +1728,52 @@ "round": 8, "seed": 3016944661, "waveId": "act1autochess_h01", - "time": 158.8, - "ticks": 4764, + "time": 154.7, + "ticks": 4641, "reason": "cleared", - "killed": 78, + "killed": 76, "total": 85, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 99, + "rngDraws": 83, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":78,"total":85,"perfect":false,"leaks":7,"leaksUncounted":0,"coins":4,"dmg":318167,"bossDmg":0,"heal":3327,"deaths":10,"layerGains":{"preciShip":4}} + "p1": {"killed":76,"total":85,"perfect":false,"leaks":9,"leaksUncounted":0,"coins":4,"dmg":309220,"bossDmg":0,"heal":3524,"deaths":6,"layerGains":{"preciShip":4}} }, "units": [ - ["p1",1,"op","chess_char_4_17_a",0,null,1139.6,1,110,2,20509,2880,0,64,2], - ["p1",2,"op","chess_char_4_18_a",0,null,2867,1,6,7,22524,4394,2929,55,2], - ["p1",3,"op","chess_char_4_11_a",0,null,2144,1,106,2,3579,3145,0,11,0], - ["p1",4,"op","chess_char_4_12_a",0,null,1754,1,104,3,8643,2902,398,27,9], - ["p1",5,"op","chess_char_4_19_a",0,null,1560,1,105,4,8607,3442,0,39,4], - ["p1",6,"op","chess_char_4_07_a",0,null,1738,1,89,2,13301,2526,0,35,2], - ["p1",7,"op","chess_char_4_16_a",0,null,257.6,1,63,20,55897,11230,0,97,5], - ["p1",8,"op","chess_char_4_09_a",0,null,386,1,3,7,25390,1000,0,12,9], - ["p1",9,"op","chess_char_4_10_a",0,null,0,0,5,0,0,1338,0,0,0], - ["p1",10,"op","chess_char_4_13_a",0,null,0,0,7,8,30420,2137,0,64,19], - ["p1",11,"op","chess_char_4_14_a",0,null,1096,1,107,8,39405,5906,0,16,1], - ["p1",12,"op","chess_char_4_20_a",0,null,1217,1,11,15,89892,500,0,55,2], - ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], - ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,15,0,0,0,0,0,null], + ["p1",1,"op","chess_char_4_17_a",0,null,1139.6,1,101,0,13558,2008,0,47,2], + ["p1",2,"op","chess_char_4_18_a",0,null,2580,1,5,2,5324,3725,2225,30,1], + ["p1",3,"op","chess_char_4_11_a",0,null,2144,1,105,0,1383,3073,0,15,0], + ["p1",4,"op","chess_char_4_19_a",0,null,1560,1,94,1,353,1860,0,12,4], + ["p1",5,"op","chess_char_4_07_a",0,null,331.2,1,11,5,8888,2907,0,33,2], + ["p1",6,"op","chess_char_4_16_a",0,null,601.6,1,63,12,37012,9546,0,66,5], + ["p1",7,"op","chess_char_4_09_a",0,null,1326,1,14,17,84925,520,0,36,17], + ["p1",8,"op","chess_char_4_10_a",0,null,338,1,4,0,0,1500,0,0,0], + ["p1",9,"op","chess_char_4_12_a",0,null,1754,1,6,0,0,1899,1299,0,0], + ["p1",10,"op","chess_char_4_13_a",0,null,1587,1,8,3,14535,500,0,40,13], + ["p1",11,"op","chess_char_4_14_a",0,null,0,0,10,16,48517,7376,0,26,2], + ["p1",12,"op","chess_char_4_20_a",0,null,223,1,12,20,94726,1094,0,56,2], + ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,15,0,0,0,0,0,null], + ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null] ], "enemies": { "enemy_10081_mpplai": [1,1,0,0,2000], "enemy_1026_aghost": [1,1,0,0,3040], - "enemy_1148_dssbr": [45,44,1,2857,99163], - "enemy_1148_dssbr_2": [27,27,0,434,77760], - "enemy_1160_hvyslr_2": [1,0,1,3783,2416], - "enemy_1200_msfjin_2": [1,0,1,0,29], - "enemy_1272_nhtank_2": [1,1,0,12240,12000], - "enemy_1407_hummbd": [1,1,0,48,3600], - "enemy_1439_dslntf": [6,3,3,7340,112566], - "enemy_2002_bearmi_2": [1,0,1,2252,5593] + "enemy_1148_dssbr": [45,43,2,146,99626], + "enemy_1148_dssbr_2": [27,26,1,150,76514], + "enemy_1160_hvyslr_2": [1,0,1,6789,9376], + "enemy_1200_msfjin_2": [1,1,0,0,35], + "enemy_1272_nhtank_2": [1,0,1,8756,2813], + "enemy_1407_hummbd": [1,1,0,20,3600], + "enemy_1439_dslntf": [6,2,4,4696,103415], + "enemy_2002_bearmi_2": [1,1,0,1311,8800] }, - "hooks": [1,109,4764,670,670,1086,1879,759,88,95,55,54,0,22092,730,68,85,7,1,88,1,10,8], - "events": {"atk":685,"bounty":2,"deploy":22,"die":88,"dmg":1865,"fx":73,"heal":477,"layer":1,"leak":7,"skill":112,"spawn":101,"status":236}, - "fx": {"block":10,"burst":10,"displace":3,"dodge":8,"dp":4,"explode":1,"expose":2,"garrison":1,"garrisonGrant":1,"phase":1,"riposte":8,"shieldBreak":14,"swordRain":5,"zone":5}, - "snaps": "5ee1d302 1c02fbcd cbb518f8 fc90ae00 98195e0a 21da2468 b9aa38e0 db0862b7 a4015752 c3d0537c 5e0bdc1d b3dd31dc 595b167d 137aa308 f30e8d89 932e6025" + "hooks": [1,106,4641,470,470,920,1638,1314,82,91,48,48,0,22203,805,35,85,9,1,82,1,4,1], + "events": {"atk":508,"bounty":2,"deploy":19,"die":82,"dmg":1628,"fx":45,"heal":418,"layer":1,"leak":9,"skill":99,"spawn":101,"status":149}, + "fx": {"block":11,"burst":4,"dodge":1,"dp":4,"explode":1,"expose":1,"garrison":1,"garrisonGrant":1,"phase":1,"riposte":1,"shieldBreak":10,"swordRain":5,"zone":4}, + "snaps": "d1a66fbb 1e4c3412 cfa655f4 33ae5aea be858e5a e390032f a14b2f14 f815866a e4173185 0a72a5c9 f546a0e1 e7e58926 f223a279 820a4de9 842392b8 3e71a88c" }, "roster-030": { "about": "pass 1 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_21_a chess_char_4_24_a chess_char_4_25_a chess_char_4_26_a chess_char_4_02_b chess_char_4_06_b", @@ -2411,7 +2377,7 @@ "snaps": "7039516f 1f992cb5 0f5e59af c4b1bbc5 07a0826f 56c348a1 323da105 91eb067a 068e4335 66187a93 1732df53 b1fbe31f f69a53e8 250909f9 25729cd3 5c78fdcd 2b29dd1f" }, "roster-040": { - "about": "pass 2 band 4: chess_char_4_01_a chess_char_4_17_a chess_char_4_18_a chess_char_4_12_a chess_char_4_04_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_3_19_b chess_char_3_21_b chess_char_4_02_a chess_char_4_13_a token_10028_vigil_wolf", + "about": "pass 2 band 4: chess_char_4_01_a chess_char_4_17_a chess_char_4_18_a chess_char_4_04_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_3_19_b chess_char_3_21_b chess_char_4_02_a chess_char_4_12_a chess_char_4_13_a token_10028_vigil_wolf", "fast": false, "kind": "normal", "stageId": "act1autochess_m07", @@ -2422,50 +2388,50 @@ "time": 170, "ticks": 5100, "reason": "timeout", - "killed": 23, + "killed": 28, "total": 65, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 243, + "rngDraws": 295, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":23,"total":65,"perfect":false,"leaks":42,"leaksUncounted":0,"coins":2,"dmg":401720,"bossDmg":0,"heal":502,"deaths":25,"layerGains":{}}}, + "players": {"p1":{"killed":28,"total":65,"perfect":false,"leaks":37,"leaksUncounted":0,"coins":2,"dmg":561253,"bossDmg":0,"heal":2277,"deaths":24,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_01_a",1,null,0,0,4,0,3410,2638,0,29,1], - ["p1",2,"op","chess_char_4_17_a",2,null,0,0,7,0,13400,2849,0,10,1], - ["p1",3,"op","chess_char_4_18_a",2,null,0,0,9,0,12723,2867,0,11,1], - ["p1",4,"op","chess_char_4_12_a",1,null,0,0,87,1,22797,3856,348,27,1], - ["p1",5,"op","chess_char_4_04_a",2,null,1260.13,1,96,2,10615,7540,0,12,5], - ["p1",6,"op","chess_char_4_07_a",2,null,0,0,77,0,9369,7998,0,23,1], - ["p1",7,"op","chess_char_4_16_a",1,null,0,0,94,2,53656,7476,0,11,7], - ["p1",8,"op","chess_char_4_09_a",2,null,0,0,3,0,0,1336,0,0,0], - ["p1",9,"op","chess_char_3_19_b",1,"none",0,0,5,5,51724,1648,0,66,4], - ["p1",10,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,95,8,151296,3180,0,81,9], - ["p1",11,"op","chess_char_4_02_a",1,null,0,0,84,1,20900,2856,0,8,1], - ["p1",12,"op","chess_char_4_13_a",2,null,0,0,79,4,51831,3174,0,54,1], - ["p1",13,"token","token_10028_vigil_wolf",null,null,0,0,6,0,0,2567,154,0,null], + ["p1",1,"op","chess_char_4_01_a",1,null,0,0,3,0,1603,2638,0,26,1], + ["p1",2,"op","chess_char_4_17_a",2,null,0,0,6,0,15529,2849,0,9,1], + ["p1",3,"op","chess_char_4_18_a",2,null,0,0,8,0,11377,3440,573,16,1], + ["p1",4,"op","chess_char_4_04_a",2,null,1463.44,1,97,2,30861,7337,0,20,5], + ["p1",5,"op","chess_char_4_07_a",2,null,0,0,83,0,9257,8298,0,12,1], + ["p1",6,"op","chess_char_4_16_a",1,null,663.39,1,96,4,69623,9155,1097,22,9], + ["p1",7,"op","chess_char_4_09_a",2,null,655.94,1,88,0,19617,2016,0,21,1], + ["p1",8,"op","chess_char_3_19_b",1,"none",0,0,4,7,55272,1648,0,69,5], + ["p1",9,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,95,4,220834,3180,0,104,11], + ["p1",10,"op","chess_char_4_02_a",1,null,0,0,86,5,50113,2856,0,18,1], + ["p1",11,"op","chess_char_4_12_a",1,null,0,0,11,4,43045,2207,453,38,1], + ["p1",12,"op","chess_char_4_13_a",2,null,0,0,74,2,34124,3174,0,56,1], + ["p1",13,"token","token_10028_vigil_wolf",null,null,0,0,5,0,0,3541,154,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null] ], "enemies": { - "enemy_1005_yokai": [24,11,13,0,43819], - "enemy_1005_yokai_2": [27,8,15,8571,80022], - "enemy_1005_yokai_3": [6,1,5,18161,169071], - "enemy_10065_ftzlc": [1,1,0,461,16339], - "enemy_10162_mnctpt": [1,0,1,8289,20600], - "enemy_1119_vofsd": [1,0,1,187,45251], + "enemy_1005_yokai": [24,13,11,0,54982], + "enemy_1005_yokai_2": [27,11,12,9355,92235], + "enemy_1005_yokai_3": [6,1,5,16269,278698], + "enemy_10065_ftzlc": [1,1,0,0,16339], + "enemy_10162_mnctpt": [1,0,1,7018,55537], + "enemy_1119_vofsd": [1,0,1,862,32824], "enemy_1196_msfyin_2": [1,1,0,0,3], - "enemy_1254_lypa_2": [1,0,1,7915,22178], - "enemy_1367_dseed": [1,0,1,0,1619], - "enemy_1517_xi": [1,0,1,6402,2809], + "enemy_1254_lypa_2": [1,0,1,10056,22924], + "enemy_1367_dseed": [1,0,1,0,1882], + "enemy_1517_xi": [1,0,1,8269,5820], "enemy_9016_acstmr": [1,1,0,0,8] }, - "hooks": [1,95,5100,558,558,836,872,514,50,88,32,31,16,8324,314,21,65,38,1,60,0,1,10], - "events": {"atk":630,"bounty":1,"deploy":28,"die":50,"dmg":866,"fx":109,"heal":1,"leak":38,"skill":63,"spawn":80,"status":155}, - "fx": {"beam":5,"block":3,"buff":5,"burst":1,"coldWind":1,"displace":17,"dodge":10,"dp":4,"iceSpike":1,"liberate":1,"overclock":1,"overload":1,"palsy":4,"revive":3,"rockfall":1,"sentry":6,"shadowWeave":8,"shield":7,"shieldBreak":6,"stone":1,"swordStorm":7,"telegraph":2,"volley":9,"wake":1,"wolfShadow":1,"wolfShadowLost":2,"zone":1}, - "snaps": "ed481fc3 8e0dc466 ef4ce4ad d085ef7a c9763ca6 af64f527 2d3af1d5 67a9d60b 2e59cb78 c998981e 2978105f aef54882 19722e20 04daeecd b596b323 c3b27682 6a8a0ef3" + "hooks": [1,96,5100,650,650,1044,1076,731,55,87,38,37,13,10088,270,14,65,33,1,66,0,2,19], + "events": {"atk":742,"bounty":1,"deploy":29,"die":54,"dmg":1064,"fx":117,"heal":3,"leak":33,"skill":75,"spawn":80,"status":169}, + "fx": {"beam":5,"block":4,"buff":4,"burst":2,"coldWind":1,"dodge":19,"dp":5,"explode":1,"liberate":1,"overclock":1,"overload":1,"palsy":3,"revive":3,"ripple":1,"rockfall":1,"sentry":6,"shadowWeave":14,"shield":7,"shieldBreak":7,"stone":1,"swordStorm":9,"telegraph":3,"volley":11,"wake":1,"wolfShadow":2,"wolfShadowLost":3,"zone":1}, + "snaps": "96990ab6 47d9fcbb b6682854 8a9c5942 60e5c9ed 6b9c44fe a5ca7551 1568032d 1be5ada7 b119dbd8 85869e7c 3af299cb d618f1e8 5d28b358 1cf9df99 ca9b5cd1 9233013f" }, "roster-041": { - "about": "pass 2 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_19_a chess_char_4_22_a chess_char_4_12_b chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_20_a chess_char_4_24_a chess_char_4_25_a chess_char_4_02_b", + "about": "pass 2 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_19_a chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_20_a chess_char_4_24_a chess_char_4_25_a chess_char_4_02_b chess_char_4_12_b", "fast": false, "kind": "normal", "stageId": "act2autochess_m01", @@ -2476,46 +2442,44 @@ "time": 190, "ticks": 5700, "reason": "timeout", - "killed": 41, + "killed": 46, "total": 47, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 119, + "rngDraws": 34, "errors": {"count":0,"kinds":[]}, - "players": { - "p1": {"killed":41,"total":47,"perfect":false,"leaks":6,"leaksUncounted":0,"coins":8,"dmg":528616,"bossDmg":0,"heal":26818,"deaths":6,"layerGains":{"visiShip":4}} - }, + "players": {"p1":{"killed":46,"total":47,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":8,"dmg":559871,"bossDmg":0,"heal":11418,"deaths":7,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_23_a",1,null,0,0,59,3,33316,4358,0,36,2], - ["p1",2,"op","chess_char_4_01_b",1,"none",1272.73,1,9,2,18415,3718,0,125,2], - ["p1",3,"op","chess_char_4_19_a",1,null,0,0,56,0,1987,3120,0,57,2], - ["p1",4,"op","chess_char_4_22_a",1,null,2022,1,7,0,1927,5565,1006,57,1], - ["p1",5,"op","chess_char_4_12_b",1,"none",4562.3,1,11,0,35227,17118,13682,86,5], - ["p1",6,"op","chess_char_4_04_b",2,"uniequip_002_ines",2149,1,14,11,181631,3872,0,149,1], - ["p1",7,"op","chess_char_4_07_b",2,"none",0,0,52,1,33633,4466,0,51,2], - ["p1",8,"op","chess_char_4_09_b",2,"uniequip_004_mizuki",1756,1,1,1,6302,263,0,1,1], - ["p1",9,"op","chess_char_4_20_a",1,null,1217,1,2,1,29735,0,0,78,3], - ["p1",10,"op","chess_char_4_24_a",2,null,1726,1,3,13,140546,0,0,36,4], - ["p1",11,"op","chess_char_4_25_a",1,null,1221,1,4,6,28378,0,764,0,3], - ["p1",12,"op","chess_char_4_02_b",1,"none",2966.25,1,5,3,17519,0,0,5,2], - ["p1","~1","token","char_613_acmedc",null,null,1314,1,13,0,0,0,11367,37,2] + ["p1",1,"op","chess_char_4_23_a",1,null,2179,1,65,0,6366,2179,0,34,1], + ["p1",2,"op","chess_char_4_01_b",1,"none",2245.72,1,9,0,6233,2745,0,95,2], + ["p1",3,"op","chess_char_4_19_a",1,null,0,0,67,0,1134,4680,0,25,2], + ["p1",4,"op","chess_char_4_22_a",1,null,2022,1,7,0,1073,3917,711,32,1], + ["p1",5,"op","chess_char_4_04_b",2,"uniequip_002_ines",2149,1,66,4,59256,11203,0,61,4], + ["p1",6,"op","chess_char_4_07_b",2,"none",2233,1,8,0,770,1498,0,5,2], + ["p1",7,"op","chess_char_4_09_b",2,"uniequip_004_mizuki",702.4,1,12,26,324777,2301,0,52,2], + ["p1",8,"op","chess_char_4_20_a",1,null,1217,1,2,4,22337,0,0,82,3], + ["p1",9,"op","chess_char_4_24_a",2,null,1726,1,3,10,99599,0,0,25,3], + ["p1",10,"op","chess_char_4_25_a",1,null,1221,1,4,2,12750,0,436,0,3], + ["p1",11,"op","chess_char_4_02_b",1,"none",2966.25,1,1,0,0,0,0,0,0], + ["p1",12,"op","chess_char_4_12_b",1,"none",4562.3,1,5,0,25577,0,0,67,4], + ["p1","~1","token","char_613_acmedc",null,null,1314,1,13,0,0,0,10271,24,1] ], "enemies": { - "enemy_1001_bigbo": [1,1,0,2989,17600], + "enemy_1001_bigbo": [1,1,0,2027,17600], "enemy_10097_crshd": [1,1,0,0,8000], - "enemy_1045_hammer": [1,1,0,532,8000], - "enemy_1045_hammer_2": [6,5,0,10419,81316], - "enemy_1061_zomshd": [33,28,0,23958,384890], + "enemy_1045_hammer": [1,1,0,0,8000], + "enemy_1045_hammer_2": [6,5,0,19501,93024], + "enemy_1061_zomshd": [33,33,0,4261,399634], "enemy_1166_dusbr": [1,1,0,0,2400], "enemy_1204_msfhu_2": [1,1,0,0,6], - "enemy_1288_duskls_2": [1,1,0,0,4805], - "enemy_1427_lrnazg": [1,1,0,1405,12000], - "enemy_2010_csdcr": [1,1,0,2913,9600] + "enemy_1288_duskls_2": [1,1,0,0,9607], + "enemy_1427_lrnazg": [1,1,0,720,12000], + "enemy_2010_csdcr": [1,1,0,960,9600] }, - "hooks": [1,64,5700,1157,1157,1435,1439,27488,47,48,30,24,73,26690,96,56,47,0,1,48,1,0,14], - "events": {"atk":1342,"bounty":4,"deploy":17,"die":48,"dmg":1409,"fx":192,"heal":72,"layer":1,"skill":54,"spawn":60,"status":325}, - "fx": {"aoe":2,"beam":1,"buff":2,"devour":4,"displace":4,"dodge":14,"ember":1,"garrison":1,"garrisonGrant":1,"link":3,"mote":98,"overload":4,"reweave":3,"riposte":4,"ripple":1,"sentry":2,"shadowWeave":37,"shield":1,"snow":1,"summon":1,"wake":5,"zone":2}, - "snaps": "39e7ce6d 6bf38ad7 b97d538a cd636ea4 171d3c97 cdfd8c44 d612e433 5f097ac7 053027bd a16e3f13 288a1e29 9b60247c 73a0d04c 4935688a fe7f1739 1881d361 9c94ffe2 24053735 3403994c" + "hooks": [1,67,5700,642,642,1055,1059,20714,53,54,28,23,62,26339,94,58,47,0,1,55,0,0,6], + "events": {"atk":946,"bounty":4,"deploy":20,"die":54,"dmg":1015,"fx":168,"heal":48,"skill":51,"spawn":60,"status":343}, + "fx": {"aoe":2,"beam":4,"buff":2,"devour":3,"displace":29,"dodge":6,"ember":2,"garrisonGrant":1,"link":3,"mote":71,"overload":3,"revive":1,"reweave":3,"riposte":2,"ripple":2,"sentry":5,"shadowWeave":19,"shield":4,"snow":1,"summon":1,"wake":4}, + "snaps": "10b0fc57 1879e30f 44354394 dddd1d0a 627a31ff cf3c19d7 47582a23 87c2e2e7 2d0f5158 d9b586e6 18b235f7 fdb8d063 12d39f7e f01978fd f7e457a8 eb5e327f fccdb560 79c7c5d0 4f791ba7" }, "roster-042": { "about": "pass 2 band 5: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_5_01_a chess_char_4_16_b chess_char_4_13_b chess_char_4_20_b chess_char_4_24_b chess_char_4_25_b chess_char_5_02_a", diff --git a/test/match/board.test.js b/test/match/board.test.js index 56845893..9b51b408 100644 --- a/test/match/board.test.js +++ b/test/match/board.test.js @@ -55,27 +55,26 @@ test('glyph rules: melee only on LOW buildable ALL/MELEE; ranged also on HIGH/RA assert.ok(canPlace(buildDeployMap(null), 'melee', 10, 5)); }); -test('positionClass: melee stays ground-only; only elite 歌蕾蒂娅 + HOK-Y is widened (owner 2026-10-04)', () => { +test('positionClass: a MELEE chess whose trait reads 「可以放置于远程位」 is widened, normal or elite, whatever the module (owner 2026-10-05)', () => { assert.equal(positionClass({ position: 'MELEE' }), 'melee'); assert.equal(positionClass({ position: 'MELEE', placement: 'all' }), 'melee', 'the old placement field is ignored'); - assert.equal(basePositionClass({ position: 'MELEE', isGolden: true, charId: 'char_474_glady' }), 'melee'); + assert.equal(positionClass({ position: 'MELEE', trait: { desc: '技能可以使敌人产生位移\n可以放置于远程位' } }), 'all', 'the trait line'); + assert.equal(positionClass({ position: 'MELEE', trait: { desc: '可以额外部署在远程位' } }), 'melee', 'another wording is not the line'); + assert.equal(positionClass({ position: 'RANGED', trait: { desc: '可以放置于远程位' } }), 'ranged', 'a ranged record keeps its class'); + assert.equal(basePositionClass({ position: 'MELEE', trait: { desc: '可以放置于远程位' } }), 'melee', 'the battle class stays melee'); assert.equal(positionClass({ position: 'RANGED' }), 'ranged'); assert.equal(positionClass({ position: 'ALL' }), 'all'); assert.equal(positionClass(null), 'all'); - const HOK_Y = 'uniequip_003_glady'; - const gladE = DATA.chess.chess_char_4_12_b; const map = buildDeployMap(DATA.stages.act2autochess_m01); - assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_4_12_a, HOK_Y), 10, 4), 'normal 歌蕾蒂娅, even with the id, not'); - assert.ok(!canPlace(map, positionClass(gladE), 10, 4), 'elite with no module id (default is not passed) not'); - assert.ok(!canPlace(map, positionClass(gladE, 'uniequip_002_glady'), 10, 4), 'HOK-X not'); - assert.ok(!canPlace(map, positionClass(gladE, 'none'), 10, 4), 'no module not'); - assert.ok(canPlace(map, positionClass(gladE, HOK_Y), 10, 4), 'elite + HOK-Y on the 高台'); - assert.ok(canPlace(map, positionClass(gladE, HOK_Y), 9, 3), 'and still on the ground'); - assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_2_03_b, HOK_Y), 10, 4), '崖心 not'); - assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_3_07_b, HOK_Y), 10, 4), '见行者 not'); + // the six trait holders: 歌蕾蒂娅 / 崖心 (钩索师) and 见行者 (推击手), normal and elite + for (const id of ['chess_char_4_12_a', 'chess_char_4_12_b', 'chess_char_2_03_a', 'chess_char_2_03_b', 'chess_char_3_07_a', 'chess_char_3_07_b']) { + assert.equal(positionClass(DATA.chess[id]), 'all', id); + assert.ok(canPlace(map, positionClass(DATA.chess[id]), 10, 4), `${id} on the 高台`); + assert.ok(canPlace(map, positionClass(DATA.chess[id]), 9, 3), `${id} still on the ground`); + assert.equal(basePositionClass(DATA.chess[id]), 'melee', `${id} blocks like a melee unit`); + assert.equal(DATA.chess[id].placement, undefined); + } assert.ok(!canPlace(map, positionClass(DATA.chess.chess_char_1_02_a), 10, 4), '角峰 (重装) not'); - assert.equal(DATA.chess.chess_char_4_12_a.placement, undefined); - assert.equal(gladE.placement, undefined); }); test('g.move: legality per chess position, BAD_TILE outside, deploy cap 8, swaps allowed at cap', () => { diff --git a/test/match/feedback1-placement.test.js b/test/match/feedback1-placement.test.js index 69320418..59cb0bbf 100644 --- a/test/match/feedback1-placement.test.js +++ b/test/match/feedback1-placement.test.js @@ -11,13 +11,15 @@ // nowhere to go); moving the owner sends it back anyway (PRTS 卫戍协议/帮助 "移动干员时,其所属召唤物全部退场并重置 // 至手牌区") — with no room it leaves the board until the next round start. // The sim side (突袭 landing tile, tactical point) is test/sim/feedback1-water.test.js. -// Owner's decision 2026-10-04 reverses DESIGN §22.6: the trait 「可以放置于远程位」 is not trusted. Only elite -// 歌蕾蒂娅 carrying HOK-Y 淡金坠饰 (uniequip_003_glady) may stand on a 高台. The battle keeps position MELEE -// (on a 高台 she attacks but blocks nothing). A bot may plan that one loadout on a 高台; everyone else stays on the ground. +// 高台: the owner's decision of 2026-10-05 (reversing the one of 2026-10-04, elite 歌蕾蒂娅 with HOK-Y only) follows +// PRTS — every MELEE chess whose trait reads 「可以放置于远程位」 (the 钩索师 / 推击手 branch trait: 歌蕾蒂娅, 崖心, 见行者, +// normal and elite) may stand on a 高台, with any module or none; raised with the PRTS source in PR #69 by +// @sunstricken. The battle keeps position MELEE (on a 高台 they attack but block nothing). The bots plan them on a 高台 +// that covers the enemy road; every other melee unit stays on the ground. import { test } from 'node:test'; import assert from 'node:assert/strict'; import { buildDeployMap, canPlace as boardCanPlace, legalTiles, positionClass, placeClass, tileKey, ownerRangeKeys } from '../../server/match/board.js'; -import { GLADIIA_HOK_Y } from '../../shared/highGround.js'; +import { PLACE_ON_RANGED, meleeOnHighGround } from '../../shared/highGround.js'; import { ERR } from '../../shared/constants.js'; import { DATA, makeMatch, give, giveItem, checkInvariants, chessOfTier } from './harness.js'; import { botPrep, planLayout, fieldModel } from '../../server/match/bot.js'; @@ -304,75 +306,67 @@ test('#9 bots place 狼群 / 流形 only inside their owner\'s range', () => { }); // --------------------------------------------------------------------------------------------------------------------- -// 高台: only elite 歌蕾蒂娅 + HOK-Y (owner's decision 2026-10-04) +// 高台: every melee chess whose trait reads 「可以放置于远程位」, any module (the owner's decision of 2026-10-05) const HIGH_STAGE = 'act2autochess_m01'; const HIGH = ['10,4', '11,4', '12,4']; // 战场#01(下半)'s ranged-only (高台) tiles const GLAD_N = 'chess_char_4_12_a'; const GLAD_E = 'chess_char_4_12_b'; // the golden record +const CLIFF_N = 'chess_char_2_03_a'; const CLIFF_E = 'chess_char_2_03_b'; const FORCER_N = 'chess_char_3_07_a'; const FORCER_E = 'chess_char_3_07_b'; +const HOLDERS = [GLAD_N, GLAD_E, CLIFF_N, CLIFF_E, FORCER_N, FORCER_E]; const HOK_X = 'uniequip_002_glady'; +const HOK_Y = 'uniequip_003_glady'; const TANK = (c) => c.profession === 'TANK' && c.position === 'MELEE'; const rc = (k) => k.split(',').map(Number); const toHand = (m, ps, p) => move(m, p.uid, { area: 'hand', idx: ps.hand.findIndex((x) => x == null) }); -const equip = (ps, module) => { - assert.equal(ps.setLoadout({ [GLAD_N]: { module } }), true, module); -}; +/** + * The loadouts each holder is tried with: its default (null), no module, and every module it has. 崖心 and 见行者 are + * hidden this season (never in the pool): a player cannot set their loadout (shared/protocol.js checkLoadout), so they + * are tried with their defaults (elite: HOK-X / PUS-X). + */ +const loadoutsOf = (id) => (DATA.chess[DATA.chess[id].baseId].isHidden ? [null] + : [null, 'none', ...(DATA.chess[DATA.chess[id].baseId].goldenId ? DATA.chess[DATA.chess[DATA.chess[id].baseId].goldenId].modules : []).map((x) => x.uniEquipId)]); -test('高台 data: no chess stores placement; HOK-Y is 淡金坠饰 on the elite 歌蕾蒂娅 only', () => { +test('高台 data: no chess stores placement; 「可以放置于远程位」 is the trait of exactly the six 钩索师 / 推击手 records, and every module keeps it', () => { assert.equal(Object.values(DATA.chess).some((c) => c.placement !== undefined), false); for (const t of Object.values(DATA.tokens)) assert.equal(t.placement, undefined, t.tokenId); - const e = DATA.chess[GLAD_E]; - const y = e.modules.find((m) => m.uniEquipId === GLADIIA_HOK_Y); - assert.equal(e.charId, 'char_474_glady'); - assert.equal(e.isGolden, true); - assert.equal(y.typeName, 'HOK-Y'); - assert.equal(y.name, '淡金坠饰'); - assert.equal(e.modules.find((m) => m.isDefault).uniEquipId, HOK_X, 'the default module is HOK-X, ground-only'); - assert.equal(DATA.chess[GLAD_N].isGolden, false); - assert.ok(!DATA.chess[CLIFF_E].modules.some((m) => m.uniEquipId === GLADIIA_HOK_Y), '崖心 has no HOK-Y'); - assert.equal(DATA.chess[GLAD_N].position, 'MELEE'); - assert.equal(e.position, 'MELEE'); + const widened = Object.values(DATA.chess).filter((c) => meleeOnHighGround(c)).map((c) => c.chessId).sort(); + assert.deepEqual(widened, HOLDERS.slice().sort()); + for (const id of HOLDERS) { + const c = DATA.chess[id]; + assert.equal(c.position, 'MELEE', id); + assert.ok(['钩索师', '推击手'].includes(c.subProfessionName), id); + for (const x of c.modules || []) assert.ok(x.traitOverride.desc.includes(PLACE_ON_RANGED), `${id} ${x.typeName} keeps the line`); + } + // the module text never adds the line to anybody else (教官 Y "可以额外部署在远程位" is a talent, not the trait) + for (const c of Object.values(DATA.chess)) { + if (HOLDERS.includes(c.chessId)) continue; + for (const x of c.modules || []) assert.ok(!(x.traitOverride?.desc || '').includes(PLACE_ON_RANGED), `${c.chessId} ${x.typeName}`); + } + assert.equal(DATA.chess[GLAD_E].modules.find((x) => x.uniEquipId === HOK_Y).typeName, 'HOK-Y'); }); -test('高台 table: (operator, module, tile) → allowed only for elite 歌蕾蒂娅 + HOK-Y on a 高台; ranged unchanged', () => { +test('高台 table: every trait holder, normal and elite, with its default, no module or any module, may take each 高台; a 重装 is refused; ranged unchanged', () => { const { m, ps } = prep(HIGH_STAGE); assert.deepEqual([...ps.deployMap()].filter(([, cls]) => cls === 'ranged').map(([k]) => k).sort(), HIGH); - // rows: chess id, module set on the 歌蕾蒂娅 loadout (null = leave the default), expect 高台 - const rows = [ - [GLAD_E, GLADIIA_HOK_Y, true], - [GLAD_E, HOK_X, false], - [GLAD_E, 'none', false], - [GLAD_N, GLADIIA_HOK_Y, false], - [GLAD_N, null, false], - [CLIFF_E, GLADIIA_HOK_Y, false], - [FORCER_N, null, false], - [FORCER_E, null, false], - ]; - const owned = new Map(); - for (const [id, module, allowHigh] of rows) { - if (module) equip(ps, module); - else ps.setLoadout({}); - let p = owned.get(id); - if (!p) { p = give(m, ps, id); owned.set(id, p); } - else if (ps.find(p.uid)?.area === 'board') assert.deepEqual(toHand(m, ps, p), { ok: true }); - for (const k of HIGH) { - const [r, c] = rc(k); - const res = move(m, p.uid, board(r, c), 'DOWN'); - if (allowHigh) { - assert.deepEqual(res, { ok: true }, `${id} ${module} → ${k}`); + for (const id of HOLDERS) { + const p = give(m, ps, id); + for (const module of loadoutsOf(id)) { + assert.equal(ps.setLoadout(module ? { [DATA.chess[id].baseId]: { module } } : {}), true, `${id} ${module}`); + for (const k of HIGH) { + const [r, c] = rc(k); + assert.deepEqual(move(m, p.uid, board(r, c), 'DOWN'), { ok: true }, `${id} ${module || 'default'} → ${k}`); assert.equal(ps.board.get(k), p); checkInvariants(m); assert.deepEqual(toHand(m, ps, p), { ok: true }); - } else { - assert.equal(res.error, ERR.BAD_TILE, `${id} ${module || 'default'} → ${k}`); } + assert.deepEqual(move(m, p.uid, board(9, 3)), { ok: true }, `${id}: the ground stays legal`); + assert.equal(placeClass(ps, DATA.chess[id]), 'all', id); + assert.deepEqual(toHand(m, ps, p), { ok: true }); } - assert.deepEqual(move(m, p.uid, board(9, 3)), { ok: true }, `${id}: the ground stays legal`); - assert.equal(placeClass(ps, DATA.chess[id]) === 'all', allowHigh, id); - assert.deepEqual(toHand(m, ps, p), { ok: true }); ps.setLoadout({}); } const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x))); @@ -389,43 +383,41 @@ test('高台 table: (operator, module, tile) → allowed only for elite 歌蕾 m.dispose(); }); -test('高台 client: drag highlights follow the loadout; a 重装 keeps "近战单位只能部署在地面"', () => { +test('高台 client: drag highlights = the server for every trait holder under any module; a 重装 keeps "近战单位只能部署在地面"', () => { const { m, ps } = prep(HIGH_STAGE); - equip(ps, GLADIIA_HOK_Y); - const glad = give(m, ps, GLAD_E); - const normal = give(m, ps, GLAD_N); - const cliff = give(m, ps, CLIFF_E); + const holders = HOLDERS.map((id) => give(m, ps, id)); const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x))); const ranged = give(m, ps, chessOfTier(1, RANGED).find((x) => m.pool.has(x))); - const ctx = clientCtx(m, ps); const map = ps.deployMap(); - for (const p of [glad, normal, cliff, tank, ranged]) { - const lit = boardTargets(ctx, p.uid).legal.map(([r, c]) => tileKey(r, c)).sort(); - assert.deepEqual(lit, legalTiles(map, placeClass(ps, DATA.chess[p.id])).map(([r, c]) => tileKey(r, c)).sort(), `${p.id}: highlights = the server`); - } - for (const k of HIGH) { - const [r, c] = rc(k); - assert.equal(clientCanPlace(ctx, glad.uid, board(r, c)).ok, true, k); - for (const p of [normal, cliff, tank]) { - const res = clientCanPlace(ctx, p.uid, board(r, c)); - assert.equal(res.ok, false, p.id); + for (const loadout of [{}, { [GLAD_N]: { module: HOK_Y } }, { [GLAD_N]: { module: HOK_X } }, { [GLAD_N]: { module: 'none' } }]) { + assert.equal(ps.setLoadout(loadout), true); + const ctx = clientCtx(m, ps); + for (const p of [...holders, tank, ranged]) { + const lit = boardTargets(ctx, p.uid).legal.map(([r, c]) => tileKey(r, c)).sort(); + assert.deepEqual(lit, legalTiles(map, placeClass(ps, DATA.chess[p.id])).map(([r, c]) => tileKey(r, c)).sort(), `${p.id}: highlights = the server`); + } + for (const k of HIGH) { + const [r, c] = rc(k); + for (const p of holders) assert.equal(clientCanPlace(ctx, p.uid, board(r, c)).ok, true, `${p.id} → ${k}`); + const res = clientCanPlace(ctx, tank.uid, board(r, c)); + assert.equal(res.ok, false); assert.equal(res.reason, '近战单位只能部署在地面'); + assert.equal(clientCanPlace(ctx, ranged.uid, board(r, c)).ok, true); } - assert.equal(clientCanPlace(ctx, ranged.uid, board(r, c)).ok, true); } m.dispose(); }); -test('高台 swaps: elite 歌蕾蒂娅 + HOK-Y trades with a ranged operator, not with a 重装', () => { +test('高台 swaps: 歌蕾蒂娅 (normal, no module) trades with a ranged operator, not with a 重装', () => { const { m, ps } = prep(HIGH_STAGE); - equip(ps, GLADIIA_HOK_Y); - const glad = give(m, ps, GLAD_E); + const glad = give(m, ps, GLAD_N); const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x))); const ranged = give(m, ps, chessOfTier(1, RANGED).find((x) => m.pool.has(x))); assert.deepEqual(move(m, glad.uid, board(10, 4), 'DOWN'), { ok: true }); assert.deepEqual(move(m, tank.uid, board(9, 3)), { ok: true }); assert.deepEqual(move(m, ranged.uid, board(11, 4)), { ok: true }); let ctx = clientCtx(m, ps); + // swapping 歌蕾蒂娅 (高台) with the 重装 (ground) would put the 重装 on the 高台 assert.equal(clientCanPlace(ctx, glad.uid, board(9, 3)).ok, false); assert.equal(move(m, glad.uid, board(9, 3)).error, ERR.BAD_TILE); assert.equal(clientCanPlace(ctx, tank.uid, board(10, 4)).ok, false); @@ -443,16 +435,14 @@ test('高台 swaps: elite 歌蕾蒂娅 + HOK-Y trades with a ranged operator, no m.dispose(); }); -test('高台 battle input: elite 歌蕾蒂娅 + HOK-Y is fielded on (10,4) and blocks nothing there; on the ground she blocks', () => { +test('高台 battle input: 歌蕾蒂娅 is fielded on (10,4) and blocks nothing there; on the ground she blocks', () => { const { m, ps } = prep(HIGH_STAGE); - equip(ps, GLADIIA_HOK_Y); - const glad = give(m, ps, GLAD_E); + const glad = give(m, ps, GLAD_N); assert.deepEqual(move(m, glad.uid, board(10, 4), 'DOWN'), { ok: true }); const u0 = ps.battleInput().units.find((u) => u.uid === glad.uid); - assert.deepEqual([u0.row, u0.col, u0.dir, u0.moduleId], [10, 4, 'DOWN', GLADIIA_HOK_Y]); + assert.deepEqual([u0.row, u0.col, u0.dir], [10, 4, 'DOWN']); m.dispose(); - // position stays MELEE either way: the normal record (the same body the 0.1.2 measurement used) attacks the lane - // from the 高台 and blocks nothing there. HOK-Y's own range is not what this asserts. + // position stays MELEE either way: she attacks the lane from the 高台 and blocks nothing there for (const [r, c, dir, high] of [[10, 4, 'DOWN', true], [9, 5, 'RIGHT', false]]) { const h = makeBattle({ stageId: HIGH_STAGE, seed: 3, timeLimit: 60, autoFinish: false, @@ -472,42 +462,36 @@ test('高台 battle input: elite 歌蕾蒂娅 + HOK-Y is fielded on (10,4) and b } }); -test('高台 bots: elite 歌蕾蒂娅 + HOK-Y takes a 高台 that covers the road while the ground is still free', () => { +test('高台 bots: every trait holder, normal and elite, takes a 高台 that covers the road while the ground is still free; a plain melee stays on the road', () => { const { m, ps } = prep(HIGH_STAGE, 11); - equip(ps, GLADIIA_HOK_Y); - const elite = give(m, ps, GLAD_E); - const k = planLayout(m, ps, [elite]).get(elite.uid); - assert.equal(ps.deployMap().get(k), 'ranged', `planned on a 高台 with the road open (${k})`); - const [r, c] = rc(k); - assert.deepEqual(move(m, elite.uid, board(r, c)), { ok: true }); - m.dispose(); -}); - -test('高台 bots: everyone else stays on the road; elite 歌蕾蒂娅 + HOK-Y may take a 高台 when the ground is full', () => { - const { m, ps } = prep(HIGH_STAGE, 11); - const pieces = ['chess_char_4_02_a', GLAD_N, FORCER_N, 'chess_char_2_03_a'].map((id) => give(m, ps, id)); - const plan = planLayout(m, ps, pieces); const map = ps.deployMap(); const road = fieldModel(m, ps).ground; - for (const p of pieces.slice(1)) { - const k = plan.get(p.uid); - assert.equal(map.get(k), 'melee', `${p.id} on a ground tile (${k})`); - assert.ok(road.has(k), `${p.id} on an enemy road tile (${k})`); - assert.equal(move(m, p.uid, board(10, 4)).error, ERR.BAD_TILE, `${p.id} deploy refused`); + for (const id of HOLDERS) { + const p = give(m, ps, id); + for (const module of loadoutsOf(id)) { + assert.equal(ps.setLoadout(module ? { [DATA.chess[id].baseId]: { module } } : {}), true); + const plan = planLayout(m, ps, [p]); + const k = plan.get(p.uid); + assert.equal(map.get(k), 'ranged', `${id} ${module || 'default'}: planned on a 高台 with the road open (${k})`); + const [r, c] = rc(k); + const cover = ownerRangeKeys(DATA.chess[id].rangeGrid, r, c, plan.dirOf(p.uid)); + assert.ok([...cover].some((t) => road.has(t)), `${id}: its range from ${k} covers the road`); + assert.deepEqual(move(m, p.uid, board(r, c), plan.dirOf(p.uid)), { ok: true }); + assert.deepEqual(toHand(m, ps, p), { ok: true }); + } } - const elite = give(m, ps, GLAD_E); - equip(ps, GLADIIA_HOK_Y); - const melee = [...map].filter(([, cls]) => cls === 'melee').map(([k]) => k); - const highPlan = planLayout(m, ps, [elite], undefined, { occupied: new Set(melee) }); - const hk = highPlan.get(elite.uid); - assert.equal(map.get(hk), 'ranged', `HOK-Y planned on a 高台 (${hk})`); - const [hr, hc] = rc(hk); - assert.deepEqual(move(m, elite.uid, board(hr, hc)), { ok: true }); + ps.setLoadout({}); + // a plain melee operator (a 重装) stays on an enemy road tile, and a 高台 is no fallback for it once the ground is full + const tank = give(m, ps, chessOfTier(1, TANK).find((x) => m.pool.has(x))); + const k = planLayout(m, ps, [tank]).get(tank.uid); + assert.equal(map.get(k), 'melee', `the 重装 on a ground tile (${k})`); + assert.ok(road.has(k), `the 重装 on an enemy road tile (${k})`); + assert.equal(move(m, tank.uid, board(10, 4)).error, ERR.BAD_TILE, 'the 重装 deploy refused'); + const melee = new Set([...map].filter(([, cls]) => cls === 'melee').map(([key]) => key)); + assert.equal(planLayout(m, ps, [tank], undefined, { occupied: melee }).get(tank.uid), undefined, 'no ground left: no plan'); + const glad = give(m, ps, GLAD_E); + const hk = planLayout(m, ps, [glad], undefined, { occupied: melee }).get(glad.uid); + assert.equal(map.get(hk), 'ranged', `elite 歌蕾蒂娅 still gets a 高台 (${hk})`); checkInvariants(m); - assert.deepEqual(toHand(m, ps, elite), { ok: true }); - equip(ps, 'none'); - const refused = planLayout(m, ps, [elite], undefined, { occupied: new Set(melee) }); - assert.equal(refused.get(elite.uid), undefined, 'no module: a 高台 is not a fallback'); - assert.equal(move(m, elite.uid, board(10, 4)).error, ERR.BAD_TILE); m.dispose(); }); diff --git a/test/ui/gameLogic.test.js b/test/ui/gameLogic.test.js index 57ee5c87..c3c375f5 100644 --- a/test/ui/gameLogic.test.js +++ b/test/ui/gameLogic.test.js @@ -245,28 +245,21 @@ describe('placement mirror (canPlace)', () => { assert.equal(canPlace(ctx, m.uid, null).ok, false); assert.equal(canPlace(ctx, m.uid, { area: 'temp', idx: 0 }).ok, false, 'no temp target'); }); - test('only elite 歌蕾蒂娅 carrying HOK-Y lights the 高台; 崖心, 见行者, a normal record and other modules stay on the ground', () => { - const HOK_Y = 'uniequip_003_glady'; - const gladE = piece('chess_char_4_12_b'); - const gladN = piece('chess_char_4_12_a'); - const cliff = piece('chess_char_2_03_b'); - const forcer = piece('chess_char_3_07_b'); + test('every trait holder (歌蕾蒂娅, 崖心, 见行者, normal and elite) lights the 高台 whatever the module; a plain melee stays on the ground', () => { + const holders = ['chess_char_4_12_a', 'chess_char_4_12_b', 'chess_char_2_03_a', 'chess_char_2_03_b', 'chess_char_3_07_a', 'chess_char_3_07_b'].map((id) => piece(id)); const m = piece(MELEE); - const loadout = { chess_char_4_12_a: { module: HOK_Y } }; - const ctx = ctxFor(privWith({ hand: [gladE, gladN, cliff, forcer, m], loadout })); - for (const [row, col] of [[10, 4], [11, 4], [12, 4], [9, 3]]) assert.equal(canPlace(ctx, gladE.uid, { area: 'board', row, col }).ok, true, `elite HOK-Y on ${row},${col}`); - const lit = boardTargets(ctx, gladE.uid).legal.map(([a, b]) => tileKey(a, b)); - assert.equal(lit.length, STAGE.deployTiles.normal.melee.length + STAGE.deployTiles.normal.rangedOnly.length, 'every deploy tile lit'); - for (const p of [gladN, cliff, forcer, m]) { - assert.deepEqual(canPlace(ctx, p.uid, { area: 'board', row: 10, col: 4 }), { ok: false, code: 'BAD_TILE', reason: '近战单位只能部署在地面' }, p.id); - assert.equal(canPlace(ctx, p.uid, { area: 'board', row: 9, col: 3 }).ok, true, `${p.id} on the ground`); + const every = STAGE.deployTiles.normal.melee.length + STAGE.deployTiles.normal.rangedOnly.length; + // the module does not matter: the default, HOK-Y, HOK-X and none on 歌蕾蒂娅; 崖心's HOK-X; none on 见行者 + for (const loadout of [null, { chess_char_4_12_a: { module: 'uniequip_003_glady' } }, { chess_char_4_12_a: { module: 'uniequip_002_glady' } }, + { chess_char_4_12_a: { module: 'none' }, chess_char_2_03_a: { module: 'none' }, chess_char_3_07_a: { module: 'none' } }]) { + const ctx = ctxFor(privWith({ hand: [...holders, m], loadout })); + for (const p of holders) { + for (const [row, col] of [[10, 4], [11, 4], [12, 4], [9, 3]]) assert.equal(canPlace(ctx, p.uid, { area: 'board', row, col }).ok, true, `${p.id} on ${row},${col} (${JSON.stringify(loadout)})`); + assert.equal(boardTargets(ctx, p.uid).legal.length, every, `${p.id}: every deploy tile lit`); + } + assert.deepEqual(canPlace(ctx, m.uid, { area: 'board', row: 10, col: 4 }), { ok: false, code: 'BAD_TILE', reason: '近战单位只能部署在地面' }, '角峰'); + assert.equal(canPlace(ctx, m.uid, { area: 'board', row: 9, col: 3 }).ok, true, '角峰 on the ground'); } - const none = ctxFor(privWith({ hand: [gladE], loadout: { chess_char_4_12_a: { module: 'none' } } })); - assert.equal(canPlace(none, gladE.uid, { area: 'board', row: 10, col: 4 }).ok, false, 'no module'); - const xmod = ctxFor(privWith({ hand: [gladE], loadout: { chess_char_4_12_a: { module: 'uniequip_002_glady' } } })); - assert.equal(canPlace(xmod, gladE.uid, { area: 'board', row: 10, col: 4 }).ok, false, 'HOK-X'); - const bare = ctxFor(privWith({ hand: [gladE] })); - assert.equal(canPlace(bare, gladE.uid, { area: 'board', row: 10, col: 4 }).ok, false, 'default module is HOK-X'); }); test('not editable ⇒ nothing is legal', () => { const m = piece(MELEE); diff --git a/tools/build-data.mjs b/tools/build-data.mjs index 3ce8cf99..b14cf022 100644 --- a/tools/build-data.mjs +++ b/tools/build-data.mjs @@ -808,9 +808,9 @@ function buildChess(ctx) { rec.subProfessionName = uniequip.subProfDict?.[char.subProfessionId]?.subProfessionName || null; rec.position = char.position; rec.nationId = char.nationId || null; - // 高台 is not a data flag. The trait line 「可以放置于远程位」 is on every 钩索师 / 推击手 variant and is not - // trusted: only elite 歌蕾蒂娅 carrying HOK-Y may stand there, decided at place time (shared/highGround.js, - // owner's decision 2026-10-04, reversing DESIGN §22.6). + // 高台 is not a data flag: a MELEE chess whose trait (no module: `traitBase` / `trait`) reads 「可以放置于远程位」 + // — the 钩索师 / 推击手 branch trait — may stand there, read at place time (shared/highGround.js; the owner's + // decision of 2026-10-05, following PRTS). // Module (only active on golden chess: equipLevel > 0). const modId = shop.defaultUniEquipId || null; @@ -3143,7 +3143,7 @@ function validateAll(f) { // DESIGN §16 loadout choices if (!Array.isArray(c.skills) || c.skills.filter((s) => s.isDefault).length !== 1 || c.skills.find((s) => s.isDefault)?.skillId !== c.skill?.skillId) err(`chess ${c.chessId}: skills[] without exactly one default = skill`); if (c.modules && (c.modules.filter((m) => m.isDefault).length !== (c.module?.active ? 1 : 0) || !c.statsBase || !c.traitBase || !c.talentsBase)) err(`chess ${c.chessId}: inconsistent module choices`); - // 高台 legality is loadout-aware (shared/highGround.js), never a field on the record + // 高台 legality is read from the trait text at place time (shared/highGround.js), never a field on the record if (c.placement !== undefined) err(`chess ${c.chessId}: placement is not a data field`); } // the deliberate trigger deviations (DESIGN §21.29, §22.10) still override an official TAKE_DAMAGE row, on the normal diff --git a/tools/golden.mjs b/tools/golden.mjs index c83908ab..44fc7591 100644 --- a/tools/golden.mjs +++ b/tools/golden.mjs @@ -320,12 +320,12 @@ function layout(gd, stageId, wanted, { field = 'normal', colOffset = 0, max = 12 const rank = (r, c) => { const d = dist(r, c); return d === 0 ? 1.5 : d; }; // beside a path first, then on it return out.sort((a, b) => rank(a[0], a[1]) - rank(b[0], b[1])); }; - const isMelee = (w) => positionClass(data.chess[w.chessId], w.moduleId) === 'melee'; + const isMelee = (w) => positionClass(data.chess[w.chessId]) === 'melee'; const order = wanted.slice().sort((a, b) => (isMelee(b) - isMelee(a)) || (isMelee(a) ? (data.chess[b.chessId].stats.blockCnt || 0) - (data.chess[a.chessId].stats.blockCnt || 0) : 0)); let uid = uid0; for (const w of order) { const rec = data.chess[w.chessId]; - const free = units.length < max ? tiles(positionClass(rec, w.moduleId)) : []; + const free = units.length < max ? tiles(positionClass(rec)) : []; if (!free.length) { rest.push(w); continue; } const [r, c] = free[0]; used.add(tileKey(r, c)); From 6ab9a0648c88d27ae03e711193df4e4b10cc5c55 Mon Sep 17 00:00:00 2001 From: sganggs Date: Mon, 5 Oct 2026 23:28:43 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feedback4:=20the=205-=E9=98=BF=E6=88=88?= =?UTF-8?q?=E5=B0=94=20revives=20go=20to=20the=20first=203=20members=20kno?= =?UTF-8?q?cked=20out,=20in=20knock-out=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The owner's decision of 2026-10-05, following players' reports (GitHub #105 comment 2, #140 comment 3 and a report the owner quoted): 0.1.3 fixed the 3 holders at battle start by position, so uneaten front members held slots they never used and whatever the food chain ate only 3 阿戈尔 stood. Now: - A member operator's first knock-out ('killed') of the battle takes a slot while fewer than 3 are spent, the battle-start devour included; it redeploys at once (free) where it lies. A member never knocked out takes none, so survivors = uneaten + 3. Later knock-outs never take one; a first knock-out after the 3 are gone stays down. - One slot at most per member however many 阿戈尔 mark it: the devour still cancels a target's pending marks once it is knocked out. The report that each devour of the same operator wastes a revive was checked and not reproduced on 0.1.3 (the extra marks were already cancelled); the fixed holders were what players saw. - An operator's own save uses no slot: every kit / item / band saver is a fatal hook (斯卡蒂's DRE-Y, M3茧甲, 坚固维式重锤, 埃芒加德) and runs before the death hook, so the unit is not knocked out; the 0.1.3 rule that an in-place save spends the holder's revive is gone ([ASSUMED] for 埃芒加德, a band, treated like M3茧甲). - 联防: a member entering down is not knocked out (no slot) until it stands up and falls again. 埃芒加德's own "first 3 knock-downs" rule is a separate hook and is unchanged. - research 02 §3.6 and its JSON spec; data/bonds.json regenerated offline (only egirShip.spec.tiers[2].effect changed). - Tests (bonds_core): knock-out order wherever members stand; the devour chain with 6 members (survivors = 2 + 3, normal and 联防); a member marked three times spends one slot; 斯卡蒂's DRE-Y, M3茧甲 and 埃芒加德 saves use none; 联防 / 调和 / mirrored boss player. All five fail on 0.1.3's code. Golden: no scenario moved (no corpus battle has a 5-阿戈尔 knock-out whose slot differs; bond-egirShip-high runs at 999 layers and nobody falls to the devour). --- data/bonds.json | 2 +- docs/research/02-bonds.json | 2 +- docs/research/02-bonds.md | 2 +- server/sim/content/bonds/core.js | 65 +++++----- test/content/bonds_core.test.js | 210 +++++++++++++++++++------------ 5 files changed, 167 insertions(+), 114 deletions(-) diff --git a/data/bonds.json b/data/bonds.json index 39334ce2..7e698ee7 100644 --- a/data/bonds.json +++ b/data/bonds.json @@ -1 +1 @@ -{"yanShip":{"bondId":"yanShip","name":"炎","identifier":1,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["yan","sui","lungmen","lee","lgd"],"iconId":"icon_yanShip","activeCount":3,"thresholds":[3,6,9],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【炎】干员攻击力提升(受层数影响)\n<在场6名不同【炎】干员>战斗开始时召唤可自主行动的“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场9名不同【炎】干员>改为召唤2只“炎佑”,攻击力提升至1.5倍,受到的伤害-90%","descRaw":"【炎】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【炎】干员>战斗开始时召唤可自主行动的<@ba.vup>“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用<@ba.vup>“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场<@autochess.dgreen>9名不同【炎】干员>改为召唤2只<@ba.vup>“炎佑”,攻击力提升至<@ba.vup>1.5倍,受到的伤害<@ba.vup>-90%","effectId":"bondeffect_yan","effectName":"炎","effectDesc":"【炎】干员攻击力+{0:0%}(受层数影响)\n<在场6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%攻击力的灼燃损伤,周围敌人受到20%的元素脆弱,周期性使用“祛恶之焰”\n<在场9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescRaw":"【炎】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%<@ba.vup>攻击力的<@ba.vup>灼燃损伤,周围敌人受到20%的<@ba.vup>元素脆弱,周期性使用“祛恶之焰”\n<在场<@ba.vup>9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_15_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"visibleMembers":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"spec":{"tiers":[{"need":"3 distinct 炎 on board","effect":"炎 members (+调和 members) ATK x(1 + 0.23 + 0.009*L)."},{"need":"6 distinct","effect":"At battle start spawn 1 \"炎佑\" (enemy_9012_acloon template, allied flying ranged unit, not blockable, moves on its own). ATK = 0.30 x sum(ATK of 炎 operators on board at battle start), maxHP = 0.30 x sum(maxHP of those operators). Template: DEF 200, RES 0, BAT 2.5 s, ASPD 100, attack range radius 2.0 tiles, magic damage, hits up to 3 targets; every hit adds 灼燃损伤 (burn elemental damage) = 20% of its ATK and applies 元素脆弱 (elemental damage taken x1.2) to enemies within 0.8 tiles of the target. Skill \"祛恶之焰\": cooldown 15 s (first cast 15 s after spawn), channels a flame on one enemy in range dealing 60% ATK magic damage per second to it and to enemies within 1.0 tile, for up to 20 s."},{"need":"9 distinct","effect":"Spawn 2 炎佑 instead; each has ATK x1.5 and takes 90% less damage (damage_resistance 0.9)."}],"formulas":{"atkMultiplier":"1 + 0.23 + 0.009*L"},"caps":"none","layerGain":"Economy-driven: 惊蛰 获得时 +shop level (no activation needed); 小满 休整期结束 +1 per operator gained this round; 夕 +2 炎/奥术 per operator gained; 录武官 获得时 +6 炎 +3 奇迹; 星熊 获得时 +8 own bonds; 烛煌 获得时 +5 炎/维多利亚; 机变 \"诗怀雅的盟誓\" +10. Strategy 杜遥夜: first 2 manual refreshes each round prefer a 炎 operator.","howToPlay":"Buy many operators each round (every gain feeds 小满/夕), rush 6 炎 for the 炎佑 spike; 琳琅诗怀雅 / 诗怀雅 give early gold. 9 炎 is a late-game luxury.","assumed":["炎佑 base stats are replaced (not added) by the 30% sums","祛恶之焰 hit_duration=20 read as 20 one-second ticks","spawn point: centre of the player's board / near the objective","targets = 3 nearest enemies in range"]}},"sargonShip":{"bondId":"sargonShip","name":"萨尔贡","identifier":2,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["sargon"],"iconId":"icon_sargonShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度提升(有上限),持续一定时间(受层数影响,每层持续时间独立计算)\n<在场6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的攻击力(有上限)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","descRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员<@ba.vup>攻击速度提升(有上限),持续一定时间<@autochess.gray>(受层数影响,每层持续时间独立计算)\n<在场<@autochess.dgreen>6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的<@ba.vup>攻击力(有上限)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectId":"bondeffect_sargon","effectName":"萨尔贡","effectDesc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多+300),持续{0:0}秒(受层数影响)\n<在场6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多+300%)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多<@ba.vup>+300),持续<@ba.vup>{0:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多<@ba.vup>+300%)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescParams":[{"index":0,"format":"0","base":"base_time","perStack":"time_per_stack"}],"bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant","valid_in_band":"band_narant"},"buffs":[{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant"}},{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act2autochess_bond_eff_sargon[share]","valid_in_band":"band_narant"}}],"baseParams":["base_time"],"perStackParams":["time_per_stack"],"members":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_05_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_5_18_a","chess_char_6_05_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_6_05_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Whenever any 萨尔贡 member activates its skill, every 萨尔贡 member on the field gains one stack: ASPD +12 for (5 + 0.22*L) s. Each stack has its own timer; at most 25 concurrent stacks (=> +300 ASPD cap)."},{"need":"6 distinct","effect":"Each stack additionally gives ATK +12% (25 stacks => +300% cap), same duration."},{"need":"6 distinct AND strategy 娜仁图亚 (band_narant)","effect":"Replaces the 6-member effect: when a 萨尔贡 member activates its skill, operators on its 8 surrounding tiles also enjoy the effects of the equipment (tier <= V, filter_item_level 5) it carries, for 60 s (base_power_time 60, power_time_per_stack 0)."}],"formulas":{"stackDurationSec":"5 + 0.22*L","aspdPerStack":"12","atkPerStack(6)":"0.12","maxStacks":"25"},"caps":"25 stacks: +300 ASPD, +300% ATK","layerGain":"In battle on skill activation: 菲莱 +6 每次开技能, 百炼嘉维尔 +9 每次开技能, 莎草 +5 首次开技能, 缇缇 +1 萨尔贡/精准 per sleep/stun in range (<=24/battle); 艾丝黛尔 获得时 +2; 机变 \"缇缇的盟誓\" +10. Strategy 佩佩: after shop level 2/4/6 one special refresh preferring 萨尔贡.","howToPlay":"Fast-cycling skills (萨尔贡浓茶 / 黄沙罗盘 items) keep many stacks alive; L mainly extends duration, so stacks overlap more.","notes":["PRTS: the in-level UI shows twice the real duration (display bug); real duration is 5+0.22L."],"assumed":["When a 26th stack would be added, it replaces the stack with the shortest remaining time","stack granted to all 萨尔贡 members including the caster"]}},"victoriaShip":{"bondId":"victoriaShip","name":"维多利亚","identifier":3,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["victoria","glasgow"],"iconId":"icon_victoriaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":25,"mode":"every","effect":"bond_layer_added_reward_equip"}],"desc":"携带装备的【维多利亚】干员造成的伤害提升(受层数影响)\n<每叠加25层>获得1件带有随机效果的维式重锤\n<在场6名不同【维多利亚】干员>携带装备的【维多利亚】干员攻击力提升,携带进阶装备时额外提升","descRaw":"携带装备的【维多利亚】干员造成的<@ba.vup>伤害提升<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>25层>获得1件带有随机效果的<@ba.vup>维式重锤\n<在场<@autochess.dgreen>6名不同【维多利亚】干员>携带装备的【维多利亚】干员<@ba.vup>攻击力提升,携带进阶装备时额外提升","effectId":"bondeffect_victoria","effectName":"维多利亚","effectDesc":"携带装备的【维多利亚】干员伤害提升至{0:0%}(受层数影响)\n<每叠加25层>获得一件带有随机特殊效果的维式重锤\n<在场6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力+50%,携带进阶装备改为+80%","effectDescRaw":"<@ba.vup>携带装备的【维多利亚】干员伤害提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<每叠加<@ba.vup>25层>获得一件带有随机特殊效果的维式重锤\n<在场<@ba.vup>6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力<@ba.vup>+50%,携带进阶装备改为<@ba.vup>+80%","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale","perStack":"damage_scale_per_stack"}],"bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3,"layer":25,"count":1},"bbStr":{"key":"act1autochess_bond_eff_victoria","pool":"pool_equip_vict"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3},"bbStr":{"key":"act1autochess_bond_eff_victoria"}},{"key":"bond_layer_added_reward_equip","bb":{"layer":25,"count":1},"bbStr":{"pool":"pool_equip_vict"}}],"baseParams":["base_damage_scale"],"perStackParams":["damage_scale_per_stack"],"members":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"visibleMembers":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"维多利亚 members that carry >= 1 equipment: all damage dealt x(1.25 + 0.008*L)."},{"need":"every 25 layers (cumulative)","effect":"Gain 1 维式重锤 with a random special effect (pool_equip_vict)."},{"need":"6 distinct","effect":"维多利亚 members: ATK +50% per equipped item; an advanced (进阶/golden) item gives +80% instead (atk_normal_equip 0.5 + atk_golden_equip 0.3)."}],"formulas":{"damageMultiplier":"1.25 + 0.008*L (only if carrying equipment)","hammerPayouts":"floor(L/25)","atkPerItem(6)":"0.5 normal, 0.8 advanced"},"caps":"none","layerGain":"休整期结束: 薄绿 +2 per distinct tier of 维多利亚 on board, 维娜·维多利亚 +3 per distinct tier (and 奇迹 +2 per distinct tier of 奇迹), 刺玫 +1, 号角 +2 per distinct-tier operator of the highest-layer bond; in battle: 风笛 first 3 kills +2 维多利亚/远见/不屈; 烛煌 获得时 +5; 机变 \"风笛的盟誓\" +8. Strategy 哈洛德: from round 4 gain 1 维多利亚 operator every 2 rounds.","howToPlay":"Field 维多利亚 of as many different tiers as possible (T1..T6) for 薄绿/维娜; hand all equipment (incl. free hammers) to 维多利亚 carries; 蒸汽之心 copies all hammer effects.","assumed":["pool_equip_vict = uniform random among 灼燃/坚固/加速/战栗维式重锤 (normal grade)","hammer payout also counts layers added while the bond is inactive"]}},"kjeragShip":{"bondId":"kjeragShip","name":"谢拉格","identifier":4,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kjerag","karlan"],"iconId":"icon_kjeragShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【谢拉格】干员造成的伤害提升,对寒冷、冻结敌人获得额外提升(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间(受层数影响)","descRaw":"【谢拉格】干员造成的<@ba.vup>伤害提升,对<@ba.vup>寒冷、冻结敌人获得额外提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间<@autochess.gray>(受层数影响)","effectId":"bondeffect_kjerag","effectName":"谢拉格","effectDesc":"【谢拉格】干员伤害提升至125%,对寒冷和冻结敌人额外提升至{0:0%}(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷{1:0}秒(受层数影响)","effectDescRaw":"【谢拉格】干员伤害提升至<@ba.vup>125%,对寒冷和冻结敌人额外提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_ex_damage_scale","perStack":"ex_damage_scale_per_stack"},{"index":1,"format":"0","base":"bond_eff_kjerag[storm].base_time","perStack":"bond_eff_kjerag[storm].time_per_stack"}],"bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"},"buffs":[{"key":"env_gbuff_new","bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"}}],"baseParams":["base_ex_damage_scale","bond_eff_kjerag[storm].base_time"],"perStackParams":["ex_damage_scale_per_stack","bond_eff_kjerag[storm].time_per_stack"],"members":["chess_char_1_02_a","chess_char_2_03_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_02_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"谢拉格 members deal damage x1.25; against enemies that are 寒冷 (cold) or 冻结 (frozen) x(1.35 + 0.01*L) instead."},{"need":"6 distinct","effect":"Every 25 s a cold wind applies 寒冷 to every enemy on the field for (20 + 0.1*L) s."}],"formulas":{"damageMultiplier":"1.25","damageMultiplierVsColdOrFrozen":"1.35 + 0.01*L","windIntervalSec":"25","windColdDurationSec":"20 + 0.1*L"},"caps":"none","layerGain":"In battle, freeze-driven: 初雪 and 银灰 - each enemy in range that becomes frozen: 50% chance +1; 凛御银灰 gives the 谢拉格 operator in front of it a 60% version (<=200/battle); 锏 部署时 +8 own active bonds (<=24/battle). 获得时: 角峰 +2, 崖心 +3 (hidden), 雪猎 +5, 灵知 +5, 锏 +8. 机变 \"银灰的盟誓\" +8. Strategy 休露丝: first 谢拉格 bought each round costs 1.","howToPlay":"Standard AK rule: applying 寒冷 to an already-cold enemy freezes it. The 6-member wind + cold-on-hit sources (谢拉格不融冰 12% 1.5 s cold) create constant freezes, so layers can reach hundreds per battle.","notes":["巴哈姆特: avoid lighting 3 奥术 alongside max-layer 谢拉格 (圣聆初雪 gets damage-capped)."],"assumed":["first wind at t = 25 s","wind re-applying cold on a cold enemy triggers freeze like any cold source"]}},"lateranoShip":{"bondId":"lateranoShip","name":"拉特兰","identifier":5,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["laterano"],"iconId":"icon_lateranoShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【拉特兰】干员开启技能获得的弹药量提升(受层数影响)\n<在场6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员攻击力提升(有上限)","descRaw":"【拉特兰】干员开启技能获得的<@ba.vup>弹药量提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员<@ba.vup>攻击力提升(有上限)","effectId":"bondeffect_laterano","effectName":"拉特兰","effectDesc":"【拉特兰】干员开启技能时获得的弹药量+{0:0%}(受层数影响)\n<在场6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多+200%","effectDescRaw":"【拉特兰】干员开启技能时获得的弹药量<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多<@ba.vup>+200%","effectDescParams":[{"index":0,"format":"0%","base":"base_ammo_percent","perStack":"ammo_percent_per_stack"}],"bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"},"buffs":[{"key":"env_gbuff_new","bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"}}],"baseParams":["base_ammo_percent"],"perStackParams":["ammo_percent_per_stack"],"members":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_07_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"visibleMembers":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"When a 拉特兰 member activates a skill that grants ammo, ammo gained x(1 + 0.05 + 0.015*L), rounded down."},{"need":"6 distinct","effect":"Every ammo consumed by any 拉特兰 member: all 拉特兰 members ATK +4% (until battle end), max +200% (= 50 ammo)."}],"formulas":{"ammoMultiplier":"floor(baseAmmo * (1.05 + 0.015*L))","atkPerAmmo(6)":"0.04","atkCap(6)":"2.0"},"caps":"+200% ATK from the 6-member effect","layerGain":"Ammo consumption in battle: 圣约送葬人 each 7 bullets +7 拉特兰 (7 triggers => 49/battle) and +3 远见 (<=21/battle); 莫斯提马 ops in its 4 adjacent tiles each 6 ammo +1; 蕾缪安 each 10 bullets with 3 ops in its row +2 拉特兰/精准; 送葬人 first kill +3 精准/拉特兰. Prep: 空弦 进入休整期 +3 to self and front tile operator's active bonds. 机变 \"莫斯提马的盟誓\" +10. Strategy 潘格尼尼: after spending 55 gold gain a random elite T4+ 拉特兰.","howToPlay":"Only ammo-skill operators benefit from the 3-tier; the bond is weak until 6 (巴哈姆特: \"3人效果較差\").","assumed":["non-ammo skills unaffected","\"ammo consumed\" = each shot/bullet decrement"]}},"egirShip":{"bondId":"egirShip","name":"阿戈尔","identifier":6,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["egir","abyssal"],"iconId":"icon_egirShip","activeCount":3,"thresholds":[3,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【阿戈尔】干员生命值提升(受层数影响)\n战斗开始时,【阿戈尔】干员会吞噬身前一格干员对其造成5000点物理伤害并获得其基础攻击力和阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","descRaw":"【阿戈尔】干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n战斗开始时,【阿戈尔】干员会<@ba.vup>吞噬身前一格干员对其造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的<@ba.vup>盟约层数<@autochess.gray>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@autochess.dgreen>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectId":"bondeffect_egir","effectName":"阿戈尔","effectDesc":"【阿戈尔】干员生命值+{0:0%}(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成5000点物理伤害并获得其基础攻击力和阻挡数,并叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","effectDescRaw":"【阿戈尔】干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,并叠加等于被吞噬者等阶的盟约层数<@ba.acrem>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@ba.vup>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"}],"bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"}}],"baseParams":["base_max_hp"],"perStackParams":["max_hp_per_stack"],"members":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"visibleMembers":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"阿戈尔 members maxHP x(1 + 0.35 + 0.01*L)."},{"need":"3 distinct (battle start)","effect":"Devour (吞噬): see algorithm."},{"need":"5 distinct","effect":"The first 3 阿戈尔 members by position (the devour order: leftmost first, then topmost; fixed at battle start) each revive immediately on their own first knock-out, whatever the order of knock-outs (max_free_respawn_cnt 3)."}],"algorithm":["Order: 阿戈尔 members sorted leftmost first, then topmost (\"更靠左和靠上\").","Each 阿戈尔 in order marks the unit on the tile directly in front of it (its facing direction) and also the front-tile unit of every 阿戈尔 it has marked (chain). It never marks itself, a unit it already marked, or a unit that marked it.","The marker immediately gains the base ATK of every unit it marked (added to base ATK at the final stage) and their block counts.","After all marks are placed, each mark makes its target suffer one 5000-point physical 流失 (HP loss, source = the target itself; if it dies, the kill is credited to the marker), resolved in marking order. A target that dies cancels its remaining pending marks.","Each devoured unit adds layers to 阿戈尔 equal to its tier (1-6), once per unit per battle.","(5-member tier) Revive is implemented as: when the unit leaves the field for any reason other than being moved, its next deployment has 0 redeploy time and 0 cost (PRTS). Devour layers: each devoured unit adds its tier once per battle (refreshes next round)."],"formulas":{"hpMultiplier":"1.35 + 0.01*L","devourDamage":"5000","layersPerDevoured":"tier of devoured unit"},"caps":"3 revives per battle","layerGain":"Devour (tier per devoured unit, every battle); 幽灵鲨 被击倒 +3; 归溟幽灵鲨 被击倒/替身切换 +5 阿戈尔 +5 不屈; 斯卡蒂 each 2 kills +1 阿戈尔/坚守/突袭; 海霓 first kill (enemy or ally) +3 阿戈尔/奥术; 机变 \"斯卡蒂的盟誓\" +8. Strategy 克莱门莎: an 阿戈尔 knocked out adds layers = its tier.","howToPlay":"Put cheap/high-tier fodder in front of 阿戈尔 carries: they steal base ATK and block, gain layers, and (5) revive. Tier-6 fodder gives +6 layers per battle.","assumed":["5000 physical 流失 ignores DEF and shields","marked allied units are the player's own operators (devour hits allies)"]}},"siracusaShip":{"bondId":"siracusaShip","name":"叙拉古","identifier":7,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["siracusa","chiave"],"iconId":"icon_siracusaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【叙拉古】干员部署后攻击速度提升,持续一定时间(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿10秒内对敌人攻击时有3%的概率造成一定真实伤害(受层数影响)并恐惧3秒","descRaw":"【叙拉古】干员部署后<@ba.vup>攻击速度提升,持续一定时间<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿<@ba.vup>10秒内对敌人攻击时有<@ba.vup>3%的概率造成一定真实伤害<@autochess.gray>(受层数影响)并<@ba.vup>恐惧3秒","effectId":"bondeffect_siracusa","effectName":"叙拉古","effectDesc":"【叙拉古】干员部署后攻击速度+{0:0},持续{1:0}秒(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成{2:0}(受层数影响)点真实伤害并恐惧目标3秒","effectDescRaw":"【叙拉古】干员部署后攻击速度<@ba.vup>+{0:0},持续<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成<@ba.vup>{2:0}<@ba.acrem>(受层数影响)点真实伤害并<@ba.vup>恐惧目标3秒","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"},{"index":1,"format":"0","base":"base_duration","perStack":"duration_per_stack"},{"index":2,"format":"0","base":"base_damage","perStack":"damage_per_stack"}],"bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"},"buffs":[{"key":"env_gbuff_new","bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"}}],"baseParams":["base_attack_speed","base_duration","base_damage"],"perStackParams":["attack_speed_per_stack","duration_per_stack","damage_per_stack"],"members":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_15_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"visibleMembers":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"After every deployment (incl. redeploy) a 叙拉古 member gains ASPD +(25 + 0.8*L) for (32 + 0.4*L) s."},{"need":"6 distinct","effect":"After deployment also 隐匿 (camouflage) for the same duration. While camouflaged and for 10 s after it ends, each normal damage instance (普通伤害 = attack type NORMAL: attacks, skill hits, drone attacks; not 溅射 / 持续 / 附加 — `bonds/core.js siracusaRolls`) it deals may add (5000 + 50*L) true damage (source = the operator) and 恐惧 (fear) 3 s. Nominal 3% chance, implemented as pseudo-random: all 叙拉古 members share one counter; attempt n since last proc succeeds with p = 0.00139*n (guaranteed at n = 720); counter resets on proc."}],"formulas":{"aspd":"25 + 0.8*L","durationSec":"32 + 0.4*L","procDamage":"5000 + 50*L","prdStep":"0.00139"},"caps":"none","layerGain":"Shop refresh-driven: 拉普兰德 first manual refresh each round +4 (works from bench); 安洁莉娜 休整期结束 +4 per refresh this round (<=12/round); 阿罗玛 +2 叙拉古/奥术 per refresh (<=6); 伺夜 first 3 kills +2 叙拉古 +1 奇迹; 荒芜拉普兰德 each kill +2 (elite: every 叙拉古 gets this, <=100/battle); 忍冬 获得时 +6 own bonds (x2/x3 with 投资人); 机变 \"德克萨斯的盟誓\" +10. Strategy 贾维: every 6 manual refreshes get a free 叙拉古 (<=2/round).","howToPlay":"Refresh a lot in prep (free refresh sources: 普罗旺斯, 德克萨斯, 缄默德克萨斯, 巫恋) to feed 拉普兰德/安洁莉娜; pair with 投资人 for 忍冬.","notes":["PRTS: the 10 s post-stealth window restarts if the operator's status effects or immunities change."],"assumed":["隐匿 = standard AK camouflage (not targeted by ranged enemies unless blocking)"]}},"kazimierzShip":{"bondId":"kazimierzShip","name":"卡西米尔","identifier":8,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kazimierz","pinus"],"iconId":"icon_kazimierzShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"每次有干员部署时,【卡西米尔】干员攻击力+20%持续至战斗结束(上限受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","descRaw":"每次有干员部署时,【卡西米尔】干员攻击力<@ba.vup>+20%持续至战斗结束<@autochess.gray>(上限受层数影响)\n<在场<@autochess.dgreen>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每<@ba.vup>2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectId":"bondeffect_kazimierz","effectName":"卡西米尔","effectDesc":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多+{0:0%})(受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","effectDescRaw":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多<@ba.vup>+{0:0%})<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectDescParams":[{"index":0,"format":"0%","base":"base_max_atk_when_born","perStack":"max_atk_when_born_per_stack"}],"bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"},"buffs":[{"key":"env_gbuff_new","bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"}}],"baseParams":["base_max_atk_when_born"],"perStackParams":["max_atk_when_born_per_stack"],"members":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Every time any friendly operator is deployed (incl. redeploys) each 卡西米尔 member gains ATK +20% until battle end, capped at +(50 + 1*L)%."},{"need":"6 distinct","effect":"While blocking >= 1 enemy: every 2 s deals 120% ATK true damage to all enemies within radius 0.8 tiles and stuns them 0.1 s. While not blocking: each normal damage instance adds 30% ATK sourceless true damage."}],"formulas":{"atkPerDeploy":"0.20","atkCap":"0.50 + 0.01*L"},"caps":"ATK bonus cap 50%+1%/layer","layerGain":"Deploy-driven in battle: 砾 部署时 +1; 瑕光 部署时 +4 own active bonds (<=12/battle); 远牙 grants the right-most operator in its row \"部署时 +4 卡西米尔/精准 (<=24/battle)\"; 锏 部署时 +8 (<=24); 获得时: 野鬃 +2, 灰毫 +3 to highest-layer bond; 机变 \"玛恩纳的盟誓\" +12. Strategy 玛恩纳: +1 gold next round per 卡西米尔 bought (<=3).","howToPlay":"Maximise deploy events: low redeploy time (助力 -30%, 骑士戒律), operators that die/retreat and come back (砾 + 不屈). 巴哈姆特: do not light 坚守 (damage sharing keeps 砾 alive).","assumed":["initial auto-deployments at battle start also count as deploys","buff applies to members deployed later too (stored globally, capped)"]}},"preciShip":{"bondId":"preciShip","name":"精准","identifier":9,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_preciShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【精准】干员攻击力提升(受层数影响)\n<在场3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的防御力和法术抗性","descRaw":"【精准】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的<@ba.vup>防御力和<@ba.vup>法术抗性","effectId":"bondeffect_preci","effectName":"精准","effectDesc":"【精准】干员攻击力+{0:0%}(受层数影响)\n<在场3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视30%防御力和法术抗性","effectDescRaw":"【精准】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视<@ba.vup>30%防御力和法术抗性","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"visibleMembers":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"精准 members ATK x(1 + 0.10 + 0.012*L)."},{"need":"3 distinct","effect":"Scope becomes 精准 members + every RANGED operator; affected units also ignore 30% of target DEF and 30% of target RES."}],"formulas":{"atkMultiplier":"1.10 + 0.012*L","defPenetrateRatio(3)":"0.3","resPenetrateRatio(3)":"0.3"},"layerGain":"Kill/skill/deploy in battle: 寒芒克洛丝 gives front operator \"开技能 +1 精准 (<=10/battle)\"; 远牙 grant (+4/deploy); 缇缇 +1 per sleep/stun; 蕾缪安, 送葬人; 莱恩哈特 休整期结束 +5 own active bonds; 获得时: 深靛 +2, 雪猎 +5. 机变 \"缇缇的盟誓\" +10.","assumed":["penetration = ratio ignore (like 无视 x% 防御)"]}},"swiftShip":{"bondId":"swiftShip","name":"迅捷","identifier":10,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_swiftShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【迅捷】干员技能结束时有概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","descRaw":"【迅捷】干员技能结束时有概率<@autochess.gray>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@autochess.dgreen>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectId":"bondeffect_swift","effectName":"迅捷","effectDesc":"【迅捷】干员技能结束时有{0:0%}概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","effectDescRaw":"【迅捷】干员技能结束时有<@ba.vup>{0:0%}概率<@ba.acrem>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@ba.vup>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_01_a","chess_char_1_16_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_10_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_01_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a 迅捷 member's skill ends: with p = min(1, 0.20 + 0.0035*L) immediately +12 SP."},{"need":"L >= 40","effect":"Every operator whose skill ends: with the same p, additionally +15 SP."}],"formulas":{"p":"min(1, 0.20 + 0.0035*L)","reaches100%AtL":"229"},"layerGain":"妮芙 休整期结束 +2 per operator on the bench; 蒂比 进入休整期 +2 own active bonds; 莱恩哈特 +5; 引星棘刺 +4 self & front; 获得时: 锡人/野鬃 +2, 忍冬 +6, 锏 +8. 机变 \"银灰的盟誓\" +8.","assumed":["迅捷 members roll both the 12 SP and the 15 SP independently"]}},"skillfulShip":{"bondId":"skillfulShip","name":"灵巧","identifier":11,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_skillfulShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【灵巧】干员及周围4格干员攻击速度提升(受层数影响)\n<达到40层>生效范围变为【灵巧】干员周围8格","descRaw":"【灵巧】干员及周围4格干员<@ba.vup>攻击速度提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>40层>生效范围变为【灵巧】干员周围8格","effectId":"bondeffect_skillful","effectName":"灵巧","effectDesc":"【灵巧】干员及周围4格的干员攻击速度+{0:0}(受层数影响)\n <达到40层>生效范围变为【灵巧】干员周围8格","effectDescRaw":"【灵巧】干员及周围4格的干员攻击速度<@ba.vup>+{0:0}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>40层>生效范围变为【灵巧】干员周围8格","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"}],"bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"}}],"baseParams":["base_attack_speed"],"perStackParams":["attack_speed_per_stack"],"members":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_5_16_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"灵巧 members and operators on their 4 orthogonally adjacent tiles: ASPD +(10 + 1*L)."},{"need":"L >= 40","effect":"Area becomes the 8 surrounding tiles."}],"formulas":{"aspd":"10 + L"},"layerGain":"溯光星源 休整期结束 +2 灵巧/奥术 per 3 gold spent this round ; 断崖 +3 self & behind; 空弦 +3 self & front; 蒂比 +2; 获得时 灵知 +5. (act1 灵巧 also had a 20-layer shop reward; removed in act2.)","assumed":["a unit covered by several 灵巧 auras gets the bonus once"]}},"arcaneShip":{"bondId":"arcaneShip","name":"奥术","identifier":12,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_arcaneShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例提升(受层数影响)","descRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@autochess.gray>(受层数影响),持续3秒\n<在场<@autochess.dgreen>3名不同【奥术】干员>【奥术】干员对生命值低于<@ba.vup>50%的敌人施加的伤害提升比例提升<@autochess.gray>(受层数影响)","effectId":"bondeffect_arcane","effectName":"奥术","effectDesc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升{0:0%}(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为{1:0%}(受层数影响)","effectDescRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@ba.vup>{0:0%}<@ba.acrem>(受层数影响),持续3秒\n<在场<@ba.vup>3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为<@ba.vup>{1:0%}<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale_show","perStack":"damage_scale_per_stack"},{"index":1,"format":"0%","base":"base_damage_scale_show_ex","perStack":"damage_scale_per_stack_show_ex"}],"bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"},"buffs":[{"key":"env_gbuff_new","bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"}}],"baseParams":["base_damage_scale_show","base_damage_scale_show_ex"],"perStackParams":["damage_scale_per_stack","damage_scale_per_stack_show_ex"],"members":["chess_char_1_17_a","chess_char_2_10_a","chess_char_2_15_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_17_a","chess_char_2_10_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When an 奥术 member deals magic damage, the target takes magic damage x(1.20 + 0.01*L) (i.e. +(20+L)%) for 3 s. ONE instance per target whatever applies it: the strongest value wins, a weaker one resumes if it outlasts it; reapplying refreshes (corrected 2026-10-01: PRTS 作战机制 同名buff默认只表现出一个; 巴哈姆特 12316 the two players of a pair field compete for it)."},{"need":"3 distinct","effect":"Against enemies below 50% HP the multiplier is 1.4 x (1.20 + 0.01*L) = 1.68 + 0.014*L (i.e. +(68+1.4L)%)."}],"formulas":{"magicTakenMul":"1.20 + 0.01*L","magicTakenMulLowHp(3)":"1.4*(1.20 + 0.01*L)","hpThreshold":"0.5","durationSec":"3"},"layerGain":"夕 +2 per operator gained; 阿罗玛 +2 per refresh (<=6); 溯光星源 +2 per 3 gold spent; 海霓 first kill +3; 获得时: 深靛 +2, 协律 +4 (hidden). 机变 \"莫斯提马的盟誓\" +10.","assumed":["one instance per target, the strongest (the engine's default same-name rule; the two players of a pair field compete for it) — until v2.5 the remake kept one per player and they multiplied"]}},"steadShip":{"bondId":"steadShip","name":"坚守","identifier":13,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_steadShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员生命值提升(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由所有【坚守】干员平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%脆弱效果","descRaw":"所有干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由所有【坚守】干员<@ba.vup>平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害<@autochess.gray>(受层数影响,每0.2秒至多触发1次)和持续<@ba.vup>5秒的<@ba.vup>40%脆弱效果","effectId":"bondeffect_stead","effectName":"坚守","effectDesc":"所有干员生命值+{0:0%}(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到{1:0}点法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%的脆弱效果","effectDescRaw":"所有干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到<@ba.vup>{1:0}点法术伤害<@ba.acrem>(受层数影响,每0.2秒至多触发1次)和持续5秒的<@ba.vup>40%的脆弱效果","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"},{"index":1,"format":"0","base":"base_damage_value","perStack":"damage_value_per_stack"}],"bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"}}],"baseParams":["base_max_hp","base_damage_value"],"perStackParams":["max_hp_per_stack","damage_value_per_stack"],"members":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"visibleMembers":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators maxHP x(1 + 0.25 + 0.012*L)."},{"need":"3 distinct","effect":"When a non-坚守 operator takes damage, 40% of that damage is taken instead by the 坚守 members, split evenly. When a 坚守 member takes damage, the damage source takes (850 + 10*L) sourceless magic damage and 脆弱 (damage taken x1.4) for 5 s; each 坚守 member can reflect at most once per 0.2 s."}],"formulas":{"hpMultiplier":"1.25 + 0.012*L","redirectRatio":"0.4","thornsDamage":"850 + 10*L","thornsCooldownSec":"0.2","fragile":"1.4 for 5 s"},"layerGain":"折桠 休整期结束 +4; 蛇屠箱 +1 per operator in same row; 斯卡蒂 kills; 获得时 角峰 +2; 机变 \"斯卡蒂的盟誓\" +8.","notes":["PRTS: thorns hit whatever the damage source is; sourceless damage can consume the thorns cooldown."]}},"deputShip":{"bondId":"deputShip","name":"助力","identifier":14,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_deputShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员防御力提升(受层数影响),再部署时间减少\n休整期结束时,使当前所有已激活盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","descRaw":"所有干员<@ba.vup>防御力提升<@autochess.gray>(受层数影响),<@ba.vup>再部署时间减少\n休整期结束时,使当前所有已激活盟约层数<@ba.vup>+2\n<在场<@autochess.dgreen>3名不同【助力】干员>改为层数<@ba.vup>+4","effectId":"bondeffect_deput","effectName":"助力","effectDesc":"所有干员防御力+{0:0%}(受层数影响),再部署时间-30%\n休整期结束时,使当前所有已激活的盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","effectDescRaw":"所有干员防御力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响),再部署时间<@ba.vup>-30%\n休整期结束时,使当前所有已激活的盟约层数<@ba.vup>+2\n<在场<@ba.vup>3名不同【助力】干员>改为层数<@ba.vup>+4","effectDescParams":[{"index":0,"format":"0%","base":"base_def","perStack":"def_per_stack"}],"bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3,"layer":2,"count":3,"more_layer":4},"bbStr":{"key":"act1autochess_bond_eff_deput","bond":"deputShip"},"buffs":[{"key":"env_gbuff_new","bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3},"bbStr":{"key":"act1autochess_bond_eff_deput"}},{"key":"bond_activated_add_layer","bb":{"layer":2,"count":3,"more_layer":4},"bbStr":{"bond":"deputShip"}}],"baseParams":["base_def"],"perStackParams":["def_per_stack"],"members":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_2_15_a","chess_char_3_15_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_05_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_5_16_a","chess_char_6_14_a","chess_char_6_20_a"],"visibleMembers":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_3_20_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_6_14_a","chess_char_6_20_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators DEF x(1 + 0.15 + 0.012*L); redeploy time -30%. At the end of every prep phase (休整期结束时) every currently active bond (incl. 助力) gets +2 layers."},{"need":"3 助力 (distinct name or elite state)","effect":"+4 layers instead of +2."}],"formulas":{"defMultiplier":"1.15 + 0.012*L","redeployTimeMul":"0.7","layersPerRound":"2 (4 at 3 members) to every active bond"},"layerGain":"波登可 +1 / 调香师 +2 to highest-layer bond at prep end (work from bench); 流明 +2 to active bonds of every bench operator; 纯烬艾雅法拉 +3 highest-layer bond per skill; its own +2/+4 per round.","howToPlay":"Cheap universal layer engine: activate as many bonds as possible so each gets +2/+4 every round (helps the hidden-round threshold)."}},"visiShip":{"bondId":"visiShip","name":"远见","identifier":15,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_visiShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":10,"mode":"every","effect":"bond_layer_gain_coin"},{"layer":80,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"},{"layer":150,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"}],"desc":"<每叠加10层>获得一次2资金\n<首次达到80层>所有【远见】干员购买价格永久-1资金\n<首次达到150层>以上效果改为调度中心内所有干员的购买价格永久-1资金(整备区的【远见】干员也可用于激活盟约)","descRaw":"<每叠加<@autochess.dgreen>10层>获得一次<@ba.vup>2资金\n<首次达到<@autochess.dgreen>80层>所有【远见】干员购买价格<@ba.vup>永久-1资金\n<首次达到<@autochess.dgreen>150层>以上效果改为调度中心内所有干员的购买价格<@ba.vup>永久-1资金(整备区的【远见】干员也可用于激活盟约)","effectId":"bondeffect_visi","effectName":"远见","effectDesc":"<每叠加10层>获得一次2资金\n<首次到达80层>所有【远见】干员购买价格永久-1资金\n<首次到达150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescRaw":"<每叠加<@ba.vup>10层>获得一次<@ba.vup>2资金\n<首次到达<@ba.vup>80层>所有【远见】干员购买价格永久-1资金\n<首次到达<@ba.vup>150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":10,"count":2,"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"},"buffs":[{"key":"bond_layer_gain_coin","bb":{"layer":10,"count":2},"bbStr":{}},{"key":"bond_multi_layer_char_goods_price_bond_discount","bb":{"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_11_a","chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"Each time cumulative L passes a multiple of 10: +2 gold."},{"need":"first time L >= 80","effect":"All 远见 operators' shop price permanently -1."},{"need":"first time L >= 150","effect":"Replaces the above: every operator in the shop permanently -1 (overrides, does not stack; 3/27 update)."}],"formulas":{"goldPayouts":"2 * floor(L/10)"},"layerGain":"寒檀 进入/结束休整期 +4 each; 伊内丝 +5 own active bonds; 赫默 +2; 圣约送葬人 +3 per 7 bullets (<=21/battle); 风笛 kills +2; 机变 \"风笛的盟誓\" +8.","assumed":["no floor but 0 (owner's decision 2026-10-04; a floor of 1 was assumed until 0.1.3)"]}},"miraShip":{"bondId":"miraShip","name":"奇迹","identifier":16,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_miraShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"every","effect":"bond_layer_gain_coin"}],"desc":"刷新调度中心时,有概率使下次刷新不消耗资金(受层数影响)\n<每叠加100层>获得20资金(整备区的【奇迹】干员也可用于激活盟约)","descRaw":"刷新调度中心时,有概率使下次刷新<@ba.vup>不消耗资金<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>100层>获得<@ba.vup>20资金(整备区的【奇迹】干员也可用于激活盟约)","effectId":"bondeffect_mira","effectName":"奇迹","effectDesc":"刷新调度中心时,有{0:0%}(受层数影响)概率使下次刷新不消耗资金\n<每叠加100层>获得20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescRaw":"刷新调度中心时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率使下次刷新不消耗资金\n<每叠加<@ba.vup>100层>获得<@ba.vup>20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescParams":[{"index":0,"format":"0%","base":"baseprob","perStack":"prob"}],"bb":{"probk":0.3,"prob":0.003,"baseprob":0.18,"layer":100,"count":20},"bbStr":{},"buffs":[{"key":"bond_refresh_shop_next_free","bb":{"probk":0.3,"prob":0.003,"baseprob":0.18},"bbStr":{}},{"key":"bond_layer_gain_coin","bb":{"layer":100,"count":20},"bbStr":{}}],"baseParams":["baseprob"],"perStackParams":["prob"],"members":["chess_char_1_11_a","chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_15_a","chess_char_4_26_a","chess_char_5_04_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"visibleMembers":["chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_26_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"After each shop refresh, if the player has 0 free refreshes: with p = 0.18 + 0.003*L gain 1 free refresh."},{"need":"every 100 layers","effect":"+20 gold."}],"formulas":{"p":"min(1, 0.18 + 0.003*L)","goldPayouts":"20 * floor(L/100)"},"layerGain":"维娜·维多利亚 +2 per distinct-tier 奇迹; 录武官 获得时 +3; 伺夜 kills +1; 引星棘刺 +4 self & front; 华法琳 (奇迹 member) gives the operator in front \"开技能时 +1 own active bonds\" (data: <=7/battle, elite +2 <=14; PRTS 3/27 patch note says cap raised to 12/24).","notes":["blackboard probk = 0.3: meaning unknown (not in any description) [UNKNOWN]."]}},"investShip":{"bondId":"investShip","name":"投资人","identifier":17,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_investShip","activeCount":3,"thresholds":[3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"reach","effect":"bond_layer_char_garrison_bonus"}],"desc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次(整备区的【投资人】干员也可用于激活盟约)","descRaw":"干员的“获得时”类特质每次<@ba.vup>触发2次\n<达到<@autochess.dgreen>100层>“获得时”类特质每次<@ba.vup>触发3次(整备区的【投资人】干员也可用于激活盟约)","effectId":"bondeffect_invest","effectName":"投资人","effectDesc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescRaw":"干员的“获得时”类特质每次触发2次\n<达到<@ba.vup>100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"},"buffs":[{"key":"bond_layer_char_garrison_bonus","bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"}},{"key":"bond_layer_char_garrison_bonus","bb":{"layer":100,"count":3},"bbStr":{"event":"SERVER_GAIN"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_16_a","chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"visibleMembers":["chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"spec":{"tiers":[{"need":"3 distinct (board + bench)","effect":"Every \"获得时\" (SERVER_GAIN) trait of every operator triggers 2 times."},{"need":"L >= 100","effect":"Triggers 3 times."}],"formulas":{"gainTraitRepeat":"2 if L < 100 else 3"},"layerGain":"山 休整期结束 +1 per operator gained this round; 机变 \"诗怀雅的盟誓\" +10, \"银灰的盟誓\" +8; generic sources.","howToPlay":"Pair with high \"获得时 +N 自身所属盟约\" operators (忍冬 +6, 锏 +8, 星熊 +8, 雪猎 +5) - their layers double/triple."}},"raidShip":{"bondId":"raidShip","name":"突袭","identifier":18,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_raidShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":50,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值提升(受层数影响)\n<达到50层>所有干员攻击速度+50","descRaw":"【突袭】干员<@ba.vup>10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即<@ba.vup>再部署至一名地面敌人周围,期间<@ba.vup>攻击力和<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>50层>所有干员攻击速度<@ba.vup>+50","effectId":"bondeffect_raid","effectName":"突袭","effectDesc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值+{0:0%}(受层数影响)\n <达到50层>所有干员攻击速度+50","effectDescRaw":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>50层>所有干员攻击速度<@ba.vup>+50","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"visibleMembers":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"If a 突袭 member has not attacked for 10 s, or its skill is ready, and no enemy is in its range: it is immediately redeployed (keeping SP) onto a tile next to a ground enemy; while in that redeployed state its ATK and maxHP x(1 + 0.25 + 0.01*L)."},{"need":"L >= 50","effect":"ALL operators ASPD +50."}],"formulas":{"atkHpMultiplier":"1.25 + 0.01*L","idleSec":"10","aspdAll(L>=50)":"50"},"layerGain":"史尔特尔 部署时 +8 (<=50/battle); 休谟斯 each 2 kills +1; 瑕光 +4/deploy; 斯卡蒂; 伊内丝 +5; 机变 \"斯卡蒂的盟誓\" +8, \"德克萨斯的盟誓\" +10.","assumed":["target enemy = the ground enemy closest to the player's objective (its own field's; another field's only while its own has none) that the member can reach; landing tile = the nearest free deployable tile within 2 tiles of it from which the member's attack range covers it. No such tile for any of the 8 most advanced -> no jump; the poll looks again every 0.25 s (GitHub issue #51 - up to 0.1.1 the idle trigger landed out of reach and hopped every 10 s; DESIGN §22.2)","the buff lasts until the operator leaves the field"]}},"indomShip":{"bondId":"indomShip","name":"不屈","identifier":19,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_indomShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"地面干员被击倒时,有概率立即重新部署(受层数影响)\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","descRaw":"<@ba.vup>地面干员被击倒时,有概率立即<@ba.vup>重新部署<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员<@ba.vup>技力+5","effectId":"bondeffect_indom","effectName":"不屈","effectDesc":"地面干员被击倒时,有{0:0%}(受层数影响)概率立刻重新部署\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","effectDescRaw":"<@ba.vup>地面干员被击倒时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率立刻重新部署\n<在场<@ba.vup>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员技力<@ba.vup>+5","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_05_a","chess_char_1_20_a","chess_char_2_03_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_20_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a ground operator (地面干员 = melee position, on any tile) is knocked out / retreats / swaps 替身<->本体: with p = min(1, 0.18 + 0.004*L) it is redeployed at once (next deployment has 0 redeploy time and 0 cost). Also consumes a \"复活\" charge if it had one."},{"need":"3 distinct","effect":"When a ground (melee-position) operator is knocked out: every operator on the field +5 SP."}],"formulas":{"p":"min(1, 0.18 + 0.004*L)","reaches100%AtL":"205"},"layerGain":"雷蛇 休整期结束 +1; 砾 被击倒 +2; 归溟幽灵鲨 +5; 风笛 kills +2; 机变 \"风笛的盟誓\" +8."}},"maniShip":{"bondId":"maniShip","name":"调和","identifier":20,"isCore":false,"bondType":"REGULAR","bondOrder":1,"powerIdList":[],"iconId":"icon_maniShip","activeCount":1,"thresholds":[1],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"MANI","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"激活时使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","descRaw":"激活时使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectId":"bondeffect_mani","effectName":"调和","effectDesc":"激活时可以使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectDescRaw":"激活时可以使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员<@ba.vup>享受已激活的核心盟约的效果","effectDescParams":[],"bb":{"count":1},"bbStr":{},"buffs":[{"key":"other_bond_add_trigger_cnt","bb":{"count":1},"bbStr":{}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_6_11_a"],"visibleMembers":["chess_char_6_11_a"],"spec":{"tiers":[{"need":"1 调和 on board","effect":"Every core bond's member count +1; 调和 operators receive the effects of all active core bonds."}],"members":"缪尔赛思 (T6) and 盟约·辅助干员 (T1, hidden; given in round 1 by strategy Pith \"优等生\").","assumed":["+1 only for core bonds with >=1 real member","one +1 total no matter how many 调和 operators"]}},"emptyShip":{"bondId":"emptyShip","name":"协防干员","identifier":21,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_emptyShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员受到的物理和法术伤害-20%,【协防干员】伤害提升至120%,精锐【协防】干员造成伤害提升至140%","descRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%,【协防干员】伤害提升至<@ba.vup>120%,精锐【协防】干员造成伤害提升至<@ba.vup>140%","effectId":"bondeffect_empty","effectName":"协防干员","effectDesc":"所有干员受到的物理和法术伤害-20%;【协防干员】伤害提升至120%,精锐【协防干员】造成伤害提升至140%","effectDescRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%;【协防干员】伤害提升至<@ba.vup>120%,精锐【协防干员】造成伤害提升至<@ba.vup>140%","effectDescParams":[],"bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_2_14_a","chess_char_3_10_a","chess_char_4_08_a","chess_char_4_25_a","chess_char_5_09_a","chess_char_5_10_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_14_a","chess_char_3_10_a","chess_char_4_25_a","chess_char_5_10_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators take -20% physical and magic damage; 协防干员 members deal damage x1.2 (elite 协防 x1.4)."}],"meaning":"\"协防干员\" (assist operators) = fallback bond (constData.fallbackBondId). DIY/self-selected 6-star operators whose faction matches no core bond become 协防干员; some preset operators (调香师, 松果, 瑰盐, 魔王, 铃兰, 迷迭香, 盟约·辅助干员) are natively 协防.","formulas":{"damageTakenMul":"0.8","memberDamageMul":"1.2 (elite 1.4)"},"notes":["noStack=true: no layer-scaled effect, but layers are still counted (巴哈姆特)."]}},"soloShip":{"bondId":"soloShip","name":"独行","identifier":22,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_soloShip","activeCount":1,"thresholds":[1],"maxCount":1,"thresholdTemplate":"count_threshold_downward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","descRaw":"<在场1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15(在场2名及以上【独行】干员时失效)","effectId":"bondeffect_solo","effectName":"独行","effectDesc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","effectDescRaw":"<在场<@ba.vup>1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15<@ba.acrem>(在场2名及以上【独行】干员时失效)","effectDescParams":[],"bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"},"buffs":[{"key":"env_gbuff_new","bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"visibleMembers":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"spec":{"tiers":[{"need":"exactly 1 distinct 独行 on board","effect":"That operator ATK +60%, maxHP +60%, +15 SP when deployed. Disabled when 2+ different 独行 operators are on the board."}],"formulas":{"atkMul":"1.6","hpMul":"1.6","spOnDeploy":"15"},"notes":["noStack=true"]}},"suntShip":{"bondId":"suntShip","name":"绝技","identifier":23,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_suntShip","activeCount":2,"thresholds":[2,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward_golden","countMode":"BOARD_ALL_CHESS","countsHand":false,"countsGoldenOnly":true,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","descRaw":"<在场<@autochess.dgreen>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@autochess.dgreen>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectId":"bondeffect_sunt","effectName":"绝技","effectDesc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","effectDescRaw":"<在场<@ba.vup>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@ba.vup>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectDescParams":[],"bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"},"buffs":[{"key":"env_gbuff_new","bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"}}],"baseParams":[],"perStackParams":[],"members":[],"visibleMembers":[],"spec":{"tiers":[{"need":"2 elite (精锐) operators on board (any operators, duplicates count)","effect":"All elite operators ATK +30%."},{"need":"5 elite operators on board","effect":"At battle start every elite operator and its summons have skill SP cost x0.7 (rounded down, may become 0)."}],"formulas":{"atkMul":"1.3","spCostMul":"floor(sp*0.7)"},"notes":["isHiddenCharList=true, chessIdList empty: no member operators; elites are not \"members\" of 绝技 (PRTS).","noStack=true"]}}} \ No newline at end of file +{"yanShip":{"bondId":"yanShip","name":"炎","identifier":1,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["yan","sui","lungmen","lee","lgd"],"iconId":"icon_yanShip","activeCount":3,"thresholds":[3,6,9],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【炎】干员攻击力提升(受层数影响)\n<在场6名不同【炎】干员>战斗开始时召唤可自主行动的“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场9名不同【炎】干员>改为召唤2只“炎佑”,攻击力提升至1.5倍,受到的伤害-90%","descRaw":"【炎】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【炎】干员>战斗开始时召唤可自主行动的<@ba.vup>“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用<@ba.vup>“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场<@autochess.dgreen>9名不同【炎】干员>改为召唤2只<@ba.vup>“炎佑”,攻击力提升至<@ba.vup>1.5倍,受到的伤害<@ba.vup>-90%","effectId":"bondeffect_yan","effectName":"炎","effectDesc":"【炎】干员攻击力+{0:0%}(受层数影响)\n<在场6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%攻击力的灼燃损伤,周围敌人受到20%的元素脆弱,周期性使用“祛恶之焰”\n<在场9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescRaw":"【炎】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%<@ba.vup>攻击力的<@ba.vup>灼燃损伤,周围敌人受到20%的<@ba.vup>元素脆弱,周期性使用“祛恶之焰”\n<在场<@ba.vup>9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_15_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"visibleMembers":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"spec":{"tiers":[{"need":"3 distinct 炎 on board","effect":"炎 members (+调和 members) ATK x(1 + 0.23 + 0.009*L)."},{"need":"6 distinct","effect":"At battle start spawn 1 \"炎佑\" (enemy_9012_acloon template, allied flying ranged unit, not blockable, moves on its own). ATK = 0.30 x sum(ATK of 炎 operators on board at battle start), maxHP = 0.30 x sum(maxHP of those operators). Template: DEF 200, RES 0, BAT 2.5 s, ASPD 100, attack range radius 2.0 tiles, magic damage, hits up to 3 targets; every hit adds 灼燃损伤 (burn elemental damage) = 20% of its ATK and applies 元素脆弱 (elemental damage taken x1.2) to enemies within 0.8 tiles of the target. Skill \"祛恶之焰\": cooldown 15 s (first cast 15 s after spawn), channels a flame on one enemy in range dealing 60% ATK magic damage per second to it and to enemies within 1.0 tile, for up to 20 s."},{"need":"9 distinct","effect":"Spawn 2 炎佑 instead; each has ATK x1.5 and takes 90% less damage (damage_resistance 0.9)."}],"formulas":{"atkMultiplier":"1 + 0.23 + 0.009*L"},"caps":"none","layerGain":"Economy-driven: 惊蛰 获得时 +shop level (no activation needed); 小满 休整期结束 +1 per operator gained this round; 夕 +2 炎/奥术 per operator gained; 录武官 获得时 +6 炎 +3 奇迹; 星熊 获得时 +8 own bonds; 烛煌 获得时 +5 炎/维多利亚; 机变 \"诗怀雅的盟誓\" +10. Strategy 杜遥夜: first 2 manual refreshes each round prefer a 炎 operator.","howToPlay":"Buy many operators each round (every gain feeds 小满/夕), rush 6 炎 for the 炎佑 spike; 琳琅诗怀雅 / 诗怀雅 give early gold. 9 炎 is a late-game luxury.","assumed":["炎佑 base stats are replaced (not added) by the 30% sums","祛恶之焰 hit_duration=20 read as 20 one-second ticks","spawn point: centre of the player's board / near the objective","targets = 3 nearest enemies in range"]}},"sargonShip":{"bondId":"sargonShip","name":"萨尔贡","identifier":2,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["sargon"],"iconId":"icon_sargonShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度提升(有上限),持续一定时间(受层数影响,每层持续时间独立计算)\n<在场6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的攻击力(有上限)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","descRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员<@ba.vup>攻击速度提升(有上限),持续一定时间<@autochess.gray>(受层数影响,每层持续时间独立计算)\n<在场<@autochess.dgreen>6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的<@ba.vup>攻击力(有上限)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectId":"bondeffect_sargon","effectName":"萨尔贡","effectDesc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多+300),持续{0:0}秒(受层数影响)\n<在场6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多+300%)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多<@ba.vup>+300),持续<@ba.vup>{0:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多<@ba.vup>+300%)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescParams":[{"index":0,"format":"0","base":"base_time","perStack":"time_per_stack"}],"bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant","valid_in_band":"band_narant"},"buffs":[{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant"}},{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act2autochess_bond_eff_sargon[share]","valid_in_band":"band_narant"}}],"baseParams":["base_time"],"perStackParams":["time_per_stack"],"members":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_05_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_5_18_a","chess_char_6_05_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_6_05_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Whenever any 萨尔贡 member activates its skill, every 萨尔贡 member on the field gains one stack: ASPD +12 for (5 + 0.22*L) s. Each stack has its own timer; at most 25 concurrent stacks (=> +300 ASPD cap)."},{"need":"6 distinct","effect":"Each stack additionally gives ATK +12% (25 stacks => +300% cap), same duration."},{"need":"6 distinct AND strategy 娜仁图亚 (band_narant)","effect":"Replaces the 6-member effect: when a 萨尔贡 member activates its skill, operators on its 8 surrounding tiles also enjoy the effects of the equipment (tier <= V, filter_item_level 5) it carries, for 60 s (base_power_time 60, power_time_per_stack 0)."}],"formulas":{"stackDurationSec":"5 + 0.22*L","aspdPerStack":"12","atkPerStack(6)":"0.12","maxStacks":"25"},"caps":"25 stacks: +300 ASPD, +300% ATK","layerGain":"In battle on skill activation: 菲莱 +6 每次开技能, 百炼嘉维尔 +9 每次开技能, 莎草 +5 首次开技能, 缇缇 +1 萨尔贡/精准 per sleep/stun in range (<=24/battle); 艾丝黛尔 获得时 +2; 机变 \"缇缇的盟誓\" +10. Strategy 佩佩: after shop level 2/4/6 one special refresh preferring 萨尔贡.","howToPlay":"Fast-cycling skills (萨尔贡浓茶 / 黄沙罗盘 items) keep many stacks alive; L mainly extends duration, so stacks overlap more.","notes":["PRTS: the in-level UI shows twice the real duration (display bug); real duration is 5+0.22L."],"assumed":["When a 26th stack would be added, it replaces the stack with the shortest remaining time","stack granted to all 萨尔贡 members including the caster"]}},"victoriaShip":{"bondId":"victoriaShip","name":"维多利亚","identifier":3,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["victoria","glasgow"],"iconId":"icon_victoriaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":25,"mode":"every","effect":"bond_layer_added_reward_equip"}],"desc":"携带装备的【维多利亚】干员造成的伤害提升(受层数影响)\n<每叠加25层>获得1件带有随机效果的维式重锤\n<在场6名不同【维多利亚】干员>携带装备的【维多利亚】干员攻击力提升,携带进阶装备时额外提升","descRaw":"携带装备的【维多利亚】干员造成的<@ba.vup>伤害提升<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>25层>获得1件带有随机效果的<@ba.vup>维式重锤\n<在场<@autochess.dgreen>6名不同【维多利亚】干员>携带装备的【维多利亚】干员<@ba.vup>攻击力提升,携带进阶装备时额外提升","effectId":"bondeffect_victoria","effectName":"维多利亚","effectDesc":"携带装备的【维多利亚】干员伤害提升至{0:0%}(受层数影响)\n<每叠加25层>获得一件带有随机特殊效果的维式重锤\n<在场6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力+50%,携带进阶装备改为+80%","effectDescRaw":"<@ba.vup>携带装备的【维多利亚】干员伤害提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<每叠加<@ba.vup>25层>获得一件带有随机特殊效果的维式重锤\n<在场<@ba.vup>6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力<@ba.vup>+50%,携带进阶装备改为<@ba.vup>+80%","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale","perStack":"damage_scale_per_stack"}],"bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3,"layer":25,"count":1},"bbStr":{"key":"act1autochess_bond_eff_victoria","pool":"pool_equip_vict"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3},"bbStr":{"key":"act1autochess_bond_eff_victoria"}},{"key":"bond_layer_added_reward_equip","bb":{"layer":25,"count":1},"bbStr":{"pool":"pool_equip_vict"}}],"baseParams":["base_damage_scale"],"perStackParams":["damage_scale_per_stack"],"members":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"visibleMembers":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"维多利亚 members that carry >= 1 equipment: all damage dealt x(1.25 + 0.008*L)."},{"need":"every 25 layers (cumulative)","effect":"Gain 1 维式重锤 with a random special effect (pool_equip_vict)."},{"need":"6 distinct","effect":"维多利亚 members: ATK +50% per equipped item; an advanced (进阶/golden) item gives +80% instead (atk_normal_equip 0.5 + atk_golden_equip 0.3)."}],"formulas":{"damageMultiplier":"1.25 + 0.008*L (only if carrying equipment)","hammerPayouts":"floor(L/25)","atkPerItem(6)":"0.5 normal, 0.8 advanced"},"caps":"none","layerGain":"休整期结束: 薄绿 +2 per distinct tier of 维多利亚 on board, 维娜·维多利亚 +3 per distinct tier (and 奇迹 +2 per distinct tier of 奇迹), 刺玫 +1, 号角 +2 per distinct-tier operator of the highest-layer bond; in battle: 风笛 first 3 kills +2 维多利亚/远见/不屈; 烛煌 获得时 +5; 机变 \"风笛的盟誓\" +8. Strategy 哈洛德: from round 4 gain 1 维多利亚 operator every 2 rounds.","howToPlay":"Field 维多利亚 of as many different tiers as possible (T1..T6) for 薄绿/维娜; hand all equipment (incl. free hammers) to 维多利亚 carries; 蒸汽之心 copies all hammer effects.","assumed":["pool_equip_vict = uniform random among 灼燃/坚固/加速/战栗维式重锤 (normal grade)","hammer payout also counts layers added while the bond is inactive"]}},"kjeragShip":{"bondId":"kjeragShip","name":"谢拉格","identifier":4,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kjerag","karlan"],"iconId":"icon_kjeragShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【谢拉格】干员造成的伤害提升,对寒冷、冻结敌人获得额外提升(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间(受层数影响)","descRaw":"【谢拉格】干员造成的<@ba.vup>伤害提升,对<@ba.vup>寒冷、冻结敌人获得额外提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间<@autochess.gray>(受层数影响)","effectId":"bondeffect_kjerag","effectName":"谢拉格","effectDesc":"【谢拉格】干员伤害提升至125%,对寒冷和冻结敌人额外提升至{0:0%}(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷{1:0}秒(受层数影响)","effectDescRaw":"【谢拉格】干员伤害提升至<@ba.vup>125%,对寒冷和冻结敌人额外提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_ex_damage_scale","perStack":"ex_damage_scale_per_stack"},{"index":1,"format":"0","base":"bond_eff_kjerag[storm].base_time","perStack":"bond_eff_kjerag[storm].time_per_stack"}],"bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"},"buffs":[{"key":"env_gbuff_new","bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"}}],"baseParams":["base_ex_damage_scale","bond_eff_kjerag[storm].base_time"],"perStackParams":["ex_damage_scale_per_stack","bond_eff_kjerag[storm].time_per_stack"],"members":["chess_char_1_02_a","chess_char_2_03_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_02_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"谢拉格 members deal damage x1.25; against enemies that are 寒冷 (cold) or 冻结 (frozen) x(1.35 + 0.01*L) instead."},{"need":"6 distinct","effect":"Every 25 s a cold wind applies 寒冷 to every enemy on the field for (20 + 0.1*L) s."}],"formulas":{"damageMultiplier":"1.25","damageMultiplierVsColdOrFrozen":"1.35 + 0.01*L","windIntervalSec":"25","windColdDurationSec":"20 + 0.1*L"},"caps":"none","layerGain":"In battle, freeze-driven: 初雪 and 银灰 - each enemy in range that becomes frozen: 50% chance +1; 凛御银灰 gives the 谢拉格 operator in front of it a 60% version (<=200/battle); 锏 部署时 +8 own active bonds (<=24/battle). 获得时: 角峰 +2, 崖心 +3 (hidden), 雪猎 +5, 灵知 +5, 锏 +8. 机变 \"银灰的盟誓\" +8. Strategy 休露丝: first 谢拉格 bought each round costs 1.","howToPlay":"Standard AK rule: applying 寒冷 to an already-cold enemy freezes it. The 6-member wind + cold-on-hit sources (谢拉格不融冰 12% 1.5 s cold) create constant freezes, so layers can reach hundreds per battle.","notes":["巴哈姆特: avoid lighting 3 奥术 alongside max-layer 谢拉格 (圣聆初雪 gets damage-capped)."],"assumed":["first wind at t = 25 s","wind re-applying cold on a cold enemy triggers freeze like any cold source"]}},"lateranoShip":{"bondId":"lateranoShip","name":"拉特兰","identifier":5,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["laterano"],"iconId":"icon_lateranoShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【拉特兰】干员开启技能获得的弹药量提升(受层数影响)\n<在场6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员攻击力提升(有上限)","descRaw":"【拉特兰】干员开启技能获得的<@ba.vup>弹药量提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员<@ba.vup>攻击力提升(有上限)","effectId":"bondeffect_laterano","effectName":"拉特兰","effectDesc":"【拉特兰】干员开启技能时获得的弹药量+{0:0%}(受层数影响)\n<在场6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多+200%","effectDescRaw":"【拉特兰】干员开启技能时获得的弹药量<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多<@ba.vup>+200%","effectDescParams":[{"index":0,"format":"0%","base":"base_ammo_percent","perStack":"ammo_percent_per_stack"}],"bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"},"buffs":[{"key":"env_gbuff_new","bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"}}],"baseParams":["base_ammo_percent"],"perStackParams":["ammo_percent_per_stack"],"members":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_07_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"visibleMembers":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"When a 拉特兰 member activates a skill that grants ammo, ammo gained x(1 + 0.05 + 0.015*L), rounded down."},{"need":"6 distinct","effect":"Every ammo consumed by any 拉特兰 member: all 拉特兰 members ATK +4% (until battle end), max +200% (= 50 ammo)."}],"formulas":{"ammoMultiplier":"floor(baseAmmo * (1.05 + 0.015*L))","atkPerAmmo(6)":"0.04","atkCap(6)":"2.0"},"caps":"+200% ATK from the 6-member effect","layerGain":"Ammo consumption in battle: 圣约送葬人 each 7 bullets +7 拉特兰 (7 triggers => 49/battle) and +3 远见 (<=21/battle); 莫斯提马 ops in its 4 adjacent tiles each 6 ammo +1; 蕾缪安 each 10 bullets with 3 ops in its row +2 拉特兰/精准; 送葬人 first kill +3 精准/拉特兰. Prep: 空弦 进入休整期 +3 to self and front tile operator's active bonds. 机变 \"莫斯提马的盟誓\" +10. Strategy 潘格尼尼: after spending 55 gold gain a random elite T4+ 拉特兰.","howToPlay":"Only ammo-skill operators benefit from the 3-tier; the bond is weak until 6 (巴哈姆特: \"3人效果較差\").","assumed":["non-ammo skills unaffected","\"ammo consumed\" = each shot/bullet decrement"]}},"egirShip":{"bondId":"egirShip","name":"阿戈尔","identifier":6,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["egir","abyssal"],"iconId":"icon_egirShip","activeCount":3,"thresholds":[3,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【阿戈尔】干员生命值提升(受层数影响)\n战斗开始时,【阿戈尔】干员会吞噬身前一格干员对其造成5000点物理伤害并获得其基础攻击力和阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","descRaw":"【阿戈尔】干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n战斗开始时,【阿戈尔】干员会<@ba.vup>吞噬身前一格干员对其造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的<@ba.vup>盟约层数<@autochess.gray>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@autochess.dgreen>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectId":"bondeffect_egir","effectName":"阿戈尔","effectDesc":"【阿戈尔】干员生命值+{0:0%}(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成5000点物理伤害并获得其基础攻击力和阻挡数,并叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","effectDescRaw":"【阿戈尔】干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,并叠加等于被吞噬者等阶的盟约层数<@ba.acrem>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@ba.vup>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"}],"bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"}}],"baseParams":["base_max_hp"],"perStackParams":["max_hp_per_stack"],"members":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"visibleMembers":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"阿戈尔 members maxHP x(1 + 0.35 + 0.01*L)."},{"need":"3 distinct (battle start)","effect":"Devour (吞噬): see algorithm."},{"need":"5 distinct","effect":"The first 3 阿戈尔 members to be knocked out, in knock-out order (the battle-start devour's food included; a member never knocked out takes none), each revive immediately on that first knock-out; a member takes at most one, and a save by its own kit / item / band revive is no knock-out (max_free_respawn_cnt 3; the owner's decision of 2026-10-05)."}],"algorithm":["Order: 阿戈尔 members sorted leftmost first, then topmost (\"更靠左和靠上\").","Each 阿戈尔 in order marks the unit on the tile directly in front of it (its facing direction) and also the front-tile unit of every 阿戈尔 it has marked (chain). It never marks itself, a unit it already marked, or a unit that marked it.","The marker immediately gains the base ATK of every unit it marked (added to base ATK at the final stage) and their block counts.","After all marks are placed, each mark makes its target suffer one 5000-point physical 流失 (HP loss, source = the target itself; if it dies, the kill is credited to the marker), resolved in marking order. A target that dies cancels its remaining pending marks.","Each devoured unit adds layers to 阿戈尔 equal to its tier (1-6), once per unit per battle.","(5-member tier) Revive is implemented as: when the unit leaves the field for any reason other than being moved, its next deployment has 0 redeploy time and 0 cost (PRTS). Devour layers: each devoured unit adds its tier once per battle (refreshes next round)."],"formulas":{"hpMultiplier":"1.35 + 0.01*L","devourDamage":"5000","layersPerDevoured":"tier of devoured unit"},"caps":"3 revives per battle","layerGain":"Devour (tier per devoured unit, every battle); 幽灵鲨 被击倒 +3; 归溟幽灵鲨 被击倒/替身切换 +5 阿戈尔 +5 不屈; 斯卡蒂 each 2 kills +1 阿戈尔/坚守/突袭; 海霓 first kill (enemy or ally) +3 阿戈尔/奥术; 机变 \"斯卡蒂的盟誓\" +8. Strategy 克莱门莎: an 阿戈尔 knocked out adds layers = its tier.","howToPlay":"Put cheap/high-tier fodder in front of 阿戈尔 carries: they steal base ATK and block, gain layers, and (5) revive. Tier-6 fodder gives +6 layers per battle.","assumed":["5000 physical 流失 ignores DEF and shields","marked allied units are the player's own operators (devour hits allies)"]}},"siracusaShip":{"bondId":"siracusaShip","name":"叙拉古","identifier":7,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["siracusa","chiave"],"iconId":"icon_siracusaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【叙拉古】干员部署后攻击速度提升,持续一定时间(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿10秒内对敌人攻击时有3%的概率造成一定真实伤害(受层数影响)并恐惧3秒","descRaw":"【叙拉古】干员部署后<@ba.vup>攻击速度提升,持续一定时间<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿<@ba.vup>10秒内对敌人攻击时有<@ba.vup>3%的概率造成一定真实伤害<@autochess.gray>(受层数影响)并<@ba.vup>恐惧3秒","effectId":"bondeffect_siracusa","effectName":"叙拉古","effectDesc":"【叙拉古】干员部署后攻击速度+{0:0},持续{1:0}秒(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成{2:0}(受层数影响)点真实伤害并恐惧目标3秒","effectDescRaw":"【叙拉古】干员部署后攻击速度<@ba.vup>+{0:0},持续<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成<@ba.vup>{2:0}<@ba.acrem>(受层数影响)点真实伤害并<@ba.vup>恐惧目标3秒","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"},{"index":1,"format":"0","base":"base_duration","perStack":"duration_per_stack"},{"index":2,"format":"0","base":"base_damage","perStack":"damage_per_stack"}],"bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"},"buffs":[{"key":"env_gbuff_new","bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"}}],"baseParams":["base_attack_speed","base_duration","base_damage"],"perStackParams":["attack_speed_per_stack","duration_per_stack","damage_per_stack"],"members":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_15_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"visibleMembers":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"After every deployment (incl. redeploy) a 叙拉古 member gains ASPD +(25 + 0.8*L) for (32 + 0.4*L) s."},{"need":"6 distinct","effect":"After deployment also 隐匿 (camouflage) for the same duration. While camouflaged and for 10 s after it ends, each normal damage instance (普通伤害 = attack type NORMAL: attacks, skill hits, drone attacks; not 溅射 / 持续 / 附加 — `bonds/core.js siracusaRolls`) it deals may add (5000 + 50*L) true damage (source = the operator) and 恐惧 (fear) 3 s. Nominal 3% chance, implemented as pseudo-random: all 叙拉古 members share one counter; attempt n since last proc succeeds with p = 0.00139*n (guaranteed at n = 720); counter resets on proc."}],"formulas":{"aspd":"25 + 0.8*L","durationSec":"32 + 0.4*L","procDamage":"5000 + 50*L","prdStep":"0.00139"},"caps":"none","layerGain":"Shop refresh-driven: 拉普兰德 first manual refresh each round +4 (works from bench); 安洁莉娜 休整期结束 +4 per refresh this round (<=12/round); 阿罗玛 +2 叙拉古/奥术 per refresh (<=6); 伺夜 first 3 kills +2 叙拉古 +1 奇迹; 荒芜拉普兰德 each kill +2 (elite: every 叙拉古 gets this, <=100/battle); 忍冬 获得时 +6 own bonds (x2/x3 with 投资人); 机变 \"德克萨斯的盟誓\" +10. Strategy 贾维: every 6 manual refreshes get a free 叙拉古 (<=2/round).","howToPlay":"Refresh a lot in prep (free refresh sources: 普罗旺斯, 德克萨斯, 缄默德克萨斯, 巫恋) to feed 拉普兰德/安洁莉娜; pair with 投资人 for 忍冬.","notes":["PRTS: the 10 s post-stealth window restarts if the operator's status effects or immunities change."],"assumed":["隐匿 = standard AK camouflage (not targeted by ranged enemies unless blocking)"]}},"kazimierzShip":{"bondId":"kazimierzShip","name":"卡西米尔","identifier":8,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kazimierz","pinus"],"iconId":"icon_kazimierzShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"每次有干员部署时,【卡西米尔】干员攻击力+20%持续至战斗结束(上限受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","descRaw":"每次有干员部署时,【卡西米尔】干员攻击力<@ba.vup>+20%持续至战斗结束<@autochess.gray>(上限受层数影响)\n<在场<@autochess.dgreen>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每<@ba.vup>2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectId":"bondeffect_kazimierz","effectName":"卡西米尔","effectDesc":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多+{0:0%})(受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","effectDescRaw":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多<@ba.vup>+{0:0%})<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectDescParams":[{"index":0,"format":"0%","base":"base_max_atk_when_born","perStack":"max_atk_when_born_per_stack"}],"bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"},"buffs":[{"key":"env_gbuff_new","bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"}}],"baseParams":["base_max_atk_when_born"],"perStackParams":["max_atk_when_born_per_stack"],"members":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Every time any friendly operator is deployed (incl. redeploys) each 卡西米尔 member gains ATK +20% until battle end, capped at +(50 + 1*L)%."},{"need":"6 distinct","effect":"While blocking >= 1 enemy: every 2 s deals 120% ATK true damage to all enemies within radius 0.8 tiles and stuns them 0.1 s. While not blocking: each normal damage instance adds 30% ATK sourceless true damage."}],"formulas":{"atkPerDeploy":"0.20","atkCap":"0.50 + 0.01*L"},"caps":"ATK bonus cap 50%+1%/layer","layerGain":"Deploy-driven in battle: 砾 部署时 +1; 瑕光 部署时 +4 own active bonds (<=12/battle); 远牙 grants the right-most operator in its row \"部署时 +4 卡西米尔/精准 (<=24/battle)\"; 锏 部署时 +8 (<=24); 获得时: 野鬃 +2, 灰毫 +3 to highest-layer bond; 机变 \"玛恩纳的盟誓\" +12. Strategy 玛恩纳: +1 gold next round per 卡西米尔 bought (<=3).","howToPlay":"Maximise deploy events: low redeploy time (助力 -30%, 骑士戒律), operators that die/retreat and come back (砾 + 不屈). 巴哈姆特: do not light 坚守 (damage sharing keeps 砾 alive).","assumed":["initial auto-deployments at battle start also count as deploys","buff applies to members deployed later too (stored globally, capped)"]}},"preciShip":{"bondId":"preciShip","name":"精准","identifier":9,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_preciShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【精准】干员攻击力提升(受层数影响)\n<在场3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的防御力和法术抗性","descRaw":"【精准】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的<@ba.vup>防御力和<@ba.vup>法术抗性","effectId":"bondeffect_preci","effectName":"精准","effectDesc":"【精准】干员攻击力+{0:0%}(受层数影响)\n<在场3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视30%防御力和法术抗性","effectDescRaw":"【精准】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视<@ba.vup>30%防御力和法术抗性","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"visibleMembers":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"精准 members ATK x(1 + 0.10 + 0.012*L)."},{"need":"3 distinct","effect":"Scope becomes 精准 members + every RANGED operator; affected units also ignore 30% of target DEF and 30% of target RES."}],"formulas":{"atkMultiplier":"1.10 + 0.012*L","defPenetrateRatio(3)":"0.3","resPenetrateRatio(3)":"0.3"},"layerGain":"Kill/skill/deploy in battle: 寒芒克洛丝 gives front operator \"开技能 +1 精准 (<=10/battle)\"; 远牙 grant (+4/deploy); 缇缇 +1 per sleep/stun; 蕾缪安, 送葬人; 莱恩哈特 休整期结束 +5 own active bonds; 获得时: 深靛 +2, 雪猎 +5. 机变 \"缇缇的盟誓\" +10.","assumed":["penetration = ratio ignore (like 无视 x% 防御)"]}},"swiftShip":{"bondId":"swiftShip","name":"迅捷","identifier":10,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_swiftShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【迅捷】干员技能结束时有概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","descRaw":"【迅捷】干员技能结束时有概率<@autochess.gray>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@autochess.dgreen>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectId":"bondeffect_swift","effectName":"迅捷","effectDesc":"【迅捷】干员技能结束时有{0:0%}概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","effectDescRaw":"【迅捷】干员技能结束时有<@ba.vup>{0:0%}概率<@ba.acrem>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@ba.vup>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_01_a","chess_char_1_16_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_10_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_01_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a 迅捷 member's skill ends: with p = min(1, 0.20 + 0.0035*L) immediately +12 SP."},{"need":"L >= 40","effect":"Every operator whose skill ends: with the same p, additionally +15 SP."}],"formulas":{"p":"min(1, 0.20 + 0.0035*L)","reaches100%AtL":"229"},"layerGain":"妮芙 休整期结束 +2 per operator on the bench; 蒂比 进入休整期 +2 own active bonds; 莱恩哈特 +5; 引星棘刺 +4 self & front; 获得时: 锡人/野鬃 +2, 忍冬 +6, 锏 +8. 机变 \"银灰的盟誓\" +8.","assumed":["迅捷 members roll both the 12 SP and the 15 SP independently"]}},"skillfulShip":{"bondId":"skillfulShip","name":"灵巧","identifier":11,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_skillfulShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【灵巧】干员及周围4格干员攻击速度提升(受层数影响)\n<达到40层>生效范围变为【灵巧】干员周围8格","descRaw":"【灵巧】干员及周围4格干员<@ba.vup>攻击速度提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>40层>生效范围变为【灵巧】干员周围8格","effectId":"bondeffect_skillful","effectName":"灵巧","effectDesc":"【灵巧】干员及周围4格的干员攻击速度+{0:0}(受层数影响)\n <达到40层>生效范围变为【灵巧】干员周围8格","effectDescRaw":"【灵巧】干员及周围4格的干员攻击速度<@ba.vup>+{0:0}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>40层>生效范围变为【灵巧】干员周围8格","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"}],"bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"}}],"baseParams":["base_attack_speed"],"perStackParams":["attack_speed_per_stack"],"members":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_5_16_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"灵巧 members and operators on their 4 orthogonally adjacent tiles: ASPD +(10 + 1*L)."},{"need":"L >= 40","effect":"Area becomes the 8 surrounding tiles."}],"formulas":{"aspd":"10 + L"},"layerGain":"溯光星源 休整期结束 +2 灵巧/奥术 per 3 gold spent this round ; 断崖 +3 self & behind; 空弦 +3 self & front; 蒂比 +2; 获得时 灵知 +5. (act1 灵巧 also had a 20-layer shop reward; removed in act2.)","assumed":["a unit covered by several 灵巧 auras gets the bonus once"]}},"arcaneShip":{"bondId":"arcaneShip","name":"奥术","identifier":12,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_arcaneShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例提升(受层数影响)","descRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@autochess.gray>(受层数影响),持续3秒\n<在场<@autochess.dgreen>3名不同【奥术】干员>【奥术】干员对生命值低于<@ba.vup>50%的敌人施加的伤害提升比例提升<@autochess.gray>(受层数影响)","effectId":"bondeffect_arcane","effectName":"奥术","effectDesc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升{0:0%}(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为{1:0%}(受层数影响)","effectDescRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@ba.vup>{0:0%}<@ba.acrem>(受层数影响),持续3秒\n<在场<@ba.vup>3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为<@ba.vup>{1:0%}<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale_show","perStack":"damage_scale_per_stack"},{"index":1,"format":"0%","base":"base_damage_scale_show_ex","perStack":"damage_scale_per_stack_show_ex"}],"bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"},"buffs":[{"key":"env_gbuff_new","bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"}}],"baseParams":["base_damage_scale_show","base_damage_scale_show_ex"],"perStackParams":["damage_scale_per_stack","damage_scale_per_stack_show_ex"],"members":["chess_char_1_17_a","chess_char_2_10_a","chess_char_2_15_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_17_a","chess_char_2_10_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When an 奥术 member deals magic damage, the target takes magic damage x(1.20 + 0.01*L) (i.e. +(20+L)%) for 3 s. ONE instance per target whatever applies it: the strongest value wins, a weaker one resumes if it outlasts it; reapplying refreshes (corrected 2026-10-01: PRTS 作战机制 同名buff默认只表现出一个; 巴哈姆特 12316 the two players of a pair field compete for it)."},{"need":"3 distinct","effect":"Against enemies below 50% HP the multiplier is 1.4 x (1.20 + 0.01*L) = 1.68 + 0.014*L (i.e. +(68+1.4L)%)."}],"formulas":{"magicTakenMul":"1.20 + 0.01*L","magicTakenMulLowHp(3)":"1.4*(1.20 + 0.01*L)","hpThreshold":"0.5","durationSec":"3"},"layerGain":"夕 +2 per operator gained; 阿罗玛 +2 per refresh (<=6); 溯光星源 +2 per 3 gold spent; 海霓 first kill +3; 获得时: 深靛 +2, 协律 +4 (hidden). 机变 \"莫斯提马的盟誓\" +10.","assumed":["one instance per target, the strongest (the engine's default same-name rule; the two players of a pair field compete for it) — until v2.5 the remake kept one per player and they multiplied"]}},"steadShip":{"bondId":"steadShip","name":"坚守","identifier":13,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_steadShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员生命值提升(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由所有【坚守】干员平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%脆弱效果","descRaw":"所有干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由所有【坚守】干员<@ba.vup>平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害<@autochess.gray>(受层数影响,每0.2秒至多触发1次)和持续<@ba.vup>5秒的<@ba.vup>40%脆弱效果","effectId":"bondeffect_stead","effectName":"坚守","effectDesc":"所有干员生命值+{0:0%}(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到{1:0}点法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%的脆弱效果","effectDescRaw":"所有干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到<@ba.vup>{1:0}点法术伤害<@ba.acrem>(受层数影响,每0.2秒至多触发1次)和持续5秒的<@ba.vup>40%的脆弱效果","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"},{"index":1,"format":"0","base":"base_damage_value","perStack":"damage_value_per_stack"}],"bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"}}],"baseParams":["base_max_hp","base_damage_value"],"perStackParams":["max_hp_per_stack","damage_value_per_stack"],"members":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"visibleMembers":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators maxHP x(1 + 0.25 + 0.012*L)."},{"need":"3 distinct","effect":"When a non-坚守 operator takes damage, 40% of that damage is taken instead by the 坚守 members, split evenly. When a 坚守 member takes damage, the damage source takes (850 + 10*L) sourceless magic damage and 脆弱 (damage taken x1.4) for 5 s; each 坚守 member can reflect at most once per 0.2 s."}],"formulas":{"hpMultiplier":"1.25 + 0.012*L","redirectRatio":"0.4","thornsDamage":"850 + 10*L","thornsCooldownSec":"0.2","fragile":"1.4 for 5 s"},"layerGain":"折桠 休整期结束 +4; 蛇屠箱 +1 per operator in same row; 斯卡蒂 kills; 获得时 角峰 +2; 机变 \"斯卡蒂的盟誓\" +8.","notes":["PRTS: thorns hit whatever the damage source is; sourceless damage can consume the thorns cooldown."]}},"deputShip":{"bondId":"deputShip","name":"助力","identifier":14,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_deputShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员防御力提升(受层数影响),再部署时间减少\n休整期结束时,使当前所有已激活盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","descRaw":"所有干员<@ba.vup>防御力提升<@autochess.gray>(受层数影响),<@ba.vup>再部署时间减少\n休整期结束时,使当前所有已激活盟约层数<@ba.vup>+2\n<在场<@autochess.dgreen>3名不同【助力】干员>改为层数<@ba.vup>+4","effectId":"bondeffect_deput","effectName":"助力","effectDesc":"所有干员防御力+{0:0%}(受层数影响),再部署时间-30%\n休整期结束时,使当前所有已激活的盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","effectDescRaw":"所有干员防御力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响),再部署时间<@ba.vup>-30%\n休整期结束时,使当前所有已激活的盟约层数<@ba.vup>+2\n<在场<@ba.vup>3名不同【助力】干员>改为层数<@ba.vup>+4","effectDescParams":[{"index":0,"format":"0%","base":"base_def","perStack":"def_per_stack"}],"bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3,"layer":2,"count":3,"more_layer":4},"bbStr":{"key":"act1autochess_bond_eff_deput","bond":"deputShip"},"buffs":[{"key":"env_gbuff_new","bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3},"bbStr":{"key":"act1autochess_bond_eff_deput"}},{"key":"bond_activated_add_layer","bb":{"layer":2,"count":3,"more_layer":4},"bbStr":{"bond":"deputShip"}}],"baseParams":["base_def"],"perStackParams":["def_per_stack"],"members":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_2_15_a","chess_char_3_15_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_05_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_5_16_a","chess_char_6_14_a","chess_char_6_20_a"],"visibleMembers":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_3_20_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_6_14_a","chess_char_6_20_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators DEF x(1 + 0.15 + 0.012*L); redeploy time -30%. At the end of every prep phase (休整期结束时) every currently active bond (incl. 助力) gets +2 layers."},{"need":"3 助力 (distinct name or elite state)","effect":"+4 layers instead of +2."}],"formulas":{"defMultiplier":"1.15 + 0.012*L","redeployTimeMul":"0.7","layersPerRound":"2 (4 at 3 members) to every active bond"},"layerGain":"波登可 +1 / 调香师 +2 to highest-layer bond at prep end (work from bench); 流明 +2 to active bonds of every bench operator; 纯烬艾雅法拉 +3 highest-layer bond per skill; its own +2/+4 per round.","howToPlay":"Cheap universal layer engine: activate as many bonds as possible so each gets +2/+4 every round (helps the hidden-round threshold)."}},"visiShip":{"bondId":"visiShip","name":"远见","identifier":15,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_visiShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":10,"mode":"every","effect":"bond_layer_gain_coin"},{"layer":80,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"},{"layer":150,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"}],"desc":"<每叠加10层>获得一次2资金\n<首次达到80层>所有【远见】干员购买价格永久-1资金\n<首次达到150层>以上效果改为调度中心内所有干员的购买价格永久-1资金(整备区的【远见】干员也可用于激活盟约)","descRaw":"<每叠加<@autochess.dgreen>10层>获得一次<@ba.vup>2资金\n<首次达到<@autochess.dgreen>80层>所有【远见】干员购买价格<@ba.vup>永久-1资金\n<首次达到<@autochess.dgreen>150层>以上效果改为调度中心内所有干员的购买价格<@ba.vup>永久-1资金(整备区的【远见】干员也可用于激活盟约)","effectId":"bondeffect_visi","effectName":"远见","effectDesc":"<每叠加10层>获得一次2资金\n<首次到达80层>所有【远见】干员购买价格永久-1资金\n<首次到达150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescRaw":"<每叠加<@ba.vup>10层>获得一次<@ba.vup>2资金\n<首次到达<@ba.vup>80层>所有【远见】干员购买价格永久-1资金\n<首次到达<@ba.vup>150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":10,"count":2,"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"},"buffs":[{"key":"bond_layer_gain_coin","bb":{"layer":10,"count":2},"bbStr":{}},{"key":"bond_multi_layer_char_goods_price_bond_discount","bb":{"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_11_a","chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"Each time cumulative L passes a multiple of 10: +2 gold."},{"need":"first time L >= 80","effect":"All 远见 operators' shop price permanently -1."},{"need":"first time L >= 150","effect":"Replaces the above: every operator in the shop permanently -1 (overrides, does not stack; 3/27 update)."}],"formulas":{"goldPayouts":"2 * floor(L/10)"},"layerGain":"寒檀 进入/结束休整期 +4 each; 伊内丝 +5 own active bonds; 赫默 +2; 圣约送葬人 +3 per 7 bullets (<=21/battle); 风笛 kills +2; 机变 \"风笛的盟誓\" +8.","assumed":["no floor but 0 (owner's decision 2026-10-04; a floor of 1 was assumed until 0.1.3)"]}},"miraShip":{"bondId":"miraShip","name":"奇迹","identifier":16,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_miraShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"every","effect":"bond_layer_gain_coin"}],"desc":"刷新调度中心时,有概率使下次刷新不消耗资金(受层数影响)\n<每叠加100层>获得20资金(整备区的【奇迹】干员也可用于激活盟约)","descRaw":"刷新调度中心时,有概率使下次刷新<@ba.vup>不消耗资金<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>100层>获得<@ba.vup>20资金(整备区的【奇迹】干员也可用于激活盟约)","effectId":"bondeffect_mira","effectName":"奇迹","effectDesc":"刷新调度中心时,有{0:0%}(受层数影响)概率使下次刷新不消耗资金\n<每叠加100层>获得20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescRaw":"刷新调度中心时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率使下次刷新不消耗资金\n<每叠加<@ba.vup>100层>获得<@ba.vup>20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescParams":[{"index":0,"format":"0%","base":"baseprob","perStack":"prob"}],"bb":{"probk":0.3,"prob":0.003,"baseprob":0.18,"layer":100,"count":20},"bbStr":{},"buffs":[{"key":"bond_refresh_shop_next_free","bb":{"probk":0.3,"prob":0.003,"baseprob":0.18},"bbStr":{}},{"key":"bond_layer_gain_coin","bb":{"layer":100,"count":20},"bbStr":{}}],"baseParams":["baseprob"],"perStackParams":["prob"],"members":["chess_char_1_11_a","chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_15_a","chess_char_4_26_a","chess_char_5_04_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"visibleMembers":["chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_26_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"After each shop refresh, if the player has 0 free refreshes: with p = 0.18 + 0.003*L gain 1 free refresh."},{"need":"every 100 layers","effect":"+20 gold."}],"formulas":{"p":"min(1, 0.18 + 0.003*L)","goldPayouts":"20 * floor(L/100)"},"layerGain":"维娜·维多利亚 +2 per distinct-tier 奇迹; 录武官 获得时 +3; 伺夜 kills +1; 引星棘刺 +4 self & front; 华法琳 (奇迹 member) gives the operator in front \"开技能时 +1 own active bonds\" (data: <=7/battle, elite +2 <=14; PRTS 3/27 patch note says cap raised to 12/24).","notes":["blackboard probk = 0.3: meaning unknown (not in any description) [UNKNOWN]."]}},"investShip":{"bondId":"investShip","name":"投资人","identifier":17,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_investShip","activeCount":3,"thresholds":[3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"reach","effect":"bond_layer_char_garrison_bonus"}],"desc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次(整备区的【投资人】干员也可用于激活盟约)","descRaw":"干员的“获得时”类特质每次<@ba.vup>触发2次\n<达到<@autochess.dgreen>100层>“获得时”类特质每次<@ba.vup>触发3次(整备区的【投资人】干员也可用于激活盟约)","effectId":"bondeffect_invest","effectName":"投资人","effectDesc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescRaw":"干员的“获得时”类特质每次触发2次\n<达到<@ba.vup>100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"},"buffs":[{"key":"bond_layer_char_garrison_bonus","bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"}},{"key":"bond_layer_char_garrison_bonus","bb":{"layer":100,"count":3},"bbStr":{"event":"SERVER_GAIN"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_16_a","chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"visibleMembers":["chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"spec":{"tiers":[{"need":"3 distinct (board + bench)","effect":"Every \"获得时\" (SERVER_GAIN) trait of every operator triggers 2 times."},{"need":"L >= 100","effect":"Triggers 3 times."}],"formulas":{"gainTraitRepeat":"2 if L < 100 else 3"},"layerGain":"山 休整期结束 +1 per operator gained this round; 机变 \"诗怀雅的盟誓\" +10, \"银灰的盟誓\" +8; generic sources.","howToPlay":"Pair with high \"获得时 +N 自身所属盟约\" operators (忍冬 +6, 锏 +8, 星熊 +8, 雪猎 +5) - their layers double/triple."}},"raidShip":{"bondId":"raidShip","name":"突袭","identifier":18,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_raidShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":50,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值提升(受层数影响)\n<达到50层>所有干员攻击速度+50","descRaw":"【突袭】干员<@ba.vup>10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即<@ba.vup>再部署至一名地面敌人周围,期间<@ba.vup>攻击力和<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>50层>所有干员攻击速度<@ba.vup>+50","effectId":"bondeffect_raid","effectName":"突袭","effectDesc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值+{0:0%}(受层数影响)\n <达到50层>所有干员攻击速度+50","effectDescRaw":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>50层>所有干员攻击速度<@ba.vup>+50","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"visibleMembers":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"If a 突袭 member has not attacked for 10 s, or its skill is ready, and no enemy is in its range: it is immediately redeployed (keeping SP) onto a tile next to a ground enemy; while in that redeployed state its ATK and maxHP x(1 + 0.25 + 0.01*L)."},{"need":"L >= 50","effect":"ALL operators ASPD +50."}],"formulas":{"atkHpMultiplier":"1.25 + 0.01*L","idleSec":"10","aspdAll(L>=50)":"50"},"layerGain":"史尔特尔 部署时 +8 (<=50/battle); 休谟斯 each 2 kills +1; 瑕光 +4/deploy; 斯卡蒂; 伊内丝 +5; 机变 \"斯卡蒂的盟誓\" +8, \"德克萨斯的盟誓\" +10.","assumed":["target enemy = the ground enemy closest to the player's objective (its own field's; another field's only while its own has none) that the member can reach; landing tile = the nearest free deployable tile within 2 tiles of it from which the member's attack range covers it. No such tile for any of the 8 most advanced -> no jump; the poll looks again every 0.25 s (GitHub issue #51 - up to 0.1.1 the idle trigger landed out of reach and hopped every 10 s; DESIGN §22.2)","the buff lasts until the operator leaves the field"]}},"indomShip":{"bondId":"indomShip","name":"不屈","identifier":19,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_indomShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"地面干员被击倒时,有概率立即重新部署(受层数影响)\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","descRaw":"<@ba.vup>地面干员被击倒时,有概率立即<@ba.vup>重新部署<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员<@ba.vup>技力+5","effectId":"bondeffect_indom","effectName":"不屈","effectDesc":"地面干员被击倒时,有{0:0%}(受层数影响)概率立刻重新部署\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","effectDescRaw":"<@ba.vup>地面干员被击倒时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率立刻重新部署\n<在场<@ba.vup>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员技力<@ba.vup>+5","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_05_a","chess_char_1_20_a","chess_char_2_03_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_20_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a ground operator (地面干员 = melee position, on any tile) is knocked out / retreats / swaps 替身<->本体: with p = min(1, 0.18 + 0.004*L) it is redeployed at once (next deployment has 0 redeploy time and 0 cost). Also consumes a \"复活\" charge if it had one."},{"need":"3 distinct","effect":"When a ground (melee-position) operator is knocked out: every operator on the field +5 SP."}],"formulas":{"p":"min(1, 0.18 + 0.004*L)","reaches100%AtL":"205"},"layerGain":"雷蛇 休整期结束 +1; 砾 被击倒 +2; 归溟幽灵鲨 +5; 风笛 kills +2; 机变 \"风笛的盟誓\" +8."}},"maniShip":{"bondId":"maniShip","name":"调和","identifier":20,"isCore":false,"bondType":"REGULAR","bondOrder":1,"powerIdList":[],"iconId":"icon_maniShip","activeCount":1,"thresholds":[1],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"MANI","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"激活时使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","descRaw":"激活时使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectId":"bondeffect_mani","effectName":"调和","effectDesc":"激活时可以使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectDescRaw":"激活时可以使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员<@ba.vup>享受已激活的核心盟约的效果","effectDescParams":[],"bb":{"count":1},"bbStr":{},"buffs":[{"key":"other_bond_add_trigger_cnt","bb":{"count":1},"bbStr":{}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_6_11_a"],"visibleMembers":["chess_char_6_11_a"],"spec":{"tiers":[{"need":"1 调和 on board","effect":"Every core bond's member count +1; 调和 operators receive the effects of all active core bonds."}],"members":"缪尔赛思 (T6) and 盟约·辅助干员 (T1, hidden; given in round 1 by strategy Pith \"优等生\").","assumed":["+1 only for core bonds with >=1 real member","one +1 total no matter how many 调和 operators"]}},"emptyShip":{"bondId":"emptyShip","name":"协防干员","identifier":21,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_emptyShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员受到的物理和法术伤害-20%,【协防干员】伤害提升至120%,精锐【协防】干员造成伤害提升至140%","descRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%,【协防干员】伤害提升至<@ba.vup>120%,精锐【协防】干员造成伤害提升至<@ba.vup>140%","effectId":"bondeffect_empty","effectName":"协防干员","effectDesc":"所有干员受到的物理和法术伤害-20%;【协防干员】伤害提升至120%,精锐【协防干员】造成伤害提升至140%","effectDescRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%;【协防干员】伤害提升至<@ba.vup>120%,精锐【协防干员】造成伤害提升至<@ba.vup>140%","effectDescParams":[],"bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_2_14_a","chess_char_3_10_a","chess_char_4_08_a","chess_char_4_25_a","chess_char_5_09_a","chess_char_5_10_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_14_a","chess_char_3_10_a","chess_char_4_25_a","chess_char_5_10_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators take -20% physical and magic damage; 协防干员 members deal damage x1.2 (elite 协防 x1.4)."}],"meaning":"\"协防干员\" (assist operators) = fallback bond (constData.fallbackBondId). DIY/self-selected 6-star operators whose faction matches no core bond become 协防干员; some preset operators (调香师, 松果, 瑰盐, 魔王, 铃兰, 迷迭香, 盟约·辅助干员) are natively 协防.","formulas":{"damageTakenMul":"0.8","memberDamageMul":"1.2 (elite 1.4)"},"notes":["noStack=true: no layer-scaled effect, but layers are still counted (巴哈姆特)."]}},"soloShip":{"bondId":"soloShip","name":"独行","identifier":22,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_soloShip","activeCount":1,"thresholds":[1],"maxCount":1,"thresholdTemplate":"count_threshold_downward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","descRaw":"<在场1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15(在场2名及以上【独行】干员时失效)","effectId":"bondeffect_solo","effectName":"独行","effectDesc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","effectDescRaw":"<在场<@ba.vup>1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15<@ba.acrem>(在场2名及以上【独行】干员时失效)","effectDescParams":[],"bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"},"buffs":[{"key":"env_gbuff_new","bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"visibleMembers":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"spec":{"tiers":[{"need":"exactly 1 distinct 独行 on board","effect":"That operator ATK +60%, maxHP +60%, +15 SP when deployed. Disabled when 2+ different 独行 operators are on the board."}],"formulas":{"atkMul":"1.6","hpMul":"1.6","spOnDeploy":"15"},"notes":["noStack=true"]}},"suntShip":{"bondId":"suntShip","name":"绝技","identifier":23,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_suntShip","activeCount":2,"thresholds":[2,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward_golden","countMode":"BOARD_ALL_CHESS","countsHand":false,"countsGoldenOnly":true,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","descRaw":"<在场<@autochess.dgreen>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@autochess.dgreen>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectId":"bondeffect_sunt","effectName":"绝技","effectDesc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","effectDescRaw":"<在场<@ba.vup>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@ba.vup>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectDescParams":[],"bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"},"buffs":[{"key":"env_gbuff_new","bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"}}],"baseParams":[],"perStackParams":[],"members":[],"visibleMembers":[],"spec":{"tiers":[{"need":"2 elite (精锐) operators on board (any operators, duplicates count)","effect":"All elite operators ATK +30%."},{"need":"5 elite operators on board","effect":"At battle start every elite operator and its summons have skill SP cost x0.7 (rounded down, may become 0)."}],"formulas":{"atkMul":"1.3","spCostMul":"floor(sp*0.7)"},"notes":["isHiddenCharList=true, chessIdList empty: no member operators; elites are not \"members\" of 绝技 (PRTS).","noStack=true"]}}} \ No newline at end of file diff --git a/docs/research/02-bonds.json b/docs/research/02-bonds.json index 0f1ff5e9..4b1f3def 100644 --- a/docs/research/02-bonds.json +++ b/docs/research/02-bonds.json @@ -2727,7 +2727,7 @@ }, { "need": "5 distinct", - "effect": "The first 3 阿戈尔 members by position (the devour order: leftmost first, then topmost; fixed at battle start) each revive immediately on their own first knock-out, whatever the order of knock-outs (max_free_respawn_cnt 3)." + "effect": "The first 3 阿戈尔 members to be knocked out, in knock-out order (the battle-start devour's food included; a member never knocked out takes none), each revive immediately on that first knock-out; a member takes at most one, and a save by its own kit / item / band revive is no knock-out (max_free_respawn_cnt 3; the owner's decision of 2026-10-05)." } ], "algorithm": [ diff --git a/docs/research/02-bonds.md b/docs/research/02-bonds.md index 2e5620c9..7e3cece0 100644 --- a/docs/research/02-bonds.md +++ b/docs/research/02-bonds.md @@ -374,7 +374,7 @@ Members (11 chess, 10 in current shop pool; by tier in shop: {'1': 1, '2': 1, '3 - **[3 distinct]** 阿戈尔 members maxHP x(1 + 0.35 + 0.01*L). - **[3 distinct (battle start)]** Devour (吞噬): see algorithm. -- **[5 distinct]** The first 3 阿戈尔 members by position — the devour order below (step 1), i.e. the deployment order, fixed at battle start — each revive immediately on their own first knock-out, whatever the order of knock-outs (max_free_respawn_cnt 3; PRTS 阿戈尔 备注 "从最先部署(更靠左和靠上的)的【阿戈尔】干员开始", players' videos; until 0.1.3 the remake gave them to the first 3 members knocked out). A devour knock-out of one of them spends its revive (it stays standing, step 4); any other member the devour knocks out stays down. +- **[5 distinct]** The first 3 阿戈尔 members to be knocked out, in knock-out order, each revive immediately on that first knock-out (max_free_respawn_cnt 3; the owner's decision of 2026-10-05, following players' reports — GitHub #105, #140). The battle-start devour's knock-outs count, so the food usually takes them at t = 0 (it stands again, step 4) and survivors = uneaten members + 3. A member takes at most one, on its first knock-out of the battle, however many 阿戈尔 mark it (step 4 cancels its pending marks); a save by its own kit / item / band revive (斯卡蒂's DRE-Y, M3茧甲, 埃芒加德 [ASSUMED for the band]) is no knock-out and takes none. 0.1.3 gave them to the first 3 members by position, fixed at battle start (from PRTS's devour note "从最先部署(更靠左和靠上的)的【阿戈尔】干员开始" and players' videos), so uneaten front members held them. - Algorithm: 1. Order: 阿戈尔 members sorted leftmost first, then topmost ("更靠左和靠上"). 2. Each 阿戈尔 in order marks the unit on the tile directly in front of it (its facing direction) and also the front-tile unit of every 阿戈尔 it has marked (chain). It never marks itself, a unit it already marked, or a unit that marked it. diff --git a/server/sim/content/bonds/core.js b/server/sim/content/bonds/core.js index 6eea7878..c4523784 100644 --- a/server/sim/content/bonds/core.js +++ b/server/sim/content/bonds/core.js @@ -16,8 +16,8 @@ // 拉特兰 lateranoShip member ammo skills start with floor(ammo × (1 + base_ammo_percent + ammo_percent_per_stack·L)); // 6: every ammo used by a member → all members ATK +atk_per_consume (≤ max_atk_for_consume) // 阿戈尔 egirShip members max HP +(base_max_hp + max_hp_per_stack·L) (直接乘算); battle start devour (see devour()); -// 5: the first max_free_respawn_cnt members by position (the devour's order, fixed at battle -// start) each redeploy at once (free) on their first knock-out +// 5: the first max_free_respawn_cnt members knocked out (in knock-out order, the devour's food +// included) each redeploy at once (free) on that first knock-out // 叙拉古 siracusaShip every member deployment: ASPD +(base + per·L) for (base_duration + per·L) s; 6: 隐匿 for the same // time, and while hidden / end_duration s after, every 普通伤害 hit (siracusaRolls) procs (PRD, // nominal `prob`) base_damage + damage_per_stack·L true damage + fear `fear` s @@ -34,7 +34,7 @@ // Two players in one field: everything is per player (own members, own deployments); the 谢拉格 wind and 炎佑 act on // every enemy of the field (debuffs on shared enemies help both, research 06 §8.6). // Hook priorities: 拉特兰 skillStart −10 (after kits' own ammo changes), 阿戈尔 death 11 (5-tier revive, before 不屈's -// death 10), layerGain −100 (after 魔王-style modifiers). +// death 10; every `fatal` saver runs before any death hook), layerGain −100 (after 魔王-style modifiers). import * as S from '../support/index.js'; import { mitigate } from '../../damage.js'; @@ -333,15 +333,14 @@ function installLaterano(battle, pid, bb, members) { // "更靠左和靠上": left first (on the player's own board: mirrored players count from the field's right), then top first — // row 0 is the BOTTOM row (DESIGN §3), so the top of the board is the highest row index. The order is a board position, -// independent of the members' directions (only "身前" follows each member's `dir`). The devour marks in this order and the -// 5-tier revive's beneficiaries are the first members in it (PRTS "从最先部署(更靠左和靠上的)的【阿戈尔】干员开始"; the -// battle's initial deployment order, Battle.start). +// independent of the members' directions (only "身前" follows each member's `dir`). The devour marks in this order (PRTS +// "从最先部署(更靠左和靠上的)的【阿戈尔】干员开始"; the battle's initial deployment order, Battle.start). const boardCol = (u) => (u.player && u.player.mirror ? -u.tileC : u.tileC); const egirOrder = (a, b) => boardCol(a) - boardCol(b) || b.tileR - a.tileR || a.id - b.id; /** * 联防: an operator forced out at the deployment (carry.down, Battle.start, before battleStart) still stands on its - * deploy position. The devour and the 5-tier revive slots both count it there (PRTS 盟约记录 前3名 / 最先部署). + * deploy position for the devour (PRTS 盟约记录 最先部署). The forced exit is not a knock-out, so it takes no 5-tier slot. */ function egirDownAtStart(battle, u) { return S.isOp(u) && !u.alive && u.removeReason === FORCED_EXIT && !!u.carry && u.carry.down === true @@ -436,37 +435,37 @@ function installEgir(battle, pid, bb, members) { }; apply(); onLayers(battle, pid, 'egirShip', apply); - // 5: "前3名【阿戈尔】干员首次被击倒时立刻复活" — the 3 (bonds.json max_free_respawn_cnt) are the first 3 members BY POSITION, - // in the devour's order above = the battle's deployment order (PRTS 盟约记录 阿戈尔 备注 "从最先部署(更靠左和靠上的)的 - // 【阿戈尔】干员开始"; players' videos: the revivers go by position, not by who is eaten or knocked out first). They are - // fixed at battle start, before the devour; each revives once, on its own first knock-out ('killed'), whatever the order - // of knock-outs, so a member the devour knocks out comes back only when it is one of them. Until 0.1.3 the first 3 - // members knocked out took the revives and the devour's food spent them at t = 0. A member entering 联防 down (forced - // out before battleStart) keeps the slot its position earned: the forced exit is not a 击倒 (reason !== 'killed'), so - // the charge waits until they are knocked out after standing back up. A 调和 member counts like any other. - // [ASSUMED] a beneficiary 埃芒加德 / M3茧甲 save in place (items revivedInPlace, the stand-in for PRTS's 0-time redeploy) - // has used its revive (PRTS 不屈 备注: a held 复活 is consumed even when another effect redeploys the unit at once). - // PRTS: the knocked-out unit's next deployment has 0 redeploy time and 0 cost, i.e. it IS knocked out (被击倒 triggers, - // 克莱门莎, 幽灵鲨 … fire) and redeploys at once where it lies (the engine's rest tile, Battle._layBody: the tile it was - // knocked out on — a raid-relocated member comes back where it fell —, or its own home when it fell on another board - // piece's home; PRTS 卫戍协议/帮助 §作战阶段 单位部署) with full HP, SP reset and `deploy` effects (卡西米尔 / 叙拉古). - // Death priority 11: before 不屈 (10), whose redeploy "also consumes a 复活 charge" — with this order the charge is - // always the one used, same outcome. The marks still pending on a revived member are cancelled (devour). + // 5: "前3名【阿戈尔】干员首次被击倒时立刻复活" — the 3 (bonds.json max_free_respawn_cnt) slots go to the first 3 members + // knocked out, in knock-out order: the owner's decision of 2026-10-05, following players' reports (GitHub #105, #140: + // "没被吃的阿戈尔干员也会占用复活名额" — with 0.1.3's fixed holders by position the uneaten front members held the + // slots, so whatever the food chain ate only 3 阿戈尔 stood). A knock-out by the battle-start devour counts like any + // other, so the eaten food usually takes them at t = 0 and survivors = uneaten members + 3. A member takes at most one + // slot, on its first knock-out ('killed') in the battle: its later knock-outs never take one, and a first knock-out + // after the 3 are gone stays down. However many members mark it, its pending marks are cancelled once it is knocked + // out (devour), so a multi-devoured member spends one slot at most. Its own saver acts first: every kit, item or band + // revive that prevents or replaces the knock-out is a `fatal` hook (斯卡蒂's DRE-Y −50, kit savers 10 … −60, 坚固维式 + // 重锤 PRIO_REVIVE −100, M3茧甲 PRIO_RESPAWN −101, 埃芒加德 −110), so the unit is never knocked out and no slot is used — + // the slot waits for its first real knock-out [ASSUMED for 埃芒加德, a band: as M3茧甲, the item revive the owner named]. + // An operator entering 联防 down (FORCED_EXIT) is not knocked out either; a 调和 member counts like any other. Each + // battle (normal, 联防, boss) counts its own. PRTS: the knocked-out unit's next deployment has 0 redeploy time and 0 + // cost, i.e. it IS knocked out (被击倒 triggers, 克莱门莎, 幽灵鲨 … fire) and redeploys at once where it lies (the + // engine's rest tile, Battle._layBody: the tile it was knocked out on — a raid-relocated member comes back where it + // fell —, or its own home when it fell on another board piece's home; PRTS 卫戍协议/帮助 §作战阶段 单位部署) with full + // HP, SP reset and `deploy` effects (卡西米尔 / 叙拉古). Death priority 11: before 不屈 (10), whose redeploy "also + // consumes a 复活 charge" — with this order the slot is always the one used, same outcome. Until 0.1.3 the slots were + // fixed at battle start for the first 3 members by position (§23.20); until 0.1.2 the first 3 knocked out took them + // but a revived member's pending marks could knock it out again (GitHub #33, fixed in devour since). const max = reached(battle, pid, 'egirShip', bb.power_bond_char_cnt) ? Math.max(0, Math.floor(num(bb.max_free_respawn_cnt, 0))) : 0; - const holders = new Map(); // beneficiary → its in-place revives (mem.revives) at battle start - battle.on('battleStart', () => { - for (const u of members.filter((x) => S.isOp(x) && (S.onField(x) || egirDownAtStart(battle, x))).sort(egirOrder).slice(0, max)) holders.set(u, u.mem.revives | 0); - devour(battle, pid, bb, members); - }, { once: true }); + battle.on('battleStart', () => devour(battle, pid, bb, members), { once: true }); if (!(max > 0)) return; - const used = new Set(); + const memberOps = new Set(members.filter(S.isOp)); + const knockedOut = new Set(); // members whose first knock-out of this battle has happened let revives = 0; battle.on('death', (c) => { const u = c.unit; - if (c.reason !== 'killed' || !holders.has(u) || used.has(u)) return; - used.add(u); - if ((u.mem.revives | 0) !== holders.get(u)) return; // saved in place since the battle start: the revive is gone - if (u.alive || u.removed) return; + if (c.reason !== 'killed' || !memberOps.has(u) || knockedOut.has(u)) return; + knockedOut.add(u); + if (revives >= max || u.alive || u.removed) return; if (!battle.redeploy(u, { free: true })) return; revives++; S.fxOn(battle, 'revive', u, 'bond:egirShip', 'respawn', { n: revives }); diff --git a/test/content/bonds_core.test.js b/test/content/bonds_core.test.js index fc016c61..e3872f3d 100644 --- a/test/content/bonds_core.test.js +++ b/test/content/bonds_core.test.js @@ -374,38 +374,39 @@ test('阿戈尔 devour order: left first, then top first (row 0 is the bottom: t checkInvariants(h.b); }); -test('阿戈尔 5: the first 3 members by position (left column first, top first) revive at once on their first knock-out, whatever the order of knock-outs; the others never; a second knock-out is final', () => { +test('阿戈尔 5: the 3 slots go to the first 3 members knocked out, wherever they stand; a later first knock-out stays down; a second knock-out is final; 3 members: none', () => { const list = []; for (let i = 0; i < 5; i++) list.push([`g${i}_a`, ['egirShip'], { skill: { spCost: 30, initSp: 5, duration: 10 } }]); // one per row pair so nobody devours anybody: col 3 rows 9–12 (g0 bottom … g3 top), g4 at (9,5). PRTS 盟约记录 阿戈尔 - // "前3名【阿戈尔】干员首次被击倒时立刻复活", the first 3 being the first deployed — "更靠左和靠上": g3, g2, g1 + // "前3名【阿戈尔】干员首次被击倒时立刻复活"; the owner's decision of 2026-10-05: the first 3 knocked out, in knock-out order const units = list.map(([id], i) => ({ chessId: id, row: 9 + (i % 4), col: 3 + 2 * Math.floor(i / 4) })); const h = makeBattle({ defs: defsOf(list), units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: ['death', 'deploy'] }); h.step(1); const us = list.map(([id]) => h.unit(id)); const kill = (u) => h.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); const redeploys = (u) => h.hooksOf('deploy').filter((c) => c.unit === u && !c.initial).length; - // knocked out first, yet no beneficiary: g0 (bottom of the first column) and g4 (second column) stay down - for (const u of [us[0], us[4]]) { - kill(u); - assert.ok(!u.alive, `${u.defId} is not among the first 3 by position: no revive`); - assert.equal(redeploys(u), 0); - } - us[1].skill.gainSp(20, 'test'); + us[0].skill.gainSp(20, 'test'); const tiles = us.map((u) => [u.tileR, u.tileC]); - for (const i of [1, 3, 2]) { + // g4 (second column) and g0 (bottom of the first column) first — the last two by position — then g2 + for (const i of [4, 0, 2]) { const u = us[i]; - const before = redeploys(u); kill(u); assert.ok(u.alive && u.deployed, `member ${i} back on the field`); close(u.hp, u.s.maxHp); assert.deepEqual([u.tileR, u.tileC], tiles[i], 'same tile'); assert.ok(h.hooksOf('death').some((c) => c.unit === u && c.reason === 'killed'), 'it was knocked out (被击倒 triggers fire)'); - assert.equal(redeploys(u), before + 1, `member ${i} redeployed`); + assert.equal(redeploys(u), 1, `member ${i} redeployed`); } - assert.equal(us[1].skill.sp, 5, 'a redeploy restarts from the initial SP'); - kill(us[1]); - assert.ok(!us[1].alive, 'second knock-out is final'); + assert.equal(us[0].skill.sp, 5, 'a redeploy restarts from the initial SP'); + // the 3 are gone: g3 (top-left, first by position) and g1 stay down on their first knock-out + for (const i of [3, 1]) { + kill(us[i]); + assert.ok(!us[i].alive, `member ${i}: no slot left`); + assert.equal(redeploys(us[i]), 0); + } + kill(us[4]); + assert.ok(!us[4].alive, 'a second knock-out is final'); + assert.equal(h.eventsOf('fx').filter((x) => x[1] === 'revive').length, 3, 'three revives'); checkInvariants(h.b); // a member moved off its board tile (突袭 / relocation) revives where it was knocked out; later redeploys go home const hm = makeBattle({ defs: defsOf(list), units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: [] }); @@ -424,44 +425,126 @@ test('阿戈尔 5: the first 3 members by position (left column first, top first assert.ok(!h3.unit('g3_a').alive); }); -test('阿戈尔 5 + the devour chain (GitHub #33): the devour knocks out the food, only the members among the first 3 by position come back; the others keep theirs for the fight (normal and 联防)', () => { - // one row, all facing right: 浊心斯卡蒂 → 乌尔比安 → 幽灵鲨 → 海霓 → 深巡 → 隐现. PRTS 盟约记录 阿戈尔 备注 "标记按付与顺序触发 - // 【吞噬】效果,目标首次被击倒后解除自身被付与但还未触发的【吞噬】效果". The 3 revives belong to the first 3 by position - // (浊心斯卡蒂, 乌尔比安, 幽灵鲨 — community reports 「阿戈尔盟约复活有bug,只能复活一个干员」); until 0.1.3 the first 3 - // knocked out took them, so the food (幽灵鲨, 海霓, 深巡) spent all 3 at t = 0 and nobody came back in the fight - const ids = ['chess_char_6_04_a', 'chess_char_5_05_a', 'chess_char_2_07_a', 'chess_char_3_09_a', 'chess_char_1_04_a', 'chess_char_1_01_a']; +test('阿戈尔 5 + the devour chain (GitHub #33, #105, #140): the eaten members take the 3 slots in knock-out order, uneaten ones keep none — survivors = uneaten + 3 (normal and 联防)', () => { + // row 10, all facing right: 浊心斯卡蒂 → 幽灵鲨 → 海霓 → 深巡 → 歌蕾蒂娅 → 隐现; 乌尔比安 on row 12 faces an empty tile. + // PRTS 盟约记录 阿戈尔 备注 "标记按付与顺序触发【吞噬】效果,目标首次被击倒后解除自身被付与但还未触发的【吞噬】效果". Until 0.1.3 + // the slots belonged to the first 3 by position (浊心斯卡蒂, 乌尔比安, 幽灵鲨: two uneaten members held them, so only 幽灵鲨 + // of the food came back — "没被吃的阿戈尔干员也会占用复活名额", "无论食物链怎么吃最终都只有三名阿戈尔人存活") + const ids = ['chess_char_6_04_a', 'chess_char_2_07_a', 'chess_char_3_09_a', 'chess_char_1_04_a', 'chess_char_4_12_a', 'chess_char_1_01_a']; + const ULPIA = 'chess_char_5_05_a'; for (const kind of ['normal', 'unite']) { const h = makeBattle({ - kind, units: ids.map((chessId, i) => ({ chessId, row: 10, col: 2 + i })), bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, - hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60, + kind, units: [...ids.map((chessId, i) => ({ chessId, row: 10, col: 2 + i })), { chessId: ULPIA, row: 12, col: 3 }], + bonds: { egirShip: bondOn(6, 0, null, [3, 5]) }, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60, }); h.step(1); - const [skadi, ulpia, ghost, hn, deep, fodder] = ids.map((id) => h.unit(id)); - // 浊心斯卡蒂 marks the whole row and resolves first; every later mark is on a unit already knocked out (乌尔比安's), or - // comes from one (幽灵鲨's, 海霓's, 深巡's) + const [skadi, ghost, hn, deep, glady, fodder] = ids.map((id) => h.unit(id)); + const ulpia = h.unit(ULPIA); + // 浊心斯卡蒂 marks the whole row (through the members) and resolves first; every later mark is on a unit knocked out assert.deepEqual(tagged(h, 'bond:egir:devour').map((c) => [c.source.defId, c.target.defId]), - [ulpia, ghost, hn, deep, fodder].map((t) => [skadi.defId, t.defId]), kind); + [ghost, hn, deep, glady, fodder].map((t) => [skadi.defId, t.defId]), kind); + const kos = (u) => h.hooksOf('death').filter((c) => c.unit === u && c.reason === 'killed').length; const revived = (u) => h.hooksOf('deploy').filter((c) => c.unit === u && !c.initial).length; - for (const u of [ghost, hn, deep]) { - assert.equal(h.hooksOf('death').filter((c) => c.unit === u && c.reason === 'killed').length, 1, `${kind}: ${u.defId} knocked out once`); - } - assert.equal(revived(ghost), 1, `${kind}: 幽灵鲨 (third by position) revived at once`); - assert.equal(revived(hn) + revived(deep), 0, `${kind}: 海霓 and 深巡 (fourth, fifth) not revived`); + for (const u of [ghost, hn, deep, glady]) assert.equal(kos(u), 1, `${kind}: ${u.defId} knocked out once`); + for (const u of [ghost, hn, deep]) assert.equal(revived(u), 1, `${kind}: ${u.defId} (knocked out 1st–3rd) revived at once`); + assert.equal(revived(glady), 0, `${kind}: 歌蕾蒂娅 (knocked out 4th) stays down`); + assert.equal(kos(skadi) + kos(ulpia) + revived(skadi) + revived(ulpia), 0, `${kind}: the uneaten members take no slot`); h.run(3); - for (const u of [skadi, ulpia, ghost]) assert.ok(u.alive && u.deployed && u.hp > 0, `${kind}: ${u.defId} standing`); - for (const u of [hn, deep, fodder]) assert.ok(!u.alive, `${kind}: ${u.defId} down`); - // 浊心斯卡蒂 and 乌尔比安 still hold theirs: their first knock-out in the fight is revived, 幽灵鲨's second is final - for (const u of [skadi, ulpia]) { + const members = [skadi, ghost, hn, deep, glady, ulpia]; + assert.deepEqual(members.filter((u) => u.alive).map((u) => u.defId), [skadi, ghost, hn, deep, ulpia].map((u) => u.defId), + `${kind}: survivors = the 2 uneaten + 3`); + assert.ok(!fodder.alive, `${kind}: the fodder (no member) is down`); + // nothing is left for the fight: 浊心斯卡蒂's first knock-out and 幽灵鲨's second stay down + for (const u of [skadi, ghost]) { h.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); - assert.ok(u.alive && revived(u) === 1, `${kind}: ${u.defId} revived in the fight`); + assert.ok(!u.alive, `${kind}: ${u.defId} stays down`); } - h.b.dealDamage(null, ghost, { amount: 1e9, type: 'true' }); - assert.ok(!ghost.alive, `${kind}: 幽灵鲨 has no revive left`); checkInvariants(h.b); } }); -test('阿戈尔 5 beneficiaries: fixed at battle start — a 联防 member entering down keeps the slot, a 调和 member is one, the mirrored boss side counts from its own left', () => { +test('阿戈尔 5: a member devoured by several 阿戈尔 spends one slot at most — its pending marks are cancelled once it is knocked out', () => { + // A (10,3) → B (10,4) → X (10,5) and C (11,5, facing DOWN) → X: three marks on X; D (12,8) faces an empty tile + const list = [['A_a', ['egirShip']], ['B_a', ['egirShip']], ['X_a', ['egirShip']], ['C_a', ['egirShip']], ['D_a', ['egirShip']]]; + const defs = defsOf(list.map(([id, b]) => [id, b, { stats: { maxHp: 3000 } }])); + const units = [ + { chessId: 'A_a', row: 10, col: 3 }, { chessId: 'B_a', row: 10, col: 4 }, { chessId: 'X_a', row: 10, col: 5 }, + { chessId: 'C_a', row: 11, col: 5, dir: 'DOWN' }, { chessId: 'D_a', row: 12, col: 8 }, + ]; + const h = makeBattle({ defs, units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60 }); + h.step(1); + const [a, b, x, c, d] = ['A_a', 'B_a', 'X_a', 'C_a', 'D_a'].map((id) => h.unit(id)); + const kos = (u) => h.hooksOf('death').filter((e) => e.unit === u && e.reason === 'killed').length; + const revived = (u) => h.hooksOf('deploy').filter((e) => e.unit === u && !e.initial).length; + // marked by A (through B), by B and by C; A's mark knocks it out, B's and C's are cancelled + assert.deepEqual(tagged(h, 'bond:egir:devour').map((e) => [e.source.defId, e.target.defId]), [['A_a', 'B_a'], ['A_a', 'X_a']]); + for (const u of [b, x]) assert.ok(u.alive && kos(u) === 1 && revived(u) === 1, `${u.defId}: one knock-out, one slot`); + close(x.hp, x.s.maxHp, 1e-6, 'X at full HP: no second mark'); + // two slots used: D's first knock-out takes the third, C's stays down + h.b.dealDamage(null, d, { amount: 1e9, type: 'true' }); + assert.ok(d.alive, 'D: the third slot'); + h.b.dealDamage(null, c, { amount: 1e9, type: 'true' }); + assert.ok(!c.alive, 'C: none left'); + assert.ok(a.alive && kos(a) === 0, 'A never knocked out'); + checkInvariants(h.b); + // X with more HP survives A's and B's marks and falls to C's: still one knock-out, one slot + const tough = defsOf(list.map(([id, bd]) => [id, bd, { stats: { maxHp: id === 'X_a' ? 8000 : 3000 } }])); + const t = makeBattle({ defs: tough, units, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, autoFinish: false, timeLimit: 60 }); + t.step(1); + const tx = t.unit('X_a'); + assert.deepEqual(tagged(t, 'bond:egir:devour').map((e) => [e.source.defId, e.target.defId]), [['A_a', 'B_a'], ['A_a', 'X_a'], ['B_a', 'X_a'], ['C_a', 'X_a']]); + assert.equal(t.hooksOf('death').filter((e) => e.unit === tx && e.reason === 'killed').length, 1, 'X knocked out once, by the third mark'); + assert.ok(tx.alive && t.eventsOf('fx').filter((e) => e[1] === 'revive').length === 2, 'B and X: two slots'); + checkInvariants(t.b); +}); + +test('阿戈尔 5: an operator\'s own save uses no slot (斯卡蒂\'s DRE-Y, M3茧甲, 埃芒加德 [ASSUMED for the band]); the slot waits for its first real knock-out', () => { + // 斯卡蒂 (elite, module DRE-Y by default) enters 联防 at half HP in front of 乌尔比安: his mark is lethal, DRE-Y saves her + // (PRTS: once per deployment, full HP with max HP −60 %) — no knock-out, so no slot + const SKADI = 'chess_char_3_05_b', ULPIA = 'chess_char_5_05_a', GHOST = 'chess_char_2_07_a', HN = 'chess_char_3_09_a', DEEP = 'chess_char_1_04_a'; + const h = makeBattle({ + kind: 'unite', autoFinish: false, timeLimit: 60, hooks: ['damaged', 'death', 'deploy'], captureNoisy: true, + units: [ + { chessId: ULPIA, row: 10, col: 3 }, { chessId: SKADI, row: 10, col: 4, dir: 'UP', carryState: { hpPct: 0.5 } }, + { chessId: GHOST, row: 12, col: 3 }, { chessId: HN, row: 12, col: 5 }, { chessId: DEEP, row: 12, col: 7 }, + ], + bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, + }); + h.step(1); + const sk = h.unit(SKADI); + assert.deepEqual(tagged(h, 'bond:egir:devour').map((c) => [c.source.defId, c.target.defId]), [[ULPIA, SKADI]]); + assert.ok(sk.alive && buffOf(sk, 'trait:skadi_tide'), 'saved by her module'); + assert.equal(h.hooksOf('death').filter((c) => c.unit === sk).length, 0, 'not knocked out'); + assert.equal(h.eventsOf('fx').filter((x) => x[1] === 'revive' && x[4] && x[4].n).length, 0, 'no 阿戈尔 revive'); + const kill = (id) => { const u = h.unit(id); h.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); return u.alive; }; + // all 3 slots are still there: 幽灵鲨, 海霓 and then 斯卡蒂 (DRE-Y spent in this deployment) come back, 深巡 does not + assert.deepEqual([GHOST, HN, SKADI, DEEP].map(kill), [true, true, true, false]); + checkInvariants(h.b); + + const list = [['g0_a', ['egirShip']], ['g1_a', ['egirShip']], ['g2_a', ['egirShip']], ['g3_a', ['egirShip']], ['g4_a', ['egirShip']]]; + const units = (it = {}) => list.map(([chessId], i) => ({ chessId, row: 9 + (i % 2) * 3, col: 3 + i, items: it[i] })); + const killed = (b, id) => { const u = b.unit(id); b.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); return u; }; + // M3茧甲 (an item 复活, in place): g0 is saved, the 3 slots go to g1, g2, g3; g4 stays down + const hi = makeBattle({ defs: defsOf(list), autoFinish: false, timeLimit: 60, hooks: ['death', 'deploy'], units: units({ 0: ['chess_item_4_12_e_a'] }), bonds: { egirShip: bondOn(5, 0, null, [3, 5]) } }); + hi.step(1); + const g0 = killed(hi, 'g0_a'); + assert.ok(g0.alive && hi.hooksOf('death').filter((c) => c.unit === g0).length === 0, 'item: saved in place (no knock-out)'); + assert.deepEqual(['g1_a', 'g2_a', 'g3_a', 'g4_a'].map((id) => killed(hi, id).alive), [true, true, true, false], 'item: three slots left after the save'); + checkInvariants(hi.b); + // 埃芒加德 (命结之秘: the battle's first 3 knock-downs revive in place — its own count, unchanged): g0, g1, g2 saved by it; + // the 阿戈尔 slots then go to g3, g4 and g0's first real knock-out; g1's real one finds none + const hb = makeBattle({ defs: defsOf(list), autoFinish: false, timeLimit: 60, hooks: ['death', 'deploy'], units: units(), bandId: 'band_ermengard', bonds: { egirShip: bondOn(5, 0, null, [3, 5]) } }); + hb.step(1); + for (const id of ['g0_a', 'g1_a', 'g2_a']) { + const u = killed(hb, id); + assert.ok(u.alive && hb.hooksOf('death').filter((c) => c.unit === u).length === 0, `band: ${id} saved in place`); + } + assert.deepEqual(hb.eventsOf('fx').filter((x) => x[1] === 'revive' && x[4] && x[4].left != null).map((x) => x[4].left), [2, 1, 0], '埃芒加德 spent its 3'); + assert.deepEqual(['g3_a', 'g4_a', 'g0_a', 'g1_a'].map((id) => killed(hb, id).alive), [true, true, true, false], 'band: the 阿戈尔 slots are untouched'); + checkInvariants(hb.b); +}); + +test('阿戈尔 5 slots in 联防 and on the boss field: a member entering down takes none until it is knocked out after standing up; a 调和 member takes one; a mirrored player counts its own knock-outs', () => { const list = [['g0_a', ['egirShip']], ['g1_a', ['egirShip']], ['g2_a', ['egirShip']], ['g3_a', ['egirShip']], ['g4_a', ['egirShip']], ['mani_a', ['maniShip']]]; // five members in five columns (one per column, nobody in front of anybody): g0 col 3 … g4 col 7 const units = list.slice(0, 5).map(([chessId], i) => ({ chessId, row: 9 + (i % 2) * 3, col: 3 + i })); @@ -470,8 +553,8 @@ test('阿戈尔 5 beneficiaries: fixed at battle start — a 联防 member enter h.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); return u.alive; }; - // 联防: g0 entered down (forced out before battleStart). The slots stay the first 3 by position — g0, g1, g2. - // The forced exit is not a 击倒, so g0's charge waits until they stand back up. g3 is not promoted into it. + // 联防: g0 entered down (forced out before battleStart — not a 击倒, so no slot); g4 and g3 take two slots, g0's first + // knock-out after it stands back up takes the third, g1 finds none const hu = makeBattle({ kind: 'unite', defs: defsOf(list), autoFinish: false, timeLimit: 60, bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, units: units.map((u, i) => (i === 0 ? { ...u, carryState: { down: true } } : u)), @@ -479,59 +562,30 @@ test('阿戈尔 5 beneficiaries: fixed at battle start — a 联防 member enter hu.step(1); const g0 = hu.unit('g0_a'); assert.ok(!g0.alive, 'g0 forced out'); - assert.deepEqual(['g4_a', 'g3_a', 'g1_a', 'g2_a'].map((id) => revives(hu, id)), [false, false, true, true]); + assert.deepEqual(['g4_a', 'g3_a'].map((id) => revives(hu, id)), [true, true]); assert.ok(hu.runUntil(() => g0.alive && g0.deployed, 25), 'g0 stands back up inside the redeploy time'); - assert.equal(revives(hu, 'g0_a'), true, 'g0 still held the first slot'); - hu.b.dealDamage(null, g0, { amount: 1e9, type: 'true' }); - assert.ok(!g0.alive, 'g0 has no second revive'); + assert.equal(revives(hu, 'g0_a'), true, 'g0: its first knock-out takes the third slot'); + assert.equal(revives(hu, 'g1_a'), false, 'g1: none left'); checkInvariants(hu.b); - // 调和 (an active 调和 member enjoys the core bonds) in the first column: one of the 3 + // 调和 (an active 调和 member enjoys the core bonds): knocked out first, it takes the first slot const hm = makeBattle({ defs: defsOf(list), autoFinish: false, timeLimit: 60, units: [{ chessId: 'mani_a', row: 11, col: 2 }, ...units.slice(0, 4)], bonds: { egirShip: bondOn(5, 0, null, [3, 5]), maniShip: { count: 1, active: true, tier: 1, layers: 0 } }, }); hm.step(1); - assert.deepEqual(['g2_a', 'mani_a', 'g0_a', 'g1_a'].map((id) => revives(hm, id)), [false, true, true, true]); - // the right-hand boss player (mirrored): its board's left is the field's right — board cols 3, 4, 5 = field cols 17, - // 16, 15 hold the revives (read in field columns from the left they would go to g4, g3, g2) + assert.deepEqual(['mani_a', 'g3_a', 'g2_a', 'g0_a'].map((id) => revives(hm, id)), [true, true, true, false]); + // the right-hand boss player (mirrored): the order of its own knock-outs, wherever they stand const hb = makeBattle({ kind: 'boss', defs: defsOf(list), autoFinish: false, timeLimit: 60, players: [{ playerId: 'R1', side: 'R', colOffset: 8, units: units.map((u, i) => ({ ...u, uid: i + 1 })), bonds: { egirShip: bondOn(5, 0, null, [3, 5]) } }], }); hb.step(1); assert.deepEqual(['g4_a', 'g3_a', 'g0_a', 'g1_a', 'g2_a'].map((id) => [hb.unit(id).tileC, revives(hb, id)]), - [[13, false], [14, false], [17, true], [16, true], [15, true]]); + [[13, true], [14, true], [17, true], [16, false], [15, false]]); checkInvariants(hb.b); }); -test('阿戈尔 5: a beneficiary 埃芒加德 or M3茧甲 save in place has used its 阿戈尔 revive [ASSUMED]; the others keep theirs', () => { - const list = [['g0_a', ['egirShip']], ['g1_a', ['egirShip']], ['g2_a', ['egirShip']], ['g3_a', ['egirShip']], ['g4_a', ['egirShip']]]; - const units = (it = {}) => list.map(([chessId], i) => ({ chessId, row: 9 + (i % 2) * 3, col: 3 + i, items: it[i] })); - const kill = (h, id) => { const u = h.unit(id); h.b.dealDamage(null, u, { amount: 1e9, type: 'true' }); return u; }; - for (const how of ['band', 'item']) { - const h = makeBattle({ - defs: defsOf(list), autoFinish: false, timeLimit: 60, hooks: ['death', 'deploy'], - units: units(how === 'item' ? { 0: ['chess_item_4_12_e_a'] } : {}), ...(how === 'band' ? { bandId: 'band_ermengard' } : {}), - bonds: { egirShip: bondOn(5, 0, null, [3, 5]) }, - }); - h.step(1); - // g0, g1, g2 (columns 3–5) hold the 阿戈尔 revives; g0 is saved in place first - const g0 = kill(h, 'g0_a'); - assert.ok(g0.alive && h.hooksOf('death').filter((c) => c.unit === g0).length === 0, `${how}: saved in place (no knock-out)`); - // 埃芒加德 saves the battle's first 3 knock-downs: its other 2 go to g3 and g4 (no 阿戈尔 beneficiaries) - if (how === 'band') for (const id of ['g3_a', 'g4_a']) assert.ok(kill(h, id).alive, 'band revive'); - kill(h, 'g0_a'); - assert.ok(!g0.alive, `${how}: its 阿戈尔 revive went with the save — its first knock-out is final`); - assert.equal(h.hooksOf('deploy').filter((c) => c.unit === g0 && !c.initial).length, 0); - for (const id of ['g1_a', 'g2_a']) { - const u = kill(h, id); - assert.ok(u.alive && h.hooksOf('deploy').filter((c) => c.unit === u && !c.initial).length === 1, `${how}: ${id} revived by 阿戈尔`); - } - checkInvariants(h.b); - } -}); - test('阿戈尔 devour, a unit back during the pass: a marker revived by the 5-tier revive still gives its marks; a target revived in place (埃芒加德) or redeployed (不屈) takes none', () => { // g1 (10,3) → g2 (10,4, 3000 × 1.35 HP: knocked out by g1's mark, revived) → g3 (10,5) → fodder (10,6); g4 / g5 face empty tiles const list = [ From 8a2e0c7e7fb15abd22ebca9c3649dc5be73340ab Mon Sep 17 00:00:00 2001 From: sganggs Date: Mon, 5 Oct 2026 23:34:33 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feedback4:=20=E8=81=94=E9=98=B2=20=E9=98=BF?= =?UTF-8?q?=E6=88=88=E5=B0=94=20devours=20the=20operator=20in=20front=20wh?= =?UTF-8?q?oever=20owns=20it,=20a=20teammate's=20standing=20or=20down=20op?= =?UTF-8?q?erator=20too?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The owner's decision of 2026-10-05 (GitHub #140 comment 4, #105): PRTS 「战斗开始时依次吞噬身前一格干员」 has no own-side limit. The devour's front-tile lookup took only the player's own operators. - devour opAt: the operator on the front tile whoever owns it — a living one, else one lying there since the 联防 start (carry.down, forced out). The marker gains its base ATK and block count exactly as in a solo battle; a mark on a standing teammate's operator resolves (5000 物理流失 less DEF, credited to the marker, the knock-out is its owner's: their revive slots), a mark on a down one resolves nothing (it stays forced out, §19.3 kept). - The chain goes on through a marked 阿戈尔 by S.isMember: for own operators exactly the members, as before; a teammate's by its own bonds ([ASSUMED]). - 联防 still adds no layers (layerGainsEnabled false, unchanged). - On the current maps the two 联防 helpers stand on board cols 3-9 and 11-17 with the road column 10 between them, so a teammate's operator is never in front at the battle start; the tests place one on col 10. The own-board case (food down since the own combat) is verified through unite.js's real carry: 联防 gives exactly the own combat's atkFlat / blockCnt. - research 02 §3.6 and its JSON spec; data/bonds.json regenerated offline (only egirShip.spec.assumed[1] changed). - Tests: test/content/feedback4-egir-unite.test.js (teammate's living and down operator, solo parity of ATK / block / 物理流失, no layers, the chain through a teammate's 阿戈尔 and her owner's 5-tier slot, the own-board case through uniteBattleOpts). The teammate cases fail on the previous code. Golden: no scenario moved (no corpus field puts a teammate's operator in front of an 阿戈尔). --- data/bonds.json | 2 +- docs/research/02-bonds.json | 2 +- docs/research/02-bonds.md | 2 +- server/sim/content/bonds/core.js | 16 ++- test/content/feedback4-egir-unite.test.js | 142 ++++++++++++++++++++++ 5 files changed, 156 insertions(+), 8 deletions(-) create mode 100644 test/content/feedback4-egir-unite.test.js diff --git a/data/bonds.json b/data/bonds.json index 7e698ee7..4921cee5 100644 --- a/data/bonds.json +++ b/data/bonds.json @@ -1 +1 @@ -{"yanShip":{"bondId":"yanShip","name":"炎","identifier":1,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["yan","sui","lungmen","lee","lgd"],"iconId":"icon_yanShip","activeCount":3,"thresholds":[3,6,9],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【炎】干员攻击力提升(受层数影响)\n<在场6名不同【炎】干员>战斗开始时召唤可自主行动的“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场9名不同【炎】干员>改为召唤2只“炎佑”,攻击力提升至1.5倍,受到的伤害-90%","descRaw":"【炎】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【炎】干员>战斗开始时召唤可自主行动的<@ba.vup>“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用<@ba.vup>“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场<@autochess.dgreen>9名不同【炎】干员>改为召唤2只<@ba.vup>“炎佑”,攻击力提升至<@ba.vup>1.5倍,受到的伤害<@ba.vup>-90%","effectId":"bondeffect_yan","effectName":"炎","effectDesc":"【炎】干员攻击力+{0:0%}(受层数影响)\n<在场6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%攻击力的灼燃损伤,周围敌人受到20%的元素脆弱,周期性使用“祛恶之焰”\n<在场9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescRaw":"【炎】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%<@ba.vup>攻击力的<@ba.vup>灼燃损伤,周围敌人受到20%的<@ba.vup>元素脆弱,周期性使用“祛恶之焰”\n<在场<@ba.vup>9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_15_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"visibleMembers":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"spec":{"tiers":[{"need":"3 distinct 炎 on board","effect":"炎 members (+调和 members) ATK x(1 + 0.23 + 0.009*L)."},{"need":"6 distinct","effect":"At battle start spawn 1 \"炎佑\" (enemy_9012_acloon template, allied flying ranged unit, not blockable, moves on its own). ATK = 0.30 x sum(ATK of 炎 operators on board at battle start), maxHP = 0.30 x sum(maxHP of those operators). Template: DEF 200, RES 0, BAT 2.5 s, ASPD 100, attack range radius 2.0 tiles, magic damage, hits up to 3 targets; every hit adds 灼燃损伤 (burn elemental damage) = 20% of its ATK and applies 元素脆弱 (elemental damage taken x1.2) to enemies within 0.8 tiles of the target. Skill \"祛恶之焰\": cooldown 15 s (first cast 15 s after spawn), channels a flame on one enemy in range dealing 60% ATK magic damage per second to it and to enemies within 1.0 tile, for up to 20 s."},{"need":"9 distinct","effect":"Spawn 2 炎佑 instead; each has ATK x1.5 and takes 90% less damage (damage_resistance 0.9)."}],"formulas":{"atkMultiplier":"1 + 0.23 + 0.009*L"},"caps":"none","layerGain":"Economy-driven: 惊蛰 获得时 +shop level (no activation needed); 小满 休整期结束 +1 per operator gained this round; 夕 +2 炎/奥术 per operator gained; 录武官 获得时 +6 炎 +3 奇迹; 星熊 获得时 +8 own bonds; 烛煌 获得时 +5 炎/维多利亚; 机变 \"诗怀雅的盟誓\" +10. Strategy 杜遥夜: first 2 manual refreshes each round prefer a 炎 operator.","howToPlay":"Buy many operators each round (every gain feeds 小满/夕), rush 6 炎 for the 炎佑 spike; 琳琅诗怀雅 / 诗怀雅 give early gold. 9 炎 is a late-game luxury.","assumed":["炎佑 base stats are replaced (not added) by the 30% sums","祛恶之焰 hit_duration=20 read as 20 one-second ticks","spawn point: centre of the player's board / near the objective","targets = 3 nearest enemies in range"]}},"sargonShip":{"bondId":"sargonShip","name":"萨尔贡","identifier":2,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["sargon"],"iconId":"icon_sargonShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度提升(有上限),持续一定时间(受层数影响,每层持续时间独立计算)\n<在场6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的攻击力(有上限)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","descRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员<@ba.vup>攻击速度提升(有上限),持续一定时间<@autochess.gray>(受层数影响,每层持续时间独立计算)\n<在场<@autochess.dgreen>6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的<@ba.vup>攻击力(有上限)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectId":"bondeffect_sargon","effectName":"萨尔贡","effectDesc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多+300),持续{0:0}秒(受层数影响)\n<在场6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多+300%)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多<@ba.vup>+300),持续<@ba.vup>{0:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多<@ba.vup>+300%)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescParams":[{"index":0,"format":"0","base":"base_time","perStack":"time_per_stack"}],"bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant","valid_in_band":"band_narant"},"buffs":[{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant"}},{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act2autochess_bond_eff_sargon[share]","valid_in_band":"band_narant"}}],"baseParams":["base_time"],"perStackParams":["time_per_stack"],"members":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_05_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_5_18_a","chess_char_6_05_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_6_05_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Whenever any 萨尔贡 member activates its skill, every 萨尔贡 member on the field gains one stack: ASPD +12 for (5 + 0.22*L) s. Each stack has its own timer; at most 25 concurrent stacks (=> +300 ASPD cap)."},{"need":"6 distinct","effect":"Each stack additionally gives ATK +12% (25 stacks => +300% cap), same duration."},{"need":"6 distinct AND strategy 娜仁图亚 (band_narant)","effect":"Replaces the 6-member effect: when a 萨尔贡 member activates its skill, operators on its 8 surrounding tiles also enjoy the effects of the equipment (tier <= V, filter_item_level 5) it carries, for 60 s (base_power_time 60, power_time_per_stack 0)."}],"formulas":{"stackDurationSec":"5 + 0.22*L","aspdPerStack":"12","atkPerStack(6)":"0.12","maxStacks":"25"},"caps":"25 stacks: +300 ASPD, +300% ATK","layerGain":"In battle on skill activation: 菲莱 +6 每次开技能, 百炼嘉维尔 +9 每次开技能, 莎草 +5 首次开技能, 缇缇 +1 萨尔贡/精准 per sleep/stun in range (<=24/battle); 艾丝黛尔 获得时 +2; 机变 \"缇缇的盟誓\" +10. Strategy 佩佩: after shop level 2/4/6 one special refresh preferring 萨尔贡.","howToPlay":"Fast-cycling skills (萨尔贡浓茶 / 黄沙罗盘 items) keep many stacks alive; L mainly extends duration, so stacks overlap more.","notes":["PRTS: the in-level UI shows twice the real duration (display bug); real duration is 5+0.22L."],"assumed":["When a 26th stack would be added, it replaces the stack with the shortest remaining time","stack granted to all 萨尔贡 members including the caster"]}},"victoriaShip":{"bondId":"victoriaShip","name":"维多利亚","identifier":3,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["victoria","glasgow"],"iconId":"icon_victoriaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":25,"mode":"every","effect":"bond_layer_added_reward_equip"}],"desc":"携带装备的【维多利亚】干员造成的伤害提升(受层数影响)\n<每叠加25层>获得1件带有随机效果的维式重锤\n<在场6名不同【维多利亚】干员>携带装备的【维多利亚】干员攻击力提升,携带进阶装备时额外提升","descRaw":"携带装备的【维多利亚】干员造成的<@ba.vup>伤害提升<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>25层>获得1件带有随机效果的<@ba.vup>维式重锤\n<在场<@autochess.dgreen>6名不同【维多利亚】干员>携带装备的【维多利亚】干员<@ba.vup>攻击力提升,携带进阶装备时额外提升","effectId":"bondeffect_victoria","effectName":"维多利亚","effectDesc":"携带装备的【维多利亚】干员伤害提升至{0:0%}(受层数影响)\n<每叠加25层>获得一件带有随机特殊效果的维式重锤\n<在场6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力+50%,携带进阶装备改为+80%","effectDescRaw":"<@ba.vup>携带装备的【维多利亚】干员伤害提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<每叠加<@ba.vup>25层>获得一件带有随机特殊效果的维式重锤\n<在场<@ba.vup>6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力<@ba.vup>+50%,携带进阶装备改为<@ba.vup>+80%","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale","perStack":"damage_scale_per_stack"}],"bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3,"layer":25,"count":1},"bbStr":{"key":"act1autochess_bond_eff_victoria","pool":"pool_equip_vict"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3},"bbStr":{"key":"act1autochess_bond_eff_victoria"}},{"key":"bond_layer_added_reward_equip","bb":{"layer":25,"count":1},"bbStr":{"pool":"pool_equip_vict"}}],"baseParams":["base_damage_scale"],"perStackParams":["damage_scale_per_stack"],"members":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"visibleMembers":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"维多利亚 members that carry >= 1 equipment: all damage dealt x(1.25 + 0.008*L)."},{"need":"every 25 layers (cumulative)","effect":"Gain 1 维式重锤 with a random special effect (pool_equip_vict)."},{"need":"6 distinct","effect":"维多利亚 members: ATK +50% per equipped item; an advanced (进阶/golden) item gives +80% instead (atk_normal_equip 0.5 + atk_golden_equip 0.3)."}],"formulas":{"damageMultiplier":"1.25 + 0.008*L (only if carrying equipment)","hammerPayouts":"floor(L/25)","atkPerItem(6)":"0.5 normal, 0.8 advanced"},"caps":"none","layerGain":"休整期结束: 薄绿 +2 per distinct tier of 维多利亚 on board, 维娜·维多利亚 +3 per distinct tier (and 奇迹 +2 per distinct tier of 奇迹), 刺玫 +1, 号角 +2 per distinct-tier operator of the highest-layer bond; in battle: 风笛 first 3 kills +2 维多利亚/远见/不屈; 烛煌 获得时 +5; 机变 \"风笛的盟誓\" +8. Strategy 哈洛德: from round 4 gain 1 维多利亚 operator every 2 rounds.","howToPlay":"Field 维多利亚 of as many different tiers as possible (T1..T6) for 薄绿/维娜; hand all equipment (incl. free hammers) to 维多利亚 carries; 蒸汽之心 copies all hammer effects.","assumed":["pool_equip_vict = uniform random among 灼燃/坚固/加速/战栗维式重锤 (normal grade)","hammer payout also counts layers added while the bond is inactive"]}},"kjeragShip":{"bondId":"kjeragShip","name":"谢拉格","identifier":4,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kjerag","karlan"],"iconId":"icon_kjeragShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【谢拉格】干员造成的伤害提升,对寒冷、冻结敌人获得额外提升(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间(受层数影响)","descRaw":"【谢拉格】干员造成的<@ba.vup>伤害提升,对<@ba.vup>寒冷、冻结敌人获得额外提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间<@autochess.gray>(受层数影响)","effectId":"bondeffect_kjerag","effectName":"谢拉格","effectDesc":"【谢拉格】干员伤害提升至125%,对寒冷和冻结敌人额外提升至{0:0%}(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷{1:0}秒(受层数影响)","effectDescRaw":"【谢拉格】干员伤害提升至<@ba.vup>125%,对寒冷和冻结敌人额外提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_ex_damage_scale","perStack":"ex_damage_scale_per_stack"},{"index":1,"format":"0","base":"bond_eff_kjerag[storm].base_time","perStack":"bond_eff_kjerag[storm].time_per_stack"}],"bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"},"buffs":[{"key":"env_gbuff_new","bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"}}],"baseParams":["base_ex_damage_scale","bond_eff_kjerag[storm].base_time"],"perStackParams":["ex_damage_scale_per_stack","bond_eff_kjerag[storm].time_per_stack"],"members":["chess_char_1_02_a","chess_char_2_03_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_02_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"谢拉格 members deal damage x1.25; against enemies that are 寒冷 (cold) or 冻结 (frozen) x(1.35 + 0.01*L) instead."},{"need":"6 distinct","effect":"Every 25 s a cold wind applies 寒冷 to every enemy on the field for (20 + 0.1*L) s."}],"formulas":{"damageMultiplier":"1.25","damageMultiplierVsColdOrFrozen":"1.35 + 0.01*L","windIntervalSec":"25","windColdDurationSec":"20 + 0.1*L"},"caps":"none","layerGain":"In battle, freeze-driven: 初雪 and 银灰 - each enemy in range that becomes frozen: 50% chance +1; 凛御银灰 gives the 谢拉格 operator in front of it a 60% version (<=200/battle); 锏 部署时 +8 own active bonds (<=24/battle). 获得时: 角峰 +2, 崖心 +3 (hidden), 雪猎 +5, 灵知 +5, 锏 +8. 机变 \"银灰的盟誓\" +8. Strategy 休露丝: first 谢拉格 bought each round costs 1.","howToPlay":"Standard AK rule: applying 寒冷 to an already-cold enemy freezes it. The 6-member wind + cold-on-hit sources (谢拉格不融冰 12% 1.5 s cold) create constant freezes, so layers can reach hundreds per battle.","notes":["巴哈姆特: avoid lighting 3 奥术 alongside max-layer 谢拉格 (圣聆初雪 gets damage-capped)."],"assumed":["first wind at t = 25 s","wind re-applying cold on a cold enemy triggers freeze like any cold source"]}},"lateranoShip":{"bondId":"lateranoShip","name":"拉特兰","identifier":5,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["laterano"],"iconId":"icon_lateranoShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【拉特兰】干员开启技能获得的弹药量提升(受层数影响)\n<在场6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员攻击力提升(有上限)","descRaw":"【拉特兰】干员开启技能获得的<@ba.vup>弹药量提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员<@ba.vup>攻击力提升(有上限)","effectId":"bondeffect_laterano","effectName":"拉特兰","effectDesc":"【拉特兰】干员开启技能时获得的弹药量+{0:0%}(受层数影响)\n<在场6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多+200%","effectDescRaw":"【拉特兰】干员开启技能时获得的弹药量<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多<@ba.vup>+200%","effectDescParams":[{"index":0,"format":"0%","base":"base_ammo_percent","perStack":"ammo_percent_per_stack"}],"bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"},"buffs":[{"key":"env_gbuff_new","bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"}}],"baseParams":["base_ammo_percent"],"perStackParams":["ammo_percent_per_stack"],"members":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_07_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"visibleMembers":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"When a 拉特兰 member activates a skill that grants ammo, ammo gained x(1 + 0.05 + 0.015*L), rounded down."},{"need":"6 distinct","effect":"Every ammo consumed by any 拉特兰 member: all 拉特兰 members ATK +4% (until battle end), max +200% (= 50 ammo)."}],"formulas":{"ammoMultiplier":"floor(baseAmmo * (1.05 + 0.015*L))","atkPerAmmo(6)":"0.04","atkCap(6)":"2.0"},"caps":"+200% ATK from the 6-member effect","layerGain":"Ammo consumption in battle: 圣约送葬人 each 7 bullets +7 拉特兰 (7 triggers => 49/battle) and +3 远见 (<=21/battle); 莫斯提马 ops in its 4 adjacent tiles each 6 ammo +1; 蕾缪安 each 10 bullets with 3 ops in its row +2 拉特兰/精准; 送葬人 first kill +3 精准/拉特兰. Prep: 空弦 进入休整期 +3 to self and front tile operator's active bonds. 机变 \"莫斯提马的盟誓\" +10. Strategy 潘格尼尼: after spending 55 gold gain a random elite T4+ 拉特兰.","howToPlay":"Only ammo-skill operators benefit from the 3-tier; the bond is weak until 6 (巴哈姆特: \"3人效果較差\").","assumed":["non-ammo skills unaffected","\"ammo consumed\" = each shot/bullet decrement"]}},"egirShip":{"bondId":"egirShip","name":"阿戈尔","identifier":6,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["egir","abyssal"],"iconId":"icon_egirShip","activeCount":3,"thresholds":[3,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【阿戈尔】干员生命值提升(受层数影响)\n战斗开始时,【阿戈尔】干员会吞噬身前一格干员对其造成5000点物理伤害并获得其基础攻击力和阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","descRaw":"【阿戈尔】干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n战斗开始时,【阿戈尔】干员会<@ba.vup>吞噬身前一格干员对其造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的<@ba.vup>盟约层数<@autochess.gray>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@autochess.dgreen>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectId":"bondeffect_egir","effectName":"阿戈尔","effectDesc":"【阿戈尔】干员生命值+{0:0%}(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成5000点物理伤害并获得其基础攻击力和阻挡数,并叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","effectDescRaw":"【阿戈尔】干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,并叠加等于被吞噬者等阶的盟约层数<@ba.acrem>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@ba.vup>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"}],"bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"}}],"baseParams":["base_max_hp"],"perStackParams":["max_hp_per_stack"],"members":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"visibleMembers":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"阿戈尔 members maxHP x(1 + 0.35 + 0.01*L)."},{"need":"3 distinct (battle start)","effect":"Devour (吞噬): see algorithm."},{"need":"5 distinct","effect":"The first 3 阿戈尔 members to be knocked out, in knock-out order (the battle-start devour's food included; a member never knocked out takes none), each revive immediately on that first knock-out; a member takes at most one, and a save by its own kit / item / band revive is no knock-out (max_free_respawn_cnt 3; the owner's decision of 2026-10-05)."}],"algorithm":["Order: 阿戈尔 members sorted leftmost first, then topmost (\"更靠左和靠上\").","Each 阿戈尔 in order marks the unit on the tile directly in front of it (its facing direction) and also the front-tile unit of every 阿戈尔 it has marked (chain). It never marks itself, a unit it already marked, or a unit that marked it.","The marker immediately gains the base ATK of every unit it marked (added to base ATK at the final stage) and their block counts.","After all marks are placed, each mark makes its target suffer one 5000-point physical 流失 (HP loss, source = the target itself; if it dies, the kill is credited to the marker), resolved in marking order. A target that dies cancels its remaining pending marks.","Each devoured unit adds layers to 阿戈尔 equal to its tier (1-6), once per unit per battle.","(5-member tier) Revive is implemented as: when the unit leaves the field for any reason other than being moved, its next deployment has 0 redeploy time and 0 cost (PRTS). Devour layers: each devoured unit adds its tier once per battle (refreshes next round)."],"formulas":{"hpMultiplier":"1.35 + 0.01*L","devourDamage":"5000","layersPerDevoured":"tier of devoured unit"},"caps":"3 revives per battle","layerGain":"Devour (tier per devoured unit, every battle); 幽灵鲨 被击倒 +3; 归溟幽灵鲨 被击倒/替身切换 +5 阿戈尔 +5 不屈; 斯卡蒂 each 2 kills +1 阿戈尔/坚守/突袭; 海霓 first kill (enemy or ally) +3 阿戈尔/奥术; 机变 \"斯卡蒂的盟誓\" +8. Strategy 克莱门莎: an 阿戈尔 knocked out adds layers = its tier.","howToPlay":"Put cheap/high-tier fodder in front of 阿戈尔 carries: they steal base ATK and block, gain layers, and (5) revive. Tier-6 fodder gives +6 layers per battle.","assumed":["5000 physical 流失 ignores DEF and shields","marked allied units are the player's own operators (devour hits allies)"]}},"siracusaShip":{"bondId":"siracusaShip","name":"叙拉古","identifier":7,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["siracusa","chiave"],"iconId":"icon_siracusaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【叙拉古】干员部署后攻击速度提升,持续一定时间(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿10秒内对敌人攻击时有3%的概率造成一定真实伤害(受层数影响)并恐惧3秒","descRaw":"【叙拉古】干员部署后<@ba.vup>攻击速度提升,持续一定时间<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿<@ba.vup>10秒内对敌人攻击时有<@ba.vup>3%的概率造成一定真实伤害<@autochess.gray>(受层数影响)并<@ba.vup>恐惧3秒","effectId":"bondeffect_siracusa","effectName":"叙拉古","effectDesc":"【叙拉古】干员部署后攻击速度+{0:0},持续{1:0}秒(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成{2:0}(受层数影响)点真实伤害并恐惧目标3秒","effectDescRaw":"【叙拉古】干员部署后攻击速度<@ba.vup>+{0:0},持续<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成<@ba.vup>{2:0}<@ba.acrem>(受层数影响)点真实伤害并<@ba.vup>恐惧目标3秒","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"},{"index":1,"format":"0","base":"base_duration","perStack":"duration_per_stack"},{"index":2,"format":"0","base":"base_damage","perStack":"damage_per_stack"}],"bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"},"buffs":[{"key":"env_gbuff_new","bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"}}],"baseParams":["base_attack_speed","base_duration","base_damage"],"perStackParams":["attack_speed_per_stack","duration_per_stack","damage_per_stack"],"members":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_15_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"visibleMembers":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"After every deployment (incl. redeploy) a 叙拉古 member gains ASPD +(25 + 0.8*L) for (32 + 0.4*L) s."},{"need":"6 distinct","effect":"After deployment also 隐匿 (camouflage) for the same duration. While camouflaged and for 10 s after it ends, each normal damage instance (普通伤害 = attack type NORMAL: attacks, skill hits, drone attacks; not 溅射 / 持续 / 附加 — `bonds/core.js siracusaRolls`) it deals may add (5000 + 50*L) true damage (source = the operator) and 恐惧 (fear) 3 s. Nominal 3% chance, implemented as pseudo-random: all 叙拉古 members share one counter; attempt n since last proc succeeds with p = 0.00139*n (guaranteed at n = 720); counter resets on proc."}],"formulas":{"aspd":"25 + 0.8*L","durationSec":"32 + 0.4*L","procDamage":"5000 + 50*L","prdStep":"0.00139"},"caps":"none","layerGain":"Shop refresh-driven: 拉普兰德 first manual refresh each round +4 (works from bench); 安洁莉娜 休整期结束 +4 per refresh this round (<=12/round); 阿罗玛 +2 叙拉古/奥术 per refresh (<=6); 伺夜 first 3 kills +2 叙拉古 +1 奇迹; 荒芜拉普兰德 each kill +2 (elite: every 叙拉古 gets this, <=100/battle); 忍冬 获得时 +6 own bonds (x2/x3 with 投资人); 机变 \"德克萨斯的盟誓\" +10. Strategy 贾维: every 6 manual refreshes get a free 叙拉古 (<=2/round).","howToPlay":"Refresh a lot in prep (free refresh sources: 普罗旺斯, 德克萨斯, 缄默德克萨斯, 巫恋) to feed 拉普兰德/安洁莉娜; pair with 投资人 for 忍冬.","notes":["PRTS: the 10 s post-stealth window restarts if the operator's status effects or immunities change."],"assumed":["隐匿 = standard AK camouflage (not targeted by ranged enemies unless blocking)"]}},"kazimierzShip":{"bondId":"kazimierzShip","name":"卡西米尔","identifier":8,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kazimierz","pinus"],"iconId":"icon_kazimierzShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"每次有干员部署时,【卡西米尔】干员攻击力+20%持续至战斗结束(上限受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","descRaw":"每次有干员部署时,【卡西米尔】干员攻击力<@ba.vup>+20%持续至战斗结束<@autochess.gray>(上限受层数影响)\n<在场<@autochess.dgreen>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每<@ba.vup>2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectId":"bondeffect_kazimierz","effectName":"卡西米尔","effectDesc":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多+{0:0%})(受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","effectDescRaw":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多<@ba.vup>+{0:0%})<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectDescParams":[{"index":0,"format":"0%","base":"base_max_atk_when_born","perStack":"max_atk_when_born_per_stack"}],"bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"},"buffs":[{"key":"env_gbuff_new","bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"}}],"baseParams":["base_max_atk_when_born"],"perStackParams":["max_atk_when_born_per_stack"],"members":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Every time any friendly operator is deployed (incl. redeploys) each 卡西米尔 member gains ATK +20% until battle end, capped at +(50 + 1*L)%."},{"need":"6 distinct","effect":"While blocking >= 1 enemy: every 2 s deals 120% ATK true damage to all enemies within radius 0.8 tiles and stuns them 0.1 s. While not blocking: each normal damage instance adds 30% ATK sourceless true damage."}],"formulas":{"atkPerDeploy":"0.20","atkCap":"0.50 + 0.01*L"},"caps":"ATK bonus cap 50%+1%/layer","layerGain":"Deploy-driven in battle: 砾 部署时 +1; 瑕光 部署时 +4 own active bonds (<=12/battle); 远牙 grants the right-most operator in its row \"部署时 +4 卡西米尔/精准 (<=24/battle)\"; 锏 部署时 +8 (<=24); 获得时: 野鬃 +2, 灰毫 +3 to highest-layer bond; 机变 \"玛恩纳的盟誓\" +12. Strategy 玛恩纳: +1 gold next round per 卡西米尔 bought (<=3).","howToPlay":"Maximise deploy events: low redeploy time (助力 -30%, 骑士戒律), operators that die/retreat and come back (砾 + 不屈). 巴哈姆特: do not light 坚守 (damage sharing keeps 砾 alive).","assumed":["initial auto-deployments at battle start also count as deploys","buff applies to members deployed later too (stored globally, capped)"]}},"preciShip":{"bondId":"preciShip","name":"精准","identifier":9,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_preciShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【精准】干员攻击力提升(受层数影响)\n<在场3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的防御力和法术抗性","descRaw":"【精准】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的<@ba.vup>防御力和<@ba.vup>法术抗性","effectId":"bondeffect_preci","effectName":"精准","effectDesc":"【精准】干员攻击力+{0:0%}(受层数影响)\n<在场3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视30%防御力和法术抗性","effectDescRaw":"【精准】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视<@ba.vup>30%防御力和法术抗性","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"visibleMembers":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"精准 members ATK x(1 + 0.10 + 0.012*L)."},{"need":"3 distinct","effect":"Scope becomes 精准 members + every RANGED operator; affected units also ignore 30% of target DEF and 30% of target RES."}],"formulas":{"atkMultiplier":"1.10 + 0.012*L","defPenetrateRatio(3)":"0.3","resPenetrateRatio(3)":"0.3"},"layerGain":"Kill/skill/deploy in battle: 寒芒克洛丝 gives front operator \"开技能 +1 精准 (<=10/battle)\"; 远牙 grant (+4/deploy); 缇缇 +1 per sleep/stun; 蕾缪安, 送葬人; 莱恩哈特 休整期结束 +5 own active bonds; 获得时: 深靛 +2, 雪猎 +5. 机变 \"缇缇的盟誓\" +10.","assumed":["penetration = ratio ignore (like 无视 x% 防御)"]}},"swiftShip":{"bondId":"swiftShip","name":"迅捷","identifier":10,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_swiftShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【迅捷】干员技能结束时有概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","descRaw":"【迅捷】干员技能结束时有概率<@autochess.gray>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@autochess.dgreen>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectId":"bondeffect_swift","effectName":"迅捷","effectDesc":"【迅捷】干员技能结束时有{0:0%}概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","effectDescRaw":"【迅捷】干员技能结束时有<@ba.vup>{0:0%}概率<@ba.acrem>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@ba.vup>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_01_a","chess_char_1_16_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_10_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_01_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a 迅捷 member's skill ends: with p = min(1, 0.20 + 0.0035*L) immediately +12 SP."},{"need":"L >= 40","effect":"Every operator whose skill ends: with the same p, additionally +15 SP."}],"formulas":{"p":"min(1, 0.20 + 0.0035*L)","reaches100%AtL":"229"},"layerGain":"妮芙 休整期结束 +2 per operator on the bench; 蒂比 进入休整期 +2 own active bonds; 莱恩哈特 +5; 引星棘刺 +4 self & front; 获得时: 锡人/野鬃 +2, 忍冬 +6, 锏 +8. 机变 \"银灰的盟誓\" +8.","assumed":["迅捷 members roll both the 12 SP and the 15 SP independently"]}},"skillfulShip":{"bondId":"skillfulShip","name":"灵巧","identifier":11,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_skillfulShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【灵巧】干员及周围4格干员攻击速度提升(受层数影响)\n<达到40层>生效范围变为【灵巧】干员周围8格","descRaw":"【灵巧】干员及周围4格干员<@ba.vup>攻击速度提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>40层>生效范围变为【灵巧】干员周围8格","effectId":"bondeffect_skillful","effectName":"灵巧","effectDesc":"【灵巧】干员及周围4格的干员攻击速度+{0:0}(受层数影响)\n <达到40层>生效范围变为【灵巧】干员周围8格","effectDescRaw":"【灵巧】干员及周围4格的干员攻击速度<@ba.vup>+{0:0}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>40层>生效范围变为【灵巧】干员周围8格","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"}],"bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"}}],"baseParams":["base_attack_speed"],"perStackParams":["attack_speed_per_stack"],"members":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_5_16_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"灵巧 members and operators on their 4 orthogonally adjacent tiles: ASPD +(10 + 1*L)."},{"need":"L >= 40","effect":"Area becomes the 8 surrounding tiles."}],"formulas":{"aspd":"10 + L"},"layerGain":"溯光星源 休整期结束 +2 灵巧/奥术 per 3 gold spent this round ; 断崖 +3 self & behind; 空弦 +3 self & front; 蒂比 +2; 获得时 灵知 +5. (act1 灵巧 also had a 20-layer shop reward; removed in act2.)","assumed":["a unit covered by several 灵巧 auras gets the bonus once"]}},"arcaneShip":{"bondId":"arcaneShip","name":"奥术","identifier":12,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_arcaneShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例提升(受层数影响)","descRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@autochess.gray>(受层数影响),持续3秒\n<在场<@autochess.dgreen>3名不同【奥术】干员>【奥术】干员对生命值低于<@ba.vup>50%的敌人施加的伤害提升比例提升<@autochess.gray>(受层数影响)","effectId":"bondeffect_arcane","effectName":"奥术","effectDesc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升{0:0%}(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为{1:0%}(受层数影响)","effectDescRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@ba.vup>{0:0%}<@ba.acrem>(受层数影响),持续3秒\n<在场<@ba.vup>3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为<@ba.vup>{1:0%}<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale_show","perStack":"damage_scale_per_stack"},{"index":1,"format":"0%","base":"base_damage_scale_show_ex","perStack":"damage_scale_per_stack_show_ex"}],"bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"},"buffs":[{"key":"env_gbuff_new","bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"}}],"baseParams":["base_damage_scale_show","base_damage_scale_show_ex"],"perStackParams":["damage_scale_per_stack","damage_scale_per_stack_show_ex"],"members":["chess_char_1_17_a","chess_char_2_10_a","chess_char_2_15_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_17_a","chess_char_2_10_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When an 奥术 member deals magic damage, the target takes magic damage x(1.20 + 0.01*L) (i.e. +(20+L)%) for 3 s. ONE instance per target whatever applies it: the strongest value wins, a weaker one resumes if it outlasts it; reapplying refreshes (corrected 2026-10-01: PRTS 作战机制 同名buff默认只表现出一个; 巴哈姆特 12316 the two players of a pair field compete for it)."},{"need":"3 distinct","effect":"Against enemies below 50% HP the multiplier is 1.4 x (1.20 + 0.01*L) = 1.68 + 0.014*L (i.e. +(68+1.4L)%)."}],"formulas":{"magicTakenMul":"1.20 + 0.01*L","magicTakenMulLowHp(3)":"1.4*(1.20 + 0.01*L)","hpThreshold":"0.5","durationSec":"3"},"layerGain":"夕 +2 per operator gained; 阿罗玛 +2 per refresh (<=6); 溯光星源 +2 per 3 gold spent; 海霓 first kill +3; 获得时: 深靛 +2, 协律 +4 (hidden). 机变 \"莫斯提马的盟誓\" +10.","assumed":["one instance per target, the strongest (the engine's default same-name rule; the two players of a pair field compete for it) — until v2.5 the remake kept one per player and they multiplied"]}},"steadShip":{"bondId":"steadShip","name":"坚守","identifier":13,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_steadShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员生命值提升(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由所有【坚守】干员平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%脆弱效果","descRaw":"所有干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由所有【坚守】干员<@ba.vup>平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害<@autochess.gray>(受层数影响,每0.2秒至多触发1次)和持续<@ba.vup>5秒的<@ba.vup>40%脆弱效果","effectId":"bondeffect_stead","effectName":"坚守","effectDesc":"所有干员生命值+{0:0%}(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到{1:0}点法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%的脆弱效果","effectDescRaw":"所有干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到<@ba.vup>{1:0}点法术伤害<@ba.acrem>(受层数影响,每0.2秒至多触发1次)和持续5秒的<@ba.vup>40%的脆弱效果","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"},{"index":1,"format":"0","base":"base_damage_value","perStack":"damage_value_per_stack"}],"bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"}}],"baseParams":["base_max_hp","base_damage_value"],"perStackParams":["max_hp_per_stack","damage_value_per_stack"],"members":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"visibleMembers":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators maxHP x(1 + 0.25 + 0.012*L)."},{"need":"3 distinct","effect":"When a non-坚守 operator takes damage, 40% of that damage is taken instead by the 坚守 members, split evenly. When a 坚守 member takes damage, the damage source takes (850 + 10*L) sourceless magic damage and 脆弱 (damage taken x1.4) for 5 s; each 坚守 member can reflect at most once per 0.2 s."}],"formulas":{"hpMultiplier":"1.25 + 0.012*L","redirectRatio":"0.4","thornsDamage":"850 + 10*L","thornsCooldownSec":"0.2","fragile":"1.4 for 5 s"},"layerGain":"折桠 休整期结束 +4; 蛇屠箱 +1 per operator in same row; 斯卡蒂 kills; 获得时 角峰 +2; 机变 \"斯卡蒂的盟誓\" +8.","notes":["PRTS: thorns hit whatever the damage source is; sourceless damage can consume the thorns cooldown."]}},"deputShip":{"bondId":"deputShip","name":"助力","identifier":14,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_deputShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员防御力提升(受层数影响),再部署时间减少\n休整期结束时,使当前所有已激活盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","descRaw":"所有干员<@ba.vup>防御力提升<@autochess.gray>(受层数影响),<@ba.vup>再部署时间减少\n休整期结束时,使当前所有已激活盟约层数<@ba.vup>+2\n<在场<@autochess.dgreen>3名不同【助力】干员>改为层数<@ba.vup>+4","effectId":"bondeffect_deput","effectName":"助力","effectDesc":"所有干员防御力+{0:0%}(受层数影响),再部署时间-30%\n休整期结束时,使当前所有已激活的盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","effectDescRaw":"所有干员防御力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响),再部署时间<@ba.vup>-30%\n休整期结束时,使当前所有已激活的盟约层数<@ba.vup>+2\n<在场<@ba.vup>3名不同【助力】干员>改为层数<@ba.vup>+4","effectDescParams":[{"index":0,"format":"0%","base":"base_def","perStack":"def_per_stack"}],"bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3,"layer":2,"count":3,"more_layer":4},"bbStr":{"key":"act1autochess_bond_eff_deput","bond":"deputShip"},"buffs":[{"key":"env_gbuff_new","bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3},"bbStr":{"key":"act1autochess_bond_eff_deput"}},{"key":"bond_activated_add_layer","bb":{"layer":2,"count":3,"more_layer":4},"bbStr":{"bond":"deputShip"}}],"baseParams":["base_def"],"perStackParams":["def_per_stack"],"members":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_2_15_a","chess_char_3_15_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_05_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_5_16_a","chess_char_6_14_a","chess_char_6_20_a"],"visibleMembers":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_3_20_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_6_14_a","chess_char_6_20_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators DEF x(1 + 0.15 + 0.012*L); redeploy time -30%. At the end of every prep phase (休整期结束时) every currently active bond (incl. 助力) gets +2 layers."},{"need":"3 助力 (distinct name or elite state)","effect":"+4 layers instead of +2."}],"formulas":{"defMultiplier":"1.15 + 0.012*L","redeployTimeMul":"0.7","layersPerRound":"2 (4 at 3 members) to every active bond"},"layerGain":"波登可 +1 / 调香师 +2 to highest-layer bond at prep end (work from bench); 流明 +2 to active bonds of every bench operator; 纯烬艾雅法拉 +3 highest-layer bond per skill; its own +2/+4 per round.","howToPlay":"Cheap universal layer engine: activate as many bonds as possible so each gets +2/+4 every round (helps the hidden-round threshold)."}},"visiShip":{"bondId":"visiShip","name":"远见","identifier":15,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_visiShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":10,"mode":"every","effect":"bond_layer_gain_coin"},{"layer":80,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"},{"layer":150,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"}],"desc":"<每叠加10层>获得一次2资金\n<首次达到80层>所有【远见】干员购买价格永久-1资金\n<首次达到150层>以上效果改为调度中心内所有干员的购买价格永久-1资金(整备区的【远见】干员也可用于激活盟约)","descRaw":"<每叠加<@autochess.dgreen>10层>获得一次<@ba.vup>2资金\n<首次达到<@autochess.dgreen>80层>所有【远见】干员购买价格<@ba.vup>永久-1资金\n<首次达到<@autochess.dgreen>150层>以上效果改为调度中心内所有干员的购买价格<@ba.vup>永久-1资金(整备区的【远见】干员也可用于激活盟约)","effectId":"bondeffect_visi","effectName":"远见","effectDesc":"<每叠加10层>获得一次2资金\n<首次到达80层>所有【远见】干员购买价格永久-1资金\n<首次到达150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescRaw":"<每叠加<@ba.vup>10层>获得一次<@ba.vup>2资金\n<首次到达<@ba.vup>80层>所有【远见】干员购买价格永久-1资金\n<首次到达<@ba.vup>150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":10,"count":2,"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"},"buffs":[{"key":"bond_layer_gain_coin","bb":{"layer":10,"count":2},"bbStr":{}},{"key":"bond_multi_layer_char_goods_price_bond_discount","bb":{"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_11_a","chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"Each time cumulative L passes a multiple of 10: +2 gold."},{"need":"first time L >= 80","effect":"All 远见 operators' shop price permanently -1."},{"need":"first time L >= 150","effect":"Replaces the above: every operator in the shop permanently -1 (overrides, does not stack; 3/27 update)."}],"formulas":{"goldPayouts":"2 * floor(L/10)"},"layerGain":"寒檀 进入/结束休整期 +4 each; 伊内丝 +5 own active bonds; 赫默 +2; 圣约送葬人 +3 per 7 bullets (<=21/battle); 风笛 kills +2; 机变 \"风笛的盟誓\" +8.","assumed":["no floor but 0 (owner's decision 2026-10-04; a floor of 1 was assumed until 0.1.3)"]}},"miraShip":{"bondId":"miraShip","name":"奇迹","identifier":16,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_miraShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"every","effect":"bond_layer_gain_coin"}],"desc":"刷新调度中心时,有概率使下次刷新不消耗资金(受层数影响)\n<每叠加100层>获得20资金(整备区的【奇迹】干员也可用于激活盟约)","descRaw":"刷新调度中心时,有概率使下次刷新<@ba.vup>不消耗资金<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>100层>获得<@ba.vup>20资金(整备区的【奇迹】干员也可用于激活盟约)","effectId":"bondeffect_mira","effectName":"奇迹","effectDesc":"刷新调度中心时,有{0:0%}(受层数影响)概率使下次刷新不消耗资金\n<每叠加100层>获得20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescRaw":"刷新调度中心时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率使下次刷新不消耗资金\n<每叠加<@ba.vup>100层>获得<@ba.vup>20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescParams":[{"index":0,"format":"0%","base":"baseprob","perStack":"prob"}],"bb":{"probk":0.3,"prob":0.003,"baseprob":0.18,"layer":100,"count":20},"bbStr":{},"buffs":[{"key":"bond_refresh_shop_next_free","bb":{"probk":0.3,"prob":0.003,"baseprob":0.18},"bbStr":{}},{"key":"bond_layer_gain_coin","bb":{"layer":100,"count":20},"bbStr":{}}],"baseParams":["baseprob"],"perStackParams":["prob"],"members":["chess_char_1_11_a","chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_15_a","chess_char_4_26_a","chess_char_5_04_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"visibleMembers":["chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_26_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"After each shop refresh, if the player has 0 free refreshes: with p = 0.18 + 0.003*L gain 1 free refresh."},{"need":"every 100 layers","effect":"+20 gold."}],"formulas":{"p":"min(1, 0.18 + 0.003*L)","goldPayouts":"20 * floor(L/100)"},"layerGain":"维娜·维多利亚 +2 per distinct-tier 奇迹; 录武官 获得时 +3; 伺夜 kills +1; 引星棘刺 +4 self & front; 华法琳 (奇迹 member) gives the operator in front \"开技能时 +1 own active bonds\" (data: <=7/battle, elite +2 <=14; PRTS 3/27 patch note says cap raised to 12/24).","notes":["blackboard probk = 0.3: meaning unknown (not in any description) [UNKNOWN]."]}},"investShip":{"bondId":"investShip","name":"投资人","identifier":17,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_investShip","activeCount":3,"thresholds":[3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"reach","effect":"bond_layer_char_garrison_bonus"}],"desc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次(整备区的【投资人】干员也可用于激活盟约)","descRaw":"干员的“获得时”类特质每次<@ba.vup>触发2次\n<达到<@autochess.dgreen>100层>“获得时”类特质每次<@ba.vup>触发3次(整备区的【投资人】干员也可用于激活盟约)","effectId":"bondeffect_invest","effectName":"投资人","effectDesc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescRaw":"干员的“获得时”类特质每次触发2次\n<达到<@ba.vup>100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"},"buffs":[{"key":"bond_layer_char_garrison_bonus","bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"}},{"key":"bond_layer_char_garrison_bonus","bb":{"layer":100,"count":3},"bbStr":{"event":"SERVER_GAIN"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_16_a","chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"visibleMembers":["chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"spec":{"tiers":[{"need":"3 distinct (board + bench)","effect":"Every \"获得时\" (SERVER_GAIN) trait of every operator triggers 2 times."},{"need":"L >= 100","effect":"Triggers 3 times."}],"formulas":{"gainTraitRepeat":"2 if L < 100 else 3"},"layerGain":"山 休整期结束 +1 per operator gained this round; 机变 \"诗怀雅的盟誓\" +10, \"银灰的盟誓\" +8; generic sources.","howToPlay":"Pair with high \"获得时 +N 自身所属盟约\" operators (忍冬 +6, 锏 +8, 星熊 +8, 雪猎 +5) - their layers double/triple."}},"raidShip":{"bondId":"raidShip","name":"突袭","identifier":18,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_raidShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":50,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值提升(受层数影响)\n<达到50层>所有干员攻击速度+50","descRaw":"【突袭】干员<@ba.vup>10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即<@ba.vup>再部署至一名地面敌人周围,期间<@ba.vup>攻击力和<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>50层>所有干员攻击速度<@ba.vup>+50","effectId":"bondeffect_raid","effectName":"突袭","effectDesc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值+{0:0%}(受层数影响)\n <达到50层>所有干员攻击速度+50","effectDescRaw":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>50层>所有干员攻击速度<@ba.vup>+50","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"visibleMembers":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"If a 突袭 member has not attacked for 10 s, or its skill is ready, and no enemy is in its range: it is immediately redeployed (keeping SP) onto a tile next to a ground enemy; while in that redeployed state its ATK and maxHP x(1 + 0.25 + 0.01*L)."},{"need":"L >= 50","effect":"ALL operators ASPD +50."}],"formulas":{"atkHpMultiplier":"1.25 + 0.01*L","idleSec":"10","aspdAll(L>=50)":"50"},"layerGain":"史尔特尔 部署时 +8 (<=50/battle); 休谟斯 each 2 kills +1; 瑕光 +4/deploy; 斯卡蒂; 伊内丝 +5; 机变 \"斯卡蒂的盟誓\" +8, \"德克萨斯的盟誓\" +10.","assumed":["target enemy = the ground enemy closest to the player's objective (its own field's; another field's only while its own has none) that the member can reach; landing tile = the nearest free deployable tile within 2 tiles of it from which the member's attack range covers it. No such tile for any of the 8 most advanced -> no jump; the poll looks again every 0.25 s (GitHub issue #51 - up to 0.1.1 the idle trigger landed out of reach and hopped every 10 s; DESIGN §22.2)","the buff lasts until the operator leaves the field"]}},"indomShip":{"bondId":"indomShip","name":"不屈","identifier":19,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_indomShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"地面干员被击倒时,有概率立即重新部署(受层数影响)\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","descRaw":"<@ba.vup>地面干员被击倒时,有概率立即<@ba.vup>重新部署<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员<@ba.vup>技力+5","effectId":"bondeffect_indom","effectName":"不屈","effectDesc":"地面干员被击倒时,有{0:0%}(受层数影响)概率立刻重新部署\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","effectDescRaw":"<@ba.vup>地面干员被击倒时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率立刻重新部署\n<在场<@ba.vup>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员技力<@ba.vup>+5","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_05_a","chess_char_1_20_a","chess_char_2_03_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_20_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a ground operator (地面干员 = melee position, on any tile) is knocked out / retreats / swaps 替身<->本体: with p = min(1, 0.18 + 0.004*L) it is redeployed at once (next deployment has 0 redeploy time and 0 cost). Also consumes a \"复活\" charge if it had one."},{"need":"3 distinct","effect":"When a ground (melee-position) operator is knocked out: every operator on the field +5 SP."}],"formulas":{"p":"min(1, 0.18 + 0.004*L)","reaches100%AtL":"205"},"layerGain":"雷蛇 休整期结束 +1; 砾 被击倒 +2; 归溟幽灵鲨 +5; 风笛 kills +2; 机变 \"风笛的盟誓\" +8."}},"maniShip":{"bondId":"maniShip","name":"调和","identifier":20,"isCore":false,"bondType":"REGULAR","bondOrder":1,"powerIdList":[],"iconId":"icon_maniShip","activeCount":1,"thresholds":[1],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"MANI","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"激活时使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","descRaw":"激活时使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectId":"bondeffect_mani","effectName":"调和","effectDesc":"激活时可以使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectDescRaw":"激活时可以使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员<@ba.vup>享受已激活的核心盟约的效果","effectDescParams":[],"bb":{"count":1},"bbStr":{},"buffs":[{"key":"other_bond_add_trigger_cnt","bb":{"count":1},"bbStr":{}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_6_11_a"],"visibleMembers":["chess_char_6_11_a"],"spec":{"tiers":[{"need":"1 调和 on board","effect":"Every core bond's member count +1; 调和 operators receive the effects of all active core bonds."}],"members":"缪尔赛思 (T6) and 盟约·辅助干员 (T1, hidden; given in round 1 by strategy Pith \"优等生\").","assumed":["+1 only for core bonds with >=1 real member","one +1 total no matter how many 调和 operators"]}},"emptyShip":{"bondId":"emptyShip","name":"协防干员","identifier":21,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_emptyShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员受到的物理和法术伤害-20%,【协防干员】伤害提升至120%,精锐【协防】干员造成伤害提升至140%","descRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%,【协防干员】伤害提升至<@ba.vup>120%,精锐【协防】干员造成伤害提升至<@ba.vup>140%","effectId":"bondeffect_empty","effectName":"协防干员","effectDesc":"所有干员受到的物理和法术伤害-20%;【协防干员】伤害提升至120%,精锐【协防干员】造成伤害提升至140%","effectDescRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%;【协防干员】伤害提升至<@ba.vup>120%,精锐【协防干员】造成伤害提升至<@ba.vup>140%","effectDescParams":[],"bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_2_14_a","chess_char_3_10_a","chess_char_4_08_a","chess_char_4_25_a","chess_char_5_09_a","chess_char_5_10_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_14_a","chess_char_3_10_a","chess_char_4_25_a","chess_char_5_10_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators take -20% physical and magic damage; 协防干员 members deal damage x1.2 (elite 协防 x1.4)."}],"meaning":"\"协防干员\" (assist operators) = fallback bond (constData.fallbackBondId). DIY/self-selected 6-star operators whose faction matches no core bond become 协防干员; some preset operators (调香师, 松果, 瑰盐, 魔王, 铃兰, 迷迭香, 盟约·辅助干员) are natively 协防.","formulas":{"damageTakenMul":"0.8","memberDamageMul":"1.2 (elite 1.4)"},"notes":["noStack=true: no layer-scaled effect, but layers are still counted (巴哈姆特)."]}},"soloShip":{"bondId":"soloShip","name":"独行","identifier":22,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_soloShip","activeCount":1,"thresholds":[1],"maxCount":1,"thresholdTemplate":"count_threshold_downward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","descRaw":"<在场1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15(在场2名及以上【独行】干员时失效)","effectId":"bondeffect_solo","effectName":"独行","effectDesc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","effectDescRaw":"<在场<@ba.vup>1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15<@ba.acrem>(在场2名及以上【独行】干员时失效)","effectDescParams":[],"bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"},"buffs":[{"key":"env_gbuff_new","bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"visibleMembers":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"spec":{"tiers":[{"need":"exactly 1 distinct 独行 on board","effect":"That operator ATK +60%, maxHP +60%, +15 SP when deployed. Disabled when 2+ different 独行 operators are on the board."}],"formulas":{"atkMul":"1.6","hpMul":"1.6","spOnDeploy":"15"},"notes":["noStack=true"]}},"suntShip":{"bondId":"suntShip","name":"绝技","identifier":23,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_suntShip","activeCount":2,"thresholds":[2,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward_golden","countMode":"BOARD_ALL_CHESS","countsHand":false,"countsGoldenOnly":true,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","descRaw":"<在场<@autochess.dgreen>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@autochess.dgreen>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectId":"bondeffect_sunt","effectName":"绝技","effectDesc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","effectDescRaw":"<在场<@ba.vup>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@ba.vup>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectDescParams":[],"bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"},"buffs":[{"key":"env_gbuff_new","bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"}}],"baseParams":[],"perStackParams":[],"members":[],"visibleMembers":[],"spec":{"tiers":[{"need":"2 elite (精锐) operators on board (any operators, duplicates count)","effect":"All elite operators ATK +30%."},{"need":"5 elite operators on board","effect":"At battle start every elite operator and its summons have skill SP cost x0.7 (rounded down, may become 0)."}],"formulas":{"atkMul":"1.3","spCostMul":"floor(sp*0.7)"},"notes":["isHiddenCharList=true, chessIdList empty: no member operators; elites are not \"members\" of 绝技 (PRTS).","noStack=true"]}}} \ No newline at end of file +{"yanShip":{"bondId":"yanShip","name":"炎","identifier":1,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["yan","sui","lungmen","lee","lgd"],"iconId":"icon_yanShip","activeCount":3,"thresholds":[3,6,9],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【炎】干员攻击力提升(受层数影响)\n<在场6名不同【炎】干员>战斗开始时召唤可自主行动的“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场9名不同【炎】干员>改为召唤2只“炎佑”,攻击力提升至1.5倍,受到的伤害-90%","descRaw":"【炎】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【炎】干员>战斗开始时召唤可自主行动的<@ba.vup>“炎佑”,其攻击力生命值分别为开战时【炎】干员攻击力生命值总和的30%,“炎佑”同时攻击3个目标,可使用<@ba.vup>“祛恶之焰”,攻击时附带攻击力一定比例的灼燃损伤且周围敌人受到一定比例的元素脆弱\n<在场<@autochess.dgreen>9名不同【炎】干员>改为召唤2只<@ba.vup>“炎佑”,攻击力提升至<@ba.vup>1.5倍,受到的伤害<@ba.vup>-90%","effectId":"bondeffect_yan","effectName":"炎","effectDesc":"【炎】干员攻击力+{0:0%}(受层数影响)\n<在场6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%攻击力的灼燃损伤,周围敌人受到20%的元素脆弱,周期性使用“祛恶之焰”\n<在场9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescRaw":"【炎】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【炎】干员>战斗开始时收集【炎】干员部分属性召唤“炎佑”(其攻击力和生命值为【炎】干员攻击力和生命值总和的30%);“炎佑”同时攻击3个目标,攻击附带20%<@ba.vup>攻击力的<@ba.vup>灼燃损伤,周围敌人受到20%的<@ba.vup>元素脆弱,周期性使用“祛恶之焰”\n<在场<@ba.vup>9名不同【炎】干员>改为召唤2只“炎佑”;“炎佑”攻击力提升至1.5倍,受到的伤害-90%","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.23,"atk_per_stack":0.009,"power_bond_char_cnt":6,"ex_bond_char_cnt":9,"damage_resistance":0.9,"atk":1.5},"bbStr":{"key":"act1autochess_bond_eff_yan"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_15_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"visibleMembers":["chess_char_1_03_a","chess_char_2_04_a","chess_char_3_03_a","chess_char_3_04_a","chess_char_4_17_a","chess_char_5_03_a","chess_char_5_12_a","chess_char_5_23_a","chess_char_6_03_a","chess_char_6_15_a"],"spec":{"tiers":[{"need":"3 distinct 炎 on board","effect":"炎 members (+调和 members) ATK x(1 + 0.23 + 0.009*L)."},{"need":"6 distinct","effect":"At battle start spawn 1 \"炎佑\" (enemy_9012_acloon template, allied flying ranged unit, not blockable, moves on its own). ATK = 0.30 x sum(ATK of 炎 operators on board at battle start), maxHP = 0.30 x sum(maxHP of those operators). Template: DEF 200, RES 0, BAT 2.5 s, ASPD 100, attack range radius 2.0 tiles, magic damage, hits up to 3 targets; every hit adds 灼燃损伤 (burn elemental damage) = 20% of its ATK and applies 元素脆弱 (elemental damage taken x1.2) to enemies within 0.8 tiles of the target. Skill \"祛恶之焰\": cooldown 15 s (first cast 15 s after spawn), channels a flame on one enemy in range dealing 60% ATK magic damage per second to it and to enemies within 1.0 tile, for up to 20 s."},{"need":"9 distinct","effect":"Spawn 2 炎佑 instead; each has ATK x1.5 and takes 90% less damage (damage_resistance 0.9)."}],"formulas":{"atkMultiplier":"1 + 0.23 + 0.009*L"},"caps":"none","layerGain":"Economy-driven: 惊蛰 获得时 +shop level (no activation needed); 小满 休整期结束 +1 per operator gained this round; 夕 +2 炎/奥术 per operator gained; 录武官 获得时 +6 炎 +3 奇迹; 星熊 获得时 +8 own bonds; 烛煌 获得时 +5 炎/维多利亚; 机变 \"诗怀雅的盟誓\" +10. Strategy 杜遥夜: first 2 manual refreshes each round prefer a 炎 operator.","howToPlay":"Buy many operators each round (every gain feeds 小满/夕), rush 6 炎 for the 炎佑 spike; 琳琅诗怀雅 / 诗怀雅 give early gold. 9 炎 is a late-game luxury.","assumed":["炎佑 base stats are replaced (not added) by the 30% sums","祛恶之焰 hit_duration=20 read as 20 one-second ticks","spawn point: centre of the player's board / near the objective","targets = 3 nearest enemies in range"]}},"sargonShip":{"bondId":"sargonShip","name":"萨尔贡","identifier":2,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["sargon"],"iconId":"icon_sargonShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度提升(有上限),持续一定时间(受层数影响,每层持续时间独立计算)\n<在场6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的攻击力(有上限)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","descRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员<@ba.vup>攻击速度提升(有上限),持续一定时间<@autochess.gray>(受层数影响,每层持续时间独立计算)\n<在场<@autochess.dgreen>6名不同【萨尔贡】干员>开启技能还会为所有【萨尔贡】干员提供等持续时间的<@ba.vup>攻击力(有上限)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectId":"bondeffect_sargon","effectName":"萨尔贡","effectDesc":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多+300),持续{0:0}秒(受层数影响)\n<在场6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多+300%)\n选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescRaw":"【萨尔贡】干员开启技能时,所有【萨尔贡】干员攻击速度+12(至多<@ba.vup>+300),持续<@ba.vup>{0:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【萨尔贡】干员>开启技能还会使所有【萨尔贡】干员攻击力+12%(至多<@ba.vup>+300%)\n<@ba.acrem>选择策略【娜仁图亚】时,<在场6名不同【萨尔贡】干员>的效果会有所改变","effectDescParams":[{"index":0,"format":"0","base":"base_time","perStack":"time_per_stack"}],"bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant","valid_in_band":"band_narant"},"buffs":[{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_atk":0.12},"bbStr":{"key":"act1autochess_bond_eff_sargon","invalid_in_band":"band_narant"}},{"key":"env_gbuff_new","bb":{"base_time":5,"time_per_stack":0.22,"max_buff_stack_cnt":25,"base_attack_speed":12,"power_bond_char_cnt":6,"base_power_time":60,"power_time_per_stack":0,"filter_item_level":5},"bbStr":{"key":"act2autochess_bond_eff_sargon[share]","valid_in_band":"band_narant"}}],"baseParams":["base_time"],"perStackParams":["time_per_stack"],"members":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_05_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_5_18_a","chess_char_6_05_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_12_a","chess_char_2_06_a","chess_char_2_08_a","chess_char_3_06_a","chess_char_3_13_a","chess_char_4_23_a","chess_char_4_24_a","chess_char_5_02_a","chess_char_6_05_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Whenever any 萨尔贡 member activates its skill, every 萨尔贡 member on the field gains one stack: ASPD +12 for (5 + 0.22*L) s. Each stack has its own timer; at most 25 concurrent stacks (=> +300 ASPD cap)."},{"need":"6 distinct","effect":"Each stack additionally gives ATK +12% (25 stacks => +300% cap), same duration."},{"need":"6 distinct AND strategy 娜仁图亚 (band_narant)","effect":"Replaces the 6-member effect: when a 萨尔贡 member activates its skill, operators on its 8 surrounding tiles also enjoy the effects of the equipment (tier <= V, filter_item_level 5) it carries, for 60 s (base_power_time 60, power_time_per_stack 0)."}],"formulas":{"stackDurationSec":"5 + 0.22*L","aspdPerStack":"12","atkPerStack(6)":"0.12","maxStacks":"25"},"caps":"25 stacks: +300 ASPD, +300% ATK","layerGain":"In battle on skill activation: 菲莱 +6 每次开技能, 百炼嘉维尔 +9 每次开技能, 莎草 +5 首次开技能, 缇缇 +1 萨尔贡/精准 per sleep/stun in range (<=24/battle); 艾丝黛尔 获得时 +2; 机变 \"缇缇的盟誓\" +10. Strategy 佩佩: after shop level 2/4/6 one special refresh preferring 萨尔贡.","howToPlay":"Fast-cycling skills (萨尔贡浓茶 / 黄沙罗盘 items) keep many stacks alive; L mainly extends duration, so stacks overlap more.","notes":["PRTS: the in-level UI shows twice the real duration (display bug); real duration is 5+0.22L."],"assumed":["When a 26th stack would be added, it replaces the stack with the shortest remaining time","stack granted to all 萨尔贡 members including the caster"]}},"victoriaShip":{"bondId":"victoriaShip","name":"维多利亚","identifier":3,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["victoria","glasgow"],"iconId":"icon_victoriaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":25,"mode":"every","effect":"bond_layer_added_reward_equip"}],"desc":"携带装备的【维多利亚】干员造成的伤害提升(受层数影响)\n<每叠加25层>获得1件带有随机效果的维式重锤\n<在场6名不同【维多利亚】干员>携带装备的【维多利亚】干员攻击力提升,携带进阶装备时额外提升","descRaw":"携带装备的【维多利亚】干员造成的<@ba.vup>伤害提升<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>25层>获得1件带有随机效果的<@ba.vup>维式重锤\n<在场<@autochess.dgreen>6名不同【维多利亚】干员>携带装备的【维多利亚】干员<@ba.vup>攻击力提升,携带进阶装备时额外提升","effectId":"bondeffect_victoria","effectName":"维多利亚","effectDesc":"携带装备的【维多利亚】干员伤害提升至{0:0%}(受层数影响)\n<每叠加25层>获得一件带有随机特殊效果的维式重锤\n<在场6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力+50%,携带进阶装备改为+80%","effectDescRaw":"<@ba.vup>携带装备的【维多利亚】干员伤害提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<每叠加<@ba.vup>25层>获得一件带有随机特殊效果的维式重锤\n<在场<@ba.vup>6名不同【维多利亚】干员>【维多利亚】干员每携带1件装备攻击力<@ba.vup>+50%,携带进阶装备改为<@ba.vup>+80%","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale","perStack":"damage_scale_per_stack"}],"bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3,"layer":25,"count":1},"bbStr":{"key":"act1autochess_bond_eff_victoria","pool":"pool_equip_vict"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_scale_per_stack":0.008,"base_damage_scale":1.25,"power_bond_char_cnt":6,"atk_normal_equip":0.5,"atk_golden_equip":0.3},"bbStr":{"key":"act1autochess_bond_eff_victoria"}},{"key":"bond_layer_added_reward_equip","bb":{"layer":25,"count":1},"bbStr":{"pool":"pool_equip_vict"}}],"baseParams":["base_damage_scale"],"perStackParams":["damage_scale_per_stack"],"members":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"visibleMembers":["chess_char_1_06_a","chess_char_2_05_a","chess_char_2_10_a","chess_char_3_08_a","chess_char_4_07_a","chess_char_4_11_a","chess_char_5_03_a","chess_char_5_08_a","chess_char_6_07_a","chess_char_6_08_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"维多利亚 members that carry >= 1 equipment: all damage dealt x(1.25 + 0.008*L)."},{"need":"every 25 layers (cumulative)","effect":"Gain 1 维式重锤 with a random special effect (pool_equip_vict)."},{"need":"6 distinct","effect":"维多利亚 members: ATK +50% per equipped item; an advanced (进阶/golden) item gives +80% instead (atk_normal_equip 0.5 + atk_golden_equip 0.3)."}],"formulas":{"damageMultiplier":"1.25 + 0.008*L (only if carrying equipment)","hammerPayouts":"floor(L/25)","atkPerItem(6)":"0.5 normal, 0.8 advanced"},"caps":"none","layerGain":"休整期结束: 薄绿 +2 per distinct tier of 维多利亚 on board, 维娜·维多利亚 +3 per distinct tier (and 奇迹 +2 per distinct tier of 奇迹), 刺玫 +1, 号角 +2 per distinct-tier operator of the highest-layer bond; in battle: 风笛 first 3 kills +2 维多利亚/远见/不屈; 烛煌 获得时 +5; 机变 \"风笛的盟誓\" +8. Strategy 哈洛德: from round 4 gain 1 维多利亚 operator every 2 rounds.","howToPlay":"Field 维多利亚 of as many different tiers as possible (T1..T6) for 薄绿/维娜; hand all equipment (incl. free hammers) to 维多利亚 carries; 蒸汽之心 copies all hammer effects.","assumed":["pool_equip_vict = uniform random among 灼燃/坚固/加速/战栗维式重锤 (normal grade)","hammer payout also counts layers added while the bond is inactive"]}},"kjeragShip":{"bondId":"kjeragShip","name":"谢拉格","identifier":4,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kjerag","karlan"],"iconId":"icon_kjeragShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【谢拉格】干员造成的伤害提升,对寒冷、冻结敌人获得额外提升(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间(受层数影响)","descRaw":"【谢拉格】干员造成的<@ba.vup>伤害提升,对<@ba.vup>寒冷、冻结敌人获得额外提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【谢拉格】干员>战场上每25秒过一阵寒风使场上的敌人寒冷一定时间<@autochess.gray>(受层数影响)","effectId":"bondeffect_kjerag","effectName":"谢拉格","effectDesc":"【谢拉格】干员伤害提升至125%,对寒冷和冻结敌人额外提升至{0:0%}(受层数影响)\n<在场6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷{1:0}秒(受层数影响)","effectDescRaw":"【谢拉格】干员伤害提升至<@ba.vup>125%,对寒冷和冻结敌人额外提升至<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【谢拉格】干员>战场上每25秒吹过一阵寒风使敌人寒冷<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_ex_damage_scale","perStack":"ex_damage_scale_per_stack"},{"index":1,"format":"0","base":"bond_eff_kjerag[storm].base_time","perStack":"bond_eff_kjerag[storm].time_per_stack"}],"bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"},"buffs":[{"key":"env_gbuff_new","bb":{"base_damage_scale":1.25,"base_ex_damage_scale":1.35,"ex_damage_scale_per_stack":0.01,"power_bond_char_cnt":6,"bond_eff_kjerag[storm].interval":25,"bond_eff_kjerag[storm].base_time":20,"bond_eff_kjerag[storm].time_per_stack":0.1},"bbStr":{"key":"act1autochess_bond_eff_kjerag"}}],"baseParams":["base_ex_damage_scale","bond_eff_kjerag[storm].base_time"],"perStackParams":["ex_damage_scale_per_stack","bond_eff_kjerag[storm].time_per_stack"],"members":["chess_char_1_02_a","chess_char_2_03_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_02_a","chess_char_2_05_a","chess_char_3_11_a","chess_char_3_14_a","chess_char_3_20_a","chess_char_4_13_a","chess_char_4_22_a","chess_char_5_14_a","chess_char_6_02_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"谢拉格 members deal damage x1.25; against enemies that are 寒冷 (cold) or 冻结 (frozen) x(1.35 + 0.01*L) instead."},{"need":"6 distinct","effect":"Every 25 s a cold wind applies 寒冷 to every enemy on the field for (20 + 0.1*L) s."}],"formulas":{"damageMultiplier":"1.25","damageMultiplierVsColdOrFrozen":"1.35 + 0.01*L","windIntervalSec":"25","windColdDurationSec":"20 + 0.1*L"},"caps":"none","layerGain":"In battle, freeze-driven: 初雪 and 银灰 - each enemy in range that becomes frozen: 50% chance +1; 凛御银灰 gives the 谢拉格 operator in front of it a 60% version (<=200/battle); 锏 部署时 +8 own active bonds (<=24/battle). 获得时: 角峰 +2, 崖心 +3 (hidden), 雪猎 +5, 灵知 +5, 锏 +8. 机变 \"银灰的盟誓\" +8. Strategy 休露丝: first 谢拉格 bought each round costs 1.","howToPlay":"Standard AK rule: applying 寒冷 to an already-cold enemy freezes it. The 6-member wind + cold-on-hit sources (谢拉格不融冰 12% 1.5 s cold) create constant freezes, so layers can reach hundreds per battle.","notes":["巴哈姆特: avoid lighting 3 奥术 alongside max-layer 谢拉格 (圣聆初雪 gets damage-capped)."],"assumed":["first wind at t = 25 s","wind re-applying cold on a cold enemy triggers freeze like any cold source"]}},"lateranoShip":{"bondId":"lateranoShip","name":"拉特兰","identifier":5,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["laterano"],"iconId":"icon_lateranoShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【拉特兰】干员开启技能获得的弹药量提升(受层数影响)\n<在场6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员攻击力提升(有上限)","descRaw":"【拉特兰】干员开启技能获得的<@ba.vup>弹药量提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【拉特兰】干员>【拉特兰】干员每消耗1发弹药,所有【拉特兰】干员<@ba.vup>攻击力提升(有上限)","effectId":"bondeffect_laterano","effectName":"拉特兰","effectDesc":"【拉特兰】干员开启技能时获得的弹药量+{0:0%}(受层数影响)\n<在场6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多+200%","effectDescRaw":"【拉特兰】干员开启技能时获得的弹药量<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【拉特兰】干员>任意【拉特兰】干员每消耗1发弹药,全体【拉特兰】干员攻击力+4%,至多<@ba.vup>+200%","effectDescParams":[{"index":0,"format":"0%","base":"base_ammo_percent","perStack":"ammo_percent_per_stack"}],"bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"},"buffs":[{"key":"env_gbuff_new","bb":{"base_ammo_percent":0.05,"ammo_percent_per_stack":0.015,"power_bond_char_cnt":6,"atk_per_consume":0.04,"max_atk_for_consume":2},"bbStr":{"key":"act1autochess_bond_eff_laterano"}}],"baseParams":["base_ammo_percent"],"perStackParams":["ammo_percent_per_stack"],"members":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_07_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"visibleMembers":["chess_char_1_01_a","chess_char_2_01_a","chess_char_3_01_a","chess_char_3_21_a","chess_char_4_01_a","chess_char_4_02_a","chess_char_5_01_a","chess_char_6_01_a","chess_char_6_09_a","chess_char_6_13_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"When a 拉特兰 member activates a skill that grants ammo, ammo gained x(1 + 0.05 + 0.015*L), rounded down."},{"need":"6 distinct","effect":"Every ammo consumed by any 拉特兰 member: all 拉特兰 members ATK +4% (until battle end), max +200% (= 50 ammo)."}],"formulas":{"ammoMultiplier":"floor(baseAmmo * (1.05 + 0.015*L))","atkPerAmmo(6)":"0.04","atkCap(6)":"2.0"},"caps":"+200% ATK from the 6-member effect","layerGain":"Ammo consumption in battle: 圣约送葬人 each 7 bullets +7 拉特兰 (7 triggers => 49/battle) and +3 远见 (<=21/battle); 莫斯提马 ops in its 4 adjacent tiles each 6 ammo +1; 蕾缪安 each 10 bullets with 3 ops in its row +2 拉特兰/精准; 送葬人 first kill +3 精准/拉特兰. Prep: 空弦 进入休整期 +3 to self and front tile operator's active bonds. 机变 \"莫斯提马的盟誓\" +10. Strategy 潘格尼尼: after spending 55 gold gain a random elite T4+ 拉特兰.","howToPlay":"Only ammo-skill operators benefit from the 3-tier; the bond is weak until 6 (巴哈姆特: \"3人效果較差\").","assumed":["non-ammo skills unaffected","\"ammo consumed\" = each shot/bullet decrement"]}},"egirShip":{"bondId":"egirShip","name":"阿戈尔","identifier":6,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["egir","abyssal"],"iconId":"icon_egirShip","activeCount":3,"thresholds":[3,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【阿戈尔】干员生命值提升(受层数影响)\n战斗开始时,【阿戈尔】干员会吞噬身前一格干员对其造成5000点物理伤害并获得其基础攻击力和阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","descRaw":"【阿戈尔】干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n战斗开始时,【阿戈尔】干员会<@ba.vup>吞噬身前一格干员对其造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,使【阿戈尔】叠加等于被吞噬者等阶的<@ba.vup>盟约层数<@autochess.gray>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@autochess.dgreen>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectId":"bondeffect_egir","effectName":"阿戈尔","effectDesc":"【阿戈尔】干员生命值+{0:0%}(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成5000点物理伤害并获得其基础攻击力和阻挡数,并叠加等于被吞噬者等阶的盟约层数(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时立刻复活","effectDescRaw":"【阿戈尔】干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n战斗开始时【阿戈尔】干员依次吞噬身前一格干员造成<@ba.vdown>5000点物理伤害并获得其<@ba.vup>基础攻击力和<@ba.vup>阻挡数,并叠加等于被吞噬者等阶的盟约层数<@ba.acrem>(【阿戈尔】之间优先更靠左和靠上的干员发起吞噬)\n<在场<@ba.vup>5名不同【阿戈尔】干员>前3名【阿戈尔】干员首次被击倒时<@ba.vup>立刻复活","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"}],"bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.35,"max_hp_per_stack":0.01,"damage_value":5000,"power_bond_char_cnt":5,"max_free_respawn_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_egir","bond_type":"bond_by_id","bond_id":"egirShip","bond_add_type":"by_charlevel"}}],"baseParams":["base_max_hp"],"perStackParams":["max_hp_per_stack"],"members":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"visibleMembers":["chess_char_1_04_a","chess_char_2_07_a","chess_char_3_05_a","chess_char_3_09_a","chess_char_4_09_a","chess_char_4_12_a","chess_char_5_05_a","chess_char_5_13_a","chess_char_6_04_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"阿戈尔 members maxHP x(1 + 0.35 + 0.01*L)."},{"need":"3 distinct (battle start)","effect":"Devour (吞噬): see algorithm."},{"need":"5 distinct","effect":"The first 3 阿戈尔 members to be knocked out, in knock-out order (the battle-start devour's food included; a member never knocked out takes none), each revive immediately on that first knock-out; a member takes at most one, and a save by its own kit / item / band revive is no knock-out (max_free_respawn_cnt 3; the owner's decision of 2026-10-05)."}],"algorithm":["Order: 阿戈尔 members sorted leftmost first, then topmost (\"更靠左和靠上\").","Each 阿戈尔 in order marks the unit on the tile directly in front of it (its facing direction) and also the front-tile unit of every 阿戈尔 it has marked (chain). It never marks itself, a unit it already marked, or a unit that marked it.","The marker immediately gains the base ATK of every unit it marked (added to base ATK at the final stage) and their block counts.","After all marks are placed, each mark makes its target suffer one 5000-point physical 流失 (HP loss, source = the target itself; if it dies, the kill is credited to the marker), resolved in marking order. A target that dies cancels its remaining pending marks.","Each devoured unit adds layers to 阿戈尔 equal to its tier (1-6), once per unit per battle.","(5-member tier) Revive is implemented as: when the unit leaves the field for any reason other than being moved, its next deployment has 0 redeploy time and 0 cost (PRTS). Devour layers: each devoured unit adds its tier once per battle (refreshes next round)."],"formulas":{"hpMultiplier":"1.35 + 0.01*L","devourDamage":"5000","layersPerDevoured":"tier of devoured unit"},"caps":"3 revives per battle","layerGain":"Devour (tier per devoured unit, every battle); 幽灵鲨 被击倒 +3; 归溟幽灵鲨 被击倒/替身切换 +5 阿戈尔 +5 不屈; 斯卡蒂 each 2 kills +1 阿戈尔/坚守/突袭; 海霓 first kill (enemy or ally) +3 阿戈尔/奥术; 机变 \"斯卡蒂的盟誓\" +8. Strategy 克莱门莎: an 阿戈尔 knocked out adds layers = its tier.","howToPlay":"Put cheap/high-tier fodder in front of 阿戈尔 carries: they steal base ATK and block, gain layers, and (5) revive. Tier-6 fodder gives +6 layers per battle.","assumed":["5000 physical 流失 ignores DEF and shields","marked allied units are operators of any player (devour hits allies): on a shared field a teammate's operator in front, standing or entering 联防 knocked out, is devoured too and the chain continues through a teammate's 阿戈尔 (the owner's decision of 2026-10-05: PRTS has no own-side limit)"]}},"siracusaShip":{"bondId":"siracusaShip","name":"叙拉古","identifier":7,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["siracusa","chiave"],"iconId":"icon_siracusaShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【叙拉古】干员部署后攻击速度提升,持续一定时间(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿10秒内对敌人攻击时有3%的概率造成一定真实伤害(受层数影响)并恐惧3秒","descRaw":"【叙拉古】干员部署后<@ba.vup>攻击速度提升,持续一定时间<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>6名不同【叙拉古】干员>【叙拉古】干员部署后进入等时长的隐匿状态,【叙拉古】干员隐匿状态下和脱离隐匿<@ba.vup>10秒内对敌人攻击时有<@ba.vup>3%的概率造成一定真实伤害<@autochess.gray>(受层数影响)并<@ba.vup>恐惧3秒","effectId":"bondeffect_siracusa","effectName":"叙拉古","effectDesc":"【叙拉古】干员部署后攻击速度+{0:0},持续{1:0}秒(受层数影响)\n<在场6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成{2:0}(受层数影响)点真实伤害并恐惧目标3秒","effectDescRaw":"【叙拉古】干员部署后攻击速度<@ba.vup>+{0:0},持续<@ba.vup>{1:0}秒<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【叙拉古】干员>【叙拉古】干员部署后还会进入等时长的隐匿状态,【叙拉古】干员在隐匿状态和脱离隐匿10秒内对敌人攻击时有3%概率造成<@ba.vup>{2:0}<@ba.acrem>(受层数影响)点真实伤害并<@ba.vup>恐惧目标3秒","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"},{"index":1,"format":"0","base":"base_duration","perStack":"duration_per_stack"},{"index":2,"format":"0","base":"base_damage","perStack":"damage_per_stack"}],"bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"},"buffs":[{"key":"env_gbuff_new","bb":{"base_duration":32,"duration_per_stack":0.4,"base_attack_speed":25,"attack_speed_per_stack":0.8,"power_bond_char_cnt":6,"ex_bond_char_cnt":6,"end_duration":10,"prob":0.03,"base_damage":5000,"damage_per_stack":50,"fear":3},"bbStr":{"key":"act2autochess_bond_eff_siracusa"}}],"baseParams":["base_attack_speed","base_duration","base_damage"],"perStackParams":["attack_speed_per_stack","duration_per_stack","damage_per_stack"],"members":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_15_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"visibleMembers":["chess_char_1_07_a","chess_char_1_08_a","chess_char_2_16_a","chess_char_3_18_a","chess_char_3_19_a","chess_char_4_10_a","chess_char_4_16_a","chess_char_5_10_a","chess_char_5_20_a","chess_char_6_18_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"After every deployment (incl. redeploy) a 叙拉古 member gains ASPD +(25 + 0.8*L) for (32 + 0.4*L) s."},{"need":"6 distinct","effect":"After deployment also 隐匿 (camouflage) for the same duration. While camouflaged and for 10 s after it ends, each normal damage instance (普通伤害 = attack type NORMAL: attacks, skill hits, drone attacks; not 溅射 / 持续 / 附加 — `bonds/core.js siracusaRolls`) it deals may add (5000 + 50*L) true damage (source = the operator) and 恐惧 (fear) 3 s. Nominal 3% chance, implemented as pseudo-random: all 叙拉古 members share one counter; attempt n since last proc succeeds with p = 0.00139*n (guaranteed at n = 720); counter resets on proc."}],"formulas":{"aspd":"25 + 0.8*L","durationSec":"32 + 0.4*L","procDamage":"5000 + 50*L","prdStep":"0.00139"},"caps":"none","layerGain":"Shop refresh-driven: 拉普兰德 first manual refresh each round +4 (works from bench); 安洁莉娜 休整期结束 +4 per refresh this round (<=12/round); 阿罗玛 +2 叙拉古/奥术 per refresh (<=6); 伺夜 first 3 kills +2 叙拉古 +1 奇迹; 荒芜拉普兰德 each kill +2 (elite: every 叙拉古 gets this, <=100/battle); 忍冬 获得时 +6 own bonds (x2/x3 with 投资人); 机变 \"德克萨斯的盟誓\" +10. Strategy 贾维: every 6 manual refreshes get a free 叙拉古 (<=2/round).","howToPlay":"Refresh a lot in prep (free refresh sources: 普罗旺斯, 德克萨斯, 缄默德克萨斯, 巫恋) to feed 拉普兰德/安洁莉娜; pair with 投资人 for 忍冬.","notes":["PRTS: the 10 s post-stealth window restarts if the operator's status effects or immunities change."],"assumed":["隐匿 = standard AK camouflage (not targeted by ranged enemies unless blocking)"]}},"kazimierzShip":{"bondId":"kazimierzShip","name":"卡西米尔","identifier":8,"isCore":true,"bondType":"SEASON","bondOrder":2,"powerIdList":["kazimierz","pinus"],"iconId":"icon_kazimierzShip","activeCount":3,"thresholds":[3,6],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"每次有干员部署时,【卡西米尔】干员攻击力+20%持续至战斗结束(上限受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","descRaw":"每次有干员部署时,【卡西米尔】干员攻击力<@ba.vup>+20%持续至战斗结束<@autochess.gray>(上限受层数影响)\n<在场<@autochess.dgreen>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每<@ba.vup>2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectId":"bondeffect_kazimierz","effectName":"卡西米尔","effectDesc":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多+{0:0%})(受层数影响)\n<在场6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成120%攻击力真实伤害和0.1秒晕眩,未阻挡敌人时攻击附带30%攻击力的真实伤害","effectDescRaw":"每次有干员部署时【卡西米尔】干员攻击力+20%(至多<@ba.vup>+{0:0%})<@ba.acrem>(受层数影响)\n<在场<@ba.vup>6名不同【卡西米尔】干员>【卡西米尔】干员阻挡敌人时每2秒对周围敌人造成<@ba.vup>120%攻击力真实伤害和<@ba.vup>0.1秒晕眩,未阻挡敌人时攻击附带<@ba.vup>30%攻击力的真实伤害","effectDescParams":[{"index":0,"format":"0%","base":"base_max_atk_when_born","perStack":"max_atk_when_born_per_stack"}],"bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"},"buffs":[{"key":"env_gbuff_new","bb":{"atk_when_born":0.2,"base_max_atk_when_born":0.5,"max_atk_when_born_per_stack":0.01,"damage_interval":2,"damage_atk_scale":1.2,"stun":0.1,"range_radius":0.8,"power_bond_char_cnt":6,"pure_atk_scale":0.3},"bbStr":{"key":"act2autochess_bond_eff_kazimierz"}}],"baseParams":["base_max_atk_when_born"],"perStackParams":["max_atk_when_born_per_stack"],"members":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_19_a","chess_char_2_12_a","chess_char_2_18_a","chess_char_3_12_a","chess_char_3_17_a","chess_char_4_19_a","chess_char_4_20_a","chess_char_5_19_a","chess_char_6_17_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"3 distinct","effect":"Every time any friendly operator is deployed (incl. redeploys) each 卡西米尔 member gains ATK +20% until battle end, capped at +(50 + 1*L)%."},{"need":"6 distinct","effect":"While blocking >= 1 enemy: every 2 s deals 120% ATK true damage to all enemies within radius 0.8 tiles and stuns them 0.1 s. While not blocking: each normal damage instance adds 30% ATK sourceless true damage."}],"formulas":{"atkPerDeploy":"0.20","atkCap":"0.50 + 0.01*L"},"caps":"ATK bonus cap 50%+1%/layer","layerGain":"Deploy-driven in battle: 砾 部署时 +1; 瑕光 部署时 +4 own active bonds (<=12/battle); 远牙 grants the right-most operator in its row \"部署时 +4 卡西米尔/精准 (<=24/battle)\"; 锏 部署时 +8 (<=24); 获得时: 野鬃 +2, 灰毫 +3 to highest-layer bond; 机变 \"玛恩纳的盟誓\" +12. Strategy 玛恩纳: +1 gold next round per 卡西米尔 bought (<=3).","howToPlay":"Maximise deploy events: low redeploy time (助力 -30%, 骑士戒律), operators that die/retreat and come back (砾 + 不屈). 巴哈姆特: do not light 坚守 (damage sharing keeps 砾 alive).","assumed":["initial auto-deployments at battle start also count as deploys","buff applies to members deployed later too (stored globally, capped)"]}},"preciShip":{"bondId":"preciShip","name":"精准","identifier":9,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_preciShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【精准】干员攻击力提升(受层数影响)\n<在场3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的防御力和法术抗性","descRaw":"【精准】干员<@ba.vup>攻击力提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【精准】干员>生效范围变为【精准】干员和所有远程干员,且攻击无视一定的<@ba.vup>防御力和<@ba.vup>法术抗性","effectId":"bondeffect_preci","effectName":"精准","effectDesc":"【精准】干员攻击力+{0:0%}(受层数影响)\n<在场3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视30%防御力和法术抗性","effectDescRaw":"【精准】干员攻击力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【精准】干员>生效范围变为所有【精准】干员和远程干员,且攻击无视<@ba.vup>30%防御力和法术抗性","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"},"buffs":[{"key":"env_gbuff_new","bb":{"base_atk":0.1,"atk_per_stack":0.012,"power_def_penetrate":0.3,"power_magic_resist_penetrate":0.3,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_preci"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"visibleMembers":["chess_char_1_09_a","chess_char_1_17_a","chess_char_2_01_a","chess_char_3_11_a","chess_char_4_06_a","chess_char_4_14_a","chess_char_4_20_a","chess_char_5_02_a","chess_char_6_01_a","chess_char_6_05_a","chess_char_6_08_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"精准 members ATK x(1 + 0.10 + 0.012*L)."},{"need":"3 distinct","effect":"Scope becomes 精准 members + every RANGED operator; affected units also ignore 30% of target DEF and 30% of target RES."}],"formulas":{"atkMultiplier":"1.10 + 0.012*L","defPenetrateRatio(3)":"0.3","resPenetrateRatio(3)":"0.3"},"layerGain":"Kill/skill/deploy in battle: 寒芒克洛丝 gives front operator \"开技能 +1 精准 (<=10/battle)\"; 远牙 grant (+4/deploy); 缇缇 +1 per sleep/stun; 蕾缪安, 送葬人; 莱恩哈特 休整期结束 +5 own active bonds; 获得时: 深靛 +2, 雪猎 +5. 机变 \"缇缇的盟誓\" +10.","assumed":["penetration = ratio ignore (like 无视 x% 防御)"]}},"swiftShip":{"bondId":"swiftShip","name":"迅捷","identifier":10,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_swiftShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【迅捷】干员技能结束时有概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","descRaw":"【迅捷】干员技能结束时有概率<@autochess.gray>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@autochess.dgreen>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectId":"bondeffect_swift","effectName":"迅捷","effectDesc":"【迅捷】干员技能结束时有{0:0%}概率(受层数影响)立刻回复12点技力\n<达到40层>所有干员技能结束时有等概率额外回复15点技力","effectDescRaw":"【迅捷】干员技能结束时有<@ba.vup>{0:0%}概率<@ba.acrem>(受层数影响)立刻回复<@ba.vup>12点技力\n<达到<@ba.vup>40层>所有干员技能结束时有等概率额外回复<@ba.vup>15点技力","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.2,"prob_per_stack":0.0035,"power_bond_stack_cnt":40,"normal_sp":12,"power_sp":15},"bbStr":{"key":"act1autochess_bond_eff_swift"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_01_a","chess_char_1_16_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_10_a","chess_char_6_19_a"],"visibleMembers":["chess_char_1_01_a","chess_char_1_19_a","chess_char_2_13_a","chess_char_2_19_a","chess_char_3_10_a","chess_char_3_18_a","chess_char_4_14_a","chess_char_5_14_a","chess_char_5_15_a","chess_char_5_22_a","chess_char_6_05_a","chess_char_6_19_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a 迅捷 member's skill ends: with p = min(1, 0.20 + 0.0035*L) immediately +12 SP."},{"need":"L >= 40","effect":"Every operator whose skill ends: with the same p, additionally +15 SP."}],"formulas":{"p":"min(1, 0.20 + 0.0035*L)","reaches100%AtL":"229"},"layerGain":"妮芙 休整期结束 +2 per operator on the bench; 蒂比 进入休整期 +2 own active bonds; 莱恩哈特 +5; 引星棘刺 +4 self & front; 获得时: 锡人/野鬃 +2, 忍冬 +6, 锏 +8. 机变 \"银灰的盟誓\" +8.","assumed":["迅捷 members roll both the 12 SP and the 15 SP independently"]}},"skillfulShip":{"bondId":"skillfulShip","name":"灵巧","identifier":11,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_skillfulShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":40,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【灵巧】干员及周围4格干员攻击速度提升(受层数影响)\n<达到40层>生效范围变为【灵巧】干员周围8格","descRaw":"【灵巧】干员及周围4格干员<@ba.vup>攻击速度提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>40层>生效范围变为【灵巧】干员周围8格","effectId":"bondeffect_skillful","effectName":"灵巧","effectDesc":"【灵巧】干员及周围4格的干员攻击速度+{0:0}(受层数影响)\n <达到40层>生效范围变为【灵巧】干员周围8格","effectDescRaw":"【灵巧】干员及周围4格的干员攻击速度<@ba.vup>+{0:0}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>40层>生效范围变为【灵巧】干员周围8格","effectDescParams":[{"index":0,"format":"0","base":"base_attack_speed","perStack":"attack_speed_per_stack"}],"bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":10,"attack_speed_per_stack":1,"power_bond_stack_cnt":40},"bbStr":{"key":"act1autochess_bond_eff_skillful"}}],"baseParams":["base_attack_speed"],"perStackParams":["attack_speed_per_stack"],"members":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_5_16_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_14_a","chess_char_2_04_a","chess_char_2_13_a","chess_char_3_02_a","chess_char_3_13_a","chess_char_3_21_a","chess_char_4_11_a","chess_char_4_13_a","chess_char_4_21_a","chess_char_5_06_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"灵巧 members and operators on their 4 orthogonally adjacent tiles: ASPD +(10 + 1*L)."},{"need":"L >= 40","effect":"Area becomes the 8 surrounding tiles."}],"formulas":{"aspd":"10 + L"},"layerGain":"溯光星源 休整期结束 +2 灵巧/奥术 per 3 gold spent this round ; 断崖 +3 self & behind; 空弦 +3 self & front; 蒂比 +2; 获得时 灵知 +5. (act1 灵巧 also had a 20-layer shop reward; removed in act2.)","assumed":["a unit covered by several 灵巧 auras gets the bonus once"]}},"arcaneShip":{"bondId":"arcaneShip","name":"奥术","identifier":12,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_arcaneShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例提升(受层数影响)","descRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@autochess.gray>(受层数影响),持续3秒\n<在场<@autochess.dgreen>3名不同【奥术】干员>【奥术】干员对生命值低于<@ba.vup>50%的敌人施加的伤害提升比例提升<@autochess.gray>(受层数影响)","effectId":"bondeffect_arcane","effectName":"奥术","effectDesc":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升{0:0%}(受层数影响),持续3秒\n<在场3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为{1:0%}(受层数影响)","effectDescRaw":"【奥术】干员造成法术伤害时使目标受到的法术伤害提升<@ba.vup>{0:0%}<@ba.acrem>(受层数影响),持续3秒\n<在场<@ba.vup>3名不同【奥术】干员>【奥术】干员对生命值低于50%的敌人施加的伤害提升比例为<@ba.vup>{1:0%}<@ba.acrem>(受层数影响)","effectDescParams":[{"index":0,"format":"0%","base":"base_damage_scale_show","perStack":"damage_scale_per_stack"},{"index":1,"format":"0%","base":"base_damage_scale_show_ex","perStack":"damage_scale_per_stack_show_ex"}],"bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"},"buffs":[{"key":"env_gbuff_new","bb":{"weak_duration":3,"base_damage_scale":1.2,"damage_scale_per_stack":0.01,"power_bond_char_cnt":3,"power_weak_scale":1.4,"hp_ratio":0.5,"base_damage_scale_show":0.2,"base_damage_scale_show_ex":0.68,"damage_scale_per_stack_show_ex":0.014},"bbStr":{"key":"act2autochess_bond_eff_arcane"}}],"baseParams":["base_damage_scale_show","base_damage_scale_show_ex"],"perStackParams":["damage_scale_per_stack","damage_scale_per_stack_show_ex"],"members":["chess_char_1_17_a","chess_char_2_10_a","chess_char_2_15_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"visibleMembers":["chess_char_1_17_a","chess_char_2_10_a","chess_char_3_09_a","chess_char_4_02_a","chess_char_4_10_a","chess_char_5_07_a","chess_char_5_12_a","chess_char_6_02_a","chess_char_6_16_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When an 奥术 member deals magic damage, the target takes magic damage x(1.20 + 0.01*L) (i.e. +(20+L)%) for 3 s. ONE instance per target whatever applies it: the strongest value wins, a weaker one resumes if it outlasts it; reapplying refreshes (corrected 2026-10-01: PRTS 作战机制 同名buff默认只表现出一个; 巴哈姆特 12316 the two players of a pair field compete for it)."},{"need":"3 distinct","effect":"Against enemies below 50% HP the multiplier is 1.4 x (1.20 + 0.01*L) = 1.68 + 0.014*L (i.e. +(68+1.4L)%)."}],"formulas":{"magicTakenMul":"1.20 + 0.01*L","magicTakenMulLowHp(3)":"1.4*(1.20 + 0.01*L)","hpThreshold":"0.5","durationSec":"3"},"layerGain":"夕 +2 per operator gained; 阿罗玛 +2 per refresh (<=6); 溯光星源 +2 per 3 gold spent; 海霓 first kill +3; 获得时: 深靛 +2, 协律 +4 (hidden). 机变 \"莫斯提马的盟誓\" +10.","assumed":["one instance per target, the strongest (the engine's default same-name rule; the two players of a pair field compete for it) — until v2.5 the remake kept one per player and they multiplied"]}},"steadShip":{"bondId":"steadShip","name":"坚守","identifier":13,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_steadShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员生命值提升(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由所有【坚守】干员平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%脆弱效果","descRaw":"所有干员<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由所有【坚守】干员<@ba.vup>平均承担。【坚守】干员受到伤害时,伤害来源将受到一定法术伤害<@autochess.gray>(受层数影响,每0.2秒至多触发1次)和持续<@ba.vup>5秒的<@ba.vup>40%脆弱效果","effectId":"bondeffect_stead","effectName":"坚守","effectDesc":"所有干员生命值+{0:0%}(受层数影响)\n<在场3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到{1:0}点法术伤害(受层数影响,每0.2秒至多触发1次)和持续5秒的40%的脆弱效果","effectDescRaw":"所有干员生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n<在场<@ba.vup>3名不同【坚守】干员>场上非【坚守】干员受到伤害时,所受伤害的<@ba.vup>40%由【坚守】干员平均承担;【坚守】干员受到伤害时,伤害来源受到<@ba.vup>{1:0}点法术伤害<@ba.acrem>(受层数影响,每0.2秒至多触发1次)和持续5秒的<@ba.vup>40%的脆弱效果","effectDescParams":[{"index":0,"format":"0%","base":"base_max_hp","perStack":"max_hp_per_stack"},{"index":1,"format":"0","base":"base_damage_value","perStack":"damage_value_per_stack"}],"bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"},"buffs":[{"key":"env_gbuff_new","bb":{"base_max_hp":0.25,"max_hp_per_stack":0.012,"damage_resistance":0.4,"power_bond_char_cnt":3,"cd_duration":0.2,"weak[limit]":5,"damage_scale":1.4,"base_damage_value":850,"damage_value_per_stack":10},"bbStr":{"key":"act1autochess_bond_eff_stead"}}],"baseParams":["base_max_hp","base_damage_value"],"perStackParams":["max_hp_per_stack","damage_value_per_stack"],"members":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"visibleMembers":["chess_char_1_02_a","chess_char_1_10_a","chess_char_2_08_a","chess_char_2_17_a","chess_char_2_18_a","chess_char_3_05_a","chess_char_3_16_a","chess_char_4_01_a","chess_char_5_11_a","chess_char_6_03_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators maxHP x(1 + 0.25 + 0.012*L)."},{"need":"3 distinct","effect":"When a non-坚守 operator takes damage, 40% of that damage is taken instead by the 坚守 members, split evenly. When a 坚守 member takes damage, the damage source takes (850 + 10*L) sourceless magic damage and 脆弱 (damage taken x1.4) for 5 s; each 坚守 member can reflect at most once per 0.2 s."}],"formulas":{"hpMultiplier":"1.25 + 0.012*L","redirectRatio":"0.4","thornsDamage":"850 + 10*L","thornsCooldownSec":"0.2","fragile":"1.4 for 5 s"},"layerGain":"折桠 休整期结束 +4; 蛇屠箱 +1 per operator in same row; 斯卡蒂 kills; 获得时 角峰 +2; 机变 \"斯卡蒂的盟誓\" +8.","notes":["PRTS: thorns hit whatever the damage source is; sourceless damage can consume the thorns cooldown."]}},"deputShip":{"bondId":"deputShip","name":"助力","identifier":14,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_deputShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员防御力提升(受层数影响),再部署时间减少\n休整期结束时,使当前所有已激活盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","descRaw":"所有干员<@ba.vup>防御力提升<@autochess.gray>(受层数影响),<@ba.vup>再部署时间减少\n休整期结束时,使当前所有已激活盟约层数<@ba.vup>+2\n<在场<@autochess.dgreen>3名不同【助力】干员>改为层数<@ba.vup>+4","effectId":"bondeffect_deput","effectName":"助力","effectDesc":"所有干员防御力+{0:0%}(受层数影响),再部署时间-30%\n休整期结束时,使当前所有已激活的盟约层数+2\n<在场3名不同【助力】干员>改为层数+4","effectDescRaw":"所有干员防御力<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响),再部署时间<@ba.vup>-30%\n休整期结束时,使当前所有已激活的盟约层数<@ba.vup>+2\n<在场<@ba.vup>3名不同【助力】干员>改为层数<@ba.vup>+4","effectDescParams":[{"index":0,"format":"0%","base":"base_def","perStack":"def_per_stack"}],"bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3,"layer":2,"count":3,"more_layer":4},"bbStr":{"key":"act1autochess_bond_eff_deput","bond":"deputShip"},"buffs":[{"key":"env_gbuff_new","bb":{"base_def":0.15,"def_per_stack":0.012,"respawn_time":-0.3},"bbStr":{"key":"act1autochess_bond_eff_deput"}},{"key":"bond_activated_add_layer","bb":{"layer":2,"count":3,"more_layer":4},"bbStr":{"bond":"deputShip"}}],"baseParams":["base_def"],"perStackParams":["def_per_stack"],"members":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_2_15_a","chess_char_3_15_a","chess_char_3_20_a","chess_char_4_03_a","chess_char_4_05_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_5_16_a","chess_char_6_14_a","chess_char_6_20_a"],"visibleMembers":["chess_char_1_06_a","chess_char_1_13_a","chess_char_2_14_a","chess_char_3_20_a","chess_char_4_21_a","chess_char_4_24_a","chess_char_6_14_a","chess_char_6_20_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators DEF x(1 + 0.15 + 0.012*L); redeploy time -30%. At the end of every prep phase (休整期结束时) every currently active bond (incl. 助力) gets +2 layers."},{"need":"3 助力 (distinct name or elite state)","effect":"+4 layers instead of +2."}],"formulas":{"defMultiplier":"1.15 + 0.012*L","redeployTimeMul":"0.7","layersPerRound":"2 (4 at 3 members) to every active bond"},"layerGain":"波登可 +1 / 调香师 +2 to highest-layer bond at prep end (work from bench); 流明 +2 to active bonds of every bench operator; 纯烬艾雅法拉 +3 highest-layer bond per skill; its own +2/+4 per round.","howToPlay":"Cheap universal layer engine: activate as many bonds as possible so each gets +2/+4 every round (helps the hidden-round threshold)."}},"visiShip":{"bondId":"visiShip","name":"远见","identifier":15,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_visiShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":10,"mode":"every","effect":"bond_layer_gain_coin"},{"layer":80,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"},{"layer":150,"mode":"first","effect":"bond_multi_layer_char_goods_price_bond_discount"}],"desc":"<每叠加10层>获得一次2资金\n<首次达到80层>所有【远见】干员购买价格永久-1资金\n<首次达到150层>以上效果改为调度中心内所有干员的购买价格永久-1资金(整备区的【远见】干员也可用于激活盟约)","descRaw":"<每叠加<@autochess.dgreen>10层>获得一次<@ba.vup>2资金\n<首次达到<@autochess.dgreen>80层>所有【远见】干员购买价格<@ba.vup>永久-1资金\n<首次达到<@autochess.dgreen>150层>以上效果改为调度中心内所有干员的购买价格<@ba.vup>永久-1资金(整备区的【远见】干员也可用于激活盟约)","effectId":"bondeffect_visi","effectName":"远见","effectDesc":"<每叠加10层>获得一次2资金\n<首次到达80层>所有【远见】干员购买价格永久-1资金\n<首次到达150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescRaw":"<每叠加<@ba.vup>10层>获得一次<@ba.vup>2资金\n<首次到达<@ba.vup>80层>所有【远见】干员购买价格永久-1资金\n<首次到达<@ba.vup>150层>上述效果改为所有干员购买价格永久-1资金\n整备区的【远见】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":10,"count":2,"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"},"buffs":[{"key":"bond_layer_gain_coin","bb":{"layer":10,"count":2},"bbStr":{}},{"key":"bond_multi_layer_char_goods_price_bond_discount","bb":{"layer1":80,"discount":1,"layer2":150},"bbStr":{"bond":"visiShip"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_11_a","chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_02_a","chess_char_3_03_a","chess_char_3_14_a","chess_char_4_04_a","chess_char_4_07_a","chess_char_5_01_a","chess_char_5_21_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"Each time cumulative L passes a multiple of 10: +2 gold."},{"need":"first time L >= 80","effect":"All 远见 operators' shop price permanently -1."},{"need":"first time L >= 150","effect":"Replaces the above: every operator in the shop permanently -1 (overrides, does not stack; 3/27 update)."}],"formulas":{"goldPayouts":"2 * floor(L/10)"},"layerGain":"寒檀 进入/结束休整期 +4 each; 伊内丝 +5 own active bonds; 赫默 +2; 圣约送葬人 +3 per 7 bullets (<=21/battle); 风笛 kills +2; 机变 \"风笛的盟誓\" +8.","assumed":["no floor but 0 (owner's decision 2026-10-04; a floor of 1 was assumed until 0.1.3)"]}},"miraShip":{"bondId":"miraShip","name":"奇迹","identifier":16,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_miraShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"every","effect":"bond_layer_gain_coin"}],"desc":"刷新调度中心时,有概率使下次刷新不消耗资金(受层数影响)\n<每叠加100层>获得20资金(整备区的【奇迹】干员也可用于激活盟约)","descRaw":"刷新调度中心时,有概率使下次刷新<@ba.vup>不消耗资金<@autochess.gray>(受层数影响)\n<每叠加<@autochess.dgreen>100层>获得<@ba.vup>20资金(整备区的【奇迹】干员也可用于激活盟约)","effectId":"bondeffect_mira","effectName":"奇迹","effectDesc":"刷新调度中心时,有{0:0%}(受层数影响)概率使下次刷新不消耗资金\n<每叠加100层>获得20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescRaw":"刷新调度中心时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率使下次刷新不消耗资金\n<每叠加<@ba.vup>100层>获得<@ba.vup>20资金\n整备区的【奇迹】干员也可用于激活盟约","effectDescParams":[{"index":0,"format":"0%","base":"baseprob","perStack":"prob"}],"bb":{"probk":0.3,"prob":0.003,"baseprob":0.18,"layer":100,"count":20},"bbStr":{},"buffs":[{"key":"bond_refresh_shop_next_free","bb":{"probk":0.3,"prob":0.003,"baseprob":0.18},"bbStr":{}},{"key":"bond_layer_gain_coin","bb":{"layer":100,"count":20},"bbStr":{}}],"baseParams":["baseprob"],"perStackParams":["prob"],"members":["chess_char_1_11_a","chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_15_a","chess_char_4_26_a","chess_char_5_04_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"visibleMembers":["chess_char_2_11_a","chess_char_3_01_a","chess_char_3_19_a","chess_char_4_26_a","chess_char_5_15_a","chess_char_5_20_a","chess_char_5_23_a","chess_char_6_07_a"],"spec":{"tiers":[{"need":"2 distinct (board + bench)","effect":"After each shop refresh, if the player has 0 free refreshes: with p = 0.18 + 0.003*L gain 1 free refresh."},{"need":"every 100 layers","effect":"+20 gold."}],"formulas":{"p":"min(1, 0.18 + 0.003*L)","goldPayouts":"20 * floor(L/100)"},"layerGain":"维娜·维多利亚 +2 per distinct-tier 奇迹; 录武官 获得时 +3; 伺夜 kills +1; 引星棘刺 +4 self & front; 华法琳 (奇迹 member) gives the operator in front \"开技能时 +1 own active bonds\" (data: <=7/battle, elite +2 <=14; PRTS 3/27 patch note says cap raised to 12/24).","notes":["blackboard probk = 0.3: meaning unknown (not in any description) [UNKNOWN]."]}},"investShip":{"bondId":"investShip","name":"投资人","identifier":17,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_investShip","activeCount":3,"thresholds":[3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD_AND_DECK","countsHand":true,"countsGoldenOnly":false,"activeType":"ALL","isActiveInDeck":false,"noStack":false,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":100,"mode":"reach","effect":"bond_layer_char_garrison_bonus"}],"desc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次(整备区的【投资人】干员也可用于激活盟约)","descRaw":"干员的“获得时”类特质每次<@ba.vup>触发2次\n<达到<@autochess.dgreen>100层>“获得时”类特质每次<@ba.vup>触发3次(整备区的【投资人】干员也可用于激活盟约)","effectId":"bondeffect_invest","effectName":"投资人","effectDesc":"干员的“获得时”类特质每次触发2次\n<达到100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescRaw":"干员的“获得时”类特质每次触发2次\n<达到<@ba.vup>100层>“获得时”类特质每次触发3次\n整备区的【投资人】干员也可用于激活盟约","effectDescParams":[],"bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"},"buffs":[{"key":"bond_layer_char_garrison_bonus","bb":{"layer":0,"count":2},"bbStr":{"event":"SERVER_GAIN"}},{"key":"bond_layer_char_garrison_bonus","bb":{"layer":100,"count":3},"bbStr":{"event":"SERVER_GAIN"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_16_a","chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"visibleMembers":["chess_char_2_19_a","chess_char_3_04_a","chess_char_5_14_a","chess_char_5_17_a"],"spec":{"tiers":[{"need":"3 distinct (board + bench)","effect":"Every \"获得时\" (SERVER_GAIN) trait of every operator triggers 2 times."},{"need":"L >= 100","effect":"Triggers 3 times."}],"formulas":{"gainTraitRepeat":"2 if L < 100 else 3"},"layerGain":"山 休整期结束 +1 per operator gained this round; 机变 \"诗怀雅的盟誓\" +10, \"银灰的盟誓\" +8; generic sources.","howToPlay":"Pair with high \"获得时 +N 自身所属盟约\" operators (忍冬 +6, 锏 +8, 星熊 +8, 雪猎 +5) - their layers double/triple."}},"raidShip":{"bondId":"raidShip","name":"突袭","identifier":18,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_raidShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[{"layer":50,"mode":"reach","effect":"env_gbuff_new"}],"desc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值提升(受层数影响)\n<达到50层>所有干员攻击速度+50","descRaw":"【突袭】干员<@ba.vup>10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即<@ba.vup>再部署至一名地面敌人周围,期间<@ba.vup>攻击力和<@ba.vup>生命值提升<@autochess.gray>(受层数影响)\n<达到<@autochess.dgreen>50层>所有干员攻击速度<@ba.vup>+50","effectId":"bondeffect_raid","effectName":"突袭","effectDesc":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值+{0:0%}(受层数影响)\n <达到50层>所有干员攻击速度+50","effectDescRaw":"【突袭】干员10秒内未进行攻击或技能就绪时,若范围内没有敌人,则保留技力立即再部署至一名地面敌人周围,期间攻击力和生命值<@ba.vup>+{0:0%}<@ba.acrem>(受层数影响)\n <达到<@ba.vup>50层>所有干员攻击速度<@ba.vup>+50","effectDescParams":[{"index":0,"format":"0%","base":"base_atk","perStack":"atk_per_stack"}],"bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"},"buffs":[{"key":"env_gbuff_new","bb":{"base_attack_speed":0,"attack_speed_per_stack":0,"base_atk":0.25,"atk_per_stack":0.01,"base_max_hp":0.25,"max_hp_per_stack":0.01,"power_bond_stack_cnt":50,"power_attack_speed":50,"no_attack_duration":10},"bbStr":{"key":"act1autochess_bond_eff_raid"}}],"baseParams":["base_atk"],"perStackParams":["atk_per_stack"],"members":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"visibleMembers":["chess_char_1_18_a","chess_char_2_09_a","chess_char_3_05_a","chess_char_3_12_a","chess_char_4_04_a","chess_char_4_16_a","chess_char_5_07_a","chess_char_6_15_a","chess_char_6_17_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"If a 突袭 member has not attacked for 10 s, or its skill is ready, and no enemy is in its range: it is immediately redeployed (keeping SP) onto a tile next to a ground enemy; while in that redeployed state its ATK and maxHP x(1 + 0.25 + 0.01*L)."},{"need":"L >= 50","effect":"ALL operators ASPD +50."}],"formulas":{"atkHpMultiplier":"1.25 + 0.01*L","idleSec":"10","aspdAll(L>=50)":"50"},"layerGain":"史尔特尔 部署时 +8 (<=50/battle); 休谟斯 each 2 kills +1; 瑕光 +4/deploy; 斯卡蒂; 伊内丝 +5; 机变 \"斯卡蒂的盟誓\" +8, \"德克萨斯的盟誓\" +10.","assumed":["target enemy = the ground enemy closest to the player's objective (its own field's; another field's only while its own has none) that the member can reach; landing tile = the nearest free deployable tile within 2 tiles of it from which the member's attack range covers it. No such tile for any of the 8 most advanced -> no jump; the poll looks again every 0.25 s (GitHub issue #51 - up to 0.1.1 the idle trigger landed out of reach and hopped every 10 s; DESIGN §22.2)","the buff lasts until the operator leaves the field"]}},"indomShip":{"bondId":"indomShip","name":"不屈","identifier":19,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_indomShip","activeCount":2,"thresholds":[2,3],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":false,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"地面干员被击倒时,有概率立即重新部署(受层数影响)\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","descRaw":"<@ba.vup>地面干员被击倒时,有概率立即<@ba.vup>重新部署<@autochess.gray>(受层数影响)\n<在场<@autochess.dgreen>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员<@ba.vup>技力+5","effectId":"bondeffect_indom","effectName":"不屈","effectDesc":"地面干员被击倒时,有{0:0%}(受层数影响)概率立刻重新部署\n<在场3名不同【不屈】干员>地面干员被击倒时使场上所有干员技力+5","effectDescRaw":"<@ba.vup>地面干员被击倒时,有<@ba.vup>{0:0%}<@ba.acrem>(受层数影响)概率立刻重新部署\n<在场<@ba.vup>3名不同【不屈】干员><@ba.vup>地面干员被击倒时使场上所有干员技力<@ba.vup>+5","effectDescParams":[{"index":0,"format":"0%","base":"base_prob","perStack":"prob_per_stack"}],"bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"},"buffs":[{"key":"env_gbuff_new","bb":{"base_prob":0.18,"prob_per_stack":0.004,"power_bond_stack_cnt":0,"sp":5,"power_bond_char_cnt":3},"bbStr":{"key":"act1autochess_bond_eff_indom"}}],"baseParams":["base_prob"],"perStackParams":["prob_per_stack"],"members":["chess_char_1_05_a","chess_char_1_20_a","chess_char_2_03_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"visibleMembers":["chess_char_1_20_a","chess_char_2_12_a","chess_char_3_16_a","chess_char_4_07_a","chess_char_5_06_a","chess_char_5_13_a","chess_char_6_06_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"When a ground operator (地面干员 = melee position, on any tile) is knocked out / retreats / swaps 替身<->本体: with p = min(1, 0.18 + 0.004*L) it is redeployed at once (next deployment has 0 redeploy time and 0 cost). Also consumes a \"复活\" charge if it had one."},{"need":"3 distinct","effect":"When a ground (melee-position) operator is knocked out: every operator on the field +5 SP."}],"formulas":{"p":"min(1, 0.18 + 0.004*L)","reaches100%AtL":"205"},"layerGain":"雷蛇 休整期结束 +1; 砾 被击倒 +2; 归溟幽灵鲨 +5; 风笛 kills +2; 机变 \"风笛的盟誓\" +8."}},"maniShip":{"bondId":"maniShip","name":"调和","identifier":20,"isCore":false,"bondType":"REGULAR","bondOrder":1,"powerIdList":[],"iconId":"icon_maniShip","activeCount":1,"thresholds":[1],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"MANI","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"激活时使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","descRaw":"激活时使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectId":"bondeffect_mani","effectName":"调和","effectDesc":"激活时可以使场上核心盟约的激活人数+1,【调和】干员享受已激活的核心盟约的效果","effectDescRaw":"激活时可以使场上核心盟约的<@ba.vup>激活人数+1,【调和】干员<@ba.vup>享受已激活的核心盟约的效果","effectDescParams":[],"bb":{"count":1},"bbStr":{},"buffs":[{"key":"other_bond_add_trigger_cnt","bb":{"count":1},"bbStr":{}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_6_11_a"],"visibleMembers":["chess_char_6_11_a"],"spec":{"tiers":[{"need":"1 调和 on board","effect":"Every core bond's member count +1; 调和 operators receive the effects of all active core bonds."}],"members":"缪尔赛思 (T6) and 盟约·辅助干员 (T1, hidden; given in round 1 by strategy Pith \"优等生\").","assumed":["+1 only for core bonds with >=1 real member","one +1 total no matter how many 调和 operators"]}},"emptyShip":{"bondId":"emptyShip","name":"协防干员","identifier":21,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_emptyShip","activeCount":2,"thresholds":[2],"maxCount":null,"thresholdTemplate":"count_threshold_upward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"所有干员受到的物理和法术伤害-20%,【协防干员】伤害提升至120%,精锐【协防】干员造成伤害提升至140%","descRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%,【协防干员】伤害提升至<@ba.vup>120%,精锐【协防】干员造成伤害提升至<@ba.vup>140%","effectId":"bondeffect_empty","effectName":"协防干员","effectDesc":"所有干员受到的物理和法术伤害-20%;【协防干员】伤害提升至120%,精锐【协防干员】造成伤害提升至140%","effectDescRaw":"所有干员受到的物理和法术伤害<@ba.vup>-20%;【协防干员】伤害提升至<@ba.vup>120%,精锐【协防干员】造成伤害提升至<@ba.vup>140%","effectDescParams":[],"bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"},"buffs":[{"key":"env_gbuff_new","bb":{"damage_resistance":0.2,"damage_scale_normal":1.2,"damage_scale_extra":1.4},"bbStr":{"key":"act1autochess_bond_eff_assis"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_15_a","chess_char_2_14_a","chess_char_3_10_a","chess_char_4_08_a","chess_char_4_25_a","chess_char_5_09_a","chess_char_5_10_a","chess_char_6_12_a"],"visibleMembers":["chess_char_2_14_a","chess_char_3_10_a","chess_char_4_25_a","chess_char_5_10_a","chess_char_6_12_a"],"spec":{"tiers":[{"need":"2 distinct","effect":"ALL operators take -20% physical and magic damage; 协防干员 members deal damage x1.2 (elite 协防 x1.4)."}],"meaning":"\"协防干员\" (assist operators) = fallback bond (constData.fallbackBondId). DIY/self-selected 6-star operators whose faction matches no core bond become 协防干员; some preset operators (调香师, 松果, 瑰盐, 魔王, 铃兰, 迷迭香, 盟约·辅助干员) are natively 协防.","formulas":{"damageTakenMul":"0.8","memberDamageMul":"1.2 (elite 1.4)"},"notes":["noStack=true: no layer-scaled effect, but layers are still counted (巴哈姆特)."]}},"soloShip":{"bondId":"soloShip","name":"独行","identifier":22,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_soloShip","activeCount":1,"thresholds":[1],"maxCount":1,"thresholdTemplate":"count_threshold_downward","countMode":"BOARD","countsHand":false,"countsGoldenOnly":false,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":10,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","descRaw":"<在场1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15(在场2名及以上【独行】干员时失效)","effectId":"bondeffect_solo","effectName":"独行","effectDesc":"<在场1名【独行】干员>【独行】干员攻击力和生命值+60%,初始技力+15(在场2名及以上【独行】干员时失效)","effectDescRaw":"<在场<@ba.vup>1名【独行】干员>【独行】干员攻击力和生命值<@ba.vup>+60%,初始技力<@ba.vup>+15<@ba.acrem>(在场2名及以上【独行】干员时失效)","effectDescParams":[],"bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"},"buffs":[{"key":"env_gbuff_new","bb":{"atk":0.6,"max_hp":0.6,"sp":15},"bbStr":{"key":"act2autochess_bond_eff_solo"}}],"baseParams":[],"perStackParams":[],"members":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"visibleMembers":["chess_char_1_08_a","chess_char_2_17_a","chess_char_3_17_a","chess_char_4_09_a","chess_char_4_18_a","chess_char_5_11_a"],"spec":{"tiers":[{"need":"exactly 1 distinct 独行 on board","effect":"That operator ATK +60%, maxHP +60%, +15 SP when deployed. Disabled when 2+ different 独行 operators are on the board."}],"formulas":{"atkMul":"1.6","hpMul":"1.6","spOnDeploy":"15"},"notes":["noStack=true"]}},"suntShip":{"bondId":"suntShip","name":"绝技","identifier":23,"isCore":false,"bondType":"REGULAR","bondOrder":2,"powerIdList":[],"iconId":"icon_suntShip","activeCount":2,"thresholds":[2,5],"maxCount":null,"thresholdTemplate":"count_threshold_upward_golden","countMode":"BOARD_ALL_CHESS","countsHand":false,"countsGoldenOnly":true,"activeType":"BATTLE","isActiveInDeck":false,"noStack":true,"weight":0,"maxInactiveBondCount":-1,"layerMilestones":[],"desc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","descRaw":"<在场<@autochess.dgreen>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@autochess.dgreen>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectId":"bondeffect_sunt","effectName":"绝技","effectDesc":"<在场2名精锐状态的干员>精锐状态的干员攻击力+30%\n<在场5名精锐状态的干员>精锐状态的干员技力消耗-30%\n(所有干员的精锐状态均可激活本盟约)","effectDescRaw":"<在场<@ba.vup>2名精锐状态的干员>精锐状态的干员攻击力<@ba.vup>+30%\n<在场<@ba.vup>5名精锐状态的干员>精锐状态的干员技力消耗<@ba.vup>-30%\n<@ba.acrem>(所有干员的精锐状态均可激活本盟约)","effectDescParams":[],"bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"},"buffs":[{"key":"env_gbuff_new","bb":{"power_char_cnt":2,"ex_char_cnt":5,"power_atk":0.3,"sp_ratio":0.7},"bbStr":{"key":"act2autochess_bond_eff_sunt"}}],"baseParams":[],"perStackParams":[],"members":[],"visibleMembers":[],"spec":{"tiers":[{"need":"2 elite (精锐) operators on board (any operators, duplicates count)","effect":"All elite operators ATK +30%."},{"need":"5 elite operators on board","effect":"At battle start every elite operator and its summons have skill SP cost x0.7 (rounded down, may become 0)."}],"formulas":{"atkMul":"1.3","spCostMul":"floor(sp*0.7)"},"notes":["isHiddenCharList=true, chessIdList empty: no member operators; elites are not \"members\" of 绝技 (PRTS).","noStack=true"]}}} \ No newline at end of file diff --git a/docs/research/02-bonds.json b/docs/research/02-bonds.json index 4b1f3def..e4a2d3ec 100644 --- a/docs/research/02-bonds.json +++ b/docs/research/02-bonds.json @@ -2748,7 +2748,7 @@ "howToPlay": "Put cheap/high-tier fodder in front of 阿戈尔 carries: they steal base ATK and block, gain layers, and (5) revive. Tier-6 fodder gives +6 layers per battle.", "assumed": [ "5000 physical 流失 ignores DEF and shields", - "marked allied units are the player's own operators (devour hits allies)" + "marked allied units are operators of any player (devour hits allies): on a shared field a teammate's operator in front, standing or entering 联防 knocked out, is devoured too and the chain continues through a teammate's 阿戈尔 (the owner's decision of 2026-10-05: PRTS has no own-side limit)" ] }, "members": [ diff --git a/docs/research/02-bonds.md b/docs/research/02-bonds.md index 7e3cece0..fc2981fa 100644 --- a/docs/research/02-bonds.md +++ b/docs/research/02-bonds.md @@ -387,7 +387,7 @@ Members (11 chess, 10 in current shop pool; by tier in shop: {'1': 1, '2': 1, '3 - How layers are gained: Devour (tier per devoured unit, every battle); 幽灵鲨 被击倒 +3; 归溟幽灵鲨 被击倒/替身切换 +5 阿戈尔 +5 不屈; 斯卡蒂 each 2 kills +1 阿戈尔/坚守/突袭; 海霓 first kill (enemy or ally) +3 阿戈尔/奥术; 机变 "斯卡蒂的盟誓" +8. Strategy 克莱门莎: an 阿戈尔 knocked out adds layers = its tier. - How it plays: Put cheap/high-tier fodder in front of 阿戈尔 carries: they steal base ATK and block, gain layers, and (5) revive. Tier-6 fodder gives +6 layers per battle. - 5000 physical 流失: less the target's DEF (PRTS 作战机制: a 物理/法术流失 "会受到目标当前防御力/法术抗性影响而相应衰减"; DEF-free [ASSUMED] until 0.1.1), no shields, dodge or damage multipliers (a 流失) -- [ASSUMED] marked allied units are the player's own operators (devour hits allies) +- Marked units are allied operators (devour hits allies), whoever owns them: on a shared field (联防, boss) a teammate's operator in front — standing, or one that entered 联防 knocked out — is devoured too, with the same base ATK / block gains, and the chain continues through a teammate's 阿戈尔 (the owner's decision of 2026-10-05; PRTS "依次吞噬身前一格干员" has no own-side limit; GitHub #140 comment 4). Its knock-out is its owner's (their revives). The remake's two 联防 helpers stand on board cols 3–9 and 11–17 with the road column 10 between them, so on the current maps no teammate's operator is ever in front. - Bond item (with 变形同构体 grants this bond): 阿戈尔重刃 `chess_item_3_07_e` (2 gold: 攻击力+40%,攻击速度-10) - Garrisons that explicitly add layers to this bond: `garrison_38`, `garrison_40`, `garrison_46`, `garrison_131` (see section 4; plus the generic ones) - Garrisons that scale with this bond's layers: `garrison_07`, `garrison_09`, `garrison_10`, `garrison_12`, `garrison_84` diff --git a/server/sim/content/bonds/core.js b/server/sim/content/bonds/core.js index c4523784..4716a021 100644 --- a/server/sim/content/bonds/core.js +++ b/server/sim/content/bonds/core.js @@ -363,11 +363,14 @@ function egirDownAtStart(battle, u) { * out and back in the same pass still gives its marks). * 联防: the operators down since the end of their own combat (forced out by Battle.start) mark, are marked and resolve * their marks like standing ones, but nothing resolves on them (below; per players' reports, owner's decision 2026-10-04). - * Each devoured operator adds its tier to 阿戈尔 once (IN_BATTLE gain, disabled in 联防 / boss fields). + * Whose operator stands in front does not matter (PRTS "依次吞噬身前一格干员", no own-side limit; the owner's decision of + * 2026-10-05 after GitHub #140 comment 4): on a shared field (联防, boss) a teammate's operator — standing, or entering + * 联防 down — is marked like an own one, gives the same base ATK / block count, and the chain goes on through it when it + * is an 阿戈尔 (S.isMember: its own bonds). Its knock-out is its owner's (their bonds' revives, 不屈 …), credited to the + * marker as usual. Each devoured operator adds its tier to 阿戈尔 once (IN_BATTLE gain, disabled in 联防 / boss fields). * Tokens / devices / empty tiles are never devoured. */ function devour(battle, pid, bb, members) { - const memberSet = new Set(members); // 联防: an operator down at the end of its own combat (carryState.down — Battle.start forced it out right before // battleStart, FORCED_EXIT) takes part in the devour as if it stood on its tile, then stays out: it marks in its turn, // it is "the unit in front" of another (the chain goes on through it when it is a member), its base ATK / block count @@ -376,12 +379,14 @@ function devour(battle, pid, bb, members) { // report #3, GitHub #33 item 3), owner's decision 2026-10-04; until 0.1.2 the forced exit came first and the chain broke. const downAtStart = (u) => egirDownAtStart(battle, u); const order = members.filter((u) => S.onField(u) || downAtStart(u)).sort(egirOrder); + // the operator in front, whoever owns it (until 0.1.3 only the player's own): a living one, else one lying there since + // the 联防 start (carry.down, forced out) — a teammate's included const opAt = (u) => { const [r, c] = S.frontTile(u); - const a = S.allyAt(battle, r, c, pid); + const a = S.allyAt(battle, r, c); if (a) return S.isOp(a) && a.alive ? a : null; const d = battle.downOn(r, c); - return d && d.ownerId === pid && downAtStart(d) ? d : null; + return d && downAtStart(d) ? d : null; }; const markedBy = new Map(); // marker → [targets] const marks = []; @@ -396,7 +401,8 @@ function devour(battle, pid, bb, members) { if ((markedBy.get(t) ?? []).includes(m)) continue; seen.add(t); mine.push(t); - if (memberSet.has(t)) queue.push(t); + // through a marked 阿戈尔 (for the player's own operators: exactly its members; a teammate's by its own bonds) + if (S.isMember(battle, t, 'egirShip')) queue.push(t); } markedBy.set(m, mine); if (!mine.length) continue; diff --git a/test/content/feedback4-egir-unite.test.js b/test/content/feedback4-egir-unite.test.js new file mode 100644 index 00000000..bba5c3f3 --- /dev/null +++ b/test/content/feedback4-egir-unite.test.js @@ -0,0 +1,142 @@ +// test/content/feedback4-egir-unite.test.js — 阿戈尔's battle-start devour in 联防 (GitHub #105, #140 comment 4; the +// owner's decision of 2026-10-05). PRTS 盟约记录 阿戈尔: "战斗开始时【阿戈尔】干员依次吞噬身前一格干员" — no own-side limit: +// the operator on the front tile is devoured whoever owns it, a teammate's living operator or a teammate's operator +// that entered 联防 knocked out (carry.down, forced out right after the deployment), and the marker gains its base ATK +// and block count exactly as in a solo battle. 联防 still adds no layers ("该阶段不能叠加层数"). The remake's two 联防 +// helpers stand on board cols 3–9 and 11–17 (colOffset 8) with the road column 10 between them, so these fields put the +// teammate's operator on col 10 (a LOW tile the sim deploys on) to be in front. The last test runs the own-board case +// through unite.js's carry: a chain whose food is down since the own combat gives 联防 the gains of the own combat. + +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { makeBattle, checkInvariants } from '../helpers/battleHarness.js'; +import { uniteBattleOpts } from '../../server/match/unite.js'; +import { makeMatch } from '../match/harness.js'; +import { FORCED_EXIT } from '../../server/sim/constants.js'; + +const close = (a, b, eps = 1e-6, msg = '') => assert.ok(Math.abs(a - b) <= eps, `${msg} expected ${b}, got ${a}`); +const bondOn = (count, layers = 0) => ({ count, active: count >= 3, tier: count >= 5 ? 2 : count >= 3 ? 1 : 0, layers }); +const buffOf = (u, key) => u.buffs.find((b) => b.key === key) ?? null; +const devours = (h) => h.hooksOf('damaged').filter((c) => c.dmg && c.dmg.tags && c.dmg.tags.includes('bond:egir:devour')); + +const ULPIA = 'chess_char_5_05_a', GHOST = 'chess_char_2_07_a', GLADY = 'chess_char_4_12_a', DEEP = 'chess_char_1_04_a'; +const HN = 'chess_char_3_09_a', MIZUKI = 'chess_char_4_09_a', FODDER = 'chess_char_1_01_a'; + +/** p1's 3 阿戈尔: 乌尔比安 on (10,9) facing right — its front tile is field (10,10) — and two facing empty tiles. */ +const p1Units = () => [ + { uid: 1, kind: 'chess', chessId: ULPIA, row: 10, col: 9, dir: 'RIGHT' }, + { uid: 2, kind: 'chess', chessId: GLADY, row: 12, col: 3, dir: 'RIGHT' }, + { uid: 3, kind: 'chess', chessId: DEEP, row: 12, col: 5, dir: 'RIGHT' }, +]; +const player = (playerId, seat, colOffset, units, bonds) => ({ playerId, seat, side: 'L', colOffset, units, bonds, bandId: null, playerEffects: [] }); + +/** + * A battle where `front` (chess ids, left to right) stands on field (10,10), (10,11) …: owned by p1 itself (`owner` + * 'own', board cols 10, 11 …) or by the teammate p2 (`owner` 'mate', colOffset 8: board cols 2, 3 …). + */ +function field({ kind = 'unite', owner = 'own', front = [FODDER], extra = {}, p2Bonds = {}, p2Units = [] } = {}) { + const lane = front.map((chessId, i) => ({ uid: 100 + i, kind: 'chess', chessId, row: 10, dir: 'RIGHT', ...(extra[i] || {}) })); + const players = owner === 'own' + ? [player('p1', 0, 0, [...p1Units(), ...lane.map((u, i) => ({ ...u, col: 10 + i }))], { egirShip: bondOn(3, 10) })] + : [player('p1', 0, 0, p1Units(), { egirShip: bondOn(3, 10) }), + player('p2', 1, 8, [...lane.map((u, i) => ({ ...u, col: 2 + i })), ...p2Units], p2Bonds)]; + const h = makeBattle({ kind, players, autoFinish: false, timeLimit: 60, hooks: ['damaged', 'death', 'deploy', 'kill', 'layerGain'], captureNoisy: true }); + h.step(); + return h; +} + +test('联防: an 阿戈尔 devours a teammate\'s living operator in front — the same base ATK and block count as an own one, the 物理流失 lands, no layers', () => { + const solo = field({ kind: 'normal' }); + const own = field(); + const mate = field({ owner: 'mate' }); + const ref = buffOf(solo.unit(1), 'bond:egir:devour'); + const fodderBase = solo.unit(100).base; + assert.ok(ref, 'solo: 乌尔比安 devours the operator in front'); + close(ref.mods.atkFlat, fodderBase.atk, 1e-9, 'its base ATK'); + assert.equal(ref.mods.blockCnt, fodderBase.blockCnt, 'its block count'); + for (const [tag, h] of [['own', own], ['teammate\'s', mate]]) { + const ulpia = h.unit(1), t = h.unit(100); + assert.deepEqual(buffOf(ulpia, 'bond:egir:devour')?.mods, ref.mods, `${tag}: the solo gains`); + close(ulpia.s.atk, own.unit(1).s.atk, 1e-6, `${tag}: 乌尔比安's ATK`); + assert.equal(ulpia.s.blockCnt, solo.unit(1).s.blockCnt, `${tag}: the block count`); + const d = devours(h); + assert.deepEqual(d.map((c) => [c.source.uid, c.target.uid]), [[1, 100]], `${tag}: one mark`); + close(d[0].amount, devours(solo)[0].amount, 1e-6, `${tag}: the same 物理流失`); + assert.ok(!t.alive && h.hooksOf('kill').some((c) => c.victim === t && c.killer === ulpia), `${tag}: knocked out, credited to 乌尔比安`); + assert.equal(h.b.getPlayer('p1').bonds.egirShip.layers, 10, `${tag}: 联防 adds no layers`); + assert.equal(h.hooksOf('layerGain').length, 0, `${tag}: no layer gain at all`); + checkInvariants(h.b); + } + assert.equal(solo.b.getPlayer('p1').bonds.egirShip.layers, 10 + 1, 'solo: the devoured tier as layers'); + assert.equal(mate.unit(100).ownerId, 'p2'); +}); + +test('联防: a teammate\'s operator that entered 联防 down is devoured as if it stood — the same gains, nothing lands on it, it stays forced out', () => { + const up = field({ owner: 'mate' }); + const down = field({ owner: 'mate', extra: { 0: { carryState: { down: true } } } }); + const ownDown = field({ extra: { 0: { carryState: { down: true } } } }); + const t = down.unit(100); + assert.ok(!t.alive && t.removeReason === FORCED_EXIT && down.b.isDown(t), 'the teammate\'s operator lies on (10,10), forced out'); + for (const [tag, h] of [['teammate\'s', down], ['own', ownDown]]) { + assert.deepEqual(buffOf(h.unit(1), 'bond:egir:devour')?.mods, buffOf(up.unit(1), 'bond:egir:devour').mods, `${tag} down: the gains of the standing one`); + assert.equal(devours(h).length, 0, `${tag} down: no 物理流失 on it`); + assert.equal(h.hooksOf('death').filter((c) => c.unit === h.unit(100) && c.reason === 'killed').length, 0, `${tag} down: no knock-out`); + assert.equal(h.b.getPlayer('p1').bonds.egirShip.layers, 10, `${tag} down: no layers`); + checkInvariants(h.b); + } +}); + +test('联防: the chain goes on through a teammate\'s 阿戈尔 — the gains equal the same chain of own operators; its knock-out spends its owner\'s 5-tier slot', () => { + const own = field({ front: [GHOST, FODDER] }); + // p2 holds 5 阿戈尔 (5-tier active): 幽灵鲨 in front of 乌尔比安, four more on its board facing empty tiles + const p2Units = [HN, MIZUKI, GLADY, DEEP].map((chessId, i) => ({ uid: 200 + i, kind: 'chess', chessId, row: 12, col: 3 + 2 * i, dir: 'RIGHT' })); + const mate = field({ owner: 'mate', front: [GHOST, FODDER], p2Units, p2Bonds: { egirShip: bondOn(5) } }); + const ref = buffOf(own.unit(1), 'bond:egir:devour'); + close(ref.mods.atkFlat, own.unit(100).base.atk + own.unit(101).base.atk, 1e-9, 'own chain: 幽灵鲨 and, through her, the fodder'); + assert.deepEqual(buffOf(mate.unit(1), 'bond:egir:devour')?.mods, ref.mods, 'the teammate\'s chain gives the same'); + assert.deepEqual(devours(mate).map((c) => [c.source.uid, c.target.uid]), devours(own).map((c) => [c.source.uid, c.target.uid])); + const ghost = mate.unit(100); + assert.equal(mate.hooksOf('death').filter((c) => c.unit === ghost && c.reason === 'killed').length, 1, '幽灵鲨 knocked out by p1\'s mark'); + assert.ok(ghost.alive && mate.hooksOf('deploy').some((c) => c.unit === ghost && !c.initial), 'p2\'s 5-tier revives her at once'); + assert.ok(!own.unit(100).alive, 'p1 has no 5-tier: its own 幽灵鲨 stays down'); + assert.equal(mate.b.getPlayer('p1').bonds.egirShip.layers, 10, 'no layers'); + checkInvariants(mate.b); +}); + +// --------------------------------------------------------------------------------------------------------------------- +// the own board through unite.js: a chain whose food is down since the own combat + +let gdCache = null; +const gd = () => (gdCache ??= makeMatch({ mode: 'coop', humans: 3, seed: 1, fake: true }).start().m.gd); + +test('联防 through unite.js: food knocked out by the own combat\'s devour enters down, and 乌尔比安 gets exactly the own combat\'s base ATK and block count', () => { + // 乌尔比安 → 幽灵鲨 → 歌蕾蒂娅 → fodder on row 10 (3 阿戈尔: no revive), 30 s own combat + const ids = [ULPIA, GHOST, GLADY, FODDER]; + const units = ids.map((chessId, i) => ({ uid: i + 1, kind: 'chess', chessId, row: 10, col: 3 + i, dir: 'RIGHT', items: [] })); + const bonds = { egirShip: bondOn(3, 10) }; + const own = makeBattle({ players: [player('p1', 0, 0, units, bonds)], autoFinish: false, timeLimit: 30 }); + own.runToEnd(60); + const gain = buffOf(own.unit(1), 'bond:egir:devour').mods; + const unitsEnd = own.result().perPlayer.p1.unitsEnd; + assert.deepEqual(unitsEnd.filter((u) => !u.alive).map((u) => u.uid).sort(), [2, 3, 4], 'the food is down at the end'); + // the helper's 联防 input as unite.js builds it from that result + const ps = { + playerId: 'p1', seat: 0, + board: new Map(units.map((u) => [`${u.row},${u.col}`, { uid: u.uid, kind: 'chess' }])), + battleInput: ({ side, colOffset, carry }) => ({ + ...player('p1', 0, colOffset, units.map((u) => ({ ...u, ...(carry.has(u.uid) ? { carryState: carry.get(u.uid) } : {}) })), bonds), side, + }), + }; + const m = { gd: gd(), round: 3, lastResults: new Map([['p1', { unitsEnd }]]), dispatch() {} }; + const { players } = uniteBattleOpts(m, { helpers: [ps], leaked: [] }, 60); + assert.deepEqual(players[0].units.filter((u) => u.carryState?.down).map((u) => u.uid), [2, 3, 4]); + const u = makeBattle({ kind: 'unite', players, autoFinish: false, timeLimit: 60 }); + u.step(); + const ulpia = u.unit(1); + assert.deepEqual(buffOf(ulpia, 'bond:egir:devour')?.mods, gain, 'the own combat\'s gains'); + close(gain.atkFlat, [2, 3, 4].reduce((s, uid) => s + u.unit(uid).base.atk, 0), 1e-9, '幽灵鲨 + 歌蕾蒂娅 + fodder base ATK'); + assert.equal(gain.blockCnt, [2, 3, 4].reduce((s, uid) => s + u.unit(uid).base.blockCnt, 0)); + for (const uid of [2, 3, 4]) assert.ok(!u.unit(uid).alive && u.unit(uid).removeReason === FORCED_EXIT, `${uid} forced out`); + assert.equal(u.b.getPlayer('p1').bonds.egirShip.layers, 10, 'no layers in 联防'); + checkInvariants(u.b); +});