0.2.5-dev: 驭械术师 normal attacks keep the operator's own hit plus one drone hit, the drone multiplier and per-target map reset on redeploy, 洛洛 S2 keeps its lock until a kill or the skill ends (PRs #537 / #536 / #535 by @Xinglan233, ported); hit tiles use the official round-half-to-even with an edge inset (PR #520 by @Cloudnyco, ported); bots softly avoid living teammates' opening factions until they are eliminated (PR #518 by @IceCodeNew, ported with changes); golden: 43 more scenarios move, each named in docs/history/0.2.5.md

This commit is contained in:
sganggs committed 2026-10-12 14:45:01 +08:00
1 parent 7fd0478dc0
commit e0f3771821
41 files changed
+1939 -779

No files matched your search

+5
View File
@@ -16,6 +16,11 @@
- 修正韩语界面和维多利亚英文按装备逐件加成的表述。
- 修复干员一次攻击后模型继续循环、多挥一次的问题,保留迟到消息的现有前摇同步方式。
- 自在重生后的无敌期不再被普攻或需要可选目标的自动技能锁定;修复 AI 托管遮罩挡住“在此页面继续”按钮。
- 驭械术师未释放的浮游改为本体攻击再加一份附加伤害(初始相当于攻击力 20%,同一目标每次 +15,上限 110%);技能放出的浮游仍造成技能伤害(PR #537,感谢 @Xinglan233)。
- 干员再部署时浮游倍率回到初始值,并清掉按目标记住的倍率;自由移动仍保留。已经飞出的浮游按命中时的倍率结算(PR #536,感谢 @Xinglan233)。
- 洛洛二技能放出的浮游在目标离开攻击范围后继续锁定,只在击杀或技能结束时返回;技能期间不再叠加未释放浮游的附加伤害(PR #535,感谢 @Xinglan233)。
- 受击格按官方四舍六入五成双取整,被挡在场地边缘的敌人留在边缘那一格(PR #520,感谢 @Cloudnyco)。
- AI 选开局策略和构筑重心时,会软性让开仍在场队友已经选择的阵营;队友淘汰后取消。不锁库存,也不阻止立刻合成(PR #518 / #514,感谢 @IceCodeNew)。
## 0.2.4 — 2026-10-11
+6 -5
View File
@@ -545,7 +545,7 @@ returns their current `weight` (including modifiers). The same tick's count and
list and budget (DESIGN §28.27); this is local to the kit, not a change to general displacement.
**Hit areas (`body.js`, user playtest #5 item 10).** A regular enemy is a point: in a grid range when the tile of its
position (`round(y)`, `round(x)`) is a range tile, in a radius when its position is (DESIGN §3). A huge enemy (巨型单位:
position (`roundHalfEven(y)`, `roundHalfEven(x)` — PRTS 作战机制 "四舍六入五成双"; `Math.round` would take 2.5 to 3) is a range tile, in a radius when its position is (DESIGN §3). An enemy held on the field edge is inset by `FIELD_EDGE_INSET` (1/1048576) [ASSUMED] so that rounding keeps it on the edge tile; movement, knockback and a unit's standing tile for range keys still use `Math.round` (§30.20). A huge enemy (巨型单位:
`enemy.hitArea` from data/enemies.json `hitArea` — 假想敌:胄 / 管 / 盐风主教昆图斯 / 阿利斯泰尔 / “萨米的意志”, PRTS
"受击判定区域为长4.95、宽2.95的长方形,向上偏移1.0") is hit anywhere on a rectangle `w` × `h` tiles centred on its position
moved `dx` columns right / `dy` rows up: it occupies every tile the rectangle overlaps (`bodyKeys` — 5 × 3 tiles; PRTS
@@ -1123,7 +1123,7 @@ Element conventions of the kits (user playtest #5 #3; official term dictionary:
targeting: { maxTargets, rangeGrid, rangeExtend, priority, allInRange, canHitFly,
noRangeExtend /* the skill's range ignores the unit's 攻击距离 (rangeExtend): 信仰搅拌机 S3, PRTS 备注 */,
showOwnRange /* rangeGrid only selects targets, no official range change: the card keeps the unit's own range */ },
attack: { dmgType, atkScale, healScale, splashRadius, splashScale, hits, projectile, maxTargets, dmgMul,
attack: { dmgType, atkScale, healScale, splashRadius, splashScale, hits, funnelMul, funnelBodyHits, projectile, maxTargets, dmgMul,
chain: {count, falloff, radius, sluggish}, heal: {mode, count, falloff, hpAtMost /* targets at or below this HP ratio only */}, onHitStatus: {key, duration, value},
onHit(ctx), // once per attack (main target; target may be null for a splash landing)
onEachHit(ctx) }, // per victim: main, every splash / chain victim — ctx += { dealt, kind:'main'|'splash'|'chain', isSplash, isChain, main, attackId }
@@ -1208,10 +1208,11 @@ chess_char_2_07_a: (bb) => ({
```
**3. Instant burst caster — 至简 `chess_char_3_13_a` 神工意匠** (bb `atk_scale 1.3, ct 2`; next attack 130 % arts, hits
twice; 2 charges; the funnel profile already ramps damage on the same target):
twice; 2 charges; the funnel profile's unreleased drones are additional damage that ramps on the same target, and this
charged attack sets two body hits):
```js
chess_char_3_13_a: (bb) => ({
skill: { kind: 'charges', attack: { atkScale: bb.atk_scale, hits: 2, dmgType: 'arts' } },
skill: { kind: 'charges', attack: { atkScale: bb.atk_scale, hits: 2, funnelBodyHits: 2, dmgType: 'arts' } },
}),
```
An AoE instant (德克萨斯 剑雨, bb `stun 2`: two hits of 120 % arts around her + stun) uses `onStart` instead:
@@ -1350,7 +1351,7 @@ header of professions.js).
| loopshooter | 回环射手 (user playtest #3): every attack throws a boomerang (`ai.js throwBoomerang`, projectile `'boomerang'`) out to the target at 15 tiles/s — it hits on arrival — and back to the thrower's current position at 3.75 tiles/s without damage (PRTS 跃跃 "投射物飞行速度15,返回时飞行速度3.75"); attacks only while holding it (every boomerang thrown caught — "必须回收全部回旋投掷物才可以进行下一次攻击", `unit.trait.boomerangsOut`) and with the attack cooldown ready, so the real interval is the longer of the two; a target dead mid-flight is not hit (it still flies to the last position and back); knocked out / withdrawn ⇒ lost, a redeployed thrower holds a fresh one; 跃跃 S2's extra boomerangs share the one flight (cnt hits); each catch fires `boomerangCaught`, and an attack profile's `boomerangOnward(ctx)` flies it on after the first hit before it turns back — ctx `hit` (a hit of the same attack), `comeBack(x, y)` once (a content error sends it back from the hit point): 娜仁图亚 S1 bounces, S2 dashes on and hits on its way back (kits/ops/op-narant.js) |
| reaperrange | hits every enemy in range; ×1.5 (bb atk_scale) on the trait front grid (or its own line ahead) — both along its direction |
| chain | chain N (trait text/bb max_target) with −15 % per jump (bb chain.atk_scale), 1.7-tile jumps (constants.js CHAIN_RADIUS, PRTS 溅射半径一览: 链术师 1.7; 1.8 until 0.1.1), sluggish on each hit |
| funnel | drone damage 20 % → +15 %/hit on the same target → 110 % (bb init/delta/max) |
| funnel | normal attack: one 100 % ATK body hit plus separate drone additional damage, 20 % → +15 %/hit on the same target → 110 % (bb init/delta/max; modules can change init/cap). `funnelMul` holds the drone ramp; `dmgMul` applies to both. Extra drones (`hits`) do not duplicate the body; an unreleased skill attack can set `funnelBodyHits` (至简 S2: two body hits and two additions). Body and additions share an `attackId`, but only the body is `isAttack`; additions carry `addition, funnel`. [ASSUMED] body instances first at the existing impact, one ramp per volley. Released-skill profiles keep their existing paths; this normal-attack correction does not settle their body behaviour. A normal deployment resets target, scale and any per-target ramp map to init, including revival against the same living target. A free move (`moveRedeploy`, the same carry as a 秘术师's stored energy and 乌尔比安 S3) keeps the ramp. An in-flight drone recomputes the ramp on impact. 洛洛 S2 detaches this multiplier from new body shots and inherits the trait ramp in an independent skill tick: `rockr:drone`, arts, `isSkill:true`, `isAttack:false`. Older projectiles cannot change its local ramp. A living selectable lock need not remain in body range; the drone returns on a kill or when the skill ends, and ending hands the ramp back and restores the normal multiplier (§30.19) |
| mystic | 秘术师 (PRTS 分支特性信息 秘术师, GitHub #181): at its attack check (the attack ready, able to act, not disarmed) with no valid target — no target, or its kit's `canAttack` false (深靛 never picks a bound enemy) — it stores one energy (`storeEnergy`, up to bb times: 3, 深靛's MSC-X 4), an attack action: the attack interval restarts; a full store idles with the attack ready. The energies leave with its next attack that happens (`releaseEnergy` in `performAttack`, after `beforeAttack`: an attack cancelled before its shot keeps them) and land with the main hit, one arts attack hit each (`hitsFn` reads the hit's `info.energy`); a redeployment holds none [ASSUMED]. 维伊 / 黑键 plug their own `storeEnergy` (转置能量, elite energies) into the same check |
| phalanx | no attack & DEF +200 %, RES +20 (bb) while the skill is off; while on, `rangeAoe`: each attack strikes every selectable enemy on its range at once (blocked enemies included; a stealthed one only when revealed or blocked), the same damage near and far, instant (`'beam'`) — "群体法术伤害" (secondary: Terra Wiki, Phalanx Caster: "attacks hit all enemies within their range"; supporting: PRTS 林 S3 备注 "单次普攻最多触发1次效果" — one normal attack can kill several — the same 锁定攻击范围 shape as the 轰击术师, and PRTS 溅射半径一览 documents no splash radius for it (it omits the 撼地者 too, so this is not proof); no primary source states a target cap; community report E3: it used to be one bolt + a 1.1 splash). 卡涅利安's charged S1 keeps the skill-off trait, 不攻击 included (kit `canAttack`, PRTS 备注) |
| physician | heal the lowest HP% injured ally in range (a skill `targeting.maxTargets` widens any heal profile) |
+26
View File
@@ -176,6 +176,32 @@ Profession traits (default behaviours implemented once in the engine, keyed by `
---
Unreleased funnel drones deal additional arts damage alongside the ordinary attack (PRTS 分支特性信息 驭械术师, §30.17).
The engine keeps a 100 % ATK body instance and a separate drone instance, each through mitigation and shields.
`funnelMul` holds only the drone ramp; the attack's `dmgMul` (至简's talent) is shared once. Extra attached drones
raise `hits`, not the body count; 至简's charged S2 sets `funnelBodyHits` to two. Both share one `attackId`, attack
hook and SP / charge use; additions have `addition` and `funnel` tags and do not count as `isAttack`. [ASSUMED] Body
instances precede additions at the existing projectile impact; consecutive hits keep one ramp per volley. This
correction covers ordinary attacks and unreleased skill attacks that set `funnelBodyHits`. Released skill paths retain
their existing behaviour; it does not establish whether those skills should also have body attacks (耶拉 S2, 澄闪 S1
and S2 remain to be reconciled separately).
Funnel ramps return to the initial scale on a normal deployment, including automatic revival against the same living
target (§30.18). The reset clears the current target, the scale and any per-target ramp map, and leaves other trait
state alone. A free move (`moveRedeploy`, the same carry as a 秘术师's stored energy and 乌尔比安 S3) keeps the ramp.
An in-flight shot recomputes the ramp when it lands, so a projectile launched before the reset can still step the new
ramp.
洛洛 S2 releases its trait drone into an independent skill tick (§30.19). Acquisition uses the body's normal target
selection; a living selectable lock stays valid outside the body's range and returns only when that enemy dies or the
skill ends. The body retains its own ranged ordinary attacks. The released ramp inherits the trait state but is
isolated from older projectiles, and while it is out the unreleased addition is off. Ending the skill returns that
ramp to the trait and restores the normal multiplier and the overload cap. S1 and other operators' funnel attacks keep
their existing paths. [ASSUMED] There is no flight delay; an untargetable lock is dropped and retargeted; body control
does not pause the released drone.
---
## 7. Content modules (server/sim/content + match/effectsMeta handlers)
Each domain file `server/sim/content/{tokens,bonds,garrisons,items,bands,enemies,bosses,devices,choices}.js` exports `install(battle)` (battle side; called once per Battle by `content/index.js → installContent`) and `registerMeta(registry)` (prep side; called once at server boot by `match/effectsMeta.js`, API documented in `docs/META.md`). Kits live one per file in `content/kits/ops/` (`export default { [baseChessId]: (bb, chess, def) => Kit }`), listed in `content/kits/index.js` (guide: `content/kits/README.md`). Content must be **data-driven from blackboards** (numbers never hard-coded when a blackboard key exists). Every effect gets at least one unit test in `test/content/*.test.js` using the `test/helpers/battleHarness.js` harness (provided by sim-core).
+4
View File
@@ -126,6 +126,10 @@ adjusted count and reset scope stay limited to its own operators; the DIY export
[ASSUMED] Bot purchasing applies one soft 18-point penalty to non-elite, non-DIY tier V/VI shared-pool cards whose
active bonds overlap another living teammate's opening strategy. Human and AI teammates are treated equally; it
neither reserves stock nor prevents a stronger purchase. Existing strategy presets and rehearsal counts are unchanged.
A living teammate's selected strategy also soft-reserves its bonds for bot strategy selection and focus planning
before any member is deployed (§30.21). The reservation ends when that teammate is eliminated. It does not hard-exclude
a strategy, reserve stock, or stop an immediate merge. A reserved strategy keeps a quarter of its unreserved draw
weight (`SOFT_BAND_RESERVE` = 0.25), so it can still be chosen. Mode-inactive bonds stay weight 0 (DESIGN §21.26).
[ASSUMED] AI reactions are cosmetic social choices, enabled by default and disabled with `SP_BOT_EMOTES=0`. Only
mixed human/AI matches emit them, through the existing whitelist and cooldown. A human emote gets at most one eligible
+126
View File
@@ -271,3 +271,129 @@ the preceding digest exactly; the changed partner/side also changes preparation
All five already differed from 0.2.4, so the final release-relative total remains 45 scenarios (§30.9 plus these
additional pairing effects). There are no new corpus cases or removals. The other follow-up fixes do not move this
corpus; their dedicated regressions cover the reported and newly found cases.
### 30.17 Funnel normal attacks keep a body hit
PR #537 by @Xinglan233. [PRTS 分支特性信息 驭械术师](https://prts.wiki/w/分支特性信息/data) says a drone that has not
been released by a skill deals additional damage on top of the operator's attack: 20 % ATK at first, +15 on the same
target, cap 110 %. A skill-released drone deals skill damage.
The profession used to return that ramp as the whole normal-attack multiplier, so the body hit was missing.
`resolveHit` now keeps a 100 % ATK body instance and separate drone instances. `funnelMul` holds only the drone ramp;
an attack's `dmgMul` (至简's talent) is applied once to both. Extra attached drones raise `hits`, not the body count.
至简's charged S2 sets `funnelBodyHits`, so two body hits and two additions share one ramp step. Both share one
`attackId` and one attack hook; only the body is `isAttack`. Additions carry `addition` and `funnel` and are not also
emitted as a normal attack.
[ASSUMED] Body instances precede additions at the existing projectile impact, and a multi-hit volley takes one ramp
step. This covers ordinary attacks and unreleased skill attacks that set `funnelBodyHits`. Released skill paths that
do not set it (耶拉 S2, 澄闪 S1 while its own drones are out) keep their existing skill-damage path and do not gain a
second body. Whether those released skills should also have a body attack is not settled here. 澄闪 S3 and the
skill-drone simulator on 淬羽 stay on their own `dealDamage` paths.
Kits that stored the ramp on `dmgMul` (至简, both 耶拉 forms, 澄闪 S2) now store it on `funnelMul`.
Tests: `test/sim/funnel-body.test.js`, and the funnel cases in `kits_t3`, `kits_t6`, `kits_alt_t6`, `kits_alt_t2`
and `op_gdglow`.
### 30.18 Redeploy resets the drone ramp
PR #536 by @Xinglan233. The same branch page says that changing target, or redeploying the operator, restores the
drone damage to its initial value at once.
`installFunnel` resets `funnelTarget`, `funnelScale` and the per-target `funnelMap` (耶拉 / 至简) on a normal
deployment, including automatic revival against the same living target. A free move (`moveRedeploy`, the same carry
as a 秘术师's stored energy and 乌尔比安 S3) keeps the ramp. An in-flight drone still applies the ramp it computes on
impact, so a shot launched before the reset can step the new ramp. That limit is documented and not changed.
Tests: `test/sim/funnel-redeploy.test.js`, `test/match/funnel-redeploy.test.js`.
### 30.19 洛洛 S2 keeps its lock outside her range
PR #535 by @Xinglan233. The official skill table `skchr_rockr_2`, as recorded in `docs/research/03-operators.md`,
says the released drone stays locked until the enemy is killed or the skill ends, then returns. Leaving her attack
range is not a return condition. The branch page says a skill-released drone deals skill damage, and that additional
damage belongs to drones that were not released.
S2 now runs one independent skill tick (`rockr:drone`, one drone at both ranks). While the skill is up the trait
multiplier is detached, so new body shots are ordinary attacks and the unreleased addition is off. The drone's hits
are arts skill damage (`isSkill`, not `isAttack`). It inherits the trait ramp on its own copy, so an older projectile
cannot change that ramp. A living selectable lock stays valid outside the body's range. Ending the skill writes the
ramp back and restores the multiplier and the overload cap. S1 and other operators' funnel attacks keep their
existing paths. 立于磐石 is unchanged.
[ASSUMED] There is no flight delay. A lock that becomes untargetable is dropped and the drone retargets. Body control
(stun and the like) does not pause the released drone.
Tests: `test/content/rockrock-s2-lock.test.js`, and the 洛洛 case in `kits_t1t2`.
### 30.20 Hit tiles use half-even rounding
PR #520 by @Cloudnyco. PRTS 作战机制 (oldid 433935, 「碰撞体积与位置识别」) says the struck unit's coordinates are
rounded half to even (四舍六入五成双) onto the tile they occupy. `Math.round` sends an exact .5 toward +∞, so an enemy
held on an outer half-tile was indexed off the board and dropped from the hit index.
`roundHalfEven` is used for hit tiles only: `body.js` `posKey`, the point cases of `bodyOnTile` and `bodyTileReach`,
the point-enemy index in `battle/queries.js`, and `targeting.js` `tileKeyOf`. Movement, knockback, `ai.js`, a unit's
standing tile for range keys, and `onFrontLine` still use `Math.round`. #519's signed-zero case in `powi` was already
on this candidate and is left as it is.
[ASSUMED] `FIELD_EDGE_INSET` = 1/1048576 pulls a clamped enemy just inside the outer half-tile, so half-even rounding
keeps it on the edge tile. An inset of 1/1024 was rejected because it moved unbalance steps. The inset has no
official source.
Tests: `test/sim/hit-tile-round.test.js`, `test/sim/detmath.test.js`, the edge landing in
`feedback5-raid-own-board`, the 连星 probe in `op_wang`, and the 麦哲伦 probe in `feedback5-wv-summon-triggers`.
### 30.21 Bots soft-reserve a living teammate's opening bonds
PR #518 by @IceCodeNew, for issue #514. This is not an official rule. It extends the accepted #407 card penalty.
Opening-band choice and focus planning used to ignore a living teammate's selected strategy until someone from it was
deployed, so a bot could take that faction's high cards. A living teammate's strategy now soft-reserves its bonds for
both choices, before any member is deployed. The reservation ends when that teammate is eliminated (`alivePlayers`).
It does not hard-exclude a strategy, reserve stock, or stop an immediate merge. A reserved band's draw weight is a
quarter of its unreserved weight (`SOFT_BAND_RESERVE` = 0.25) and stays above zero, so the strategy can still be
drawn. Focus planning applies the existing −6 teammate penalty to those bonds as well. Mode-inactive bonds stay
weight 0 (DESIGN §21.26). A solo match has no teammate to reserve against. The shared-pool −18 card penalty is
unchanged, and a stronger merge can still win it.
[ASSUMED] The quarter weight is a project choice. The PR text called the reservation soft; its diff hard-zeroed the
weight. This candidate follows the text. The reservation is equal for human and AI teammates.
Tests: the two `#514` cases in `test/match/bot-smarter.test.js`. One proves the focus leaves the reserved bond while
the teammate lives and returns after elimination. The other proves a reserved strategy is still drawn, and drawn more
often once that teammate is eliminated. The existing card test still shows a merge outscoring the −18 penalty.
### 30.22 Golden changes after the funnel, hit-tile and bot-reservation ports
All 287 scenarios were recomputed once after §30.17–§30.21 and compared with this candidate before those ports
(`HEAD` `7fd0478d`, `git show HEAD:test/golden/*.json`). No scenario was added or removed. 43 digests differ from
that candidate. They are additional to §30.9 and §30.16.
Against released 0.2.4 the total is now 64. Of the previous 45, 21 are byte-for-byte the digests already on this
candidate and are not repeated below: `roster-011`, `roster-012`, `roster-013`, `roster-032`, `roster-033`,
`roster-034`, `roster-039`, `roster-040`, `roster-043`, `bond-maniShip-high`, `bond-yanShip-low`,
`boss-boss_2-pair`, `boss-boss_5-solo`, `hidden-boss_8-pair`, `hidden-boss_9-solo`, `solo-NORMAL-2`,
`coop2-NORMAL-3`, `solo-HARD-9-boosted`, `coop2-ABYSS-10-boosted`, `standin-06`, `standin-07`. The other 24 of
those 45 moved again, and 19 scenarios that still matched 0.2.4 on this candidate now differ.
Opening strategy ids do not change in any of the 20 match digests. A solo match has no teammate, so §30.21 cannot
move one. Co-op seeds keep the same `bandId` and the same bot-draw counts except `coop4-ABYSS-7`. The recorded
match moves are battle totals from §30.17–§30.20, and the later gold and LP those totals change. No isolated
counterfactual was re-run; the groups below follow who is actually on the board.
| Cause | Changed scenarios |
|---|---|
| Funnel body hit plus redeploy reset, and 洛洛 S2's independent lock (§30.17–§30.19). These boards include 洛洛 | `roster-004`, `roster-005`, `roster-023`, `roster-024`, `bond-victoriaShip-low`, `bond-victoriaShip-high` |
| Funnel body hit plus redeploy reset (§30.17–§30.18). 至简 and/or 耶拉, not 洛洛 | `roster-007`, `roster-009`, `roster-026`, `roster-028`, `bond-deputShip-low`, `bond-emptyShip-low`, `bond-kjeragShip-high`, `bond-maniShip-low`, `bond-miraShip-low`, `bond-sargonShip-high`, `bond-soloShip-low`, `bond-visiShip-low` |
| Same body hit and redeploy reset on 荒芜拉普兰德 | `roster-017`, `roster-019`, `roster-036`, `roster-046`, `roster-047`, `boss-boss_3-pair`, `boss-boss_5-pair`, `boss-boss_7-pair`, `hidden-boss_9-pair` |
| 澄闪 DIY: the normal attack is a body hit plus one drone addition (§30.17) | `diy-098`, `diy-099` |
| Hit-tile half-even rounding and the edge inset (§30.20). No funnel operator is deployed; the damage total stays 1388100 and the hook counts and the snapshot sample at index 27 move | `standin-04` |
| Full matches. Opening bands are unchanged. Final lineups include a funnel operator, except `coop2-HARD-4` (both seats eliminated, lineup empty) and `coop3-ABYSS-5` (the surviving lineup has none), whose first divergence is round 7 and round 5; those two are the hit-tile change, or a funnel operator who is not left in the stored lineup | `solo-FUNNY-1`, `solo-FUNNY-2`, `solo-NORMAL-1`, `solo-HARD-1`, `solo-ABYSS-1`, `coop2-HARD-4`, `coop2-NORMAL-1-coverage-standins`, `coop2-NORMAL-5-coverage-diy`, `coop2-NORMAL-8-serverrun`, `coop2-NORMAL-70-diy`, `coop3-ABYSS-5`, `coop4-FUNNY-6`, `coop4-ABYSS-7` |
Result flips inside that match list: `solo-NORMAL-1` defeat → victory (team LP 0 → 2); `solo-FUNNY-1` team LP 15 → 23
and `solo-FUNNY-2` team LP 8 → 23, both still victories, with every settled round row unchanged; `coop2-NORMAL-8-serverrun`
team LP 26 → 27; `coop4-ABYSS-7` eliminated at round 12 → defeat at round 13, and its shop and bot draw counts change.
The other matches keep the same end reason. `standin-04` is the only battle in this set with no funnel operator on
the board.
+21 -8
View File
@@ -138,16 +138,26 @@ const DEFAULT_MELEE_RANGE = [[0, 0], [0, 1]];
* preferred). Alone, a band that withholds the first rounds' funds (老鲤 "资金暂存": no operator in R1–R2, every enemy
* leaks) is avoided — only 联防 teammates cover that. A band whose mechanic rides on a bond the mode switches off
* (gd.bandBondIds ∩ gd.modeInactiveBonds — 标准: 潘格尼尼 <拉特兰>, 克莱门莎 <阿戈尔>, 玛恩纳 <卡西米尔>) weighs 0, never taken
* (DESIGN §21.26); with every band excluded, the default band. One rng draw per call (deterministic per seed); modes
* without inactive bonds keep exactly the earlier picks.
* (DESIGN §21.26). [ASSUMED] A living teammate's opening strategy soft-reserves those bonds before anyone is deployed:
* the weight stays positive, at a quarter of the unreserved weight, so the strategy can still be drawn, and the
* reservation ends when that teammate is eliminated (alivePlayers). With every band excluded, the default band. One
* rng draw per call (deterministic per seed); a solo match has no teammate to reserve against.
*/
const SOFT_BAND_RESERVE = 0.25;
export function botPickBand(m, ps) {
const gd = ps?.gd || m.gd;
const ids = gd.bandIds();
if (!ids.length) return gd.defaultBandId;
const lateFunds = (id) => /暂存/.test(String(gd.band(id)?.desc || ''));
const offBond = (id) => gd.bandBondIds(id).some((b) => gd.modeInactiveBonds.has(b));
const pairs = ids.map((id) => [id, offBond(id) ? 0 : Math.max(1, (gd.startLp(id) - 18) ** 2) * (m.isSolo && lateFunds(id) ? 0.02 : 1)]);
const reserved = new Set(ps && typeof m.alivePlayers === 'function'
? m.alivePlayers().filter((p) => p !== ps).flatMap((p) => gd.bandBondIds(p.bandId))
: []);
const inactive = (id) => gd.bandBondIds(id).some((b) => gd.modeInactiveBonds.has(b));
const pairs = ids.map((id) => {
if (inactive(id)) return [id, 0];
const w = Math.max(1, (gd.startLp(id) - 18) ** 2) * (m.isSolo && lateFunds(id) ? 0.02 : 1);
return [id, gd.bandBondIds(id).some((b) => reserved.has(b)) ? w * SOFT_BAND_RESERVE : w];
});
let total = 0;
for (const [, w] of pairs) total += w;
let r = m.rngBots() * total;
@@ -348,12 +358,14 @@ function mainCoreBond(m, p) {
* The bonds the bot builds around (cached per round and owned set): `focus` = the core bond with the best
* owned members × 10 + reachable members (bondPoolStats, ≤ 4) + layers already banked (≤ 6) + 6 for last round's focus
* (commit instead of flip-flopping between equal bonds) − 6 when a teammate already builds it (its main core bond on
* its public bond strip, mainCoreBond — the shop pool is shared); `second` = the other live bond (core or add-on) with
* the most owned members whose next threshold is within reach (≥ 1 owned member). `ps._botFocusId` keeps the focus
* across rounds.
* its public bond strip, mainCoreBond — the shop pool is shared) or has selected that bond's opening strategy, even
* before anyone is deployed. The strategy reservation ends when that teammate is eliminated. `second` = the other live
* bond (core or add-on) with the most owned members whose next threshold is within reach (≥ 1 owned member).
* `ps._botFocusId` keeps the focus across rounds.
*/
export function bondPlan(m, ps, owned = ownedBonds(m, ps)) {
const key = `${m.round}|${ps.shop.level}|${[...owned.counts.entries()].map(([k, v]) => k + v).join()}`;
const livingBands = m.alivePlayers().filter((p) => p !== ps).flatMap((p) => m.gd.bandBondIds(p.bandId)).sort().join();
const key = `${m.round}|${ps.shop.level}|${[...owned.counts.entries()].map(([k, v]) => k + v).join()}|${livingBands}`;
if (ps._botFocus && ps._botFocus.key === key) return ps._botFocus;
const prev = ps._botFocusId ?? null;
const mates = new Set();
@@ -361,6 +373,7 @@ export function bondPlan(m, ps, owned = ownedBonds(m, ps)) {
if (p === ps) continue;
const b = mainCoreBond(m, p);
if (b) mates.add(b);
for (const id of m.gd.bandBondIds(p.bandId)) mates.add(id);
}
let focus = null;
let bestS = 0;
+15 -1
View File
@@ -318,13 +318,27 @@ export function resolveHit(b, u, prof, target, info, x, y) {
if (target && target.alive) {
let mulT = skillMul;
if (prof.dmgMul) { const m = typeof prof.dmgMul === 'function' ? prof.dmgMul(b, u, target) : prof.dmgMul; if (Number.isFinite(m)) mulT *= m; }
const funnelMul = prof.funnelMul ? prof.funnelMul(b, u, target) : 1;
const attachedFunnel = !!prof.funnelMul && (!info.isSkill || prof.funnelBodyHits > 0);
// Unreleased drones are additional damage (PRTS 驭械术师), not a replacement for the caster's attack. A volley
// shares one talent roll and attackId; extra drones never duplicate the body. Released skill paths stay separate.
// [ASSUMED] Body instances precede additions at the existing projectile impact; a multi-hit volley keeps one ramp.
if (!attachedFunnel) mulT *= funnelMul;
const hits = prof.hitsFn ? prof.hitsFn(b, u, info) : Math.max(1, prof.hits || 1);
// `hitDmgMul` (professions.js header): each instance's 伤害倍率 — the DamageInfo `mul`, after DEF / RES — and only the
// first instance may give 受击回复 (砾's two 50 % hits, PRTS 砾 特性备注)
const split = Number.isFinite(prof.hitDmgMul) && prof.hitDmgMul > 0 ? prof.hitDmgMul : null;
let dealtMain = 0;
if (attachedFunnel && info.index === 0) {
const bodyHits = Math.max(1, prof.funnelBodyHits || 1);
for (let h = 0; h < bodyHits && target.alive; h++) {
dealtMain += b.dealDamage(u, target, { amount: atk * scale * mulT, type: baseType,
isAttack: true, isSkill: info.isSkill, tags: prof.tags || [], attackId });
}
}
for (let h = 0; h < hits && target.alive; h++) {
const d = { amount: atk * scale * mulT, type: baseType, isAttack: true, isSkill: info.isSkill, tags: prof.tags || [], attackId };
const d = { amount: atk * scale * mulT * (attachedFunnel ? funnelMul : 1), type: baseType,
isAttack: !attachedFunnel, isSkill: info.isSkill, tags: attachedFunnel ? [...(prof.tags || []), 'addition', 'funnel'] : (prof.tags || []), attackId };
if (split != null) { d.mul = split; if (h > 0) d.noSp = true; }
dealtMain += b.dealDamage(u, target, d);
}
+2 -1
View File
@@ -6,6 +6,7 @@
import { ROWS, COLS } from '../constants.js';
import { absoluteRangeKeys, canTargetEnemy, extendedGrid, enemyStealthed } from '../targeting.js';
import { bodyKeys, bodyInKeys, bodyInRadius } from '../body.js';
import { roundHalfEven } from '../detmath.js';
export class BattleQueries {
/**
@@ -21,7 +22,7 @@ export class BattleQueries {
for (const k of bodyKeys(e)) { const b = this._eb[k]; if (!b.length) this._ebUsed.push(k); b.push(e); }
continue;
}
const r = Math.round(e.y), c = Math.round(e.x);
const r = roundHalfEven(e.y), c = roundHalfEven(e.x); // the tile body.js gives a point enemy
if (r < 0 || r >= ROWS || c < 0 || c >= COLS) continue;
const k = r * COLS + c;
const b = this._eb[k];
+6 -6
View File
@@ -4,7 +4,7 @@
// and the list compaction.
// Installed on Battle.prototype by server/sim/Battle.js (a method container: never instantiated; `this` is the battle).
import { MAX_ALIVE_ENEMIES } from '../constants.js';
import { MAX_ALIVE_ENEMIES, FIELD_EDGE_INSET } from '../constants.js';
import { Unit } from '../units.js';
import { compileRoute } from '../ai.js';
import { unitInfo } from '../snapshot.js';
@@ -201,11 +201,11 @@ export class BattleSpawns {
}
_clampPos(e) {
const R = this.rect;
if (e.x < R.c0 - 0.5) e.x = R.c0 - 0.5;
if (e.x > R.c1 + 0.5) e.x = R.c1 + 0.5;
if (e.y < R.r0 - 0.5) e.y = R.r0 - 0.5;
if (e.y > R.r1 + 0.5) e.y = R.r1 + 0.5;
const R = this.rect, m = 0.5 - FIELD_EDGE_INSET; // inside the edge: on the edge tile, never halfway (body.js)
if (e.x < R.c0 - m) e.x = R.c0 - m;
if (e.x > R.c1 + m) e.x = R.c1 + m;
if (e.y < R.r0 - m) e.y = R.r0 - m;
if (e.y > R.r1 + m) e.y = R.r1 + m;
}
_compactEnemies() {
+7 -6
View File
@@ -1,8 +1,9 @@
// server/sim/body.js — where a unit can be hit: the ONE helper behind every range test that targets enemies (user
// playtest #5 item 10: "大体型的关底boss实际受击判定范围很小…原版是很大的一片区域").
//
// Regular units are a point: in a grid range when the tile containing their position (round(y), round(x)) is a range
// tile, in a radius when their position is (DESIGN §3). Huge units (巨型单位 — enemy data `hitArea`, tools/build-data.mjs
// Regular units are a point: in a grid range when the tile containing their position is a range tile — the position
// rounded half to even (detmath roundHalfEven; PRTS 作战机制 "受击方坐标经round函数取整(四舍六入五成双)得到其所属格
// 坐标") —, in a radius when their position is (DESIGN §3). Huge units (巨型单位 — enemy data `hitArea`, tools/build-data.mjs
// HIT_AREAS, from PRTS "巨型单位:受击判定区域为长4.95、宽2.95的长方形,向上偏移1.0") are hit anywhere on a rectangle
// `w` tiles along the columns × `h` along the rows, centred on their position moved `dx` columns right and `dy` rows
// up:
@@ -24,7 +25,7 @@
// `hitRect`).
import { ROWS, COLS } from './constants.js';
import { hypot } from './detmath.js';
import { hypot, roundHalfEven } from './detmath.js';
/**
* Validated hit area of a data record (`{ w, h, dx, dy }`, tiles) or null for a regular (point) unit.
@@ -47,7 +48,7 @@ export function hitRect(u) {
/** Tile key of a unit's position (-1 off the grid). */
function posKey(u) {
const r = Math.round(u.y), c = Math.round(u.x);
const r = roundHalfEven(u.y), c = roundHalfEven(u.x);
return r < 0 || r >= ROWS || c < 0 || c >= COLS ? -1 : r * COLS + c;
}
@@ -68,7 +69,7 @@ export function bodyKeys(u) {
/** Does the unit occupy tile (r, c)? */
export function bodyOnTile(u, r, c) {
const R = hitRect(u);
if (!R) return Math.round(u.y) === r && Math.round(u.x) === c;
if (!R) return roundHalfEven(u.y) === r && roundHalfEven(u.x) === c;
return c + 0.5 > R.x0 + 1e-9 && c - 0.5 < R.x1 - 1e-9 && r + 0.5 > R.y0 + 1e-9 && r - 0.5 < R.y1 - 1e-9;
}
@@ -100,7 +101,7 @@ export function bodyInRadius(u, x, y, r) {
* around it; …): "周围八格"-style square areas centred on a tile.
*/
export function bodyTileReach(u, r, c) {
if (!u.hitArea) return Math.max(Math.abs(Math.round(u.y) - r), Math.abs(Math.round(u.x) - c));
if (!u.hitArea) return Math.max(Math.abs(roundHalfEven(u.y) - r), Math.abs(roundHalfEven(u.x) - c));
let best = Infinity;
for (const k of bodyKeys(u)) {
const kr = Math.floor(k / COLS), kc = k % COLS;
+9
View File
@@ -220,6 +220,15 @@ export const MAX_ALIVE_ENEMIES = 600;
/** Heal-over-time / regen events are aggregated and only emitted when they reach this amount. */
export const REGEN_EVENT_MIN = 1;
/**
* How far inside the field rectangle an enemy is held (tiles; Battle._clampPos). [ASSUMED] The rectangle's edge lies
* exactly halfway between two tiles, where the tile of a position — rounded half to even (body.js; PRTS 作战机制
* 四舍六入五成双) — would depend on whether the row or column number is even. Held this little inside, an enemy at the
* edge stays on the edge tile. 2^-20 is exact in binary and too small to move a slide of 0.1-tile steps; a 1/1024 inset
* did move those steps.
*/
export const FIELD_EDGE_INSET = 1 / 1048576;
/** Row offset mapping board rows (9..12) onto boss-field rows (2..5). */
export const BOSS_ROW_OFFSET = -7;
@@ -1,21 +1,30 @@
// server/sim/content/kits/ops/chess_char_2_10-rockr.js — 洛洛 (char_4040_rockr) kit, tier 2.
// Conventions of the tier-2 kits: ../shared/tier2.js; kit contract and rules: ../README.md.
import { canTargetEnemy } from '../../../targeting.js';
import { bodyInKeys } from '../../../body.js';
import { canTargetEnemy, sortEnemyTargets } from '../../../targeting.js';
import { num, talentBb, up } from '../shared/tier1.js';
import { onDefaultSkill } from '../shared/tier2.js';
export const DRONE_TAG = 'rockr:drone';
const firstTarget = (battle, unit) => {
const prof = unit.profile;
const candidates = battle.enemiesInKeys(unit.rangeKeys, unit, prof);
for (const e of battle.blockedTargets(unit, prof)) if (!candidates.includes(e)) candidates.push(e);
sortEnemyTargets(battle, unit, candidates, prof.priority);
return candidates[0] ?? null;
};
export default {
// ---------------------------------------------------------------------------------------------------------------
// 2_10 洛洛 自负此轭: ASPD +attack_speed; the drones lock on their target until it dies or the skill ends.
// 2_10 洛洛 自负此轭: ASPD +attack_speed. The skill releases its drone, which keeps the lock after the target leaves
// her range and returns only when that enemy dies or the skill ends (docs/research/03-operators.md, skchr_rockr_2).
// While it is out, the unreleased drone's additional damage is off and the drone's own hits are skill damage.
// 过载 (term ba.overdrive "技能进行到一半时触发额外效果"): the second half of the duration — ATK +atk and the funnel cap
// ×scale; when the skill ends she is stunned as long as the overload lasted. 立于磐石: ATK +atk per `interval` s on the
// field, up to max_stack_cnt stacks.
// S1 战术咏唱·γ型 (alt): ASPD +attack_speed; the target lock belongs to 自负此轭 only.
chess_char_2_10_a: (bb, chess) => {
const t = talentBb(chess, 0);
const s2 = onDefaultSkill(chess);
const endOverload = (battle, unit) => {
if (unit.mem.rockFunnel) { unit.profile.funnel = unit.mem.rockFunnel; unit.mem.rockFunnel = null; }
battle.removeBuff(unit, 'rockr:overload');
@@ -26,19 +35,53 @@ export default {
onStart({ battle, unit, skill }) {
unit.mem.rockOverAt = battle.time + skill.duration / 2;
unit.mem.rockOver = false;
unit.mem.rockLock = null;
// The released drone inherits the trait's ramp; the body still attacks only inside its own range.
// `funnelMul` separates the addition; older profiles fold it into `dmgMul`. Keep launched shots unchanged.
const key = typeof unit.profile.funnelMul === 'function' ? 'funnelMul' : 'dmgMul';
const mul = unit.profile[key];
unit.profile = { ...unit.profile, [key]: null };
const lock = firstTarget(battle, unit);
unit.mem.rockDrone = { lock, cd: 0, key, mul,
target: unit.trait.funnelTarget, scale: unit.trait.funnelScale };
unit.mem.rockLock = lock;
},
onTick({ battle, unit }) {
if (unit.mem.rockOver || battle.time + 1e-9 < unit.mem.rockOverAt) return;
unit.mem.rockOver = true;
onTick({ battle, unit, dt }) {
if (!unit.mem.rockOver && battle.time + 1e-9 >= unit.mem.rockOverAt) {
unit.mem.rockOver = true;
const f = unit.profile.funnel;
if (f) { unit.mem.rockFunnel = f; unit.profile.funnel = { ...f, max: f.max * num(bb.scale, 1) }; }
battle.addBuff(unit, { key: 'rockr:overload', mods: { atkPct: num(bb.atk) }, visible: true, tags: ['skill'] });
battle.fx('overload', { x: unit.x, y: unit.y, id: unit.id });
}
const d = unit.mem.rockDrone;
if (!d || !unit.alive || !unit.skill.active) return;
d.cd = Math.max(0, d.cd - dt);
// [ASSUMED] A newly unselectable lock is dropped and the drone retargets. No flight delay, and body control
// (stun and the like) does not pause the released drone — same as the other independent skill drones.
if (d.lock && !canTargetEnemy(unit, d.lock, unit.profile)) d.lock = null;
if (!d.lock) d.lock = firstTarget(battle, unit);
unit.mem.rockLock = d.lock;
if (!d.lock || d.cd > 1e-9) return;
d.cd = unit.s.interval;
// Official S2 releases one drone (1 + attack@cnt = 1 at both ranks). The ramp lives on the drone, so a
// pre-skill projectile that lands later cannot change it.
const f = unit.profile.funnel;
if (f) { unit.mem.rockFunnel = f; unit.profile.funnel = { ...f, max: f.max * num(bb.scale, 1) }; }
battle.addBuff(unit, { key: 'rockr:overload', mods: { atkPct: num(bb.atk) }, visible: true, tags: ['skill'] });
battle.fx('overload', { x: unit.x, y: unit.y, id: unit.id });
d.scale = d.target === d.lock.id ? Math.min(f.max, (d.scale ?? f.init) + f.delta) : f.init;
d.target = d.lock.id;
battle.fx('drone', { x: d.lock.x, y: d.lock.y, id: unit.id });
battle.dealDamage(unit, d.lock, { amount: unit.s.atk * unit.s.atkScaleMul * d.scale,
type: 'arts', isSkill: true, isAttack: false, tags: ['skill', 'drone', DRONE_TAG] });
},
onEnd({ battle, unit, reason }) {
const over = unit.mem.rockOver ? battle.time - unit.mem.rockOverAt : 0;
const d = unit.mem.rockDrone;
unit.mem.rockDrone = null;
endOverload(battle, unit);
if (d) {
unit.trait.funnelTarget = d.target;
unit.trait.funnelScale = d.scale;
unit.profile = { ...unit.profile, [d.key]: d.mul };
}
unit.mem.rockOver = false;
unit.mem.rockLock = null;
if (over > 0 && reason !== 'death' && unit.alive) battle.applyStatus(unit, 'stun', { duration: over, source: unit });
@@ -46,12 +89,6 @@ export default {
},
skills: { 'skcom_magic_rage[3]': { kind: 'duration', mods: { aspd: num(bb.attack_speed) } } },
talents: [{ install(battle, unit) {
if (s2) battle.on('beforeAttack', (ctx) => {
if (ctx.attacker !== unit || !unit.skill?.active) return;
const L = unit.mem.rockLock;
if (L && L.alive && bodyInKeys(L, unit.rangeKeySet) && canTargetEnemy(unit, L, ctx.profile || unit.profile)) ctx.targets = [L];
else unit.mem.rockLock = ctx.targets[0] ?? null;
}, { owner: unit });
const iv = num(t.interval), max = Math.floor(num(t.max_stack_cnt)), v = num(t.atk);
if (!(iv > 0) || !(max > 0) || !v) return;
battle.on('tick', () => {
@@ -12,10 +12,10 @@ export default {
const hits = textNum(d.skill?.description, /连续攻击(\d+|[一二两三四五])次/, 2);
const insight = (battle) => (battle.rng.chance(num(t0.prob, 0)) ? num(t0.atk_scale, 1) : 1);
return {
trait: { dmgMul: (battle, unit, target) => funnelMap(battle, unit, target) * insight(battle) },
trait: { funnelMul: funnelMap, dmgMul: insight },
skill: {
kind: charges > 1 ? 'charges' : 'instant',
attack: { atkScale: num(bb.atk_scale, 1), hits, dmgType: 'arts', dmgMul: (battle) => insight(battle) },
attack: { atkScale: num(bb.atk_scale, 1), hits, funnelBodyHits: hits, dmgType: 'arts', dmgMul: insight },
},
// S1 迅捷打击·γ型: ATK / ASPD + (the drones' ramp and 忽有所悟 stay on every attack through the trait)
skills: altSkills(chess, d, bb, { 'skcom_quickattack[3]': statSkill }),
@@ -13,7 +13,7 @@ export default {
const extra = Math.floor(num(bb['attack@cnt'], 0));
const prob = num(bb['attack@prob'], 0), cold = num(bb['attack@cold'], 0);
const kit = {
trait: { dmgMul: funnelMap },
trait: { funnelMul: funnelMap },
skill: {
kind: 'duration',
mods: { atkPct: num(bb.atk) },
@@ -20,7 +20,7 @@ export default withDefaults({
attack: {
// every drone ramps on its own locked target (trait init/delta/max): the multipliers are queued per target
// by the beforeAttack hook below (two drones on the same enemy ramp independently)
dmgMul: (battle, unit, target) => {
funnelMul: (battle, unit, target) => {
const q = unit.mem.kjeraQueue && unit.mem.kjeraQueue.get(target.id);
return q && q.length ? q.shift() : funnel(unit).init;
},
@@ -143,7 +143,7 @@ function whitw2(bb, chess, def) {
...(skillGridW ? { targeting: { rangeGrid: skillGridW } } : {}),
attack: {
hits: 1,
dmgMul(battle, unit, target) {
funnelMul(battle, unit, target) {
const f = unit.profile?.funnel || { init: 0.2, delta: 0.15, max: 1.1 };
const m = unit.mem.hunt;
if (!m) return f.init;
+1 -1
View File
@@ -17,7 +17,7 @@
// projectile_chr_gdglow_funnel_s1_1 … s3_3 (`_lifeTimeType` 2: until stopped, `_stopWhenSourceInvalid`, its crash
// AdvancedApplyDamage MAGICAL at atk_scale_2) and their s12 / s3 blast projectiles.
// - Trait (驭械术师) "操作浮游单元造成法术伤害;单元攻击同一敌人伤害提升(最高造成干员110%攻击力的伤害)" (trait bb init / delta /
// max_atk_scale): the engine's funnel profile (professions.js: her normal attack = one drone hit at init → +delta per hit on
// max_atk_scale): the engine's funnel profile (professions.js: her normal attack = a body hit plus one drone addition at init → +delta per hit on
// the same target → max). FUN-X: init 0.35 ("单元初始伤害提高"); FUN-Y: max 1.2. Ranged arts, 3-1, hits air (PRTS "可对空"),
// blocks 1, ground enemies target her.
// - Skill drones (the three skills "浮游单元+N,释放浮游单元锁定敌人攻击 … 锁敌后直至敌人被击杀、自爆或技能结束后返回干员身边"): while a
+12
View File
@@ -10,6 +10,7 @@
// test/sim/detmath.test.js scans server/sim/).
//
// hypot(x, y) √(x² + y²) as Math.sqrt(x*x + y*y), rescaled by exact powers of two outside 2^±500
// roundHalfEven(x) nearest integer, ties to even (四舍六入五成双); Math.round and Math.floor, never −0
// powi(x, n) xⁿ for an integer n: square-and-multiply in double-double, one final rounding
// sin(x), cos(x) fdlibm 5.3 (__kernel_sin / __kernel_cos / __ieee754_rem_pio2)
// atan2(y, x) fdlibm (FreeBSD msun e_atan2.c / s_atan.c)
@@ -46,6 +47,17 @@ export function hypot(x, y) {
return Math.sqrt(x * x + y * y);
}
/**
* x rounded to an integer, ties to even (2.5 → 2, 3.5 → 4, −2.5 → −2): the rule PRTS 作战机制 gives for the tile of a
* target — 受击方坐标经round函数取整(四舍六入五成双)得到其所属格坐标. Math.round rounds ties up (2.5 → 3). Exact; never −0.
* @param {number} x
*/
export function roundHalfEven(x) {
const f = Math.floor(x);
if (x - f !== 0.5) return Math.round(x) + 0;
return (f % 2 === 0 ? f : f + 1) + 0;
}
// ---- integer powers ----------------------------------------------------------------------------------------------
const SPLIT = 134217729; // 2^27 + 1 (Dekker)
+14 -3
View File
@@ -21,6 +21,8 @@
// noAttack bool (never attacks) noAttackUnlessSkill bool (attacks only while its skill is active)
// noHeal bool (cannot be healed by others) blockFly bool onHitStatus {key, duration, value}
// dmgMul(battle, unit, target) → number afterHit(battle, unit, target, {dealt,x,y})
// funnelMul(battle, unit, target) → number (drone ramp, separate from the caster's attack multiplier)
// funnelBodyHits n (an unreleased skill attack's body hit count; default normal attack: one, drones: `hits`)
// canAttack(battle, unit) → bool afterAttack(battle, unit, targets)
// skipEnemy(enemy) → bool (an enemy the unit never selects — targeting.js canTargetEnemy; 嵯峨 "不攻击重伤单位")
// healThrough(healer, ally) → bool (a healer that selects and heals that ally through its 禁疗 — Battle
@@ -385,8 +387,17 @@ const installTactician = (battle, unit) => {
};
const installFunnel = (battle, unit) => {
unit.trait.funnelTarget = null;
unit.trait.funnelScale = unit.profile.funnel?.init ?? 0.2;
// PRTS 分支特性信息 驭械术师: changing the target, or redeploying, resets the drone ramp at once, even against the
// same living enemy. The per-target map (耶拉 / 至简) resets with it. A free move (moveRedeploy, the same carry as a
// 秘术师's stored energy and 乌尔比安 S3) keeps the ramp. An in-flight drone still applies the ramp it computes on
// impact, so a shot launched before the reset can step the new ramp.
const reset = () => {
unit.trait.funnelTarget = null;
unit.trait.funnelScale = unit.profile.funnel?.init ?? 0.2;
unit.trait.funnelMap?.clear();
};
reset();
battle.on('deploy', (ctx) => { if (ctx.unit === unit && !ctx.move) reset(); }, { owner: unit });
};
/**
@@ -508,7 +519,7 @@ export const SUB = Object.freeze({
blastcaster: P({ rangeAoe: true }),
chain: P({ chain: { count: 3, falloff: 0.15, radius: CHAIN_RADIUS, sluggish: 0.5 } }),
funnel: P({ projectile: 'drone', install: installFunnel,
dmgMul: (battle, unit, target) => {
funnelMul: (battle, unit, target) => {
const f = unit.profile.funnel || { init: 0.2, delta: 0.15, max: 1.1 };
if (unit.trait.funnelTarget === target.id) unit.trait.funnelScale = Math.min(f.max, (unit.trait.funnelScale ?? f.init) + f.delta);
else { unit.trait.funnelTarget = target.id; unit.trait.funnelScale = f.init; }
+4 -3
View File
@@ -2,7 +2,7 @@
//
// Grid ranges: `[dRow, dCol]` offsets relative to facing RIGHT, rotated by the unit's direction (sim/dir.js: RIGHT
// (dr,dc), UP (dc,−dr), LEFT (−dr,−dc), DOWN (−dc,dr); row 0 = bottom). An enemy is in range when the tile containing
// it (round(y), round(x)) is one of the absolute range tiles — a huge enemy (巨型单位) when any tile its hit rectangle
// it (rounded half to even, detmath roundHalfEven; PRTS 作战机制 四舍六入五成双) is one of the absolute range tiles — a huge enemy (巨型单位) when any tile its hit rectangle
// occupies is (body.js; user playtest #5 item 10). `rangeExtend` (ability_range_forward_extend) adds N tiles
// past the furthest cell of every row, along +dCol BEFORE rotating (DESIGN §3).
// Operator priority: (1) enemies it blocks (every blocker, ranged ones on melee tiles included — user playtest #6
@@ -17,6 +17,7 @@
import { COLS, ROWS } from './constants.js';
import { normDir, rotateOffset } from './dir.js';
import { bodyDist } from './body.js';
import { roundHalfEven } from './detmath.js';
/**
* Build the absolute tile-key list of a grid for a unit standing at (r,c) facing `dir` ('UP'|'RIGHT'|'DOWN'|'LEFT';
@@ -50,9 +51,9 @@ export function absoluteRangeKeys(grid, r, c, dir, extend = 0) {
// record range (shared/loadoutRecord.js attackRangeGrid), re-exported here for the battle (Battle._refreshRange).
export { extendedGrid } from '../../shared/loadoutRecord.js';
/** Tile key of a unit's current position. */
/** Tile key of a unit's current position (rounded half to even, as body.js). */
export function tileKeyOf(u) {
const r = Math.round(u.y), c = Math.round(u.x);
const r = roundHalfEven(u.y), c = roundHalfEven(u.x);
if (r < 0 || r >= ROWS || c < 0 || c >= COLS) return -1;
return r * COLS + c;
}
@@ -50,7 +50,8 @@ test('#2 麦哲伦 S1: an enemy on a standing drone\'s range (air units too) cas
const { h, u, ps } = field(MG, 0, [[DRONE_F, 12, 9]]);
assert.equal(u.skill.rule, 'DEFAULT');
assert.ok(ps[0].alive && ps[0].rangeKeySet.has(12 * COLS + 10) && outOfHerRange(u, 12, 10), 'the setup');
h.spawn('enemy_dummy', { pos: [11, 13] }); // outside every area
// (11, 13) would be held at the field edge, on the drone's tile (11, 10). Stay on the field and outside every area.
h.spawn('enemy_dummy', { pos: [11, 6] });
assert.ok(!casts(h, u), 'nobody in her range or a drone\'s: no cast');
h.spawn('enemy_dummy', { pos: [12, 10] });
assert.ok(h.runUntil(() => u.skill.activations === 1, 1), 'an enemy on the drone\'s range casts S1');
+2 -2
View File
@@ -659,9 +659,9 @@ test('modules: removing the elite module changes the trait / talent behaviour th
const id = 'chess_char_2_10_b';
const [a, b] = withAndWithout((m) => {
const h = run({ defs: { enemies: { e: dummy('e') } }, units: [{ chessId: id, row: 10, col: 4, carryState: IDLE, ...mod(m) }], enemies: [{ key: 'e', pos: [10, 6] }] });
h.runUntil(() => dealt(h, h.unit(id)).length > 0, 5);
h.runUntil(() => dealt(h, h.unit(id), (c) => c.dmg.tags.includes('funnel')).length > 0, 5);
const u = h.unit(id);
const r = dealt(h, u)[0].amount / u.s.atk;
const r = dealt(h, u, (c) => c.dmg.tags.includes('funnel'))[0].amount / u.s.atk;
done(h);
return r;
});
+4 -2
View File
@@ -1070,7 +1070,7 @@ test('6_17 耀骑士临光 S2 逐夜烁光: on deploy ATK + and 3 护盾 layers
// =================================================================================================================
// 6_18 荒芜拉普兰德
test('6_18 荒芜拉普兰德 S1 慵怠者悲鸣: passive 浮游单元+1 (2 hits per attack); toggled on: ATK + and the drones lock still enemies anywhere', () => {
test('6_18 荒芜拉普兰德 S1 慵怠者悲鸣: passive 浮游单元+1 (one body plus two additions); toggled on: ATK + and the drones lock still enemies anywhere', () => {
for (const id of both('chess_char_6_18')) {
const sid = 'skchr_whitw2_1', bb = bbOf(id, sid);
const idle = run({ defs: { enemies: { e: dummy('e') } }, units: [U(id, sid, 10, 4, { carryState: IDLE })], enemies: [{ key: 'e', pos: [10, 6] }] });
@@ -1079,7 +1079,9 @@ test('6_18 荒芜拉普兰德 S1 慵怠者悲鸣: passive 浮游单元+1 (2 hits
const a0 = idle.hooksOf('attack').find((c) => c.attacker === iu);
assert.ok(a0);
idle.run(1);
assert.equal(dealt(idle, iu, (c) => c.dmg.attackId === dealt(idle, iu)[0].dmg.attackId).length, 2, 'drone +1');
const volley = dealt(idle, iu, (c) => c.dmg.attackId === dealt(idle, iu)[0].dmg.attackId);
assert.equal(volley.filter((c) => c.dmg.isAttack).length, 1, 'one body hit');
assert.equal(volley.filter((c) => c.dmg.tags.includes('funnel')).length, 2, 'drone +1');
done(idle);
const h = run({
+4 -1
View File
@@ -7,6 +7,7 @@ import { makeBattle, enemyRec, chessRec, checkInvariants } from '../helpers/batt
import { getDefaultSource } from '../../server/sim/simdata.js';
import { ELEMENT_GAUGE_MAX, PROJECTILE_SPEEDS, BOOMERANG_RETURN_SPEED } from '../../server/sim/constants.js';
import { sortEnemyTargets } from '../../server/sim/targeting.js';
import { DRONE_TAG as ROCKROCK_DRONE } from '../../server/sim/content/kits/ops/chess_char_2_10-rockr.js';
const ds = getDefaultSource();
const raw = (id) => ds.rawChess(id);
@@ -1341,7 +1342,9 @@ test('2_10 洛洛: 自负此轭 drones stay locked on their target while the ski
const t0 = h.b.time;
h.run(4);
const atks = h.hooksOf('attack').filter((c) => c.attacker === u && c.t > t0);
assert.ok(atks.length > 0 && atks.every((c) => c.targets.length === 1 && c.targets[0] === first), 'locked');
assert.ok(atks.length > 0 && atks.every((c) => c.targets.length === 1 && c.targets[0] === other), 'body keeps normal targeting');
const drones = h.hooksOf('damaged').filter((c) => c.source === u && c.t > t0 && c.dmg.tags?.includes(ROCKROCK_DRONE));
assert.ok(drones.length > 0 && drones.every((c) => c.target === first && c.dmg.isSkill && !c.dmg.isAttack), 'drone stays locked');
done(h);
});
+5 -5
View File
@@ -488,13 +488,13 @@ test('3_13 至简: 神工意匠 charges: ATK% arts ×2 per cast; 忽有所悟 cr
const u = h.unit(id);
assert.equal(u.skill.maxCharges, bb.ct);
h.run(60);
const normal = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.isAttack && !c.dmg.isSkill).map((c) => c.amount / u.s.atk);
const normal = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.tags.includes('funnel') && !c.dmg.isSkill).map((c) => c.amount / u.s.atk);
const ramp = (v) => [tb.max_atk_scale, tb.max_atk_scale * t0.atk_scale].some((x) => Math.abs(v - x) < 1e-6);
assert.ok(normal.slice(10).every(ramp), 'ramped drone hits: max or max × crit');
assert.ok(normal.some((v) => Math.abs(v - tb.max_atk_scale * t0.atk_scale) < 1e-6), 'some crits');
assert.ok(normal.some((v) => Math.abs(v - tb.max_atk_scale) < 1e-6), 'some plain hits');
const skillAtks = h.hooksOf('attack').filter((c) => c.attacker === u && c.isSkill).length;
const sk = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.isSkill).map((c) => c.amount / u.s.atk);
const sk = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.isSkill && c.dmg.isAttack).map((c) => c.amount / u.s.atk);
assert.ok(skillAtks >= 2);
assert.equal(sk.length, skillAtks * 2, 'two hits per cast');
for (const v of sk) assert.ok([bb.atk_scale, bb.atk_scale * t0.atk_scale].some((x) => Math.abs(v - x) < 1e-6), `skill hit ${v}`);
@@ -790,7 +790,7 @@ test('3_20 耶拉: 低眉 ATK (ground tiles in range); 心随意动 +1 drone, AT
h.step();
approx(u.s.atk, u.base.atk * (1 + t0['kjera_t_1[high].atk']));
h.run(4);
const first = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.isAttack).map((c) => c.amount / u.s.atk);
const first = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.tags.includes('funnel')).map((c) => c.amount / u.s.atk);
assert.ok(first[1] > first[0], 'drone ramps on the same target');
fill(u);
assert.ok(h.runUntil(() => u.skill.active, 5));
@@ -1083,7 +1083,7 @@ test('3_20 耶拉: 心随意动 with a single enemy — both drones lock it and
});
const u = h.unit(id);
h.run(12);
const plain = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.isAttack).map((c) => c.amount / u.s.atk);
const plain = h.hooksOf('damaged').filter((c) => c.source === u && c.dmg?.tags.includes('funnel')).map((c) => c.amount / u.s.atk);
approx(plain[plain.length - 1], tb.max_atk_scale, 1e-6, 'module ramp cap');
fill(u);
assert.ok(h.runUntil(() => u.skill.active, 5));
@@ -1159,7 +1159,7 @@ test('精锐 numbers from the golden blackboards (module traits handled by the p
const ml = m.unit(e13);
assert.equal(ml.skill.maxCharges, BB(e13).ct);
m.run(25);
const ramps = m.hooksOf('damaged').filter((c) => c.source === ml && c.dmg?.isAttack && !c.dmg.isSkill).map((c) => c.amount / ml.s.atk);
const ramps = m.hooksOf('damaged').filter((c) => c.source === ml && c.dmg?.tags.includes('funnel') && !c.dmg.isSkill).map((c) => c.amount / ml.s.atk);
assert.ok(ramps.some((v) => Math.abs(v - TR(e13).max_atk_scale) < 1e-6), 'module cap 120 %');
assert.ok(ramps.every((v) => v <= TR(e13).max_atk_scale * TB(e13, 0).atk_scale + 1e-6));
done(m);
+5 -3
View File
@@ -997,8 +997,9 @@ test('荒芜拉普兰德: 叙拉古的荣幸 +5 initial SP on every deployment;
// (S3 may be running — its drones do not normal-attack): wait for a normal attack after stage 3
assert.ok(h.runUntil(() => h.dmg.some((d) => d.src === u.id && d.attack && d.tgt === e.id && d.t > ts), 60));
const last = h.dmg.filter((d) => d.src === u.id && d.attack && d.tgt === e.id).at(-1);
const same = h.dmg.filter((d) => d.src === u.id && d.attack && d.t === last.t);
assert.equal(same.length, 2, 'two drone hits per attack');
const same = h.dmg.filter((d) => d.src === u.id && d.t === last.t);
assert.equal(same.filter((d) => d.attack).length, 1, 'one body hit per attack');
assert.equal(same.filter((d) => d.tags.includes('funnel')).length, 2, 'two drone additions per attack');
});
test('缪尔赛思: 流形 copies stats/range/damage type but not the attack shape (锏 2-hit); a capped melee copy steals nothing more', () => {
@@ -1120,7 +1121,8 @@ test('异客: the S3 storm is range x-1 — the 13-tile diamond — around the t
// in the diamond (|Δrow| + |Δcol| ≤ 2 by tile): (2, 0) / (0, −2) / (1.95, 0.4) lay outside the old 1.5 circle
for (const off of [[0, 0], [2, 0], [0, -2], [-2, 0], [1.45, 1.45], [1.95, 0.4]]) assert.equal(strikes(off), 8, `(${off}) struck by all 8 strikes`);
// outside it: tile (+2, +1), and tile (+3, 0) — (1.55, 1.05) was inside the old circle around the target's position
for (const off of [[2, 1], [1.55, 1.05], [0, 2.6]]) assert.equal(strikes(off), 0, `(${off}) never struck`);
// three tiles off along the columns: the field has no row 13 (a probe there is held on row 12, inside the diamond)
for (const off of [[2, 1], [1.55, 1.05], [2.6, 0]]) assert.equal(strikes(off), 0, `(${off}) never struck`);
});
test('蕾缪安: 通缉 needs a continuous 8 s stay in a 拉特兰 range (leaving restarts the count)', () => {
+7 -3
View File
@@ -80,18 +80,22 @@ test('a 自选 pick: 澄闪 is offered at tiers 5 and 6 and a roster with her pa
{ ok: true, picks: { [SLOT[6]]: { charId: GD, skillIndex: 2, uniEquipId: FY } } });
});
test('her normal attack (no skill): one drone hit per attack — init, +delta per hit on the same target, up to the cap (FUN-X from 0.35, FUN-Y to 1.2); 精准导流 lowers the RES it meets', () => {
for (const f of [[5, false, null], [5, true, FX], [6, true, FY]]) {
test('her normal attack (no skill): a body hit and one drone addition — init, +delta per hit on the same target, up to the cap (FUN-X from 0.35, FUN-Y to 1.2); 精准导流 lowers the RES of both', () => {
for (const f of FORMS_ALL) {
const [tier, elite, mod] = f;
const { h, u } = field({ tier, elite, mod, skill: 2 });
const e = h.spawn('enemy_res', { pos: [10, 6] });
h.run(12);
const hits = mine(h, u).filter((c) => c.target === e && c.dmg.isAttack);
const drones = mine(h, u).filter((c) => c.target === e && c.dmg.tags.includes('funnel'));
assert.ok(hits.length >= 8, `${label(f)}: ${hits.length} attacks`);
assert.equal(drones.length, hits.length, `${label(f)}: one addition per body hit`);
const tb = traitOf(tier, elite, mod).bb, pen = talentOf(tier, elite, mod, 1).bb.magic_resist_penetrate_fixed;
hits.slice(0, 8).forEach((c, i) => {
const ramp = Math.min(tb.max_atk_scale, tb.init_atk_scale + i * tb.delta_atk_scale);
approx(c.amount, u.s.atk * ramp * (1 - (50 - pen) / 100), `${label(f)}: attack ${i + 1} at ${ramp}`);
approx(c.amount, u.s.atk * (1 - (50 - pen) / 100), `${label(f)}: body attack ${i + 1}`);
approx(drones[i].amount, c.amount * ramp, `${label(f)}: drone at ${ramp}`);
assert.equal(drones[i].dmg.attackId, c.dmg.attackId, 'same attack action');
assert.equal(c.type, 'arts');
});
done(h);
+1 -1
View File
@@ -330,7 +330,7 @@ test('S2 连星 (AUTO, SP_FULL): a triggered piece hits every enemy on its conne
assert.deepEqual([sk.spCost, sk.bb['attack@atk_scale'], sk.bb['attack@move_speed'], sk.bb['attack@duration']], elite ? [16, 4.8, -0.4, 6] : [17, 4.2, -0.35, 6], `T${tier}`);
const { h, u } = field({ tier, elite, skill: 1, stones: [[10, 6], [10, 7]] });
const onLine = h.spawn('enemy_fly', { pos: [10, 9] }); // 3 tiles right of (10,6)…(10,7)+2: on the horizontal line
const beyond = h.spawn('enemy_dummy', { pos: [10, 11] }); // 4 tiles past (10,7)
const beyond = h.spawn('enemy_dummy', { pos: [10, 2] }); // 4 tiles before (10,6) (the field ends at column 10)
const vertical = h.spawn('enemy_dummy', { pos: [12, 7] }); // its battle-start 跟子 (11,7) is 上 of it: the vertical line is on
const off = h.spawn('enemy_dummy', { pos: [9, 4] }); // on neither line
const trig = h.spawn('enemy_runner', { pos: [10, 7] });
+267
View File
@@ -0,0 +1,267 @@
// Controlled regression inputs: real kit, seeded Battle, synthetic enemy records and authored routes.
// No live enemy movement/HP edits. These cases are distinct from the normal Match/browser route.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { makeBattle, enemyRec, checkInvariants } from '../helpers/battleHarness.js';
import { bodyInKeys } from '../../server/sim/body.js';
import { DRONE_TAG } from '../../server/sim/content/kits/ops/chess_char_2_10-rockr.js';
import { getDefaultSource } from '../../server/sim/simdata.js';
const route = {
motion: 'FLY', start: [10, 6], end: [9, 2],
steps: [{ t: 'wait', s: 3 }, { t: 'move', p: [12, 6] }, { t: 'wait', s: 8 },
{ t: 'move', p: [10, 6] }, { t: 'wait', s: 40 }, { t: 'move', p: [9, 2] }],
};
const stationary = { motion: 'FLY', start: [10, 5], end: [9, 2], steps: [{ t: 'wait', s: 90 }, { t: 'move', p: [9, 2] }] };
const setup = (id, { skillIndex = 1, moduleId, newcomer = false, staysOutside = false, fragile = false,
outsideHp, stationaryLock = false, killer = false } = {}) => {
const lockRoute = staysOutside ? { ...route, steps: [...route.steps.slice(0, 2), { t: 'wait', s: 90 }, { t: 'move', p: [9, 2] }] } : route;
const h = makeBattle({ seed: 5, timeLimit: 100, autoFinish: false, captureNoisy: true,
hooks: ['damaged', 'attack', 'skillStart', 'skillEnd'],
defs: { enemies: {
enemy_lock: enemyRec({ key: 'enemy_lock', hp: 1e7, speed: 1, motion: 'FLY' }),
enemy_fragile: enemyRec({ key: 'enemy_fragile', hp: 300, speed: 1, motion: 'FLY' }),
enemy_outside: enemyRec({ key: 'enemy_outside', hp: outsideHp, speed: 1, motion: 'FLY' }),
enemy_killer: enemyRec({ key: 'enemy_killer', hp: 1e7, atk: 1e5, range: 4, motion: 'FLY' }),
} },
units: [{ chessId: id, row: 10, col: 4, skillIndex, moduleId, carryState: { sp: 999 } }],
enemies: [{ key: fragile ? 'enemy_fragile' : outsideHp ? 'enemy_outside' : 'enemy_lock',
route: fragile || stationaryLock ? stationary : lockRoute },
...(newcomer ? [{ key: 'enemy_lock', route: stationary, time: 7 }] : []),
...(killer ? [{ key: 'enemy_killer', route: stationary, time: 7 }] : [])],
});
h.step();
return { h, u: h.unit(id), target: h.enemies()[0] };
};
const hits = (h, u, target, after) => h.hooksOf('damaged').filter(c => c.source === u && c.target === target && c.t >= after && c.amount > 0);
const drone = c => c.dmg.tags?.includes(DRONE_TAG);
const approx = (actual, expected) => assert.ok(Math.abs(actual - expected) < 1e-7, `${actual} vs ${expected}`);
const done = h => { checkInvariants(h.b); assert.deepEqual(h.b.errors, []); };
for (const id of ['chess_char_2_10_a', 'chess_char_2_10_b']) {
test(`${id} S2: damage continues after a living target leaves the body range`, () => {
const { h, u, target } = setup(id);
assert.ok(u.skill.active);
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(hits(h, u, target, 0).length > 0, 'the in-range control receives damage before leaving');
h.run(2); // discard any projectile already in flight at the boundary
const t = h.b.time;
const bodyAttacks = u.stats.attacks;
h.run(4);
assert.ok(target.alive && u.alive && u.skill.active && !bodyInKeys(target, u.rangeKeySet));
const outHits = hits(h, u, target, t);
assert.ok(outHits.length > 0, 'a living out-of-range lock must still receive drone damage');
assert.ok(outHits.every(c => drone(c) && c.type === 'arts' && c.dmg.isSkill && !c.dmg.isAttack), 'pursuit damage must be an independent arts skill drone');
assert.equal(u.stats.attacks, bodyAttacks, 'the body cannot make attacks with no enemy in range');
done(h);
});
test(`${id} S2: an in-range newcomer cannot steal a living out-of-range drone lock`, () => {
const { h, u, target } = setup(id, { newcomer: true });
assert.ok(h.runUntil(() => h.enemies().length === 2, 10));
assert.ok(target.alive && !bodyInKeys(target, u.rangeKeySet));
h.run(2);
const t = h.b.time;
h.run(3);
const outHits = hits(h, u, target, t);
assert.ok(outHits.length > 0, 'the original target keeps receiving drone damage with another target in range');
assert.ok(outHits.every(c => drone(c) && c.dmg.isSkill && !c.dmg.isAttack), 'the body cannot attack the out-of-range lock');
const other = h.enemies().find(e => e !== target);
assert.equal(u.mem.rockLock, target);
assert.equal(hits(h, u, other, t).filter(drone).length, 0, 'the drone ignores the newcomer');
const body = hits(h, u, other, t).filter(c => c.dmg.isAttack);
assert.ok(body.length > 0, 'the body still attacks the in-range newcomer');
assert.ok(body.every(c => !c.dmg.isSkill && !drone(c)));
body.forEach(c => approx(c.amount, u.s.atk * u.s.atkScaleMul));
done(h);
});
test(`${id} S2: a target returning into range receives damage`, () => {
const { h, u, target } = setup(id);
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(h.runUntil(() => bodyInKeys(target, u.rangeKeySet), 20));
const t = h.b.time;
h.run(3);
const ds = hits(h, u, target, 0).filter(drone);
assert.ok(ds.some(c => c.t >= t));
assert.equal(u.mem.rockLock, target);
ds.slice(1).forEach((c, i) => approx(c.t - ds[i].t, Math.ceil(u.s.interval * 30 - 1e-9) / 30));
ds.slice(-3).forEach(c => approx(c.amount, u.s.atk * u.s.atkScaleMul * u.profile.funnel.max));
done(h);
});
test(`${id} S2: a target killed by combat releases the lock for another in-range enemy`, () => {
const { h, u, target } = setup(id, { fragile: true, newcomer: true });
assert.equal(u.mem.rockLock, target);
assert.ok(h.runUntil(() => !target.alive, 7));
assert.ok(h.runUntil(() => h.enemies().some(e => e !== target && e.alive), 10));
const other = h.enemies().find(e => e !== target && e.alive);
const t = h.b.time;
h.run(3);
assert.ok(u.alive && u.skill.active && other.alive);
assert.equal(u.mem.rockLock, other);
assert.ok(hits(h, u, other, t).length > 0);
done(h);
});
test(`${id} S2: the duration end clears the lock and stops out-of-range damage`, () => {
const { h, u, target } = setup(id, { staysOutside: true });
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(h.runUntil(() => !u.skill.active, 45));
assert.equal(h.hooksOf('skillEnd').find(c => c.unit === u)?.reason, 'duration');
assert.equal(u.mem.rockLock, null);
h.run(2);
const t = h.b.time;
h.run(4);
assert.ok(target.alive && u.alive && !bodyInKeys(target, u.rangeKeySet));
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S1: damage stops outside the body range`, () => {
const { h, u, target } = setup(id, { skillIndex: 0 });
assert.ok(u.skill.active);
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
h.run(2);
const t = h.b.time;
h.run(4);
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S2: an out-of-range combat kill waits for a candidate and restarts the trait ramp`, () => {
const { h, u, target } = setup(id, { outsideHp: id.endsWith('_a') ? 4000 : 5000, newcomer: true });
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(target.alive);
assert.ok(h.runUntil(() => !target.alive, 10));
assert.ok(drone(hits(h, u, target, 0).at(-1)), 'the independent drone delivers the killing blow');
if (!h.enemies().some(e => e !== target && e.alive)) {
h.step(); assert.equal(u.mem.rockLock, null, 'no out-of-range candidate is acquired');
}
assert.ok(h.runUntil(() => h.enemies().some(e => e !== target && e.alive), 10));
const other = h.enemies().find(e => e !== target && e.alive);
assert.ok(h.runUntil(() => hits(h, u, other, 0).some(drone), 2));
const first = hits(h, u, other, 0).find(drone);
approx(first.amount, u.s.atk * u.s.atkScaleMul * u.profile.funnel.init);
assert.equal(u.mem.rockLock, other);
done(h);
});
test(`${id} S2: explicit stop restores the normal multiplier and clears released state`, () => {
const { h, u, target } = setup(id, { staysOutside: true });
const saved = u.mem.rockDrone.mul, key = u.mem.rockDrone.key;
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
u.skill.stop();
assert.equal(u.profile[key], saved);
assert.equal(u.mem.rockDrone, null); assert.equal(u.mem.rockLock, null);
h.run(2); const t = h.b.time; h.run(4);
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S2: caster combat death clears the released state`, () => {
const { h, u, target } = setup(id, { killer: true, staysOutside: true });
assert.ok(h.runUntil(() => !u.alive, 12));
assert.equal(u.skill.active, false); assert.equal(u.mem.rockDrone, null); assert.equal(u.mem.rockLock, null);
h.run(2); const t = h.b.time; h.run(3);
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S2: live ASPD controls drone cadence; overload uses the live trait cap`, () => {
const { h, u } = setup(id, { stationaryLock: true });
const f = { ...u.profile.funnel }, scales = [];
h.b.on('damaged', c => { if (c.source === u && drone(c)) scales.push({ t: h.b.time, scale: c.amount / (u.s.atk * u.s.atkScaleMul) }); });
h.run(4);
h.b.addBuff(u, { key: 'test:aspd', mods: { aspd: 100 } });
const interval = u.s.interval, t = h.b.time;
h.run(4);
const fast = scales.filter(c => c.t > t + 1.3);
assert.ok(fast.length > 3);
fast.slice(1).forEach((c, i) => approx(c.t - fast[i].t, Math.ceil(interval * 30 - 1e-9) / 30));
h.run(15);
approx(scales.at(-1).scale, f.max * u.def.skill.bb.scale);
u.skill.stop();
assert.deepEqual(u.profile.funnel, f);
assert.ok(u.s.flags.stun, 'stopping during overload keeps the existing post-overload stun');
done(h);
});
}
for (const moduleId of ['none', 'uniequip_002_rockr']) {
test(`elite S2 ${moduleId}: the resolved trait supplies initial ramp and increment`, () => {
const { h, u, target } = setup('chess_char_2_10_b', { moduleId, stationaryLock: true });
const f = u.profile.funnel;
h.run(3);
hits(h, u, target, 0).filter(drone).forEach((c, i) => approx(c.amount, u.s.atk * u.s.atkScaleMul * (f.init + i * f.delta)));
assert.equal(f.init, moduleId === 'none' ? 0.2 : 0.35);
done(h);
});
}
for (const sameTarget of [false, true]) {
test(`S2: a pre-skill projectile at ${sameTarget ? 'the same' : 'another'} target cannot change the released ramp`, () => {
const h = makeBattle({ seed: 5, autoFinish: false, captureNoisy: true, hooks: ['damaged', 'attack'],
defs: { enemies: { old: enemyRec({ key: 'old', hp: 1e7, speed: 0, motion: 'FLY' }),
preferred: enemyRec({ key: 'preferred', hp: 1e7, speed: 0, motion: 'FLY', taunt: 5 }) } },
units: [{ chessId: 'chess_char_2_10_a', row: 10, col: 4, carryState: { sp: 0 } }],
enemies: [{ key: 'old', pos: [10, 6] }],
});
h.step(); // launch an ordinary shot, which has not landed yet
const u = h.unit('chess_char_2_10_a'), old = h.enemies()[0];
assert.equal(h.hooksOf('attack').length, 1); assert.equal(h.hooksOf('damaged').length, 0);
const target = sameTarget ? old : h.spawn('preferred', { pos: [10, 5] });
h.step(); // update the spatial index for the second target
u.skill.gainSp(999); u.skill.activate('test');
assert.equal(u.mem.rockLock, target);
h.run(2);
assert.ok(hits(h, u, old, 0).some(c => c.dmg.isAttack), 'the old shot really lands');
const ds = hits(h, u, target, 0).filter(drone);
assert.ok(ds.length >= 3);
ds.slice(0, 3).forEach((c, i) => approx(c.amount, u.s.atk * u.s.atkScaleMul * (u.profile.funnel.init + i * u.profile.funnel.delta)));
done(h);
});
}
test('S2: the shared targetability filter releases an unselectable lock and acquires a legal candidate', () => {
const { h, u, target } = setup('chess_char_2_10_a', { newcomer: true });
assert.ok(h.runUntil(() => h.enemies().length === 2, 10));
const other = h.enemies().find(e => e !== target);
h.b.addBuff(target, { key: 'test:untargetable', flags: { untargetable: true } });
h.run(2); const t = h.b.time; h.run(2);
assert.equal(hits(h, u, target, t).length, 0);
assert.equal(u.mem.rockLock, other);
assert.ok(hits(h, u, other, t).some(drone));
done(h);
});
for (const [id, moduleId] of [['chess_char_2_10_a', undefined], ['chess_char_2_10_b', 'none'], ['chess_char_2_10_b', 'uniequip_002_rockr']]) {
test(`${id} ${moduleId ?? 'normal'}: skill data, DEFAULT trigger, range and talent remain intact`, () => {
for (const skillIndex of [0, 1]) {
const raw = getDefaultSource().getChess(id, { skillIndex, moduleId }).raw;
const h = makeBattle({ seed: 5, autoFinish: false, timeLimit: 100, captureNoisy: true,
defs: { enemies: { e: enemyRec({ key: 'e', hp: 1e7, speed: 0 }) } },
units: [{ chessId: id, row: 10, col: 4, skillIndex, moduleId, carryState: { sp: 999 } }],
});
h.run(2);
const u = h.unit(id);
assert.equal(u.skill.active, false, 'DEFAULT waits for a target despite full SP');
assert.deepEqual([u.skill.id, u.skill.rule, u.skill.spCost, u.skill.initSp, u.skill.duration, u.skill.spType],
[raw.skill.skillId, raw.skill.trigger.rule, raw.skill.spCost, raw.skill.initSp, raw.skill.duration, 'time']);
assert.deepEqual(u.liveRangeGrid, raw.rangeGrid);
assert.deepEqual([u.profile.canHitFly, u.profile.dmgType, u.profile.attack, u.s.blockCnt], [true, 'arts', 'ranged', 1]);
h.spawn('e', { pos: [10, 6] });
assert.ok(h.runUntil(() => u.skill.active, 3));
approx(u.s.aspd - u.base.aspd, raw.skill.bb.attack_speed);
const t = raw.talents.find(v => v.index === 0).bb;
h.runUntil(() => h.b.time >= 15.1, 20);
approx(u.findBuff('rockr:rock').stacks, 1);
approx(u.findBuff('rockr:rock').mods.atkPct, t.atk);
u.skill.stop();
assert.deepEqual(u.liveRangeGrid, raw.rangeGrid);
h.runUntil(() => h.b.time >= t.interval * (t.max_stack_cnt + 1), 80);
assert.equal(u.findBuff('rockr:rock').stacks, t.max_stack_cnt);
done(h);
}
});
}
+112 -112
View File
@@ -93,33 +93,33 @@
"round": 5,
"seed": 4108057433,
"waveId": "act1autochess_05",
"time": 51.27,
"ticks": 1538,
"time": 48.13,
"ticks": 1444,
"reason": "cleared",
"killed": 21,
"total": 21,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 28,
"rngDraws": 27,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":68325,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_3_12_a",2,null,1393.34,1,3,6,11192,1174,0,24,1],
["p1",1,"op","chess_char_3_12_a",2,null,1529.25,1,3,6,7131,1038,0,19,1],
["p1",2,"op","chess_char_1_06_a",1,null,1250.7,1,4,2,2639,0,0,12,1],
["p1",3,"op","chess_char_1_13_a",1,null,1004.3,1,6,4,2502,0,0,11,1],
["p1",4,"op","chess_char_3_08_a",1,null,1753.4,1,8,1,8314,0,0,10,1],
["p1",5,"op","chess_char_3_09_a",1,null,1393.7,1,9,0,15349,0,0,26,1],
["p1",6,"op","chess_char_3_10_a",1,null,1815,1,10,0,7744,0,0,8,1],
["p1",7,"op","chess_char_3_11_a",1,null,1447.6,1,5,8,15366,0,0,18,2],
["p1",8,"op","chess_char_3_13_a",1,null,1170.4,1,7,0,5220,0,0,29,6],
["p1",7,"op","chess_char_3_11_a",1,null,1447.6,1,5,7,12933,0,0,16,2],
["p1",8,"op","chess_char_3_13_a",1,null,1170.4,1,7,1,11714,0,0,29,6],
["-","~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_1249_lysdb_2":[5,5,0,168,27000],"enemy_1251_lysyta":[15,15,0,36,37125],"enemy_1328_cbjedi":[1,1,0,970,9000]},
"hooks": [1,31,1538,152,152,197,192,0,21,21,14,13,0,8070,8,11,21,0,1,21,0,0,0],
"events": {"atk":171,"deploy":8,"die":21,"dmg":192,"engage":8,"fx":38,"skill":27,"spawn":31,"status":15},
"enemies": {"enemy_1249_lysdb_2":[5,5,0,56,27000],"enemy_1251_lysyta":[15,15,0,12,37125],"enemy_1328_cbjedi":[1,1,0,970,9000]},
"hooks": [1,31,1444,137,137,208,203,0,21,21,14,13,0,7412,7,9,21,0,1,21,0,0,0],
"events": {"atk":156,"deploy":8,"die":21,"dmg":203,"engage":8,"fx":38,"skill":27,"spawn":31,"status":14},
"fx": {"aoe":1,"displace":13,"pull":13,"shieldBreak":5,"strike":2,"taunt":1,"volley":2,"zone":1},
"snaps": "81dd16a7 8822f255 d9175ef3 a516292e 44ea0bd2 1e3df8ec"
"snaps": "81dd16a7 afef1090 f721859c df68d4ec 22578dbf"
},
"bond-deputShip-high": {
"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",
@@ -257,31 +257,31 @@
"round": 5,
"seed": 3165180428,
"waveId": "act1autochess_05",
"time": 64.67,
"ticks": 1940,
"time": 64.27,
"ticks": 1928,
"reason": "cleared",
"killed": 17,
"total": 17,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 87,
"rngDraws": 82,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":90450,"bossDmg":0,"heal":395,"deaths":2,"layerGains":{}}},
"players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":90450,"bossDmg":0,"heal":381,"deaths":2,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_4_01_a",2,null,2901.8,1,4,0,479,0,0,3,0],
["p1",2,"op","chess_char_4_04_a",1,null,1936,1,6,2,9803,0,0,13,2],
["p1",1,"op","chess_char_4_01_a",2,null,2901.8,1,4,0,1278,0,0,8,0],
["p1",2,"op","chess_char_4_04_a",1,null,1936,1,6,1,11817,0,0,19,2],
["p1",3,"op","chess_char_2_14_a",1,null,1355.2,1,1,0,0,0,0,0,0],
["p1",4,"op","chess_char_3_10_a",1,null,1815,1,2,0,0,0,0,0,0],
["p1",5,"op","chess_char_3_20_a",1,null,1233.1,1,3,1,5410,0,0,25,1],
["p1",6,"op","chess_char_3_21_a",2,null,0,0,7,4,28473,1622,122,43,1],
["p1",7,"op","chess_char_4_02_a",2,null,1570.8,1,5,3,26148,0,0,18,1],
["p1",8,"op","chess_char_4_06_a",1,null,0,0,8,7,20136,1644,273,40,1]
["p1",5,"op","chess_char_3_20_a",1,null,1233.1,1,3,1,6585,0,0,24,1],
["p1",6,"op","chess_char_3_21_a",2,null,0,0,7,4,26578,1606,106,39,1],
["p1",7,"op","chess_char_4_02_a",2,null,1570.8,1,5,5,25327,0,0,18,1],
["p1",8,"op","chess_char_4_06_a",1,null,0,0,8,6,18864,1646,275,40,1]
],
"enemies": {"enemy_10042_prtrop":[4,4,0,1099,21600],"enemy_10042_prtrop_2":[2,2,0,1706,14400],"enemy_10043_sailor":[11,11,0,461,54450]},
"hooks": [1,25,1940,162,162,235,235,373,19,19,6,5,0,7198,16,10,17,0,1,19,0,0,0],
"events": {"atk":190,"deploy":8,"die":19,"dmg":234,"engage":6,"fx":32,"skill":11,"spawn":25,"status":43},
"fx": {"crit":9,"displace":6,"ripple":7,"shadowWeave":5,"shield":2,"shieldBreak":1,"stealth":2},
"snaps": "6de03b40 4dd7bab5 7a43012b 232aff6d fa4140b1 96914be3 e3a548b2"
"enemies": {"enemy_10042_prtrop":[4,4,0,1383,21600],"enemy_10042_prtrop_2":[2,2,0,1606,14400],"enemy_10043_sailor":[11,11,0,263,54450]},
"hooks": [1,25,1928,166,166,238,238,360,19,19,6,5,0,7171,17,9,17,0,1,19,0,0,0],
"events": {"atk":194,"deploy":8,"die":19,"dmg":237,"engage":6,"fx":28,"skill":11,"spawn":25,"status":46},
"fx": {"crit":6,"displace":5,"ripple":7,"shadowWeave":5,"shield":2,"shieldBreak":1,"stealth":2},
"snaps": "6de03b40 bcb3ddb5 7e1399bb 66f4cf7b 64a5b833 c3944891 0a226983"
},
"bond-emptyShip-high": {
"about": "协防干员 high: tier 1 layers 999; chess_char_4_17_b chess_char_4_18_b chess_char_4_19_b chess_char_4_22_b chess_char_2_14_b chess_char_3_10_b chess_char_4_20_b chess_char_4_21_b",
@@ -630,18 +630,18 @@
["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",4680.5,1,2,0,0,0,0,0,0],
["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",6111.11,1,1,0,0,0,1531,0,4],
["p1",3,"op","chess_char_2_05_b",1,"uniequip_002_harold",17101.41,1,4,0,0,50,600,7,1],
["p1",4,"op","chess_char_3_11_b",1,"uniequip_002_snhunt",2356.25,1,7,10,115541,1041,0,21,9],
["p1",4,"op","chess_char_3_11_b",1,"uniequip_002_snhunt",2356.25,1,7,10,114435,1041,0,21,9],
["p1",5,"op","chess_char_3_14_b",1,"uniequip_002_slbell",2170.63,1,5,1,3944,50,0,1,1],
["p1",6,"op","chess_char_3_20_b",1,"uniequip_002_kjera",1993.75,1,8,0,5820,50,0,7,1],
["p1",6,"op","chess_char_3_20_b",1,"uniequip_002_kjera",1993.75,1,8,0,6927,50,0,7,1],
["p1",7,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",2684.88,1,3,1,1414,50,0,1,2],
["p1",8,"op","chess_char_5_12_b",0,"uniequip_002_dusk",2407.13,1,6,5,48718,1141,0,10,10],
["p1","~1","token","token_10015_dusk_drgn",null,null,0,0,12,0,2547,1997,0,8,null]
],
"enemies": {"enemy_1267_nhpbr_2":[11,11,0,2135,69696],"enemy_1270_nhstlk_2":[4,4,0,0,73728],"enemy_1272_nhtank_2":[2,2,0,2243,34560]},
"hooks": [1,26,2174,65,65,115,115,12,18,18,28,28,0,7475,1579,3,17,0,1,18,0,0,0],
"events": {"atk":69,"deploy":9,"die":18,"dmg":115,"engage":6,"fx":40,"heal":12,"skill":56,"spawn":26,"status":20},
"hooks": [1,26,2174,65,65,117,117,12,18,18,28,28,0,7475,1579,3,17,0,1,18,0,0,0],
"events": {"atk":69,"deploy":9,"die":18,"dmg":117,"engage":6,"fx":40,"heal":12,"skill":56,"spawn":26,"status":20},
"fx": {"coldWind":2,"frostNova":2,"healAoe":4,"strike":9,"summon":1,"volley":9,"zone":13},
"snaps": "cc4cf53b 9139c2c7 206b1332 d27de872 77344198 6c0c2544 4d5c5c01 7258305b"
"snaps": "cc4cf53b 9139c2c7 206b1332 d27de872 77344198 6c0c2544 4d5c5c01 c0ec8188"
},
"bond-lateranoShip-low": {
"about": "拉特兰 low: tier 1 layers 1; chess_char_3_06_a chess_char_3_05_a chess_char_1_01_a chess_char_2_01_a chess_char_3_01_a chess_char_3_08_a chess_char_3_09_a chess_char_3_10_a",
@@ -724,34 +724,34 @@
"round": 5,
"seed": 1709081824,
"waveId": "act1autochess_05",
"time": 46.1,
"ticks": 1383,
"time": 45.7,
"ticks": 1371,
"reason": "cleared",
"killed": 53,
"total": 16,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 19,
"rngDraws": 17,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":53,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":30278,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{}}},
"players": {"p1":{"killed":53,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":30448,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_3_12_a",2,null,2567.4,1,7,0,0,0,0,0,0],
["p1",2,"op","chess_char_3_16_a",1,null,2390.3,1,8,0,0,0,0,0,0],
["p1",3,"op","chess_char_6_11_a",2,null,1634.6,1,3,6,559,0,0,9,1],
["p1",4,"op","chess_char_1_03_a",1,null,1145.1,1,5,1,3,0,0,6,1],
["p1",5,"op","chess_char_2_04_a",1,null,1074.7,1,10,20,7319,0,0,25,1],
["p1",3,"op","chess_char_6_11_a",2,null,1634.6,1,3,1,1,0,0,9,1],
["p1",4,"op","chess_char_1_03_a",1,null,1145.1,1,5,0,0,0,0,5,1],
["p1",5,"op","chess_char_2_04_a",1,null,1074.7,1,10,16,7786,0,0,24,1],
["p1",6,"op","chess_char_3_11_a",1,null,1447.6,1,11,6,8144,0,0,15,2],
["p1",7,"op","chess_char_3_13_a",1,null,1170.4,1,6,4,4460,0,0,23,6],
["p1",8,"op","chess_char_3_14_a",1,null,1376.1,1,9,6,8729,0,0,22,1],
["p1",9,"token","token_10030_mlyss_wtrman",null,null,936.9,1,4,3,1064,0,0,7,1],
["p1",7,"op","chess_char_3_13_a",1,null,1170.4,1,6,6,6718,0,0,23,6],
["p1",8,"op","chess_char_3_14_a",1,null,1376.1,1,9,8,6949,0,0,22,1],
["p1",9,"token","token_10030_mlyss_wtrman",null,null,936.9,1,4,5,851,0,0,7,1],
["-","~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_1195_sfyin":[11,11,0,0,19800],"enemy_1196_msfyin":[22,22,0,0,44],"enemy_1197_sfshu":[5,5,0,0,11250],"enemy_1198_msfshu":[15,15,0,0,45]},
"hooks": [1,64,1383,107,107,174,174,0,53,53,13,10,0,8024,30,0,53,0,1,53,0,0,0],
"events": {"atk":138,"deploy":9,"die":53,"dmg":174,"engage":7,"fx":25,"skill":23,"spawn":64,"status":44},
"hooks": [1,64,1371,105,105,177,177,0,53,53,13,10,0,7976,31,0,53,0,1,53,0,0,0],
"events": {"atk":135,"deploy":9,"die":53,"dmg":177,"engage":7,"fx":25,"skill":23,"spawn":64,"status":42},
"fx": {"copy":1,"dp":1,"sleep":3,"strike":2,"summon":16,"volley":2},
"snaps": "ccd30115 f5d257e4 89df9ecc 0a718fd3 10bdb391"
"snaps": "ccd30115 c7745b19 5c5ce90e 017253c9 61763456"
},
"bond-maniShip-high": {
"about": "调和 high: tier 1 layers 999; chess_char_5_19_b chess_char_5_17_b chess_char_6_11_b chess_char_1_03_a chess_char_2_04_a chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b token_10030_mlyss_wtrman",
@@ -817,17 +817,17 @@
["p1",1,"op","chess_char_4_01_a",2,null,2901.8,1,3,0,0,0,0,0,0],
["p1",2,"op","chess_char_2_11_a",1,null,2257.29,1,6,0,0,0,0,0,0],
["p1",3,"op","chess_char_3_18_a",2,null,1629.1,1,8,0,0,0,0,0,0],
["p1",4,"op","chess_char_3_01_a",2,null,1663.13,1,1,5,24785,0,0,23,1],
["p1",5,"op","chess_char_3_17_a",1,null,2470.6,1,4,4,38664,0,0,32,3],
["p1",6,"op","chess_char_3_20_a",1,null,913.22,1,5,1,6272,320,0,30,1],
["p1",7,"op","chess_char_3_21_a",2,null,1500.4,1,2,4,24122,0,0,21,1],
["p1",8,"op","chess_char_4_02_a",2,null,723.8,1,7,3,32301,847,0,17,1]
["p1",4,"op","chess_char_3_01_a",2,null,1663.13,1,1,2,24227,0,0,22,1],
["p1",5,"op","chess_char_3_17_a",1,null,2470.6,1,4,5,36116,0,0,30,3],
["p1",6,"op","chess_char_3_20_a",1,null,913.22,1,5,2,10165,320,0,30,1],
["p1",7,"op","chess_char_3_21_a",2,null,1500.4,1,2,6,20213,0,0,19,1],
["p1",8,"op","chess_char_4_02_a",2,null,530.2,1,7,2,35423,1041,0,17,1]
],
"enemies": {"enemy_1116_liprr":[11,11,0,920,69696],"enemy_1116_liprr_2":[4,4,0,247,34560],"enemy_1118_lidbox_2":[2,2,0,0,21888]},
"hooks": [1,25,1569,131,131,278,278,0,17,17,7,6,0,4875,9,8,17,0,1,17,0,0,0],
"events": {"atk":163,"deploy":8,"die":17,"dmg":277,"engage":5,"fx":20,"skill":13,"spawn":25,"status":62},
"enemies": {"enemy_1116_liprr":[11,11,0,620,69696],"enemy_1116_liprr_2":[4,4,0,741,34560],"enemy_1118_lidbox_2":[2,2,0,0,21888]},
"hooks": [1,25,1569,126,126,281,281,0,17,17,7,5,0,4873,9,8,17,0,1,17,0,0,0],
"events": {"atk":156,"deploy":8,"die":17,"dmg":280,"engage":5,"fx":20,"skill":12,"spawn":25,"status":64},
"fx": {"buff":1,"displace":8,"ripple":5,"shield":2,"shieldBreak":1,"volley":3},
"snaps": "cb2e289d 5504ba16 91f48812 b5b92713 b5b86756 360f3526"
"snaps": "84698390 95c61d5c f771ae02 f28e626f 36ad45e1 faed645b"
},
"bond-miraShip-high": {
"about": "奇迹 high: tier 1 layers 999; chess_char_4_01_b chess_char_2_11_b chess_char_4_04_b chess_char_4_07_b chess_char_3_01_b chess_char_5_22_b chess_char_4_02_b chess_char_4_06_b",
@@ -1091,24 +1091,24 @@
"total": 30,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 45,
"rngDraws": 42,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":262819,"bossDmg":0,"heal":0,"deaths":1,"layerGains":{}}},
"players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":262899,"bossDmg":0,"heal":0,"deaths":1,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_1_12_b",1,"uniequip_002_estell",2847.9,1,2,0,0,0,0,0,0],
["p1",2,"op","chess_char_2_08_b",1,"uniequip_002_bubble",3710.3,1,3,0,0,0,0,0,0],
["p1",3,"op","chess_char_3_06_b",1,"uniequip_002_philae",3462.8,1,4,0,0,0,0,0,0],
["p1",4,"op","chess_char_4_23_b",2,"uniequip_002_gvial2",1532.04,1,5,16,168462,1560,0,77,1],
["p1",5,"op","chess_char_4_22_b",2,"uniequip_002_svrash",0,0,6,12,52198,2826,0,33,1],
["p1",4,"op","chess_char_4_23_b",2,"uniequip_002_gvial2",2117.06,1,5,15,140375,975,0,70,1],
["p1",5,"op","chess_char_4_22_b",2,"uniequip_002_svrash",0,0,6,10,44559,2826,0,33,1],
["p1",6,"op","chess_char_2_06_b",0,"uniequip_002_papyrs",1802.9,1,7,0,0,0,0,0,0],
["p1",7,"op","chess_char_3_13_b",1,"uniequip_002_malist",1512.5,1,8,2,42159,0,0,46,11],
["p1",7,"op","chess_char_3_13_b",1,"uniequip_002_malist",1512.5,1,8,5,77965,0,0,42,11],
["p1",8,"op","chess_char_4_25_b",2,"uniequip_002_cetsyr",1838.1,1,1,0,0,0,0,0,1]
],
"enemies": {"enemy_1006_shield_3":[3,3,0,2843,138240],"enemy_1043_zomsbr":[23,23,0,0,69875],"enemy_1402_tgshd_2":[4,4,0,1251,59904]},
"hooks": [1,38,2462,165,165,397,597,1388,31,31,14,14,0,6375,0,5,30,0,1,43,0,0,0],
"events": {"atk":207,"deploy":8,"die":31,"dmg":597,"engage":3,"fx":110,"skill":28,"spawn":38,"status":41},
"enemies": {"enemy_1006_shield_3":[3,3,0,2550,138240],"enemy_1043_zomsbr":[23,23,0,0,69635],"enemy_1402_tgshd_2":[4,4,0,1251,59904]},
"hooks": [1,38,2462,153,153,408,408,1297,31,31,14,14,0,6375,0,4,30,0,1,40,0,0,0],
"events": {"atk":183,"deploy":8,"die":31,"dmg":408,"engage":3,"fx":110,"skill":28,"spawn":38,"status":39},
"fx": {"expose":58,"jungleSoul":1,"mote":14,"redistribute":15,"reweave":1,"slash":20,"truesilver":1},
"snaps": "d81207a4 e5f41037 e0b88fa7 7a6a3918 dbdfa4d8 a6f93588 e957bb33 9d7565d2 294af894"
"snaps": "d252a2b9 064fa22f 580a6127 93f56817 48dfb65c c53e2705 8414849f 496b43f5 c88e5e4d"
},
"bond-siracusaShip-low": {
"about": "叙拉古 low: tier 1 layers 1; chess_char_3_06_a chess_char_1_08_a chess_char_2_16_a chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_1_07_a",
@@ -1278,26 +1278,26 @@
"rngDraws": 4,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":126144,"bossDmg":0,"heal":0,"deaths":2,"layerGains":{"siracusaShip":4}}
"p1": {"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":126144,"bossDmg":0,"heal":0,"deaths":2,"layerGains":{"siracusaShip":6}}
},
"units": [
["p1",1,"op","chess_char_3_16_a",1,null,2987.88,1,3,0,0,0,0,0,0],
["p1",2,"op","chess_char_4_01_a",2,null,4077.11,1,5,2,8508,566,0,10,1],
["p1",3,"op","chess_char_1_08_a",1,null,0,0,6,1,7992,2615,0,13,1],
["p1",4,"op","chess_char_3_18_a",2,null,0,0,10,5,40927,2036,0,38,1],
["p1",5,"op","chess_char_3_19_a",2,null,1978.63,1,7,2,10333,0,0,21,1],
["p1",6,"op","chess_char_3_20_a",1,null,1541.38,1,9,2,682,0,0,8,1],
["p1",7,"op","chess_char_3_21_a",2,null,1875.5,1,11,1,19449,0,0,23,1],
["p1",5,"op","chess_char_3_19_a",2,null,1978.63,1,7,4,9931,0,0,21,1],
["p1",6,"op","chess_char_3_20_a",1,null,1541.38,1,9,0,1963,0,0,6,1],
["p1",7,"op","chess_char_3_21_a",2,null,1875.5,1,11,1,18570,0,0,23,1],
["p1",8,"op","chess_char_4_02_a",2,null,1963.5,1,4,4,37037,0,0,7,1],
["p1",9,"token","token_10028_vigil_wolf",null,null,852.9,1,8,0,1216,27,0,2,null],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null]
],
"enemies": {"enemy_1116_liprr":[11,11,0,41,69696],"enemy_1116_liprr_2":[4,4,0,297,34560],"enemy_1118_lidbox_2":[2,2,0,4906,21888]},
"hooks": [1,28,1502,150,150,266,266,0,19,19,7,4,3,6742,29,17,17,0,1,20,2,0,0],
"events": {"atk":183,"deploy":9,"die":19,"dmg":264,"engage":8,"fx":38,"layer":2,"skill":11,"spawn":28,"status":92},
"fx": {"aoe":1,"camouflage":1,"counter":3,"displace":16,"dp":2,"garrison":2,"liberate":2,"phase":3,"ripple":4,"sermon":1,"shield":2,"wolfShadow":1},
"snaps": "a9326071 ba5f4858 674158f2 668d5d48 ab9377c5"
"hooks": [1,28,1502,148,148,266,266,0,19,19,7,4,3,6742,29,17,17,0,1,20,3,0,0],
"events": {"atk":181,"deploy":9,"die":19,"dmg":264,"engage":8,"fx":39,"layer":3,"skill":11,"spawn":28,"status":92},
"fx": {"aoe":1,"camouflage":1,"counter":3,"displace":16,"dp":2,"garrison":3,"liberate":2,"phase":3,"ripple":4,"sermon":1,"shield":2,"wolfShadow":1},
"snaps": "44b7a79e a057c22e d6d91d94 68aa8562 55566a97"
},
"bond-soloShip-high": {
"about": "独行 high: tier 1 layers 999; chess_char_5_19_b chess_char_1_08_b chess_char_5_13_b chess_char_5_14_b chess_char_5_17_b chess_char_5_12_b chess_char_5_15_b chess_char_5_20_b",
@@ -1575,8 +1575,8 @@
"round": 5,
"seed": 4091762637,
"waveId": "act1autochess_05",
"time": 55.83,
"ticks": 1675,
"time": 51.33,
"ticks": 1540,
"reason": "cleared",
"killed": 17,
"total": 17,
@@ -1584,16 +1584,16 @@
"bossHpLeft": null,
"rngDraws": 6,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":123047,"bossDmg":0,"heal":3612,"deaths":0,"layerGains":{}}},
"players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":123085,"bossDmg":0,"heal":2666,"deaths":0,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_3_06_a",1,null,3577.42,1,6,0,15374,3173,0,15,1],
["p1",2,"op","chess_char_3_02_a",1,null,2102.1,1,7,7,38048,0,0,26,1],
["p1",1,"op","chess_char_3_06_a",1,null,3577.42,1,6,2,8709,2130,0,11,1],
["p1",2,"op","chess_char_3_02_a",1,null,2102.1,1,7,6,32218,0,0,25,1],
["p1",3,"op","chess_char_3_03_a",1,null,1515.8,1,5,0,0,0,0,0,0],
["p1",4,"op","chess_char_3_04_a",1,null,2050.4,1,8,1,28010,0,0,0,0],
["p1",5,"op","chess_char_3_05_a",2,null,5978.83,1,9,4,20606,245,0,18,1],
["p1",6,"op","chess_char_1_06_a",1,null,1250.7,1,3,4,15626,0,1411,30,1],
["p1",7,"op","chess_char_2_05_a",1,null,1552.32,1,4,0,0,0,2201,17,1],
["p1",8,"op","chess_char_2_10_a",1,null,1185.8,1,10,0,5382,0,0,29,1],
["p1",5,"op","chess_char_3_05_a",2,null,5978.83,1,9,3,21417,342,0,18,1],
["p1",6,"op","chess_char_1_06_a",1,null,1250.7,1,3,2,14787,0,1005,26,1],
["p1",7,"op","chess_char_2_05_a",1,null,1552.32,1,4,0,0,0,1661,14,1],
["p1",8,"op","chess_char_2_10_a",1,null,1185.8,1,10,1,17944,0,0,29,1],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
["p1","~1","token","token_10031_swire2_gdtrap",null,null,1000,0,11,0,0,0,0,0,null],
@@ -1614,11 +1614,11 @@
["p1","~16","token","token_10031_swire2_gdtrap",null,null,1000,0,43,0,0,0,0,0,null],
["p1","~17","token","token_10031_swire2_gdtrap",null,null,1000,1,44,0,0,0,0,0,null]
],
"enemies": {"enemy_1116_liprr":[11,11,0,192,69696],"enemy_1116_liprr_2":[4,4,0,199,34560],"enemy_1118_lidbox_2":[2,2,0,3027,21888]},
"hooks": [1,44,1675,165,165,298,312,28,17,33,6,2,0,6349,15,14,17,0,1,17,0,0,0],
"events": {"atk":165,"deploy":25,"die":33,"dmg":312,"engage":5,"fx":104,"heal":28,"skill":10,"spawn":44,"status":43},
"fx": {"aoe":5,"coin":18,"counter":4,"explode":16,"liberate":1,"overload":1,"phase":3,"strike":38,"summon":17,"taunt":1},
"snaps": "950a6182 a670e309 094b33b8 126a0a37 d2dc7eef 6d3cae8b"
"enemies": {"enemy_1116_liprr":[11,11,0,108,69696],"enemy_1116_liprr_2":[4,4,0,307,34560],"enemy_1118_lidbox_2":[2,2,0,2057,21888]},
"hooks": [1,44,1540,146,146,307,314,24,17,33,6,2,0,6067,15,14,17,0,1,17,0,0,0],
"events": {"atk":146,"deploy":25,"die":33,"dmg":314,"engage":5,"fx":115,"heal":24,"skill":10,"spawn":44,"status":43},
"fx": {"aoe":3,"coin":17,"counter":4,"drone":23,"explode":16,"liberate":1,"overload":1,"phase":2,"strike":30,"summon":17,"taunt":1},
"snaps": "d1974070 80b823c0 1cdb05ab d65e859c c593343d 34f0b4a2"
},
"bond-victoriaShip-high": {
"about": "维多利亚 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_07_b chess_char_1_06_b chess_char_2_05_b chess_char_2_10_b chess_char_3_08_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
@@ -1629,8 +1629,8 @@
"round": 10,
"seed": 11223320,
"waveId": "act1autochess_h03",
"time": 62.87,
"ticks": 1886,
"time": 48.8,
"ticks": 1464,
"reason": "cleared",
"killed": 12,
"total": 12,
@@ -1638,27 +1638,27 @@
"bossHpLeft": null,
"rngDraws": 0,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":141088,"bossDmg":0,"heal":6750,"deaths":0,"layerGains":{}}},
"players": {"p1":{"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":141088,"bossDmg":0,"heal":3250,"deaths":0,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2908.4,1,5,0,0,0,0,0,0],
["p1",2,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2621.3,1,7,0,0,0,0,0,0],
["p1",3,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1542.2,1,8,5,28240,0,1739,7,1],
["p1",4,"op","chess_char_2_05_b",1,"uniequip_002_harold",17910.32,1,10,0,0,5469,5011,10,1],
["p1",5,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,11,7,93826,1281,0,42,1],
["p1",3,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1542.2,1,8,0,0,0,0,0,0],
["p1",4,"op","chess_char_2_05_b",1,"uniequip_002_harold",17910.32,1,10,0,0,2609,3250,6,1],
["p1",5,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,11,12,131060,641,0,23,1],
["p1",6,"op","chess_char_3_08_b",1,"uniequip_002_mint",2184.6,1,4,0,0,0,0,0,0],
["p1",7,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",2187.9,1,6,0,0,0,0,0,0],
["p1",8,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1788.6,1,9,0,19021,0,0,7,6],
["p1",8,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1788.6,1,9,0,10028,0,0,3,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_1005_yokai_2":[4,4,0,1532,15428],"enemy_1041_lazerd_2":[3,3,0,5218,44790],"enemy_1042_frostd":[5,5,0,0,80870]},
"hooks": [1,25,1886,79,79,76,76,12,12,12,9,9,0,4756,266,0,12,0,1,12,0,0,0],
"events": {"atk":79,"deploy":10,"die":12,"dmg":76,"engage":3,"fx":10,"heal":12,"skill":18,"spawn":25,"status":17},
"fx": {"counter":2,"explosion":6,"overload":1,"taunt":1},
"snaps": "baf019b9 04dccd49 7607a313 d5443e4e 65c3d507 5c447217 1a74a703"
"enemies": {"enemy_1005_yokai_2":[4,4,0,641,15428],"enemy_1041_lazerd_2":[3,3,0,2609,44790],"enemy_1042_frostd":[5,5,0,0,80870]},
"hooks": [1,25,1464,38,38,59,59,6,12,12,6,5,0,3288,194,0,12,0,1,12,0,0,0],
"events": {"atk":38,"deploy":10,"die":12,"dmg":59,"engage":2,"fx":28,"heal":6,"skill":11,"spawn":25,"status":17},
"fx": {"drone":23,"explosion":4,"overload":1},
"snaps": "41450a5d 84679dbf e939cdb3 4cc777cb 3c9f9b60"
},
"bond-visiShip-low": {
"about": "远见 low: tier 1 layers 1; chess_char_3_12_a chess_char_3_03_a chess_char_2_02_a chess_char_3_08_a chess_char_3_09_a chess_char_3_10_a chess_char_3_11_a chess_char_3_13_a token_10000_silent_healrb",
@@ -1669,32 +1669,32 @@
"round": 5,
"seed": 3923365115,
"waveId": "act1autochess_05",
"time": 54.2,
"ticks": 1626,
"time": 64.23,
"ticks": 1927,
"reason": "cleared",
"killed": 17,
"total": 17,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 36,
"rngDraws": 34,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":98550,"bossDmg":0,"heal":4275,"deaths":0,"layerGains":{}}},
"players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":98550,"bossDmg":0,"heal":4764,"deaths":2,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_3_12_a",2,null,2567.4,1,3,0,0,0,0,0,0],
["p1",1,"op","chess_char_3_12_a",2,null,412.94,1,3,2,1572,2154,0,9,1],
["p1",2,"op","chess_char_3_03_a",1,null,1515.8,1,6,0,0,0,0,0,0],
["p1",3,"op","chess_char_2_02_a",1,null,1540,1,1,0,0,0,3047,13,2],
["p1",4,"op","chess_char_3_08_a",1,null,1724.8,1,4,3,17803,29,0,8,1],
["p1",5,"op","chess_char_3_09_a",1,null,1393.7,1,5,3,25124,547,0,26,1],
["p1",6,"op","chess_char_3_10_a",1,null,1815,1,2,2,7065,1716,0,9,1],
["p1",7,"op","chess_char_3_11_a",1,null,1405.8,1,7,6,38190,825,0,25,3],
["p1",8,"op","chess_char_3_13_a",1,null,914,1,8,3,10369,1485,0,36,7],
["p1",9,"token","token_10000_silent_healrb",null,null,1000,1,29,0,0,0,1229,16,null]
["p1",3,"op","chess_char_2_02_a",1,null,1540,1,1,0,0,0,3246,15,2],
["p1",4,"op","chess_char_3_08_a",1,null,1753.4,1,4,3,11114,0,0,8,1],
["p1",5,"op","chess_char_3_09_a",1,null,1393.7,1,5,3,26048,1077,0,32,1],
["p1",6,"op","chess_char_3_10_a",1,null,0,0,2,1,10166,3109,0,9,1],
["p1",7,"op","chess_char_3_11_a",1,null,0,0,7,4,27868,2323,0,20,2],
["p1",8,"op","chess_char_3_13_a",1,null,1170.4,1,8,4,21783,1518,0,34,7],
["p1",9,"token","token_10000_silent_healrb",null,null,1000,0,29,0,0,0,1518,19,null]
],
"enemies": {"enemy_1116_liprr":[11,11,0,2103,54450],"enemy_1116_liprr_2":[4,4,0,783,27000],"enemy_1118_lidbox_2":[2,2,0,1716,17100]},
"hooks": [1,28,1626,168,168,178,178,29,17,19,15,15,0,7317,2,24,17,0,1,17,0,0,0],
"events": {"atk":195,"deploy":11,"die":19,"dmg":178,"engage":5,"fx":47,"heal":29,"skill":30,"spawn":26,"status":23},
"fx": {"aoe":1,"displace":16,"liberate":2,"phase":4,"pull":16,"strike":3,"summon":2,"volley":3},
"snaps": "1a69c505 b8848494 3f8ff510 ec364fad 577e2d85 ed7ffada"
"enemies": {"enemy_1116_liprr":[11,11,0,1531,54450],"enemy_1116_liprr_2":[4,4,0,1291,27000],"enemy_1118_lidbox_2":[2,2,0,7359,17100]},
"hooks": [1,28,1927,192,192,223,223,34,19,22,15,14,0,8243,1,23,17,0,1,19,0,0,0],
"events": {"atk":215,"deploy":11,"die":22,"dmg":223,"engage":6,"fx":36,"heal":34,"skill":29,"spawn":26,"status":22},
"fx": {"aoe":1,"displace":11,"liberate":2,"phase":5,"pull":11,"strike":2,"summon":2,"volley":2},
"snaps": "78218668 baf3658a cf85bac1 a4b51e2f ad4c883e fe1c9c59 f50febd4"
},
"bond-visiShip-high": {
"about": "远见 high: tier 1 layers 999; chess_char_4_17_b chess_char_4_18_b chess_char_3_03_b chess_char_4_19_b chess_char_4_16_b chess_char_2_02_b chess_char_4_20_b chess_char_4_21_b token_10000_silent_healrb",
+39 -39
View File
@@ -4155,29 +4155,29 @@
"bossHpLeft": null,
"rngDraws": 1138,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":0,"total":138,"perfect":false,"leaks":138,"leaksUncounted":0,"coins":0,"dmg":455852,"bossDmg":0,"heal":0,"deaths":15,"layerGains":{}}},
"players": {"p1":{"killed":0,"total":138,"perfect":false,"leaks":138,"leaksUncounted":0,"coins":0,"dmg":545909,"bossDmg":0,"heal":0,"deaths":15,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_5_diy1_a",0,null,1236.4,1,8,0,61914,0,0,80,3],
["p1",2,"op","chess_char_5_diy2_a",1,null,1236.4,1,11,0,64924,0,0,51,1],
["p1",3,"op","chess_char_5_diy1_a",2,null,1236.4,1,13,0,62811,0,0,93,3],
["p1",4,"op","chess_char_5_diy2_b",0,"none",1496,1,15,0,74201,0,0,82,3],
["p1",5,"op","chess_char_5_diy1_b",1,"none",1496,1,4,0,72338,0,0,44,1],
["p1",6,"op","chess_char_5_diy2_b",2,"none",1496,1,9,0,97519,0,0,75,3],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_gdglow",1595,1,163,0,6333,3190,0,4,1],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_gdglow",0,0,95,0,1891,3190,0,16,0],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_gdglow",0,0,157,0,3203,4785,0,25,0],
["p1",10,"op","chess_char_5_diy2_b",0,"uniequip_003_gdglow",0,0,152,0,2419,4488,0,22,0],
["p1",11,"op","chess_char_5_diy1_b",1,"uniequip_003_gdglow",0,0,149,0,1370,4488,0,15,0],
["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_003_gdglow",0,0,107,0,6927,2992,0,13,1],
["p1",1,"op","chess_char_5_diy1_a",0,null,1236.4,1,8,0,74713,0,0,80,3],
["p1",2,"op","chess_char_5_diy2_a",1,null,1236.4,1,11,0,73083,0,0,51,1],
["p1",3,"op","chess_char_5_diy1_a",2,null,1236.4,1,13,0,77690,0,0,93,3],
["p1",4,"op","chess_char_5_diy2_b",0,"none",1496,1,15,0,88835,0,0,82,3],
["p1",5,"op","chess_char_5_diy1_b",1,"none",1496,1,4,0,80271,0,0,44,1],
["p1",6,"op","chess_char_5_diy2_b",2,"none",1496,1,9,0,110904,0,0,75,3],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_gdglow",1595,1,163,0,7094,3190,0,4,1],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_gdglow",0,0,95,0,4933,3190,0,16,0],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_gdglow",0,0,157,0,7955,4785,0,25,0],
["p1",10,"op","chess_char_5_diy2_b",0,"uniequip_003_gdglow",0,0,152,0,6694,4488,0,22,0],
["p1",11,"op","chess_char_5_diy1_b",1,"uniequip_003_gdglow",0,0,149,0,4284,4488,0,15,0],
["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_003_gdglow",0,0,107,0,9453,2992,0,13,1],
["-","~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_1166_dusbr_2":[45,0,45,7678,132417],"enemy_1169_duphlx_2":[51,0,51,6281,141717],"enemy_1170_dushld_2":[42,0,42,9174,181718]},
"hooks": [1,163,6073,559,559,2092,2092,0,15,153,16,13,0,24679,578,15,138,138,1,15,0,0,0],
"events": {"atk":559,"deploy":22,"die":15,"dmg":2092,"engage":12,"fx":1777,"leak":138,"skill":29,"spawn":153,"status":576},
"enemies": {"enemy_1166_dusbr_2":[45,0,45,7678,168139],"enemy_1169_duphlx_2":[51,0,51,6281,168619],"enemy_1170_dushld_2":[42,0,42,9174,209150]},
"hooks": [1,163,6073,559,559,2612,2612,0,15,153,16,13,0,24679,578,15,138,138,1,15,0,0,0],
"events": {"atk":559,"deploy":22,"die":15,"dmg":2612,"engage":12,"fx":1777,"leak":138,"skill":29,"spawn":153,"status":576},
"fx": {"drone":1138,"droneLock":518,"drones":16,"explode":105},
"snaps": "bdd99668 c46a9ee9 9c11177a eebd0b2c 8cd16121 d2197dca fedac0f3 43f32cf5 bf91603f 06844f89 604fed15 8020ffd5 cb5d37fc 02479270 70c2225e 7397b81e 4dddf649 d98396d8 2f92ae08 3954d416 2533bfc0"
"snaps": "92781428 6430fa6b c6dc707c f08a198d fc3a79fb 860d747b c0bc2e24 fbd9411c b6d17260 56587aa5 c13636cb 72ee3e4c f6c337e7 09705474 b4dd8303 227da0fa c51ac9e5 c5fff7d6 5fdb73d0 7ad219bb 0c191fb1"
},
"diy-099": {
"about": "6_diy1_a=gdglow/S1 6_diy2_a=gdglow/S2 6_diy1_a=gdglow/S3 6_diy2_b=gdglow/S1 6_diy1_b=gdglow/S2 6_diy2_b=gdglow/S3 6_diy1_b=gdglow/S1/002_gdglow 6_diy2_b=gdglow/S2/002_gdglow 6_diy1_b=gdglow/S3/002_gdglow 6_diy2_b=gdglow/S1/003_gdglow 6_diy1_b=gdglow/S2/003_gdglow 6_diy2_b=gdglow/S3/003_gdglow",
@@ -4188,37 +4188,37 @@
"round": 13,
"seed": 213318073,
"waveId": "act1autochess_h06",
"time": 215.43,
"ticks": 6463,
"time": 214.47,
"ticks": 6434,
"reason": "cleared",
"killed": 68,
"killed": 75,
"total": 129,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 1845,
"rngDraws": 1833,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":68,"total":129,"perfect":false,"leaks":61,"leaksUncounted":0,"coins":0,"dmg":1469349,"bossDmg":0,"heal":0,"deaths":6,"layerGains":{}}},
"players": {"p1":{"killed":75,"total":129,"perfect":false,"leaks":54,"leaksUncounted":0,"coins":0,"dmg":1599812,"bossDmg":0,"heal":0,"deaths":6,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_6_diy1_a",0,null,1236.4,1,3,10,114795,0,0,95,3],
["p1",2,"op","chess_char_6_diy2_a",1,null,1236.4,1,4,6,98029,0,0,44,1],
["p1",3,"op","chess_char_6_diy1_a",2,null,1236.4,1,11,1,115795,0,0,50,3],
["p1",4,"op","chess_char_6_diy2_b",0,"none",1496,1,13,1,39972,0,0,45,3],
["p1",5,"op","chess_char_6_diy1_b",1,"none",1496,1,5,10,174655,0,0,43,1],
["p1",6,"op","chess_char_6_diy2_b",2,"none",1496,1,8,5,130906,0,0,91,3],
["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_002_gdglow",1633.5,1,12,11,200948,0,0,91,4],
["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_gdglow",1633.5,1,14,6,298003,0,0,53,1],
["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_gdglow",1633.5,1,9,10,201809,0,0,87,3],
["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_003_gdglow",1496,1,144,2,38398,2992,0,33,2],
["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_gdglow",1496,1,138,1,10182,2992,0,57,0],
["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_gdglow",1496,1,132,5,45856,2992,0,15,1],
["p1",1,"op","chess_char_6_diy1_a",0,null,1236.4,1,3,4,106436,0,0,92,3],
["p1",2,"op","chess_char_6_diy2_a",1,null,1236.4,1,4,4,131514,0,0,43,1],
["p1",3,"op","chess_char_6_diy1_a",2,null,1236.4,1,11,2,122309,0,0,46,3],
["p1",4,"op","chess_char_6_diy2_b",0,"none",1496,1,13,0,53284,0,0,46,3],
["p1",5,"op","chess_char_6_diy1_b",1,"none",1496,1,5,13,162190,0,0,43,1],
["p1",6,"op","chess_char_6_diy2_b",2,"none",1496,1,8,7,158296,0,0,91,3],
["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_002_gdglow",1633.5,1,12,21,277787,0,0,91,4],
["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_gdglow",1633.5,1,14,8,261532,0,0,53,1],
["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_gdglow",1633.5,1,9,7,186106,0,0,87,3],
["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_003_gdglow",0,0,92,2,67871,2992,0,23,2],
["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_gdglow",0,0,91,1,35064,2992,0,57,0],
["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_gdglow",1496,1,136,5,37424,2992,0,23,1],
["-","~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_10124_uashld_2":[18,4,14,4488,546846],"enemy_1043_zomsbr":[66,50,16,912,309132],"enemy_1061_zomshd":[45,14,31,3576,649372]},
"hooks": [1,149,6463,724,724,4112,4112,49312,74,135,25,20,0,34562,907,8,129,61,1,74,0,0,0],
"events": {"atk":724,"deploy":18,"die":74,"dmg":4112,"engage":12,"fx":2496,"leak":61,"skill":45,"spawn":143,"status":473},
"fx": {"drone":1845,"droneLock":450,"drones":25,"explode":176},
"snaps": "f541f090 c32b0887 8a0d0ec8 0025b950 5d8fbbd2 abfb2750 083f5116 896707cd 0f55d1b0 2db8f520 09351c4c 9ef017f3 d1c0123c 8ea2215f d2213fdc 38a8b05f 2c5a266c cbe1b254 464f79f1 fb548a9b 31a8d689 3650bdc6"
"enemies": {"enemy_10124_uashld_2":[18,8,10,2992,638700],"enemy_1043_zomsbr":[66,53,13,912,328686],"enemy_1061_zomshd":[45,14,31,5072,669451]},
"hooks": [1,147,6434,716,716,4774,4774,49638,81,135,25,19,0,34415,861,9,129,54,1,81,0,0,0],
"events": {"atk":716,"deploy":16,"die":81,"dmg":4774,"engage":12,"fx":2485,"leak":54,"skill":44,"spawn":143,"status":469},
"fx": {"drone":1833,"droneLock":445,"drones":25,"explode":182},
"snaps": "8997e50d 3106dc76 e94c98b3 86739ec6 32b588ca 7728ff26 deca17c2 9c61006c 87a4e62c 83004cb1 3efd9d05 00bc8ef7 6b6d9f39 14e1ea96 9b5a8ef8 297316e3 3bc788c7 32245b95 f1986285 2cfa6f21 bd536ac3 ce7828b3"
},
"diy-100": {
"about": "5_diy1_a=haak/S1 5_diy2_a=haak/S2 5_diy1_a=haak/S3 5_diy2_b=haak/S1 5_diy1_b=haak/S2 5_diy2_b=haak/S3 5_diy1_b=haak/S1/002_haak 5_diy2_b=haak/S2/002_haak 5_diy1_b=haak/S3/002_haak 5_diy2_b=haak/S1/003_haak 5_diy1_b=haak/S2/003_haak 5_diy2_b=haak/S3/003_haak",
+123 -120
View File
@@ -227,50 +227,50 @@
"round": 14,
"seed": 1428555614,
"waveId": "act1autochess_h07_03",
"time": 169.2,
"ticks": 5076,
"time": 170.4,
"ticks": 5112,
"reason": "cleared",
"killed": 18,
"killed": 19,
"total": 6,
"unspawned": 0,
"bossHpLeft": 0,
"rngDraws": 1416,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {"killed":18,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1516502,"bossDmg":1398136,"heal":10352,"deaths":1,"layerGains":{}},
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2667879,"bossDmg":2601864,"heal":41836,"deaths":3,"layerGains":{}}
"p1": {"killed":19,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1542879,"bossDmg":1424512,"heal":11484,"deaths":2,"layerGains":{}},
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2641521,"bossDmg":2575488,"heal":50009,"deaths":3,"layerGains":{}}
},
"units": [
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",4070,1,7,0,0,0,6873,0,1],
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",4070,1,7,0,0,0,7258,0,1],
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",3232.9,1,11,0,0,0,0,0,0],
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3411.1,1,9,1,29,1184,0,29,1],
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2344.65,1,13,5,815234,3173,0,52,7],
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2106.51,1,17,0,248050,6003,751,41,2],
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",162.95,1,59,1,26550,16018,1505,0,3],
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1664.48,1,21,1,284438,9843,1204,82,7],
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3411.1,1,9,1,47,6231,541,47,1],
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2344.65,1,13,6,837990,7545,698,53,7],
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1834.46,1,17,1,262042,7260,906,41,2],
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",0,0,59,1,26548,14647,1235,0,3],
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",814.83,1,21,0,273606,9866,827,82,6],
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1834.8,1,5,0,30,0,19,13,1],
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1454.2,1,15,0,37,0,0,9,9],
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2082.3,1,23,0,103926,1501,0,178,4],
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,26,0,0,0,0,0,null],
["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4181.76,1,31,1,476210,0,0,176,3],
["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",3043.7,1,62,1,28,3044,0,9,1],
["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4181.76,1,31,1,481322,0,0,177,3],
["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",3043.7,1,62,1,27,3044,0,8,1],
["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2545.4,1,56,0,14,3710,780,14,1],
["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6916.53,1,32,0,279951,2036,0,70,3],
["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3493.03,1,16,4,223610,3571,443,62,3],
["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2680.15,1,20,3,1466393,5212,1901,316,5],
["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2297.79,1,22,0,0,3550,6225,52,1],
["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1741.19,1,25,1,72989,1414,0,121,4],
["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1695.1,1,58,1,122067,1695,0,22,2],
["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1828.31,1,18,0,0,1775,32488,54,2],
["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6916.53,1,32,0,283256,2036,0,71,3],
["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3493.03,1,16,4,224007,3644,370,62,3],
["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2653.35,1,20,3,1430530,5238,1847,317,5],
["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2297.79,1,22,0,0,3550,6333,55,1],
["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1741.19,1,25,1,73665,1414,0,122,4],
["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1695.1,1,58,1,122083,1695,0,20,2],
["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1828.31,1,18,0,0,2296,40680,56,2],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null],
["-","~4","device","trap_1105_accrate",null,null,100,1,4,0,0,0,0,0,null],
["p1","~1","token","token_10030_mlyss_wtrman",null,null,1586.2,1,24,0,38205,0,0,76,1],
["p1","~1","token","token_10030_mlyss_wtrman",null,null,1586.2,1,24,0,38652,0,0,77,1],
["p2","~1","token","token_10019_nearl2_sword",null,null,8280,0,41,0,10647,0,0,0,null],
["p1","~2","token","token_10030_mlyss_wtrman",null,null,1989.96,0,42,0,0,0,0,0,null],
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,49,0,0,0,0,0,null],
["p1","~3","token","token_10030_mlyss_wtrman",null,null,1586.2,0,50,0,3,0,0,3,null],
["p1","~3","token","token_10030_mlyss_wtrman",null,null,1586.2,0,50,0,2,0,0,3,null],
["p2","~2","token","token_10019_nearl2_sword",null,null,6600,0,51,0,10647,0,0,0,null],
["p1","~1","token","token_10040_siege2_vlion",null,null,4000,0,53,0,0,0,0,0,null],
["p1","~4","token","token_10030_mlyss_wtrman",null,null,1989.96,0,55,0,0,0,0,0,null],
@@ -284,19 +284,19 @@
"enemy_1209_sfden_2": [2,2,0,1501,154793],
"enemy_1210_msfden_2": [2,2,0,0,386],
"enemy_9021_acduml": [1,1,0,0,4000000],
"enemy_9023_acdums": [8,6,0,51353,291]
"enemy_9023_acdums": [8,7,0,61276,310]
},
"hooks": [1,63,5076,1385,1385,3756,4577,2685,23,35,61,57,333,38781,1915,4,21,0,1,22,0,8,1],
"events": {"atk":1650,"deploy":38,"die":35,"dmg":4308,"engage":17,"fx":1132,"heal":400,"skill":118,"spawn":57,"status":797},
"hooks": [1,63,5112,1410,1410,3944,4887,3003,25,37,60,56,333,38109,1949,4,21,0,1,24,0,10,1],
"events": {"atk":1660,"deploy":38,"die":37,"dmg":4617,"engage":17,"fx":1143,"heal":456,"skill":116,"spawn":57,"status":840},
"fx": {
"airstrike": 109,
"airstrike": 97,
"appear": 1,
"beam": 10,
"blink": 2,
"bombard": 56,
"bombardShell": 57,
"bombard": 60,
"bombardShell": 60,
"buff": 3,
"burst": 8,
"burst": 10,
"copy": 1,
"disappear": 1,
"displace": 1,
@@ -305,23 +305,23 @@
"drone": 211,
"droneLock": 18,
"drones": 2,
"explode": 368,
"explode": 396,
"extraAttack": 3,
"finale": 1,
"firewall": 1,
"garrisonGrant": 1,
"lightning": 76,
"link": 7,
"lightning": 65,
"link": 6,
"lock": 60,
"lure": 2,
"phase": 35,
"phase": 37,
"radiantSword": 3,
"scorchBurst": 1,
"slash": 11,
"snow": 35,
"snow": 32,
"split": 4,
"steal": 5,
"storm": 7,
"storm": 6,
"summon": 14,
"sunBurst": 1,
"talent": 6,
@@ -329,7 +329,7 @@
"tide": 3,
"wanted": 1
},
"snaps": "b66f8306 b821cb0a 25c089ba 9c4aeabf ff5b59a1 042e449b f5822070 07445b3e ac69ddc0 37b52b7d c59632d4 a8b2eca1 6bbfab6e afcc528d e64bf70f bd7aa0ef 2bd32f6f"
"snaps": "b66f8306 b821cb0a 25c089ba 9c4aeabf ff5b59a1 81ad00f2 65ec46c4 9c8b1887 7078d3f4 c6f903d8 e7e0653d f8ed103e 4c094f35 defa0e76 715cdfde 21af37d1 18687ace"
},
"boss-boss_3-solo": {
"about": "假想敌:管 solo pool 2000000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
@@ -518,98 +518,101 @@
"round": 14,
"seed": 2302764647,
"waveId": "act2autochess_h07_05",
"time": 102.9,
"ticks": 3087,
"time": 113.93,
"ticks": 3418,
"reason": "cleared",
"killed": 16,
"killed": 18,
"total": 8,
"unspawned": 0,
"bossHpLeft": 0,
"rngDraws": 908,
"rngDraws": 1040,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {"killed":16,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1233427,"bossDmg":928200,"heal":24829,"deaths":1,"layerGains":{}},
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1040342,"bossDmg":631800,"heal":41304,"deaths":1,"layerGains":{}}
"p1": {"killed":18,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1216056,"bossDmg":897045,"heal":28286,"deaths":1,"layerGains":{}},
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1143710,"bossDmg":662955,"heal":48827,"deaths":1,"layerGains":{}}
},
"units": [
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",4070,1,7,1,8305,1825,6494,6,1],
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",0,0,12,0,25770,5629,769,5,1],
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3411.1,1,14,0,76065,2161,834,30,1],
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1447.37,1,1,3,514889,991,821,31,4],
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2126.3,1,16,1,128892,1418,956,23,2],
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1757.8,1,3,0,4001,5151,438,0,2],
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1586.2,1,18,0,141216,3329,1053,18,5],
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1834.8,1,5,0,74259,868,10288,45,2],
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1454.2,1,20,4,160370,6470,1752,23,23],
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2082.3,1,9,0,52150,6246,961,65,3],
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",5616.6,1,7,0,40882,5641,10343,19,1],
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",0,0,12,0,45219,4832,0,9,1],
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",4707.32,1,14,0,69280,1067,12,29,1],
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2231.46,1,1,4,556823,2311,2052,34,5],
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2934.29,1,16,1,57925,311,62,13,2],
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",2425.76,1,3,1,8028,8274,2281,0,3],
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2188.96,1,18,0,132719,2320,583,10,4],
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",2532.02,1,5,0,66232,4273,8665,35,2],
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",2006.8,1,20,4,150463,4798,603,22,22],
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2873.57,1,9,0,58683,4198,2160,70,3],
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,22,0,0,0,0,0,null],
["p1",12,"token","token_10030_mlyss_wtrman",null,null,1668,1,10,0,35402,874,464,52,1],
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4181.76,1,55,4,378608,9705,860,100,3],
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2069.61,1,13,2,128245,3313,0,22,2],
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",1908.49,1,15,1,32435,2117,1225,22,1],
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6521.3,1,53,1,164109,10334,0,40,2],
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",5557.09,1,2,0,150406,888,888,18,1],
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",3437.9,1,17,0,76446,5687,2518,8,1],
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2088.9,1,4,0,0,2258,6052,8,1],
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1741.19,1,19,0,17095,1031,0,18,2],
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",0,0,6,0,83803,1695,0,12,1],
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1828.31,1,21,0,0,2305,29761,25,1],
["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,10,0,19817,3192,1524,31,1],
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",5144.83,1,57,5,403688,10468,0,108,4],
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",4200.31,1,13,1,134710,5030,0,28,2],
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2908.6,1,15,1,37774,1799,1225,28,1],
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6853.26,1,59,1,179630,12262,0,45,3],
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",6763.77,1,2,1,180722,1758,1758,21,2],
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",5067.92,1,17,0,84079,6189,3393,8,1],
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2882.68,1,4,0,0,1505,8590,12,1],
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",2184.4,1,19,0,17625,2062,0,20,3],
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",0,0,6,0,87978,1695,0,12,1],
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",2293.7,1,21,0,0,2305,33861,30,2],
["p2","~1","token","token_10019_nearl2_sword",null,null,1907.57,0,32,0,9195,6372,0,12,null],
["p1","~1","token","token_10030_mlyss_wtrman",null,null,2301.84,0,36,0,5259,0,0,12,null],
["p1","~1","token","token_10040_siege2_vlion",null,null,136.97,0,39,0,4275,4590,0,10,null],
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,45,0,2575,1668,0,7,null],
["p1","~1","token","token_10040_siege2_vlion",null,null,1489.93,0,39,0,2850,3276,0,7,null],
["p2","~2","token","token_10019_nearl2_sword",null,null,5742.56,0,46,0,0,857,0,0,null],
["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,48,0,0,0,0,0,null],
["p1","~3","token","token_10030_mlyss_wtrman",null,null,1668,1,56,0,0,0,0,0,null]
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,54,0,1875,1668,0,4,null],
["p2","~3","token","token_10019_nearl2_sword",null,null,8280,1,60,0,8308,0,0,0,null]
],
"enemies": {
"enemy_1010_demon_2": [2,2,0,1457,128995],
"enemy_2009_csaudc": [4,4,0,2694,137594],
"enemy_2010_csdcr": [2,2,0,5885,103196],
"enemy_2016_csphtm": [2,2,0,67552,1560000],
"enemy_2017_csphts": [8,8,0,1223,343985]
"enemy_2009_csaudc": [4,4,0,3423,137594],
"enemy_2010_csdcr": [2,2,0,3368,103196],
"enemy_2016_csphtm": [2,2,0,77468,1560000],
"enemy_2017_csphts": [10,10,0,2141,429982]
},
"hooks": [1,54,3087,673,673,1759,2039,3851,21,34,60,52,50,26592,1290,30,18,0,1,19,0,17,86],
"events": {"atk":826,"deploy":36,"die":34,"dmg":1888,"engage":22,"fx":534,"heal":254,"skill":112,"spawn":47,"status":632},
"hooks": [1,58,3418,689,689,1884,2194,4917,24,39,65,54,61,28062,1207,34,20,0,1,23,0,16,86],
"events": {"atk":868,"deploy":38,"die":39,"dmg":2022,"engage":22,"fx":575,"heal":290,"skill":119,"spawn":49,"status":603},
"fx": {
"airstrike": 15,
"blink": 15,
"bombard": 33,
"bombardShell": 33,
"burst": 17,
"airstrike": 20,
"blink": 19,
"bombard": 34,
"bombardShell": 35,
"burst": 16,
"cleanse": 1,
"copy": 1,
"displace": 4,
"displace": 3,
"dodge": 86,
"dp": 3,
"drone": 102,
"droneLock": 3,
"drones": 1,
"explode": 24,
"extraAttack": 7,
"emergency": 1,
"explode": 27,
"extraAttack": 12,
"finale": 2,
"firewall": 1,
"garrisonGrant": 1,
"lightning": 45,
"lightning": 49,
"link": 3,
"lock": 33,
"lock": 42,
"lure": 2,
"radiantSword": 2,
"scorchBurst": 1,
"shield": 8,
"palsy": 2,
"radiantSword": 3,
"scorchBurst": 2,
"shield": 7,
"slash": 22,
"snow": 24,
"split": 3,
"split": 2,
"steal": 1,
"storm": 5,
"storm": 4,
"strike": 3,
"summon": 11,
"sunBurst": 4,
"summon": 14,
"sunBurst": 5,
"talent": 4,
"telegraph": 2,
"tide": 2,
"wanted": 11
"telegraph": 3,
"tide": 3,
"wanted": 12
},
"snaps": "d3cd88f1 0b40f2d2 3fada850 9d166f76 eb1c5713 8daf7ec1 58aeec40 fd26682e adab14c8 5be402ff eb823ff1"
"snaps": "d3cd88f1 0b40f2d2 3fada850 9d166f76 d6a2dc2f c102808a ed0ca02a c983beea 73a86f16 1366a22a c494f9ea 1ff19f73"
},
"boss-boss_5-solo": {
"about": "卢西恩,“猩红血钻” solo pool 780000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
@@ -810,41 +813,41 @@
"round": 14,
"seed": 120974514,
"waveId": "act1autochess_h07_07",
"time": 173.63,
"ticks": 5209,
"time": 173.17,
"ticks": 5195,
"reason": "cleared",
"killed": 16,
"total": 16,
"unspawned": 0,
"bossHpLeft": 0,
"rngDraws": 918,
"rngDraws": 910,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {"killed":16,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1730751,"bossDmg":1610239,"heal":24718,"deaths":0,"layerGains":{}},
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2742228,"bossDmg":2389761,"heal":40810,"deaths":0,"layerGains":{}}
"p1": {"killed":16,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1709189,"bossDmg":1588676,"heal":24718,"deaths":0,"layerGains":{}},
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2763791,"bossDmg":2411324,"heal":40783,"deaths":0,"layerGains":{}}
},
"units": [
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",4070,1,5,0,0,0,0,0,0],
["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",3232.9,1,7,0,0,0,0,0,0],
["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3411.1,1,11,0,0,0,0,0,0],
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1617,1,1,2,1075028,0,0,78,8],
["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1617,1,1,3,1053668,0,0,78,8],
["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2126.3,1,9,0,0,0,0,0,0],
["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1669.91,1,17,0,43766,18917,1278,0,5],
["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1586.2,1,3,0,0,0,0,0,0],
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1834.8,1,13,0,165894,0,20171,122,3],
["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1834.8,1,13,0,165894,0,20171,121,3],
["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1454.2,1,15,1,261942,1172,0,45,45],
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2082.3,1,19,1,142272,12632,1260,172,4],
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2082.3,1,19,1,142069,12632,1260,172,4],
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,22,0,0,0,0,0,null],
["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,20,0,8204,2977,0,18,1],
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4435.2,1,26,3,408287,0,0,133,3],
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",3043.7,1,2,0,0,0,0,0,0],
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2545.4,1,6,0,0,0,0,0,0],
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6916.53,1,31,1,136739,14292,0,40,3],
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",2540.38,1,16,4,396919,10380,0,65,3],
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2680.15,1,21,4,1362550,5319,2968,297,6],
["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",2540.38,1,16,3,395884,10380,0,65,3],
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2653.35,1,21,4,1355054,5319,2941,295,6],
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2088.9,1,8,0,0,0,0,0,0],
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,12,0,145556,0,0,103,4],
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1695.1,1,14,1,292178,0,0,77,3],
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,12,0,144110,0,0,103,4],
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1695.1,1,14,1,323718,0,0,77,3],
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1828.31,1,18,0,0,1103,37842,58,2],
["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,34,0,10960,2454,630,13,null],
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,41,0,5575,1593,0,9,1],
@@ -856,10 +859,10 @@
["p1","~3","token","token_10017_skadi2_dedant",null,null,100,1,51,0,0,0,0,0,null]
],
"enemies": {"enemy_1067_snslime":[8,8,0,11760,111795],"enemy_1081_sotisd":[4,4,0,0,257989],"enemy_1249_lysdb_2":[4,4,0,0,103196],"enemy_9033_acdeer":[1,1,0,40235,4000000]},
"hooks": [1,49,5209,1281,1281,3051,3357,2765,22,27,93,88,305,37705,1418,3,17,0,1,21,0,10,0],
"events": {"atk":1445,"deploy":32,"die":27,"dmg":3088,"engage":16,"fx":675,"heal":436,"skill":181,"spawn":47,"status":511},
"fx": {"airstrike":104,"beam":5,"blink":2,"bombard":63,"bombardShell":64,"burst":10,"column":45,"copy":4,"dp":4,"drone":245,"droneLock":15,"drones":3,"explode":6,"garrisonGrant":1,"link":1,"lock":69,"phase":1,"scorchBurst":2,"shieldBreak":4,"snow":5,"split":2,"steal":6,"sunBurst":4,"talent":4,"tide":5,"wanted":1},
"snaps": "e8f77b71 c1cf2cef a6688abd b9a6fe99 07c13245 40140044 ddfccb97 273b0a5a 3f6c7803 621a62a4 561c43b2 75e4ac28 41579a2d 3b4b24fa 4aa3b38d e05ffd35 6d9a4f36 45587dcb"
"hooks": [1,49,5195,1278,1278,3120,3426,2763,22,27,93,88,303,37593,1413,3,17,0,1,21,0,10,0],
"events": {"atk":1442,"deploy":32,"die":27,"dmg":3157,"engage":16,"fx":670,"heal":436,"skill":181,"spawn":47,"status":511},
"fx": {"airstrike":104,"beam":5,"blink":2,"bombard":62,"bombardShell":63,"burst":10,"column":45,"copy":4,"dp":4,"drone":242,"droneLock":15,"drones":3,"explode":6,"garrisonGrant":1,"link":1,"lock":69,"phase":1,"scorchBurst":2,"shieldBreak":4,"snow":5,"split":2,"steal":6,"sunBurst":4,"talent":4,"tide":5,"wanted":1},
"snaps": "cbd449f6 0fc766d0 b5a9198a 1965b1bc 8e6f8d60 822d854f ceed08a1 a52227ff 7ea8a6e4 a812122a 48bcd4d6 32e527fa ea780f22 4030b232 09f24b6e 2211aae3 ab22490c adfcf0bd"
},
"boss-boss_7-solo": {
"about": "“萨米的意志” solo pool 2000000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
@@ -1074,12 +1077,12 @@
"killed": 8,
"total": 8,
"unspawned": 0,
"bossHpLeft": 2992511,
"bossHpLeft": 2988263,
"rngDraws": 1828,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2840728,"bossDmg":1130176,"heal":26454,"deaths":3,"layerGains":{}},
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3891716,"bossDmg":1427465,"heal":133966,"deaths":7,"layerGains":{}}
"p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3904460,"bossDmg":1431713,"heal":133966,"deaths":7,"layerGains":{}}
},
"units": [
["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",7326,1,15,0,3237,9163,15665,31,3],
@@ -1094,7 +1097,7 @@
["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2082.3,1,59,0,30083,11261,306,74,2],
["p1",11,"token","token_10017_skadi2_dedant",null,null,138,0,28,0,0,0,0,0,null],
["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,24,0,0,1670,348,4,1],
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",903.1,1,68,4,817795,32754,0,248,4],
["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",903.1,1,68,4,819088,32754,0,248,4],
["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",0,0,64,0,355848,15836,0,48,4],
["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",1415.78,1,66,0,123216,11064,6422,44,2],
["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",1602.9,1,65,1,499184,28500,0,76,3],
@@ -1102,7 +1105,7 @@
["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2436.5,1,14,0,526339,8805,4488,259,5],
["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",3342.24,1,20,0,0,0,19549,78,1],
["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,10,0,103786,0,0,127,3],
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1859.61,1,27,0,346061,5155,0,25,3],
["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1859.61,1,27,0,357512,5155,0,25,3],
["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1758.31,1,25,0,0,14000,103507,78,2],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
@@ -1126,13 +1129,13 @@
"enemies": {
"enemy_1267_nhpbr_2": [6,6,0,1900,141894],
"enemy_9007_acelem": [2,2,0,14390,309587],
"enemy_9017_achunt_2": [2,0,0,57663,2607489],
"enemy_9018_actrpa": [1,0,0,53759,1092472],
"enemy_9019_actrpb": [1,0,0,24773,1015854],
"enemy_9020_actrpc": [1,0,0,22601,1668902]
"enemy_9017_achunt_2": [2,0,0,57663,2611737],
"enemy_9018_actrpa": [1,0,0,53759,1094596],
"enemy_9019_actrpb": [1,0,0,24773,1018036],
"enemy_9020_actrpc": [1,0,0,22601,1673092]
},
"hooks": [1,66,6000,1649,1649,8552,17196,2968,22,35,96,88,305,47649,3685,17,13,0,1,31,0,19,0],
"events": {"atk":2230,"deploy":47,"die":35,"dmg":16662,"engage":22,"fx":2182,"heal":905,"skill":184,"spawn":53,"status":898},
"hooks": [1,66,6000,1649,1649,8574,17284,2968,22,35,96,88,305,47649,3706,17,13,0,1,31,0,19,0],
"events": {"atk":2230,"deploy":47,"die":35,"dmg":16750,"engage":22,"fx":2182,"heal":905,"skill":184,"spawn":53,"status":898},
"fx": {
"airstrike": 93,
"beam": 26,
@@ -1173,7 +1176,7 @@
"wanted": 6,
"zone": 6
},
"snaps": "8b102142 0561d2e7 b88fff99 8716a28b 1badf400 91b895ee 78b15f27 974adf64 c118d65e 831cdc6f 0c7385df d5ab8494 2e6d06b7 f460f583 e7a7bafc 6ab1c142 80a01218 1de18f0f 84c4afee 5fb9b9bc"
"snaps": "8b102142 0561d2e7 b88fff99 8716a28b 029ba95f b318b100 89a71563 dbd3fc50 39edd668 e8bad5d2 6041dbb0 1d54607c baabef98 3f4c928d 4b565fc8 77ef652f 56feb3e3 b839d42c 8bf608c0 5b35e9d9"
},
"hidden-boss_9-solo": {
"about": "假想敌:铳 solo pool 2800000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b",
+141 -141
View File
@@ -16,7 +16,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m01","bossId":"boss_5","hiddenBossId":null,"factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":true,"roundsPassed":9,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":15,"bossPoolLeft":0,"virtualMs":68100},
"end": {"victory":true,"roundsPassed":9,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":23,"bossPoolLeft":0,"virtualMs":68100},
"rng": {"setup":16,"shop":87,"waves":0,"draft":0,"bots":5205,"meta":0},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -35,12 +35,12 @@
"victory": true,
"roundsPassed": 9,
"eliminatedRound": null,
"lp": 15,
"lp": 23,
"bandId": "band_ermengard",
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 0,
"reward": 113,
"stats": {"activatedLayers":133,"bossDamage":200000,"dmgDealt":753151,"gold":72,"itemsEquipped":14,"kills":170,"leaks":0,"lpLost":0,"merges":3,"perfectRounds":8,"refreshes":5},
"stats": {"activatedLayers":133,"bossDamage":200000,"dmgDealt":745611,"gold":72,"itemsEquipped":14,"kills":169,"leaks":0,"lpLost":0,"merges":3,"perfectRounds":8,"refreshes":5},
"lineup": ["2_17_b@12,8","1_13_b@11,8","3_20_b@10,3[5_02_e_b+3_07_e_a]","2_08_a@10,4[4_11_e_a+4_03_e_a]","1_12_a@10,7[3_05_e_a]","5_13_a@10,8[4_02_e_a]","3_16_a@9,4[2_04_e_a+5_02_e_b]","5_02_a@9,8[3_02_e_a+1_01_e_b]"],
"bonds": ["deputShip 1/18","emptyShip 0/6","indomShip 1/63","preciShip 0/2","sargonShip 1/6","steadShip 2/46"]
}
@@ -56,7 +56,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m01","bossId":"boss_5","hiddenBossId":null,"factions":["ELEMENT","DOT","REFLECTION"]},
"end": {"victory":true,"roundsPassed":9,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":8,"bossPoolLeft":0,"virtualMs":68100},
"end": {"victory":true,"roundsPassed":9,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":23,"bossPoolLeft":0,"virtualMs":68100},
"rng": {"setup":16,"shop":154,"waves":0,"draft":0,"bots":5211,"meta":39},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -81,12 +81,12 @@
"victory": true,
"roundsPassed": 9,
"eliminatedRound": null,
"lp": 8,
"lp": 23,
"bandId": "band_ducklord",
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 0,
"reward": 113,
"stats": {"activatedLayers":160,"bossDamage":200000,"dmgDealt":684272,"gold":76,"itemsEquipped":11,"kills":133,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":8,"refreshes":16},
"stats": {"activatedLayers":160,"bossDamage":200000,"dmgDealt":677516,"gold":76,"itemsEquipped":11,"kills":133,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":8,"refreshes":16},
"lineup": ["5_10_a@12,3","1_06_a@11,3[3_01_e_a]","3_11_a@11,8[1_01_e_a+3_11_e_a]","4_14_a@10,3","2_18_b@10,4[4_11_e_a]","1_02_b@10,8[5_02_e_a+1_05_e_a]","3_20_a@9,8","2_14_a@9,9"],
"bonds": ["deputShip 2/24","emptyShip 1/18","indomShip 0/6","kjeragShip 1/27","preciShip 1/21","steadShip 1/70","swiftShip 0/7","yanShip 0/1"]
}
@@ -102,7 +102,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":32843,"virtualMs":106900},
"end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":2,"bossPoolLeft":0,"virtualMs":106900},
"rng": {"setup":25,"shop":159,"waves":0,"draft":10,"bots":8211,"meta":1},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -133,31 +133,31 @@
},
{
"round": 11,
"ai_0": [1,26,12,0,2,5,8,"1df90477",118,"deputShip 1/12, kazimierzShip 0/8, kjeragShip 1/23, miraShip 0/3, preciShip 0/5, sargonShip 0/8, soloShip 1/13, steadShip 1/30, suntShip 1/8, swiftShip 1/32, yanShip 0/6",23,24,1,97]
"ai_0": [1,26,12,0,2,5,8,"1df90477",113,"deputShip 1/12, kazimierzShip 0/8, kjeragShip 1/18, miraShip 0/3, preciShip 0/5, sargonShip 0/8, soloShip 1/13, steadShip 1/30, suntShip 1/8, swiftShip 1/32, yanShip 0/6",23,24,1,97]
},
{
"round": 12,
"ai_0": [1,16,14,0,0,6,8,"ceba966e",140,"deputShip 1/14, kazimierzShip 0/8, kjeragShip 1/26, miraShip 0/3, preciShip 0/5, sargonShip 0/8, soloShip 1/15, steadShip 1/33, suntShip 1/10, swiftShip 1/42, yanShip 0/6",15,31,16,109]
"ai_0": [1,16,14,0,0,6,8,"436a1bec",143,"deputShip 1/14, kazimierzShip 0/8, kjeragShip 1/25, miraShip 0/3, preciShip 0/5, sargonShip 0/8, soloShip 1/15, steadShip 1/37, suntShip 1/10, swiftShip 1/42, yanShip 0/6",16,31,15,109]
},
{
"round": 13,
"ai_0": [1,6,12,0,0,6,8,"3be0fd4e",166,"deputShip 1/16, kazimierzShip 0/8, kjeragShip 1/33, miraShip 0/3, preciShip 0/5, sargonShip 0/8, skillfulShip 1/7, soloShip 1/17, steadShip 1/37, suntShip 1/12, swiftShip 1/44, yanShip 0/6",97,35,12,119]
"ai_0": [1,10,12,0,0,6,8,"3be0fd4e",169,"deputShip 1/16, kazimierzShip 0/8, kjeragShip 1/32, miraShip 0/3, preciShip 0/5, sargonShip 0/8, skillfulShip 1/7, soloShip 1/17, steadShip 1/41, suntShip 1/12, swiftShip 1/44, yanShip 0/6",108,35,6,119]
}
],
"players": {
"ai_0": {
"alive": true,
"victory": false,
"roundsPassed": 13,
"victory": true,
"roundsPassed": 14,
"eliminatedRound": null,
"lp": 0,
"lp": 2,
"bandId": "band_ermengard",
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 0,
"reward": 320,
"stats": {"activatedLayers":173,"bossDamage":357157,"dmgDealt":2127067,"gold":130,"itemsEquipped":17,"kills":359,"leaks":29,"lpLost":21,"merges":3,"perfectRounds":10,"refreshes":9},
"reward": 400,
"stats": {"activatedLayers":176,"bossDamage":390000,"dmgDealt":2263237,"gold":130,"itemsEquipped":17,"kills":372,"leaks":22,"lpLost":17,"merges":3,"perfectRounds":10,"refreshes":9},
"lineup": ["4_21_a@12,7","3_16_a@12,8[4_10_e_a+2_04_e_a]","6_05_a@11,5","4_13_a@11,8[3_06_e_a]","3_20_b@10,3[5_02_e_b+4_08_e_a]","1_19_b@10,8[4_11_e_a]","1_02_a@9,4[5_02_e_b+3_08_e_b]","6_03_a@9,5"],
"bonds": ["deputShip 1/18","kazimierzShip 0/8","kjeragShip 1/40","miraShip 0/3","preciShip 0/5","sargonShip 0/8","skillfulShip 1/14","soloShip 0/17","steadShip 2/41","suntShip 1/14","swiftShip 1/46","yanShip 0/6"]
"bonds": ["deputShip 1/18","kazimierzShip 0/8","kjeragShip 1/39","miraShip 0/3","preciShip 0/5","sargonShip 0/8","skillfulShip 1/14","soloShip 0/17","steadShip 2/45","suntShip 1/14","swiftShip 1/46","yanShip 0/6"]
}
}
},
@@ -246,7 +246,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":347913,"virtualMs":107800},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":215042,"virtualMs":107800},
"rng": {"setup":25,"shop":215,"waves":0,"draft":42,"bots":8070,"meta":1},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -265,27 +265,27 @@
},
{
"round": 8,
"ai_0": [1,25,11,0,0,4,8,"82c473bd",58,"deputShip 2/10, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/21, skillfulShip 1/8, soloShip 1/11, steadShip 0/9, suntShip 1/8, swiftShip 0/11",17,19,2,58]
"ai_0": [1,27,11,0,0,4,8,"82c473bd",58,"deputShip 2/10, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/21, skillfulShip 1/8, soloShip 1/11, steadShip 0/9, suntShip 1/8, swiftShip 0/11",19,19,0,58]
},
{
"round": 9,
"ai_0": [1,25,12,0,0,4,8,"4fb70cbc",81,"deputShip 1/12, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/25, skillfulShip 1/10, soloShip 0/11, steadShip 1/11, suntShip 1/10, swiftShip 1/13",34,34,0,71]
"ai_0": [1,27,12,0,0,4,8,"4fb70cbc",81,"deputShip 1/12, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/25, skillfulShip 1/10, soloShip 0/11, steadShip 1/11, suntShip 1/10, swiftShip 1/13",34,34,0,71]
},
{
"round": 10,
"ai_0": [1,25,12,0,0,5,8,"b380bd34",99,"deputShip 1/14, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/29, skillfulShip 1/14, soloShip 1/13, steadShip 0/11, suntShip 1/12, swiftShip 1/17",24,24,0,84]
"ai_0": [1,27,12,0,0,5,8,"b380bd34",99,"deputShip 1/14, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/29, skillfulShip 1/14, soloShip 1/13, steadShip 0/11, suntShip 1/12, swiftShip 1/17",24,24,0,84]
},
{
"round": 11,
"ai_0": [1,25,12,0,1,5,8,"b74ff3d8",133,"deputShip 2/18, kazimierzShip 0/16, kjeragShip 0/10, sargonShip 1/35, skillfulShip 1/20, soloShip 0/13, steadShip 0/11, suntShip 1/16, swiftShip 1/44",34,34,0,96]
"ai_0": [1,27,12,0,1,5,8,"b74ff3d8",133,"deputShip 2/18, kazimierzShip 0/16, kjeragShip 0/10, sargonShip 1/35, skillfulShip 1/20, soloShip 0/13, steadShip 0/11, suntShip 1/16, swiftShip 1/44",34,34,0,96]
},
{
"round": 12,
"ai_0": [1,19,13,0,0,6,8,"b64e6caf",168,"deputShip 2/22, kazimierzShip 0/16, kjeragShip 0/10, sargonShip 1/39, skillfulShip 1/24, soloShip 0/13, steadShip 0/11, suntShip 1/20, swiftShip 1/63",25,31,6,108]
"ai_0": [1,27,13,0,0,6,8,"3445b39c",168,"deputShip 2/22, kazimierzShip 0/16, kjeragShip 0/10, sargonShip 1/39, skillfulShip 1/24, soloShip 0/13, steadShip 0/11, suntShip 1/20, swiftShip 1/63",31,31,0,108]
},
{
"round": 13,
"ai_0": [1,11,12,0,2,6,8,"bb4537a0",229,"deputShip 1/24, kazimierzShip 1/26, kjeragShip 0/10, sargonShip 1/41, skillfulShip 1/26, soloShip 1/15, steadShip 0/11, suntShip 1/22, swiftShip 1/75",107,35,8,120]
"ai_0": [1,25,12,0,2,6,8,"caf07ef9",229,"deputShip 1/24, kazimierzShip 1/26, kjeragShip 0/10, sargonShip 1/41, skillfulShip 1/26, soloShip 1/15, steadShip 0/11, suntShip 1/22, swiftShip 1/75",113,35,2,120]
}
],
"players": {
@@ -299,7 +299,7 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 0,
"reward": 340,
"stats": {"activatedLayers":212,"bossDamage":432087,"dmgDealt":2238324,"gold":135,"itemsEquipped":16,"kills":400,"leaks":16,"lpLost":16,"merges":4,"perfectRounds":10,"refreshes":17},
"stats": {"activatedLayers":212,"bossDamage":564958,"dmgDealt":2432521,"gold":135,"itemsEquipped":16,"kills":415,"leaks":2,"lpLost":2,"merges":4,"perfectRounds":12,"refreshes":17},
"lineup": ["3_13_a@12,5[1_01_e_b+3_08_e_a]","3_20_a@11,8[5_02_e_a]","4_13_a@10,3","6_19_a@10,5[1_02_e_a+3_11_e_a]","6_17_a@10,8[2_01_e_a+5_01_e_a]","2_08_a@9,3[4_02_e_a+3_07_e_b]","1_19_b@9,4","1_12_b@9,5[4_10_e_a]"],
"bonds": ["deputShip 0/24","kazimierzShip 1/26","kjeragShip 1/15","sargonShip 1/41","skillfulShip 1/31","soloShip 0/15","steadShip 0/11","suntShip 1/22","swiftShip 1/77"]
}
@@ -384,7 +384,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":2848970,"virtualMs":107800},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":2871317,"virtualMs":107800},
"rng": {"setup":25,"shop":215,"waves":0,"draft":42,"bots":8070,"meta":1},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -403,7 +403,7 @@
},
{
"round": 8,
"ai_0": [1,27,11,0,0,4,8,"3545bf74",58,"deputShip 2/10, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/21, skillfulShip 1/8, soloShip 1/11, steadShip 0/9, suntShip 1/8, swiftShip 0/11",19,19,0,58]
"ai_0": [1,27,11,0,0,4,8,"48fc92cc",58,"deputShip 2/10, kazimierzShip 0/8, kjeragShip 0/2, sargonShip 1/21, skillfulShip 1/8, soloShip 1/11, steadShip 0/9, suntShip 1/8, swiftShip 0/11",19,19,0,58]
},
{
"round": 9,
@@ -419,11 +419,11 @@
},
{
"round": 12,
"ai_0": [1,17,13,0,0,6,8,"b64e6caf",176,"deputShip 2/22, kazimierzShip 0/16, kjeragShip 0/10, sargonShip 1/39, skillfulShip 1/24, soloShip 0/13, steadShip 0/11, suntShip 1/20, swiftShip 1/71",17,31,14,108]
"ai_0": [1,17,13,0,0,6,8,"b64e6caf",168,"deputShip 2/22, kazimierzShip 0/16, kjeragShip 0/10, sargonShip 1/39, skillfulShip 1/24, soloShip 0/13, steadShip 0/11, suntShip 1/20, swiftShip 1/63",12,31,19,108]
},
{
"round": 13,
"ai_0": [1,8,12,0,2,6,8,"4640459d",237,"deputShip 1/24, kazimierzShip 1/26, kjeragShip 0/10, sargonShip 1/41, skillfulShip 1/26, soloShip 1/15, steadShip 0/11, suntShip 1/22, swiftShip 1/83",106,35,9,120]
"ai_0": [1,9,12,0,2,6,8,"4640459d",229,"deputShip 1/24, kazimierzShip 1/26, kjeragShip 0/10, sargonShip 1/41, skillfulShip 1/26, soloShip 1/15, steadShip 0/11, suntShip 1/22, swiftShip 1/75",107,35,8,120]
}
],
"players": {
@@ -437,9 +437,9 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 0,
"reward": 340,
"stats": {"activatedLayers":220,"bossDamage":151030,"dmgDealt":3014025,"gold":135,"itemsEquipped":16,"kills":384,"leaks":23,"lpLost":19,"merges":4,"perfectRounds":11,"refreshes":17},
"stats": {"activatedLayers":212,"bossDamage":128683,"dmgDealt":2858357,"gold":135,"itemsEquipped":16,"kills":379,"leaks":27,"lpLost":18,"merges":4,"perfectRounds":11,"refreshes":17},
"lineup": ["3_20_a@12,5[5_02_e_a]","4_13_a@11,8","3_13_a@10,3[1_01_e_b+3_08_e_a]","2_08_a@10,5[4_02_e_a+3_07_e_b]","6_17_a@10,8","1_12_b@9,4[4_10_e_a]","6_19_a@9,5[1_02_e_a+3_11_e_a]","1_19_b@9,9[2_01_e_a+5_01_e_a]"],
"bonds": ["deputShip 0/24","kazimierzShip 1/26","kjeragShip 1/15","sargonShip 1/41","skillfulShip 1/31","soloShip 0/15","steadShip 0/11","suntShip 1/22","swiftShip 1/85"]
"bonds": ["deputShip 0/24","kazimierzShip 1/26","kjeragShip 1/15","sargonShip 1/41","skillfulShip 1/31","soloShip 0/15","steadShip 0/11","suntShip 1/22","swiftShip 1/77"]
}
}
},
@@ -669,37 +669,37 @@
},
{
"round": 7,
"ai_0": [1,25,10,0,0,4,8,"5e6dea30",22,"arcaneShip 0/2, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 1/3, skillfulShip 1/6, soloShip 1/3, steadShip 2/10, swiftShip 0/2",28,28,0,51],
"ai_0": [1,25,10,0,0,4,8,"5e6dea30",18,"arcaneShip 0/2, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 1/1, skillfulShip 1/6, soloShip 1/3, steadShip 2/8, swiftShip 0/2",28,28,0,51],
"ai_1": [1,26,10,0,0,4,8,"84796658",33,"arcaneShip 0/2, kazimierzShip 0/8, preciShip 0/2, raidShip 1/10, skillfulShip 1/6, soloShip 1/0, swiftShip 1/17",28,28,0,52]
},
{
"round": 8,
"ai_0": [1,23,11,0,0,4,8,"ee56690b",37,"arcaneShip 1/7, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 0/6, siracusaShip 1/2, skillfulShip 1/9, soloShip 1/3, steadShip 1/16, swiftShip 0/2",7,9,2,62],
"ai_0": [1,23,11,0,0,4,8,"ee56690b",35,"arcaneShip 1/7, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 0/4, siracusaShip 1/2, skillfulShip 1/9, soloShip 1/3, steadShip 1/14, swiftShip 0/2",7,9,2,62],
"ai_1": [1,21,11,0,0,4,8,"2a3a7cc5",57,"arcaneShip 0/2, indomShip 1/2, kazimierzShip 1/10, preciShip 0/2, raidShip 1/15, skillfulShip 1/8, steadShip 2/3, swiftShip 1/19",4,9,5,63]
},
{
"round": 9,
"ai_0": [1,21,12,0,1,4,8,"54e834bc",107,"arcaneShip 1/16, egirShip 1/31, indomShip 1/20, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 0/6, siracusaShip 1/15, skillfulShip 0/9, soloShip 1/6, steadShip 1/19, suntShip 1/0, swiftShip 0/2",19,23,4,74],
"ai_0": [1,23,12,0,1,4,8,"54e834bc",105,"arcaneShip 1/16, egirShip 1/31, indomShip 1/20, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 0/4, siracusaShip 1/15, skillfulShip 0/9, soloShip 1/6, steadShip 1/17, suntShip 1/0, swiftShip 0/2",20,23,3,74],
"ai_1": [1,21,12,0,2,4,8,"e274f661",73,"arcaneShip 0/2, indomShip 2/4, kazimierzShip 1/12, preciShip 0/2, raidShip 1/20, skillfulShip 1/10, steadShip 2/6, swiftShip 1/21",23,23,0,78]
},
{
"round": 10,
"ai_0": [1,21,13,0,0,5,8,"86f1603a",178,"arcaneShip 1/18, egirShip 1/59, indomShip 1/45, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 1/6, siracusaShip 1/21, skillfulShip 0/9, soloShip 1/6, steadShip 1/23, suntShip 1/0, swiftShip 0/2",5,8,3,87],
"ai_0": [1,22,13,0,0,5,8,"69323f46",165,"arcaneShip 1/18, egirShip 1/57, indomShip 1/40, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/2, raidShip 1/4, siracusaShip 1/21, skillfulShip 0/9, soloShip 1/6, steadShip 1/19, suntShip 1/0, swiftShip 0/2",6,8,2,87],
"ai_1": [1,21,14,0,0,5,8,"ae756c5d",63,"arcaneShip 0/2, indomShip 2/4, kazimierzShip 1/13, preciShip 0/2, raidShip 1/25, skillfulShip 1/12, steadShip 2/9, suntShip 1/0, swiftShip 0/23",8,8,0,92]
},
{
"round": 11,
"ai_0": [1,11,12,0,1,5,8,"bcd5af08",264,"arcaneShip 1/27, egirShip 1/94, indomShip 1/70, kazimierzShip 0/2, kjeragShip 0/4, preciShip 0/2, raidShip 1/7, siracusaShip 1/31, skillfulShip 0/9, soloShip 1/6, steadShip 1/29, suntShip 1/0, swiftShip 0/2",14,27,13,101],
"ai_1": [1,11,12,0,1,5,8,"f768d00b",82,"arcaneShip 0/2, indomShip 2/6, kazimierzShip 1/15, preciShip 0/2, raidShip 1/31, skillfulShip 1/12, steadShip 2/13, suntShip 1/0, swiftShip 0/23, visiShip 1/5",13,27,14,103]
"ai_0": [1,12,12,0,1,5,8,"3a91bf48",222,"arcaneShip 1/24, egirShip 1/77, indomShip 1/55, kazimierzShip 0/2, kjeragShip 0/4, preciShip 0/2, raidShip 1/4, siracusaShip 1/31, skillfulShip 0/9, soloShip 1/6, steadShip 1/25, suntShip 1/0, swiftShip 0/2",13,27,14,101],
"ai_1": [1,11,12,0,1,5,8,"762c49a7",82,"arcaneShip 0/2, indomShip 2/6, kazimierzShip 1/15, preciShip 0/2, raidShip 1/31, skillfulShip 1/12, steadShip 2/13, suntShip 1/0, swiftShip 0/23, visiShip 1/5",15,27,12,103]
},
{
"round": 12,
"ai_0": [1,1,13,0,0,6,8,"7362d1fb",320,"arcaneShip 1/32, egirShip 1/118, indomShip 1/85, kazimierzShip 0/2, kjeragShip 0/4, preciShip 0/2, raidShip 1/8, siracusaShip 1/37, skillfulShip 0/9, soloShip 1/6, steadShip 1/34, suntShip 1/0, swiftShip 0/2",29,50,21,112],
"ai_0": [1,2,13,0,0,6,8,"7362d1fb",278,"arcaneShip 1/29, egirShip 1/101, indomShip 1/70, kazimierzShip 0/2, kjeragShip 0/4, preciShip 0/2, raidShip 1/5, siracusaShip 1/37, skillfulShip 0/9, soloShip 1/6, steadShip 1/30, suntShip 1/0, swiftShip 0/2",35,50,15,112],
"ai_1": [1,1,13,0,2,6,8,"67c5e7d6",103,"arcaneShip 0/2, indomShip 2/10, kazimierzShip 1/18, preciShip 0/2, raidShip 1/37, skillfulShip 1/12, steadShip 2/16, suntShip 1/0, swiftShip 0/23, visiShip 1/10",20,50,30,114]
},
{
"round": 13,
"ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/44, egirShip 0/143, indomShip 0/105, kazimierzShip 0/2, kjeragShip 0/4, preciShip 0/2, raidShip 0/8, siracusaShip 0/53, skillfulShip 0/9, soloShip 0/6, steadShip 0/38, swiftShip 0/2",10,49,39,123],
"ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/44, egirShip 0/131, indomShip 0/90, kazimierzShip 0/2, kjeragShip 0/4, preciShip 0/2, raidShip 0/7, siracusaShip 0/53, skillfulShip 0/9, soloShip 0/6, steadShip 0/36, swiftShip 0/2",11,49,38,123],
"ai_1": [0,0,14,0,0,6,0,"811c9dc5",0,"arcaneShip 0/2, indomShip 0/10, kazimierzShip 0/19, preciShip 0/2, raidShip 0/37, skillfulShip 0/12, steadShip 0/20, swiftShip 0/23, visiShip 0/10",16,49,33,127]
}
],
@@ -714,9 +714,9 @@
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
"trophies": 3,
"reward": 298,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2672612,"gold":123,"itemsEquipped":7,"kills":200,"leaks":82,"lpLost":34,"merges":3,"perfectRounds":7,"refreshes":19},
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2884020,"gold":123,"itemsEquipped":7,"kills":208,"leaks":74,"lpLost":33,"merges":3,"perfectRounds":7,"refreshes":19},
"lineup": [],
"bonds": ["arcaneShip 0/44","egirShip 0/143","indomShip 0/105","kazimierzShip 0/2","kjeragShip 0/4","preciShip 0/2","raidShip 0/8","siracusaShip 0/53","skillfulShip 0/9","soloShip 0/6","steadShip 0/38","swiftShip 0/2"]
"bonds": ["arcaneShip 0/44","egirShip 0/131","indomShip 0/90","kazimierzShip 0/2","kjeragShip 0/4","preciShip 0/2","raidShip 0/7","siracusaShip 0/53","skillfulShip 0/9","soloShip 0/6","steadShip 0/36","swiftShip 0/2"]
},
"ai_1": {
"alive": false,
@@ -728,7 +728,7 @@
"title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"},
"trophies": 3,
"reward": 298,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2798748,"gold":127,"itemsEquipped":17,"kills":205,"leaks":82,"lpLost":35,"merges":3,"perfectRounds":9,"refreshes":16},
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2958982,"gold":127,"itemsEquipped":17,"kills":206,"leaks":80,"lpLost":35,"merges":3,"perfectRounds":9,"refreshes":16},
"lineup": [],
"bonds": ["arcaneShip 0/2","indomShip 0/10","kazimierzShip 0/19","preciShip 0/2","raidShip 0/37","skillfulShip 0/12","steadShip 0/20","swiftShip 0/23","visiShip 0/10"]
}
@@ -774,7 +774,7 @@
},
{
"round": 5,
"ai_0": [1,23,10,0,0,3,8,"072ffdf0",22,"deputShip 1/12, kazimierzShip 0/2, soloShip 1/4, swiftShip 1/6",45,16,8,34],
"ai_0": [1,23,10,0,0,3,8,"2953d5b4",22,"deputShip 1/12, kazimierzShip 0/2, soloShip 1/4, swiftShip 1/6",53,16,0,34],
"ai_1": [1,45,9,0,0,2,8,"255ecf36",11,"kazimierzShip 0/11, lateranoShip 1/0, soloShip 1/0, suntShip 1/0, swiftShip 1/11",53,16,0,31],
"ai_2": [1,27,9,0,0,3,8,"d3b8e94d",12,"deputShip 1/2, siracusaShip 1/2, soloShip 1/8, yanShip 0/1",48,16,5,32]
},
@@ -798,31 +798,31 @@
},
{
"round": 9,
"ai_0": [1,3,12,2,1,4,8,"fbb2ffe2",128,"arcaneShip 1/24, deputShip 2/40, indomShip 0/10, kazimierzShip 0/2, soloShip 1/8, suntShip 1/16, swiftShip 0/37, victoriaShip 1/28, visiShip 1/12",40,22,12,77],
"ai_0": [1,3,12,2,1,4,8,"fbb2ffe2",132,"arcaneShip 1/24, deputShip 2/40, indomShip 0/10, kazimierzShip 0/2, soloShip 1/8, suntShip 1/16, swiftShip 0/37, victoriaShip 1/30, visiShip 1/14",42,22,10,77],
"ai_1": [1,35,12,0,1,4,8,"07eb7cb9",93,"indomShip 0/1, kazimierzShip 0/11, lateranoShip 1/24, skillfulShip 1/21, soloShip 1/0, steadShip 2/31, suntShip 2/0, swiftShip 1/17",63,22,4,72],
"ai_2": [1,13,12,0,0,4,8,"80de288d",111,"deputShip 1/12, indomShip 1/12, raidShip 1/2, siracusaShip 1/47, soloShip 1/23, steadShip 1/5, suntShip 1/10, yanShip 0/1",49,22,8,75]
},
{
"round": 10,
"ai_0": [0,0,15,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/34, visiShip 0/16",11,18,7,90],
"ai_0": [0,0,15,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/42, visiShip 0/24",11,18,7,90],
"ai_1": [1,31,13,0,0,5,8,"0398042e",130,"indomShip 0/1, kazimierzShip 0/11, lateranoShip 1/36, skillfulShip 1/29, soloShip 1/0, steadShip 2/46, suntShip 2/0, swiftShip 1/19",14,18,4,84],
"ai_2": [1,3,12,0,0,5,8,"dc3116d5",134,"deputShip 1/14, indomShip 1/16, raidShip 1/4, siracusaShip 1/55, soloShip 1/25, steadShip 1/8, suntShip 1/12, yanShip 0/1",3,18,15,86]
},
{
"round": 11,
"ai_0": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/34, visiShip 0/16",null,null,null,90],
"ai_0": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/42, visiShip 0/24",null,null,null,90],
"ai_1": [1,27,12,0,1,5,8,"94474806",168,"indomShip 0/1, kazimierzShip 0/11, lateranoShip 1/48, raidShip 1/1, skillfulShip 1/37, soloShip 1/0, steadShip 2/61, suntShip 1/0, swiftShip 1/21",21,25,4,96],
"ai_2": [0,0,12,0,0,5,0,"811c9dc5",0,"deputShip 0/16, indomShip 0/20, raidShip 0/7, siracusaShip 0/81, soloShip 0/25, steadShip 0/15, suntShip 0/14, yanShip 0/1",10,25,15,99]
},
{
"round": 12,
"ai_0": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/34, visiShip 0/16",null,null,null,90],
"ai_0": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/42, visiShip 0/24",null,null,null,90],
"ai_1": [1,17,13,0,0,6,8,"951e9b91",161,"indomShip 0/1, kazimierzShip 0/11, lateranoShip 1/54, raidShip 1/2, siracusaShip 1/6, skillfulShip 0/45, soloShip 1/0, steadShip 2/70, suntShip 2/0, swiftShip 1/29",14,57,43,110],
"ai_2": [0,0,0,0,0,5,0,"811c9dc5",0,"deputShip 0/16, indomShip 0/20, raidShip 0/7, siracusaShip 0/81, soloShip 0/25, steadShip 0/15, suntShip 0/14, yanShip 0/1",null,null,null,99]
},
{
"round": 13,
"ai_0": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/34, visiShip 0/16",null,null,null,90],
"ai_0": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/52, indomShip 0/10, kazimierzShip 0/2, soloShip 0/12, suntShip 0/20, swiftShip 0/37, victoriaShip 0/42, visiShip 0/24",null,null,null,90],
"ai_1": [1,7,12,0,0,6,8,"28aefa85",202,"indomShip 0/1, kazimierzShip 0/11, kjeragShip 0/5, lateranoShip 1/60, raidShip 1/3, siracusaShip 0/6, skillfulShip 1/50, soloShip 1/0, steadShip 2/89, suntShip 1/0, swiftShip 0/29",9,26,17,124],
"ai_2": [0,0,0,0,0,5,0,"811c9dc5",0,"deputShip 0/16, indomShip 0/20, raidShip 0/7, siracusaShip 0/81, soloShip 0/25, steadShip 0/15, suntShip 0/14, yanShip 0/1",null,null,null,99]
}
@@ -838,9 +838,9 @@
"title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"},
"trophies": 2,
"reward": 191,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1467309,"gold":90,"itemsEquipped":8,"kills":205,"leaks":43,"lpLost":27,"merges":4,"perfectRounds":6,"refreshes":11},
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1544691,"gold":90,"itemsEquipped":8,"kills":220,"leaks":33,"lpLost":27,"merges":4,"perfectRounds":7,"refreshes":11},
"lineup": [],
"bonds": ["arcaneShip 0/32","deputShip 0/52","indomShip 0/10","kazimierzShip 0/2","soloShip 0/12","suntShip 0/20","swiftShip 0/37","victoriaShip 0/34","visiShip 0/16"]
"bonds": ["arcaneShip 0/32","deputShip 0/52","indomShip 0/10","kazimierzShip 0/2","soloShip 0/12","suntShip 0/20","swiftShip 0/37","victoriaShip 0/42","visiShip 0/24"]
},
"ai_1": {
"alive": true,
@@ -852,7 +852,7 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 3,
"reward": 340,
"stats": {"activatedLayers":222,"bossDamage":1242587,"dmgDealt":6378339,"gold":137,"itemsEquipped":10,"kills":329,"leaks":78,"lpLost":38,"merges":7,"perfectRounds":7,"refreshes":18},
"stats": {"activatedLayers":222,"bossDamage":1242587,"dmgDealt":6378278,"gold":137,"itemsEquipped":10,"kills":316,"leaks":78,"lpLost":38,"merges":7,"perfectRounds":7,"refreshes":18},
"lineup": ["6_09_a@12,8[3_04_e_a]","4_13_a@11,6","3_21_b@11,7[3_02_e_a+3_11_e_a]","6_09_a@11,8[3_03_e_a+6_09_e_a]","4_01_a@10,7[4_02_e_a+4_04_e_b]","4_16_b@10,8","2_17_b@9,6[4_05_e_a]","3_05_a@9,9"],
"bonds": ["indomShip 0/1","kazimierzShip 0/11","kjeragShip 0/5","lateranoShip 1/66","raidShip 1/3","siracusaShip 0/6","skillfulShip 1/56","soloShip 1/0","steadShip 2/97","suntShip 1/0","swiftShip 0/29"]
},
@@ -958,22 +958,22 @@
},
{
"round": 11,
"ai_0": [1,26,12,0,2,5,8,"9d2a55eb",168,"deputShip 2/33, kjeragShip 1/25, preciShip 2/75, sargonShip 0/11, steadShip 0/8, swiftShip 1/35, victoriaShip 0/21",28,28,0,98],
"ai_0": [1,26,12,0,2,5,8,"9d2a55eb",169,"deputShip 2/33, kjeragShip 1/26, preciShip 2/75, sargonShip 0/11, steadShip 0/8, swiftShip 1/35, victoriaShip 0/21",28,28,0,98],
"ai_1": [1,45,12,0,0,5,8,"65f29644",72,"deputShip 0/2, emptyShip 1/0, preciShip 1/6, sargonShip 0/2, siracusaShip 1/61, steadShip 0/31, visiShip 1/5",28,28,0,97],
"ai_2": [1,28,12,0,0,5,8,"81bc5ae1",140,"deputShip 1/18, kjeragShip 0/5, preciShip 2/89, sargonShip 1/33, yanShip 0/6",28,28,0,91],
"ai_3": [1,31,16,2,0,5,7,"566cbb6d",147,"deputShip 0/10, emptyShip 0/6, preciShip 1/93, siracusaShip 0/6, swiftShip 0/17, victoriaShip 1/10, visiShip 1/44, yanShip 0/1",28,28,0,104]
},
{
"round": 12,
"ai_0": [1,26,14,0,0,6,8,"d3120fcb",206,"deputShip 2/37, kjeragShip 1/29, preciShip 2/91, sargonShip 0/11, steadShip 0/8, swiftShip 1/49, victoriaShip 0/21",46,46,0,110],
"ai_0": [1,26,14,0,0,6,8,"d3120fcb",207,"deputShip 2/37, kjeragShip 1/30, preciShip 2/91, sargonShip 0/11, steadShip 0/8, swiftShip 1/49, victoriaShip 0/21",46,46,0,110],
"ai_1": [1,45,12,0,2,6,8,"f6b8e9a9",95,"deputShip 1/4, emptyShip 1/2, preciShip 1/12, sargonShip 0/2, siracusaShip 1/65, steadShip 0/31, visiShip 1/12",46,46,0,109],
"ai_2": [1,28,12,0,0,6,8,"f8339ca2",177,"deputShip 2/22, kjeragShip 0/5, preciShip 2/108, sargonShip 1/47, yanShip 0/6",46,46,0,103],
"ai_3": [1,31,16,0,0,6,7,"6c3799c7",188,"deputShip 0/10, emptyShip 1/6, preciShip 1/104, siracusaShip 0/6, swiftShip 1/22, victoriaShip 0/14, visiShip 1/56, yanShip 0/1",46,46,0,118]
},
{
"round": 13,
"ai_0": [1,26,12,0,0,6,8,"57172cf7",239,"deputShip 1/39, emptyShip 1/2, kjeragShip 1/32, preciShip 2/105, sargonShip 0/11, steadShip 0/8, swiftShip 1/61, victoriaShip 0/21",32,32,0,123],
"ai_1": [1,45,14,0,0,6,8,"ced5ebe3",150,"deputShip 0/4, emptyShip 1/2, preciShip 2/16, sargonShip 0/2, siracusaShip 1/101, steadShip 1/31, visiShip 0/12",32,32,0,124],
"ai_0": [1,26,12,0,0,6,8,"57172cf7",240,"deputShip 1/39, emptyShip 1/2, kjeragShip 1/33, preciShip 2/105, sargonShip 0/11, steadShip 0/8, swiftShip 1/61, victoriaShip 0/21",32,32,0,123],
"ai_1": [1,45,14,0,0,6,8,"ced5ebe3",146,"deputShip 0/4, emptyShip 1/2, preciShip 2/16, sargonShip 0/2, siracusaShip 1/97, steadShip 1/31, visiShip 0/12",32,32,0,124],
"ai_2": [1,28,12,0,0,6,8,"d0aeb38e",201,"deputShip 1/24, kjeragShip 0/5, preciShip 2/124, sargonShip 1/53, yanShip 0/6",32,32,0,117],
"ai_3": [1,31,14,0,0,6,7,"9015cc77",220,"deputShip 0/10, emptyShip 0/6, preciShip 2/119, siracusaShip 0/6, swiftShip 1/27, victoriaShip 1/14, visiShip 1/60, yanShip 0/1",32,32,0,132]
}
@@ -989,9 +989,9 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":271,"bossDamage":524820,"dmgDealt":1950923,"gold":135,"itemsEquipped":22,"kills":292,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":23},
"stats": {"activatedLayers":272,"bossDamage":509540,"dmgDealt":1935644,"gold":135,"itemsEquipped":22,"kills":291,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":23},
"lineup": ["4_25_a@11,3","1_06_b@11,6","6_12_a@11,7[2_01_e_a]","3_20_a@10,3[1_05_e_b]","5_14_a@10,4[3_08_e_a+5_02_e_a]","4_22_b@9,4[4_11_e_a+3_02_e_b]","4_14_b@9,8[2_01_e_b+3_01_e_a]","3_11_b@9,9[3_07_e_a+4_03_e_b]"],
"bonds": ["deputShip 1/41","emptyShip 1/4","kjeragShip 1/34","preciShip 2/119","sargonShip 0/11","steadShip 0/8","swiftShip 1/73","victoriaShip 0/21"]
"bonds": ["deputShip 1/41","emptyShip 1/4","kjeragShip 1/35","preciShip 2/119","sargonShip 0/11","steadShip 0/8","swiftShip 1/73","victoriaShip 0/21"]
},
"ai_1": {
"alive": true,
@@ -1003,9 +1003,9 @@
"title": {"id":"comment_3","name":"坚若磐石","picId":"comment_icon_3","text":"目标生命值损失最少"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":158,"bossDamage":263706,"dmgDealt":1676109,"gold":135,"itemsEquipped":16,"kills":283,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":17},
"stats": {"activatedLayers":154,"bossDamage":247821,"dmgDealt":1660185,"gold":135,"itemsEquipped":16,"kills":283,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":17},
"lineup": ["6_12_a@11,7[2_04_e_b+4_03_e_a]","5_10_a@11,8[1_02_e_a]","6_18_a@10,3","4_10_b@10,4[4_08_e_a+4_03_e_b]","3_05_b@10,8[4_06_e_a+4_05_e_a]","1_10_b@9,4","6_05_a@9,8","6_05_a@9,9"],
"bonds": ["deputShip 0/4","emptyShip 1/2","preciShip 1/16","sargonShip 0/2","siracusaShip 1/109","steadShip 1/31","visiShip 0/12"]
"bonds": ["deputShip 0/4","emptyShip 1/2","preciShip 1/16","sargonShip 0/2","siracusaShip 1/105","steadShip 1/31","visiShip 0/12"]
},
"ai_2": {
"alive": true,
@@ -1017,7 +1017,7 @@
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":223,"bossDamage":147316,"dmgDealt":1570670,"gold":129,"itemsEquipped":20,"kills":283,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":16},
"stats": {"activatedLayers":223,"bossDamage":147188,"dmgDealt":1570539,"gold":129,"itemsEquipped":20,"kills":283,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":16},
"lineup": ["3_06_a@12,6[5_01_e_a+4_06_e_b]","2_14_a@11,6","4_20_b@11,7[3_08_e_a]","4_24_a@11,8","1_12_b@10,8[2_01_e_a+4_02_e_a]","6_03_a@9,4[1_01_e_b+4_05_e_a]","4_14_a@9,8[3_11_e_a+3_05_e_a]","6_05_a@9,9[1_05_e_b+4_07_e_b]"],
"bonds": ["deputShip 1/26","kjeragShip 0/5","preciShip 2/135","sargonShip 1/55","swiftShip 1/7","yanShip 0/6"]
},
@@ -1031,7 +1031,7 @@
"title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":198,"bossDamage":204157,"dmgDealt":1784967,"gold":142,"itemsEquipped":31,"kills":294,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":13,"refreshes":34},
"stats": {"activatedLayers":198,"bossDamage":235450,"dmgDealt":1816298,"gold":142,"itemsEquipped":31,"kills":294,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":13,"refreshes":34},
"lineup": ["6_01_a@11,7","2_01_b@10,3[4_09_e_a+6_03_e_b]","4_11_a@10,4[3_11_e_a+4_07_e_a]","4_07_a@9,3[4_11_e_a+2_01_e_a]","6_06_a@9,4[4_06_e_b+5_01_e_a]","2_10_a@9,8","4_14_a@9,9[1_01_e_a+4_04_e_a]"],
"bonds": ["deputShip 0/10","emptyShip 0/6","indomShip 1/0","preciShip 2/124","siracusaShip 0/6","swiftShip 0/32","victoriaShip 1/14","visiShip 1/60","yanShip 0/1"]
}
@@ -1047,8 +1047,8 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act2autochess_m01","bossId":"boss_1","hiddenBossId":"boss_8","factions":["DOT","INVISIBLE","REFLECTION"]},
"end": {"victory":false,"roundsPassed":12,"hiddenReached":false,"hiddenCleared":false,"reason":"eliminated","teamLp":null,"bossPoolLeft":null,"virtualMs":130250},
"rng": {"setup":25,"shop":675,"waves":0,"draft":57,"bots":21916,"meta":62},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":4821366,"virtualMs":138350},
"rng": {"setup":25,"shop":838,"waves":0,"draft":57,"bots":23018,"meta":61},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
{
@@ -1095,82 +1095,82 @@
},
{
"round": 7,
"ai_0": [1,28,10,0,0,4,8,"8091958a",45,"arcaneShip 0/4, kazimierzShip 0/8, kjeragShip 0/5, preciShip 2/19, suntShip 1/0, swiftShip 1/26",12,21,9,52],
"ai_1": [1,20,10,0,0,4,8,"6f0ccfc7",36,"arcaneShip 0/2, kazimierzShip 0/7, kjeragShip 0/4, preciShip 0/2, sargonShip 1/19, siracusaShip 0/6, soloShip 1/0, steadShip 2/4, swiftShip 1/13",15,21,6,51],
"ai_2": [1,20,10,0,2,4,8,"e9ee2d5d",83,"arcaneShip 0/2, deputShip 1/23, egirShip 0/4, kazimierzShip 0/2, kjeragShip 0/12, raidShip 0/4, soloShip 1/10, steadShip 2/24, swiftShip 0/4, victoriaShip 1/26, yanShip 0/2",17,21,4,52],
"ai_0": [1,30,10,0,0,4,8,"8091958a",45,"arcaneShip 0/4, kazimierzShip 0/8, kjeragShip 0/5, preciShip 2/19, suntShip 1/0, swiftShip 1/26",12,21,9,52],
"ai_1": [1,26,10,0,0,4,8,"6f0ccfc7",36,"arcaneShip 0/2, kazimierzShip 0/7, kjeragShip 0/4, preciShip 0/2, sargonShip 1/19, siracusaShip 0/6, soloShip 1/0, steadShip 2/4, swiftShip 1/13",21,21,0,51],
"ai_2": [1,21,10,0,2,4,8,"e9ee2d5d",83,"arcaneShip 0/2, deputShip 1/23, egirShip 0/4, kazimierzShip 0/2, kjeragShip 0/12, raidShip 0/4, soloShip 1/10, steadShip 2/24, swiftShip 0/4, victoriaShip 1/26, yanShip 0/2",17,21,4,52],
"ai_3": [1,8,10,0,0,4,8,"34745c3a",14,"arcaneShip 0/2, preciShip 0/2, sargonShip 0/4, siracusaShip 1/3, soloShip 1/11, steadShip 1/0",3,21,18,49]
},
{
"round": 8,
"ai_0": [1,26,11,0,0,4,8,"c8fd6622",73,"arcaneShip 1/4, kazimierzShip 0/8, kjeragShip 1/12, preciShip 2/24, skillfulShip 0/5, suntShip 1/0, swiftShip 1/33",7,9,2,63],
"ai_1": [1,13,11,0,0,4,8,"9a145335",54,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 0/7, kjeragShip 1/11, preciShip 0/2, sargonShip 1/26, siracusaShip 0/6, skillfulShip 1/7, soloShip 1/2, steadShip 1/6, swiftShip 0/13",2,9,7,60],
"ai_2": [1,19,13,0,0,4,8,"3ce91083",115,"arcaneShip 1/8, deputShip 1/25, egirShip 0/6, kazimierzShip 0/2, kjeragShip 0/14, lateranoShip 0/2, raidShip 0/6, soloShip 1/12, steadShip 1/35, suntShip 1/2, swiftShip 0/4, victoriaShip 1/33, yanShip 0/12",8,9,1,66],
"ai_0": [1,28,11,0,0,4,8,"c8fd6622",73,"arcaneShip 1/4, kazimierzShip 0/8, kjeragShip 1/12, preciShip 2/24, skillfulShip 0/5, suntShip 1/0, swiftShip 1/33",7,9,2,63],
"ai_1": [1,19,11,0,0,4,8,"9a145335",54,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 0/7, kjeragShip 1/11, preciShip 0/2, sargonShip 1/26, siracusaShip 0/6, skillfulShip 1/7, soloShip 1/2, steadShip 1/6, swiftShip 0/13",2,9,7,60],
"ai_2": [1,20,13,0,0,4,8,"c394bdcb",119,"arcaneShip 1/8, deputShip 1/27, egirShip 0/6, kazimierzShip 0/2, kjeragShip 0/14, lateranoShip 0/2, raidShip 0/6, soloShip 1/12, steadShip 1/34, suntShip 1/2, swiftShip 0/4, victoriaShip 1/36, yanShip 0/10",8,9,1,66],
"ai_3": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",0,9,9,59]
},
{
"round": 9,
"ai_0": [1,26,12,0,2,4,8,"2ff9d045",108,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/19, preciShip 2/33, skillfulShip 1/10, suntShip 1/0, swiftShip 1/38",9,19,10,74],
"ai_1": [1,11,12,0,0,4,8,"2b472f66",81,"arcaneShip 0/2, deputShip 2/6, kazimierzShip 0/7, kjeragShip 1/15, preciShip 0/2, sargonShip 1/39, siracusaShip 0/6, skillfulShip 1/11, soloShip 0/2, steadShip 1/10, swiftShip 0/13",13,19,6,72],
"ai_2": [1,19,12,0,1,4,8,"5c0ea571",121,"arcaneShip 1/12, deputShip 0/25, egirShip 0/8, indomShip 1/12, kazimierzShip 0/2, kjeragShip 0/20, lateranoShip 0/4, raidShip 0/6, soloShip 1/12, steadShip 1/46, suntShip 1/2, swiftShip 0/4, victoriaShip 1/37, yanShip 0/12",19,19,0,78],
"ai_0": [1,28,12,0,2,4,8,"2ff9d045",108,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/19, preciShip 2/33, skillfulShip 1/10, suntShip 1/0, swiftShip 1/38",9,19,10,74],
"ai_1": [1,19,12,0,0,4,8,"08726f68",81,"arcaneShip 0/2, deputShip 2/6, kazimierzShip 0/7, kjeragShip 1/15, preciShip 0/2, sargonShip 1/39, siracusaShip 0/6, skillfulShip 1/11, soloShip 0/2, steadShip 1/10, swiftShip 0/13",10,19,9,72],
"ai_2": [1,20,12,0,4,4,8,"5c0ea571",123,"arcaneShip 1/12, deputShip 0/27, egirShip 0/8, indomShip 1/12, kazimierzShip 0/2, kjeragShip 0/20, lateranoShip 0/4, raidShip 0/6, soloShip 1/12, steadShip 1/45, suntShip 1/2, swiftShip 0/4, victoriaShip 1/40, yanShip 0/10",19,19,0,78],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
},
{
"round": 10,
"ai_0": [1,26,14,0,0,5,8,"f12b88a9",121,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/22, preciShip 2/38, skillfulShip 1/10, suntShip 1/0, swiftShip 1/43",25,25,0,87],
"ai_1": [1,11,12,0,0,5,8,"19319da9",151,"arcaneShip 0/2, deputShip 2/10, kazimierzShip 0/15, kjeragShip 1/47, preciShip 0/2, sargonShip 1/61, siracusaShip 0/6, skillfulShip 1/15, soloShip 0/2, steadShip 1/18, swiftShip 0/21",22,25,3,84],
"ai_2": [1,19,13,0,2,5,8,"4592c36e",157,"arcaneShip 1/16, deputShip 0/27, egirShip 0/8, indomShip 1/34, kazimierzShip 0/2, kjeragShip 0/20, lateranoShip 0/6, raidShip 0/6, skillfulShip 0/2, soloShip 1/12, steadShip 1/50, suntShip 1/2, swiftShip 0/4, victoriaShip 1/43, yanShip 0/12",24,25,1,90],
"ai_0": [1,28,14,0,0,5,8,"f12b88a9",121,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/22, preciShip 2/38, skillfulShip 1/10, suntShip 1/0, swiftShip 1/43",25,25,0,87],
"ai_1": [1,19,12,0,0,5,8,"1577d46b",151,"arcaneShip 0/2, deputShip 2/10, kazimierzShip 0/15, kjeragShip 1/47, preciShip 0/2, sargonShip 1/61, siracusaShip 0/6, skillfulShip 1/15, soloShip 0/2, steadShip 1/18, swiftShip 0/21",24,25,1,84],
"ai_2": [1,20,16,0,2,5,8,"c36cb210",149,"arcaneShip 1/14, deputShip 0/27, egirShip 0/8, indomShip 0/12, kazimierzShip 0/2, kjeragShip 1/24, lateranoShip 0/6, raidShip 0/6, soloShip 1/14, steadShip 2/53, suntShip 1/2, swiftShip 0/4, victoriaShip 1/42, visiShip 0/2, yanShip 0/10",25,25,0,94],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
},
{
"round": 11,
"ai_0": [1,16,12,0,0,5,8,"57c3bbc6",141,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/32, preciShip 2/43, skillfulShip 1/10, suntShip 1/0, swiftShip 1/48",14,24,10,99],
"ai_1": [1,8,12,0,2,5,8,"6dd048bb",208,"arcaneShip 0/2, deputShip 2/14, kazimierzShip 0/15, kjeragShip 1/59, preciShip 0/2, sargonShip 1/83, siracusaShip 0/6, skillfulShip 1/19, soloShip 0/2, steadShip 0/18, swiftShip 1/33",21,24,3,97],
"ai_2": [1,16,14,0,0,5,8,"ca66dbec",198,"arcaneShip 1/20, deputShip 0/27, egirShip 0/8, indomShip 1/51, kazimierzShip 0/2, kjeragShip 0/22, lateranoShip 0/6, raidShip 0/6, skillfulShip 1/6, soloShip 1/14, steadShip 1/58, suntShip 1/2, swiftShip 0/4, victoriaShip 1/47, yanShip 0/12",21,24,3,103],
"ai_0": [1,21,12,0,0,5,8,"68c202f4",127,"arcaneShip 2/14, kazimierzShip 0/8, kjeragShip 1/22, preciShip 2/43, skillfulShip 0/10, suntShip 1/0, swiftShip 1/48",17,24,7,100],
"ai_1": [1,15,12,0,2,5,8,"a9511e49",208,"arcaneShip 0/2, deputShip 2/14, kazimierzShip 0/15, kjeragShip 1/59, preciShip 0/2, sargonShip 1/83, siracusaShip 0/6, skillfulShip 1/19, soloShip 0/2, steadShip 0/18, swiftShip 1/33",20,24,4,95],
"ai_2": [1,14,14,0,0,5,8,"e34dbdff",166,"arcaneShip 1/16, deputShip 0/29, egirShip 0/8, indomShip 0/12, kazimierzShip 0/2, kjeragShip 1/28, lateranoShip 0/8, raidShip 0/6, soloShip 1/14, steadShip 2/58, suntShip 1/2, swiftShip 0/4, victoriaShip 1/48, visiShip 0/4, yanShip 0/10",18,24,6,106],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
},
{
"round": 12,
"ai_0": [1,6,12,0,0,6,8,"db751bba",157,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/38, preciShip 2/48, skillfulShip 1/10, suntShip 1/0, swiftShip 1/53",12,47,35,110],
"ai_1": [0,0,14,0,0,6,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/15, kjeragShip 0/82, preciShip 0/2, sargonShip 0/94, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/2, steadShip 0/20, swiftShip 0/51",12,47,35,112],
"ai_2": [1,6,12,0,0,6,8,"8777b0c2",226,"arcaneShip 1/20, deputShip 0/29, egirShip 0/10, indomShip 1/63, kazimierzShip 0/2, kjeragShip 0/22, lateranoShip 0/6, raidShip 0/6, skillfulShip 1/8, soloShip 1/16, steadShip 1/64, suntShip 1/2, swiftShip 0/4, victoriaShip 1/53, yanShip 0/12",15,47,32,115],
"ai_0": [1,11,12,0,0,6,8,"c358ec16",138,"arcaneShip 2/14, kazimierzShip 0/8, kjeragShip 1/23, preciShip 2/48, skillfulShip 0/10, suntShip 1/0, swiftShip 1/53",6,47,41,111],
"ai_1": [1,5,14,0,0,6,8,"ed9f802c",273,"arcaneShip 0/2, deputShip 1/16, kazimierzShip 0/15, kjeragShip 1/74, preciShip 0/2, sargonShip 1/94, siracusaShip 0/6, skillfulShip 1/26, soloShip 0/2, steadShip 1/20, swiftShip 1/43",25,47,22,109],
"ai_2": [1,4,12,0,0,6,8,"d6c6d034",183,"arcaneShip 1/18, deputShip 0/31, egirShip 0/8, indomShip 0/12, kazimierzShip 0/2, kjeragShip 1/30, lateranoShip 0/10, raidShip 0/6, soloShip 1/16, steadShip 2/65, suntShip 1/2, swiftShip 0/4, victoriaShip 1/52, visiShip 0/6, yanShip 0/10",15,47,32,117],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
},
{
"round": 13,
"ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/8, kazimierzShip 0/8, kjeragShip 0/89, preciShip 0/53, skillfulShip 0/10, swiftShip 0/58",28,39,11,120],
"ai_1": [0,0,0,0,0,6,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/15, kjeragShip 0/82, preciShip 0/2, sargonShip 0/94, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/2, steadShip 0/20, swiftShip 0/51",null,null,null,112],
"ai_2": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/34, deputShip 0/29, egirShip 0/12, indomShip 0/65, kazimierzShip 0/2, kjeragShip 0/24, lateranoShip 0/6, raidShip 0/6, skillfulShip 0/18, soloShip 0/16, steadShip 0/70, suntShip 0/2, swiftShip 0/4, victoriaShip 0/59, yanShip 0/12",17,39,22,125],
"ai_0": [1,1,12,0,0,6,8,"0c518f2d",180,"arcaneShip 2/26, kazimierzShip 0/8, kjeragShip 1/27, preciShip 2/53, skillfulShip 1/16, suntShip 1/0, swiftShip 1/58",5,39,34,122],
"ai_1": [1,2,12,0,0,6,8,"74d1d862",328,"arcaneShip 0/2, deputShip 2/20, kazimierzShip 0/17, kjeragShip 1/95, preciShip 0/2, sargonShip 1/98, siracusaShip 0/6, skillfulShip 1/30, soloShip 0/2, steadShip 1/24, suntShip 1/4, swiftShip 1/57",36,39,3,121],
"ai_2": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/20, deputShip 0/31, egirShip 0/8, indomShip 0/12, kazimierzShip 0/2, kjeragShip 0/36, lateranoShip 0/12, raidShip 0/6, soloShip 0/16, steadShip 0/75, suntShip 0/2, swiftShip 0/4, victoriaShip 0/56, visiShip 0/8, yanShip 0/10",19,39,20,129],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
}
],
"players": {
"ai_0": {
"alive": false,
"alive": true,
"victory": false,
"roundsPassed": 12,
"eliminatedRound": 13,
"roundsPassed": 13,
"eliminatedRound": null,
"lp": 0,
"bandId": "band_sarkazb",
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
"trophies": 3,
"reward": 298,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":5604542,"gold":120,"itemsEquipped":13,"kills":164,"leaks":87,"lpLost":49,"merges":3,"perfectRounds":6,"refreshes":17},
"lineup": [],
"bonds": ["arcaneShip 0/8","kazimierzShip 0/8","kjeragShip 0/89","preciShip 0/53","skillfulShip 0/10","swiftShip 0/58"]
"reward": 340,
"stats": {"activatedLayers":202,"bossDamage":433732,"dmgDealt":4961668,"gold":135,"itemsEquipped":13,"kills":156,"leaks":113,"lpLost":44,"merges":4,"perfectRounds":6,"refreshes":25},
"lineup": ["6_16_a@12,4","1_17_b@12,8[5_07_e_a+3_06_e_b]","4_13_a@11,4","3_11_a@11,8[3_04_e_b+1_02_e_b]","6_05_a@10,4","4_10_a@10,5","4_22_a@10,7[4_02_e_b+4_04_e_a]","1_19_b@10,8[1_05_e_a+2_04_e_a]"],
"bonds": ["arcaneShip 2/40","kazimierzShip 0/8","kjeragShip 1/27","preciShip 2/53","skillfulShip 1/24","suntShip 1/0","swiftShip 1/58"]
},
"ai_1": {
"alive": false,
"alive": true,
"victory": false,
"roundsPassed": 11,
"eliminatedRound": 12,
"roundsPassed": 13,
"eliminatedRound": null,
"lp": 0,
"bandId": "band_kirara",
"title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"},
"trophies": 2,
"reward": 255,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3777039,"gold":112,"itemsEquipped":8,"kills":162,"leaks":60,"lpLost":28,"merges":1,"perfectRounds":6,"refreshes":22},
"lineup": [],
"bonds": ["arcaneShip 0/2","deputShip 0/16","kazimierzShip 0/15","kjeragShip 0/82","preciShip 0/2","sargonShip 0/94","siracusaShip 0/6","skillfulShip 0/26","soloShip 0/2","steadShip 0/20","swiftShip 0/51"]
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 3,
"reward": 340,
"stats": {"activatedLayers":361,"bossDamage":1944902,"dmgDealt":9217989,"gold":133,"itemsEquipped":15,"kills":223,"leaks":46,"lpLost":24,"merges":2,"perfectRounds":7,"refreshes":28},
"lineup": ["3_13_a@12,8[6_02_e_a+3_08_e_b]","4_21_a@11,4","4_14_a@11,8","3_20_a@10,4[5_02_e_a+1_02_e_a]","2_08_b@10,7[3_05_e_b+4_04_e_a]","6_19_a@10,8[3_07_e_a+4_03_e_a]","1_02_b@9,4[3_03_e_a]","4_24_a@9,9"],
"bonds": ["arcaneShip 0/2","deputShip 2/24","kazimierzShip 0/17","kjeragShip 1/99","preciShip 0/2","sargonShip 1/102","siracusaShip 0/6","skillfulShip 1/34","soloShip 0/2","steadShip 1/28","suntShip 1/8","swiftShip 1/66"]
},
"ai_2": {
"alive": false,
@@ -1182,9 +1182,9 @@
"title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"},
"trophies": 3,
"reward": 298,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":5789462,"gold":125,"itemsEquipped":21,"kills":189,"leaks":73,"lpLost":32,"merges":3,"perfectRounds":4,"refreshes":13},
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":5615159,"gold":129,"itemsEquipped":21,"kills":195,"leaks":73,"lpLost":34,"merges":4,"perfectRounds":5,"refreshes":18},
"lineup": [],
"bonds": ["arcaneShip 0/34","deputShip 0/29","egirShip 0/12","indomShip 0/65","kazimierzShip 0/2","kjeragShip 0/24","lateranoShip 0/6","raidShip 0/6","skillfulShip 0/18","soloShip 0/16","steadShip 0/70","suntShip 0/2","swiftShip 0/4","victoriaShip 0/59","yanShip 0/12"]
"bonds": ["arcaneShip 0/20","deputShip 0/31","egirShip 0/8","indomShip 0/12","kazimierzShip 0/2","kjeragShip 0/36","lateranoShip 0/12","raidShip 0/6","soloShip 0/16","steadShip 0/75","suntShip 0/2","swiftShip 0/4","victoriaShip 0/56","visiShip 0/8","yanShip 0/10"]
},
"ai_3": {
"alive": false,
@@ -1193,7 +1193,7 @@
"eliminatedRound": 8,
"lp": 0,
"bandId": "band_cathy",
"title": null,
"title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"},
"trophies": 1,
"reward": 149,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":692486,"gold":59,"itemsEquipped":6,"kills":55,"leaks":41,"lpLost":27,"merges":0,"perfectRounds":3,"refreshes":3},
@@ -1212,7 +1212,7 @@
"combat": "server",
"boost": null,
"setup": {"stageId":"act1autochess_m01","bossId":"boss_1","hiddenBossId":"boss_9","factions":["FLY","DOT","REFLECTION"]},
"end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":26,"bossPoolLeft":0,"virtualMs":118400},
"end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":27,"bossPoolLeft":0,"virtualMs":119900},
"rng": {"setup":25,"shop":482,"waves":0,"draft":34,"bots":18094,"meta":81},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -1254,7 +1254,7 @@
{
"round": 8,
"ai_0": [1,30,13,0,4,4,8,"dd94b4a8",45,"arcaneShip 0/2, preciShip 1/7, siracusaShip 1/26, soloShip 1/3, steadShip 1/9",24,24,0,69],
"ai_1": [1,28,12,0,0,4,8,"ebb394d0",121,"arcaneShip 1/16, deputShip 1/8, kjeragShip 1/29, preciShip 1/35, soloShip 1/2, steadShip 1/19, suntShip 1/8, victoriaShip 1/4",23,23,0,62]
"ai_1": [1,28,12,0,0,4,8,"a16d247e",121,"arcaneShip 1/16, deputShip 1/8, kjeragShip 1/29, preciShip 1/35, soloShip 1/2, steadShip 1/19, suntShip 1/8, victoriaShip 1/4",22,23,1,62]
},
{
"round": 9,
@@ -1274,12 +1274,12 @@
{
"round": 12,
"ai_0": [1,20,12,0,0,6,8,"6c0894ab",123,"arcaneShip 1/19, indomShip 0/8, preciShip 1/29, siracusaShip 1/67, soloShip 1/3, steadShip 0/9, suntShip 1/0, swiftShip 1/5, victoriaShip 0/8, visiShip 0/8",29,46,17,125],
"ai_1": [1,18,12,0,0,6,8,"3c8a5177",207,"arcaneShip 1/34, deputShip 1/16, indomShip 0/8, kjeragShip 1/49, preciShip 1/53, soloShip 1/10, steadShip 2/29, suntShip 2/16, victoriaShip 0/12, visiShip 0/8",34,46,12,109]
"ai_1": [1,18,12,0,0,6,8,"eb25e112",207,"arcaneShip 1/34, deputShip 1/16, indomShip 0/8, kjeragShip 1/49, preciShip 1/53, soloShip 1/10, steadShip 2/29, suntShip 2/16, victoriaShip 0/12, visiShip 0/8",36,46,10,109]
},
{
"round": 13,
"ai_0": [1,10,12,0,0,6,8,"542c547b",165,"arcaneShip 2/23, indomShip 0/8, lateranoShip 1/0, maniShip 1/0, preciShip 1/39, raidShip 1/10, siracusaShip 1/75, soloShip 1/3, steadShip 0/9, suntShip 1/0, swiftShip 1/15, victoriaShip 0/8, visiShip 0/8",20,39,19,138],
"ai_1": [1,16,12,0,0,6,8,"31109540",221,"arcaneShip 1/36, deputShip 1/18, indomShip 0/8, kjeragShip 1/51, preciShip 1/55, soloShip 1/12, steadShip 2/31, suntShip 2/18, victoriaShip 0/12, visiShip 0/8",37,39,2,120]
"ai_1": [1,17,12,0,0,6,8,"20ec6e25",221,"arcaneShip 1/36, deputShip 1/18, indomShip 0/8, kjeragShip 1/51, preciShip 1/55, soloShip 1/12, steadShip 2/31, suntShip 2/18, victoriaShip 0/12, visiShip 0/8",38,39,1,120]
}
],
"players": {
@@ -1293,7 +1293,7 @@
"title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"},
"trophies": 4,
"reward": 400,
"stats": {"activatedLayers":195,"bossDamage":340203,"dmgDealt":3208513,"gold":149,"itemsEquipped":22,"kills":253,"leaks":43,"lpLost":20,"merges":3,"perfectRounds":9,"refreshes":25},
"stats": {"activatedLayers":195,"bossDamage":340203,"dmgDealt":3212670,"gold":149,"itemsEquipped":22,"kills":254,"leaks":43,"lpLost":20,"merges":3,"perfectRounds":9,"refreshes":25},
"lineup": ["5_10_a@11,3[3_11_e_b+4_04_e_b]","6_11_a@11,6","1_01_b@11,7","1_17_a@10,3[1_01_e_a]","4_14_b@10,7[6_09_e_a+3_11_e_a]","4_16_a@10,8","4_02_a@9,8[6_01_e_a+3_03_e_b]","1_08_a@9,9[1_02_e_b+1_02_e_a]"],
"bonds": ["arcaneShip 1/23","indomShip 0/8","lateranoShip 1/0","maniShip 1/0","preciShip 1/49","raidShip 1/20","siracusaShip 1/75","soloShip 1/3","steadShip 0/9","suntShip 1/0","swiftShip 1/25","victoriaShip 0/8","visiShip 0/8"]
},
@@ -1302,12 +1302,12 @@
"victory": true,
"roundsPassed": 14,
"eliminatedRound": null,
"lp": 16,
"lp": 17,
"bandId": "band_malkie",
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 4,
"reward": 400,
"stats": {"activatedLayers":243,"bossDamage":1009797,"dmgDealt":4614790,"gold":130,"itemsEquipped":29,"kills":261,"leaks":14,"lpLost":12,"merges":5,"perfectRounds":11,"refreshes":16},
"stats": {"activatedLayers":243,"bossDamage":1009797,"dmgDealt":4621226,"gold":130,"itemsEquipped":29,"kills":263,"leaks":12,"lpLost":11,"merges":5,"perfectRounds":10,"refreshes":16},
"lineup": ["1_06_b@12,3[5_07_e_a+4_03_e_b]","1_02_b@12,4[5_02_e_a+4_11_e_b]","1_17_b@11,6[4_03_e_a+1_01_e_b]","3_11_b@11,7[3_01_e_a+3_02_e_a]","3_20_a@10,3[1_05_e_a+1_05_e_b]","1_10_b@10,8[4_02_e_a+6_11_e_a]","5_11_a@9,4[4_08_e_a+1_02_e_a]","5_12_a@9,9[4_10_e_a]"],
"bonds": ["arcaneShip 1/40","deputShip 1/20","indomShip 0/8","kjeragShip 1/56","preciShip 1/57","soloShip 1/14","steadShip 2/36","suntShip 2/20","victoriaShip 0/12","visiShip 0/8"]
}
@@ -1666,32 +1666,32 @@
},
{
"round": 8,
"h_0": [1,27,14,0,0,5,8,"c80e44c9",164,"indomShip 1/12, miraShip 0/3, preciShip 2/45, sargonShip 1/61, soloShip 1/0, steadShip 1/34, visiShip 1/12, yanShip 0/6",18,18,0,62],
"h_0": [1,27,14,0,0,5,8,"3cd8d174",180,"indomShip 1/12, miraShip 0/3, preciShip 2/49, sargonShip 1/74, soloShip 1/0, steadShip 1/33, visiShip 1/12, yanShip 0/6",18,18,0,62],
"ai_0": [1,28,13,0,0,4,8,"b30dbdae",23,"kjeragShip 0/5, preciShip 2/14, sargonShip 0/2, siracusaShip 1/0, skillfulShip 1/4, soloShip 1/0, steadShip 0/2, suntShip 1/0, swiftShip 1/5, yanShip 0/2",16,18,2,66]
},
{
"round": 9,
"h_0": [1,27,12,0,0,5,8,"e46d5bda",184,"indomShip 1/12, miraShip 1/3, preciShip 2/50, sargonShip 1/61, soloShip 1/0, steadShip 1/41, suntShip 1/0, swiftShip 1/5, visiShip 1/12, yanShip 0/6",23,23,0,74],
"h_0": [1,27,12,0,0,5,8,"e46d5bda",200,"indomShip 1/12, miraShip 1/3, preciShip 2/54, sargonShip 1/74, soloShip 1/0, steadShip 1/40, suntShip 1/0, swiftShip 1/5, visiShip 1/12, yanShip 0/6",23,23,0,74],
"ai_0": [1,28,12,0,0,4,8,"d2da736a",45,"kjeragShip 0/5, preciShip 2/23, sargonShip 0/2, siracusaShip 1/4, skillfulShip 1/6, soloShip 1/0, steadShip 0/2, suntShip 1/0, swiftShip 1/12, victoriaShip 0/5, yanShip 0/7",23,23,0,78]
},
{
"round": 10,
"h_0": [1,27,12,0,0,5,8,"5d239142",228,"indomShip 2/12, miraShip 0/3, preciShip 2/69, sargonShip 1/75, soloShip 1/0, steadShip 1/50, suntShip 1/0, swiftShip 1/10, visiShip 1/12, yanShip 0/6",31,31,0,86],
"h_0": [1,27,12,0,0,5,8,"5d239142",240,"indomShip 2/12, miraShip 0/3, preciShip 2/71, sargonShip 1/86, soloShip 1/0, steadShip 1/49, suntShip 1/0, swiftShip 1/10, visiShip 1/12, yanShip 0/6",31,31,0,86],
"ai_0": [1,28,12,0,0,5,8,"e30157f7",67,"kjeragShip 0/5, preciShip 2/32, sargonShip 0/2, siracusaShip 1/8, skillfulShip 1/8, soloShip 1/0, steadShip 0/2, suntShip 1/0, swiftShip 1/19, victoriaShip 0/5, yanShip 0/7",31,31,0,88]
},
{
"round": 11,
"h_0": [1,27,12,0,0,6,8,"ef68553f",246,"indomShip 1/12, miraShip 0/3, preciShip 2/103, sargonShip 1/99, steadShip 0/50, suntShip 1/0, swiftShip 1/20, visiShip 1/12, yanShip 0/6",19,19,0,99],
"h_0": [1,27,12,0,0,6,8,"ef68553f",259,"indomShip 1/12, miraShip 0/3, preciShip 2/105, sargonShip 1/110, steadShip 0/49, suntShip 1/0, swiftShip 1/20, visiShip 1/12, yanShip 0/6",19,19,0,99],
"ai_0": [1,28,12,0,0,5,8,"bea07e3c",94,"kjeragShip 0/10, preciShip 2/46, sargonShip 0/2, siracusaShip 1/12, skillfulShip 1/10, soloShip 1/0, steadShip 0/2, suntShip 1/0, swiftShip 1/26, victoriaShip 0/5, yanShip 0/7",19,19,0,99]
},
{
"round": 12,
"h_0": [1,27,12,0,0,6,8,"9985f529",313,"indomShip 1/12, miraShip 0/3, preciShip 2/125, sargonShip 2/139, steadShip 0/50, suntShip 1/0, swiftShip 1/25, visiShip 1/12, yanShip 0/6",33,33,0,112],
"h_0": [1,27,12,0,0,6,8,"9985f529",324,"indomShip 1/12, miraShip 0/3, preciShip 2/126, sargonShip 2/149, steadShip 0/49, suntShip 1/0, swiftShip 1/25, visiShip 1/12, yanShip 0/6",33,33,0,112],
"ai_0": [1,28,12,0,0,6,8,"0f82a984",112,"kjeragShip 0/10, preciShip 2/55, sargonShip 0/2, siracusaShip 1/12, skillfulShip 1/12, soloShip 1/0, steadShip 0/2, suntShip 1/0, swiftShip 1/33, victoriaShip 0/5, yanShip 0/7",25,33,8,110]
},
{
"round": 13,
"h_0": [1,27,12,0,0,6,8,"1b404257",322,"indomShip 1/12, miraShip 0/3, preciShip 2/133, sargonShip 2/147, steadShip 0/50, suntShip 1/0, swiftShip 1/30, visiShip 0/12, yanShip 0/6",50,50,0,123],
"h_0": [1,27,12,0,0,6,8,"1b404257",329,"indomShip 1/12, miraShip 0/3, preciShip 2/132, sargonShip 2/155, steadShip 0/49, suntShip 1/0, swiftShip 1/30, visiShip 0/12, yanShip 0/6",50,50,0,123],
"ai_0": [1,28,12,0,0,6,8,"de362a61",127,"kjeragShip 0/10, preciShip 2/60, sargonShip 0/2, siracusaShip 0/16, skillfulShip 1/14, soloShip 1/0, steadShip 0/2, suntShip 1/0, swiftShip 1/40, victoriaShip 0/5, yanShip 1/13",50,50,0,121]
}
],
@@ -1706,9 +1706,9 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 4,
"reward": 400,
"stats": {"activatedLayers":342,"bossDamage":1134957,"dmgDealt":4776446,"gold":134,"itemsEquipped":31,"kills":299,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":27},
"stats": {"activatedLayers":349,"bossDamage":1184876,"dmgDealt":4807844,"gold":134,"itemsEquipped":31,"kills":299,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":27},
"lineup": ["5_02_a@12,8[4_03_e_a+2_04_e_b]","3_13_b@11,7[4_07_e_b+6_07_e_a]","4_14_b@11,8","6_05_a@10,6[3_03_e_a+5_01_e_b]","4_23_b@10,8[3_11_e_a+3_05_e_b]","5_06_a@9,7[4_11_e_a+4_04_e_a]","4_07_b@9,8[1_01_e_a+4_10_e_a]","6_06_b@9,9[3_11_e_b+2_01_e_a]"],
"bonds": ["indomShip 2/12","miraShip 0/3","preciShip 2/143","sargonShip 1/147","skillfulShip 1/0","steadShip 0/50","suntShip 2/0","swiftShip 1/40","visiShip 0/12","yanShip 0/6"]
"bonds": ["indomShip 2/12","miraShip 0/3","preciShip 2/142","sargonShip 1/155","skillfulShip 1/0","steadShip 0/49","suntShip 2/0","swiftShip 1/40","visiShip 0/12","yanShip 0/6"]
},
"ai_0": {
"alive": true,
@@ -1720,7 +1720,7 @@
"title": {"id":"comment_3","name":"坚若磐石","picId":"comment_icon_3","text":"目标生命值损失最少"},
"trophies": 4,
"reward": 400,
"stats": {"activatedLayers":155,"bossDamage":440043,"dmgDealt":3337243,"gold":133,"itemsEquipped":18,"kills":291,"leaks":10,"lpLost":0,"merges":4,"perfectRounds":11,"refreshes":26},
"stats": {"activatedLayers":155,"bossDamage":390124,"dmgDealt":3287213,"gold":133,"itemsEquipped":18,"kills":289,"leaks":10,"lpLost":0,"merges":4,"perfectRounds":11,"refreshes":26},
"lineup": ["1_09_b@12,8","5_03_a@11,7","6_05_a@11,8[4_08_e_b]","2_04_b@10,5[3_08_e_a+3_04_e_a]","3_11_b@10,6","2_13_b@10,8[4_02_e_a+4_04_e_a]","6_15_a@9,8[4_11_e_b]","1_08_b@9,9[1_02_e_a+4_06_e_a]"],
"bonds": ["kjeragShip 0/20","preciShip 2/70","sargonShip 0/2","siracusaShip 0/16","skillfulShip 1/21","soloShip 1/0","steadShip 0/2","suntShip 2/0","swiftShip 1/44","victoriaShip 0/5","yanShip 1/20"]
}
@@ -1747,7 +1747,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":21206,"virtualMs":122900},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":25040,"virtualMs":121400},
"rng": {"setup":25,"shop":507,"waves":0,"draft":40,"bots":16572,"meta":17},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -1760,53 +1760,53 @@
},
{
"round": 4,
"h_0": [1,27,8,0,1,2,8,"8773f667",1,"kazimierzShip 0/4, preciShip 1/1, soloShip 1/0, swiftShip 0/4",9,9,0,21],
"h_0": [1,27,8,0,1,2,8,"8773f667",4,"kazimierzShip 0/4, preciShip 1/4, soloShip 1/0, swiftShip 0/4",9,9,0,21],
"ai_0": [1,45,8,0,1,2,8,"1da186ca",10,"deputShip 1/2, kazimierzShip 0/2, sargonShip 0/4, soloShip 1/2, swiftShip 1/6",11,9,0,23]
},
{
"round": 5,
"h_0": [1,27,9,0,0,3,8,"bf0d47c1",9,"kazimierzShip 0/8, kjeragShip 0/5, preciShip 2/9, soloShip 1/0, swiftShip 0/8",21,21,0,30],
"h_0": [1,27,9,0,0,3,8,"bf0d47c1",12,"kazimierzShip 0/8, kjeragShip 0/5, preciShip 2/12, soloShip 1/0, swiftShip 0/8",21,21,0,30],
"ai_0": [1,45,9,0,0,3,8,"99cb32b3",18,"deputShip 1/4, kazimierzShip 0/2, sargonShip 0/4, soloShip 1/4, swiftShip 1/10",21,21,0,32]
},
{
"round": 6,
"h_0": [1,27,9,0,0,3,8,"78da96d9",16,"kazimierzShip 0/8, kjeragShip 0/5, miraShip 1/3, preciShip 2/13, soloShip 1/0, swiftShip 0/8",64,19,0,39],
"h_0": [1,27,9,0,0,3,8,"78da96d9",19,"kazimierzShip 0/8, kjeragShip 0/5, miraShip 1/3, preciShip 2/16, soloShip 1/0, swiftShip 0/8",64,19,0,39],
"ai_0": [1,45,9,0,0,3,8,"975c05db",38,"deputShip 2/8, kazimierzShip 0/4, sargonShip 0/4, skillfulShip 1/4, soloShip 1/8, swiftShip 1/18",64,19,0,40]
},
{
"round": 7,
"h_0": [1,27,10,0,2,4,8,"00ea2b4a",21,"kazimierzShip 0/8, kjeragShip 0/5, miraShip 1/5, preciShip 2/16, soloShip 1/0, swiftShip 0/8",28,28,0,49],
"h_0": [1,27,10,0,2,4,8,"00ea2b4a",24,"kazimierzShip 0/8, kjeragShip 0/5, miraShip 1/5, preciShip 2/19, soloShip 1/0, swiftShip 0/8",28,28,0,49],
"ai_0": [1,45,10,0,0,4,8,"fda860c6",60,"deputShip 2/12, kazimierzShip 0/4, sargonShip 0/4, skillfulShip 1/10, soloShip 1/12, swiftShip 1/26",28,28,0,49]
},
{
"round": 8,
"h_0": [1,27,13,0,0,4,8,"acad3972",57,"kazimierzShip 0/8, kjeragShip 1/10, miraShip 1/8, preciShip 1/21, skillfulShip 1/5, swiftShip 1/13",19,19,0,63],
"h_0": [1,27,13,0,0,4,8,"acad3972",60,"kazimierzShip 0/8, kjeragShip 1/10, miraShip 1/8, preciShip 1/24, skillfulShip 1/5, swiftShip 1/13",19,19,0,63],
"ai_0": [1,45,11,0,0,4,8,"15e7305f",98,"deputShip 2/16, kazimierzShip 0/4, sargonShip 0/4, siracusaShip 1/10, skillfulShip 1/16, soloShip 1/16, swiftShip 1/40",19,19,0,60]
},
{
"round": 9,
"h_0": [1,27,12,0,0,4,8,"e3eb5ec0",64,"kazimierzShip 0/8, kjeragShip 1/10, miraShip 0/8, preciShip 2/27, skillfulShip 1/7, soloShip 1/0, suntShip 1/0, swiftShip 1/20",19,19,0,76],
"h_0": [1,27,12,0,0,4,8,"e3eb5ec0",67,"kazimierzShip 0/8, kjeragShip 1/10, miraShip 0/8, preciShip 2/30, skillfulShip 1/7, soloShip 1/0, suntShip 1/0, swiftShip 1/20",19,19,0,76],
"ai_0": [1,45,12,0,1,4,8,"7290040a",128,"deputShip 2/20, kazimierzShip 0/4, sargonShip 0/4, siracusaShip 1/14, skillfulShip 1/22, soloShip 1/20, suntShip 1/4, swiftShip 1/48",19,19,0,74]
},
{
"round": 10,
"h_0": [1,27,12,0,0,5,8,"63e7f103",87,"kazimierzShip 0/8, kjeragShip 1/11, miraShip 1/8, preciShip 2/32, skillfulShip 1/9, soloShip 1/0, suntShip 1/0, swiftShip 1/27",24,24,0,89],
"h_0": [1,27,12,0,0,5,8,"63e7f103",90,"kazimierzShip 0/8, kjeragShip 1/11, miraShip 1/8, preciShip 2/35, skillfulShip 1/9, soloShip 1/0, suntShip 1/0, swiftShip 1/27",24,24,0,89],
"ai_0": [1,45,13,0,0,5,8,"435b20af",170,"deputShip 2/24, kazimierzShip 0/4, raidShip 1/12, sargonShip 0/4, siracusaShip 1/18, skillfulShip 1/28, soloShip 1/24, suntShip 1/8, swiftShip 1/56",22,24,2,86]
},
{
"round": 11,
"h_0": [1,27,12,0,0,5,8,"d027ae1c",135,"kazimierzShip 0/16, kjeragShip 1/27, miraShip 0/8, preciShip 2/42, skillfulShip 1/11, soloShip 1/0, suntShip 1/0, swiftShip 1/55",24,24,0,100],
"ai_0": [1,45,12,0,0,5,8,"de415c2a",188,"deputShip 2/28, kazimierzShip 0/4, raidShip 0/12, sargonShip 0/4, siracusaShip 1/22, skillfulShip 1/34, soloShip 1/28, suntShip 1/12, swiftShip 1/64",20,24,4,98]
"h_0": [1,24,12,0,0,5,8,"d027ae1c",170,"kazimierzShip 0/16, kjeragShip 1/43, miraShip 0/8, preciShip 2/45, skillfulShip 1/11, soloShip 1/0, suntShip 1/0, swiftShip 1/71",21,24,3,100],
"ai_0": [1,41,12,0,0,5,8,"de415c2a",188,"deputShip 2/28, kazimierzShip 0/4, raidShip 0/12, sargonShip 0/4, siracusaShip 1/22, skillfulShip 1/34, soloShip 1/28, suntShip 1/12, swiftShip 1/64",20,24,4,98]
},
{
"round": 12,
"h_0": [1,25,12,0,0,6,8,"e434765b",191,"kazimierzShip 0/16, kjeragShip 1/43, miraShip 0/8, preciShip 2/52, skillfulShip 1/13, soloShip 1/0, suntShip 1/0, swiftShip 1/83",29,31,2,111],
"ai_0": [1,35,12,0,0,6,8,"158fd843",218,"deputShip 2/32, kazimierzShip 0/4, raidShip 0/12, sargonShip 0/4, siracusaShip 1/26, skillfulShip 1/40, soloShip 1/32, suntShip 1/16, swiftShip 1/72",10,31,21,110]
"h_0": [1,23,12,0,0,6,8,"e434765b",226,"kazimierzShip 0/16, kjeragShip 1/59, miraShip 0/8, preciShip 2/55, skillfulShip 1/13, soloShip 1/0, suntShip 1/0, swiftShip 1/99",30,31,1,111],
"ai_0": [1,31,12,0,0,6,8,"158fd843",218,"deputShip 2/32, kazimierzShip 0/4, raidShip 0/12, sargonShip 0/4, siracusaShip 1/26, skillfulShip 1/40, soloShip 1/32, suntShip 1/16, swiftShip 1/72",10,31,21,110]
},
{
"round": 13,
"h_0": [1,25,12,0,0,6,8,"42bc3ae3",273,"kazimierzShip 1/34, kjeragShip 1/64, miraShip 0/8, preciShip 2/62, skillfulShip 0/20, soloShip 1/0, suntShip 1/0, swiftShip 1/113",110,35,5,124],
"ai_0": [1,35,12,0,0,6,8,"638d3c38",242,"deputShip 2/36, emptyShip 1/4, kazimierzShip 0/8, raidShip 0/12, sargonShip 0/4, siracusaShip 1/52, skillfulShip 1/46, soloShip 0/32, suntShip 1/20, swiftShip 1/84",115,35,0,122]
"h_0": [1,23,12,0,0,6,8,"42bc3ae3",308,"kazimierzShip 1/34, kjeragShip 1/80, miraShip 0/8, preciShip 2/65, skillfulShip 0/20, soloShip 1/0, suntShip 1/0, swiftShip 1/129",112,35,3,124],
"ai_0": [1,31,12,0,0,6,8,"638d3c38",262,"deputShip 2/36, emptyShip 1/4, kazimierzShip 0/8, raidShip 0/12, sargonShip 0/4, siracusaShip 1/72, skillfulShip 1/46, soloShip 0/32, suntShip 1/20, swiftShip 1/84",115,35,0,122]
}
],
"players": {
@@ -1820,9 +1820,9 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 3,
"reward": 320,
"stats": {"activatedLayers":306,"bossDamage":536472,"dmgDealt":3677035,"gold":136,"itemsEquipped":10,"kills":390,"leaks":22,"lpLost":2,"merges":4,"perfectRounds":9,"refreshes":18},
"stats": {"activatedLayers":341,"bossDamage":479336,"dmgDealt":3356097,"gold":136,"itemsEquipped":10,"kills":385,"leaks":22,"lpLost":4,"merges":4,"perfectRounds":8,"refreshes":18},
"lineup": ["4_14_b@12,5","6_05_a@12,6","4_13_a@12,7[3_02_e_a]","3_11_a@11,8[5_02_e_a+5_03_e_a]","4_20_a@10,3","1_19_b@10,8[4_11_e_a]","6_19_a@9,4[4_07_e_b]","5_11_a@9,5"],
"bonds": ["kazimierzShip 1/34","kjeragShip 1/66","miraShip 1/11","preciShip 2/72","skillfulShip 0/20","soloShip 1/0","steadShip 0/2","suntShip 1/0","swiftShip 1/123","yanShip 0/6"]
"bonds": ["kazimierzShip 1/34","kjeragShip 1/82","miraShip 1/11","preciShip 2/75","skillfulShip 0/20","soloShip 1/0","steadShip 0/2","suntShip 1/0","swiftShip 1/139","yanShip 0/6"]
},
"ai_0": {
"alive": true,
@@ -1834,9 +1834,9 @@
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
"trophies": 3,
"reward": 320,
"stats": {"activatedLayers":280,"bossDamage":222321,"dmgDealt":2569515,"gold":133,"itemsEquipped":15,"kills":375,"leaks":27,"lpLost":10,"merges":4,"perfectRounds":10,"refreshes":27},
"stats": {"activatedLayers":300,"bossDamage":275624,"dmgDealt":2633560,"gold":133,"itemsEquipped":15,"kills":373,"leaks":27,"lpLost":14,"merges":4,"perfectRounds":10,"refreshes":27},
"lineup": ["6_18_a@12,5[1_05_e_a+3_06_e_b]","1_13_b@12,6","6_12_a@12,7[5_02_e_b]","1_06_b@11,8","5_10_a@10,3[3_11_e_b+3_11_e_a]","2_13_a@10,7[4_05_e_b+4_02_e_a]","3_18_a@10,8[4_10_e_b+4_04_e_a]","4_21_a@9,6"],
"bonds": ["deputShip 2/40","emptyShip 1/8","kazimierzShip 0/16","kjeragShip 0/8","raidShip 0/12","sargonShip 0/8","siracusaShip 1/56","skillfulShip 1/52","soloShip 0/32","suntShip 1/24","swiftShip 1/100"]
"bonds": ["deputShip 2/40","emptyShip 1/8","kazimierzShip 0/16","kjeragShip 0/8","raidShip 0/12","sargonShip 0/8","siracusaShip 1/76","skillfulShip 1/52","soloShip 0/32","suntShip 1/24","swiftShip 1/100"]
}
},
"standIns": {
@@ -1927,7 +1927,7 @@
{
"round": 13,
"h_0": [1,28,12,0,0,6,8,"d867f422",180,"deputShip 1/26, indomShip 1/24, investShip 0/8, kazimierzShip 0/2, kjeragShip 0/8, preciShip 2/19, skillfulShip 1/20, soloShip 0/20, steadShip 0/76, swiftShip 1/66, victoriaShip 1/19, visiShip 1/6",35,43,8,121],
"ai_0": [1,6,18,0,0,6,8,"95334040",368,"deputShip 1/52, emptyShip 0/6, investShip 0/8, kazimierzShip 0/8, kjeragShip 1/35, miraShip 1/2, raidShip 1/21, siracusaShip 1/120, soloShip 0/24, suntShip 1/6, swiftShip 1/83, visiShip 1/49, yanShip 0/1",22,43,21,133]
"ai_0": [1,6,18,0,0,6,8,"95334040",370,"deputShip 1/52, emptyShip 0/6, investShip 0/8, kazimierzShip 0/8, kjeragShip 1/37, miraShip 1/2, raidShip 1/21, siracusaShip 1/120, soloShip 0/24, suntShip 1/6, swiftShip 1/83, visiShip 1/49, yanShip 0/1",26,43,17,133]
}
],
"players": {
@@ -1941,7 +1941,7 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 4,
"reward": 400,
"stats": {"activatedLayers":226,"bossDamage":770783,"dmgDealt":4300218,"gold":132,"itemsEquipped":21,"kills":287,"leaks":22,"lpLost":17,"merges":1,"perfectRounds":9,"refreshes":42},
"stats": {"activatedLayers":226,"bossDamage":778218,"dmgDealt":4310945,"gold":132,"itemsEquipped":21,"kills":287,"leaks":22,"lpLost":17,"merges":1,"perfectRounds":9,"refreshes":42},
"lineup": ["4_21_a@12,7","4_14_b@12,8[2_01_e_a+3_02_e_a]","1_06_a@11,6[3_11_e_a+2_01_e_b]","6_11_a@11,7","6_12_a@11,8[3_05_e_b+4_08_e_b]","6_05_a@10,5[3_06_e_b+4_07_e_a]","4_07_a@10,8[3_01_e_b+6_09_e_a]","5_06_a@9,9"],
"bonds": ["deputShip 1/28","indomShip 1/29","investShip 0/8","kazimierzShip 0/2","kjeragShip 0/8","maniShip 1/2","preciShip 2/31","skillfulShip 1/22","soloShip 0/20","steadShip 0/76","swiftShip 1/78","victoriaShip 1/25","visiShip 1/11"]
},
@@ -1955,9 +1955,9 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 4,
"reward": 400,
"stats": {"activatedLayers":402,"bossDamage":646717,"dmgDealt":3433831,"gold":145,"itemsEquipped":12,"kills":236,"leaks":53,"lpLost":21,"merges":3,"perfectRounds":7,"refreshes":29},
"stats": {"activatedLayers":404,"bossDamage":639282,"dmgDealt":3465108,"gold":145,"itemsEquipped":12,"kills":240,"leaks":49,"lpLost":21,"merges":3,"perfectRounds":7,"refreshes":29},
"lineup": ["2_14_b@12,7","3_20_a@12,8","3_14_a@11,7","5_10_a@11,8","6_19_a@10,6[4_04_e_a]","4_04_a@10,7","3_18_b@10,8[3_04_e_b+5_02_e_a]","4_16_a@9,9[4_05_e_a+4_11_e_a]"],
"bonds": ["deputShip 1/54","emptyShip 1/8","investShip 0/8","kazimierzShip 0/8","kjeragShip 1/37","miraShip 0/2","raidShip 1/28","siracusaShip 1/126","soloShip 0/24","suntShip 1/8","swiftShip 1/85","visiShip 1/56","yanShip 0/1"]
"bonds": ["deputShip 1/54","emptyShip 1/8","investShip 0/8","kazimierzShip 0/8","kjeragShip 1/39","miraShip 0/2","raidShip 1/28","siracusaShip 1/126","soloShip 0/24","suntShip 1/8","swiftShip 1/85","visiShip 1/56","yanShip 0/1"]
}
},
"diy": {
+286 -287
View File
@@ -204,19 +204,19 @@
"bossHpLeft": null,
"rngDraws": 2,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":17,"total":36,"perfect":false,"leaks":19,"leaksUncounted":0,"coins":2,"dmg":152102,"bossDmg":0,"heal":26047,"deaths":13,"layerGains":{}}},
"players": {"p1":{"killed":17,"total":36,"perfect":false,"leaks":19,"leaksUncounted":0,"coins":2,"dmg":153994,"bossDmg":0,"heal":27484,"deaths":13,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_2_08_a",1,null,0,0,8,2,22869,12843,196,1,1],
["p1",2,"op","chess_char_2_17_a",1,null,0,0,6,1,4786,9174,1754,1,2],
["p1",3,"op","chess_char_2_18_a",0,null,0,0,9,1,38597,9313,225,15,1],
["p1",4,"op","chess_char_2_07_a",1,null,0,0,10,1,7917,5223,0,9,1],
["p1",1,"op","chess_char_2_08_a",1,null,0,0,8,1,15722,12062,196,1,1],
["p1",2,"op","chess_char_2_17_a",1,null,0,0,6,1,2051,9174,1754,1,2],
["p1",3,"op","chess_char_2_18_a",0,null,0,0,9,1,37747,9173,225,15,1],
["p1",4,"op","chess_char_2_07_a",1,null,0,0,10,2,9245,7305,0,11,1],
["p1",5,"op","chess_char_2_09_a",1,null,1746.49,1,55,0,9315,6537,2148,22,1],
["p1",6,"op","chess_char_2_11_a",1,null,0,0,12,0,20294,8657,198,26,1],
["p1",7,"op","chess_char_2_13_a",1,null,3434.92,1,57,1,11476,4121,66,21,1],
["p1",8,"op","chess_char_2_16_a",1,null,3408.27,1,54,1,5941,5437,204,16,0],
["p1",9,"op","chess_char_2_12_a",1,null,0,0,52,5,14244,6161,0,39,2],
["p1",10,"op","chess_char_2_06_a",0,null,0,0,4,0,0,3387,14333,24,7],
["p1",11,"op","chess_char_2_10_a",1,null,0,0,5,1,10514,2727,0,48,1],
["p1",9,"op","chess_char_2_12_a",1,null,0,0,52,3,10542,5842,0,30,2],
["p1",10,"op","chess_char_2_06_a",0,null,0,0,4,0,0,3707,15770,25,8],
["p1",11,"op","chess_char_2_10_a",1,null,0,0,5,5,25511,3002,0,54,1],
["p1",12,"op","chess_char_2_14_a",1,null,2344.5,1,56,0,0,4885,6856,11,0],
["-","~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],
@@ -224,26 +224,26 @@
["p1","~1","token","token_10022_kazema_shadow",null,null,0,0,26,0,6149,1883,67,6,null]
],
"enemies": {
"enemy_1001_bigbo": [1,0,1,7938,4614],
"enemy_1006_shield": [1,1,0,3550,10368],
"enemy_10118_ymgprc": [1,0,1,4428,8423],
"enemy_1041_lazerd_2": [1,0,1,7127,6898],
"enemy_1118_lidbox_2": [1,1,0,5324,16416],
"enemy_1158_divman": [18,12,6,3422,76649],
"enemy_1160_hvyslr": [3,1,2,4530,21681],
"enemy_1161_tidmag": [3,1,1,9528,12468],
"enemy_1169_duphlx_2": [1,0,1,782,6470],
"enemy_1200_msfjin_2": [1,0,1,0,26],
"enemy_1249_lysdb_2": [1,1,0,918,10368],
"enemy_1299_ymkilr": [1,0,1,315,3197],
"enemy_1389_winbab_2": [1,0,1,3741,1470],
"enemy_1504_cqbw": [1,0,1,3002,700],
"enemy_1001_bigbo": [1,0,1,7938,4936],
"enemy_1006_shield": [1,1,0,3684,10368],
"enemy_10118_ymgprc": [1,0,1,5228,8757],
"enemy_1041_lazerd_2": [1,0,1,7858,7393],
"enemy_1118_lidbox_2": [1,1,0,4540,16416],
"enemy_1158_divman": [18,12,6,4182,73679],
"enemy_1160_hvyslr": [3,0,3,4698,21849],
"enemy_1161_tidmag": [3,1,1,9394,12608],
"enemy_1169_duphlx_2": [1,1,0,1019,10368],
"enemy_1200_msfjin_2": [1,0,1,0,27],
"enemy_1249_lysdb_2": [1,1,0,715,10368],
"enemy_1299_ymkilr": [1,0,1,94,2388],
"enemy_1389_winbab_2": [1,0,1,4248,1540],
"enemy_1504_cqbw": [1,0,1,2728,1508],
"enemy_2009_csaudc": [1,0,1,0,490]
},
"hooks": [1,57,3300,453,453,1553,1588,2011,31,49,18,18,0,11073,45,31,36,18,1,38,0,3,0],
"events": {"atk":545,"bounty":1,"deploy":18,"die":31,"dmg":1480,"engage":11,"fx":46,"heal":98,"leak":18,"skill":36,"spawn":52,"status":170},
"fx": {"aoe":4,"burst":3,"camouflage":2,"counter":22,"dodge":3,"dollEnd":1,"explode":1,"liberate":1,"overload":1,"phase":1,"shield":2,"shieldBreak":1,"substitute":1,"summon":1,"takeoff":1,"telegraph":1},
"snaps": "a449ec9d ed6b281b add3999f 9cbb2a3b 3709fe31 5c518566 6e2c9aa2 15584c52 8014c8a1 a887c998 08718b49"
"hooks": [1,57,3300,449,449,1580,1615,2014,31,49,19,19,0,11564,42,35,36,18,1,35,0,3,0],
"events": {"atk":545,"bounty":1,"deploy":18,"die":31,"dmg":1515,"engage":11,"fx":88,"heal":102,"leak":18,"skill":38,"spawn":52,"status":171},
"fx": {"aoe":4,"burst":3,"camouflage":2,"counter":13,"dodge":3,"dollEnd":1,"drone":51,"explode":1,"liberate":1,"overload":1,"phase":1,"shield":2,"shieldBreak":1,"substitute":1,"summon":1,"takeoff":1,"telegraph":1},
"snaps": "a449ec9d 9efd1fe4 2b683000 9804efae 584919ee 6cd11974 ce1ce9bf 48fcef8a d43fb82c 7fd7cfcc 947d06b4"
},
"roster-005": {
"about": "pass 0 band 3: chess_char_2_07_b chess_char_2_08_b chess_char_2_09_b chess_char_2_11_b chess_char_2_12_b chess_char_2_19_a chess_char_2_01_b chess_char_2_02_b chess_char_2_04_b chess_char_2_05_b chess_char_2_06_b chess_char_2_10_b token_10000_silent_healrb",
@@ -254,51 +254,51 @@
"round": 6,
"seed": 4076349243,
"waveId": "act1autochess_06",
"time": 130.93,
"ticks": 3928,
"time": 129.2,
"ticks": 3876,
"reason": "cleared",
"killed": 84,
"total": 84,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 242,
"rngDraws": 154,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":84,"total":84,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":12,"dmg":310855,"bossDmg":0,"heal":28997,"deaths":0,"layerGains":{}}},
"players": {"p1":{"killed":84,"total":84,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":12,"dmg":314037,"bossDmg":0,"heal":29870,"deaths":0,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_2_07_b",1,"uniequip_002_ghost",2983.9,1,2,0,0,1196,767,0,0],
["p1",2,"op","chess_char_2_08_b",1,"uniequip_002_bubble",3710.3,1,4,0,28,425,0,0,1],
["p1",3,"op","chess_char_2_09_b",1,"uniequip_002_humus",2346.3,1,6,26,80476,0,0,55,2],
["p1",4,"op","chess_char_2_11_b",1,"uniequip_002_kazema",2435.4,1,8,18,96921,10785,0,85,3],
["p1",5,"op","chess_char_2_12_b",1,"uniequip_002_gravel",1773.2,1,10,0,7308,6899,0,119,1],
["p1",6,"op","chess_char_2_19_a",1,null,1123.32,1,11,1,16246,1195,209,26,3],
["p1",7,"op","chess_char_2_01_b",1,"uniequip_002_excu",2360.6,1,12,20,35604,4571,0,22,1],
["p1",8,"op","chess_char_2_02_b",1,"uniequip_002_silent",1775.4,1,1,0,0,0,6621,26,5],
["p1",9,"op","chess_char_2_04_b",1,"uniequip_002_grabds",1397,1,3,6,33560,2087,0,49,3],
["p1",10,"op","chess_char_2_05_b",1,"uniequip_002_harold",2168.32,1,5,0,0,405,9833,37,2],
["p1",11,"op","chess_char_2_06_b",0,"uniequip_002_papyrs",1802.9,1,7,0,0,442,8811,25,12],
["p1",12,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,9,8,40712,993,0,102,2],
["p1",13,"token","token_10000_silent_healrb",null,null,1000,0,102,0,0,0,2756,27,null]
["p1",1,"op","chess_char_2_07_b",1,"uniequip_002_ghost",2983.9,1,2,0,0,1594,1165,0,0],
["p1",2,"op","chess_char_2_08_b",1,"uniequip_002_bubble",3660.5,1,4,0,433,851,0,0,1],
["p1",3,"op","chess_char_2_09_b",1,"uniequip_002_humus",2346.3,1,6,15,47466,0,0,36,2],
["p1",4,"op","chess_char_2_11_b",1,"uniequip_002_kazema",2435.4,1,8,20,91888,11533,0,81,3],
["p1",5,"op","chess_char_2_12_b",1,"uniequip_002_gravel",1749.32,1,10,3,11853,4324,0,116,1],
["p1",6,"op","chess_char_2_19_a",1,null,1123.32,1,11,1,16246,1579,175,26,3],
["p1",7,"op","chess_char_2_01_b",1,"uniequip_002_excu",2360.6,1,12,20,35604,5312,0,22,1],
["p1",8,"op","chess_char_2_02_b",1,"uniequip_002_silent",1775.4,1,1,0,0,0,8358,30,5],
["p1",9,"op","chess_char_2_04_b",1,"uniequip_002_grabds",1397,1,3,3,24871,2782,0,34,3],
["p1",10,"op","chess_char_2_05_b",1,"uniequip_002_harold",2168.32,1,5,0,0,0,9655,40,2],
["p1",11,"op","chess_char_2_06_b",0,"uniequip_002_papyrs",1802.9,1,7,0,0,900,7945,30,14],
["p1",12,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,9,14,85675,1068,0,100,2],
["p1",13,"token","token_10000_silent_healrb",null,null,1000,0,102,0,0,0,2572,28,null]
],
"enemies": {
"enemy_10027_vtsk": [1,1,0,6722,24000],
"enemy_10027_vtsk": [1,1,0,2664,24000],
"enemy_1006_shield_2": [1,1,0,0,8000],
"enemy_10122_uacann_2": [1,1,0,4915,8000],
"enemy_10122_uacann_2": [1,1,0,5658,8000],
"enemy_1042_frostd": [1,1,0,0,5200],
"enemy_1119_vofsd": [1,1,0,0,8800],
"enemy_1170_dushld": [1,1,0,168,5600],
"enemy_1170_dushld": [1,1,0,152,5600],
"enemy_1202_msfzhi": [1,1,0,0,2],
"enemy_1249_lysdb_2": [15,15,0,126,72000],
"enemy_1251_lysyta": [52,52,0,25,114400],
"enemy_1299_ymkilr_2": [1,1,0,1145,8800],
"enemy_1328_cbjedi": [6,6,0,3443,48000],
"enemy_1402_tgshd_2": [1,1,0,688,10400],
"enemy_1509_mousek": [1,1,0,6716,17600],
"enemy_2010_csdcr": [1,1,0,1395,9600]
"enemy_1249_lysdb_2": [15,15,0,294,72000],
"enemy_1251_lysyta": [52,52,0,87,114400],
"enemy_1299_ymkilr_2": [1,1,0,1073,8800],
"enemy_1328_cbjedi": [6,6,0,5191,48000],
"enemy_1402_tgshd_2": [1,1,0,467,10400],
"enemy_1509_mousek": [1,1,0,9419,17600],
"enemy_2010_csdcr": [1,1,0,1286,9600]
},
"hooks": [1,102,3928,648,648,1605,1597,591,84,90,35,34,0,26917,119,48,84,0,1,84,0,0,0],
"events": {"atk":811,"bounty":6,"deploy":18,"die":90,"dmg":1548,"engage":7,"fx":70,"heal":122,"skill":69,"spawn":97,"status":390},
"fx": {"counter":1,"explode":4,"expose":16,"overload":2,"phase":1,"shield":7,"shieldBreak":16,"sleep":6,"summon":5,"telegraph":5,"zone":7},
"snaps": "ef546b03 cddbeb04 da6dbc8a 56061bd0 9a4246e7 7f399d61 56ffdcc6 f5bab249 7ae4b514 df4fc089 89f962a3 532fb4ac 43ca710d"
"hooks": [1,102,3876,625,625,1557,1545,736,84,90,37,35,0,26489,78,49,84,0,1,84,0,0,0],
"events": {"atk":742,"bounty":6,"deploy":18,"die":90,"dmg":1494,"engage":7,"fx":206,"heal":139,"skill":72,"spawn":97,"status":346},
"fx": {"counter":2,"drone":76,"explode":5,"expose":69,"overload":2,"palsy":1,"phase":1,"shield":10,"shieldBreak":16,"sleep":4,"summon":5,"telegraph":6,"zone":9},
"snaps": "3f12976d 5421d3a4 c29a6ca8 c18dd8d7 2e7a7bca 3d8c183b 1f9f5820 6a37dacf 5c0db98b a74839f5 57a5a4fe 8d1f877a 55d1f007"
},
"roster-006": {
"about": "pass 0 band 3: chess_char_2_17_b chess_char_2_18_b chess_char_3_06_a chess_char_2_13_b chess_char_2_16_b chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_2_14_b chess_char_2_19_b chess_char_3_01_a",
@@ -384,56 +384,55 @@
"time": 140,
"ticks": 4200,
"reason": "timeout",
"killed": 145,
"killed": 132,
"total": 71,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 61,
"rngDraws": 63,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":145,"total":71,"perfect":false,"leaks":41,"leaksUncounted":1,"coins":6,"dmg":247377,"bossDmg":0,"heal":1028,"deaths":10,"layerGains":{}}},
"players": {"p1":{"killed":132,"total":71,"perfect":false,"leaks":41,"leaksUncounted":1,"coins":4,"dmg":234357,"bossDmg":0,"heal":971,"deaths":11,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_3_12_a",2,null,2567.4,1,207,0,3677,2567,353,11,1],
["p1",2,"op","chess_char_3_16_a",1,null,0,0,6,2,5588,3419,675,19,1],
["p1",3,"op","chess_char_3_18_a",2,null,1629.1,1,212,15,14973,3258,0,31,1],
["p1",4,"op","chess_char_3_08_a",1,null,1519.4,1,4,16,22610,234,0,18,2],
["p1",5,"op","chess_char_3_09_a",1,null,1004.34,1,7,17,22708,389,0,61,2],
["p1",6,"op","chess_char_3_10_a",1,null,0,0,10,21,21857,1815,0,36,2],
["p1",7,"op","chess_char_3_11_a",1,null,1447.6,1,211,10,10520,1448,0,18,3],
["p1",8,"op","chess_char_3_13_a",1,null,1170.4,1,201,3,5697,1170,0,21,9],
["p1",9,"op","chess_char_3_14_a",1,null,59.11,1,5,24,21888,1317,0,55,2],
["p1",10,"op","chess_char_3_17_a",1,null,0,0,8,14,61687,2471,0,83,5],
["p1",11,"op","chess_char_3_19_a",2,null,900.9,1,162,16,38143,2265,0,97,2],
["p1",12,"op","chess_char_3_20_a",1,null,1233.1,1,208,3,6055,1233,0,39,1],
["p1",13,"token","token_10028_vigil_wolf",null,null,149.52,0,110,0,2738,1729,0,11,null],
["p1",1,"op","chess_char_3_12_a",2,null,2567.4,1,194,4,3535,2567,394,14,1],
["p1",2,"op","chess_char_3_16_a",1,null,2390.3,1,200,0,501,3361,577,1,1],
["p1",3,"op","chess_char_3_18_a",2,null,1629.1,1,199,10,8958,3258,0,25,1],
["p1",4,"op","chess_char_3_08_a",1,null,1519.4,1,4,18,32568,234,0,19,2],
["p1",5,"op","chess_char_3_09_a",1,null,931.22,1,7,12,24494,462,0,63,2],
["p1",6,"op","chess_char_3_10_a",1,null,0,0,10,11,12119,1815,0,22,2],
["p1",7,"op","chess_char_3_11_a",1,null,1447.6,1,198,11,8446,1448,0,17,3],
["p1",8,"op","chess_char_3_13_a",1,null,1170.4,1,188,9,8936,1170,0,22,9],
["p1",9,"op","chess_char_3_14_a",1,null,0,0,5,22,20517,1376,0,47,2],
["p1",10,"op","chess_char_3_17_a",1,null,0,0,8,9,50397,2471,0,69,4],
["p1",11,"op","chess_char_3_19_a",2,null,900.9,1,148,18,37884,2265,0,95,2],
["p1",12,"op","chess_char_3_20_a",1,null,1233.1,1,195,4,9204,1233,0,37,1],
["p1",13,"token","token_10028_vigil_wolf",null,null,126.29,0,110,1,3993,1793,0,12,null],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
["p1","~1","token","token_10028_vigil_wolf",null,null,405.92,1,163,4,9234,2143,0,28,null]
["p1","~1","token","token_10028_vigil_wolf",null,null,405.92,1,149,3,12804,1971,0,31,null]
],
"enemies": {
"enemy_10029_vtshld": [1,0,0,0,0],
"enemy_10073_mpcar": [1,1,0,0,2304],
"enemy_10127_rkmbst_2": [1,1,0,4010,31680],
"enemy_1045_hammer": [1,0,1,459,7964],
"enemy_1121_lifbos_2": [1,0,1,1126,5398],
"enemy_1172_dugago": [1,0,1,266,7442],
"enemy_1195_sfyin": [36,33,3,505,79752],
"enemy_1195_sfyin_2": [15,12,3,2360,47819],
"enemy_1196_msfyin": [66,60,6,0,125],
"enemy_1196_msfyin_2": [24,12,12,0,45],
"enemy_1197_sfshu": [9,7,2,409,23009],
"enemy_1198_msfshu": [21,15,6,0,47],
"enemy_1203_sfhu": [1,1,0,4220,7488],
"enemy_1204_msfhu": [4,0,4,0,4],
"enemy_1252_lysytb_2": [1,1,0,1645,10368],
"enemy_10127_rkmbst_2": [1,1,0,4772,31680],
"enemy_1045_hammer": [1,1,0,507,11520],
"enemy_1121_lifbos_2": [1,0,1,2242,9778],
"enemy_1172_dugago": [1,0,1,80,6208],
"enemy_1195_sfyin": [36,30,6,639,77041],
"enemy_1195_sfyin_2": [15,9,6,1280,42541],
"enemy_1196_msfyin": [60,52,8,0,108],
"enemy_1196_msfyin_2": [18,11,7,0,36],
"enemy_1197_sfshu": [9,8,1,539,23040],
"enemy_1198_msfshu": [24,17,7,0,56],
"enemy_1203_sfhu": [1,0,1,5613,4245],
"enemy_1252_lysytb_2": [1,0,1,1965,4970],
"enemy_1305_mhslim": [1,1,0,223,1382],
"enemy_1407_hummbd": [1,1,0,140,5184],
"enemy_1512_mcmstr": [1,0,1,9371,16497],
"enemy_2021_syfish": [1,0,1,0,868]
"enemy_1512_mcmstr": [1,0,1,7426,12093],
"enemy_2021_syfish": [1,0,1,0,2170]
},
"hooks": [1,211,4200,677,677,976,981,425,156,198,31,30,0,20874,14,45,187,41,1,169,0,0,0],
"events": {"atk":837,"bounty":3,"deploy":22,"die":157,"dmg":970,"engage":14,"fx":138,"heal":1,"leak":41,"skill":61,"spawn":203,"status":63},
"fx": {"aoe":2,"camouflage":1,"displace":19,"dp":2,"explode":19,"expose":1,"phase":1,"pull":19,"revive":2,"sp":1,"strike":3,"summon":55,"volley":8,"wolfShadow":2,"wolfShadowLost":3},
"snaps": "17399d51 bc366431 21fe510b f839da24 d1fe4d4c c4152be4 8d5ba672 753767a2 28635406 698c23c9 f112a1ff 42bc52f5 fe7d0a4b b52a36c1"
"hooks": [1,199,4200,599,599,926,931,363,144,186,30,29,0,18756,9,36,174,41,1,156,0,0,0],
"events": {"atk":745,"bounty":2,"deploy":23,"die":145,"dmg":919,"engage":14,"fx":147,"heal":1,"leak":41,"skill":59,"spawn":190,"status":42},
"fx": {"aoe":2,"camouflage":1,"displace":25,"dp":2,"explode":22,"expose":1,"liberate":1,"phase":1,"pull":25,"revive":2,"sp":1,"strike":3,"summon":49,"volley":7,"wolfShadow":2,"wolfShadowLost":3},
"snaps": "e84b5db6 9d40d50d 6409c429 2034ac7f 297068d0 3bed0634 f25a356f 97d8759d f98af162 a7eeb75e 408d18eb 9a2e0ddb 0dc77e62 856889bc"
},
"roster-008": {
"about": "pass 0 band 4: chess_char_3_06_b chess_char_3_12_b chess_char_3_02_b chess_char_3_03_b chess_char_3_04_b chess_char_3_05_b chess_char_3_21_a chess_char_3_01_b chess_char_3_08_b chess_char_3_09_b chess_char_3_10_b chess_char_3_11_b",
@@ -533,7 +532,7 @@
"total": 63,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 146,
"rngDraws": 131,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":171,"total":63,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":12,"dmg":279620,"bossDmg":0,"heal":0,"deaths":1,"layerGains":{}}},
"units": [
@@ -541,14 +540,14 @@
["p1",2,"op","chess_char_4_01_a",2,null,5020.11,1,6,0,0,0,0,0,0],
["p1",3,"op","chess_char_3_18_b",2,"uniequip_002_vulpis",3844.06,1,8,1,4,0,0,2,1],
["p1",4,"op","chess_char_4_04_a",1,null,2831.68,1,12,8,25880,518,0,125,4],
["p1",5,"op","chess_char_3_13_b",1,"uniequip_002_malist",2616.63,1,9,22,11643,0,0,69,32],
["p1",6,"op","chess_char_3_14_b",1,"uniequip_002_slbell",3073.35,1,10,7,3115,0,0,37,3],
["p1",7,"op","chess_char_3_17_b",1,"uniequip_002_shotst",4154.31,1,14,18,30514,1359,0,58,9],
["p1",5,"op","chess_char_3_13_b",1,"uniequip_002_malist",2616.63,1,9,28,7594,0,0,66,32],
["p1",6,"op","chess_char_3_14_b",1,"uniequip_002_slbell",3073.35,1,10,4,2466,0,0,30,3],
["p1",7,"op","chess_char_3_17_b",1,"uniequip_002_shotst",4154.31,1,14,20,35570,1359,0,56,9],
["p1",8,"op","chess_char_3_19_b",2,"uniequip_002_vigil",3421.59,1,4,0,1,0,0,1,4],
["p1",9,"op","chess_char_3_20_b",1,"uniequip_002_kjera",2759.35,1,7,0,2,0,0,1,1],
["p1",10,"op","chess_char_3_21_b",2,"uniequip_002_archet",3025.77,1,11,81,136300,0,0,188,5],
["p1",11,"op","chess_char_4_02_a",2,null,2717.48,1,166,16,58984,2717,0,36,1],
["p1",12,"op","chess_char_4_06_a",1,null,2371.14,1,13,18,12337,0,0,75,2],
["p1",11,"op","chess_char_4_02_a",2,null,2717.48,1,166,14,58983,2717,0,36,1],
["p1",12,"op","chess_char_4_06_a",1,null,2371.14,1,13,15,11980,0,0,71,2],
["p1",13,"token","token_10028_vigil_wolf",null,null,1026,1,5,0,839,1920,0,6,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]
@@ -573,10 +572,10 @@
"enemy_1513_dekght_2": [1,1,0,5803,43200],
"enemy_2034_sythef": [1,1,0,0,8640]
},
"hooks": [1,187,4616,606,606,1080,1064,0,172,172,62,60,0,20682,90,5,171,0,1,174,0,0,0],
"events": {"atk":733,"bounty":6,"deploy":14,"die":172,"dmg":1064,"engage":11,"fx":165,"skill":122,"spawn":186,"status":205},
"fx": {"camouflage":1,"crit":24,"displace":23,"dp":4,"explode":3,"phase":1,"ripple":8,"shadowWeave":26,"shield":2,"stealth":4,"summon":51,"telegraph":3,"volley":9,"wolfShadow":3,"wolfShadowLost":2,"zone":1},
"snaps": "01350beb 8f7744b2 43f13b56 f68a04e7 1d0741e4 7c08a4ae 9834f8a4 8799cf88 a348e60f ddf80120 3446f99a 80b90afd 38f6a8b2 8aa08e8e c1ed526b a0c06d83"
"hooks": [1,187,4616,590,590,1083,1067,0,172,172,62,60,0,20683,79,5,171,0,1,174,0,0,0],
"events": {"atk":714,"bounty":6,"deploy":14,"die":172,"dmg":1067,"engage":11,"fx":163,"skill":122,"spawn":186,"status":202},
"fx": {"camouflage":1,"crit":21,"displace":24,"dp":4,"explode":3,"phase":1,"ripple":8,"shadowWeave":26,"shield":2,"stealth":4,"summon":51,"telegraph":3,"volley":9,"wolfShadow":3,"wolfShadowLost":2,"zone":1},
"snaps": "01350beb 4f981949 2a43b546 3d68ce51 18790043 6dd248ea 6618c5de 5b83238d ddb0a718 3f31cdcb 819adf23 5eadc00d 672cd300 0dbb81a4 84d48721 11f06591"
},
"roster-010": {
"about": "pass 0 band 4: chess_char_4_17_a chess_char_4_18_a chess_char_4_11_a chess_char_4_19_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_4_10_a chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a chess_char_4_20_a token_10041_cathy_catsld token_10041_cathy_catsld",
@@ -1073,14 +1072,14 @@
"round": 12,
"seed": 2919027026,
"waveId": "act1autochess_h05",
"time": 194.57,
"ticks": 5837,
"time": 184.57,
"ticks": 5537,
"reason": "cleared",
"killed": 174,
"total": 171,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 303,
"rngDraws": 380,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {
@@ -1092,49 +1091,49 @@
"coins": 12,
"dmg": 642533,
"bossDmg": 0,
"heal": 34458,
"deaths": 5,
"heal": 35267,
"deaths": 3,
"layerGains": {"victoriaShip":10}
}
},
"units": [
["p1",1,"op","chess_char_6_15_a",2,null,2154.9,1,3,1,3664,0,0,5,1],
["p1",2,"op","chess_char_6_19_a",2,null,2384.8,1,6,3,15668,0,0,1,3],
["p1",3,"op","chess_char_6_07_a",2,null,2409.89,1,9,19,39055,10,0,21,2],
["p1",4,"op","chess_char_6_17_a",2,null,2464.95,1,12,10,75209,14370,0,54,2],
["p1",5,"op","chess_char_6_08_a",2,null,1497.1,1,1,4,8827,0,2411,19,2],
["p1",6,"op","chess_char_6_09_a",0,null,1750.32,1,4,0,7549,100,0,13,13],
["p1",7,"op","chess_char_6_11_a",2,null,1515.66,1,5,1,13130,1264,0,16,2],
["p1",8,"op","chess_char_6_12_a",1,null,2027.63,1,2,27,48431,62,0,28,3],
["p1",9,"op","chess_char_6_13_a",1,null,1778.48,1,8,82,361277,4157,2939,228,4],
["p1",10,"op","chess_char_6_14_a",2,null,0,0,10,0,0,8806,29108,49,2],
["p1",11,"op","chess_char_6_16_a",2,null,0,0,174,19,49605,10660,0,84,1],
["p1",12,"op","chess_char_6_18_a",2,null,0,0,140,8,20117,2512,0,18,1],
["p1","~1","token","token_10040_siege2_vlion",null,null,4000,0,62,0,0,0,0,0,null],
["p1","~2","token","token_10040_siege2_vlion",null,null,3969.68,0,155,0,0,30,0,0,null]
["p1",1,"op","chess_char_6_15_a",2,null,2154.9,1,3,0,0,0,0,0,0],
["p1",2,"op","chess_char_6_19_a",2,null,2384.8,1,6,1,4018,0,0,0,2],
["p1",3,"op","chess_char_6_07_a",2,null,2420,1,9,9,34667,0,0,17,2],
["p1",4,"op","chess_char_6_17_a",2,null,2967.8,1,12,15,77190,13804,0,53,2],
["p1",5,"op","chess_char_6_08_a",2,null,1497.1,1,1,8,27234,0,1891,16,2],
["p1",6,"op","chess_char_6_09_a",0,null,1750.32,1,4,0,8344,0,0,11,11],
["p1",7,"op","chess_char_6_11_a",2,null,1634.6,1,5,1,11919,669,0,15,2],
["p1",8,"op","chess_char_6_12_a",1,null,2027.63,1,2,14,28292,0,0,16,2],
["p1",9,"op","chess_char_6_13_a",1,null,1797.4,1,8,92,331059,3888,2571,215,4],
["p1",10,"op","chess_char_6_14_a",2,null,1725.9,1,10,0,0,7372,30805,60,2],
["p1",11,"op","chess_char_6_16_a",2,null,1249.6,1,185,25,76460,10878,0,109,2],
["p1",12,"op","chess_char_6_18_a",2,null,0,0,170,9,43349,2512,0,14,1],
["p1","~1","token","token_10040_siege2_vlion",null,null,4000,0,77,0,0,0,0,0,null],
["p1","~2","token","token_10040_siege2_vlion",null,null,3969.68,0,166,0,0,30,0,0,null]
],
"enemies": {
"enemy_10054_cjhot": [1,1,0,117,14400],
"enemy_10099_crvln": [1,1,0,0,14400],
"enemy_1009_lurker": [72,72,0,2711,152064],
"enemy_1019_jshoot_2": [51,51,0,12723,132192],
"enemy_1009_lurker": [72,72,0,2809,152064],
"enemy_1019_jshoot_2": [51,51,0,12342,132192],
"enemy_1021_bslime": [1,1,0,0,2362],
"enemy_1081_sotisd": [1,1,0,314,14400],
"enemy_1165_duhond_2": [1,1,0,404,3840],
"enemy_1081_sotisd": [1,1,0,0,14400],
"enemy_1165_duhond_2": [1,1,0,0,3840],
"enemy_1197_sfshu": [1,1,0,0,2400],
"enemy_1198_msfshu": [3,3,0,0,9],
"enemy_1210_msfden": [1,1,0,0,34],
"enemy_1275_dwlock_2": [1,1,0,1756,13440],
"enemy_1275_dwlock_2": [1,1,0,1672,13440],
"enemy_1355_mrfly_2": [1,1,0,0,9600],
"enemy_1404_msnip": [36,36,0,17427,207360],
"enemy_1438_dspred": [1,1,0,762,12672],
"enemy_1404_msnip": [36,36,0,17737,207360],
"enemy_1438_dspred": [1,1,0,995,12672],
"enemy_2002_bearmi": [1,1,0,0,28800],
"enemy_9007_acelem": [1,1,0,2087,34560]
"enemy_9007_acelem": [1,1,0,0,34560]
},
"hooks": [1,190,5837,826,826,1189,1414,263,179,181,36,34,163,36192,1944,179,174,0,1,185,4,0,0],
"events": {"atk":859,"bounty":6,"deploy":16,"die":181,"dmg":1135,"engage":11,"fx":226,"heal":76,"layer":4,"skill":70,"spawn":188,"status":624},
"fx": {"airstrike":42,"beam":8,"cleanse":5,"displace":2,"dp":2,"drone":76,"droneLock":23,"drones":2,"emergency":11,"explode":4,"finale":3,"garrison":4,"link":15,"scorchBurst":6,"slash":9,"steal":4,"summon":3,"sunBurst":2,"talent":4,"undying":1},
"snaps": "3b13beb4 5d631935 212d5d02 06336506 bf36fcf3 cd59850b a585daf6 82f0f956 b026d1d5 fe426efe 3159de65 534a9037 7790a1a4 b6f77327 d8ebf4d6 415a3425 ae278f3c 3b5c8de7 1728e80e 60ffd5b6"
"hooks": [1,190,5537,795,795,1305,1519,267,177,179,32,28,153,29773,2210,176,174,0,1,178,4,0,0],
"events": {"atk":836,"bounty":6,"deploy":16,"die":179,"dmg":1255,"engage":9,"fx":297,"heal":87,"layer":4,"skill":60,"spawn":188,"status":698},
"fx": {"airstrike":39,"beam":2,"cleanse":6,"dp":2,"drone":125,"droneLock":46,"drones":2,"emergency":8,"explode":3,"finale":2,"garrison":4,"link":26,"scorchBurst":16,"slash":3,"steal":4,"summon":3,"sunBurst":2,"talent":3,"undying":1},
"snaps": "3b13beb4 fbd58f36 04c6b7cd 66aacd37 a19c1011 971d123a 178d654b 0b59f14a 90254fdf 02ff4239 47baf4d7 ed36412e 36a3c0cd 17058bc8 ac4afc9c 822b3838 899b7db4 5ece48e6 fcd4587e"
},
"roster-018": {
"about": "pass 0 band 7: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_20_a chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b chess_char_6_12_b token_10017_skadi2_dedant token_10030_mlyss_wtrman",
@@ -1228,14 +1227,14 @@
"round": 13,
"seed": 116466041,
"waveId": "act1autochess_h06",
"time": 198.4,
"ticks": 5952,
"time": 201.5,
"ticks": 6045,
"reason": "cleared",
"killed": 108,
"total": 108,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 799,
"rngDraws": 713,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {
@@ -1247,27 +1246,27 @@
"coins": 12,
"dmg": 3002858,
"bossDmg": 0,
"heal": 120911,
"deaths": 1,
"heal": 141003,
"deaths": 0,
"layerGains": {"deputShip":12}
}
},
"units": [
["p1",1,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",5829.12,1,109,20,844569,37461,0,164,3],
["p1",2,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",6696.14,1,9,4,208141,778,0,0,3],
["p1",3,"op","chess_char_5_01_b",0,"uniequip_003_excu2",6277.48,1,10,3,44754,620,559,19,1],
["p1",4,"op","chess_char_5_05_b",0,"uniequip_003_ulpia",14967.7,1,7,0,0,0,0,0,0],
["p1",5,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",11659.29,1,24,22,448709,42068,0,104,3],
["p1",6,"op","chess_char_6_13_b",1,"uniequip_002_angel2",5253.09,1,2,27,615865,11539,1307,58,2],
["p1",7,"op","chess_char_6_14_b",2,"uniequip_002_lumen",4595.58,1,3,0,0,0,7483,75,1],
["p1",8,"op","chess_char_6_16_b",2,"uniequip_002_halo2",3482.38,1,4,6,130609,0,0,51,2],
["p1",9,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",3729.22,1,8,23,586559,0,0,69,3],
["p1",10,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",3822.83,1,12,0,0,35427,111562,58,2],
["p1",1,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",7324.46,1,14,31,1030104,56904,0,208,3],
["p1",2,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",6696.14,1,9,5,209587,1778,0,4,3],
["p1",3,"op","chess_char_5_01_b",0,"uniequip_003_excu2",5849.22,1,10,0,4145,620,100,2,0],
["p1",4,"op","chess_char_5_05_b",0,"uniequip_003_ulpia",14967.7,1,7,0,0,1000,100,0,0],
["p1",5,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",11610.89,1,24,26,448884,38238,0,107,3],
["p1",6,"op","chess_char_6_13_b",1,"uniequip_002_angel2",5306.7,1,2,20,500289,11700,867,46,2],
["p1",7,"op","chess_char_6_14_b",2,"uniequip_002_lumen",4595.58,1,3,0,0,0,9705,77,1],
["p1",8,"op","chess_char_6_16_b",2,"uniequip_002_halo2",3482.38,1,4,5,105327,0,0,41,2],
["p1",9,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",3729.22,1,8,18,608507,1000,0,49,3],
["p1",10,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",3822.83,1,12,0,0,29155,130232,59,2],
["p1",11,"op","chess_char_5_02_b",0,"none",3240.38,1,1,0,0,0,0,0,0],
["p1",12,"op","chess_char_5_03_b",0,"uniequip_003_blaze2",3755.84,1,5,2,101011,0,0,47,8],
["p1",12,"op","chess_char_5_03_b",0,"uniequip_003_blaze2",3755.84,1,5,3,75133,0,0,38,6],
["p1","~1","token","token_10019_nearl2_sword",null,null,6491.98,0,27,0,0,1788,0,0,null],
["p1","~2","token","token_10019_nearl2_sword",null,null,2685.8,0,79,1,6139,5439,0,12,null],
["p1","~3","token","token_10019_nearl2_sword",null,null,4048.27,0,114,0,16501,2552,0,23,null]
["p1","~2","token","token_10019_nearl2_sword",null,null,7055.48,0,79,0,10436,1069,0,0,null],
["p1","~3","token","token_10019_nearl2_sword",null,null,0,0,113,0,10445,6696,0,17,null]
],
"enemies": {
"enemy_1005_yokai_2": [1,1,0,51,4443],
@@ -1276,19 +1275,19 @@
"enemy_1112_emppnt": [1,1,0,0,37265],
"enemy_1166_dusbr_2": [1,1,0,30,12613],
"enemy_1198_msfshu": [1,1,0,0,9],
"enemy_1229_darmy": [28,28,0,6742,337106],
"enemy_1229_darmy_2": [57,57,0,19313,898662],
"enemy_1229_darmy": [28,28,0,5276,337106],
"enemy_1229_darmy_2": [57,57,0,39879,898662],
"enemy_1283_sgkill_2": [1,1,0,14516,51598],
"enemy_1367_dseed": [1,1,0,0,8600],
"enemy_1439_dslntf_2": [1,1,0,714,94596],
"enemy_2003_rockman": [1,1,0,4708,214991],
"enemy_9007_acelem": [12,12,0,48298,1238347],
"enemy_9009_acfort": [1,1,0,3424,68797]
"enemy_1439_dslntf_2": [1,1,0,4779,94596],
"enemy_2003_rockman": [1,1,0,2561,214991],
"enemy_9007_acelem": [12,12,0,42625,1238347],
"enemy_9009_acfort": [1,1,0,3083,68797]
},
"hooks": [1,126,5952,788,788,2611,2922,589,109,114,28,25,63,20416,1610,71,108,0,1,109,2,0,0],
"events": {"atk":1174,"bounty":6,"deploy":18,"die":114,"dmg":2717,"engage":9,"fx":536,"heal":448,"layer":2,"skill":53,"spawn":123,"status":437},
"fx": {"airstrike":22,"aoe":8,"beam":21,"blink":2,"bombard":10,"bombardShell":10,"displace":4,"drone":340,"droneLock":66,"drones":3,"extraAttack":4,"finale":3,"garrison":2,"garrisonGrant":1,"link":10,"radiantSword":3,"slash":18,"steal":2,"summon":3,"sunBurst":1,"talent":3},
"snaps": "3bc002dc 99924baa b4e5485c 4572877f 2e5abf56 ab533660 a2ef339a cfda0a3e 020dd7c4 f8c62c5b dd33c3da 8bdef7dc f03c9d9f f07effcc ee5b393f d2434482 6bb9c0a2 b2af81f2 c73f213f 82f93c1a"
"hooks": [1,125,6045,786,786,2671,3052,601,109,113,25,22,44,20814,1503,81,108,0,1,109,2,7,0],
"events": {"atk":1169,"bounty":6,"deploy":17,"die":113,"dmg":2844,"engage":9,"fx":481,"heal":493,"layer":2,"skill":47,"spawn":123,"status":439},
"fx": {"airstrike":11,"aoe":6,"beam":21,"blink":2,"bombard":9,"bombardShell":9,"burst":7,"cleanse":2,"displace":1,"drone":322,"droneLock":46,"drones":3,"emergency":1,"finale":3,"garrison":2,"garrisonGrant":1,"link":9,"radiantSword":3,"slash":14,"steal":2,"summon":3,"sunBurst":1,"talent":3},
"snaps": "3bc002dc 99924baa b4e5485c 4572877f 6a8d1cfc c5efb851 8b3cac78 49a0d56a 4bb1fed0 8f35e29a d730c9f8 b3bb9793 42c227be 3da3064b 9efaf8e3 5d793662 bc3de13d 06963b3b 0c1c7cc5 c8a4ec7f 19ac67c5"
},
"roster-020": {
"about": "pass 1 band 1: chess_char_1_02_a chess_char_1_04_a chess_char_1_10_a chess_char_1_08_a chess_char_1_12_a chess_char_1_01_a chess_char_1_03_a chess_char_1_06_a chess_char_1_07_a chess_char_1_09_a chess_char_1_13_a chess_char_1_14_a",
@@ -1466,19 +1465,19 @@
"bossHpLeft": null,
"rngDraws": 0,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":30,"total":35,"perfect":false,"leaks":5,"leaksUncounted":0,"coins":4,"dmg":136373,"bossDmg":0,"heal":22671,"deaths":5,"layerGains":{}}},
"players": {"p1":{"killed":30,"total":35,"perfect":false,"leaks":5,"leaksUncounted":0,"coins":4,"dmg":137982,"bossDmg":0,"heal":22671,"deaths":5,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_2_08_a",0,null,2901.21,1,7,2,7059,4665,245,7,1],
["p1",1,"op","chess_char_2_08_a",0,null,2924.01,1,7,0,5995,4642,245,7,1],
["p1",2,"op","chess_char_2_17_a",0,null,0,0,11,3,18630,9018,4656,14,3],
["p1",3,"op","chess_char_2_18_a",1,null,0,0,12,3,27403,7323,853,15,2],
["p1",4,"op","chess_char_2_07_a",0,null,0,0,14,6,25542,8596,648,37,1],
["p1",5,"op","chess_char_2_09_a",0,null,2429.28,1,51,15,51931,5896,3467,37,7],
["p1",6,"op","chess_char_2_11_a",0,null,2294.79,1,8,0,401,804,0,1,0],
["p1",7,"op","chess_char_2_13_a",0,null,2720.14,1,9,1,4068,0,0,4,1],
["p1",7,"op","chess_char_2_13_a",0,null,2720.14,1,9,1,3462,0,0,4,1],
["p1",8,"op","chess_char_2_16_a",0,null,2699.04,1,6,0,0,0,0,0,0],
["p1",9,"op","chess_char_2_12_a",0,null,1909.37,1,10,0,0,0,0,0,1],
["p1",10,"op","chess_char_2_06_a",1,null,2170.08,1,4,0,0,0,4080,29,2],
["p1",11,"op","chess_char_2_10_a",0,null,1624.55,1,5,0,1337,0,0,14,1],
["p1",11,"op","chess_char_2_10_a",0,null,1624.55,1,5,2,4617,0,0,14,1],
["p1",12,"op","chess_char_2_14_a",0,null,0,0,13,0,0,2631,8722,20,2],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
@@ -1486,21 +1485,21 @@
],
"enemies": {
"enemy_10034_cnvsax": [1,1,0,2963,8000],
"enemy_1010_demon": [6,5,0,2155,32448],
"enemy_1010_demon_2": [3,2,0,2683,25412],
"enemy_1010_demon": [6,5,0,2132,33097],
"enemy_1010_demon_2": [3,2,0,2683,25724],
"enemy_10112_ymgds": [1,1,0,29,4000],
"enemy_1067_snslime": [1,1,0,243,2600],
"enemy_1071_dftman": [18,18,0,180,40320],
"enemy_1170_dushld": [1,1,0,1058,5600],
"enemy_1209_sfden_2": [1,0,0,8358,10211],
"enemy_1209_sfden_2": [1,0,0,8358,11205],
"enemy_1305_mhslim_2": [1,1,0,154,1440],
"enemy_1439_dslntf_2": [1,0,0,23,801],
"enemy_1439_dslntf_2": [1,0,0,23,456],
"enemy_2048_smgrd": [1,0,0,10100,5540]
},
"hooks": [1,51,3300,311,311,825,887,2944,35,35,21,19,0,11045,52,35,35,0,1,35,0,1,0],
"events": {"atk":530,"bounty":2,"deploy":13,"die":35,"dmg":818,"engage":8,"fx":63,"heal":104,"skill":40,"spawn":50,"status":170},
"hooks": [1,51,3300,310,310,835,897,2944,35,35,21,19,0,11045,51,34,35,0,1,35,0,1,0],
"events": {"atk":529,"bounty":2,"deploy":13,"die":35,"dmg":828,"engage":8,"fx":63,"heal":104,"skill":40,"spawn":50,"status":169},
"fx": {"beam":51,"buff":3,"burst":1,"explode":1,"takeoff":1,"telegraph":6},
"snaps": "4e123c7a 1c18fb29 65baefd8 722f6297 8d3f39b2 83ca6810 80adcb6e 00351f57 ba0bbdca 2f21221e 6373a098"
"snaps": "4e123c7a 1c18fb29 65baefd8 722f6297 8d3f39b2 83ca6810 80adcb6e 00351f57 ba0bbdca a9e6d320 601efd16"
},
"roster-024": {
"about": "pass 1 band 3: chess_char_2_07_b chess_char_2_08_b chess_char_2_09_b chess_char_2_11_b chess_char_2_12_b chess_char_2_19_a chess_char_2_01_b chess_char_2_02_b chess_char_2_04_b chess_char_2_05_b chess_char_2_06_b chess_char_2_10_b",
@@ -1514,47 +1513,47 @@
"time": 140,
"ticks": 4200,
"reason": "timeout",
"killed": 178,
"killed": 177,
"total": 67,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 11,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":178,"total":67,"perfect":false,"leaks":17,"leaksUncounted":0,"coins":6,"dmg":212892,"bossDmg":0,"heal":19786,"deaths":0,"layerGains":{}}},
"players": {"p1":{"killed":177,"total":67,"perfect":false,"leaks":18,"leaksUncounted":0,"coins":6,"dmg":212892,"bossDmg":0,"heal":19355,"deaths":0,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_2_07_b",0,"none",1039.77,1,3,65,87934,7833,5889,72,2],
["p1",1,"op","chess_char_2_07_b",0,"none",1135.91,1,3,58,72325,7306,5458,69,2],
["p1",2,"op","chess_char_2_08_b",0,"none",3512.3,1,1,0,0,0,0,0,0],
["p1",3,"op","chess_char_2_09_b",0,"none",5.27,1,4,1,1,2281,50,1,0],
["p1",4,"op","chess_char_2_11_b",0,"none",1926.05,1,7,6,2937,2192,0,27,9],
["p1",5,"op","chess_char_2_12_b",0,"none",1663.2,1,10,26,24979,1748,0,65,1],
["p1",6,"op","chess_char_2_19_a",0,null,1123.32,1,5,46,31887,0,0,76,11],
["p1",4,"op","chess_char_2_11_b",0,"none",2169.59,1,7,6,2936,1948,0,26,8],
["p1",5,"op","chess_char_2_12_b",0,"none",1663.2,1,10,26,24980,1748,0,65,1],
["p1",6,"op","chess_char_2_19_a",0,null,1123.32,1,5,51,24797,0,0,75,11],
["p1",7,"op","chess_char_2_01_b",0,"none",2360.6,1,8,15,2867,0,0,20,2],
["p1",8,"op","chess_char_2_02_b",0,"none",2887.28,1,6,0,0,400,1251,9,1],
["p1",9,"op","chess_char_2_04_b",0,"none",1298,1,9,18,53850,851,0,65,32],
["p1",9,"op","chess_char_2_04_b",0,"none",1298,1,9,17,44967,851,0,65,32],
["p1",10,"op","chess_char_2_05_b",0,"none",2060.52,1,11,0,0,6408,3446,44,3],
["p1",11,"op","chess_char_2_06_b",1,"none",1802.9,1,12,0,0,2757,9150,50,4],
["p1",12,"op","chess_char_2_10_b",0,"none",1491.6,1,2,1,8437,0,0,76,3]
["p1",12,"op","chess_char_2_10_b",0,"none",1491.6,1,2,3,40019,0,0,76,3]
],
"enemies": {
"enemy_1006_shield": [1,1,0,0,5760],
"enemy_1019_jshoot": [1,1,0,616,1728],
"enemy_1121_lifbos_2": [1,1,0,901,24000],
"enemy_1195_sfyin": [36,34,0,9176,65280],
"enemy_1195_sfyin_2": [15,15,0,153,44640],
"enemy_1196_msfyin": [68,67,1,0,134],
"enemy_1196_msfyin_2": [30,24,6,0,83],
"enemy_1197_sfshu": [9,9,0,70,21600],
"enemy_1121_lifbos_2": [1,1,0,601,24000],
"enemy_1195_sfyin": [36,34,0,9112,65280],
"enemy_1195_sfyin_2": [15,15,0,59,44640],
"enemy_1196_msfyin": [68,65,3,0,133],
"enemy_1196_msfyin_2": [30,27,3,0,86],
"enemy_1197_sfshu": [9,9,0,32,21600],
"enemy_1197_sfshu_2": [1,1,0,0,3216],
"enemy_1198_msfshu": [27,20,7,0,71],
"enemy_1198_msfshu": [27,18,9,0,69],
"enemy_1198_msfshu_2": [3,3,0,0,12],
"enemy_1267_nhpbr_2": [1,1,0,1215,5280],
"enemy_1381_winman_2": [1,1,0,60,7488],
"enemy_1381_winman_2": [1,1,0,30,7488],
"enemy_1535_wlfmster": [1,0,0,10087,33600]
},
"hooks": [1,207,4200,769,769,1143,1200,2553,178,192,68,65,0,14485,1097,48,195,14,1,179,0,0,0],
"events": {"atk":984,"bounty":3,"deploy":12,"die":178,"dmg":1109,"engage":8,"fx":81,"heal":123,"leak":14,"skill":133,"spawn":207,"status":512},
"fx": {"beam":3,"buff":5,"phase":1,"summon":59,"telegraph":1,"zone":12},
"snaps": "1a11d531 2975f75f f230f0a9 5ad78597 6795db33 b6b65e6d c7fa8dd7 6ac0390b 7f931969 4f3e97e0 f34fea5a c7c93966 51eed1f2 cc487714"
"hooks": [1,207,4200,746,746,1148,1204,2382,177,192,67,64,0,14469,974,44,195,15,1,178,0,0,0],
"events": {"atk":943,"bounty":3,"deploy":12,"die":177,"dmg":1112,"engage":8,"fx":80,"heal":123,"leak":15,"skill":131,"spawn":207,"status":507},
"fx": {"beam":3,"buff":5,"summon":59,"telegraph":1,"zone":12},
"snaps": "1a11d531 23522a80 3c91c21f 9834ad7d 6212080c ddf927d0 978ff526 76d15ac7 5e65d7c8 d0e497c4 b6326ba1 bfc3149f 02b75f6a 4f4ad947"
},
"roster-025": {
"about": "pass 1 band 3: chess_char_2_17_b chess_char_2_18_b chess_char_3_06_a chess_char_2_13_b chess_char_2_16_b chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_2_14_b chess_char_2_19_b chess_char_3_01_a",
@@ -1630,44 +1629,44 @@
"bossHpLeft": null,
"rngDraws": 178,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":20,"total":71,"perfect":false,"leaks":53,"leaksUncounted":0,"coins":6,"dmg":226122,"bossDmg":0,"heal":1280,"deaths":21,"layerGains":{}}},
"players": {"p1":{"killed":20,"total":71,"perfect":false,"leaks":53,"leaksUncounted":0,"coins":6,"dmg":230052,"bossDmg":0,"heal":2028,"deaths":21,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_3_12_a",0,null,0,0,99,2,10373,6415,1280,21,4],
["p1",2,"op","chess_char_3_16_a",0,null,0,0,6,0,1921,2390,0,8,1],
["p1",3,"op","chess_char_3_18_a",0,null,0,0,100,2,14961,3258,0,10,5],
["p1",4,"op","chess_char_3_08_a",0,null,0,0,4,2,28732,1753,0,8,1],
["p1",5,"op","chess_char_3_09_a",0,null,1393.7,1,103,2,14550,1394,0,21,3],
["p1",1,"op","chess_char_3_12_a",0,null,0,0,98,3,13657,6127,2028,32,6],
["p1",2,"op","chess_char_3_16_a",0,null,0,0,6,0,1578,2390,0,7,1],
["p1",3,"op","chess_char_3_18_a",0,null,0,0,100,1,11273,3258,0,6,5],
["p1",4,"op","chess_char_3_08_a",0,null,0,0,4,2,21272,1753,0,8,1],
["p1",5,"op","chess_char_3_09_a",0,null,1393.7,1,103,1,17167,1394,0,28,4],
["p1",6,"op","chess_char_3_10_a",0,null,0,0,89,1,37297,3630,0,23,6],
["p1",7,"op","chess_char_3_11_a",0,null,1447.6,1,101,2,16076,1448,0,10,1],
["p1",8,"op","chess_char_3_13_a",0,null,0,0,53,0,4484,4682,0,25,1],
["p1",7,"op","chess_char_3_11_a",0,null,1447.6,1,101,1,15167,1448,0,9,1],
["p1",8,"op","chess_char_3_13_a",0,null,0,0,54,1,8710,5199,0,26,1],
["p1",9,"op","chess_char_3_14_a",0,null,0,0,77,0,15269,2752,0,16,0],
["p1",10,"op","chess_char_3_17_a",0,null,905.85,1,97,4,49375,4035,0,56,10],
["p1",11,"op","chess_char_3_19_a",0,null,0,0,79,1,22234,3166,0,34,1],
["p1",12,"op","chess_char_3_20_a",0,null,0,0,93,1,2550,2466,0,15,0],
["p1",13,"token","token_10028_vigil_wolf",null,null,340.4,0,15,1,5868,2048,0,10,null],
["p1",10,"op","chess_char_3_17_a",0,null,905.85,1,96,4,48056,4035,0,56,10],
["p1",11,"op","chess_char_3_19_a",0,null,0,0,79,3,21643,3166,0,34,1],
["p1",12,"op","chess_char_3_20_a",0,null,0,0,97,1,10556,2984,0,21,1],
["p1",13,"token","token_10028_vigil_wolf",null,null,340.4,0,15,0,5977,2048,0,10,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],
["p1","~1","token","token_10028_vigil_wolf",null,null,259.45,0,80,0,2432,827,0,7,null]
],
"enemies": {
"enemy_10042_prtrop": [12,0,12,7794,26895],
"enemy_10042_prtrop_2": [12,0,10,4541,16229],
"enemy_10043_sailor": [39,13,26,20441,208927],
"enemy_10042_prtrop": [12,0,12,6457,27772],
"enemy_10042_prtrop_2": [12,0,10,5313,22549],
"enemy_10043_sailor": [39,13,24,22453,205920],
"enemy_1005_yokai_2": [1,1,0,68,2678],
"enemy_10156_mncrer": [1,1,0,281,6912],
"enemy_1116_liprr_2": [1,1,0,496,12960],
"enemy_1195_sfyin_2": [1,1,0,737,5357],
"enemy_1116_liprr_2": [1,1,0,0,12960],
"enemy_1195_sfyin_2": [1,1,0,0,5357],
"enemy_1196_msfyin_2": [2,2,0,0,10],
"enemy_1251_lysyta_2": [1,1,0,103,5530],
"enemy_1355_mrfly_2": [1,0,1,0,6879],
"enemy_1513_dekght_2": [1,0,1,3420,1400],
"enemy_1251_lysyta_2": [1,1,0,51,5530],
"enemy_1355_mrfly_2": [1,0,1,0,6317],
"enemy_1513_dekght_2": [1,0,1,4005,1400],
"enemy_9010_acpupp": [1,0,1,0,1540]
},
"hooks": [1,102,4200,407,407,1485,1544,9,41,94,33,33,0,9683,20,46,73,51,1,46,0,0,0],
"events": {"atk":478,"bounty":3,"deploy":26,"die":43,"dmg":1543,"engage":14,"fx":29,"heal":9,"leak":51,"skill":66,"spawn":90,"status":56},
"fx": {"dp":6,"explode":4,"palsy":1,"revive":4,"shield":1,"sp":3,"strike":1,"summon":3,"telegraph":3,"wolfShadow":1,"wolfShadowLost":2},
"snaps": "23392b9d c2028cb2 6f12c154 ef141484 189e0e65 6bc6ede0 8cc9fd73 c276b2cf 1f227c6e 430e9894 fd63dcc0 130eb8dd b9f25f22 9d6cc115"
"hooks": [1,102,4200,438,438,1542,1596,12,41,92,37,37,0,10068,24,46,73,49,1,45,0,0,0],
"events": {"atk":497,"bounty":3,"deploy":26,"die":43,"dmg":1595,"engage":14,"fx":27,"heal":11,"leak":49,"skill":74,"spawn":90,"status":62},
"fx": {"dp":6,"explode":3,"palsy":1,"revive":4,"shield":1,"sp":3,"strike":1,"summon":3,"telegraph":2,"wolfShadow":1,"wolfShadowLost":2},
"snaps": "23392b9d a853f069 77fea454 3400ea7b 68138c74 8c876ee0 2bed8281 7e09d069 54448eb3 17036c41 1d906973 678c002b 260db95e 08ae4e0f"
},
"roster-027": {
"about": "pass 1 band 4: chess_char_3_06_b chess_char_3_12_b chess_char_3_02_b chess_char_3_03_b chess_char_3_04_b chess_char_3_05_b chess_char_3_21_a chess_char_3_01_b chess_char_3_08_b chess_char_3_09_b chess_char_3_10_b chess_char_3_11_b",
@@ -1738,41 +1737,41 @@
"total": 62,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 78,
"rngDraws": 79,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":6,"total":62,"perfect":false,"leaks":56,"leaksUncounted":0,"coins":0,"dmg":187369,"bossDmg":0,"heal":29,"deaths":28,"layerGains":{}}},
"players": {"p1":{"killed":6,"total":62,"perfect":false,"leaks":56,"leaksUncounted":0,"coins":0,"dmg":213404,"bossDmg":0,"heal":29,"deaths":28,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_3_16_b",0,"none",0,0,4,0,107,4476,0,9,1],
["p1",1,"op","chess_char_3_16_b",0,"none",0,0,4,0,602,4476,0,9,1],
["p1",2,"op","chess_char_4_01_a",0,null,0,0,7,0,0,3975,0,0,0],
["p1",3,"op","chess_char_3_18_b",0,"uniequip_003_vulpis",0,0,79,0,0,5831,29,0,0],
["p1",4,"op","chess_char_4_04_a",0,null,0,0,91,0,23488,23871,0,49,5],
["p1",5,"op","chess_char_3_13_b",0,"none",0,0,1,1,9678,1982,0,26,1],
["p1",6,"op","chess_char_3_14_b",0,"none",0,0,86,1,31726,4566,0,39,2],
["p1",7,"op","chess_char_3_17_b",0,"none",0,0,88,3,50729,8672,0,29,10],
["p1",8,"op","chess_char_3_19_b",0,"uniequip_003_vigil",0,0,2,0,16342,2672,0,30,3],
["p1",9,"op","chess_char_3_20_b",0,"none",0,0,68,0,4494,4174,0,17,1],
["p1",4,"op","chess_char_4_04_a",0,null,0,0,91,0,22911,23871,0,48,5],
["p1",5,"op","chess_char_3_13_b",0,"none",0,0,1,1,23240,1982,0,25,1],
["p1",6,"op","chess_char_3_14_b",0,"none",0,0,86,1,32366,4566,0,38,2],
["p1",7,"op","chess_char_3_17_b",0,"none",0,0,88,3,50363,8672,0,29,10],
["p1",8,"op","chess_char_3_19_b",0,"uniequip_003_vigil",0,0,2,0,17196,2672,0,29,3],
["p1",9,"op","chess_char_3_20_b",0,"none",0,0,68,0,13587,4174,0,17,1],
["p1",10,"op","chess_char_3_21_b",0,"uniequip_003_archet",0,0,92,1,27218,7595,0,29,10],
["p1",11,"op","chess_char_4_02_a",0,null,0,0,65,0,11304,6456,0,8,0],
["p1",12,"op","chess_char_4_06_a",0,null,0,0,8,0,9715,1878,0,17,1],
["p1",13,"token","token_10028_vigil_wolf",null,null,0,0,3,0,2568,3100,0,10,null]
["p1",11,"op","chess_char_4_02_a",0,null,0,0,65,0,12030,6456,0,8,0],
["p1",12,"op","chess_char_4_06_a",0,null,0,0,8,0,10865,1878,0,18,1],
["p1",13,"token","token_10028_vigil_wolf",null,null,0,0,3,0,3026,3100,0,9,null]
],
"enemies": {
"enemy_10044_wintun": [1,0,1,3775,23196],
"enemy_10127_rkmbst_2": [1,0,1,3021,577],
"enemy_1019_jshoot_2": [18,3,15,11211,44747],
"enemy_1092_mdgint": [1,0,1,2201,3318],
"enemy_1174_duholy_2": [1,0,1,2446,1547],
"enemy_1234_dsubrl": [1,0,1,4217,0],
"enemy_1328_cbjedi": [1,0,1,0,294],
"enemy_1381_winman": [21,3,18,6826,103479],
"enemy_1389_winbab_2": [15,0,13,42412,9362],
"enemy_1509_mousek": [1,0,1,3138,123],
"enemy_9006_actoxi": [1,0,1,0,727]
"enemy_10044_wintun": [1,0,1,3775,33886],
"enemy_10127_rkmbst_2": [1,0,1,3020,1072],
"enemy_1019_jshoot_2": [18,3,15,11116,44202],
"enemy_1092_mdgint": [1,0,1,2201,3729],
"enemy_1174_duholy_2": [1,0,1,2446,1371],
"enemy_1234_dsubrl": [1,0,1,4132,0],
"enemy_1328_cbjedi": [1,0,1,0,588],
"enemy_1381_winman": [21,3,18,6587,110081],
"enemy_1389_winbab_2": [15,0,13,41854,17658],
"enemy_1509_mousek": [1,0,1,3603,91],
"enemy_9006_actoxi": [1,0,1,515,727]
},
"hooks": [1,91,5100,458,458,567,583,6,35,89,34,34,0,4769,14,30,62,54,1,38,0,0,16],
"events": {"atk":485,"deploy":29,"die":35,"dmg":546,"engage":11,"fx":81,"leak":54,"skill":68,"spawn":75,"status":86},
"fx": {"camouflage":1,"crit":3,"dodge":16,"dp":3,"phase":1,"pulse":14,"revive":1,"sentry":9,"shadowWeave":10,"shield":5,"shieldBreak":3,"summon":2,"telegraph":2,"volley":6,"wolfShadowLost":4,"zone":1},
"snaps": "35472215 76e5043c 846f34d3 7ac86a3f 1637c3bc 21ee0ef5 1b42c732 963f0708 c9f73c3b e34ad551 db753d29 51920463 ea6d20ca b54a86aa 27428564 9fb4088f 54cd1a92"
"hooks": [1,91,5100,452,452,604,619,6,35,89,34,34,0,4768,15,30,62,54,1,38,0,0,17],
"events": {"atk":480,"deploy":29,"die":35,"dmg":582,"engage":11,"fx":83,"leak":54,"skill":68,"spawn":75,"status":92},
"fx": {"camouflage":1,"crit":4,"dodge":17,"dp":3,"phase":1,"pulse":14,"revive":1,"sentry":9,"shadowWeave":10,"shield":5,"shieldBreak":3,"summon":2,"telegraph":2,"volley":6,"wolfShadowLost":4,"zone":1},
"snaps": "35472215 ab913605 0336b514 5969c949 ea0bb124 d2e8bb71 7d43ba81 b3d7137e f1a459df 680e54c5 09cbc2f2 2d89ebb1 68c486d9 9003264a 3233b4b9 c399bc4e 0f82adbe"
},
"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_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",
@@ -2211,7 +2210,7 @@
"leaks": 55,
"leaksUncounted": 0,
"coins": 4,
"dmg": 1156117,
"dmg": 1160465,
"bossDmg": 0,
"heal": 20941,
"deaths": 17,
@@ -2227,7 +2226,7 @@
["p1",6,"op","chess_char_6_13_a",0,null,2043.36,1,12,1,39577,5895,925,66,4],
["p1",7,"op","chess_char_6_14_a",0,null,1863.97,1,14,0,0,3566,10425,58,15],
["p1",8,"op","chess_char_6_16_a",0,null,404.84,1,4,1,166510,895,0,109,4],
["p1",9,"op","chess_char_6_18_a",0,null,0,0,107,2,56257,8712,0,83,2],
["p1",9,"op","chess_char_6_18_a",0,null,0,0,107,2,60604,8712,0,83,2],
["p1",10,"op","chess_char_6_20_a",0,null,653.14,1,146,0,0,3814,8594,36,0],
["p1",11,"op","chess_char_6_01_b",0,"none",1603.8,1,13,33,255694,3538,0,77,5],
["p1",12,"op","chess_char_6_02_b",0,"none",2296.4,1,15,33,528172,2220,0,0,17],
@@ -2236,21 +2235,21 @@
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
],
"enemies": {
"enemy_1006_shield_3": [21,0,21,20265,335358],
"enemy_1006_shield_3": [21,0,21,20265,336542],
"enemy_10083_hlbird": [1,1,0,0,2488],
"enemy_1040_bombd": [1,1,0,2501,6636],
"enemy_1043_zomsbr": [66,63,3,548,286837],
"enemy_1161_tidmag": [1,1,0,3139,9953],
"enemy_1202_msfzhi": [1,1,0,0,5],
"enemy_1273_stmgun_2": [1,0,1,9600,10936],
"enemy_1402_tgshd_2": [36,8,28,14955,454822],
"enemy_1402_tgshd_2": [36,8,28,14955,457986],
"enemy_1415_mmkabi_2": [1,0,1,0,40107],
"enemy_2003_rockman": [1,0,1,904,8976]
},
"hooks": [1,157,6221,639,638,1374,1624,8342,92,147,56,54,59,23902,3684,26,130,55,1,92,2,4,0],
"events": {"atk":680,"bounty":2,"deploy":24,"die":92,"dmg":1417,"engage":9,"fx":644,"heal":524,"layer":2,"leak":55,"skill":110,"spawn":145,"status":871},
"fx": {"airstrike":15,"aoe":3,"burst":4,"displace":2,"explode":16,"expose":460,"frostNova":17,"garrison":2,"healField":15,"link":1,"phase":1,"snow":37,"sunBurst":2,"talent":7,"telegraph":2,"wanted":60},
"snaps": "352a6117 5197ba48 22ff25c2 16105f43 67bd4112 04c5a2b1 e4e63a95 9087d64d 41e697b3 8e3b24fc fa002205 4a75e62c 71798688 e3c0247f 3b14b2c2 04aa6c52 2d90b642 4764ab7a 541b8b1e 598e0a94 ca28421b"
"hooks": [1,157,6221,639,638,1382,1632,8342,92,147,56,54,59,23902,3684,26,130,55,1,92,2,4,0],
"events": {"atk":680,"bounty":2,"deploy":24,"die":92,"dmg":1425,"engage":9,"fx":650,"heal":524,"layer":2,"leak":55,"skill":110,"spawn":145,"status":871},
"fx": {"airstrike":15,"aoe":3,"burst":4,"displace":2,"explode":16,"expose":466,"frostNova":17,"garrison":2,"healField":15,"link":1,"phase":1,"snow":37,"sunBurst":2,"talent":7,"telegraph":2,"wanted":60},
"snaps": "352a6117 5197ba48 22ff25c2 16105f43 67bd4112 04c5a2b1 e4e63a95 9087d64d 41e697b3 8e3b24fc fa002205 4a75e62c a4551cf8 654d332a 8d6a840f 2e74744b bb1f92bb 7b473463 d11b7c5f e3c994e9 7f5f08b2"
},
"roster-037": {
"about": "pass 1 band 7: chess_char_6_06_b chess_char_6_15_b chess_char_6_07_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b token_10017_skadi2_dedant token_10030_mlyss_wtrman",
@@ -2845,7 +2844,7 @@
"rngDraws": 15,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {"killed":1,"total":134,"perfect":false,"leaks":133,"leaksUncounted":0,"coins":2,"dmg":300409,"bossDmg":0,"heal":7843,"deaths":25,"layerGains":{"swiftShip":8}}
"p1": {"killed":1,"total":134,"perfect":false,"leaks":133,"leaksUncounted":0,"coins":2,"dmg":300752,"bossDmg":0,"heal":7843,"deaths":25,"layerGains":{"swiftShip":8}}
},
"units": [
["p1",1,"op","chess_char_6_03_b",1,"uniequip_002_yu",0,0,3,1,28758,10505,1144,4,1],
@@ -2854,7 +2853,7 @@
["p1",4,"op","chess_char_6_17_a",1,null,0,0,154,0,49834,9645,0,20,4],
["p1",5,"op","chess_char_6_14_a",1,null,0,0,64,0,0,4672,1696,4,0],
["p1",6,"op","chess_char_6_16_a",1,null,2499.2,1,166,0,8245,8796,583,14,1],
["p1",7,"op","chess_char_6_18_a",1,null,0,0,105,0,69,2512,0,1,0],
["p1",7,"op","chess_char_6_18_a",1,null,0,0,105,0,412,2512,0,1,0],
["p1",8,"op","chess_char_6_20_a",1,null,0,0,162,0,0,8054,2896,5,0],
["p1",9,"op","chess_char_6_01_b",1,"uniequip_002_lemuen",0,0,10,0,20013,2215,570,8,1],
["p1",10,"op","chess_char_6_02_b",1,"uniequip_002_sbell2",0,0,11,0,70499,4251,44,0,0],
@@ -2868,7 +2867,7 @@
"enemies": {
"enemy_10031_cnvsld": [1,1,0,674,26748],
"enemy_1010_demon_2": [1,0,1,0,11517],
"enemy_10122_uacann_2": [39,0,39,57570,49559],
"enemy_10122_uacann_2": [39,0,39,57570,49902],
"enemy_1062_rager_2": [1,0,1,1916,33359],
"enemy_1169_duphlx_2": [1,0,1,143,20881],
"enemy_1209_sfden": [1,0,1,0,0],
@@ -2877,10 +2876,10 @@
"enemy_1439_dslntf": [1,0,1,358,0],
"enemy_2034_sythef_2": [1,0,1,0,0]
},
"hooks": [1,167,6688,229,229,519,527,1381,26,164,8,8,5,4740,404,17,134,133,1,27,1,2,0],
"events": {"atk":301,"bounty":1,"deploy":33,"die":31,"dmg":518,"engage":8,"fx":197,"heal":22,"layer":1,"leak":133,"skill":16,"spawn":150,"status":463},
"hooks": [1,167,6688,229,229,520,528,1381,26,164,8,8,5,4740,404,17,134,133,1,27,1,2,0],
"events": {"atk":301,"bounty":1,"deploy":33,"die":31,"dmg":519,"engage":8,"fx":197,"heal":22,"layer":1,"leak":133,"skill":16,"spawn":150,"status":463},
"fx": {"blessing":1,"blink":2,"burst":2,"camouflage":2,"displace":1,"explode":85,"garrison":1,"garrisonGrant":2,"link":1,"snow":8,"sunBurst":3,"talent":2,"telegraph":2,"zone":85},
"snaps": "72133add 139decfd db65926d 621c8b4e 895ef8fc 9b285d9d 497dc940 d93f896c 1390de12 0142c015 387d52f9 a806c0f4 2fcc6a3f 90acd007 41b58205 2439dd79 e2033828 550906ed 926efc66 aaa4972f eb1aee94 d96d9c77 bdfc01b4"
"snaps": "72133add 139decfd db65926d 621c8b4e 895ef8fc 9b285d9d 497dc940 d93f896c 1390de12 0142c015 e3313e4a d0d90b10 d9a26dd3 7e33b303 a9529f99 8ce43f35 3fd833d4 19aade59 4db482f2 44bc677b 969be758 8ec1318b c84cdc58"
},
"roster-047": {
"about": "pass 2 band 7: chess_char_6_06_b chess_char_6_15_b chess_char_6_07_b chess_char_6_17_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b token_10030_mlyss_wtrman",
@@ -2891,57 +2890,57 @@
"round": 13,
"seed": 2983635556,
"waveId": "act1autochess_h06",
"time": 205.3,
"ticks": 6159,
"time": 207.3,
"ticks": 6219,
"reason": "cleared",
"killed": 141,
"total": 139,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 524,
"rngDraws": 522,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":141,"total":139,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":6,"dmg":695337,"bossDmg":0,"heal":44427,"deaths":13,"layerGains":{}}},
"players": {"p1":{"killed":141,"total":139,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":6,"dmg":695337,"bossDmg":0,"heal":45067,"deaths":12,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_6_06_b",1,"none",2118.6,1,5,9,26461,784,0,13,4],
["p1",2,"op","chess_char_6_15_b",1,"none",681.29,1,7,21,82651,1853,0,83,5],
["p1",3,"op","chess_char_6_07_b",1,"none",2916.46,1,10,27,209639,16462,0,81,1],
["p1",4,"op","chess_char_6_17_b",1,"none",2780.36,0,152,18,96297,12964,0,33,3],
["p1",5,"op","chess_char_6_08_b",1,"none",1658.8,1,8,5,28864,5124,2435,22,2],
["p1",6,"op","chess_char_6_09_b",2,"none",0,0,154,1,2442,3828,0,6,0],
["p1",7,"op","chess_char_6_11_b",1,"none",0,0,160,1,6032,9107,0,11,0],
["p1",8,"op","chess_char_6_12_b",2,"none",2751.98,1,4,15,76096,0,0,57,2],
["p1",9,"op","chess_char_6_13_b",2,"uniequip_002_angel2",2168.49,1,6,43,154258,4995,4727,90,4],
["p1",10,"op","chess_char_6_14_b",1,"none",1912.9,1,9,0,0,4402,37265,66,12],
["p1",11,"op","chess_char_6_16_b",1,"uniequip_002_halo2",0,0,163,1,6079,4749,0,7,1],
["p1",12,"op","chess_char_6_18_b",1,"uniequip_002_whitw2",0,0,158,0,5647,7036,0,8,1],
["p1",1,"op","chess_char_6_06_b",1,"none",1730.3,1,5,3,22257,1173,0,10,2],
["p1",2,"op","chess_char_6_15_b",1,"none",681.29,1,7,23,69675,1853,0,83,6],
["p1",3,"op","chess_char_6_07_b",1,"none",2927.1,1,10,30,203352,15472,0,76,1],
["p1",4,"op","chess_char_6_17_b",1,"none",3575.66,0,169,16,105396,10226,0,33,3],
["p1",5,"op","chess_char_6_08_b",1,"none",1658.8,1,8,3,30519,5124,2175,23,2],
["p1",6,"op","chess_char_6_09_b",2,"none",0,0,153,1,3478,4286,0,7,0],
["p1",7,"op","chess_char_6_11_b",1,"none",0,0,160,2,7771,8162,0,15,0],
["p1",8,"op","chess_char_6_12_b",2,"none",2212.98,1,4,18,68347,539,0,51,2],
["p1",9,"op","chess_char_6_13_b",2,"uniequip_002_angel2",2436.5,1,6,43,165883,5541,5541,86,4],
["p1",10,"op","chess_char_6_14_b",1,"none",1912.9,1,9,0,0,2613,37351,66,13],
["p1",11,"op","chess_char_6_16_b",1,"uniequip_002_halo2",0,0,163,1,8888,5857,0,10,1],
["p1",12,"op","chess_char_6_18_b",1,"uniequip_002_whitw2",0,0,158,1,7748,8373,0,9,1],
["p1",13,"token","token_10030_mlyss_wtrman",null,null,0,0,15,0,434,1001,0,1,1],
["-","~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],
["p1","~1","token","token_10056_angel2_target",null,null,2788,0,31,0,0,400,0,0,null],
["p1","~1","token","token_10012_rosmon_shield",null,null,4209.65,0,59,0,0,790,0,0,null],
["p1","~1","token","token_10012_rosmon_shield",null,null,4685.85,0,59,0,0,314,0,0,null],
["p1","~2","token","token_10012_rosmon_shield",null,null,1752.62,0,60,0,0,3247,0,0,null],
["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,97,0,437,3076,0,1,1],
["p1","~3","token","token_10012_rosmon_shield",null,null,4814.92,0,144,0,0,185,0,0,null],
["p1","~4","token","token_10012_rosmon_shield",null,null,4154.36,0,145,0,0,846,0,0,null],
["p1","~1","token","token_10030_mlyss_wtrman",null,null,0,0,97,0,1589,2382,0,3,1],
["p1","~3","token","token_10012_rosmon_shield",null,null,4684.44,0,144,0,0,316,0,0,null],
["p1","~4","token","token_10012_rosmon_shield",null,null,3320.85,0,145,0,0,1679,0,0,null],
["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,161,0,0,1865,0,0,0]
],
"enemies": {
"enemy_10067_ftsjc": [1,1,0,0,12480],
"enemy_1017_defdrn": [1,1,0,0,3840],
"enemy_1019_jshoot_2": [57,57,0,11161,147744],
"enemy_1019_jshoot_2": [57,57,0,11472,147744],
"enemy_1121_lifbos": [1,1,0,0,19200],
"enemy_1197_sfshu": [1,1,0,0,2400],
"enemy_1198_msfshu": [3,3,0,0,9],
"enemy_1267_nhpbr": [1,1,0,650,4320],
"enemy_1381_winman": [28,28,0,53,155904],
"enemy_1389_winbab_2": [48,48,0,61597,322560],
"enemy_1525_blkswb": [1,0,1,4258,26880]
"enemy_1267_nhpbr": [1,1,0,400,4320],
"enemy_1381_winman": [28,28,0,26,155904],
"enemy_1389_winbab_2": [48,48,0,58026,322560],
"enemy_1525_blkswb": [1,0,1,5457,26880]
},
"hooks": [1,175,6159,1041,1040,1108,1392,308,157,165,37,35,200,23203,1159,112,142,1,1,158,0,0,0],
"events": {"atk":1072,"bounty":3,"deploy":30,"die":164,"dmg":1178,"engage":13,"fx":105,"heal":96,"leak":1,"skill":72,"spawn":165,"status":296},
"fx": {"airstrike":53,"anchor":1,"appear":1,"blink":2,"copy":2,"disappear":2,"ember":2,"explode":1,"garrisonGrant":2,"heal":12,"link":1,"palsy":1,"revive":1,"strike":8,"summon":3,"summonStun":4,"sunBurst":2,"sword":5,"telegraph":1,"zone":1},
"snaps": "993110f3 f651ae07 68cdc148 9158cddc 2692eea7 a690cdf4 1d76614b 262d1113 0184158b f68a70e4 9bcc17d7 52538d25 aa7c264a b609761f 3f2e679b eae1fa33 2ad2fd6f b324c2dd 0313499b cf807db7 bb3c790b"
"hooks": [1,175,6219,1028,1025,1107,1389,296,156,165,37,35,190,22348,953,113,142,1,1,157,0,0,0],
"events": {"atk":1058,"bounty":3,"deploy":30,"die":164,"dmg":1173,"engage":13,"fx":108,"heal":95,"leak":1,"skill":72,"spawn":165,"status":322},
"fx": {"airstrike":53,"anchor":1,"appear":1,"blink":2,"copy":2,"disappear":3,"ember":2,"explode":1,"garrisonGrant":2,"heal":13,"link":2,"revive":1,"strike":8,"summon":3,"summonStun":4,"sunBurst":2,"sword":6,"telegraph":1,"zone":1},
"snaps": "48525394 e270e663 58b5a792 8d579ff3 dfb983ae 11871888 0ab62f8b 23d21064 a55de9e2 fbdb4dea 3f43c24b 64fd1122 15594e24 7ccb90f3 9d1a7939 afd50b30 c90ad64e 50b170d5 3d52cf80 5cbb2495 7afe27dd"
},
"roster-048": {
"about": "pass 2 band 7: chess_char_6_19_b chess_char_5_13_b chess_char_6_20_b chess_char_5_12_b chess_char_5_20_b chess_char_6_05_b",
+2 -2
View File
@@ -238,10 +238,10 @@
"enemy_1071_dftman": [63,63,0,455,243855],
"enemy_1072_dlancer": [60,55,5,22144,476588]
},
"hooks": [1,178,6234,1000,1000,2074,2072,74,158,168,32,32,0,36983,4066,67,158,10,1,160,2,0,11],
"hooks": [1,178,6234,1000,1000,2074,2072,74,158,168,32,32,0,36983,4064,67,158,10,1,160,2,0,11],
"events": {"atk":1142,"bounty":4,"deploy":18,"die":158,"dmg":2072,"engage":11,"fx":161,"heal":53,"layer":2,"leak":10,"skill":64,"spawn":172,"status":472},
"fx": {"aoe":11,"dodge":14,"dp":38,"garrison":2,"revive":1,"slash":77,"sp":13,"spGain":3,"telegraph":2},
"snaps": "484fd662 19a9b252 827467e6 d8836b51 4e1a5c20 f5f33eaf 009d313f 487fac84 6e33c253 481fa961 eee28282 47fecc48 ec2c4a14 046a7402 d017b22b a2a8910b b53ce9db 2504d954 222d228d 78e5e524 2b44a10f"
"snaps": "484fd662 19a9b252 827467e6 5c638330 c6d0b532 c1538ba9 691c2e95 65eab1de e256c73c 337bd270 302985e3 18a84929 737e1169 1cc75867 71696cfe c0e56f12 25c880fa 10b7e655 a65f5fd8 02e1a041 602de50a"
},
"standin-05": {
"about": "normal band 6 as stand-ins: chess_char_6_17_a→char_608_acpion chess_char_6_13_a→char_615_acspec chess_char_6_19_a→char_615_acspec chess_char_6_12_a→char_612_accast chess_char_6_15_a→char_614_acsupo chess_char_6_18_a→char_612_accast chess_char_6_20_a→char_613_acmedc",
+66 -1
View File
@@ -7,12 +7,77 @@
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { PHASE } from '../../shared/constants.js';
import { botPickCard, bountyKillChance, itemTarget, arrange, botPrepBegin, botPrepEnd, bondPlan, rangeTiles, effDps, rangeRec, buyScoreOf } from '../../server/match/bot.js';
import { botPickBand, botPickCard, bountyKillChance, itemTarget, arrange, botPrepBegin, botPrepEnd, bondPlan, rangeTiles, effDps, rangeRec, buyScoreOf } from '../../server/match/bot.js';
import { parseKey, tileKey } from '../../server/match/board.js';
import { makeMatch, checkInvariants, give, giveItem, legalTileFor, DATA } from './harness.js';
const soloBot = (o = {}) => makeMatch({ mode: 'solo', difficulty: 'NORMAL', seats: [{ seat: 0, playerId: 'ai_0', name: 'AI', isBot: true, connected: true }], ...o });
test('#514: a living teammate soft-reserves an opening bond, and elimination releases it', () => {
const { m } = makeMatch({ humans: 2, difficulty: 'HARD', seed: 11 }).start().toPrep();
const [human, bot] = m.order;
try {
bot.isBot = true;
human.bandId = null;
const chessOf = (bond) => Object.values(DATA.chess).find((c) => c.visible && !c.isGolden && c.tier <= 3
&& Array.isArray(c.bonds) && c.bonds.includes(bond)
&& c.bonds.filter((b) => m.gd.bond(b)?.isCore).length === 1);
const usable = m.gd.bondIds.filter((id) => m.gd.bond(id)?.isCore && !m.gd.modeInactiveBonds.has(id) && chessOf(id));
assert.ok(usable.length >= 2, 'two core bonds with a single-core chess');
const [a, b] = usable;
give(m, bot, chessOf(a).chessId, 'hand');
give(m, bot, chessOf(b).chessId, 'hand');
const focus = () => { bot._botFocus = null; bot._botFocusId = null; return bondPlan(m, bot).focus; };
const natural = focus();
assert.ok(natural === a || natural === b, natural);
const other = natural === a ? b : a;
let found = false;
for (let layers = 10; layers <= 60 && !found; layers += 10) {
bot.layers[other] = layers;
if (focus() === other) found = true;
}
assert.equal(focus(), other, 'one layer step is enough for the other bond to lead');
const band = m.gd.bandIds().find((id) => {
const bonds = m.gd.bandBondIds(id);
return bonds.includes(other) && !bonds.includes(natural);
});
assert.ok(band, `a strategy names ${other} and not ${natural}`);
human.bandId = band;
assert.notEqual(focus(), other, 'the opening strategy pulls focus off the reserved bond');
human.alive = false;
assert.equal(focus(), other, 'elimination ends the reservation');
} finally { m.dispose(); }
});
test('#514: strategy selection stays possible, and less likely, while a teammate holds that opening', () => {
const { m } = makeMatch({ humans: 2, difficulty: 'HARD', seed: 3 }).start().toPrep();
const [human, bot] = m.order;
try {
bot.isBot = true;
human.bandId = null;
const tally = (id, n = 400) => {
let hits = 0;
for (let i = 0; i < n; i++) if (botPickBand(m, bot) === id) hits++;
return hits;
};
const open = new Map();
for (let i = 0; i < 400; i++) {
const id = botPickBand(m, bot);
open.set(id, (open.get(id) || 0) + 1);
}
const ranked = [...open.entries()].filter(([id]) => m.gd.bandBondIds(id).length > 0).sort((x, y) => y[1] - x[1]);
const [band, base] = ranked[0];
assert.ok(base > 5, `${band} is drawn often enough to compare (${base})`);
human.bandId = band;
const reserved = tally(band);
assert.ok(reserved > 0, 'a soft reservation can still draw the strategy');
assert.ok(reserved < base, `reserved ${reserved} times, unreserved ${base}`);
human.alive = false;
const released = tally(band);
assert.ok(released > reserved, `elimination raises the rate from ${reserved} to ${released}`);
} finally { m.dispose(); }
});
test('user: Given a faction strategy teammate, When scoring shared high-tier chess, Then humans and bots receive the same preference even with full stock', () => {
const { m } = makeMatch({ humans: 3, seed: 11 }).start().toPrep();
const [ps, mate, other] = m.order;
+75
View File
@@ -0,0 +1,75 @@
// Real production Match + Battle, legal normal intents from an empty board. Seed 8 fixes the shop/wave route.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { Battle } from '../../server/sim/Battle.js';
import { makeMatch } from './harness.js';
test('Rockrock killed by a real enemy and automatically revived by Ermengard starts the same target at init', () => {
const observed = [];
class ObservedBattle extends Battle {
constructor(opts) {
super(opts);
const log = { round: opts.round, deaths: [], deploys: [], firstHits: [] };
observed.push(log);
const seen = new Set(), launches = new Map();
this.on('death', c => {
if (c.unit.defId === 'chess_char_2_10_a') log.deaths.push({ t: this.time, seq: c.unit.deploySeq,
target: c.unit.trait.funnelTarget, scale: c.unit.trait.funnelScale, reason: c.reason });
}, { priority: 1000 });
this.on('death', c => {
if (c.unit.defId === 'chess_char_2_10_a') log.deaths.at(-1).revivedBy = c.revivedBy;
}, { priority: -1000 });
this.on('deploy', c => {
if (c.unit.defId === 'chess_char_2_10_a') log.deploys.push({ seq: c.unit.deploySeq,
target: c.unit.trait.funnelTarget, scale: c.unit.trait.funnelScale });
}, { priority: -1000 });
this.on('attack', c => {
if (c.attacker.defId !== 'chess_char_2_10_a') return;
// This unmodified Rockrock route has no nested attack callback. The attack hook follows its shot creation.
launches.set(this._attackSeq, { t: this.time, seq: c.attacker.deploySeq });
});
this.on('damaged', c => {
const u = c.source;
const launch = launches.get(c.dmg?.attackId);
if (u?.defId !== 'chess_char_2_10_a' || seen.has(u.deploySeq) || launch?.seq !== u.deploySeq) return;
seen.add(u.deploySeq);
log.firstHits.push({ t: this.time, launchAt: launch.t, seq: u.deploySeq, target: c.target.id,
scale: u.trait.funnelScale, hpBefore: c.target.hp + c.amount });
});
}
}
const h = makeMatch({ mode: 'solo', seed: 8 });
h.m.BattleClass = ObservedBattle; // read-only observers, no combat state writes
const p = h.ps('p_0'), act = msg => assert.deepEqual(h.m.handle('p_0', msg), { ok: true });
try {
h.start().toPrep(1, { band: 'band_ermengard' });
act({ t: 'g.buy', slot: 0 });
act({ t: 'g.move', uid: p.hand.find(x => x?.id === 'chess_char_1_09_a').uid,
to: { area: 'board', row: 12, col: 6 }, dir: 'RIGHT' });
h.toPrep(2, { band: 'band_ermengard' });
act({ t: 'g.levelUp' });
h.toPrep(5, { band: 'band_ermengard' });
assert.equal(p.shop.slots[3].id, 'chess_char_2_10_a');
act({ t: 'g.buy', slot: 3 });
act({ t: 'g.move', uid: p.hand.find(x => x?.id === 'chess_char_2_10_a').uid,
to: { area: 'board', row: 12, col: 8 }, dir: 'RIGHT' });
h.toPrep(7, { band: 'band_ermengard' });
const log = observed.find(x => x.round === 6);
assert.ok(log?.deaths.length > 0);
const paired = log.deaths.map(d => ({ death: d, hit: log.firstHits.find(x => x.seq > d.seq) }))
.filter(x => x.hit && x.death.target === x.hit.target && x.death.scale > 0.2);
assert.ok(paired.length > 0, JSON.stringify(log));
for (const { death, hit } of paired) {
assert.equal(death.reason, 'killed');
assert.equal(death.revivedBy, 'band');
assert.ok(hit.launchAt >= death.t, 'fresh attack after the knockout and revival');
assert.ok(hit.hpBefore > 0, 'the same enemy was alive when the fresh drone hit');
const deploy = log.deploys.find(x => x.seq === hit.seq);
assert.equal(deploy.target, null);
assert.ok(Math.abs(deploy.scale - 0.2) < 1e-8);
assert.ok(Math.abs(hit.scale - 0.2) < 1e-8, JSON.stringify({ death, hit }));
}
assert.deepEqual(h.logs.error, []);
h.invariants();
} finally { h.m.dispose(); }
});
+11 -2
View File
@@ -177,8 +177,8 @@ for (const kind of ['boss', 'hidden']) for (const side of ['L', 'R']) {
});
}
test('#475: even buildable hand, temporary-storage, side-margin and off-rect tiles remain invalid Raid landings', () => {
for (const pos of [[0, 3], [1, 3], [0, 17], [1, 17], [3, 1], [3, 19], [6, 17]]) {
test('#475: even buildable hand, temporary-storage and side-margin tiles remain invalid Raid landings', () => {
for (const pos of [[0, 3], [1, 3], [0, 17], [1, 17], [3, 1], [3, 19]]) {
const h = emptyHalfLanding({ pos, ranged: true });
const u = h.unit('probe'), home = [u.tileR, u.tileC];
h.run(11);
@@ -187,6 +187,15 @@ test('#475: even buildable hand, temporary-storage, side-margin and off-rect til
}
});
test('#475: no Raid lands off the rectangle — an enemy spawned on (6,17) is held on the edge row and stands on (5,17)', () => {
// Battle._clampPos keeps an enemy FIELD_EDGE_INSET inside the field, so its tile is the edge tile (body.js).
const h = emptyHalfLanding({ pos: [6, 17], ranged: true });
const u = h.unit('probe');
h.run(11);
assert.deepEqual([u.tileR, u.tileC], [5, 17]);
checkInvariants(h.b);
});
test('#475: empty-half Raid still respects melee/high-ground, water and occupied/downed-unit reservations', () => {
for (const glyph of ['h', 'd']) {
const h = emptyHalfLanding({ pos: [3, 17], glyph });
+258
View File
@@ -0,0 +1,258 @@
// Unreleased funnel drones add damage to the caster's attack (PRTS 分支特性信息 驭械术师).
// Controlled Battle inputs; the production Match / browser reproduction is recorded separately.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { makeBattle, chessRec, enemyRec, checkInvariants } from '../helpers/battleHarness.js';
import { hitCount } from '../../server/sim/content/enemies/helpers.js';
const near = (a, b, label) => assert.ok(Math.abs(a - b) < 1e-6, `${label}: ${a} vs ${b}`);
const ordinary = ['2_10', '3_13', '3_20', '4_03', '6_18'].flatMap((id) => ['a', 'b'].map((f) => ({ chessId: `chess_char_${id}_${f}` })));
const glow = [5, 6].flatMap((slot) => [false, true].flatMap((elite) => (elite ? [null, 'uniequip_002_gdglow', 'uniequip_003_gdglow'] : [null]).map((uniEquipId) => ({
diy: { slot, charId: 'char_377_gdglow', skillIndex: 2, uniEquipId }, elite,
}))));
function field(unit, enemy = {}, opts = {}) {
const h = makeBattle({
seed: 3, autoFinish: false, timeLimit: 120, captureNoisy: true, hooks: ['damaged', 'attack'],
defs: { enemies: { enemy_dummy: enemyRec({ key: 'enemy_dummy', hp: 1e8, speed: 0, mass: 0, ...enemy }) } },
units: [{ uid: 1, row: 10, col: 4, ...unit }], ...opts,
});
h.step();
return { h, u: h.unit(1), e: h.spawn('enemy_dummy', { pos: [10, 6] }) };
}
const mine = (h, u) => h.hooksOf('damaged').filter((c) => c.source === u);
const volleys = (h, u) => {
const out = new Map();
for (const c of mine(h, u)) {
const key = c.dmg.attackId;
if (key > 0) { const l = out.get(key) ?? []; l.push(c); out.set(key, l); }
}
return [...out.values()];
};
function done(h) { checkInvariants(h.b); assert.deepEqual(h.b.errors, []); }
test('all normal/elite funnel casters and eight Goldenglow forms: a body hit plus a separate ramped addition', () => {
for (const unit of [...ordinary, ...glow]) {
const { h, u, e } = field(unit);
h.run(2);
const vs = volleys(h, u);
assert.ok(vs.length >= 2, `${u.defId}: two attacks`);
for (const [i, v] of vs.slice(0, 2).entries()) {
assert.equal(v.length, 2, `${u.defId}: body and drone, attack ${i + 1}`);
const [body, drone] = v;
assert.ok(body.dmg.isAttack && !body.dmg.tags.includes('addition'));
assert.ok(!drone.dmg.isAttack && drone.dmg.tags.includes('addition') && drone.dmg.tags.includes('funnel'));
const crit = u.def.charId === 'char_4054_malist' ? u.def.talents[0].bb.atk_scale : 1;
assert.ok([u.s.atk, u.s.atk * crit].some((n) => Math.abs(body.amount - n) < 1e-6));
near(drone.amount / body.amount, u.profile.funnel.init + i * u.profile.funnel.delta, 'independent drone ramp');
}
near(1e8 - e.hp, mine(h, u).reduce((sum, c) => sum + c.amount, 0), 'actual HP agrees with all damage events');
done(h);
}
});
test('Lolo ATK 283: each component passes through RES, hit-count HP and a one-hit barrier separately', () => {
for (const mode of ['plain', 'res', 'times', 'barrier']) {
const { h, u, e } = field({ chessId: 'chess_char_2_10_a' }, { res: mode === 'res' ? 50 : 0, hp: mode === 'times' ? 100 : 1e8 });
near(u.s.atk, 283, 'unbuffed Lolo');
if (mode === 'times') hitCount(h.b, e, true);
if (mode === 'barrier') h.b.addBuff(e, { key: 'test:barrier', shieldHits: 1 });
h.run(0.7);
const loss = (mode === 'times' ? 100 : 1e8) - e.hp;
near(loss, { plain: 339.6, res: 169.8, times: 2, barrier: 56.6 }[mode], mode);
assert.equal(h.hooksOf('attack').filter((c) => c.attacker === u).length, 1, 'one attack action');
done(h);
}
});
test('unreleased attribute skills keep a body hit; released Kjera drones and Lolo S2 do not gain one', () => {
// S1 (skillIndex 0) keeps the unreleased pair. S2 (skillIndex 1) releases the drone; rockrock-s2-lock covers it.
for (const id of ['chess_char_2_10_a', 'chess_char_2_10_b']) {
const { h, u } = field({ chessId: id, skillIndex: 0 });
u.skill.gainSp(999);
assert.ok(h.runUntil(() => u.skill.active, 2));
const start = mine(h, u).length;
h.run(2);
const active = mine(h, u).slice(start);
assert.ok(active.some((c) => c.dmg.isAttack && !c.dmg.tags.includes('addition')), `${id} S1: body`);
assert.ok(active.some((c) => c.dmg.tags.includes('funnel')), `${id} S1: drone`);
for (const v of volleys(h, u)) assert.equal(v.length, 2, `${id}: one pair per attack`);
done(h);
}
for (const id of ['chess_char_3_20_a', 'chess_char_3_20_b']) {
const { h, u } = field({ chessId: id });
u.skill.gainSp(999);
assert.ok(h.runUntil(() => u.skill.active, 5));
const start = mine(h, u).length;
h.run(2);
const active = mine(h, u).slice(start);
assert.ok(active.length > 0, `${id}: skill hits`);
assert.ok(active.every((c) => c.dmg.isSkill && c.dmg.isAttack && !c.dmg.tags?.includes('funnel')), `${id}: no extra body`);
done(h);
}
});
test('Whitw2 S1 passive and head-wolf stage 3: only the drone count grows', () => {
for (const id of ['chess_char_6_18_a', 'chess_char_6_18_b']) {
const { h, u } = field({ chessId: id, skillIndex: 0 });
h.run(0.7);
assert.equal(volleys(h, u)[0].filter((c) => c.dmg.isAttack).length, 1);
assert.equal(volleys(h, u)[0].filter((c) => c.dmg.tags.includes('funnel')).length, 2);
// Controlled input keeps S1 off while its deployment-time talent progresses.
h.b.addBuff(u, { key: 'test:no-skill', flags: { silence: true } });
h.run(65);
assert.equal(u.mem.wolfStage, 3);
const last = volleys(h, u).at(-1);
assert.equal(last.filter((c) => c.dmg.isAttack).length, 1);
assert.equal(last.filter((c) => c.dmg.tags.includes('funnel')).length, 3);
done(h);
}
});
test('Minimalist charged S2: two body hits and two drone additions share one talent roll and one attack action', () => {
for (const id of ['chess_char_3_13_a', 'chess_char_3_13_b']) {
const { h, u } = field({ chessId: id });
u.skill.gainSp(999);
h.run(2);
const vs = volleys(h, u).filter((v) => v[0].dmg.isSkill);
assert.ok(vs.length > 0);
for (const v of vs) {
assert.equal(v.length, 4);
const body = v.filter((c) => c.dmg.isAttack), drone = v.filter((c) => c.dmg.tags.includes('funnel'));
assert.equal(body.length, 2); assert.equal(drone.length, 2);
near(body[0].amount, body[1].amount, 'same talent roll on both body hits');
near(drone[0].amount, drone[1].amount, 'same ramp and talent roll on both drone hits');
assert.ok(drone[0].amount / body[0].amount <= u.profile.funnel.max + 1e-6);
}
done(h);
}
});
test('released Kjera S2 locks retain their existing volley count; no body is added once per lock', () => {
for (const id of ['chess_char_3_20_a', 'chess_char_4_03_a']) {
for (const count of [1, 2]) {
const { h, u } = field({ chessId: id });
if (count === 2) h.spawn('enemy_dummy', { pos: [11, 6] });
u.skill.gainSp(999);
h.run(2);
const vs = volleys(h, u).filter((v) => v[0].dmg.isSkill);
assert.ok(vs.length > 0);
for (const v of vs) assert.equal(v.length, 2, `${id}: existing two released drones`);
done(h);
}
}
});
test('one attached volley: attack-SP, attack equipment and afterHit fire once while two damage instances share attackId', () => {
const h = makeBattle({
content: 'full', autoFinish: false, captureNoisy: true, hooks: ['damaged', 'attack'],
defs: {
chess: { test_funnel: chessRec({ id: 'test_funnel', profession: 'CASTER', subProf: 'funnel',
rangeGrid: [[0, 0], [0, 1], [0, 2]], stats: { atk: 100, bat: 2 },
skill: { spType: 'INCREASE_WHEN_ATTACK', spCost: 100, initSp: 0 } }) },
enemies: { enemy_dummy: enemyRec({ key: 'enemy_dummy', hp: 10000, speed: 0, mass: 0 }) },
},
units: [{ uid: 1, chessId: 'test_funnel', row: 10, col: 4, items: ['chess_item_4_03_e_a'] }],
});
h.step();
const u = h.unit(1), e = h.spawn('enemy_dummy', { pos: [10, 6] });
const callbacks = [];
// Read-only callback observer on the controlled profile; no damage or attack is added by it.
u.profile.afterHit = (b, source, target, ctx) => callbacks.push({ source, target, dealt: ctx.dealt });
h.run(0.7);
const hits = mine(h, u);
assert.equal(hits.length, 2);
assert.equal(hits[0].dmg.attackId, hits[1].dmg.attackId);
assert.equal(h.hooksOf('attack').length, 1);
assert.equal(u.stats.attacks, 1);
assert.equal(u.skill.spType, 'attack');
near(u.skill.spTotal, 1, 'one attack-SP gain');
assert.equal(u.s.aspd, u.base.aspd + 1, 'one accelerator stack');
assert.equal(callbacks.length, 1);
near(callbacks[0].dealt, 120, 'afterHit receives the combined actual HP damage');
near(10000 - e.hp, 120, 'body and addition HP damage');
done(h);
});
test('damage equipment: Pegasus riders stay bounded and burn sees both arts components without recursive attack events', () => {
for (const items of [['chess_item_6_01_e_a', 'chess_item_5_09_e_a'], ['chess_item_4_09_e_a']]) {
const { h, u, e } = field({ chessId: 'chess_char_2_10_a', items });
h.run(0.7);
const main = mine(h, u).filter((c) => c.dmg.attackId > 0);
assert.equal(main.length, 2, 'body plus drone');
assert.equal(main[0].type, 'arts'); assert.equal(main[1].type, 'arts');
assert.equal(h.hooksOf('attack').length, 1, 'riders are not extra attack actions');
if (items.length === 2) {
const riders = mine(h, u).filter((c) => c.dmg.tags.includes('item:pegasus'));
assert.equal(riders.length, 2, 'one rider per component; no recursion');
assert.ok(riders.every((c) => c.type === 'true' && !c.dmg.isAttack));
near(1e8 - e.hp, mine(h, u).reduce((sum, c) => sum + c.amount, 0), 'all bounded damage agrees with HP');
} else {
near(e.elem.burn, 0.1 * main.reduce((sum, c) => sum + c.amount, 0), 'burn from body and drone arts damage');
}
done(h);
}
});
test('lethal body or addition: one death and no remaining instances redirected to another target', () => {
for (const hp of [200, 320]) {
const { h, u, e } = field({ chessId: 'chess_char_2_10_a' }, { hp }, { hooks: ['damaged', 'attack', 'death', 'kill'] });
const other = h.spawn('enemy_dummy', { pos: [11, 6] });
h.run(0.7);
assert.equal(e.alive, false);
const hits = mine(h, u);
assert.equal(hits.length, hp === 200 ? 1 : 2);
assert.ok(hits.every((c) => c.target === e));
near(hits.reduce((sum, c) => sum + c.amount, 0), hp === 200 ? 283 : 339.6, 'mitigated amounts before HP clamping');
near(u.stats.dmg, hp, 'damage statistics count only HP actually removed');
near(other.hp, hp, 'no transfer to a spare target');
assert.equal(h.hooksOf('death').filter((c) => c.unit === e).length, 1);
assert.equal(h.hooksOf('kill').filter((c) => c.victim === e && c.killer === u).length, 1);
done(h);
}
});
test('a target killed during projectile flight receives neither the body nor drone on impact', () => {
const { h, u, e } = field({ chessId: 'chess_char_2_10_a' });
assert.ok(h.runUntil(() => h.hooksOf('attack').length === 1, 1));
assert.equal(mine(h, u).length, 0, 'projectile is still flying');
h.b.kill(e, null);
h.run(0.7);
assert.equal(mine(h, u).length, 0);
done(h);
});
test('Minimalist S2: one charge and one talent roll for all four arts instances', () => {
for (const id of ['chess_char_3_13_a', 'chess_char_3_13_b']) {
const { h, u } = field({ chessId: id });
const original = h.b.rng.chance;
let talentRolls = 0;
h.b.rng.chance = (p) => { talentRolls++; return original(p); };
u.skill.gainSp(999);
h.run(0.7);
const hits = mine(h, u);
assert.equal(hits.length, 4);
assert.ok(hits.every((c) => c.type === 'arts' && c.dmg.isSkill));
assert.equal(new Set(hits.map((c) => c.dmg.attackId)).size, 1);
assert.equal(u.skill.activations, 1);
assert.equal(u.skill.charges, u.skill.maxCharges - 1);
assert.equal(talentRolls, 1);
assert.equal(h.hooksOf('attack').length, 1);
done(h);
}
});
test('Siracusa rolls once for each body, while two attached additions and its own riders do not roll again', () => {
const { h, u } = field({ chessId: 'chess_char_6_18_a', skillIndex: 0 }, {}, {
bonds: { siracusaShip: { count: 6, active: true, tier: 2, layers: 0 } },
});
const original = h.b.rng;
let rolls = 0;
h.b.rng = Object.assign(() => { rolls++; return original(); }, original);
h.run(0.7);
const attacks = h.hooksOf('attack').filter((c) => c.attacker === u).length;
assert.ok(attacks > 0);
assert.equal(mine(h, u).filter((c) => c.dmg.tags.includes('funnel')).length, attacks * 2);
assert.equal(rolls, attacks, 'one ordinary-damage roll, no additional/rider recursion');
done(h);
});
+158
View File
@@ -0,0 +1,158 @@
// PRTS 分支特性信息 驭械术师: changing targets or redeploying resets the drone ramp.
// Controlled battle inputs here; the real Match route is covered in test/match/funnel-redeploy.test.js.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { makeBattle, enemyRec, checkInvariants } from '../helpers/battleHarness.js';
const make = (id = 'chess_char_2_10_a', extra = []) => makeBattle({
units: [{ chessId: id, row: 10, col: 4 }, ...extra],
defs: { enemies: { dummy: enemyRec({ key: 'dummy', hp: 1e7, speed: 0 }) } },
enemies: [{ key: 'dummy', pos: [10, 6] }], timeLimit: 300, autoFinish: false,
hooks: ['damaged'], captureNoisy: true,
});
const hits = (h, u) => h.hooksOf('damaged').filter((c) => c.source === u && c.target.side === 'enemy');
const steps = (h, u) => hits(h, u).filter((c) => c.dmg?.tags?.includes('funnel'));
const near = (a, b) => assert.ok(Math.abs(a - b) < 1e-8, `${a} != ${b}`);
const ramp = (h, u) => {
h.runUntil(() => steps(h, u).length >= 8, 30);
assert.ok(steps(h, u).length >= 8);
};
for (const id of ['chess_char_2_10_a', 'chess_char_2_10_b', 'chess_char_4_03_a', 'chess_char_4_03_b']) {
test(`${id}: same living target starts at the configured initial scale after automatic redeployment`, () => {
const h = make(id), u = h.unit(id);
ramp(h, u);
const e = h.enemies()[0];
assert.ok(u.trait.funnelScale > u.profile.funnel.init);
const before = hits(h, u).length;
h.b.dealDamage(e, u, { amount: 1e7, type: 'true' });
assert.equal(u.alive, false);
h.runUntil(() => u.alive, 100);
assert.equal(u.alive, true);
assert.equal(e.alive, true);
assert.equal(u.trait.funnelTarget, null);
near(u.trait.funnelScale, u.profile.funnel.init);
assert.equal(h.runUntil(() => hits(h, u).length > before, 5), true);
assert.ok(hits(h, u).length > before);
assert.equal(hits(h, u).at(-1).target, e);
near(u.trait.funnelScale, u.profile.funnel.init);
checkInvariants(h.b);
assert.deepEqual(h.b.errors, []);
});
}
for (const id of ['chess_char_3_13_a', 'chess_char_3_13_b', 'chess_char_3_20_a', 'chess_char_3_20_b']) {
test(`${id}: per-target funnel map restarts on redeployment`, () => {
const h = make(id), u = h.unit(id);
ramp(h, u);
const e = h.enemies()[0];
assert.ok(u.trait.funnelMap.get(e.id).s > u.profile.funnel.init);
h.b.retreat(u);
assert.equal(h.b.redeploy(u), true);
assert.equal(u.trait.funnelMap.size, 0);
const before = hits(h, u).length;
assert.equal(h.runUntil(() => hits(h, u).length > before, 5), true);
assert.ok(hits(h, u).length > before);
near(u.trait.funnelMap.get(e.id).s, u.profile.funnel.init);
checkInvariants(h.b);
});
}
test('continuous attacks ramp and cap; changing the living target resets normally', () => {
const h = make(), u = h.unit('chess_char_2_10_a');
ramp(h, u);
near(u.trait.funnelScale, u.profile.funnel.max);
const replacement = h.spawn('dummy', { pos: [10, 5] });
const before = hits(h, u).length;
assert.equal(h.runUntil(() => hits(h, u).length > before, 5), true);
assert.ok(hits(h, u).length > before);
assert.equal(hits(h, u).at(-1).target, replacement);
near(u.trait.funnelScale, u.profile.funnel.init);
});
test('another unit deployment and a free move keep this ramp; unrelated trait state survives redeployment', () => {
const h = make('chess_char_2_10_a', [{ chessId: 'chess_char_1_02_a', row: 12, col: 3 }]);
const u = h.unit('chess_char_2_10_a'), other = h.unit('chess_char_1_02_a');
ramp(h, u);
const scale = u.trait.funnelScale, target = u.trait.funnelTarget;
u.trait.testUnrelated = { value: 7 }; // controlled sentinel: no production trait object may be replaced
const sentinel = u.trait.testUnrelated;
h.b.retreat(other);
assert.equal(h.b.redeploy(other), true);
assert.equal(u.trait.funnelTarget, target);
near(u.trait.funnelScale, scale);
assert.equal(h.b.moveRedeploy(u, 10, 3), true);
assert.equal(u.trait.funnelTarget, target);
near(u.trait.funnelScale, scale);
h.b.retreat(u);
assert.equal(h.b.redeploy(u), true);
assert.equal(u.trait.testUnrelated, sentinel);
near(u.trait.funnelScale, u.profile.funnel.init);
});
test('an old in-flight drone can advance the reset ramp before the first fresh drone lands', (t) => {
for (const drainOld of [false, true]) {
const h = make(), u = h.unit('chess_char_2_10_a');
ramp(h, u);
const e = h.enemies()[0], launches = new Map(), impacts = [], events = [];
const state = () => ({ at: h.b.time, currentSeq: u.deploySeq, scale: u.trait.funnelScale, hp: e.hp });
h.b.on('attack', (c) => {
if (c.attacker !== u) return;
const shot = { kind: 'launch', attackId: h.b._attackSeq, ...state() };
launches.set(shot.attackId, shot);
events.push(shot);
});
h.b.on('deploy', (c) => {
if (c.unit === u) events.push({ kind: 'deploy', target: u.trait.funnelTarget, ...state() });
}, { priority: -1000 });
h.b.on('damaged', (c) => {
if (c.source !== u || c.target !== e || !(c.dmg?.attackId > 0)) return;
const launch = launches.get(c.dmg.attackId);
const hit = { kind: 'impact', attackId: c.dmg.attackId, launchAt: launch?.at,
launchSeq: launch?.currentSeq, ...state(), amount: c.amount, hpBefore: e.hp + c.amount,
addition: !!c.dmg.tags?.includes('funnel'), isAttack: !!c.dmg.isAttack };
impacts.push(hit);
events.push(hit);
});
const volleysLanded = () => new Set(impacts.map((i) => i.attackId)).size;
assert.equal(h.runUntil(() => launches.size === 1, 3), true);
const oldShot = [...launches.values()][0];
assert.equal(impacts.length, 0);
assert.ok(h.b.projectiles.list.some((p) => p.source === u && p.target === e));
if (drainOld) assert.equal(h.runUntil(() => volleysLanded() >= 1, 1), true);
h.b.retreat(u);
assert.equal(h.b.redeploy(u), true);
const seq = u.deploySeq;
assert.equal(h.runUntil(() => impacts.some((i) => i.launchSeq === seq), 2), true);
t.diagnostic(JSON.stringify({ drainOld, events }));
const deployment = events.find((i) => i.kind === 'deploy');
assert.equal(deployment.target, null);
near(deployment.scale, u.profile.funnel.init);
const of = (id) => impacts.filter((i) => i.attackId === id);
const oldParts = of(oldShot.attackId);
const fresh = impacts.find((i) => i.launchSeq === seq);
const freshParts = of(fresh.attackId);
assert.equal(oldParts[0].launchSeq, oldShot.currentSeq);
assert.notEqual(oldParts[0].launchSeq, fresh.launchSeq);
assert.ok(oldParts.at(-1).at <= fresh.at);
assert.equal(oldParts[0].currentSeq, drainOld ? oldShot.currentSeq : seq);
near(oldParts[0].scale, drainOld ? u.profile.funnel.max : u.profile.funnel.init);
near(fresh.scale, u.profile.funnel.init + (drainOld ? 0 : u.profile.funnel.delta));
for (const parts of [oldParts, freshParts]) {
assert.equal(parts.filter((p) => p.isAttack).length, 1);
assert.equal(parts.filter((p) => p.addition).length, 1);
const body = parts.find((p) => p.isAttack);
const add = parts.find((p) => p.addition);
near(body.amount, u.s.atk * u.s.atkScaleMul);
near(add.amount, body.amount * body.scale);
}
const oldSum = oldParts.reduce((s, p) => s + p.amount, 0);
const freshSum = freshParts.reduce((s, p) => s + p.amount, 0);
near(oldShot.hp - oldParts.at(-1).hp, oldSum);
near(oldParts.at(-1).hp, freshParts[0].hpBefore);
near(freshParts[0].hpBefore - freshParts.at(-1).hp, freshSum);
assert.ok(freshParts.at(-1).hp > 0);
checkInvariants(h.b);
assert.deepEqual(h.b.errors, []);
}
});
+53
View File
@@ -0,0 +1,53 @@
// The tile of a target is its position rounded half to even — PRTS 作战机制 「受击方坐标经round函数取整(四舍六入五成双)
// 得到其所属格坐标,按是否属于该格判定」 — not Math.round, which rounds every tie up: an enemy exactly halfway between
// columns 10 and 11 (x = 10.5) is on column 10, one at x = 11.5 on column 12.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { makeBattle, chessRec, enemyRec } from '../helpers/battleHarness.js';
import { roundHalfEven } from '../../server/sim/detmath.js';
import { bodyKeys, bodyOnTile, bodyTileReach } from '../../server/sim/body.js';
import { tileKeyOf } from '../../server/sim/targeting.js';
import { COLS } from '../../server/sim/constants.js';
test('roundHalfEven: ties to the even integer, the rest to the nearest; never −0', () => {
const cases = [[0.5, 0], [1.5, 2], [2.5, 2], [3.5, 4], [10.5, 10], [11.5, 12], [-0.5, 0], [-1.5, -2], [-2.5, -2],
[2.4999999999999996, 2], [2.5000000000000004, 3], [-0.4, 0], [-0, 0], [7, 7], [4503599627370495.5, 4503599627370496]];
for (const [x, want] of cases) assert.ok(Object.is(roundHalfEven(x), want), `${x} → ${roundHalfEven(x)}, want ${want}`);
for (let i = -2000; i <= 2000; i++) {
const x = i / 8, v = roundHalfEven(x), d = Math.abs(x - v);
assert.ok(Number.isInteger(v) && (d < 0.5 || (d === 0.5 && v % 2 === 0)), `${x} → ${v}`);
if (d !== 0.5) assert.equal(v, Math.round(x) + 0, `${x}: away from a tie it is Math.round`);
}
});
test('a point target exactly halfway is on the even tile: bodyKeys, bodyOnTile, bodyTileReach, tileKeyOf', () => {
const e = { x: 10.5, y: 3.5 };
assert.deepEqual(bodyKeys(e), [4 * COLS + 10]);
assert.ok(bodyOnTile(e, 4, 10) && !bodyOnTile(e, 4, 11) && !bodyOnTile(e, 3, 10));
assert.equal(bodyTileReach(e, 4, 10), 0);
assert.equal(bodyTileReach(e, 4, 12), 2);
assert.equal(tileKeyOf(e), 4 * COLS + 10);
assert.equal(tileKeyOf({ x: 11.5, y: 2.5 }), 2 * COLS + 12);
});
test('the battle\'s enemy index puts an enemy at x = 10.5 on column 10, not 11', () => {
const h = makeBattle({
kind: 'boss', content: 'none', autoFinish: false, timeLimit: 60,
defs: {
chess: { t_one: chessRec({ id: 't_one', stats: { atk: 100, blockCnt: 0, maxHp: 1e7 }, rangeGrid: [[0, 0]], skill: null }) },
enemies: { enemy_still: enemyRec({ key: 'enemy_still', hp: 1e8, speed: 0 }) },
},
players: [{ playerId: 'p1', seat: 0, side: 'L', coords: 'field', units: [{ uid: 1, kind: 'chess', chessId: 't_one', row: 1, col: 1 }], bonds: {} }],
});
h.step();
const e = h.spawn('enemy_still', { pos: [3, 10], routeIndex: 0 });
e.x = 10.5;
e.y = 3;
h.step();
e.x = 10.5;
e.y = 3;
const u = h.unit('t_one');
assert.deepEqual(h.b.enemiesInKeys([3 * COLS + 10], u, { canHitFly: true }).map((x) => x.id), [e.id]);
assert.deepEqual(h.b.enemiesInKeys([3 * COLS + 11], u, { canHitFly: true }).map((x) => x.id), []);
});