From cdf2bd5c887a77eb8691aafd5bac7cc17d5efd73 Mon Sep 17 00:00:00 2001 From: sganggs Date: Thu, 8 Oct 2026 21:54:06 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feedback7=20R22-UNBAL:=20a=20pushed=20/=20p?= =?UTF-8?q?ulled=20enemy=20is=20held=20in=20the=20official=20=E5=A4=B1?= =?UTF-8?q?=E8=A1=A1=20(UNBALANCE)=20state=20=E2=80=94=20no=20walking,=20n?= =?UTF-8?q?o=20normal=20attack=20=E2=80=94=20for=20the=20push's=20?= =?UTF-8?q?=E4=BD=8D=E7=A7=BB=E6=97=B6=E9=97=B4=20of=20its=20=E5=8F=97?= =?UTF-8?q?=E5=8A=9B=E7=AD=89=E7=BA=A7=20or=20the=20pull's=20force=20windo?= =?UTF-8?q?w;=20a=20=E9=9D=99=E6=80=81=E5=88=9A=E4=BD=93=20hit=20by=20a=20?= =?UTF-8?q?force=20gets=20the=200.1=20s=20floor;=20the=20client's=20slide?= =?UTF-8?q?=20takes=20the=20same=20game=20time=20(idea=20from=20PR=20#392?= =?UTF-8?q?=20by=20@xcdoge,=20re-implemented=20from=20the=20sources);=20go?= =?UTF-8?q?lden:=2069=20scenarios=20move,=2035=20with=20kills=20/=20leaks?= =?UTF-8?q?=20/=20deaths=20/=20boss=20HP=20(below)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seen: the sim moved a displaced enemy at once and it walked / swung again on the next tick; players compared with the official game (PR #392: 「被推/拉完的敌人会先站住一小会儿再走」). Research (scratchpad report r3): PRTS 失衡位移机制 — a force > 0 puts an enemy in the UNBALANCE state machine with a 0.1 s 失衡硬直 floor, ending when its speed is ≤ 0.1 m/s, on 浮空 or a forced state change; 异常效果图鉴/失衡免疫 「失衡期间无法自主移动、发动攻击、使用技能」; 异常效果 — not an abnormal status (水遁忍者's check still runs); 游戏数据基础 推力-位移近似对应表 位移时间 (whole frames at 30 fps); 推与拉 拉力 「作用时间默认为 1 s;若本次受力 等级 < −1,作用时间改为 0.5 s」, 急停 keeps the state to the window's end; 特殊机制 静态刚体 (0.1 s 保底); 术语释义 浮空. Now: constants.js PUSH_UNBALANCE {−2: 0.2, −1: 0.4, 0: 0.8, 1: 0.9, 2: 32/30, 3: 35/30}, PULL_UNBALANCE 1 / PULL_UNBALANCE_WEAK 0.5, UNBALANCE_MIN 0.1. battle/displacement.js: push() holds for its level's row (the −2 correction included), kept when the 特效 column or a wall shortens the slide [ASSUMED for the wall], the 0.1 s floor when a wall stops it at the first step [ASSUMED]; pull() holds for its window whatever the travel (≤ −3: none; an enemy the puller blocks: still no pull [ASSUMED, unchanged]); a 静态刚体 (data staticBody, not 失衡免疫 noDisplace) hit by force level ≥ −2 gets 0.1 s and no movement (_staticForce); _unbalance sets enemy.unbalanceUntil (a longer running one kept) and ends the attack clip's stand. ai.js updateEnemy: no walking (恐惧 / 诱导 too — PR #392's fear exemption is not taken), no new normal attack, a swing short of its frame cut, 浮空 clears it; a 重生 clears it (archetypes.js reborn). Not a stun: no status, no immunity, SP and the attack cooldown run. No global skill lock: enemy abilities keep ticking ([ASSUMED] scope). The move stays instant (the unbalanced() talents keyed off the jump unchanged). The displace fx carries `dur` (game s); render/units.js slideTo divides it by ctx.animRate (2× default: a 0.8 s push slides 0.4 real s); DISPLACE_SLIDE·√D is only the fallback for an fx without it. Not taken from #392: UNBALANCE_TRAVEL 0.6387·√tiles / the client's 0.3194 (derived from the page's μ = 0.5 单位假设, one frame high on every push row, the wrong shape for pulls) and the fear exemption. Tests: test/sim/unbalance.test.js (8: the push rows and walking after them; no attack in the hold, a feared enemy held; the −2 correction's 0.2 s; 特效 / wall-shortened rows and the first-step floor; pull windows incl. the 急停 and ≤ −3; 静态刚体 0.1 s without movement, 失衡免疫 never; 浮空 clears; the fx `dur` — the file fails on the parent); test/render/unitview.test.js (+1: the slide at 2× for a push and a pull, the fallback — fails on the parent); feedback1b-displacement B5 (the drone is now held 0.1 s per force, never moved). test/sim + test/content + test/render: 3433 pass. Docs: SIM.md (push / pull, displace, assumptions), PLAYING.md 推开 / 拉拽, research 13 §0 / §5. Golden — every moved battle has pushes / pulls (probe of the callers) and its enemies are now held; outcome moves: roster-002 (野鬃: killed 29→33, leaks 15→11), roster-003 (野鬃: deaths 3→7), roster-007 (薄绿: killed 110→118, leaks 53→47), roster-008 (薄绿: 45→47 / 42→40), roster-010 (歌蕾蒂娅: killed 45→44, leaks 57→58), roster-011 (莫斯提马: 78→79 / 4→3), roster-031 (钩索师 pulls, tier4: killed 64→72, leaks 12→4, deaths 6→5), roster-041 (钩索师: deaths 5→4), roster-043 (山: deaths 15→14), roster-044 (山: killed 107→103, leaks 12→16, deaths 15→14); bond-deputShip-low (薄绿: 18→21 killed, leaks 3→0, deaths 1→0), bond-kazimierzShip-high (野鬃: deaths 3→2); boss-boss_3-pair (锏: p2 deaths 3→2), boss-boss_4-pair (莫斯提马 / 歌蕾蒂娅: killed 11→12, boss HP 7442429→7375628, p2 leaks 2→1, deaths 19→18), boss-boss_6-pair (boss HP 6932482→6865243, p2 deaths 19→17), hidden-boss_8-pair (boss HP 12585770→12585798), hidden-boss_9-pair (锏: boss HP 3630612→3636991); standin-05 / 08 / 10 (预备干员-特种 pulls: killed 5→8 / 42→44 / 28→29, leaks down by 3 / 2 / 1); diy-101 (傀影: killed 22→21, leaks 92→93), diy-114 / 115 / 116 (黑键: 106→99 & 83→90 / 154→156 & 78→70 / 3→2 & 120→121), diy-137 (预备干员-特种: 68→79 / 79→68); matches through those battles — coop2-HARD-4, coop2-NORMAL-14-standins, coop2-NORMAL-3, coop2-NORMAL-70-diy, coop3-ABYSS-5, coop4-ABYSS-7, solo-ABYSS-2 (LP 2→4 at round 10), solo-HARD-2 (ai_0 now survives round 13: eliminated 13 → alive), solo-HARD-9-boosted (LP 399→398), solo-NORMAL-1. Other moves (damage, heals, snapshots only): roster-009/012/017/019/032/039/040/042/046, 13 bonds, boss-boss_2-pair, hidden-boss_10-pair, standin-03, diy-053/084/085/102/103/108/109, coop2-ABYSS-10-boosted, solo-ABYSS-1. --- docs/PLAYING.md | 2 +- docs/SIM.md | 8 +- docs/research/13-knockback-official.md | 18 +- public/js/render/app.js | 5 +- public/js/render/units.js | 26 +- server/sim/ai.js | 19 +- server/sim/battle/displacement.js | 76 ++- server/sim/battle/spawns.js | 1 + server/sim/constants.js | 15 + server/sim/content/enemies/archetypes.js | 1 + test/golden/bonds.json | 340 ++++++------ test/golden/diy.json | 319 ++++++----- test/golden/fields.json | 364 ++++++------ test/golden/matches.json | 182 +++--- test/golden/roster.json | 680 +++++++++++------------ test/golden/standins.json | 140 ++--- test/render/unitview.test.js | 18 + test/sim/feedback1b-displacement.test.js | 15 +- test/sim/unbalance.test.js | 151 +++++ 19 files changed, 1295 insertions(+), 1085 deletions(-) create mode 100644 test/sim/unbalance.test.js diff --git a/docs/PLAYING.md b/docs/PLAYING.md index 700f9ed4..fa1bb832 100644 --- a/docs/PLAYING.md +++ b/docs/PLAYING.md @@ -80,7 +80,7 @@ - **阻挡**看接触:干员阻挡中心距离约 0.7 格以内、与它接触的敌人(地面干员挡不住飞行和近地悬浮的敌人)。敌人卡在两名干员之间时,阻挡它的干员倒下、撤退或被晕眩后,另一名仍与它接触、还有空余阻挡数的干员会**立刻接替阻挡**;都没有空位时敌人才会走掉。被冻结或晕眩的敌人同样会被接触到的干员挡住:干员再部署到它身边就会阻挡它,隐匿的敌人也随之破隐(沉睡、浮空、恐惧的敌人仍然挡不住)。迎面走来的敌人会停在干员格子前面。**阻挡了就一定能打到**:任何干员(包括站在近战位的远程干员和召唤物)总能攻击自己阻挡的敌人,不管它在不在攻击范围内、在干员哪一侧,并且优先攻击它——只有速射手例外:攻击范围内有飞行敌人时先打飞行敌人(特性「优先攻击空中单位」,维护者 2026-10-08 的决定,GitHub #220)(医疗干员除外:咒愈师以外的医疗挡住敌人时照常治疗队友,不会攻击它;「停止攻击」类技能期间也除外;技能原文另有限制的也按原文:普罗旺斯二技能开启时不以生命值高于 80% 的敌人为目标,寒檀二技能的冰凌随机落在攻击范围内的地块上)。 - 开战时干员按**逐列从左到右、每列从上到下**的顺序部署(最左一列最先,与阿戈尔吞噬「更靠左和靠上」的顺序相同),召唤物在所有干员之后。被阻挡的敌人先打阻挡它的干员;没被阻挡的远程敌人先打嘲讽等级高的,同级时打最后部署的(召唤物、最右一列靠下的干员和刚再部署的干员更容易挨打)。隐匿的干员只会被它阻挡的敌人攻击,没被它挡住的敌人的溅射、爆炸、范围技能、留下的伤害区域(包括假想敌:蚀裂被击倒后喷出的毒雾)以及深池伙友卫队、扎罗的减攻速光环也落不到它身上(和官方一样;写明「无视无法选择」的效果如污染秽蚀照常能打到,寒霜的减攻速光环和“墓碑”这类地图效果照常生效);**迷彩**(如忍冬三技能期间击倒敌人后、寒芒克洛丝一技能)同样只会被它阻挡的敌人攻击,也显示为半透明,但躲不开溅射、爆炸和范围伤害(同时打范围内所有单位的普通攻击——如“斩胄之剑”“破胄之锤”“灵幛”——打不到它),也不算隐匿(不触发叙拉古等「隐匿时」效果)。叙拉古的隐匿按时(32 秒 + 每层 0.4 秒)结束;忍冬的迷彩按官方持续到她下一次开技能。**蒂比起飞**期间只挡飞行敌人,地面敌人不会选她为目标(普通攻击、溅射、技能范围、燃烧区域和要选中目标的减益都落不到她身上);飞行和悬浮敌人、写明「无视无法选择」的效果(如污染秽蚀)照常能打到她;地面敌人的光环和全场效果(如“墓碑”让全场攻击力、防御力减半)、她攻击敌人时招来的反制(如重装侦察兵的暴露)照常生效,起飞前已挂上的持续伤害也照常跳。 - **技能自动释放**按官方「技能策略」:一般的手动技能在技能就绪、即将攻击 / 治疗且初始攻击范围内有敌人(治疗技能:有受伤的队友)时释放;**带独立技能范围**的技能(如德克萨斯「剑雨」、凛御银灰「御敌的锋锐」、锏「归于宁静」,不含「攻击范围扩大」类)在**技能范围内出现敌人**时就释放,不必先攻击;**开启后攻击范围比平时大**的手动技能(如莫斯提马「序时之匙」、银灰「真银斩」、史尔特尔「黄昏」、白面鸮「脑啡肽」)在**开启后的攻击范围内出现敌人**(治疗技能:有受伤的队友)时就释放,不必等敌人走进平时的攻击范围,这是本作按玩家反馈有意与官方不同的地方;**重装干员**的手动技能在受到伤害时释放(例外:深巡、雷蛇的二技能,号角的二、三技能,灰毫的一、二技能按玩家反馈改为攻击范围内有敌人时就释放(深巡二技能按开启后更远的攻击范围判断),余的二技能「厚礼上宾」改为周围两格(技能范围)内有敌人时就释放,这是本作有意与官方不同的地方;深巡一技能仍要受到伤害);执旗手 / 战术家 / 吟游者技能就绪即释放,解放者 / 阵法术师在初始攻击范围内有敌人时释放(开启后攻击范围扩大的技能——薄绿「风语」、蜜蜡「沙暴扩散」、卡涅利安「食噬之印」、玛恩纳「未宽解的悲哀」,以及安洁莉娜「秘杖·反重力模式」——同样按开启后的攻击范围判断)。**自动触发**的技能按其本身规则:只作用于队友的(如引星棘刺「度算浪波」、浊心斯卡蒂「同葬无光之愿」、纯烬艾雅法拉「无声润物」)技力满就释放,不用等敌人或伤员;立即生效、本身不是一次攻击的技能(如度算浪波、先锋的回费技能)两次释放之间至少隔一个攻击间隔(释放本身不占用普通攻击),攻速越快放得越勤,迅捷返还的技力再多也不会每一帧都放(GitHub #298);伺夜「领袖的呼唤」「领袖的馈赠」只在场上有狼群时释放:狼群处于战术点形态时,「领袖的呼唤」也会释放并让它立刻带着 1 只狼影回到场上(狼影未满时改为加 1 只狼影,已满时把狼群的生命值回满),「领袖的馈赠」也会释放(立即获得费用,强化留给回来的狼群的下一次攻击);又如古米「备用军粮」在身边(技能范围内)有受伤的队友时就会发动,下一次攻击改为治疗该队友(不用先接敌;她的二技能「食粮烹制」是手动技能,按重装规则在受到伤害时释放);塞雷娅「急救」在她即将攻击时、身边有生命不高于一半的队友才发动,这次攻击直接改为治疗;新约能天使二技能的护盾按官方给攻击范围内**仇恨最高**的队友(嘲讽等级高的优先,同级时给最后部署的),不一定是站在最前面挨打的那个。手动技能的自动释放有 3 秒冷却:开战部署后先等 3 秒,之后同一干员两次自动释放至少间隔 3 秒(可充能的技能不会同时放完)。白铁的「铁钳号·原型机」能被我方干员攻击(不受伤害):它在攻击范围 / 技能范围内时,能作用到它的技能会像遇到敌人一样自动开启并消耗弹药(项目维护者 2026-10-08 按官方体验确认;白铁™多功能平台不会被攻击);技能效果只会挑选敌人、打不到它的技能(如德克萨斯「剑雨」)不会为它开启,留给真正的敌人。 -- **推开 / 拉拽**按官方「力度 − 重量」决定距离:例如野鬃二技能(中等力度)把重量 0 / 1 / 2 / 3 的敌人推开约 2.1 / 1.7 / 0.4 / 0.1 格,重量 4 以上推不动——轻型敌人反而推得更远。野鬃二技能沿她的朝向推开:正前方 45° 以内按上面的距离,身后、侧面或贴身的敌人只被轻推一下(约 0.4 格以内);琳琅诗怀雅三技能的金币则从她身边向外推开,落在她前方 2–4 格的范围(官方「范围2-4」)内的地面敌人和她阻挡的敌人身上。攻击速度最低为 20(沼泽、寒霜等减速叠满时也不会更慢)。 +- **推开 / 拉拽**按官方「力度 − 重量」决定距离:例如野鬃二技能(中等力度)把重量 0 / 1 / 2 / 3 的敌人推开约 2.1 / 1.7 / 0.4 / 0.1 格,重量 4 以上推不动——轻型敌人反而推得更远。野鬃二技能沿她的朝向推开:正前方 45° 以内按上面的距离,身后、侧面或贴身的敌人只被轻推一下(约 0.4 格以内);琳琅诗怀雅三技能的金币则从她身边向外推开,落在她前方 2–4 格的范围(官方「范围2-4」)内的地面敌人和她阻挡的敌人身上。被推开、拉动的敌人会进入官方的**失衡**状态,这段时间里不走路、也不发动普通攻击:推开按力度减重量的档位持续 0.2–约 1.17 秒(中等力度推重量 1 的敌人为 0.8 秒),拉拽持续 1 秒(力度比重量低 2 档时 0.5 秒,拉到身前后也一样),推不动的空中单位(静态刚体)受力时也会停顿 0.1 秒;浮空会立刻解除失衡。画面上的滑行也用同样的时间(默认 2 倍速下现实时间减半)。攻击速度最低为 20(沼泽、寒霜等减速叠满时也不会更慢)。 - **生命回复不是治疗**(与官方一致):吟游者的特性(魔王、浊心斯卡蒂及其海嗣)、调香师的天赋、瑕光二技能、铃兰三技能、锡人和引星棘刺(一、二技能)的炼金单元给友军的「每秒恢复生命」是提高对方的**生命回复速度**,不是治疗:收割者 / 不屈者 / 武者(如隐德来希、圣约送葬人、折桠)这类「无法被友方治疗」的干员和处于禁疗的干员也能吃到,治疗量加成(如「受到的治疗效果提升」)也不会放大它;铃兰三技能开启后的第一秒没有回复。直接治疗(医疗干员的治疗、技能的「恢复…生命」)仍然对这些干员无效。 - **元素损伤条**在单位自己的血条正下方:左边是元素图标,白条是剩余的元素值,只有真正爆发时才会耗尽;爆发后条变成元素的颜色、图标闪烁,在冷却期间慢慢回满(这段时间不会再积累元素损伤)。 - **弹药、狼影和「我执」**也画在血条上(0.2.2):弹药类技能(如隐现的二技能,14 发)开启时,血条下方的技力条换成**分格的黄色弹药条**——一格一发,打一发少一格,补弹时回来;这类技能开启期间脚下不再有持续的金色光环。伺夜的狼群在血条下方有一排**菱形**,亮的是剩下的狼影,暗的是已用掉的空位(最多 3 个),进入战术点形态时消失。斩业星熊进入「我执」后,绿色血条停在 1 点,超出的伤害涨成血条上的**红条**,红条满了才会倒下。这些只是显示,不改变任何战斗数值。 diff --git a/docs/SIM.md b/docs/SIM.md index 7300ccdd..2c8c46d8 100644 --- a/docs/SIM.md +++ b/docs/SIM.md @@ -896,8 +896,8 @@ instance) and skip `'counter'` / `'reflect'` damage. When the guard trips, the l | `moveRedeploy(unit, r, c, { clearSp })` | a 【移动】 (PRTS 术语释义: "不退场,以当前血量在目标位置部署", a special retreat + redeploy): `relocate`'s checks (false = refused, nothing changed), then a new deployment (`deploySeq` / `aggroSeq` / `deployedAt`) and `deploy {initial:false, move:true}` (deploy effects fire again); no `die` / `death`, timer or cost (不屈 / 阿戈尔's revive never see it); HP, buffs and a running skill are kept (owner's deviation, DESIGN §22.3); `clearSp` empties the SP before the deploy handlers run — 乌尔比安 S3's move (kits/ops/chess_char_5_05-ulpia.js) and 【返回】 (`clearSp`; also the 从不混淆的方向 fallback, content/tokens.js) | | `redeploy(unit, { free=true, tile, keepSp })` | immediate (re)deployment of a dead/retreated ally (full HP, `deploy {initial:false}`); `free: false` pays `base.cost` DP (refused without it); without `tile` it lands on the unit's rest tile (`restTile`: where a knocked-out operator lies, else home); `tile: [r, c]` lands on that tile once (home unchanged; refused when off-rect, occupied or a knocked-out operator's tile, no fallback); `keepSp` keeps SP/charges (保留技力), restored before `deploy` fires — but not for a skill that costs no SP, which the reset re-arms as at every deployment (伊内丝 S3 casts again on a 突袭 landing) — 突袭 raids, 阿戈尔 / 不屈 revives where the unit lies | | `refreshRange(unit)`, `setExtraRange(unit, keys)`, `rangeChanged(unit)` | rebuild the ranges after changing `unit.rangeGrid` (流形 copies); extra targetable tiles (absolute keys; merged into every later rebuild until set again; `null` clears; never in `baseRangeKeys`): 蕾缪安 wanted, 维娜 S3 | -| `push(enemy, force, {from, dir, fixed, fixedAngle, inward, effect})`, `pull(enemy, force, {to, center, stop})`, `pullToFront(enemy, unit, force)`, `forceLevel(enemy, force)`, `pushDistance(enemy, force, {effect})` | the official 位移 (PRTS 游戏数据基础 §重量公式 / 推与拉; user playtest #6 item 14): 受力等级 = 力度 (微小力 −1, 小力 0, 中力 1, 较大力 2, 大力 3 …) − current 重量等级 (massLevel, 失重 counts). Push distance per level (`constants.js PUSH_TILES`, PRTS 推与拉's 弹道 column): ≤ −3 → 0, −2 → 0.12, −1 → 0.44, 0 → 1.7, 1 → 2.14, 2 → 2.96, ≥ 3 → 3.53 tiles; `effect` = a 特效 push (`PUSH_TILES_EFFECT`: −2 → 0.085, −1 → 0.374, 0 → 1.562, 1 → 1.987, 2 → 2.773, ≥ 3 → 3.331 — 见行者 S1 / S2, `PUSH_EFFECT_SKILLS`; every other pusher uses the 弹道 column [ASSUMED]); radial (away from `from`; the client's buff template `knockback[relative]`: 莫斯提马 S3, 山 S3, 琳琅诗怀雅 S3 — also PRTS 备注 "推开效果为径向推动") unless `dir` (directional; template `knockback[dir]` = Knockback {`_useSourceDirection` true, `_decreaseForceLevelWhenNotInDirection` 2}: 推击手, 野鬃 S2 "往攻击方向" (charpack char_496_wildmn: buff `wildmn_s_2[force]`) — > 45° off or < 0.25 tile ⇒ radial and level −2; `fixed` waives both (圣聆初雪 S1 朝部署方向, `KnockBackWithCharacterDirection`), `fixedAngle` only the angle (见行者 S2)); `inward` = a push towards `from` (薄绿 S2), stopping at the 急停 radius. Pull: level ≥ 0 → to `to` / the 急停 radius around `center`, −1 → 35 % of the way, −2 → 0.03, ≤ −3 → 0; `pullToFront` aims at the 拉力起点 0.5 tile ahead of the unit with the 急停 radius 0.6708 around it (never moves an enemy the unit itself blocks — nor does a pull towards an ally's centre, e.g. the 流形 S3 pulse) A 静态刚体 (data `staticBody`: every air unit of the mode except “炎佑”, plus 昆图斯 — PRTS 特殊机制 "可以进入失衡状态…但物理层面上无法产生任何速度或移动", "与单位的行动方式无关") moves 0 from every source while the skills that reach it still hit it (薄绿 S2, 锏 S3, the 钩索师 …; player report after 0.1.0) | -| `displace(enemy, {x, y}, tiles)` | the raw mover behind push / pull: along passable tiles (by `motion`: FLY in the rect, else ground-passable), no weight rule; nothing for 失衡免疫 (`noDisplace`: 近地悬浮 incl. 喷气人's 飞行模式, 浮空, the 胄 parts, 守墓石像's statue and flight), 静态刚体 (`def.staticBody`) and leaders (`_displaceable`); unblocks + re-paths | +| `push(enemy, force, {from, dir, fixed, fixedAngle, inward, effect})`, `pull(enemy, force, {to, center, stop})`, `pullToFront(enemy, unit, force)`, `forceLevel(enemy, force)`, `pushDistance(enemy, force, {effect})` | the official 位移 (PRTS 游戏数据基础 §重量公式 / 推与拉; user playtest #6 item 14): 受力等级 = 力度 (微小力 −1, 小力 0, 中力 1, 较大力 2, 大力 3 …) − current 重量等级 (massLevel, 失重 counts). Push distance per level (`constants.js PUSH_TILES`, PRTS 推与拉's 弹道 column): ≤ −3 → 0, −2 → 0.12, −1 → 0.44, 0 → 1.7, 1 → 2.14, 2 → 2.96, ≥ 3 → 3.53 tiles; `effect` = a 特效 push (`PUSH_TILES_EFFECT`: −2 → 0.085, −1 → 0.374, 0 → 1.562, 1 → 1.987, 2 → 2.773, ≥ 3 → 3.331 — 见行者 S1 / S2, `PUSH_EFFECT_SKILLS`; every other pusher uses the 弹道 column [ASSUMED]); radial (away from `from`; the client's buff template `knockback[relative]`: 莫斯提马 S3, 山 S3, 琳琅诗怀雅 S3 — also PRTS 备注 "推开效果为径向推动") unless `dir` (directional; template `knockback[dir]` = Knockback {`_useSourceDirection` true, `_decreaseForceLevelWhenNotInDirection` 2}: 推击手, 野鬃 S2 "往攻击方向" (charpack char_496_wildmn: buff `wildmn_s_2[force]`) — > 45° off or < 0.25 tile ⇒ radial and level −2; `fixed` waives both (圣聆初雪 S1 朝部署方向, `KnockBackWithCharacterDirection`), `fixedAngle` only the angle (见行者 S2)); `inward` = a push towards `from` (薄绿 S2), stopping at the 急停 radius. Pull: level ≥ 0 → to `to` / the 急停 radius around `center`, −1 → 35 % of the way, −2 → 0.03, ≤ −3 → 0; `pullToFront` aims at the 拉力起点 0.5 tile ahead of the unit with the 急停 radius 0.6708 around it (never moves an enemy the unit itself blocks — nor does a pull towards an ally's centre, e.g. the 流形 S3 pulse) A 静态刚体 (data `staticBody`: every air unit of the mode except “炎佑”, plus 昆图斯 — PRTS 特殊机制 "可以进入失衡状态…但物理层面上无法产生任何速度或移动", "与单位的行动方式无关") moves 0 from every source while the skills that reach it still hit it (薄绿 S2, 锏 S3, the 钩索师 …; player report after 0.1.0). **失衡 (UNBALANCE)** (PR #392's idea, its timing re-done from the sources): the move stays instant, then the enemy is held in the 失衡 state — a state machine, not a status (PRTS 失衡位移机制; 异常效果 「失衡…不属于异常效果」: no stun, no immunity, SP untouched), `enemy.unbalanceUntil`, read by `ai.js updateEnemy`: no walking (恐惧 / 诱导 included — no fear exemption) and no normal attack started, a swing short of its frame cut, the attack clip's stand ended; checks that ignore the state (水遁忍者's damage, content abilities) go on — no global skill lock ([ASSUMED] scope: 失衡免疫's 「无法…使用技能」 is not modelled). Length, game seconds: a push — the 位移时间 of its 受力等级, PRTS 游戏数据基础 推力-位移近似对应表 (`constants.js PUSH_UNBALANCE`: −2 → 0.2, −1 → 0.4, 0 → 0.8, 1 → 0.9, 2 → 32/30, ≥ 3 → 35/30), the level push() computes (the −2 correction included), kept when the 特效 column or a wall shortens the slide ([ASSUMED] for the wall; a wall at the first step → the 0.1 s floor [ASSUMED]); a pull — its force window, 推与拉 「作用时间默认为 1 s;若本次受力等级 < −1,作用时间改为 0.5 s」 (`PULL_UNBALANCE` / `_WEAK`), to its end after the 急停 too (「目标将仍保持失衡状态至拉力作用时间结束为止」), none at ≤ −3; a 静态刚体 hit by a force > 0 — the 0.1 s 失衡硬直 floor (`UNBALANCE_MIN`, 特殊机制 静态刚体), no movement; 失衡免疫 and leaders never. 浮空 ends it (术语释义 浮空), so does a 重生. The `displace` fx carries the length (`dur`): the client's slide takes as long (render/units.js slideTo). PR #392's 0.6387·√tiles (from the page's μ = 0.5 单位假设) and its fear exemption are not taken | +| `displace(enemy, {x, y}, tiles, {dur})` | the raw mover behind push / pull: along passable tiles (by `motion`: FLY in the rect, else ground-passable), no weight rule, no 失衡 state of its own (push / pull add it; `dur` only rides on its `displace` fx); nothing for 失衡免疫 (`noDisplace`: 近地悬浮 incl. 喷气人's 飞行模式, 浮空, the 胄 parts, 守墓石像's statue and flight), 静态刚体 (`def.staticBody`) and leaders (`_displaceable`); unblocks + re-paths | | `after(seconds, fn, {owner})`, `every(seconds, fn, {owner, immediate})` | return `{cancel()}`; fn(battle, sched) | | `fx(kind, params)`, `rng()` (+ `rng.int/range/chance/pick/shuffle/weighted`) | never use Math.random; for distances, angles and powers use `hypot`, `sin`, `cos`, `atan2`, `powi` from `server/sim/detmath.js`, never `Math.hypot` / `sin` / `cos` / `atan2` / `pow` / `**` (their last bits differ between browsers) | | `forceAttack(unit, targets?, { noAmmo })` | an immediate attack with the current profile (hooks, attack SP, a running ammo skill's bullet); `noAmmo: true` = spends no bullet and emits no `ammoUsed` (圣约送葬人 extra attack). Returns true when it attacked | @@ -1503,8 +1503,8 @@ id, `loadout` the selection with `diy` = the checked pick `{ charId, skillIndex, `diy` (spec.js keeps `charId` / `skillIndex` / `uniEquipId` when well-formed); Battle fields a DIY slot only with a legal pick (none ⇒ no unit), and each unit resolves its own pick — two players filling one slot id differently are exact. Assumptions taken here (documented choices): element burst numbers for necrosis/apoptosis; unspawned enemies at timeout -are dropped (not leaks); geek drain is non-lethal; tactician reinforcement stats; displacement is instantaneous (the official 失衡 slide over ≈ 0.4–1.2 s is not -modelled — only its distance, `push` / `pull`); pushes PRTS does not classify use the 弹道 distance column (`PUSH_TILES`); +are dropped (not leaks); geek drain is non-lethal; tactician reinforcement stats; displacement is instantaneous, followed by the 失衡 hold (push: the 位移时间 table; pull: the force +window — `push` / `pull`; a wall-shortened slide keeps its row time, a wall at the first step gets the 0.1 s floor); pushes PRTS does not classify use the 弹道 distance column (`PUSH_TILES`); platforms/mounds are ground obstacles that elevate operators; the generic kit maps 凋亡 to `apoptosis` (侵蚀 has no element key yet — enemy content must pick one); 抵抗 covers the control statuses of `RESIST_STATUSES` (the official term lists 晕眩/寒冷/ 冻结/恐惧/诱导…, the rest follow the operator kits that grant it) and caps at 0.95; tactical points prefer enemy path tiles. diff --git a/docs/research/13-knockback-official.md b/docs/research/13-knockback-official.md index 19d20d2d..c7598e02 100644 --- a/docs/research/13-knockback-official.md +++ b/docs/research/13-knockback-official.md @@ -14,7 +14,8 @@ | 摩擦是谁的参数 | **地板(地形)+ 单位质量**,**不是**技能参数:`GrasslandType { NORMAL_LAND, ICE_LAND, SLIME_LAND }`,每格是一条 `GrasslandData { modeIdx, grasslandType, additionalFriction }`,运行时还会被 `UpdateFrictionFactor` / `RestoreFrictionFactor` 临时改写 | | 卫戍协议里有几种地板 | **实际只有普通地面**:11 张地图共 18 种格子字符,无冰面/黏液 ⇒ 本模式下摩擦恒定,滑行时长**不必按地板分档** | | 飞行目标怎么算 | **没有独立的空中摩擦**(`boatAirFactor` / `m_airBase` 属于"船"玩法):飞行用的是**同一套**公式(单位摩擦 × 所在格子的 `additionalFriction`);差别只在**运动模式**(`ENEMY_MOTION_TYPE_FLY`、`HEIGHT_CHANGED_TO_FLY_BLOCK_MOTION_MODE` ⇒ 忽略地面阻挡),以及**失衡免疫 / 静态刚体**的空中单位根本不可位移 | -| 曲线形状 | 恒定减速 ⇒ `d/D = 2k − k²`(ease-out quad)、`T ∝ √D`;客户端用的 `T = 0.14·√D`(夹 0.12–0.45 s)是我们拟定的 [ASSUMED],没有来源给出官方时长 | +| 曲线形状 | 恒定减速 ⇒ `d/D = 2k − k²`(ease-out quad) | +| 推多久 / 拉多久 | **失衡(UNBALANCE)状态机**的时长(0.2.2,PR #392 的思路、按来源重做):推 = PRTS 游戏数据基础「推力-位移近似对应表」的**位移时间**(受力等级 −2/−1/0/1/2/≥3 → 0.2 / 0.4 / 0.8 / 0.9 / 32⁄30 / 35⁄30 游戏秒,正好是 30 fps 的整帧);拉 = 推与拉的**拉力作用时间**(1 s,受力等级 < −1 时 0.5 s,急停后仍保持到结束);静态刚体受力 > 0 时 0.1 s 保底。客户端滑行用同一段游戏时间(默认 2 倍速 ⇒ 现实时间减半);`T = 0.14·√D` 只留作旧录像(fx 不带 `dur`)的回退 [ASSUMED] | ## 1. 官方类与字段(`global-metadata.dat`) @@ -101,14 +102,17 @@ p ×77(预览栏) d ×76(装置) S ×66(起点) I / E ×33(路 ## 5. 客户端的做法(本次实现) -`render/units.js`:模拟位移是**瞬时**的(`sim/battle/displacement.js` 在一次调用里走完 0.1 格步进),快照只带终点, -所以客户端补上中间帧——`UnitView.slideTo(x, y, { friction })` 建立一次滑行,`update()` **逐帧做速度积分** +`render/units.js`:模拟位移是**瞬时**的(`sim/battle/displacement.js` 在一次调用里走完 0.1 格步进),随后敌人处于 +**失衡状态**(0.2.2:不走路、不发动普通攻击,时长见 §0「推多久 / 拉多久」),快照只带终点, +所以客户端补上中间帧——`UnitView.slideTo(x, y, { dur, friction })` 建立一次滑行,`update()` **逐帧做速度积分** (`v ← max(0, v − a·dt)`、`d ← d + v·dt`),终点由模拟给出(**权威**),`v0 = 2D/T`、`a = v0/T` 保证 -`T` 秒内正好走完 `D` 且速度归零 —— 即官方"冲量 + 摩擦"的等效形式;`T = 0.14·√D`(夹 0.12–0.45 s)是我们拟定的 -[ASSUMED](让画面按模拟的距离到位;没有来源给出官方时长),`friction` 是**地板因子**(本模式恒为 1;将来有冰面就乘 -< 1 ⇒ 滑得更久)。`render/app.js` 在插值器开始显示「以带终点的快照结尾」的那一段时就用 `displace` fx 启动滑行: +`T` 秒内正好走完 `D` 且速度归零 —— 即官方"冲量 + 摩擦"的等效形式;`T` = `displace` fx 带来的失衡时长 `dur`(游戏秒)÷ +播放倍率(`ctx.animRate`,默认 2 ⇒ 受力等级 0 的推 0.8 游戏秒 = 0.4 现实秒),滑行结束时模拟的失衡也正好结束;fx 不带 +`dur`(0.2.2 以前的录像)时才回退到 `T = 0.14·√D`(夹 0.12–0.45 s)[ASSUMED]。`friction` 是**地板因子**(本模式恒为 1;将来有冰面就乘 +< 1 ⇒ 滑得更久)。PR #392 的 `0.6387·√格` / `0.3194` 是用 PRTS 页面的「μ = 0.5 单位假设」推出来的,页面没有写出、也对不上 +位移时间表(每档高约一帧),未采用。`render/app.js` 在插值器开始显示「以带终点的快照结尾」的那一段时就用 `displace` fx 启动滑行: 到达那张快照之前画面停在原处,之后从原处减速滑入模拟的实时位置(终点,以及敌人随后继续走的路),落地不跳。 -**模拟层、协议、golden 一律未改。** +(PR #380 合入时模拟层、协议、golden 未改;0.2.2 的失衡状态改了模拟层,`displace` fx 多带一个 `dur`。) 滑行途中死亡:滑行照常走完,尸体停在被推到的位置(模拟里它已经在那里;0.2.2 合入时改掉了原 PR 的「回到出发格」); 倒地的单位交给 `setDown` 放到它的格子上。 diff --git a/public/js/render/app.js b/public/js/render/app.js index e90cc4c8..bcf09699 100644 --- a/public/js/render/app.js +++ b/public/js/render/app.js @@ -1453,7 +1453,7 @@ export async function createFieldView(host, options = {}) { if (e[1] === 'displace') { const d = e[4] && typeof e[4] === 'object' ? e[4] : null; const v = d && d.id != null ? views.get(d.id) : null; - if (v && v.slideTo) v.slideTo(Number(e[2]), Number(e[3])); + if (v && v.slideTo) v.slideTo(Number(e[2]), Number(e[3]), Number(d.dur) > 0 ? { dur: Number(d.dur) } : {}); } // an enemy's mode change — the `form` of a sim setForm fx (shared/protocol.js fxForm: 掠海漂移体 → 爬行模式, user // playtest #5 item 1; 转译基底's forms, a 逐火 ember and its revival, the leaders' 重生, 守墓石像 — user report after @@ -1513,7 +1513,8 @@ export async function createFieldView(host, options = {}) { if (!Array.isArray(e) || e[0] !== 'fx' || e[1] !== 'displace') return; const extra = e[4] && typeof e[4] === 'object' ? e[4] : null; const v = extra && extra.id != null ? views.get(extra.id) : null; - if (v && v.slideTo) v.slideTo(Number(e[2]), Number(e[3]), { at: slideAt }); + // `dur`: the push / pull's 失衡 time in game seconds (battle/displacement.js) — the slide's length + if (v && v.slideTo) v.slideTo(Number(e[2]), Number(e[3]), Number(extra.dur) > 0 ? { at: slideAt, dur: Number(extra.dur) } : { at: slideAt }); } let renderT0Battle = null; // game time of the first rendered battle frame (spawn puffs skip the initial wave) let downSeq = 0; // syncBattle pass counter: a view still marked down after a pass left the `down` list diff --git a/public/js/render/units.js b/public/js/render/units.js index 3db19cf1..f7fd28be 100644 --- a/public/js/render/units.js +++ b/public/js/render/units.js @@ -178,16 +178,14 @@ const RAISED_Z = 0.12; */ export const FLY_HOVER = 1.3; /** - * A push / pull slide (推拉, PR #380 by @xcdoge): real seconds per √tile of travel. The sim displaces at once — - * server/sim/battle/displacement.js walks its 0.1-tile steps inside one call — so the snapshots only ever show the - * destination, and a pushed / pulled enemy appeared at the end of its path (a ≤ 2.5-tile push in one snapshot interval, - * a longer pull snapped). The view now slides there under a constant deceleration (UnitView.slideTo): the official - * knockback abilities (`Knockback`, `KnockBackWithDirection`, `DragTowardSource` in the client's metadata) carry an - * impulse (`m_force`) and a velocity decaying under friction (`m_friction`, the tile's `additionalFriction`), and the data - * has no per-skill duration (docs/research/13-knockback-official.md). The duration T = DISPLACE_SLIDE·√D, kept in - * 0.12–0.45 s, is ours [ASSUMED: a fit so the view arrives where the sim put it — no source gives the official - * timing]; v0 = 2D/T, a = v0/T then run the distance in exactly T. Purely visual: the sim's timing, damage, blocking and - * the golden digests are untouched. + * A push / pull slide (推拉, PR #380 by @xcdoge). The sim displaces at once — server/sim/battle/displacement.js walks its + * 0.1-tile steps inside one call — and then holds the enemy in its 失衡 (UNBALANCE) state (PR #392's idea): a push for the + * 位移时间 of its 受力等级 (PRTS 游戏数据基础 推力-位移近似对应表: 0.2 … 35/30 game s), a pull for its force window (推与拉: + * 0.5 / 1 s). The snapshots only ever show the destination, so the view slides there under a constant deceleration + * (UnitView.slideTo) for that same span: the `displace` fx carries it (`dur`, game seconds) and the view divides it by the + * playback rate (ctx.animRate — 2 game s per real second by default: a 0.8 s push slides 0.4 real s) — it lands as the + * sim's state ends. v0 = 2D/T, a = v0/T then run the distance in exactly T. DISPLACE_SLIDE (real s per √tile, kept in + * 0.12–0.45 s) is only the fallback for an fx without `dur` (a recording made before 0.2.2) [ASSUMED]. */ export const DISPLACE_SLIDE = 0.14; /** @@ -860,7 +858,8 @@ export class UnitView { } /** - * Slide to a displacement's destination (推拉, the `displace` fx at (x, y)) instead of appearing there (DISPLACE_SLIDE). + * Slide to a displacement's destination (推拉, the `displace` fx at (x, y)) instead of appearing there: `opts.dur` = the + * fx's 失衡 time in game seconds (real seconds = dur / ctx.animRate), else the DISPLACE_SLIDE·√D fallback. * `at` (game s): the time of the snapshot that carries the destination — render/app.js starts the slide as soon as the * interpolator shows the interval before it, and until the render clock reaches `at` the view holds where it stood * (the sample in between is a lerp or a snap towards the destination). From then on it eases from there into the @@ -877,8 +876,9 @@ export class UnitView { const D = Math.hypot(dx, dy); if (!this.alive || !(D > 0.05)) { this.x = x; this.y = y; this.slide = null; return; } const f = Number.isFinite(opts.friction) && opts.friction > 0 ? opts.friction : SLIDE_FRICTION; - // a slippery tile (f < 1) slides longer; the duration still follows √D (constant deceleration) - const T = Math.max(0.05, (opts.dur > 0 ? opts.dur : clamp(DISPLACE_SLIDE * Math.sqrt(D), 0.12, 0.45)) / f); + // the sim's 失衡 time (game s) at the playback rate; a slippery tile (f < 1) slides longer + const rate = this.ctx.animRate?.() || 1; + const T = Math.max(0.05, (opts.dur > 0 ? opts.dur / rate : clamp(DISPLACE_SLIDE * Math.sqrt(D), 0.12, 0.45)) / f); // v0 = 2D/T and a = v0/T run the distance in exactly T with the velocity reaching 0 there, integrated in update(). // The official turns a displaced unit towards the force (its _dontChangeFaceByDirection is an opt-in flag), while // our facing comes from the snapshot's vx — which points back down the route the enemy resumes after the diff --git a/server/sim/ai.js b/server/sim/ai.js index 887fcc20..ed27e4dc 100644 --- a/server/sim/ai.js +++ b/server/sim/ai.js @@ -537,13 +537,17 @@ export function updateEnemy(b, e, dt) { // hidden (teleporting) enemies only advance wait legs const stunned = e.s.flags.stun; if (stunned || e.hidden || e.s.flags.fear) b._cutAttackStand(e); + // 失衡 (UNBALANCE, battle/displacement.js _unbalance): a state machine, not a status — 浮空 ends it (PRTS 术语释义 浮空 + // 「触发浮空时清除受到的推/拉力…无法陷入失衡」); while it lasts the enemy neither walks nor starts a normal attack + if (e.s.flags.levitate && e.unbalanceUntil > b.time) e.unbalanceUntil = -Infinity; + const unbalanced = b.time < e.unbalanceUntil; const prevCd = e.atkCd; if (e.atkCd > 0 && !stunned && !e.hidden) e.atkCd = Math.max(0, e.atkCd - dt); - // a stun / freeze / sleep / 浮空 — or leaving the field — takes the enemy out of its attack: a swing short of its damage - // frame does not land, and the attack starts again from its wind-up afterwards (enemyAttack) - if (e.swing && (stunned || e.hidden)) e.swing = false; + // a stun / freeze / sleep / 浮空 / 失衡 — or leaving the field — takes the enemy out of its attack: a swing short of its + // damage frame does not land, and the attack starts again from its wind-up afterwards (enemyAttack) + if (e.swing && (stunned || e.hidden || unbalanced)) e.swing = false; // true: an unblocked ranged enemy in the wind-up of its next attack with a target in range (it stands) - const winding = !e.hidden && !stunned && enemyAttack(b, e, prevCd); + const winding = !e.hidden && !stunned && !unbalanced && enemyAttack(b, e, prevCd); if (!e.alive) return; // a stun / freeze / sleep cuts the attack clip short: no stand left once it ends [ASSUMED]. 沉睡 also holds 不可阻挡 // (PRTS 异常效果 SLEEPING = 无法行动+无敌+不可阻挡): a sleeper's blocker lets go — its swing was cut above; Battle.applyStatus @@ -572,12 +576,13 @@ export function updateEnemy(b, e, dt) { if (b.time < e.pauseUntil) return; // standing for an attack clip (attackStand, GitHub #58): only the walking waits — a checkpoint's WAIT keeps running // and DISAPPEAR / APPEAR legs still happen (advanceRoute); drawn idle (the client plays the clip, then Move again); - // a 恐惧 runs at once (it cannot attack) - const standing = winding || (b.time < e.atkStandUntil && !e.s.flags.fear); + // a 恐惧 runs at once (it cannot attack). 失衡 holds the walking too — under 恐惧 / 诱导 as well (失衡免疫 says 「失衡期间 + // 无法自主移动」; no source exempts a fear) + const standing = winding || unbalanced || (b.time < e.atkStandUntil && !e.s.flags.fear); if (e.s.flags.noMove) { e.moving = false; return; } // standing (a 重生, a form change): drawn idle, not walking // 恐惧 (ba.fear "无法被阻挡并四散逃跑"; PRTS 诱发移动: 恐惧 outranks 诱导): runs to random tiles of the fan away from // its source — a self-inflicted fear flutters inside its own tile (fear.js); the route re-plans once it ends - if (e.s.flags.fear && !e.hidden) { moveFeared(b, e, dt); return; } + if (e.s.flags.fear && !e.hidden) { if (unbalanced) e.moving = false; else moveFeared(b, e, dt); return; } if (e.mem.fearMove) endFear(e); // 诱导 (ba.attract "无法被阻挡并向目标位置移动"): walks to the attract point instead of following its route if (e.s.flags.attract) { if (standing) e.moving = false; else moveAttracted(b, e, dt); return; } diff --git a/server/sim/battle/displacement.js b/server/sim/battle/displacement.js index 6c409430..415722d8 100644 --- a/server/sim/battle/displacement.js +++ b/server/sim/battle/displacement.js @@ -2,7 +2,10 @@ // directional), pull, the raw mover displace and who can be moved at all. // Installed on Battle.prototype by server/sim/Battle.js (a method container: never instantiated; `this` is the battle). -import { COLS, PUSH_TILES, PUSH_TILES_EFFECT, PULL_WEAK_SHARE, PULL_CRAWL, PULL_ORIGIN, PULL_STOP_RADIUS, PUSH_DIRECTIONAL_MIN_DIST } from '../constants.js'; +import { + COLS, PUSH_TILES, PUSH_TILES_EFFECT, PULL_WEAK_SHARE, PULL_CRAWL, PULL_ORIGIN, PULL_STOP_RADIUS, PUSH_DIRECTIONAL_MIN_DIST, + PUSH_UNBALANCE, PULL_UNBALANCE, PULL_UNBALANCE_WEAK, UNBALANCE_MIN, +} from '../constants.js'; import { fin } from './util.js'; import { hypot } from '../detmath.js'; @@ -16,6 +19,18 @@ export function pushTiles(level, effect = false) { return (effect ? PUSH_TILES_EFFECT : PUSH_TILES)[Math.min(3, l)]; } +/** 失衡 (UNBALANCE) of a push of 受力等级 `level`, game seconds (constants.js PUSH_UNBALANCE: ≤ −3 → 0, ≥ 3 → the 3 value). */ +export function pushUnbalance(level) { + const l = Math.round(fin(level, -99)); + return l <= -3 ? 0 : PUSH_UNBALANCE[Math.min(3, l)]; +} + +/** 失衡 of a pull of 受力等级 `level`: its force window (PULL_UNBALANCE, 0.5 s below −1), none at ≤ −3 (force 0). */ +export function pullUnbalance(level) { + const l = Math.round(fin(level, -99)); + return l <= -3 ? 0 : l < -1 ? PULL_UNBALANCE_WEAK : PULL_UNBALANCE; +} + export class BattleDisplacement { /** * 受力等级 of enemy `e` under a push / pull of 力度 `force` (微小力 −1, 小力 0, 中力 1, 较大力 2, 大力 3, 大力+1 4, 特大力 5): @@ -40,7 +55,7 @@ export class BattleDisplacement { * Returns the tiles moved. */ push(e, force, { from = null, dir = null, fixed = false, fixedAngle = false, inward = false, effect = false } = {}) { - if (!this._displaceable(e)) return 0; + if (!this._displaceable(e)) { this._staticForce(e, force); return 0; } let level = this.forceLevel(e, force); const fx0 = fin(from?.x, e.x), fy0 = fin(from?.y, e.y); const vx = e.x - fx0, vy = e.y - fy0, d = hypot(vx, vy); @@ -58,7 +73,12 @@ export class BattleDisplacement { else return 0; let dist = pushTiles(level, effect); if (inward && !(dl > 0)) { ux = -ux; uy = -uy; dist = Math.min(dist, Math.max(0, d - PULL_STOP_RADIUS)); } - return this.displace(e, { x: ux, y: uy }, dist); + // 失衡 for the row's 位移时间 — also when the 特效 column or a wall shortens the slide [ASSUMED for the wall]; a slide a + // wall stops at the first step gets the 0.1 s floor, like a body that cannot move [ASSUMED: 碰撞、停止 is 待补充] + const hold = pushUnbalance(level); + const moved = this.displace(e, { x: ux, y: uy }, dist, { dur: hold }); + if (hold > 0) this._unbalance(e, moved > 0 ? hold : UNBALANCE_MIN); + return moved; } /** @@ -68,12 +88,17 @@ export class BattleDisplacement { * the official 拉力起点 in front of an operator. Returns the tiles moved. */ pull(e, force, { to, center = null, stop = PULL_STOP_RADIUS } = {}) { - if (!this._displaceable(e) || !to) return 0; + if (!to) return 0; + if (!this._displaceable(e)) { this._staticForce(e, force); return 0; } // an enemy the puller itself blocks already stands in front of it (at contact) [ASSUMED: no pull, no unblocking] if (center && center.side === 'ally' && e.blockedBy === center) return 0; + const level = this.forceLevel(e, force); + // 失衡 for the force window, whatever the travel: the 急停 zeroes the movement, the state lasts to the window's end + const hold = pullUnbalance(level); + if (!(hold > 0)) return 0; const tx = fin(to.x, e.x), ty = fin(to.y, e.y); const dx = tx - e.x, dy = ty - e.y, d0 = hypot(dx, dy); - if (!(d0 > 1e-6)) return 0; + if (!(d0 > 1e-6)) { this._unbalance(e, hold); return 0; } const ux = dx / d0, uy = dy / d0; // travel until inside the stop circle around `center` (smaller root of |e + t·u − c| = stop), else up to `to` let full = d0; @@ -84,9 +109,10 @@ export class BattleDisplacement { const disc = wu * wu - w2 + r * r; if (disc >= 0) { const t = -wu - Math.sqrt(disc); if (t >= 0) full = Math.min(full, t); } } - const level = this.forceLevel(e, force); - const dist = level >= 0 ? full : level === -1 ? Math.min(full, PULL_WEAK_SHARE * d0) : level === -2 ? Math.min(full, PULL_CRAWL) : 0; - return dist > 1e-6 ? this.displace(e, { x: ux, y: uy }, dist) : 0; + const dist = level >= 0 ? full : level === -1 ? Math.min(full, PULL_WEAK_SHARE * d0) : Math.min(full, PULL_CRAWL); + const moved = dist > 1e-6 ? this.displace(e, { x: ux, y: uy }, dist, { dur: hold }) : 0; + this._unbalance(e, hold); + return moved; } /** Official distance (tiles) a push of 力度 `force` would move `e` on open ground (0 when it cannot be displaced). */ @@ -107,12 +133,39 @@ export class BattleDisplacement { * 失衡状态 … 但物理层面上无法产生任何速度或移动" — every air unit of the mode except “炎佑”, plus the boss 昆图斯 (build-data * STATIC_BODIES; player report after 0.1.0, "飞机可以被薄绿的技能拉走"). A skill that reaches it still hits it (its targeting * is the skill's own: 锏 S3, 薄绿, the 钩索师 …); only the movement is 0, so distance-based effects (drag damage, 见行者 S2's - * wall stun) come to nothing. [ASSUMED] the 0.1 s 失衡硬直 a 静态刚体 still gets is not modelled (no displacement models it). + * wall stun) come to nothing — but a force > 0 still puts it in the 失衡 state for its 0.1 s floor (_staticForce). */ _displaceable(e) { return !!(e && e.alive && e.side === 'enemy' && !e.isBoss && !e.s.flags.noDisplace && !(e.def && e.def.staticBody)); } + /** + * A push / pull of 力度 `force` on a 静态刚体 (data `staticBody`; not 失衡免疫 `noDisplace` — PRTS 特殊机制 静态刚体: unlike + * 失衡免疫 it "可以进入失衡状态并启用物理,但物理层面上无法产生任何速度或移动", leaving it 「在失去施力后立刻」 with 「0.1 秒保底持续 + * 时间」): a force > 0 (受力等级 ≥ −2) gives the UNBALANCE_MIN state, no movement. Leaders (the boss pool) stay out. + */ + _staticForce(e, force) { + if (!(e && e.alive && e.side === 'enemy' && !e.isBoss && !e.s.flags.noDisplace && e.def && e.def.staticBody)) return; + if (this.forceLevel(e, force) >= -2) this._unbalance(e, UNBALANCE_MIN); + } + + /** + * Put enemy `e` in the 失衡 (UNBALANCE) state for `dur` game seconds from now (a running one is kept when it lasts longer): + * a state machine, not a status (PRTS 异常效果: no 阻止攻击 status — no stun, no immunity, SP untouched) — ai.js + * updateEnemy reads `unbalanceUntil`: the enemy neither walks (恐惧 / 诱导 included) nor starts a normal attack, a swing + * short of its frame is cut; checks that ignore the state (水遁忍者's damage, content abilities) go on. The state machine + * switch ends the attack clip it stood for (PRTS 状态机: the states are exclusive — UNBALANCE, then DEFAULT → MOVE). It + * ends with its time, or at once with 浮空 (术语释义 浮空 「触发浮空时清除受到的推/拉力…无法陷入失衡」, ai.js) or a 重生. + * No global skill lock: enemy abilities keep ticking (the 「使用技能」 part is not modelled — docs/SIM.md). + */ + _unbalance(e, dur) { + if (!(dur > 0) || !e || !e.alive) return; + const until = this.time + dur; + if (!(e.unbalanceUntil >= until)) e.unbalanceUntil = until; + this._cutAttackStand(e); + e.atkStandUntil = -Infinity; + } + /** * Move an enemy `distance` tiles along `dir` = {x, y} (normalised internally) over passable tiles — the raw mover of * push() / pull(), which apply the official 力度 − 重量 rules (content uses those; the old `force` option is gone). @@ -120,7 +173,7 @@ export class BattleDisplacement { * ⇒ no movement (_displaceable). The tiles it may cross follow its movement (`motion`): a hovering enemy walks the * ground, so it stays on ground-passable tiles. */ - displace(e, dir, distance) { + displace(e, dir, distance, { dur = 0 } = {}) { if (!this._displaceable(e) || !dir) return 0; const dxv = fin(dir.x, 0), dyv = fin(dir.y, 0); const len = hypot(dxv, dyv); @@ -144,7 +197,8 @@ export class BattleDisplacement { this._cutAttackStand(e); e.atkStandUntil = -Infinity; if (e.route) e.route.pts = null; - this.fx('displace', { x: e.x, y: e.y, id: e.id }); + // `dur` (game s): the 失衡 the push / pull gives — the client's slide takes that long (render/units.js slideTo) + this.fx('displace', dur > 0 ? { x: e.x, y: e.y, id: e.id, dur } : { x: e.x, y: e.y, id: e.id }); } return moved; } diff --git a/server/sim/battle/spawns.js b/server/sim/battle/spawns.js index 9e3ed1ae..bd8048ff 100644 --- a/server/sim/battle/spawns.js +++ b/server/sim/battle/spawns.js @@ -137,6 +137,7 @@ export class BattleSpawns { e.atkCd = 0; e.pauseUntil = -Infinity; // content holds (暴鸰's drop) e.atkStandUntil = -Infinity; // standing for its attack clip (ai.js attackStand) + e.unbalanceUntil = -Infinity; // 失衡 (UNBALANCE) after a push / pull (battle/displacement.js _unbalance, ai.js) e.atkStandCutAt = -Infinity; // display metadata: when its stand was last cut or ignored (snapshot standCut) e.swing = false; // a normal attack swung, its damage frame not reached yet (ai.js enemyAttack) // every enemy profile starts with the same fields (stable object shapes keep the hot loop's property reads fast); diff --git a/server/sim/constants.js b/server/sim/constants.js index 3308a55d..598ac848 100644 --- a/server/sim/constants.js +++ b/server/sim/constants.js @@ -128,6 +128,21 @@ export const PULL_CRAWL = 0.03; export const PULL_ORIGIN = 0.5; export const PULL_STOP_RADIUS = 0.6708; export const PUSH_DIRECTIONAL_MIN_DIST = 0.25; +/** + * 失衡 (UNBALANCE) — the state machine a force > 0 puts an enemy in (PRTS 失衡位移机制 「当一名敌方单位受到一个任意来源的力, + * 并且受力大小 > 0 时,该敌方单位将进入失衡(UNBALANCE)状态机」; 异常效果图鉴/失衡免疫 「失衡期间无法自主移动、发动攻击、使用技能」 — + * not an abnormal status: 异常效果 「失衡…不属于异常效果,它是一种状态机」, so it is no stun). Its length in game seconds: + * PUSH_UNBALANCE = a push by 受力等级 — PRTS 游戏数据基础 推力-位移近似对应表 「位移时间」 (whole frames at 30 fps: 6, 12, 24, + * 27, 32, 35; the 0.1 s floor is inside them); PULL_UNBALANCE / PULL_UNBALANCE_WEAK = a pull's force window — 推与拉 §拉力 + * 「作用时间默认为 1 s;若本次受力等级 < −1,作用时间改为 0.5 s」, the state lasting to its end after the 急停 too (「目标将仍保持 + * 失衡状态至拉力作用时间结束为止」); UNBALANCE_MIN = the 失衡硬直 floor (「立刻拥有 0.1 s 的“失衡硬直”。此期间无法解除失衡状态机 + * ——哪怕已经没有被移动或者受力」) — what a 静态刚体 hit by a force gets (特殊机制 静态刚体 「失衡状态拥有 0.1 秒保底持续时间」). + * PR #392 by @xcdoge brought the state; its 0.6387·√tiles was derived from the page's μ = 0.5 单位假设, not printed. + */ +export const PUSH_UNBALANCE = Object.freeze({ '-2': 0.2, '-1': 0.4, 0: 0.8, 1: 0.9, 2: 32 / 30, 3: 35 / 30 }); +export const PULL_UNBALANCE = 1; +export const PULL_UNBALANCE_WEAK = 0.5; +export const UNBALANCE_MIN = 0.1; /** * Fallback freeze when a second 寒冷 lands and neither the remaining cold nor the incoming one has a duration diff --git a/server/sim/content/enemies/archetypes.js b/server/sim/content/enemies/archetypes.js index a4e16b1c..5f682f97 100644 --- a/server/sim/content/enemies/archetypes.js +++ b/server/sim/content/enemies/archetypes.js @@ -356,6 +356,7 @@ function reborn({ dur = 0, hpRatio = 1, invincible = 0, onKo = null, during = nu a.state = 'reborn'; a.t0 = b.time; a.noAtk = e.profile.noAttack; + e.unbalanceUntil = -Infinity; // a 重生 is a forced state change: it ends a 失衡 (PRTS 失衡位移机制 「例如复活」) rebirthCleanse(b, e); e.hp = Math.min(1, e.s.maxHp); if (onKo) safe(b, e, () => onKo(b, e, a)); diff --git a/test/golden/bonds.json b/test/golden/bonds.json index 20ac7918..27e31575 100644 --- a/test/golden/bonds.json +++ b/test/golden/bonds.json @@ -93,33 +93,33 @@ "round": 5, "seed": 4108057433, "waveId": "act1autochess_05", - "time": 61.37, - "ticks": 1841, + "time": 60.27, + "ticks": 1808, "reason": "cleared", - "killed": 18, + "killed": 21, "total": 21, "unspawned": 0, "bossHpLeft": null, "rngDraws": 29, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":18,"total":21,"perfect":false,"leaks":3,"leaksUncounted":0,"coins":0,"dmg":70850,"bossDmg":0,"heal":0,"deaths":1,"layerGains":{}}}, + "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":72522,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_3_12_a",2,null,0,0,3,5,12243,2334,0,30,1], - ["p1",2,"op","chess_char_1_06_a",1,null,1137,1,4,3,2907,0,0,13,1], - ["p1",3,"op","chess_char_1_13_a",1,null,913,1,6,3,3059,0,0,12,1], - ["p1",4,"op","chess_char_3_08_a",1,null,1594,1,8,0,5974,0,0,9,1], + ["p1",1,"op","chess_char_3_12_a",2,null,103.12,1,3,1,14295,2231,0,32,1], + ["p1",2,"op","chess_char_1_06_a",1,null,1137,1,4,2,2896,0,0,13,1], + ["p1",3,"op","chess_char_1_13_a",1,null,913,1,6,3,2746,0,0,12,1], + ["p1",4,"op","chess_char_3_08_a",1,null,1594,1,8,1,6742,0,0,10,1], ["p1",5,"op","chess_char_3_09_a",1,null,1267,1,9,1,13794,0,0,27,1], ["p1",6,"op","chess_char_3_10_a",1,null,1650,1,10,0,7040,0,0,8,1], - ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,5,5,20865,0,0,23,3], - ["p1",8,"op","chess_char_3_13_a",1,null,1064,1,7,1,4968,0,0,29,6], + ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,5,12,20370,0,0,24,3], + ["p1",8,"op","chess_char_3_13_a",1,null,1064,1,7,1,4639,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,4,1,358,26835],"enemy_1251_lysyta":[15,13,2,36,35523],"enemy_1328_cbjedi":[1,1,0,1940,9000]}, - "hooks": [1,31,1841,178,178,223,218,0,19,22,15,15,0,9915,13,9,21,3,1,19,0,0,0], - "events": {"atk":195,"deploy":8,"die":19,"dmg":218,"engage":8,"fx":36,"leak":3,"skill":30,"spawn":31,"status":21}, - "fx": {"aoe":1,"displace":11,"pull":11,"shieldBreak":5,"strike":3,"taunt":1,"volley":3,"zone":1}, - "snaps": "c6b020b2 1c788562 16d41c60 842c0335 f0c64705 3571b4d8 5874690e" + "enemies": {"enemy_1249_lysdb_2":[5,5,0,243,27000],"enemy_1251_lysyta":[15,15,0,48,37125],"enemy_1328_cbjedi":[1,1,0,1940,9000]}, + "hooks": [1,31,1808,176,176,224,219,0,21,21,15,15,0,9752,12,11,21,0,1,21,0,0,0], + "events": {"atk":194,"deploy":8,"die":21,"dmg":219,"engage":8,"fx":38,"skill":30,"spawn":31,"status":20}, + "fx": {"aoe":1,"displace":12,"pull":12,"shieldBreak":5,"strike":3,"taunt":1,"volley":3,"zone":1}, + "snaps": "c6b020b2 1c788562 9da6272d cd36ff9d d5b5678d 63be814b" }, "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", @@ -159,7 +159,7 @@ "hooks": [1,21,2964,212,212,351,351,1970,8,8,13,11,0,11247,107,0,8,0,1,7,0,0,0], "events": {"atk":212,"deploy":10,"die":8,"dmg":351,"engage":5,"fx":36,"heal":82,"skill":24,"spawn":21,"status":80}, "fx": {"beam":2,"counter":16,"pull":1,"slippery":2,"taunt":4,"tornado":1,"tornadoPulse":5,"zone":5}, - "snaps": "574ee580 09a0f1f4 bfc664da e9ec3f0c 3b21cd95 a6acc441 a2d8b7ce 321e8fc8 cbae8186 5d84bf4d" + "snaps": "574ee580 09a0f1f4 bfc664da e9ec3f0c 3b21cd95 a6acc441 61c2f36b 303868a6 ffd954e0 97cea3c3" }, "bond-egirShip-low": { "about": "阿戈尔 low: tier 1 layers 1; chess_char_1_04_a chess_char_3_16_a chess_char_2_07_a chess_char_3_18_a chess_char_3_05_a chess_char_3_14_a chess_char_3_17_a chess_char_3_19_a token_10028_vigil_wolf", @@ -281,7 +281,7 @@ "hooks": [1,25,1945,180,180,256,256,235,19,19,6,5,0,7205,14,10,17,0,1,19,0,0,0], "events": {"atk":211,"deploy":8,"die":19,"dmg":255,"engage":6,"fx":28,"skill":11,"spawn":25,"status":42}, "fx": {"crit":4,"displace":6,"ripple":7,"shadowWeave":6,"shield":2,"shieldBreak":1,"stealth":2}, - "snaps": "f706d3f6 37a0b4de 0cfef64a f3908955 0da62a3f ea2a8775 7f375667" + "snaps": "f706d3f6 37a0b4de 0cfef64a f3908955 f673d111 606dc386 b653e7bc" }, "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", @@ -495,8 +495,8 @@ "round": 5, "seed": 2071095439, "waveId": "act1autochess_05", - "time": 68.33, - "ticks": 2050, + "time": 69.33, + "ticks": 2080, "reason": "cleared", "killed": 16, "total": 16, @@ -505,26 +505,26 @@ "rngDraws": 0, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":16,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":121762,"bossDmg":0,"heal":13131,"deaths":2,"layerGains":{"kazimierzShip":1}} + "p1": {"killed":16,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":121582,"bossDmg":0,"heal":12260,"deaths":2,"layerGains":{"kazimierzShip":1}} }, "units": [ - ["p1",1,"op","chess_char_2_18_a",0,null,2218,1,7,7,48246,181,0,21,1], + ["p1",1,"op","chess_char_2_18_a",0,null,2218,1,7,7,48933,215,0,20,1], ["p1",2,"op","chess_char_4_23_a",2,null,2179,1,6,0,0,0,0,0,0], - ["p1",3,"op","chess_char_4_22_a",2,null,2022,1,8,4,26794,0,0,19,1], - ["p1",4,"op","chess_char_1_19_a",1,null,0,0,9,0,15153,4425,0,36,1], - ["p1",5,"op","chess_char_2_12_a",1,null,0,0,10,1,24284,7786,3720,58,1], - ["p1",6,"op","chess_char_4_21_a",1,null,1271,1,4,0,0,0,5886,34,1], - ["p1",7,"op","chess_char_4_24_a",1,null,1726,1,5,3,7285,0,0,12,2], - ["p1",8,"op","chess_char_4_25_a",2,null,825.8,1,11,0,0,4162,3525,0,1], + ["p1",3,"op","chess_char_4_22_a",2,null,2022,1,8,3,28294,0,0,18,1], + ["p1",4,"op","chess_char_1_19_a",1,null,0,0,9,0,13701,4425,0,35,1], + ["p1",5,"op","chess_char_2_12_a",1,null,0,0,10,3,21541,7905,3420,56,1], + ["p1",6,"op","chess_char_4_21_a",1,null,1271,1,4,0,0,0,5786,36,1], + ["p1",7,"op","chess_char_4_24_a",1,null,1726,1,5,2,9115,0,0,13,2], + ["p1",8,"op","chess_char_4_25_a",2,null,1024.82,1,11,0,0,2830,3054,0,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_1116_liprr":[11,11,0,4424,69696],"enemy_1116_liprr_2":[4,4,0,89,34560],"enemy_1121_lifbos":[1,1,0,8100,23040]}, - "hooks": [1,27,2050,231,231,430,430,1694,18,18,8,7,0,7384,12,17,16,0,1,18,1,0,0], - "events": {"atk":256,"deploy":8,"die":18,"dmg":422,"engage":5,"fx":60,"heal":49,"layer":1,"skill":15,"spawn":27,"status":47}, - "fx": {"displace":16,"garrison":1,"healField":1,"liberate":3,"phase":2,"redistribute":15,"reweave":1,"sandChains":2,"shield":1,"slash":17,"truesilver":1}, - "snaps": "657d1bd5 80aa4e11 12c1b0df 312a31d4 3b4636c0 224b37d2 ec977e01" + "enemies": {"enemy_1116_liprr":[11,11,0,3115,69696],"enemy_1116_liprr_2":[4,4,0,45,34560],"enemy_1121_lifbos":[1,1,0,8275,23040]}, + "hooks": [1,27,2080,221,221,421,421,1602,18,18,8,7,0,7504,13,16,16,0,1,18,1,0,0], + "events": {"atk":245,"deploy":8,"die":18,"dmg":413,"engage":5,"fx":57,"heal":48,"layer":1,"skill":15,"spawn":27,"status":50}, + "fx": {"displace":14,"garrison":1,"healField":1,"liberate":3,"phase":2,"redistribute":15,"reweave":1,"sandChains":2,"shield":1,"slash":16,"truesilver":1}, + "snaps": "657d1bd5 dd4a6c63 5e39c4b6 9485b163 f601c36f 7699a7ce 5912c331" }, "bond-kazimierzShip-high": { "about": "卡西米尔 high: tier 2 layers 999; chess_char_2_18_b chess_char_3_12_b chess_char_5_08_b chess_char_4_19_b chess_char_1_19_b chess_char_2_12_b chess_char_3_17_b chess_char_5_10_b", @@ -535,8 +535,8 @@ "round": 10, "seed": 3009624823, "waveId": "act1autochess_h03", - "time": 87.93, - "ticks": 2638, + "time": 93.77, + "ticks": 2813, "reason": "cleared", "killed": 30, "total": 30, @@ -544,24 +544,24 @@ "bossHpLeft": null, "rngDraws": 18, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":404368,"bossDmg":0,"heal":1577,"deaths":3,"layerGains":{}}}, + "players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":404340,"bossDmg":0,"heal":1392,"deaths":2,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_2_18_b",0,"uniequip_002_ashlok",2119.02,1,3,8,90148,1036,0,17,2], + ["p1",1,"op","chess_char_2_18_b",0,"uniequip_002_ashlok",1083.03,1,3,8,86638,2072,0,16,2], ["p1",2,"op","chess_char_3_12_b",2,"uniequip_002_blemsh",3096,1,5,0,0,0,0,0,0], - ["p1",3,"op","chess_char_5_08_b",2,"uniequip_002_horn",289.17,1,7,10,73608,4063,1577,56,2], - ["p1",4,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",2118,1,8,0,14304,0,0,9,2], - ["p1",5,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,9,2,77090,1971,0,47,2], - ["p1",6,"op","chess_char_2_12_b",1,"uniequip_002_gravel",0,0,39,3,58835,5158,0,50,2], + ["p1",3,"op","chess_char_5_08_b",2,"uniequip_002_horn",104.7,1,7,8,76711,4063,1392,60,2], + ["p1",4,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",2118,1,8,0,8628,0,0,4,1], + ["p1",5,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",168.71,1,9,4,74360,1802,0,49,2], + ["p1",6,"op","chess_char_2_12_b",1,"uniequip_002_gravel",0,0,40,3,67620,5158,0,59,2], ["p1",7,"op","chess_char_3_17_b",1,"uniequip_002_shotst",3441.6,1,4,7,87314,0,0,29,3], - ["p1",8,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,6,0,3068,0,0,10,2], + ["p1",8,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,6,0,3068,0,0,10,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":[2,2,0,4348,124416],"enemy_1043_zomsbr":[23,23,0,0,147049],"enemy_1061_zomshd":[5,5,0,3818,132903]}, - "hooks": [1,41,2638,236,236,479,594,3409,33,33,15,12,0,5348,956,10,30,0,1,45,0,0,5], - "events": {"atk":236,"deploy":9,"die":33,"dmg":473,"engage":7,"fx":55,"skill":27,"spawn":40,"status":123}, - "fx": {"aoe":26,"displace":15,"dodge":5,"flame":2,"overload":2,"shield":2,"volley":3}, - "snaps": "53aefe29 132f9895 66c91b90 58d6bf98 acad140a 29a3f969 e1ede0b1 1f1ddaa7 d9ab9af3" + "enemies": {"enemy_10124_uashld_2":[2,2,0,5834,124416],"enemy_1043_zomsbr":[23,23,0,0,147001],"enemy_1061_zomshd":[5,5,0,3199,132923]}, + "hooks": [1,41,2813,245,245,495,610,3319,32,32,13,12,0,5846,933,10,30,0,1,47,0,0,5], + "events": {"atk":245,"deploy":9,"die":32,"dmg":489,"engage":7,"fx":57,"skill":25,"spawn":40,"status":131}, + "fx": {"aoe":30,"displace":14,"dodge":5,"flame":1,"overload":2,"shield":2,"volley":3}, + "snaps": "fc50a052 495f0e05 8e2ee39a a18a780c aa4d2fed fe06ee8e fc6d9c35 7fa5d1de 99207752 3dde15c6" }, "bond-kjeragShip-low": { "about": "谢拉格 low: tier 1 layers 1; chess_char_1_02_a chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_2_05_a chess_char_3_11_a chess_char_4_26_a chess_char_3_01_a", @@ -679,7 +679,7 @@ "hooks": [1,25,1853,125,125,469,469,0,20,20,7,4,15,7562,0,3,17,0,1,20,1,0,0], "events": {"atk":162,"deploy":8,"die":20,"dmg":469,"engage":7,"fx":25,"layer":1,"skill":11,"spawn":25,"status":1}, "fx": {"aoe":2,"buff":1,"displace":2,"garrison":1,"pull":2,"zone":17}, - "snaps": "5869531a e3daaf3e 10aebf7e 0e6098bf 9cea6de8 1658f7ec 83559ae8" + "snaps": "5869531a e3daaf3e 10aebf7e 0e6098bf 9cea6de8 0019f087 1c9009ff" }, "bond-lateranoShip-high": { "about": "拉特兰 high: tier 2 layers 999; chess_char_4_01_b chess_char_5_13_b chess_char_5_14_b chess_char_1_01_b chess_char_2_01_b chess_char_3_01_b chess_char_3_21_b chess_char_4_02_b", @@ -690,8 +690,8 @@ "round": 10, "seed": 4098169220, "waveId": "act1autochess_h03", - "time": 78.37, - "ticks": 2351, + "time": 78.2, + "ticks": 2346, "reason": "cleared", "killed": 30, "total": 30, @@ -699,22 +699,22 @@ "bossHpLeft": null, "rngDraws": 7, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":581155,"bossDmg":0,"heal":475,"deaths":2,"layerGains":{}}}, + "players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":581371,"bossDmg":0,"heal":475,"deaths":2,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,4,0,7107,0,0,13,1], - ["p1",2,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3813.44,1,6,2,17177,3812,0,19,1], - ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,7,2,26841,2649,475,5,5], - ["p1",4,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,5,238308,0,0,212,1], - ["p1",5,"op","chess_char_2_01_b",1,"uniequip_002_excu",2146,1,2,1,31603,0,0,9,1], - ["p1",6,"op","chess_char_3_01_b",2,"uniequip_002_angel",1887.1,1,3,9,69243,0,0,51,2], - ["p1",7,"op","chess_char_3_21_b",2,"uniequip_002_archet",1590,1,5,6,98994,0,0,64,2], - ["p1",8,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,8,5,91881,1695,0,14,1] + ["p1",1,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,4,0,9794,0,0,14,1], + ["p1",2,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3813.44,1,6,3,16963,3812,0,19,1], + ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,7,1,29388,2649,475,5,5], + ["p1",4,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,7,235131,0,0,210,1], + ["p1",5,"op","chess_char_2_01_b",1,"uniequip_002_excu",2146,1,2,0,30950,0,0,9,1], + ["p1",6,"op","chess_char_3_01_b",2,"uniequip_002_angel",1887.1,1,3,8,67352,0,0,50,2], + ["p1",7,"op","chess_char_3_21_b",2,"uniequip_002_archet",1590,1,5,4,99557,0,0,64,2], + ["p1",8,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,8,7,92236,1695,0,14,1] ], - "enemies": {"enemy_1006_shield_3":[3,3,0,3812,298598],"enemy_1043_zomsbr":[23,23,0,24,153164],"enemy_1402_tgshd_2":[4,4,0,4320,129393]}, - "hooks": [1,38,2351,407,407,718,718,3946,32,32,14,12,214,4418,26,12,30,0,1,40,0,0,0], - "events": {"atk":478,"deploy":8,"die":32,"dmg":715,"engage":8,"fx":288,"skill":26,"spawn":38,"status":106}, - "fx": {"aoe":5,"buff":2,"counter":2,"displace":27,"expose":238,"reload":1,"ripple":9,"sermon":1,"shield":2,"substitute":1}, - "snaps": "9aca11d4 3a28785b 4e556202 f1e54c63 9ab6817f df61eea0 6a19c875 9b5a706e" + "enemies": {"enemy_1006_shield_3":[3,3,0,3812,298598],"enemy_1043_zomsbr":[23,23,0,24,153380],"enemy_1402_tgshd_2":[4,4,0,4320,129393]}, + "hooks": [1,38,2346,405,405,717,717,4027,32,32,14,12,213,4408,28,11,30,0,1,39,0,0,0], + "events": {"atk":479,"deploy":8,"die":32,"dmg":713,"engage":8,"fx":291,"skill":26,"spawn":38,"status":110}, + "fx": {"aoe":5,"buff":2,"counter":3,"displace":27,"expose":240,"reload":1,"ripple":9,"sermon":1,"shield":2,"substitute":1}, + "snaps": "9aca11d4 b8950805 b7da3a11 1a6ef8cf 6f6a91e6 0373204f 1adfd629 d9404c34" }, "bond-maniShip-low": { "about": "调和 low: tier 1 layers 1; chess_char_3_12_a chess_char_3_16_a chess_char_6_11_a chess_char_1_03_a chess_char_2_04_a chess_char_3_11_a chess_char_3_13_a chess_char_3_14_a token_10030_mlyss_wtrman", @@ -840,34 +840,34 @@ "round": 10, "seed": 2841335436, "waveId": "act1autochess_h03", - "time": 159.63, - "ticks": 4789, + "time": 162.7, + "ticks": 4881, "reason": "cleared", "killed": 18, "total": 18, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 331, + "rngDraws": 315, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":18,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":346374,"bossDmg":0,"heal":0,"deaths":2,"layerGains":{"visiShip":8}}}, + "players": {"p1":{"killed":18,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":346374,"bossDmg":0,"heal":0,"deaths":2,"layerGains":{"visiShip":12}}}, "units": [ - ["p1",1,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,3,0,2984,0,0,24,1], - ["p1",2,"op","chess_char_2_11_b",1,"uniequip_002_kazema",2214,1,5,0,7964,2066,0,37,1], - ["p1",3,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,30,4,55839,2149,0,107,4], - ["p1",4,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,31,2,35103,2383,0,38,15], - ["p1",5,"op","chess_char_3_01_b",2,"uniequip_002_angel",1887.1,1,7,2,30107,0,0,63,2], - ["p1",6,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,8,3,59015,0,0,12,7], - ["p1",7,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,10,2,95332,0,0,24,1], - ["p1",8,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1763.93,1,4,5,58029,0,0,131,3], + ["p1",1,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",5482.35,1,3,0,3329,0,0,25,1], + ["p1",2,"op","chess_char_2_11_b",1,"uniequip_002_kazema",2214,1,5,0,8105,2066,0,40,1], + ["p1",3,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,30,4,63040,2149,0,105,4], + ["p1",4,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,31,3,39080,2383,0,33,13], + ["p1",5,"op","chess_char_3_01_b",2,"uniequip_002_angel",1887.1,1,7,2,26155,0,0,62,2], + ["p1",6,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,8,4,59088,0,0,12,7], + ["p1",7,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,10,1,99210,0,0,24,1], + ["p1",8,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1763.93,1,4,4,46365,0,0,131,3], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["p1","~1","token","token_10022_kazema_shadow",null,null,2214,0,29,0,2002,0,0,11,null] ], - "enemies": {"enemy_1381_winman":[9,9,0,24,129890],"enemy_1381_winman_2":[5,5,0,1296,97044],"enemy_1387_winshd":[4,4,0,4170,119439]}, - "hooks": [1,31,4789,475,475,806,818,0,20,21,34,32,7,10899,82,7,18,0,1,21,2,3,0], - "events": {"atk":505,"deploy":11,"die":21,"dmg":810,"engage":9,"fx":161,"layer":2,"skill":66,"spawn":29,"status":163}, - "fx": {"aoe":9,"buff":1,"burst":3,"charge":15,"counter":7,"crit":64,"displace":25,"garrison":2,"quadShot":2,"ripple":9,"sentry":1,"sermon":1,"shadowWeave":11,"shield":1,"soul":3,"stealth":4,"substitute":1,"summon":1,"swap":1}, - "snaps": "05658c81 4763132b f0f0f17a 874fa7b3 f292fa20 5e4e84af 75e9493c 8970dac3 ce3bfb0a 59f1ea3d 6fc0a9c1 dccdbcfd 9c72bb85 219dbc66 40b29608 63826fa1" + "enemies": {"enemy_1381_winman":[9,9,0,0,129890],"enemy_1381_winman_2":[5,5,0,1667,97044],"enemy_1387_winshd":[4,4,0,3824,119439]}, + "hooks": [1,31,4881,472,472,793,805,0,20,21,32,30,8,10728,75,7,18,0,1,21,3,3,0], + "events": {"atk":507,"deploy":11,"die":21,"dmg":796,"engage":9,"fx":157,"layer":3,"skill":62,"spawn":29,"status":159}, + "fx": {"aoe":9,"buff":1,"burst":3,"charge":13,"counter":8,"crit":57,"displace":28,"garrison":3,"quadShot":2,"ripple":9,"sentry":1,"sermon":1,"shadowWeave":11,"shield":1,"soul":3,"stealth":4,"substitute":1,"summon":1,"swap":1}, + "snaps": "05658c81 b2907752 ead04df4 478efd02 d1141f15 996c1ea1 2b4a83db a04411b6 a5761ef5 325d24d8 bbf423e9 8aca2f53 c0a962a9 74308e41 8047910b 5c77ad28 de91902b" }, "bond-preciShip-low": { "about": "精准 low: tier 1 layers 1; chess_char_4_11_a chess_char_4_04_a chess_char_4_07_a chess_char_4_09_a chess_char_1_09_a chess_char_1_17_a chess_char_4_10_a chess_char_4_12_a token_10041_cathy_catsld token_10041_cathy_catsld", @@ -887,16 +887,16 @@ "bossHpLeft": null, "rngDraws": 20, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":73125,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"visiShip":6}}}, + "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":73125,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_4_11_a",1,null,2144,1,6,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_04_a",1,null,1760,1,7,3,6607,0,0,27,2], - ["p1",3,"op","chess_char_4_07_a",1,null,1299,1,8,3,7010,439,0,20,4], - ["p1",4,"op","chess_char_4_09_a",1,null,2137.6,1,10,9,31669,0,0,17,2], + ["p1",2,"op","chess_char_4_04_a",1,null,1760,1,7,4,7659,0,0,27,2], + ["p1",3,"op","chess_char_4_07_a",1,null,1299,1,8,0,6555,439,0,20,4], + ["p1",4,"op","chess_char_4_09_a",1,null,2137.6,1,10,10,31509,0,0,17,2], ["p1",5,"op","chess_char_1_09_a",1,null,1770,1,4,0,0,0,0,0,0], ["p1",6,"op","chess_char_1_17_a",1,null,1139,1,5,0,0,0,0,0,0], - ["p1",7,"op","chess_char_4_10_a",1,null,1288,1,9,4,9818,0,0,11,1], - ["p1",8,"op","chess_char_4_12_a",2,null,1754,1,11,2,18022,0,0,19,1], + ["p1",7,"op","chess_char_4_10_a",1,null,1288,1,9,3,9796,0,0,11,1], + ["p1",8,"op","chess_char_4_12_a",2,null,1754,1,11,4,17606,0,0,19,1], ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null], ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], @@ -904,10 +904,10 @@ ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], "enemies": {"enemy_1249_lysdb_2":[5,5,0,0,27000],"enemy_1251_lysyta":[15,15,0,0,37125],"enemy_1328_cbjedi":[1,1,0,439,9000]}, - "hooks": [1,34,1618,95,95,149,144,0,21,21,10,7,0,6561,31,1,21,0,1,21,3,0,0], - "events": {"atk":115,"deploy":10,"die":21,"dmg":144,"engage":5,"fx":61,"layer":3,"skill":17,"spawn":34,"status":44}, - "fx": {"charge":4,"dilemma":2,"displace":14,"garrison":3,"levitate":11,"pull":1,"shadowWeave":10,"shieldBreak":5,"slippery":1,"splash":2,"stealth":2,"tornado":1,"tornadoPulse":5}, - "snaps": "48bb3ef4 23226b3d 02c40c18 97634778 43cfd99c cc46bb24" + "hooks": [1,34,1618,95,95,151,146,0,21,21,10,7,0,6582,31,1,21,0,1,21,0,0,0], + "events": {"atk":116,"deploy":10,"die":21,"dmg":146,"engage":5,"fx":57,"skill":17,"spawn":34,"status":42}, + "fx": {"charge":4,"dilemma":2,"displace":13,"levitate":10,"pull":1,"shadowWeave":11,"shieldBreak":5,"slippery":1,"splash":2,"stealth":2,"tornado":1,"tornadoPulse":5}, + "snaps": "48bb3ef4 23226b3d 6c91c88e eab644b2 33a120b8 f5b87943" }, "bond-preciShip-high": { "about": "精准 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_09_b chess_char_1_09_b chess_char_1_17_b chess_char_2_01_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b token_10041_cathy_catsld token_10041_cathy_catsld", @@ -1208,23 +1208,23 @@ "errors": {"count":0,"kinds":[]}, "players": {"p1":{"killed":19,"total":19,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":71550,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_3_12_a",2,null,1999.05,1,5,2,9348,335,0,22,1], - ["p1",2,"op","chess_char_1_14_a",1,null,1145,1,7,2,2332,0,0,8,0], - ["p1",3,"op","chess_char_2_04_a",1,null,977,1,9,3,8416,0,0,28,1], - ["p1",4,"op","chess_char_3_08_a",1,null,1594,1,11,2,10205,0,0,11,1], - ["p1",5,"op","chess_char_3_09_a",1,null,1267,1,4,1,6596,0,0,18,1], - ["p1",6,"op","chess_char_3_10_a",1,null,1650,1,6,3,7225,0,0,12,1], - ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,8,5,17162,0,0,16,2], - ["p1",8,"op","chess_char_3_14_a",1,null,1251,1,10,1,10266,0,0,27,1], + ["p1",1,"op","chess_char_3_12_a",2,null,1999.05,1,5,2,10075,335,0,22,1], + ["p1",2,"op","chess_char_1_14_a",1,null,1145,1,7,2,2227,0,0,7,0], + ["p1",3,"op","chess_char_2_04_a",1,null,977,1,9,3,8077,0,0,28,1], + ["p1",4,"op","chess_char_3_08_a",1,null,1594,1,11,2,10897,0,0,11,1], + ["p1",5,"op","chess_char_3_09_a",1,null,1267,1,4,1,5548,0,0,18,1], + ["p1",6,"op","chess_char_3_10_a",1,null,1650,1,6,3,6613,0,0,12,1], + ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,8,5,17624,0,0,16,2], + ["p1",8,"op","chess_char_3_14_a",1,null,1251,1,10,1,10489,0,0,28,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_1010_demon":[3,3,0,162,20250],"enemy_1010_demon_2":[1,1,0,173,13500],"enemy_1071_dftman":[15,15,0,0,37800]}, - "hooks": [1,30,1565,155,155,225,225,0,19,19,8,7,0,7825,42,3,19,0,1,19,0,0,0], - "events": {"atk":209,"deploy":8,"die":19,"dmg":225,"engage":8,"fx":45,"skill":15,"spawn":30,"status":70}, - "fx": {"aoe":1,"displace":19,"pull":19,"sleep":2,"strike":2,"volley":2}, - "snaps": "3fec6d69 cbf41b37 34a06f5a 37ca1c5e 4f72797a ab4a5590" + "hooks": [1,30,1565,155,155,221,221,0,19,19,8,7,0,7825,39,3,19,0,1,19,0,0,0], + "events": {"atk":206,"deploy":8,"die":19,"dmg":221,"engage":8,"fx":47,"skill":15,"spawn":30,"status":66}, + "fx": {"aoe":1,"displace":20,"pull":20,"sleep":2,"strike":2,"volley":2}, + "snaps": "3fec6d69 cbf41b37 0dc808f0 23d91444 2db20031 1441efbb" }, "bond-skillfulShip-high": { "about": "灵巧 high: tier 1 layers 999; chess_char_5_08_b chess_char_5_05_b chess_char_5_07_b chess_char_1_14_b chess_char_2_04_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b", @@ -1270,8 +1270,8 @@ "round": 5, "seed": 2364080280, "waveId": "act1autochess_05", - "time": 52.87, - "ticks": 1586, + "time": 55.8, + "ticks": 1674, "reason": "cleared", "killed": 17, "total": 17, @@ -1284,22 +1284,22 @@ }, "units": [ ["p1",1,"op","chess_char_3_16_a",1,null,2716.25,1,3,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_01_a",2,null,1847.28,1,5,3,11347,2374,0,13,1], + ["p1",2,"op","chess_char_4_01_a",2,null,1874.87,1,5,3,8857,2346,0,12,1], ["p1",3,"op","chess_char_1_08_a",1,null,0,0,6,0,7454,2377,0,15,1], ["p1",4,"op","chess_char_3_18_a",2,null,0,0,10,5,37399,1851,0,38,1], ["p1",5,"op","chess_char_3_19_a",2,null,1798.75,1,7,2,11027,0,0,23,1], ["p1",6,"op","chess_char_3_20_a",1,null,1401.25,1,9,1,1019,0,0,10,1], ["p1",7,"op","chess_char_3_21_a",2,null,1705,1,11,1,18088,0,0,24,1], - ["p1",8,"op","chess_char_4_02_a",2,null,1785,1,4,4,38264,0,0,9,1], + ["p1",8,"op","chess_char_4_02_a",2,null,1785,1,4,4,40753,0,0,10,1], ["p1",9,"token","token_10028_vigil_wolf",null,null,852.9,1,8,1,1546,27,0,3,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,670,34560],"enemy_1118_lidbox_2":[2,2,0,5918,21888]}, - "hooks": [1,28,1586,168,168,294,294,0,19,19,7,5,5,6893,32,21,17,0,1,24,2,0,0], - "events": {"atk":213,"deploy":9,"die":19,"dmg":292,"engage":8,"fx":46,"layer":2,"skill":12,"spawn":28,"status":98}, - "fx": {"aoe":1,"camouflage":1,"counter":5,"displace":18,"dp":3,"garrison":2,"liberate":3,"phase":4,"ripple":5,"sermon":1,"shield":2,"wolfShadow":1}, - "snaps": "0b626ccd 4c5c3338 6be5bea8 7eb547a7 e3388438 906b4644" + "enemies": {"enemy_1116_liprr":[11,11,0,41,69696],"enemy_1116_liprr_2":[4,4,0,643,34560],"enemy_1118_lidbox_2":[2,2,0,5918,21888]}, + "hooks": [1,28,1674,167,167,291,291,0,19,19,7,5,4,7074,32,20,17,0,1,24,2,0,0], + "events": {"atk":210,"deploy":9,"die":19,"dmg":289,"engage":8,"fx":47,"layer":2,"skill":12,"spawn":28,"status":97}, + "fx": {"aoe":1,"camouflage":1,"counter":4,"displace":19,"dp":3,"garrison":2,"liberate":2,"phase":4,"ripple":6,"sermon":1,"shield":3,"wolfShadow":1}, + "snaps": "0b626ccd 4c5c3338 6be5bea8 7eb547a7 b7dca0f5 333a3221" }, "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", @@ -1402,26 +1402,26 @@ "total": 30, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 64, + "rngDraws": 62, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":202522,"bossDmg":0,"heal":4516,"deaths":0,"layerGains":{}}}, + "players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":202522,"bossDmg":0,"heal":4488,"deaths":0,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",46423.75,1,3,0,0,969,0,0,2], - ["p1",2,"op","chess_char_1_10_b",0,"uniequip_002_sunbr",33002.33,1,5,0,0,969,2958,32,32], - ["p1",3,"op","chess_char_2_08_b",1,"uniequip_002_bubble",44584.68,1,7,4,34015,1083,0,0,2], - ["p1",4,"op","chess_char_4_04_b",1,"uniequip_002_ines",25647.6,1,9,12,62234,2801,0,104,4], - ["p1",5,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",21564.7,1,4,4,8965,0,0,31,2], - ["p1",6,"op","chess_char_5_22_b",1,"uniequip_002_nymph",21326.42,1,6,2,27383,0,0,17,9], + ["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",46423.75,1,3,0,0,966,0,0,2], + ["p1",2,"op","chess_char_1_10_b",0,"uniequip_002_sunbr",33002.33,1,5,0,0,966,2930,32,32], + ["p1",3,"op","chess_char_2_08_b",1,"uniequip_002_bubble",44584.68,1,7,3,31639,1061,0,0,2], + ["p1",4,"op","chess_char_4_04_b",1,"uniequip_002_ines",25661.51,1,9,13,63538,2787,0,103,4], + ["p1",5,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",21564.7,1,4,2,9563,0,0,32,2], + ["p1",6,"op","chess_char_5_22_b",1,"uniequip_002_nymph",21326.42,1,6,1,25467,0,0,17,8], ["p1",7,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",21313.18,1,8,0,0,0,1558,5,1], - ["p1",8,"op","chess_char_4_02_b",2,"uniequip_002_mostma",22438.41,1,10,8,69924,1558,0,28,2], + ["p1",8,"op","chess_char_4_02_b",2,"uniequip_002_mostma",22438.41,1,10,11,72314,1558,0,28,2], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null] ], - "enemies": {"enemy_1251_lysyta_2":[19,19,0,30,70042],"enemy_1252_lysytb_2":[7,7,0,2028,72576],"enemy_1329_cbshld_2":[4,4,0,2415,59904]}, - "hooks": [1,40,3108,221,231,352,365,47,30,30,54,51,0,13933,44,4,30,0,1,30,0,2,0], - "events": {"atk":259,"deploy":8,"die":30,"dmg":365,"engage":3,"fx":152,"heal":47,"skill":105,"spawn":40,"status":102}, - "fx": {"aoe":9,"burst":2,"counter":7,"displace":31,"heal":32,"iceSpike":31,"ripple":15,"shadowWeave":19,"soul":2,"stealth":4}, - "snaps": "900e366c 626212da 8471c8b0 f7f4c418 215efc34 8327ecc4 ac43f75e 954cc114 a17690c7 39dd290a 853a19c1" + "enemies": {"enemy_1251_lysyta_2":[19,19,0,7,70042],"enemy_1252_lysytb_2":[7,7,0,2018,72576],"enemy_1329_cbshld_2":[4,4,0,2415,59904]}, + "hooks": [1,40,3108,217,228,341,354,47,30,30,53,50,0,13734,46,4,30,0,1,30,0,2,0], + "events": {"atk":257,"deploy":8,"die":30,"dmg":354,"engage":3,"fx":150,"heal":47,"skill":103,"spawn":40,"status":107}, + "fx": {"aoe":8,"burst":2,"counter":6,"displace":30,"heal":32,"iceSpike":32,"ripple":15,"shadowWeave":19,"soul":2,"stealth":4}, + "snaps": "900e366c 4c623662 9b24da57 88686361 3743dd96 16bcbb0a ceae7cfe 4efae7da c9a75cab bfea9ee9 664303d4" }, "bond-suntShip-low": { "about": "绝技 low: tier 1 layers 1; chess_char_1_02_b chess_char_4_17_a chess_char_4_18_a chess_char_4_16_a chess_char_1_01_b chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a", @@ -1505,31 +1505,31 @@ "round": 5, "seed": 2212044350, "waveId": "act1autochess_05", - "time": 44.8, - "ticks": 1344, + "time": 45.9, + "ticks": 1377, "reason": "cleared", "killed": 21, "total": 21, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 10, + "rngDraws": 9, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":68368,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"miraShip":1}}}, + "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":68408,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"miraShip":1}}}, "units": [ - ["p1",1,"op","chess_char_4_23_a",2,null,2179,1,2,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_22_a",2,null,2022,1,4,3,9329,0,0,17,1], - ["p1",3,"op","chess_char_1_19_a",1,null,1482,1,6,2,5103,0,0,14,1], + ["p1",1,"op","chess_char_4_23_a",2,null,3075.82,1,2,0,0,0,0,0,0], + ["p1",2,"op","chess_char_4_22_a",2,null,2918.82,1,4,5,9800,0,0,15,1], + ["p1",3,"op","chess_char_1_19_a",1,null,2378.82,1,6,1,4770,0,0,13,1], ["p1",4,"op","chess_char_1_01_a",1,null,1123,1,7,3,14007,0,0,25,1], - ["p1",5,"op","chess_char_4_24_a",1,null,1726,1,8,3,17595,0,0,18,1], - ["p1",6,"op","chess_char_4_25_a",2,null,1379.73,1,1,0,0,0,0,0,0], - ["p1",7,"op","chess_char_4_26_a",0,null,1368,1,3,0,0,0,0,0,0], - ["p1",8,"op","chess_char_3_01_a",2,null,1511.94,1,5,10,22335,0,0,41,1] + ["p1",5,"op","chess_char_4_24_a",1,null,1726,1,8,3,16645,0,0,17,1], + ["p1",6,"op","chess_char_4_25_a",2,null,1379.73,1,1,0,0,0,0,0,1], + ["p1",7,"op","chess_char_4_26_a",0,null,2264.82,1,3,0,0,0,0,0,0], + ["p1",8,"op","chess_char_3_01_a",2,null,2408.76,1,5,9,23188,0,0,43,1] ], "enemies": {"enemy_1249_lysdb_2":[5,5,0,0,27000],"enemy_1251_lysyta":[15,15,0,0,37125],"enemy_1328_cbjedi":[1,1,0,0,9000]}, - "hooks": [1,29,1344,115,115,272,267,1,21,21,5,3,14,5765,37,0,21,0,1,21,1,0,0], - "events": {"atk":139,"deploy":8,"die":21,"dmg":267,"engage":5,"fx":52,"layer":1,"skill":8,"spawn":29,"status":98}, - "fx": {"buff":1,"displace":12,"garrison":1,"garrisonGrant":1,"mote":16,"sandChains":1,"shieldBreak":5,"slash":6,"sp":1,"spGift":7,"truesilver":1}, - "snaps": "b42f9eae 6a971adf 097a49e0 3a3f507a 006b3559" + "hooks": [1,29,1377,113,113,267,262,1,21,21,6,3,14,5930,35,0,21,0,1,21,1,0,0], + "events": {"atk":137,"deploy":8,"die":21,"dmg":262,"engage":5,"fx":51,"layer":1,"skill":9,"spawn":29,"status":99}, + "fx": {"buff":1,"displace":12,"garrison":1,"garrisonGrant":1,"mote":16,"reweave":1,"sandChains":1,"shieldBreak":5,"slash":5,"sp":1,"spGift":6,"truesilver":1}, + "snaps": "b42f9eae 30c763c9 93204068 0638457f 44034563" }, "bond-swiftShip-high": { "about": "迅捷 high: tier 1 layers 999; chess_char_4_11_b chess_char_1_19_b chess_char_4_07_b chess_char_4_09_b chess_char_1_01_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b token_10041_cathy_catsld token_10041_cathy_catsld", @@ -1540,33 +1540,33 @@ "round": 10, "seed": 1175070139, "waveId": "act1autochess_h03", - "time": 112.63, - "ticks": 3379, + "time": 113.1, + "ticks": 3393, "reason": "cleared", "killed": 24, "total": 24, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 324, + "rngDraws": 320, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":235584,"bossDmg":0,"heal":433,"deaths":4,"layerGains":{}}}, + "players": {"p1":{"killed":24,"total":24,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":235584,"bossDmg":0,"heal":562,"deaths":4,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,4,0,35,3842,0,1,1], - ["p1",2,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,6,0,3603,1971,0,21,1], - ["p1",3,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,7,1,3163,2383,0,11,11], - ["p1",4,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,5,5,70228,0,0,29,4], - ["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,4,25593,0,0,87,6], - ["p1",6,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,8,68647,0,0,122,3], - ["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,3,4,37818,0,0,19,2], - ["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,8,2,26495,2665,433,15,2], + ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,4,0,0,4098,0,0,1], + ["p1",2,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,6,0,5593,1971,0,22,1], + ["p1",3,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,7,0,2860,2383,0,12,12], + ["p1",4,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,5,4,69786,0,0,28,4], + ["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,1,3,26577,0,0,87,6], + ["p1",6,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,2,11,70474,0,0,122,3], + ["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,3,3,33687,0,0,19,3], + ["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,8,3,26608,2794,562,18,3], ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,9,0,0,0,0,0,null], ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,10,0,0,0,0,0,null] ], - "enemies": {"enemy_1010_demon":[7,7,0,970,60480],"enemy_1422_lrsldr_2":[14,14,0,0,88704],"enemy_1425_lrcmra_2":[3,3,0,9891,86400]}, - "hooks": [1,34,3379,323,323,615,615,233,28,28,30,27,87,3581,130,10,24,0,1,28,0,0,0], - "events": {"atk":364,"deploy":10,"die":28,"dmg":615,"engage":8,"fx":162,"skill":57,"spawn":34,"status":221}, - "fx": {"charge":11,"crit":61,"dilemma":4,"displace":16,"garrisonGrant":1,"levitate":21,"overclock":1,"pull":1,"quadShot":3,"slippery":2,"sp":27,"splash":8,"tornado":1,"tornadoPulse":5}, - "snaps": "cb85902a 979c894f c24af28f 18b55b58 f3d9be79 5a09ecf9 0646f478 cd42ac34 c07b9a9a 40c2ab66 32642008 09bbb03f" + "enemies": {"enemy_1010_demon":[7,7,0,534,60480],"enemy_1422_lrsldr_2":[14,14,0,0,88704],"enemy_1425_lrcmra_2":[3,3,0,10712,86400]}, + "hooks": [1,34,3393,326,326,605,605,302,28,28,33,29,87,3660,130,15,24,0,1,28,0,0,0], + "events": {"atk":364,"deploy":10,"die":28,"dmg":605,"engage":7,"fx":163,"skill":62,"spawn":34,"status":206}, + "fx": {"charge":12,"crit":60,"dilemma":4,"displace":18,"garrisonGrant":1,"levitate":22,"overclock":1,"pull":1,"quadShot":3,"slippery":3,"sp":27,"splash":5,"tornado":1,"tornadoPulse":5}, + "snaps": "2c621450 60234b81 3fcc2895 6a156127 0ba0189c bb3c5f45 cfbb3cf5 b1fe0db5 07c28896 fe7620dc e48e3569 aaf8d62c" }, "bond-victoriaShip-low": { "about": "维多利亚 low: tier 1 layers 1; chess_char_3_06_a chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_1_06_a chess_char_2_05_a chess_char_2_10_a", @@ -1671,8 +1671,8 @@ "round": 5, "seed": 3923365115, "waveId": "act1autochess_05", - "time": 60.73, - "ticks": 1822, + "time": 61.03, + "ticks": 1831, "reason": "cleared", "killed": 16, "total": 17, @@ -1680,23 +1680,23 @@ "bossHpLeft": null, "rngDraws": 37, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":16,"total":17,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":98282,"bossDmg":0,"heal":4754,"deaths":2,"layerGains":{}}}, + "players": {"p1":{"killed":16,"total":17,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":97780,"bossDmg":0,"heal":4326,"deaths":2,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_3_12_a",2,null,0,0,3,0,196,2334,0,7,1], + ["p1",1,"op","chess_char_3_12_a",2,null,0,0,3,0,168,2334,0,6,0], ["p1",2,"op","chess_char_3_03_a",1,null,1378,1,6,0,0,0,0,0,0], - ["p1",3,"op","chess_char_2_02_a",1,null,1400,1,1,0,0,0,3267,14,2], - ["p1",4,"op","chess_char_3_08_a",1,null,1594,1,4,2,21129,596,0,8,1], - ["p1",5,"op","chess_char_3_09_a",1,null,1267,1,5,3,22928,721,0,26,1], - ["p1",6,"op","chess_char_3_10_a",1,null,0,0,2,2,9387,2752,0,10,1], + ["p1",3,"op","chess_char_2_02_a",1,null,1400,1,1,0,0,0,2839,14,2], + ["p1",4,"op","chess_char_3_08_a",1,null,1594,1,4,2,21129,168,0,8,1], + ["p1",5,"op","chess_char_3_09_a",1,null,1267,1,5,4,22876,721,0,26,1], + ["p1",6,"op","chess_char_3_10_a",1,null,0,0,2,1,8964,2752,0,10,1], ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,7,6,32494,848,0,25,3], ["p1",8,"op","chess_char_3_13_a",1,null,1064,1,8,3,12149,1487,0,37,7], ["p1",9,"token","token_10000_silent_healrb",null,null,1000,1,29,0,0,0,1487,20,null] ], - "enemies": {"enemy_1116_liprr":[11,11,0,2293,54450],"enemy_1116_liprr_2":[4,4,0,932,27000],"enemy_1118_lidbox_2":[2,1,1,5514,16832]}, - "hooks": [1,28,1822,193,193,205,205,34,18,21,16,16,0,8280,2,27,17,1,1,18,0,0,0], - "events": {"atk":228,"deploy":11,"die":20,"dmg":205,"engage":6,"fx":56,"heal":34,"leak":1,"skill":32,"spawn":26,"status":27}, - "fx": {"aoe":1,"displace":19,"liberate":4,"phase":5,"pull":19,"strike":3,"summon":2,"volley":3}, - "snaps": "1774960c 545a8597 f49caf36 7f8a2b12 0c35034b be56aa15" + "enemies": {"enemy_1116_liprr":[11,11,0,2293,54450],"enemy_1116_liprr_2":[4,4,0,932,27000],"enemy_1118_lidbox_2":[2,1,1,5086,16330]}, + "hooks": [1,28,1831,191,191,202,202,34,18,21,15,15,0,8324,2,26,17,1,1,18,0,0,0], + "events": {"atk":225,"deploy":11,"die":20,"dmg":202,"engage":6,"fx":55,"heal":34,"leak":1,"skill":30,"spawn":26,"status":25}, + "fx": {"aoe":1,"displace":19,"liberate":3,"phase":5,"pull":19,"strike":3,"summon":2,"volley":3}, + "snaps": "1774960c 545a8597 76b2bced 15a43322 4a542e7d 74a46ccc 4ac83a35" }, "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", diff --git a/test/golden/diy.json b/test/golden/diy.json index e69fcb9d..df808a84 100644 --- a/test/golden/diy.json +++ b/test/golden/diy.json @@ -2154,24 +2154,24 @@ "units": [ ["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_thumpy",3714,1,3,0,0,0,0,0,0], ["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_thumpy",3714,1,4,0,0,0,0,0,0], - ["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_thumpy",3714,1,5,13,145789,0,0,0,2], + ["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_thumpy",3714,1,5,14,150684,0,0,0,2], ["p1",4,"op","chess_char_6_diy1_a",0,null,2835,1,7,0,0,0,0,0,0], - ["p1",5,"op","chess_char_6_diy2_a",1,null,2835,1,11,36,317889,0,0,0,4], - ["p1",6,"op","chess_char_6_diy1_a",2,null,2733.8,1,13,26,166453,101,0,76,2], - ["p1",7,"op","chess_char_6_diy2_b",0,"none",3222,1,14,11,85131,242,0,124,3], + ["p1",5,"op","chess_char_6_diy2_a",1,null,2835,1,11,36,317896,0,0,0,4], + ["p1",6,"op","chess_char_6_diy1_a",2,null,2733.8,1,13,26,166254,101,0,76,2], + ["p1",7,"op","chess_char_6_diy2_b",0,"none",3222,1,14,11,85132,242,0,124,3], ["p1",8,"op","chess_char_6_diy1_b",1,"none",3464,1,8,9,71995,0,0,0,4], ["p1",9,"op","chess_char_6_diy2_b",2,"none",3283.6,1,12,9,81221,180,0,76,2], ["p1",10,"op","chess_char_6_diy1_b",0,"uniequip_002_thumpy",3914,1,9,0,0,0,0,0,0], - ["p1",11,"op","chess_char_6_diy2_b",1,"uniequip_002_thumpy",3914,1,10,10,90562,0,0,0,1], + ["p1",11,"op","chess_char_6_diy2_b",1,"uniequip_002_thumpy",3914,1,10,9,85858,0,0,0,1], ["p1",12,"op","chess_char_6_diy1_b",2,"uniequip_002_thumpy",3914,1,6,0,0,0,0,0,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] ], "enemies": {"enemy_1381_winman":[27,27,0,198,150336],"enemy_1381_winman_2":[48,48,0,194,359424],"enemy_1387_winshd":[39,39,0,132,449280]}, - "hooks": [1,128,6000,638,638,2626,4420,0,114,114,18,18,0,21502,828,127,114,0,1,114,0,190,0], - "events": {"atk":777,"deploy":12,"die":114,"dmg":4090,"engage":3,"fx":694,"skill":36,"spawn":128,"status":1988}, - "fx": {"burst":190,"displace":16,"shield":473,"zone":15}, - "snaps": "00a90afe fa730e10 76d04d67 c9bf233b de86509b f197a1be de175653 94b37d97 c588bc93 1c037e9c a091b0f5 fc60818d 1091ad41 1156590c 073916eb 553c9605 8ede4bbf af662205 73e9e673 ea61ed82" + "hooks": [1,128,6000,640,640,2628,4423,0,114,114,18,18,0,21502,828,127,114,0,1,114,0,190,0], + "events": {"atk":779,"deploy":12,"die":114,"dmg":4091,"engage":3,"fx":692,"skill":36,"spawn":128,"status":1989}, + "fx": {"burst":190,"displace":16,"shield":471,"zone":15}, + "snaps": "00a90afe 8ab9145f 036b1fc4 25e62a9f 926a9f27 847ba8da 6f592c87 f0b39913 a8bc3409 c574d2f9 8e6e657a ee991610 3f41e73a acc324f7 c9f42c79 6afc3cf2 6d141175 e21e35cc 68fdc79e 470986f3" }, "diy-054": { "about": "5_diy1_a=zumama/S1 5_diy2_a=zumama/S2 5_diy1_a=zumama/S3 5_diy2_b=zumama/S1 5_diy1_b=zumama/S2 5_diy2_b=zumama/S3 5_diy1_b=zumama/S1/002_zumama 5_diy2_b=zumama/S2/002_zumama 5_diy1_b=zumama/S3/002_zumama 5_diy2_b=zumama/S1/003_zumama 5_diy1_b=zumama/S2/003_zumama 5_diy2_b=zumama/S3/003_zumama", @@ -3613,7 +3613,7 @@ "hooks": [1,99,5790,210,210,471,471,0,36,95,14,14,0,8331,41,2,75,59,1,36,0,0,0], "events": {"atk":210,"deploy":22,"die":36,"dmg":471,"engage":12,"fx":27,"leak":59,"skill":28,"spawn":89,"status":50}, "fx": {"displace":3,"zone":24}, - "snaps": "5eb2501d 26e736c0 4769f628 34b249e5 ed806a8c 857806de 384bcf91 5cf920bd ca5daf2f 3904964f 14f2b39b 454a4bad 2960245d caa268c0 bad55e1b 9062066d f10ce0e8 be8c7b68 92543b58 fa24e103" + "snaps": "5eb2501d 26e736c0 4769f628 4190ceac 853671cd f86bff43 3dae23d4 8c6f3a88 9b818bf2 1a29d028 33da9d2c c3fc11d6 6f2f01e2 a291c463 7e9bf904 63c3f232 7ec4ca47 9e36e01b 3cd2a853 723fe2c4" }, "diy-085": { "about": "6_diy1_a=ray/S1 6_diy2_a=ray/S2 6_diy1_a=ray/S3 6_diy2_b=ray/S1 6_diy1_b=ray/S2 6_diy2_b=ray/S3 6_diy1_b=ray/S1/002_ray 6_diy2_b=ray/S2/002_ray 6_diy1_b=ray/S3/002_ray 6_diy2_b=ray/S1/003_ray 6_diy1_b=ray/S2/003_ray 6_diy2_b=ray/S3/003_ray", @@ -3624,8 +3624,8 @@ "round": 13, "seed": 2664068408, "waveId": "act1autochess_h06", - "time": 226.4, - "ticks": 6792, + "time": 226.57, + "ticks": 6797, "reason": "cleared", "killed": 2, "total": 78, @@ -3633,26 +3633,26 @@ "bossHpLeft": null, "rngDraws": 0, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":2,"total":78,"perfect":false,"leaks":76,"leaksUncounted":0,"coins":0,"dmg":383987,"bossDmg":0,"heal":0,"deaths":20,"layerGains":{}}}, + "players": {"p1":{"killed":2,"total":78,"perfect":false,"leaks":76,"leaksUncounted":0,"coins":0,"dmg":412514,"bossDmg":0,"heal":0,"deaths":20,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_6_diy1_a",0,null,1507,1,2,1,59958,0,0,76,15], - ["p1",2,"op","chess_char_6_diy2_a",1,null,1507,1,3,0,45777,0,0,66,1], - ["p1",3,"op","chess_char_6_diy1_a",2,null,1507,1,4,0,72785,0,0,78,4], - ["p1",4,"op","chess_char_6_diy2_b",0,"none",0,0,97,0,30814,5367,0,24,5], - ["p1",5,"op","chess_char_6_diy1_b",1,"none",0,0,101,0,16011,5367,0,24,0], - ["p1",6,"op","chess_char_6_diy2_b",2,"none",1789,1,102,1,32490,3578,0,21,1], - ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_002_ray",0,0,72,0,6322,3978,0,11,2], - ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_ray",0,0,56,0,7663,3978,0,12,0], - ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_ray",0,0,63,0,33694,3978,0,23,1], - ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_003_ray",0,0,53,0,24248,3978,0,17,3], - ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_ray",0,0,85,0,17897,3978,0,20,1], - ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_ray",0,0,91,0,36327,3978,0,23,1] + ["p1",1,"op","chess_char_6_diy1_a",0,null,1507,1,2,0,67445,0,0,76,15], + ["p1",2,"op","chess_char_6_diy2_a",1,null,1507,1,3,0,48050,0,0,65,1], + ["p1",3,"op","chess_char_6_diy1_a",2,null,1507,1,4,1,80579,0,0,77,4], + ["p1",4,"op","chess_char_6_diy2_b",0,"none",0,0,97,0,35066,5367,0,25,5], + ["p1",5,"op","chess_char_6_diy1_b",1,"none",0,0,101,0,14704,5367,0,23,0], + ["p1",6,"op","chess_char_6_diy2_b",2,"none",1789,1,102,1,29004,3578,0,17,1], + ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_002_ray",0,0,63,0,16415,3978,0,16,3], + ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_ray",0,0,56,0,7542,3978,0,12,0], + ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_ray",0,0,72,0,32584,3978,0,21,1], + ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_003_ray",0,0,53,0,25851,3978,0,17,3], + ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_ray",0,0,85,0,17747,3978,0,20,1], + ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_ray",0,0,91,0,37527,3978,0,23,1] ], - "enemies": {"enemy_1045_hammer_2":[18,0,18,15512,62938],"enemy_1061_zomshd":[60,2,58,22668,321048]}, - "hooks": [1,102,6792,439,439,437,437,20476,22,98,34,33,0,17817,60,21,78,76,1,22,0,0,0], - "events": {"atk":439,"deploy":24,"die":22,"dmg":437,"engage":12,"fx":11,"leak":76,"skill":67,"spawn":90,"status":53}, - "fx": {"displace":11}, - "snaps": "ef383942 52aa8e8a 8f415587 34d6878a 85cd9e60 2030f8b5 efa85275 e3cd21a6 f4b97bf9 a5f0a3b3 5f707775 2e81c9fd 67e18fb6 839fbc1f 1f5c02ea 20badd63 d6e70120 0740d56b 7f415109 d30fce5f 819ff4bd d50c03a7 cbd25e70" + "enemies": {"enemy_1045_hammer_2":[18,0,18,12600,41514],"enemy_1061_zomshd":[60,2,58,25580,370999]}, + "hooks": [1,102,6797,439,439,439,439,21112,22,98,35,34,0,17667,60,23,78,76,1,22,0,0,0], + "events": {"atk":439,"deploy":24,"die":22,"dmg":439,"engage":12,"fx":15,"leak":76,"skill":69,"spawn":90,"status":68}, + "fx": {"displace":15}, + "snaps": "302b7a03 2519ff22 acad49df ef6229e8 0ca972e6 99d14293 0b4e6cfe 29980344 1677c1ca 9af09a6e a78d20cb 0e1146f7 b474b3cf 3b82e1a2 255ddf94 3f4712aa 87f33be9 ce3fade5 dad45133 0a4b0f36 d62aae1e fd5fd458 80709e27" }, "diy-086": { "about": "5_diy1_a=ascln/S1 5_diy2_a=ascln/S2 5_diy1_a=ascln/S3 5_diy2_b=ascln/S1 5_diy1_b=ascln/S2 5_diy2_b=ascln/S3 5_diy1_b=ascln/S1/002_ascln 5_diy2_b=ascln/S2/002_ascln 5_diy1_b=ascln/S3/002_ascln 5_diy2_b=ascln/S1/003_ascln 5_diy1_b=ascln/S2/003_ascln 5_diy2_b=ascln/S3/003_ascln", @@ -4302,13 +4302,13 @@ "time": 230, "ticks": 6900, "reason": "timeout", - "killed": 22, + "killed": 21, "total": 114, "unspawned": 0, "bossHpLeft": null, "rngDraws": 890, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":22,"total":114,"perfect":false,"leaks":92,"leaksUncounted":0,"coins":0,"dmg":312241,"bossDmg":0,"heal":20329,"deaths":29,"layerGains":{}}}, + "players": {"p1":{"killed":21,"total":114,"perfect":false,"leaks":93,"leaksUncounted":0,"coins":0,"dmg":312254,"bossDmg":0,"heal":20329,"deaths":29,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_5_diy1_a",0,null,0,0,148,1,9956,5652,0,148,0], ["p1",2,"op","chess_char_5_diy2_a",1,null,1243,1,150,1,5521,4409,0,97,0], @@ -4317,17 +4317,17 @@ ["p1",5,"op","chess_char_5_diy1_b",1,"none",1653,1,151,1,6282,6612,0,143,0], ["p1",6,"op","chess_char_5_diy2_b",2,"none",1653,1,146,2,36603,4959,0,139,0], ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_002_haak",2149.78,1,149,2,9357,6335,1624,79,2], - ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_haak",3430.5,1,76,2,41964,7890,4483,119,4], - ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_haak",1875.34,1,6,6,95719,5237,4826,172,4], + ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_haak",3430.5,1,76,2,39768,7890,4483,119,4], + ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_haak",1875.34,1,6,5,97929,5237,4826,172,4], ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_003_haak",2047,1,152,0,3942,8413,328,13,0], ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_haak",1340.78,1,138,2,34594,8894,4094,79,3], ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_haak",0,0,2,4,47959,7022,4975,153,3] ], - "enemies": {"enemy_1381_winman":[27,10,17,53,90589],"enemy_1381_winman_2":[48,12,36,7663,180218],"enemy_1387_winshd":[39,0,37,27489,41434]}, - "hooks": [1,152,6900,1710,1710,1807,2638,215,51,141,16,33,0,14125,527,37,114,90,1,51,0,0,5], - "events": {"atk":1710,"deploy":38,"die":51,"dmg":1791,"engage":12,"fx":305,"heal":206,"leak":90,"skill":76,"spawn":126,"status":796}, + "enemies": {"enemy_1381_winman":[27,9,18,53,90059],"enemy_1381_winman_2":[48,12,36,7663,180738],"enemy_1387_winshd":[39,0,37,27489,41458]}, + "hooks": [1,152,6900,1710,1710,1807,2638,215,50,141,16,33,0,14125,527,37,114,91,1,50,0,0,5], + "events": {"atk":1710,"deploy":38,"die":50,"dmg":1791,"engage":12,"fx":305,"heal":206,"leak":91,"skill":76,"spawn":126,"status":794}, "fx": {"aoe":7,"buff":9,"crit":244,"displace":17,"dodge":5,"heal":5,"shield":7,"volley":11}, - "snaps": "0a6d17b3 cd5b0b94 5c5fe657 cf182993 70392526 4f220cf1 d9a37363 536eea0f 984fbafc 40ad4965 58f6f208 135d5359 46b74bdf 1d768a13 677aee77 e2e6d764 335b70b4 e372b4fb 288dd670 9a638e14 0f4e9c34 eeebe7e0 fdd6d6c3" + "snaps": "0a6d17b3 cd5b0b94 5c5fe657 cf182993 70392526 4f220cf1 d9a37363 536eea0f 984fbafc 40ad4965 58f6f208 135d5359 46b74bdf abe6bc8e 3a83ef6b 5a886fd0 335316f8 d58be294 2e08cd3a 8aeb9e02 1366b589 71a3199f b1ed89f2" }, "diy-102": { "about": "5_diy1_b=phatom/S1/002_phatom 5_diy2_b=phatom/S2/002_phatom 5_diy1_b=phatom/S3/002_phatom 5_diy2_b=phatom/S1/003_phatom 5_diy1_b=phatom/S2/003_phatom 5_diy2_b=phatom/S3/003_phatom 5_diy1_b=phatom/S1/004_phatom 5_diy2_b=phatom/S2/004_phatom 5_diy1_b=phatom/S3/004_phatom 6_diy1_a=phatom/S1 6_diy2_a=phatom/S2 6_diy1_a=phatom/S3", @@ -4369,7 +4369,7 @@ "hooks": [1,162,6900,901,901,932,917,7223,69,154,0,38,0,0,31,73,117,85,1,69,0,0,15], "events": {"atk":901,"deploy":42,"die":69,"dmg":900,"engage":12,"fx":421,"leak":85,"skill":83,"spawn":132,"status":110}, "fx": {"aoe":12,"buff":15,"displace":12,"dodge":15,"expose":352,"shield":15}, - "snaps": "22057a43 e979e325 58c21275 0e318d82 f1a489d0 480e8f9e 36a09ceb bfc0f20e 5886d7cf d7218bb5 646e4158 aecbb06c f728a7d3 6bc561d8 8b6787a4 032775b9 6f4f69d9 f211f597 b58658be 27abff1b ef874327 894a4ac3 f420bec4" + "snaps": "22057a43 e979e325 58c21275 0e318d82 f1a489d0 480e8f9e 36a09ceb bfc0f20e 5886d7cf d7218bb5 646e4158 aecbb06c a19fe55c 3f64f495 dc1a8d69 6bccee64 70e0d18c 1dd120a2 d9751fc3 542489ba 40ebcaf2 5914d84a dc001495" }, "diy-103": { "about": "6_diy1_b=phatom/S1 6_diy2_b=phatom/S2 6_diy1_b=phatom/S3 6_diy2_b=phatom/S1/002_phatom 6_diy1_b=phatom/S2/002_phatom 6_diy2_b=phatom/S3/002_phatom 6_diy1_b=phatom/S1/003_phatom 6_diy2_b=phatom/S2/003_phatom 6_diy1_b=phatom/S3/003_phatom 6_diy2_b=phatom/S1/004_phatom 6_diy1_b=phatom/S2/004_phatom 6_diy2_b=phatom/S3/004_phatom", @@ -4411,7 +4411,7 @@ "hooks": [1,165,6192,692,692,2323,2937,0,52,160,0,37,0,0,39,57,123,108,1,52,0,17,19], "events": {"atk":692,"deploy":39,"die":52,"dmg":2923,"engage":12,"fx":97,"leak":108,"skill":77,"spawn":138,"status":124}, "fx": {"aoe":10,"buff":16,"burst":17,"displace":22,"dodge":19,"shield":13}, - "snaps": "9380cef0 bee89eff 86bcda41 bd8892f9 4844bcdd c1e5ee48 5649303e f41e1610 1899dbef 838bd2f5 3e3f1744 4024460d cb6cfc2a 45a30af7 52850415 1dc8a189 7a68785c 47f22e83 487755f7 ba77a6a2 fb0feb72" + "snaps": "9380cef0 bee89eff 86bcda41 bd8892f9 4844bcdd c1e5ee48 5649303e f41e1610 1899dbef 838bd2f5 3e3f1744 4024460d cb6cfc2a 45a30af7 52850415 aa26afb6 cd574ec5 a91b289d 3af4960e 7ee6e107 069258b3" }, "diy-104": { "about": "5_diy1_a=crosly/S1 5_diy2_a=crosly/S2 5_diy1_a=crosly/S3 5_diy2_b=crosly/S1 5_diy1_b=crosly/S2 5_diy2_b=crosly/S3 5_diy1_b=crosly/S1/002_crosly 5_diy2_b=crosly/S2/002_crosly 5_diy1_b=crosly/S3/002_crosly 5_diy2_b=crosly/S1/003_crosly 5_diy1_b=crosly/S2/003_crosly 5_diy2_b=crosly/S3/003_crosly", @@ -4589,28 +4589,28 @@ "bossHpLeft": null, "rngDraws": 0, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":3,"total":72,"perfect":false,"leaks":69,"leaksUncounted":0,"coins":0,"dmg":42402,"bossDmg":0,"heal":0,"deaths":22,"layerGains":{}}}, + "players": {"p1":{"killed":3,"total":72,"perfect":false,"leaks":69,"leaksUncounted":0,"coins":0,"dmg":42194,"bossDmg":0,"heal":0,"deaths":22,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_5_diy1_a",0,null,1803,1,98,0,0,3606,0,0,0], ["p1",2,"op","chess_char_5_diy2_a",1,null,0,0,96,0,0,5409,0,0,0], ["p1",3,"op","chess_char_5_diy1_a",2,null,0,0,92,0,0,5409,0,0,0], ["p1",4,"op","chess_char_5_diy2_b",0,"none",0,0,82,0,0,4230,0,0,0], ["p1",5,"op","chess_char_5_diy1_b",1,"none",2033.01,1,97,0,0,2197,0,0,0], - ["p1",6,"op","chess_char_5_diy2_b",2,"none",0,0,8,3,23273,2115,0,0,1], + ["p1",6,"op","chess_char_5_diy2_b",2,"none",0,0,8,3,23169,2115,0,0,1], ["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_weedy",0,0,51,0,0,4510,0,0,0], ["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_weedy",0,0,9,0,0,2255,0,0,0], - ["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_weedy",0,0,59,0,12777,4510,0,0,1], + ["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_weedy",0,0,59,0,12737,4510,0,0,1], ["p1",10,"op","chess_char_5_diy2_b",0,"uniequip_003_weedy",0,0,62,0,0,4230,0,0,0], ["p1",11,"op","chess_char_5_diy1_b",1,"uniequip_003_weedy",0,0,61,0,0,4230,0,0,0], - ["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_003_weedy",0,0,3,0,6352,2115,0,0,1], + ["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_003_weedy",0,0,3,0,6288,2115,0,0,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_1005_yokai_2":[18,3,15,632,6428],"enemy_1041_lazerd_2":[24,0,24,44183,9581],"enemy_1042_frostd":[30,0,30,0,26393]}, - "hooks": [1,98,6614,160,160,885,885,0,25,94,3,3,0,9977,0,0,72,69,1,25,0,0,0], - "events": {"atk":160,"deploy":24,"die":25,"dmg":885,"fx":3,"leak":69,"skill":6,"spawn":86,"status":46}, + "enemies": {"enemy_1005_yokai_2":[18,3,15,632,6428],"enemy_1041_lazerd_2":[24,0,24,44183,9517],"enemy_1042_frostd":[30,0,30,0,26249]}, + "hooks": [1,98,6614,160,160,881,881,0,25,94,3,3,0,9975,0,0,72,69,1,25,0,0,0], + "events": {"atk":160,"deploy":24,"die":25,"dmg":881,"fx":3,"leak":69,"skill":6,"spawn":86,"status":46}, "fx": {"frostNova":3}, - "snaps": "a368b8f2 d45a8ec9 39e7a9b1 cbff0fb4 a6e1b986 8fbf8c29 a052c127 2ff52619 cbf65d39 e2a931fc e6a3d4c2 c56cde41 634006f9 42d9d356 1b8cdbe5 041abb7d 848b1964 79eba260 a9aacca1 200af66c 0594088c c1749443" + "snaps": "a368b8f2 d45a8ec9 30ee7de6 c857b356 b4a4a683 5b75b91b c8f715e6 3a4f5b39 47f98959 5e0cc29c 5657eee2 e9dbc061 03040f19 e9122076 d9d08605 85abe21d 6978be04 49efe180 8acb7141 162da98c bf2ab02c ee0e1863" }, "diy-109": { "about": "6_diy1_a=weedy/S1 6_diy2_a=weedy/S2 6_diy1_a=weedy/S3 6_diy2_b=weedy/S1 6_diy1_b=weedy/S2 6_diy2_b=weedy/S3 6_diy1_b=weedy/S1/002_weedy 6_diy2_b=weedy/S2/002_weedy 6_diy1_b=weedy/S3/002_weedy 6_diy2_b=weedy/S1/003_weedy 6_diy1_b=weedy/S2/003_weedy 6_diy2_b=weedy/S3/003_weedy", @@ -4630,17 +4630,17 @@ "bossHpLeft": null, "rngDraws": 0, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":2,"total":123,"perfect":false,"leaks":121,"leaksUncounted":0,"coins":0,"dmg":99270,"bossDmg":0,"heal":0,"deaths":22,"layerGains":{}}}, + "players": {"p1":{"killed":2,"total":123,"perfect":false,"leaks":121,"leaksUncounted":0,"coins":0,"dmg":97030,"bossDmg":0,"heal":0,"deaths":22,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_6_diy1_a",0,null,1803,1,150,0,0,3606,0,0,0], ["p1",2,"op","chess_char_6_diy2_a",1,null,0,0,124,0,0,3606,0,0,0], ["p1",3,"op","chess_char_6_diy1_a",2,null,865.31,1,149,0,0,4544,0,0,0], ["p1",4,"op","chess_char_6_diy2_b",0,"none",0,0,79,0,0,4230,0,0,0], ["p1",5,"op","chess_char_6_diy1_b",1,"none",0,0,134,0,0,4230,0,0,0], - ["p1",6,"op","chess_char_6_diy2_b",2,"none",0,0,142,0,32111,4230,0,13,1], + ["p1",6,"op","chess_char_6_diy2_b",2,"none",0,0,142,0,30447,4230,0,13,1], ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_002_weedy",0,0,5,0,3599,2325,0,4,1], - ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_weedy",0,0,90,1,6006,4650,0,7,0], - ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_weedy",0,0,85,1,11699,4650,0,7,2], + ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_weedy",0,0,90,1,5846,4650,0,7,0], + ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_weedy",0,0,85,1,11283,4650,0,7,2], ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_003_weedy",0,0,82,0,11535,4230,0,12,4], ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_weedy",0,0,86,0,32542,4230,0,29,0], ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_weedy",0,0,6,0,1778,2115,0,3,1], @@ -4648,11 +4648,11 @@ ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], - "enemies": {"enemy_1019_jshoot_2":[57,1,56,31655,36790],"enemy_1299_ymkilr_2":[27,0,27,13739,7133],"enemy_1422_lrsldr_2":[39,1,38,1252,55347]}, - "hooks": [1,150,6596,384,384,886,886,0,24,145,9,9,0,16367,6,24,123,121,1,24,0,0,0], - "events": {"atk":430,"deploy":24,"die":24,"dmg":886,"engage":7,"fx":12,"leak":121,"skill":18,"spawn":138,"status":12}, + "enemies": {"enemy_1019_jshoot_2":[57,1,56,31655,36214],"enemy_1299_ymkilr_2":[27,0,27,13739,7133],"enemy_1422_lrsldr_2":[39,1,38,1252,53683]}, + "hooks": [1,150,6596,384,384,826,826,0,24,145,9,9,0,16367,6,24,123,121,1,24,0,0,0], + "events": {"atk":430,"deploy":24,"die":24,"dmg":826,"engage":7,"fx":12,"leak":121,"skill":18,"spawn":138,"status":12}, "fx": {"displace":10,"frostNova":2}, - "snaps": "1ec1058a 353e98bb 34fd9a38 0d51d5b3 93bfc303 1b893497 43d88492 331d5c62 b4a648f7 784992d9 7539f598 aa80f976 b8df1f53 a3b4697d 3e382f0f 78b3385f 3fa32035 f698fb44 7272ecca 864aacc5 d65347bc 4448e28c" + "snaps": "1ec1058a 353e98bb 83a1daa8 5f884a94 bb3ca246 7d5c1665 301aed07 ef2dc437 9e9fdf26 d9c7dc24 89a39fd1 b3f19b5b 472348d6 83f384e8 54de5082 76ea7c3e c116b5b0 3cbffa2d 1efc23df bf4e1b80 1516f9ed 6e7f47a9" }, "diy-110": { "about": "5_diy1_a=wang/S1 5_diy2_a=wang/S2 5_diy1_a=wang/S3 5_diy2_b=wang/S1 5_diy1_b=wang/S2 5_diy2_b=wang/S3 5_diy1_b=wang/S1/002_wang 5_diy2_b=wang/S2/002_wang 5_diy1_b=wang/S3/002_wang 6_diy1_a=wang/S1 6_diy2_a=wang/S2 6_diy1_a=wang/S3", @@ -4870,29 +4870,29 @@ "round": 13, "seed": 4120508441, "waveId": "act1autochess_h06", - "time": 205.97, - "ticks": 6179, + "time": 205.67, + "ticks": 6170, "reason": "cleared", - "killed": 106, + "killed": 99, "total": 93, "unspawned": 0, "bossHpLeft": null, "rngDraws": 8, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":106,"total":93,"perfect":false,"leaks":83,"leaksUncounted":0,"coins":0,"dmg":604810,"bossDmg":0,"heal":0,"deaths":18,"layerGains":{}}}, + "players": {"p1":{"killed":99,"total":93,"perfect":false,"leaks":90,"leaksUncounted":0,"coins":0,"dmg":573418,"bossDmg":0,"heal":0,"deaths":18,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_6_diy1_a",0,null,0,0,162,10,98104,3768,0,58,2], - ["p1",2,"op","chess_char_6_diy2_a",1,null,0,0,202,16,43127,3768,0,51,2], - ["p1",3,"op","chess_char_6_diy1_a",2,null,0,0,186,8,44934,3768,0,43,1], - ["p1",4,"op","chess_char_6_diy2_b",0,"none",2216,1,191,15,90315,2216,0,76,2], - ["p1",5,"op","chess_char_6_diy1_b",1,"none",1446,1,216,16,102990,5202,0,44,1], - ["p1",6,"op","chess_char_6_diy2_b",2,"none",0,0,170,10,80176,4432,0,47,1], + ["p1",1,"op","chess_char_6_diy1_a",0,null,0,0,166,7,99986,3768,0,58,2], + ["p1",2,"op","chess_char_6_diy2_a",1,null,0,0,202,16,44890,3768,0,48,2], + ["p1",3,"op","chess_char_6_diy1_a",2,null,0,0,189,8,51429,3768,0,45,1], + ["p1",4,"op","chess_char_6_diy2_b",0,"none",2216,1,196,13,75352,2216,0,75,2], + ["p1",5,"op","chess_char_6_diy1_b",1,"none",1446,1,219,17,101720,5202,0,45,1], + ["p1",6,"op","chess_char_6_diy2_b",2,"none",0,0,174,12,76683,4432,0,47,1], ["p1",7,"op","chess_char_5_diy1_a",0,null,1359,1,4,0,0,0,0,0,0], - ["p1",8,"op","chess_char_5_diy2_a",1,null,1359,1,5,1,33720,0,0,54,0], - ["p1",9,"op","chess_char_5_diy1_a",2,null,278.33,1,15,1,69590,1081,0,68,4], - ["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,167,2,7065,3140,0,27,2], - ["p1",11,"op","chess_char_5_diy1_b",1,"none",0,0,159,2,7098,3140,0,21,4], - ["p1",12,"op","chess_char_5_diy2_b",2,"none",0,0,187,2,16680,4710,0,16,1], + ["p1",8,"op","chess_char_5_diy2_a",1,null,1359,1,5,4,35354,0,0,53,0], + ["p1",9,"op","chess_char_5_diy1_a",2,null,1359,1,165,0,49095,1359,0,45,2], + ["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,171,2,7883,3140,0,27,2], + ["p1",11,"op","chess_char_5_diy1_b",1,"none",0,0,162,2,7097,3140,0,21,4], + ["p1",12,"op","chess_char_5_diy2_b",2,"none",0,0,123,2,12918,3140,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], @@ -4902,16 +4902,16 @@ ["p1","~4","token","token_10024_ebnhlz_rcube",null,null,1000,0,81,0,4361,0,0,0,null] ], "enemies": { - "enemy_1197_sfshu": [15,9,6,233,53765], - "enemy_1197_sfshu_2": [39,23,16,7938,171426], - "enemy_1198_msfshu": [27,21,6,0,112], - "enemy_1198_msfshu_2": [69,42,27,0,348], - "enemy_9010_acpupp": [39,11,28,21238,449669] + "enemy_1197_sfshu": [15,10,5,370,55235], + "enemy_1197_sfshu_2": [39,22,17,7241,164109], + "enemy_1198_msfshu": [30,22,8,0,114], + "enemy_1198_msfshu_2": [66,34,32,0,298], + "enemy_9010_acpupp": [39,11,28,20997,425268] }, - "hooks": [1,219,6179,587,587,2744,2520,0,124,211,20,18,61,13129,23,42,189,83,1,137,0,0,0], - "events": {"atk":973,"deploy":27,"die":128,"dmg":2520,"engage":11,"fx":145,"leak":83,"skill":38,"spawn":208,"status":442}, - "fx": {"aoe":4,"dash":3,"displace":8,"ember":13,"pull":8,"shieldBreak":36,"summon":36,"takeoff":9,"telegraph":13,"volley":15}, - "snaps": "216e6311 22bbd174 e2861a2f db9fa2cb 9ccc6a30 fe834987 143b56d4 3e1bf123 0a9fb02b eb5b35d6 033fff75 60f27492 bf703ce7 93e8e5aa eb86edae eeb8fb64 a361acb7 20b6a8cd f300097c f0f3ad12 0ab29755" + "hooks": [1,219,6170,557,557,2662,2441,0,117,211,18,17,61,12473,20,37,189,90,1,130,0,0,0], + "events": {"atk":939,"deploy":27,"die":121,"dmg":2441,"engage":11,"fx":141,"leak":90,"skill":35,"spawn":208,"status":456}, + "fx": {"aoe":4,"dash":3,"displace":8,"ember":13,"pull":8,"shieldBreak":32,"summon":36,"takeoff":9,"telegraph":13,"volley":15}, + "snaps": "216e6311 92876c58 8b0ddc22 035398db 3ea00633 7b3355b0 7b146654 a014712a 51edf5e0 9e8a0db4 e46f26df 17a0436f 494febc5 3678c5bd 5df4ce09 eae0f373 a26812ad 7066422d 538eee47 0bfe1acb 554444c7" }, "diy-115": { "about": "5_diy1_b=ebnhlz/S1/002_ebnhlz 5_diy2_b=ebnhlz/S2/002_ebnhlz 5_diy1_b=ebnhlz/S3/002_ebnhlz 5_diy2_b=ebnhlz/S1/003_ebnhlz 5_diy1_b=ebnhlz/S2/003_ebnhlz 5_diy2_b=ebnhlz/S3/003_ebnhlz 5_diy1_b=ebnhlz/S1/004_ebnhlz 5_diy2_b=ebnhlz/S2/004_ebnhlz 5_diy1_b=ebnhlz/S3/004_ebnhlz 6_diy1_a=ebnhlz/S1 6_diy2_a=ebnhlz/S2 6_diy1_a=ebnhlz/S3", @@ -4922,63 +4922,63 @@ "round": 12, "seed": 2479968306, "waveId": "act1autochess_h05", - "time": 205.6, - "ticks": 6168, + "time": 201.5, + "ticks": 6045, "reason": "cleared", - "killed": 154, + "killed": 156, "total": 96, "unspawned": 0, "bossHpLeft": null, "rngDraws": 0, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":154,"total":96,"perfect":false,"leaks":78,"leaksUncounted":0,"coins":0,"dmg":511834,"bossDmg":0,"heal":0,"deaths":10,"layerGains":{}}}, + "players": {"p1":{"killed":156,"total":96,"perfect":false,"leaks":70,"leaksUncounted":0,"coins":0,"dmg":502125,"bossDmg":0,"heal":0,"deaths":9,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_ebnhlz",1570,1,10,4,57606,0,0,47,5], - ["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_ebnhlz",1570,1,11,7,31893,0,0,29,0], - ["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_ebnhlz",1570,1,1,6,12372,0,0,24,4], - ["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_ebnhlz",1650,1,3,17,38893,0,0,76,8], - ["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_ebnhlz",1650,1,5,8,48337,0,0,62,7], - ["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_ebnhlz",1650,1,7,11,130273,0,0,49,4], + ["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_ebnhlz",1570,1,11,8,31893,0,0,30,0], + ["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_ebnhlz",1570,1,1,7,8950,0,0,24,4], + ["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_ebnhlz",1650,1,3,21,40584,0,0,76,8], + ["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_ebnhlz",1650,1,5,8,49875,0,0,62,7], + ["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_ebnhlz",1650,1,7,9,128862,0,0,49,4], ["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_004_ebnhlz",1570,1,9,0,0,0,0,0,3], - ["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_004_ebnhlz",1570,1,12,6,63169,0,0,49,14], - ["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_004_ebnhlz",1570,1,269,3,6725,3140,0,10,1], - ["p1",10,"op","chess_char_6_diy1_a",0,null,706.13,1,260,5,11720,3371,0,28,2], - ["p1",11,"op","chess_char_6_diy2_a",1,null,0,0,255,4,17497,4077,0,20,0], - ["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,254,2,17986,4077,0,15,1], + ["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_004_ebnhlz",1570,1,12,5,61651,0,0,50,14], + ["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_004_ebnhlz",0,0,158,0,1442,3140,0,6,2], + ["p1",10,"op","chess_char_6_diy1_a",0,null,1359,1,264,7,10369,2718,0,32,2], + ["p1",11,"op","chess_char_6_diy2_a",1,null,53.27,1,252,4,17545,4024,0,21,0], + ["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,250,2,17986,4077,0,15,1], ["p1","~1","token","token_10024_ebnhlz_rcube",null,null,1000,0,29,0,0,0,0,0,null], ["p1","~2","token","token_10024_ebnhlz_rcube",null,null,1000,0,30,0,13232,0,0,0,null], ["p1","~3","token","token_10024_ebnhlz_rcube",null,null,1000,0,50,0,5752,0,0,0,null], - ["p1","~4","token","token_10024_ebnhlz_rcube",null,null,1000,0,73,0,5177,0,0,0,null], - ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,75,0,0,0,0,0,null], - ["p1","~6","token","token_10024_ebnhlz_rcube",null,null,1000,0,93,0,5177,0,0,0,null], - ["p1","~7","token","token_10024_ebnhlz_rcube",null,null,1000,0,114,0,14956,0,0,0,null], - ["p1","~8","token","token_10024_ebnhlz_rcube",null,null,1000,0,120,0,0,0,0,0,null], - ["p1","~9","token","token_10024_ebnhlz_rcube",null,null,1000,0,132,0,2876,0,0,0,null], - ["p1","~10","token","token_10024_ebnhlz_rcube",null,null,1000,0,150,0,2305,0,0,0,null], - ["p1","~11","token","token_10024_ebnhlz_rcube",null,null,1000,0,160,0,0,0,0,0,null], - ["p1","~12","token","token_10024_ebnhlz_rcube",null,null,1000,0,168,0,5177,0,0,0,null], - ["p1","~13","token","token_10024_ebnhlz_rcube",null,null,1000,0,199,0,9778,0,0,0,null], - ["p1","~14","token","token_10024_ebnhlz_rcube",null,null,1000,0,207,0,0,0,0,0,null], - ["p1","~15","token","token_10024_ebnhlz_rcube",null,null,1000,0,214,0,2876,0,0,0,null], - ["p1","~16","token","token_10024_ebnhlz_rcube",null,null,1000,0,231,0,2880,0,0,0,null], - ["p1","~17","token","token_10024_ebnhlz_rcube",null,null,1000,0,240,0,0,0,0,0,null], - ["p1","~18","token","token_10024_ebnhlz_rcube",null,null,1000,0,243,0,5177,0,0,0,null], - ["p1","~19","token","token_10024_ebnhlz_rcube",null,null,1000,0,259,0,0,0,0,0,null], - ["p1","~20","token","token_10024_ebnhlz_rcube",null,null,1000,1,268,0,0,0,0,0,null], - ["p1","~21","token","token_10024_ebnhlz_rcube",null,null,1000,1,270,0,0,0,0,0,null] + ["p1","~4","token","token_10024_ebnhlz_rcube",null,null,1000,0,70,0,5177,0,0,0,null], + ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,72,0,0,0,0,0,null], + ["p1","~6","token","token_10024_ebnhlz_rcube",null,null,1000,0,85,0,5177,0,0,0,null], + ["p1","~7","token","token_10024_ebnhlz_rcube",null,null,1000,0,108,0,14956,0,0,0,null], + ["p1","~8","token","token_10024_ebnhlz_rcube",null,null,1000,0,114,0,0,0,0,0,null], + ["p1","~9","token","token_10024_ebnhlz_rcube",null,null,1000,0,126,0,2876,0,0,0,null], + ["p1","~10","token","token_10024_ebnhlz_rcube",null,null,1000,0,144,0,2305,0,0,0,null], + ["p1","~11","token","token_10024_ebnhlz_rcube",null,null,1000,0,155,0,0,0,0,0,null], + ["p1","~12","token","token_10024_ebnhlz_rcube",null,null,1000,0,165,0,5177,0,0,0,null], + ["p1","~13","token","token_10024_ebnhlz_rcube",null,null,1000,0,193,0,9778,0,0,0,null], + ["p1","~14","token","token_10024_ebnhlz_rcube",null,null,1000,0,203,0,0,0,0,0,null], + ["p1","~15","token","token_10024_ebnhlz_rcube",null,null,1000,0,210,0,2876,0,0,0,null], + ["p1","~16","token","token_10024_ebnhlz_rcube",null,null,1000,0,227,0,2880,0,0,0,null], + ["p1","~17","token","token_10024_ebnhlz_rcube",null,null,1000,0,236,0,0,0,0,0,null], + ["p1","~18","token","token_10024_ebnhlz_rcube",null,null,1000,0,239,0,5177,0,0,0,null], + ["p1","~19","token","token_10024_ebnhlz_rcube",null,null,1000,0,255,0,0,0,0,0,null], + ["p1","~20","token","token_10024_ebnhlz_rcube",null,null,1000,1,265,0,0,0,0,0,null], + ["p1","~21","token","token_10024_ebnhlz_rcube",null,null,1000,1,266,0,0,0,0,0,null] ], "enemies": { - "enemy_1195_sfyin": [45,23,22,8794,160820], - "enemy_1196_msfyin": [46,33,13,0,194], - "enemy_1197_sfshu": [39,26,13,5871,197074], - "enemy_1198_msfshu": [78,60,18,0,464], + "enemy_1195_sfyin": [45,23,22,8411,157028], + "enemy_1196_msfyin": [46,39,7,0,219], + "enemy_1197_sfshu": [39,24,15,5548,191163], + "enemy_1198_msfshu": [72,58,14,0,455], "enemy_1199_sfjin": [12,12,0,0,186325], - "enemy_1200_msfjin": [12,0,12,0,459] + "enemy_1200_msfjin": [12,0,12,0,463] }, - "hooks": [1,273,6168,461,461,2423,2548,0,164,261,49,47,0,30421,0,28,232,78,1,164,0,0,0], - "events": {"atk":461,"deploy":41,"die":183,"dmg":2548,"engage":11,"fx":193,"leak":78,"skill":96,"spawn":265}, - "fx": {"aoe":13,"displace":17,"pull":17,"summon":82,"volley":64}, - "snaps": "25481013 3b3236fa f6b7b1d9 80f81d61 34ef1943 fc11110a a08ee007 369e405c 41ff7208 5e487926 dafe54d3 1b0b63a8 f995283d 0cacb5c4 02b48bb8 4fb3f62d 355c0b0f e3d263b8 07e90d84 8b402749 0f3160ec" + "hooks": [1,266,6045,462,462,2436,2558,0,165,254,50,48,0,29626,0,23,226,70,1,165,0,0,0], + "events": {"atk":462,"deploy":40,"die":184,"dmg":2558,"engage":11,"fx":189,"leak":70,"skill":98,"spawn":259}, + "fx": {"aoe":13,"displace":17,"pull":17,"summon":80,"volley":62}, + "snaps": "25481013 aa3440f3 4685e7a3 b08da51f 9f758a7e 37f43c16 c79ffc87 98cbe2a3 ba2b8f1a 1407a331 0e301670 3e7c7b8f d9043c7d fd78a0d2 ce3af6b8 cd061667 724823f0 6505b73d 0a991be8 88f7aaf0 6d682149" }, "diy-116": { "about": "6_diy1_b=ebnhlz/S1 6_diy2_b=ebnhlz/S2 6_diy1_b=ebnhlz/S3 6_diy2_b=ebnhlz/S1/002_ebnhlz 6_diy1_b=ebnhlz/S2/002_ebnhlz 6_diy2_b=ebnhlz/S3/002_ebnhlz 6_diy1_b=ebnhlz/S1/003_ebnhlz 6_diy2_b=ebnhlz/S2/003_ebnhlz 6_diy1_b=ebnhlz/S3/003_ebnhlz 6_diy2_b=ebnhlz/S1/004_ebnhlz 6_diy1_b=ebnhlz/S2/004_ebnhlz 6_diy2_b=ebnhlz/S3/004_ebnhlz", @@ -4992,39 +4992,38 @@ "time": 217.6, "ticks": 6528, "reason": "cleared", - "killed": 3, + "killed": 2, "total": 123, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 10, + "rngDraws": 8, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":3,"total":123,"perfect":false,"leaks":120,"leaksUncounted":0,"coins":0,"dmg":293861,"bossDmg":0,"heal":0,"deaths":21,"layerGains":{}}}, + "players": {"p1":{"killed":2,"total":123,"perfect":false,"leaks":121,"leaksUncounted":0,"coins":0,"dmg":288443,"bossDmg":0,"heal":0,"deaths":21,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_6_diy1_b",0,"none",0,0,114,1,20547,3140,0,25,2], - ["p1",2,"op","chess_char_6_diy2_b",1,"none",0,0,91,0,27538,3140,0,18,4], - ["p1",3,"op","chess_char_6_diy1_b",2,"none",0,0,131,0,21860,3140,0,9,1], - ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_ebnhlz",0,0,142,1,15719,3140,0,16,1], - ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_002_ebnhlz",0,0,151,0,18745,4710,0,11,1], - ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_ebnhlz",0,0,78,0,12168,3140,0,7,0], - ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_003_ebnhlz",0,0,74,0,21305,3490,0,5,0], + ["p1",1,"op","chess_char_6_diy1_b",0,"none",0,0,113,1,21882,3140,0,27,2], + ["p1",2,"op","chess_char_6_diy2_b",1,"none",0,0,90,0,27538,3140,0,18,4], + ["p1",3,"op","chess_char_6_diy1_b",2,"none",0,0,130,0,21860,3140,0,9,1], + ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_ebnhlz",0,0,141,0,16756,3140,0,16,1], + ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_002_ebnhlz",0,0,150,0,18745,4710,0,11,1], + ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_ebnhlz",0,0,77,0,12168,3140,0,7,0], + ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_003_ebnhlz",0,0,73,0,21305,3490,0,5,0], ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_003_ebnhlz",0,0,7,0,13689,1745,0,5,0], - ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_003_ebnhlz",0,0,9,0,25461,1745,0,8,1], - ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_004_ebnhlz",0,0,76,0,11814,3140,0,5,0], - ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_004_ebnhlz",0,0,4,0,29832,1570,0,6,2], - ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_004_ebnhlz",0,0,6,0,26897,1570,0,7,1], + ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_003_ebnhlz",0,0,9,0,26215,1745,0,8,1], + ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_004_ebnhlz",0,0,75,0,11814,3140,0,5,0], + ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_004_ebnhlz",0,0,4,0,29683,1570,0,5,1], + ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_004_ebnhlz",0,0,6,0,29794,1570,0,8,1], ["p1","~1","token","token_10024_ebnhlz_rcube",null,null,1000,0,26,0,1907,0,0,0,null], ["p1","~2","token","token_10024_ebnhlz_rcube",null,null,1000,0,27,0,18005,0,0,0,null], ["p1","~3","token","token_10024_ebnhlz_rcube",null,null,1000,0,28,0,5052,0,0,0,null], ["p1","~4","token","token_10024_ebnhlz_rcube",null,null,1000,0,37,1,5491,0,0,0,null], - ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,38,0,11294,0,0,0,null], - ["p1","~6","token","token_10024_ebnhlz_rcube",null,null,1000,0,99,0,2724,0,0,0,null], - ["p1","~7","token","token_10024_ebnhlz_rcube",null,null,1000,0,122,0,3814,0,0,0,null] + ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,98,0,2724,0,0,0,null], + ["p1","~6","token","token_10024_ebnhlz_rcube",null,null,1000,0,121,0,3814,0,0,0,null] ], - "enemies": {"enemy_1006_shield_3":[21,0,21,6953,122938],"enemy_1043_zomsbr":[66,2,64,16695,90295],"enemy_1402_tgshd_2":[36,1,35,10022,80628]}, - "hooks": [1,151,6528,191,191,342,369,12466,24,151,13,13,0,9395,0,26,123,120,1,24,0,1,0], - "events": {"atk":191,"deploy":28,"die":31,"dmg":369,"engage":12,"fx":116,"leak":120,"skill":26,"spawn":142,"status":44}, - "fx": {"aoe":7,"burst":1,"displace":12,"expose":64,"pull":12,"summon":7,"volley":13}, - "snaps": "691ad5fa 5cba8432 c52d9f6d 791d3fcc f5b1cc32 3d6075f5 5ef4c19a 53164dcf 2f1a5ea4 d47ebc6f 7a076464 66fa0c1a b8e47a22 3d87a654 faa2ab12 0e9fbf65 f854368c df256b93 9f1da643 8c6a7db9 51ddbd95 c7846e9e" + "enemies": {"enemy_1006_shield_3":[21,0,21,8025,130381],"enemy_1043_zomsbr":[66,1,65,15266,80405],"enemy_1402_tgshd_2":[36,1,35,10379,77656]}, + "hooks": [1,150,6528,190,190,340,360,12512,23,150,12,12,0,9354,0,24,123,121,1,23,0,1,0], + "events": {"atk":190,"deploy":27,"die":29,"dmg":360,"engage":12,"fx":105,"leak":121,"skill":24,"spawn":141,"status":42}, + "fx": {"aoe":6,"burst":1,"displace":8,"expose":63,"pull":8,"summon":6,"volley":13}, + "snaps": "691ad5fa 646da9eb a1f8ea41 fe731b91 6da71566 f4f8e4ee 3c0f0da0 fc5fe596 caf68706 1d5933fe 129d0ab4 332dad2e 4bff2df6 9bc1ad09 2c797af1 d1372b1b e9c44ce5 c57571d6 05a6f455 7a1ed9e8 d1f17800 e205c30f" }, "diy-117": { "about": "5_diy1_a=mgllan/S1 5_diy2_a=mgllan/S2 5_diy1_a=mgllan/S3 5_diy2_b=mgllan/S1 5_diy1_b=mgllan/S2 5_diy2_b=mgllan/S3 5_diy1_b=mgllan/S1/002_mgllan 5_diy2_b=mgllan/S2/002_mgllan 5_diy1_b=mgllan/S3/002_mgllan 5_diy2_b=mgllan/S1/003_mgllan 5_diy1_b=mgllan/S2/003_mgllan 5_diy2_b=mgllan/S3/003_mgllan", @@ -5974,32 +5973,32 @@ "time": 230, "ticks": 6900, "reason": "timeout", - "killed": 68, + "killed": 79, "total": 147, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 118, + "rngDraws": 144, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":68,"total":147,"perfect":false,"leaks":79,"leaksUncounted":0,"coins":0,"dmg":425402,"bossDmg":0,"heal":0,"deaths":16,"layerGains":{}}}, + "players": {"p1":{"killed":79,"total":147,"perfect":false,"leaks":68,"leaksUncounted":0,"coins":0,"dmg":499903,"bossDmg":0,"heal":0,"deaths":16,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_6_diy1_a",2,null,0,0,2,1,6827,2604,0,80,1], - ["p1",2,"op","chess_char_6_diy2_b",2,"uniequip_002_acfend",2085.04,1,4,2,14361,1346,0,132,2], - ["p1",3,"op","chess_char_5_diy1_a",0,null,0,0,166,4,22225,3730,0,92,2], - ["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_002_sharp2",0,0,156,16,106408,4748,0,99,2], - ["p1",5,"op","chess_char_6_diy1_a",2,null,1529,1,172,14,44128,3058,0,45,4], - ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_acpion",1904,1,171,24,182563,3808,0,54,4], - ["p1",7,"op","chess_char_5_diy1_a",2,null,1154,1,170,1,6563,8078,0,80,0], + ["p1",1,"op","chess_char_6_diy1_a",2,null,0,0,2,2,7960,2604,0,88,2], + ["p1",2,"op","chess_char_6_diy2_b",2,"uniequip_002_acfend",1915.64,1,4,2,14168,1515,0,135,2], + ["p1",3,"op","chess_char_5_diy1_a",0,null,0,0,154,3,21404,3730,0,73,1], + ["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_002_sharp2",0,0,159,17,109862,4748,0,103,3], + ["p1",5,"op","chess_char_6_diy1_a",2,null,1408.2,1,170,18,82708,3179,0,51,4], + ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_acpion",0,0,103,27,209614,3808,0,78,5], + ["p1",7,"op","chess_char_5_diy1_a",2,null,1154,1,171,1,9896,8078,0,102,0], ["p1",8,"op","chess_char_5_diy2_b",2,"uniequip_002_acspec",1448,1,1,0,0,0,0,0,0], ["p1",9,"op","chess_char_6_diy1_a",2,null,2638,1,3,0,0,0,0,0,0], ["p1",10,"op","chess_char_6_diy2_b",2,"uniequip_002_acguad",3531,1,5,0,0,0,0,0,0], - ["p1",11,"op","chess_char_5_diy1_a",2,null,1160,1,9,0,17771,0,0,110,2], - ["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_002_acsupo",1430,1,10,1,24555,0,0,122,2] + ["p1",11,"op","chess_char_5_diy1_a",2,null,1160,1,9,0,17385,0,0,107,2], + ["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_002_acsupo",1430,1,10,0,26906,0,0,128,3] ], - "enemies": {"enemy_1166_dusbr_2":[39,22,17,381,107418],"enemy_1169_duphlx_2":[57,28,29,3024,195834],"enemy_1170_dushld_2":[51,18,32,23967,242247]}, - "hooks": [1,172,6900,1024,1024,4900,5024,0,84,162,19,26,0,27771,5929,73,147,78,1,84,0,0,0], - "events": {"atk":1087,"deploy":25,"die":84,"dmg":4988,"engage":9,"fx":207,"leak":78,"skill":56,"spawn":159,"status":804}, - "fx": {"aoe":90,"displace":10,"dodge":4,"dp":46,"slash":57}, - "snaps": "9fc009d3 b712fd02 dd9e6536 ad3afaa9 5e080f95 8c342958 c6b9d04c 6a6288c5 e4728d4d bdcd36f8 1d15491e 3af989d1 db86f390 2b31bb23 3d3a3c2a 09c7eba6 bfb4bdf6 ca3579cc 1af3c782 ec939b4e 4cc81145 6ef95d94 e8fb67c3" + "enemies": {"enemy_1166_dusbr_2":[39,25,14,970,117453],"enemy_1169_duphlx_2":[57,30,27,4546,204769],"enemy_1170_dushld_2":[51,24,25,22147,291668]}, + "hooks": [1,171,6900,1102,1102,4984,5113,0,95,161,22,28,0,28191,6261,85,147,66,1,95,0,0,0], + "events": {"atk":1161,"deploy":24,"die":95,"dmg":5080,"engage":9,"fx":231,"leak":66,"skill":61,"spawn":159,"status":819}, + "fx": {"aoe":93,"displace":8,"dodge":4,"dp":54,"slash":72}, + "snaps": "9fc009d3 b712fd02 f36c2e74 ec6d9389 3d2de85c 5cdae853 72895b52 24ddeed5 16beae87 0af2234c 0786e3e8 578d354d a55f8606 a476a145 a621ed1c 1bd464f3 9c885b76 d6ba58c1 7bc719b2 0cd5f504 82e69c40 1d6109b8 af74aa1e" }, "diy-138": { "about": "6_diy1_a=sharp2 6_diy2_b=sharp2 6_diy1_a=acspec 6_diy2_b=acspec 6_diy1_a=acnipe 6_diy2_b=acnipe 6_diy1_a=accast 6_diy2_b=accast 6_diy1_a=acmedc 6_diy2_b=acmedc 6_diy1_a=acsupo 6_diy2_b=acsupo", diff --git a/test/golden/fields.json b/test/golden/fields.json index 08aa007b..6f876e11 100644 --- a/test/golden/fields.json +++ b/test/golden/fields.json @@ -211,7 +211,7 @@ "weightless": 4, "zone": 197 }, - "snaps": "7917cfe4 719c3d1e 5fce9836 dcc6d1db c6372862 d28f9510 24fc36dd 451a8b51 a84bc802 17264489 87aca75c 241abfe9 0bdd4e23 94a753a7 f66cf2d6 27f37155 8c831d53 112e1ac2 a0065d70 7e66122d" + "snaps": "7917cfe4 719c3d1e 5fce9836 dcc6d1db a0f81e19 1bb7ff13 71e60b46 ed3361e2 91b07871 30bdd282 aa1872cf 6afc60c2 541bc4e0 0a1a43a8 633a6965 f71806d6 cabd0e80 efbd909d 459f4b8b 8ed124b2" }, "boss-boss_2-solo": { "about": "假想敌:铳 solo pool 3000000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -259,97 +259,100 @@ "round": 14, "seed": 1428555614, "waveId": "act1autochess_h07_03", - "time": 191.33, - "ticks": 5740, + "time": 191.07, + "ticks": 5732, "reason": "cleared", "killed": 19, "total": 6, "unspawned": 0, "bossHpLeft": 0, - "rngDraws": 1408, + "rngDraws": 1406, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":19,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1598736,"bossDmg":1477507,"heal":4950,"deaths":4,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2585697,"bossDmg":2522493,"heal":40534,"deaths":3,"layerGains":{}} + "p1": {"killed":19,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1619158,"bossDmg":1497941,"heal":4080,"deaths":4,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2565276,"bossDmg":2502059,"heal":40214,"deaths":2,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3700,1,7,0,0,0,2673,0,1], + ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3700,1,7,0,0,0,2395,0,1], ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,11,0,0,0,0,0,0], - ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,9,1,43,3444,505,43,1], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1745.65,1,13,2,914910,4480,538,59,8], - ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",252.98,1,17,4,348597,8106,407,62,3], - ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",0,0,62,0,26511,12270,434,0,3], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",0,0,66,2,169698,7389,372,48,3], - ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,1,32,0,20,15,2], - ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,0,38,0,0,10,10], + ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,9,2,47,3535,101,30,1], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2131.5,1,13,3,947163,4159,423,59,8], + ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",196.86,1,17,1,337196,7383,349,60,3], + ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",0,0,61,1,26509,12339,419,0,3], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",0,0,65,2,169268,7389,372,48,3], + ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,0,31,0,20,14,1], + ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,0,38,0,0,9,9], ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,23,0,95529,0,0,193,5], ["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",3801.6,1,31,1,462835,0,0,197,3], - ["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,60,0,25,2767,0,7,1], - ["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,57,0,9,3172,480,9,1], + ["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3801.6,1,31,2,463396,0,0,196,3], + ["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,12,1,31,129,0,5,2], + ["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,55,0,16,3647,960,16,1], ["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6287.75,1,32,0,315064,2551,0,89,3], - ["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3175.48,1,16,7,206450,2551,646,71,4], - ["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2436.5,1,20,1,1392349,6026,1618,341,6], - ["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2088.9,1,22,0,0,3550,4850,56,1], - ["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,25,0,76316,1525,0,135,4], - ["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,59,0,103614,1541,0,19,2], - ["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,18,0,0,2296,32939,56,2], + ["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3175.48,1,16,6,206430,3608,591,71,4], + ["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2436.5,1,20,2,1376335,6026,1630,340,6], + ["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2088.9,1,22,0,0,3550,5117,54,1], + ["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1582.9,1,25,0,76191,1525,0,135,4], + ["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,59,0,103616,1541,0,20,2], + ["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,18,0,0,2238,31915,54,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,43364,0,0,86,1], + ["p1","~1","token","token_10030_mlyss_wtrman",null,null,1586.2,1,24,0,43363,0,0,86,1], ["p2","~1","token","token_10019_nearl2_sword",null,null,8280,0,41,0,9679,0,0,0,null], ["p1","~2","token","token_10030_mlyss_wtrman",null,null,1989.96,0,42,0,3,0,0,3,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,4,0,0,4,null], + ["p1","~3","token","token_10030_mlyss_wtrman",null,null,1586.2,0,50,0,2,0,0,2,null], ["p2","~2","token","token_10019_nearl2_sword",null,null,6600,0,51,0,9679,0,0,0,null], - ["p1","~1","token","token_10040_siege2_vlion",null,null,4834.05,0,54,0,6,686,0,6,null], - ["p1","~2","token","token_10040_siege2_vlion",null,null,5520,0,55,1,1,0,0,1,null], - ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1989.96,0,56,0,0,0,0,0,null], - ["p2","~3","token","token_10019_nearl2_sword",null,null,6600,0,61,0,9679,0,0,0,null], + ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1989.96,0,54,0,0,0,0,0,null], + ["p1","~1","token","token_10040_siege2_vlion",null,null,389.75,0,56,0,9,5130,0,9,null], + ["p1","~2","token","token_10040_siege2_vlion",null,null,5520,0,57,0,0,0,0,0,null], + ["p2","~3","token","token_10019_nearl2_sword",null,null,6600,0,60,0,4839,0,0,0,null], ["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,63,0,0,0,0,0,null], - ["p1","~5","token","token_10030_mlyss_wtrman",null,null,1586.2,0,65,0,0,0,0,0,null] + ["p1","~5","token","token_10030_mlyss_wtrman",null,null,1586.2,0,64,0,0,0,0,0,null] ], "enemies": { "enemy_1197_sfshu_2": [2,2,0,0,28809], "enemy_1198_msfshu_2": [6,6,0,0,102], "enemy_1209_sfden_2": [2,2,0,0,154793], "enemy_1210_msfden_2": [2,2,0,0,386], - "enemy_9021_acduml": [1,1,0,0,4000000], - "enemy_9023_acdums": [9,7,0,51573,343] + "enemy_9021_acduml": [1,1,0,2129,4000000], + "enemy_9023_acdums": [9,7,0,51838,343] }, - "hooks": [1,66,5740,1515,1515,4047,4898,2384,27,41,64,59,352,41270,2004,3,22,0,1,26,0,9,0], - "events": {"atk":1799,"deploy":40,"die":41,"dmg":4608,"engage":20,"fx":1249,"heal":429,"skill":123,"spawn":59,"status":880}, + "hooks": [1,65,5732,1497,1497,4051,4936,2166,26,40,63,58,354,40822,1984,3,22,0,1,26,0,10,2], + "events": {"atk":1782,"deploy":39,"die":40,"dmg":4646,"engage":19,"fx":1230,"heal":455,"skill":121,"spawn":59,"status":837}, "fx": { - "airstrike": 131, - "appear": 2, + "airstrike": 124, + "appear": 1, "beam": 11, + "blessing": 1, "blink": 2, "bombard": 69, "bombardShell": 69, "buff": 3, - "burst": 9, + "burst": 10, "copy": 1, - "disappear": 2, + "disappear": 1, "displace": 1, + "dodge": 2, "dp": 5, "drone": 208, "droneLock": 18, "drones": 2, - "explode": 446, - "finale": 1, + "explode": 428, + "extraAttack": 5, + "finale": 2, "firewall": 1, "garrisonGrant": 1, - "lightning": 41, + "lightning": 38, "link": 7, "lock": 69, "lure": 3, - "phase": 43, + "phase": 42, "radiantSword": 3, "scorchBurst": 1, - "slash": 11, - "snow": 46, + "slash": 21, + "snow": 38, "split": 4, "steal": 6, "storm": 3, @@ -360,7 +363,7 @@ "tide": 3, "wanted": 1 }, - "snaps": "8c6eb9d3 796da093 9e3c16b7 fa7000d5 926c8ad7 67aaf44d 103ae7ee 039c0ebf 643fb2b7 a0782c00 fecc7c1b cb345ec9 91041fc2 a804912d eb1541bb 9a8fa181 5b07d6da 6e725bcd 0274cab6 809f5b01" + "snaps": "8c6eb9d3 796da093 9e3c16b7 fa7000d5 926c8ad7 f6cd064c 78697556 fed4cadf f5ea4a01 770df7f2 ff609399 52322e58 9b7ed238 669666d5 19bed882 6d67f5c1 4d304319 3f680d1a e2f8d2c9 86bcc5a3" }, "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", @@ -425,81 +428,81 @@ "time": 200, "ticks": 6000, "reason": "forced", - "killed": 11, + "killed": 12, "total": 14, "unspawned": 0, - "bossHpLeft": 7442429, - "rngDraws": 603, + "bossHpLeft": 7375628, + "rngDraws": 586, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":11,"total":14,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":965296,"bossDmg":315248,"heal":24127,"deaths":18,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":976369,"bossDmg":642323,"heal":8096,"deaths":19,"layerGains":{}} + "p1": {"killed":12,"total":14,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1051588,"bossDmg":348531,"heal":24590,"deaths":18,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1024342,"bossDmg":675841,"heal":11551,"deaths":18,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",1529.8,1,61,4,131692,6704,420,24,1], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3310.19,1,60,0,17700,8610,1117,15,2], - ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,49,0,44334,11949,2625,19,9], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,59,0,16983,9696,260,10,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,55,4,362158,4171,661,91,13], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,57,1,79306,9954,1941,30,4], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,0,109465,4097,2126,150,4], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1058.29,1,64,1,97795,2559,395,36,12], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,52,0,0,3684,12457,28,2], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,68,0,105862,4163,2126,50,2], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2188.83,1,66,0,377,7381,183,1,1], - ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",1498.75,1,56,0,184372,6810,464,178,8], - ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",1732.75,1,63,0,29484,5698,282,37,9], - ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,58,0,105272,10473,1325,156,6], - ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,53,0,214160,6276,721,42,4], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,54,0,149179,3584,462,129,2], - ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,3064,652,0,0], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",1838.43,1,67,0,64191,5913,3287,74,5], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1501.32,1,62,1,69313,2825,348,69,20], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1105.8,1,65,0,160021,2518,372,71,13], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",1529.8,1,60,3,127646,6704,420,23,1], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3313.03,1,59,1,18993,8260,1117,13,2], + ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,49,0,54350,11582,2258,18,11], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,57,0,16983,9470,33,10,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,58,2,402657,4059,549,98,15], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,55,1,85045,10014,2086,30,4], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,0,117239,4097,2126,150,4], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1058.29,1,62,4,118723,2559,395,35,12], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",0,0,52,0,0,4792,13480,30,3], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,15,0,109953,4163,2126,50,2], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2188.83,1,66,0,0,7281,83,0,1], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",1498.75,1,56,0,187084,8315,1970,180,7], + ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",1732.75,1,61,0,22843,5698,282,31,7], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1163.83,1,67,0,106760,9794,192,151,7], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2322.43,1,63,1,270484,5747,2514,55,5], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,53,0,148207,3584,462,128,2], + ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,3934,1521,0,0], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,20,0,63317,5817,3585,73,4], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1501.32,1,64,0,62705,2825,348,61,18], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1105.8,1,65,0,162943,2741,594,71,13], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], - "enemies": {"enemy_1010_demon":[4,4,0,2399,200612],"enemy_1438_dspred":[10,7,3,20089,783482],"enemy_1521_dslily":[1,0,0,91219,957571]}, - "hooks": [1,66,6000,1142,1221,2845,2969,7176,48,53,118,115,15,33079,1090,15,15,3,1,51,0,28,1], - "events": {"atk":1370,"deploy":51,"die":50,"dmg":2956,"engage":18,"fx":751,"heal":83,"leak":3,"skill":233,"spawn":37,"status":933}, + "enemies": {"enemy_1010_demon":[4,4,0,0,200612],"enemy_1438_dspred":[10,8,2,22920,850945],"enemy_1521_dslily":[1,0,0,92214,1024372]}, + "hooks": [1,65,6000,1136,1220,2973,3099,7497,48,52,119,116,13,32881,1121,17,15,2,1,51,0,30,1], + "events": {"atk":1383,"deploy":50,"die":50,"dmg":3085,"engage":17,"fx":796,"heal":85,"leak":2,"skill":235,"spawn":37,"status":959}, "fx": { - "aoe": 24, + "aoe": 26, "appear": 9, "blink": 2, - "burst": 28, - "charge": 9, - "counter": 15, - "crit": 62, - "dilemma": 4, + "burst": 30, + "charge": 7, + "counter": 13, + "crit": 60, + "dilemma": 5, "disappear": 9, - "displace": 28, + "displace": 27, "dodge": 1, "explosion": 13, - "frostNova": 20, + "frostNova": 18, "grow": 1, "iceSpike": 119, "overclock": 1, "pull": 4, "quadShot": 2, "ripple": 14, - "rockfall": 17, + "rockfall": 15, "sentry": 3, "sermon": 2, - "shadowWeave": 4, - "shield": 5, - "soul": 4, - "sp": 6, - "stealth": 8, - "swordRain": 35, - "swordStorm": 6, + "shadowWeave": 5, + "shield": 4, + "soul": 5, + "sp": 14, + "stealth": 7, + "swordRain": 38, + "swordStorm": 7, "tentacle": 6, "tide": 5, - "tornado": 5, + "tornado": 4, "tornadoPulse": 20, "weightless": 4, - "zone": 256 + "zone": 296 }, - "snaps": "c2a7999d e9680942 e3840c7b c97157bb 354f818f 3033850d 40141175 5bb20676 7decc120 5f1771eb 27360f23 279c31ce f92ff344 600f9424 a1bc5b00 660e7954 a15ab6cb bc529b51 2952b6f1 8bf7f205" + "snaps": "98983314 a631783a ccc2dc9a bfd1a9d0 9c652c81 40f8d98e 08d313bf e5981c81 697be22d b0240d7c 1d954142 c60f8007 a74df9a8 9f265f02 2eea5c29 3ceddda5 818cf4b3 d569afac 20be7df9 ac07bc57" }, "boss-boss_4-solo": { "about": "盐风主教昆图斯 solo pool 4200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -707,83 +710,49 @@ "killed": 5, "total": 6, "unspawned": 0, - "bossHpLeft": 6932482, - "rngDraws": 708, + "bossHpLeft": 6865243, + "rngDraws": 696, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":5,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1096623,"bossDmg":528737,"heal":2146,"deaths":5,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1199975,"bossDmg":498782,"heal":1246,"deaths":19,"layerGains":{}} + "p1": {"killed":5,"total":6,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1004720,"bossDmg":520003,"heal":4942,"deaths":5,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1297546,"bossDmg":574755,"heal":673,"deaths":17,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,1,211527,0,0,46,3], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,0,141185,0,0,30,2], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,1,0,0,0,0,0,0], - ["p1",3,"op","chess_char_5_14_b",1,"none",2174,1,5,1,39624,0,0,0,16], - ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,1,4568,0,0,6,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,1,407448,0,0,83,18], - ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,198029,0,0,73,6], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",1629,1,66,0,24193,1629,0,43,2], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1611,1,67,0,140802,3222,0,46,15], - ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,65,0,4316,3220,2146,3,1], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,0,66114,0,0,47,3], - ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,49,0,4798,9646,260,10,1], - ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",190.91,1,63,0,134122,15240,280,209,6], + ["p1",3,"op","chess_char_5_14_b",1,"none",2174,1,5,1,34607,0,0,0,13], + ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,1,25069,1974,1974,15,1], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,2,341600,0,0,82,15], + ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,197578,0,0,73,6], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,15,0,28546,1629,0,52,2], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,51,0,161857,3453,231,51,17], + ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",1610,1,65,0,5482,3220,2737,3,1], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1695,1,9,0,68797,0,0,47,3], + ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,49,0,4798,9640,253,10,1], + ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",3438.4,1,64,0,149533,11992,280,208,6], ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,6,0,0,0,0,0,0], - ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",0,0,61,0,60730,13618,706,128,7], - ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,14,0,201953,0,0,114,6], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,1,634150,0,0,182,3], + ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,63,0,82108,13503,0,131,8], + ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2777.6,1,14,0,204765,0,0,114,6], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,8,1,622803,0,0,179,3], ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,12,0,0,0,0,0,0], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,47,0,40597,2232,0,106,5], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,58,0,47100,5967,0,39,9], - ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,59,0,76526,4878,0,22,4], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,47,0,42523,2232,0,106,5], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1989,1,60,0,73498,3978,0,65,15], + ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",500.43,1,61,0,117517,4518,140,36,7], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] ], "enemies": { - "enemy_10028_vtswd": [3,3,0,0,0], - "enemy_10029_vtshld": [5,5,0,0,0], - "enemy_10030_vtwand": [5,5,0,0,0], - "enemy_10085_hllevi_2": [2,1,0,0,1068467], - "enemy_1010_demon": [4,4,0,12402,200612], - "enemy_9032_aclionk": [1,0,0,47250,1027518] + "enemy_10028_vtswd": [1,1,0,0,0], + "enemy_10029_vtshld": [8,8,0,0,0], + "enemy_10030_vtwand": [3,3,0,0,0], + "enemy_10085_hllevi_2": [2,1,0,0,1006896], + "enemy_1010_demon": [4,4,0,14161,200612], + "enemy_9032_aclionk": [1,0,0,41978,1094757] }, - "hooks": [1,65,6000,1150,1164,2296,2310,431,42,44,106,101,0,32028,744,8,20,0,1,30,0,2,0], - "events": {"atk":1232,"deploy":45,"die":44,"dmg":2254,"engage":15,"fx":761,"heal":7,"skill":207,"spawn":42,"status":1102}, - "fx": { - "aoe": 44, - "appear": 6, - "blink": 2, - "burst": 2, - "crit": 109, - "dilemma": 6, - "disappear": 6, - "displace": 19, - "equip": 18, - "explosion": 4, - "frostNova": 9, - "garrisonGrant": 1, - "iceSpike": 33, - "overclock": 1, - "pull": 4, - "quadShot": 3, - "revive": 2, - "ripple": 25, - "sentry": 4, - "shadowWeave": 5, - "shield": 1, - "soul": 2, - "sp": 19, - "stealth": 6, - "sword": 1, - "swordRain": 26, - "swordStorm": 7, - "telegraph": 21, - "tornado": 5, - "tornadoPulse": 20, - "vest": 5, - "weightless": 6, - "zone": 339 - }, - "snaps": "8ef2441b ee06d28e 0f318fc5 8e4156fd 466da928 e81f42d7 7687b463 1723e66d 7f419938 8e9ddd0f 9f00d62e 2aa9f2dd bca0bec4 90e786de 4f33ccda b4b8971e b9cab80b b4845fa4 1fdd7096 42eef665" + "hooks": [1,63,6000,1187,1211,2290,2305,620,39,41,111,106,0,34547,890,9,19,0,1,27,0,3,0], + "events": {"atk":1274,"deploy":44,"die":41,"dmg":2220,"engage":15,"fx":723,"heal":7,"skill":217,"spawn":41,"status":1221}, + "fx": {"aoe":38,"appear":6,"blink":2,"burst":3,"crit":109,"dilemma":6,"disappear":6,"displace":21,"equip":15,"explosion":7,"frostNova":15,"garrisonGrant":1,"iceSpike":44,"overclock":1,"pull":4,"quadShot":3,"revive":2,"ripple":25,"sentry":4,"shadowWeave":6,"shield":1,"soul":3,"sp":15,"stealth":6,"swordRain":44,"swordStorm":8,"telegraph":20,"tornado":5,"tornadoPulse":20,"vest":8,"weightless":6,"zone":269}, + "snaps": "8ef2441b 1f0b7d9b 358031de d7fac848 6bc45581 c14c05ea 9d45ac22 41b0826b f08fb48f f40bdbfc 557a25e0 2ffc6990 e3eab3cd 4805839b 41854b5c efd95f41 8e8c177f 7bd3b7ee 5f3edf58 060ad10f" }, "boss-boss_6-solo": { "about": "阿利斯泰尔,帝国余晖 solo pool 3980000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -960,24 +929,24 @@ "killed": 16, "total": 14, "unspawned": 0, - "bossHpLeft": 12585770, + "bossHpLeft": 12585798, "rngDraws": 666, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":16,"total":14,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2677042,"bossDmg":1550396,"heal":58431,"deaths":17,"layerGains":{}}, + "p1": {"killed":16,"total":14,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2676913,"bossDmg":1550369,"heal":58431,"deaths":17,"layerGains":{}}, "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":560253,"bossDmg":262771,"heal":20725,"deaths":25,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",7814,1,90,1,335665,24097,655,20,3], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",7814,1,90,2,334546,24097,655,20,3], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",7074,1,87,0,4861,9337,790,6,1], ["p1",3,"op","chess_char_5_14_b",1,"none",4348,1,71,2,352602,19433,5661,5,16], ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,70,1,48055,29763,5829,84,2], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,74,5,875533,5355,675,71,9], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,74,5,876096,5355,675,71,9], ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,75,2,761501,15781,75,35,3], ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",3258,1,81,0,5686,3481,223,18,2], ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1855.46,1,80,2,211918,4930,342,30,11], ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",3082.61,1,72,0,0,14900,44126,38,4], - ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,84,2,81221,10225,55,13,2], + ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,84,1,81648,10225,55,13,2], ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,76,0,0,8420,223,0,2], ["p2",12,"op","chess_char_4_04_b",1,"uniequip_002_ines",0,0,82,0,27913,14385,4392,91,4], ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",0,0,91,0,6283,14796,2285,9,3], @@ -995,13 +964,13 @@ "enemy_10027_vtsk": [6,4,0,137764,1019681], "enemy_1005_yokai": [4,4,0,0,10699], "enemy_1229_darmy_2": [8,8,0,6104,294231], - "enemy_9013_acstmk_2": [1,0,0,63941,1814230], + "enemy_9013_acstmk_2": [1,0,0,63941,1814202], "enemy_9014_acstma": [6,5,0,5661,38754], "enemy_9015_acstmb": [3,2,0,9835,83569], "enemy_9016_acstmr": [8,7,0,0,150] }, - "hooks": [1,92,6000,904,910,2960,3146,8374,72,74,107,101,6,25061,1027,17,36,0,1,61,0,5,9], - "events": {"atk":1083,"deploy":56,"die":74,"dmg":3143,"engage":18,"fx":652,"heal":62,"skill":208,"spawn":58,"status":990}, + "hooks": [1,92,6000,904,910,2963,3149,8374,72,74,107,101,6,25061,1027,17,36,0,1,62,0,5,9], + "events": {"atk":1083,"deploy":56,"die":74,"dmg":3146,"engage":18,"fx":653,"heal":62,"skill":208,"spawn":58,"status":991}, "fx": { "aoe": 42, "appear": 7, @@ -1013,7 +982,7 @@ "crit": 59, "dilemma": 3, "disappear": 8, - "displace": 1, + "displace": 2, "dodge": 9, "explode": 10, "explosion": 4, @@ -1045,7 +1014,7 @@ "weightless": 3, "zone": 180 }, - "snaps": "0499777c 2a8a8958 27548bdc 4d50b14c 2d952e29 e8bac176 f62bddd6 c54603c8 eec4acbb 0e35cf5c f32cd036 b1a89b99 601ad31e 90860daf 260abb25 982d94cf 1e000364 bf1ae288 42ae578f 9af424ea" + "snaps": "0499777c 2a8a8958 27548bdc 4d50b14c 2d952e29 e8bac176 f62bddd6 c54603c8 51656465 9ecf84f7 f5a69ccb 658967be 427da03c 135738d4 c9cadaf0 ae8120c2 8af17fbf 3fc4b1b1 5b218cee 89d8e629" }, "hidden-boss_8-solo": { "about": "假想敌:胄 solo pool 7200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -1112,36 +1081,36 @@ "killed": 8, "total": 8, "unspawned": 0, - "bossHpLeft": 3630612, - "rngDraws": 1662, + "bossHpLeft": 3636991, + "rngDraws": 1645, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1794629,"bossDmg":784436,"heal":15524,"deaths":4,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3269574,"bossDmg":1142028,"heal":135845,"deaths":10,"layerGains":{}} + "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1813003,"bossDmg":790560,"heal":15516,"deaths":4,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3233639,"bossDmg":1129525,"heal":130347,"deaths":10,"layerGains":{}} }, "units": [ ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",2601.77,1,66,0,0,11336,7438,0,2], ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,11,0,25365,227,0,37,1], ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",2535.79,1,17,0,53146,4017,0,51,2], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",204.28,1,7,1,1342715,2333,0,58,8], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",204.28,1,7,1,1363387,2333,0,58,8], ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,9,0,33316,9693,0,46,2], ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",954.58,1,55,0,35830,12093,529,0,4], ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2451.4,1,13,1,69554,0,0,0,11], ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,19,0,25534,0,6790,69,2], ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",0,0,21,1,149440,13231,0,27,27], - ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,60,0,52895,9393,349,86,3], + ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,60,0,50598,9393,349,84,3], ["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,1640,318,4,1], - ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",2934.34,1,68,4,710575,23146,0,309,3], - ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",0,0,59,0,232725,17856,0,43,4], - ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,65,0,10825,7320,2355,28,2], - ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",0,0,58,1,487339,27040,0,77,3], - ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",154.97,1,8,0,687440,9532,0,73,3], - ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",0,0,14,0,764724,13832,5897,258,5], - ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1662.91,1,20,0,0,1375,16017,80,1], + ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",2057.07,1,67,4,707045,24024,0,312,3], + ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",0,0,59,0,231858,17841,0,41,4], + ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,65,0,4091,6660,1695,24,2], + ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",0,0,58,1,483793,26213,0,71,3], + ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",173.1,1,8,0,687440,10444,0,73,3], + ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",0,0,14,0,742766,9295,4040,242,5], + ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1662.91,1,20,0,0,1375,14267,80,1], ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",0,0,10,0,95777,1439,0,122,3], - ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1665.1,1,41,0,217005,24166,0,59,4], - ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1592.1,1,25,0,0,15377,111577,83,2], + ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1680.1,1,41,0,217704,24241,0,59,4], + ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,25,0,0,14000,110345,83,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], @@ -1155,25 +1124,25 @@ ["p1","~1","token","token_10040_siege2_vlion",null,null,3730,0,52,0,4750,270,0,10,null], ["p1","~1","token","token_10017_skadi2_dedant",null,null,138,0,56,0,0,0,0,0,null], ["p2","~2","token","token_10019_nearl2_sword",null,null,0,0,57,0,22974,6599,0,0,null], - ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1322,1,61,0,0,155,99,0,1], + ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1322,1,61,0,0,155,92,0,1], ["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,62,0,0,0,0,0,null], ["p1","~2","token","token_10040_siege2_vlion",null,null,4000,0,63,0,0,0,0,0,null], - ["p2","~3","token","token_10019_nearl2_sword",null,null,0,0,64,0,33414,6564,0,17,null], - ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,1,67,0,0,0,0,0,null] + ["p2","~3","token","token_10019_nearl2_sword",null,null,0,0,64,0,33414,6564,0,16,null], + ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,1,68,0,0,0,0,0,null] ], "enemies": { "enemy_1267_nhpbr_2": [6,6,0,1500,141894], "enemy_9007_acelem": [2,2,0,18532,309587], - "enemy_9017_achunt_2": [2,0,0,59249,1969388], - "enemy_9018_actrpa": [1,0,0,55276,817281], - "enemy_9019_actrpb": [1,0,0,32171,721099], - "enemy_9020_actrpc": [1,0,0,23279,1188232] + "enemy_9017_achunt_2": [2,0,0,58104,1963009], + "enemy_9018_actrpa": [1,0,0,51655,811529], + "enemy_9019_actrpb": [1,0,0,30033,718108], + "enemy_9020_actrpc": [1,0,0,24632,1185793] }, - "hooks": [1,66,6000,1758,1758,7275,13707,2687,28,39,95,89,290,48364,2980,15,13,0,1,36,0,16,0], - "events": {"atk":2126,"deploy":47,"die":39,"dmg":13183,"engage":22,"fx":2170,"heal":969,"skill":184,"spawn":53,"status":815}, + "hooks": [1,66,6000,1727,1727,7189,13487,2668,28,39,95,89,277,48035,2985,15,13,0,1,29,0,16,0], + "events": {"atk":2084,"deploy":47,"die":39,"dmg":12976,"engage":22,"fx":2157,"heal":966,"skill":184,"spawn":53,"status":821}, "fx": { - "airstrike": 90, - "beam": 30, + "airstrike": 84, + "beam": 26, "blessing": 1, "blink": 5, "bombard": 72, @@ -1187,7 +1156,7 @@ "drone": 320, "droneLock": 14, "drones": 4, - "extraAttack": 7, + "extraAttack": 5, "finale": 4, "firewall": 2, "garrisonGrant": 1, @@ -1209,11 +1178,10 @@ "sunBurst": 3, "talent": 5, "tide": 4, - "undying": 1, "wanted": 6, "zone": 6 }, - "snaps": "2a921421 57801ce9 e8f35705 fba04fd7 d2a6440c a3b24855 aaf86c72 6f6a7236 9ab1a1c0 cc7ebf44 74e3130d 4886a375 96efb424 6885b63d 54551891 71bfe69c 67cfb8f5 a4f55f17 8e12a9a1 ca3b950e" + "snaps": "2a921421 57801ce9 e8f35705 fba04fd7 d2a6440c a3b24855 a2d10035 e394b69f 7de21c75 bd6caaad ea4accdc 41ef5240 67c52051 5cd402c4 583f7ecc 859a9f1c 2c2aa8dd d206cf4c 4b695b81 674f683a" }, "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", @@ -1315,7 +1283,7 @@ "enemy_9022_acdumm": [1,0,0,2791,0], "enemy_9023_acdums": [12,10,0,101874,716] }, - "hooks": [1,64,6000,1067,1191,4282,4885,9023,42,44,92,88,0,24850,1157,16,18,0,1,45,0,38,0], + "hooks": [1,64,6000,1067,1191,4280,4883,9023,42,44,92,88,0,24850,1157,16,18,0,1,45,0,38,0], "events": {"atk":1205,"deploy":44,"die":44,"dmg":4464,"engage":18,"fx":1910,"heal":421,"skill":180,"spawn":42,"status":980}, "fx": { "aoe": 16, @@ -1359,7 +1327,7 @@ "weightless": 2, "zone": 160 }, - "snaps": "f891236c f6672d61 0a4a6ca4 afae713f d621e422 91c68a01 7ea311f1 012e8866 5abf3b77 9efa9721 3f89db8d 12ebc10f c6cfa9e0 426d996e ec4be4af 4a0889a2 7023a3a1 61c0368c 4b538cec 7d3911a5" + "snaps": "f891236c f6672d61 f9ae299a bd864733 a34ff855 ee6e490a 8d637482 2808cda1 b8ebc810 72052abe c42b6edb 8a1ce86d f52b121e 6ec9eb74 6a1199ed 05aa4e08 5d012397 6fee9656 361ddec2 24e36087" }, "hidden-boss_10-solo": { "about": "假想敌:管 solo pool 7600000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", diff --git a/test/golden/matches.json b/test/golden/matches.json index 46ccfb36..5874b86f 100644 --- a/test/golden/matches.json +++ b/test/golden/matches.json @@ -99,7 +99,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":66750,"virtualMs":106900}, + "end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":68613,"virtualMs":106900}, "rng": {"setup":25,"shop":207,"waves":0,"draft":10,"bots":8480,"meta":14}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -134,11 +134,11 @@ }, { "round": 12, - "ai_0": [1,18,12,0,0,6,8,"a01c862d",134,"arcaneShip 0/2, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/8, kjeragShip 0/14, miraShip 1/7, preciShip 0/12, sargonShip 0/8, siracusaShip 2/93, soloShip 1/16, steadShip 0/6, suntShip 1/2, swiftShip 1/16",22,31,9,109] + "ai_0": [1,17,12,0,0,6,8,"a01c862d",134,"arcaneShip 0/2, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/8, kjeragShip 0/14, miraShip 1/7, preciShip 0/12, sargonShip 0/8, siracusaShip 2/93, soloShip 1/16, steadShip 0/6, suntShip 1/2, swiftShip 1/16",21,31,10,109] }, { "round": 13, - "ai_0": [1,18,12,0,0,6,8,"d9f5c26d",210,"arcaneShip 0/2, deputShip 2/12, emptyShip 1/8, kazimierzShip 0/16, kjeragShip 0/22, miraShip 1/11, preciShip 0/12, sargonShip 0/8, siracusaShip 1/117, soloShip 1/20, steadShip 0/6, suntShip 1/6, swiftShip 1/36",115,35,0,121] + "ai_0": [1,17,12,0,0,6,8,"d9f5c26d",210,"arcaneShip 0/2, deputShip 2/12, emptyShip 1/8, kazimierzShip 0/16, kjeragShip 0/22, miraShip 1/11, preciShip 0/12, sargonShip 0/8, siracusaShip 1/117, soloShip 1/20, steadShip 0/6, suntShip 1/6, swiftShip 1/36",115,35,0,121] } ], "players": { @@ -152,7 +152,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, "reward": 320, - "stats": {"activatedLayers":270,"bossDamage":323250,"dmgDealt":2309910,"gold":131,"itemsEquipped":23,"kills":385,"leaks":9,"lpLost":9,"merges":5,"perfectRounds":12,"refreshes":15}, + "stats": {"activatedLayers":270,"bossDamage":321387,"dmgDealt":2293260,"gold":131,"itemsEquipped":23,"kills":384,"leaks":10,"lpLost":10,"merges":5,"perfectRounds":12,"refreshes":15}, "lineup": ["3_20_b@12,5[3_06_e_a+4_08_e_a]","2_14_a@12,7","5_20_b@11,5[6_09_e_a+5_02_e_b]","5_10_a@11,8[4_07_e_a+3_08_e_b]","6_11_a@10,3[4_12_e_a+5_02_e_b]","3_18_a@10,8[2_04_e_b+4_05_e_b]","1_08_a@9,4[1_01_e_a+1_02_e_a]","6_19_a@9,5[4_04_e_a+4_10_e_a]"], "bonds": ["arcaneShip 0/2","deputShip 1/14","emptyShip 1/10","kazimierzShip 0/16","kjeragShip 1/24","maniShip 1/2","miraShip 1/13","preciShip 0/12","sargonShip 0/8","siracusaShip 1/139","soloShip 1/22","steadShip 0/6","suntShip 1/8","swiftShip 1/38"] } @@ -312,8 +312,8 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_10","factions":["ELEMENT","DOT","REFLECTION"]}, - "end": {"victory":false,"roundsPassed":12,"hiddenReached":false,"hiddenCleared":false,"reason":"eliminated","teamLp":null,"bossPoolLeft":null,"virtualMs":101900}, - "rng": {"setup":25,"shop":213,"waves":0,"draft":42,"bots":8170,"meta":86}, + "end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":368784,"virtualMs":107800}, + "rng": {"setup":25,"shop":229,"waves":0,"draft":42,"bots":8402,"meta":87}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ {"round":1,"ai_0":[1,29,4,0,0,1,2,"e4d89f1f",0,"",5,5,0,4]}, @@ -357,23 +357,23 @@ }, { "round": 13, - "ai_0": [0,0,14,0,0,6,0,"811c9dc5",0,"arcaneShip 0/30, kazimierzShip 0/36, kjeragShip 0/34, lateranoShip 0/3, preciShip 0/30, sargonShip 0/2, steadShip 0/8, swiftShip 0/30",21,29,8,127] + "ai_0": [1,1,14,0,0,6,8,"6670dd28",138,"arcaneShip 0/30, kazimierzShip 1/36, kjeragShip 1/34, lateranoShip 0/3, preciShip 2/30, sargonShip 0/2, soloShip 1/0, steadShip 1/8, suntShip 1/0, swiftShip 1/30, visiShip 1/0",22,29,7,127] } ], "players": { "ai_0": { - "alive": false, + "alive": true, "victory": false, - "roundsPassed": 12, - "eliminatedRound": 13, + "roundsPassed": 13, + "eliminatedRound": null, "lp": 0, "bandId": "band_ducklord", - "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, + "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, - "reward": 298, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1907013,"gold":127,"itemsEquipped":8,"kills":254,"leaks":29,"lpLost":29,"merges":5,"perfectRounds":8,"refreshes":17}, - "lineup": [], - "bonds": ["arcaneShip 0/30","kazimierzShip 0/36","kjeragShip 0/34","lateranoShip 0/3","preciShip 0/30","sargonShip 0/2","steadShip 0/8","swiftShip 0/30"] + "reward": 340, + "stats": {"activatedLayers":138,"bossDamage":411216,"dmgDealt":2602534,"gold":139,"itemsEquipped":11,"kills":269,"leaks":28,"lpLost":28,"merges":5,"perfectRounds":8,"refreshes":19}, + "lineup": ["3_17_a@12,6","6_12_a@12,7","4_20_a@11,8[2_01_e_a+3_01_e_a]","3_11_a@10,3","1_02_b@10,5[4_02_e_a]","1_19_b@10,8","6_19_a@9,5[4_05_e_a+4_08_e_a]","2_18_a@9,8[4_11_e_a+1_05_e_b]"], + "bonds": ["arcaneShip 0/30","kazimierzShip 1/36","kjeragShip 1/34","lateranoShip 0/3","preciShip 2/30","sargonShip 0/2","soloShip 1/0","steadShip 1/8","suntShip 1/0","swiftShip 1/30","visiShip 1/0"] } } }, @@ -395,7 +395,7 @@ {"round":2,"ai_0":[1,27,5,0,0,1,4,"eee78fe4",0,"kazimierzShip 0/2, sargonShip 0/4, soloShip 1/0, swiftShip 0/2",10,10,0,9]}, {"round":3,"ai_0":[1,27,6,0,1,1,6,"d5f9d956",1,"kazimierzShip 0/2, sargonShip 0/8, soloShip 1/1, swiftShip 0/2",11,9,0,15]}, {"round":4,"ai_0":[1,27,8,0,1,2,8,"247bff16",4,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/1, steadShip 1/3, swiftShip 0/4",11,9,0,23]}, - {"round":5,"ai_0":[1,27,9,0,0,3,8,"5fdaa5e6",5,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/1, steadShip 1/4, swiftShip 0/4",21,21,0,31]}, + {"round":5,"ai_0":[1,27,9,0,0,3,8,"4e7476b8",5,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/1, steadShip 1/4, swiftShip 0/4",21,21,0,31]}, { "round": 6, "ai_0": [1,27,9,0,0,3,8,"3bdfd652",23,"deputShip 1/2, kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, siracusaShip 1/8, soloShip 1/3, steadShip 1/10, swiftShip 0/4",56,17,0,40] @@ -436,7 +436,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 0, "reward": 255, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1683862,"gold":111,"itemsEquipped":13,"kills":235,"leaks":49,"lpLost":35,"merges":2,"perfectRounds":8,"refreshes":6}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1678545,"gold":111,"itemsEquipped":13,"kills":235,"leaks":49,"lpLost":35,"merges":2,"perfectRounds":8,"refreshes":6}, "lineup": [], "bonds": ["arcaneShip 0/18","deputShip 0/14","emptyShip 0/10","kazimierzShip 0/8","kjeragShip 0/27","preciShip 0/23","sargonShip 0/8","siracusaShip 0/69","soloShip 0/15","steadShip 0/17","swiftShip 0/8"] } @@ -469,23 +469,23 @@ }, { "round": 6, - "ai_0": [1,17,9,0,2,3,8,"12a1dcbb",16,"arcaneShip 0/4, kazimierzShip 0/2, kjeragShip 0/4, lateranoShip 0/3, preciShip 1/4, sargonShip 0/2, steadShip 2/4, swiftShip 1/8",17,21,4,38] + "ai_0": [1,19,9,0,2,3,8,"12a1dcbb",16,"arcaneShip 0/4, kazimierzShip 0/2, kjeragShip 0/4, lateranoShip 0/3, preciShip 1/4, sargonShip 0/2, steadShip 2/4, swiftShip 1/8",19,21,2,38] }, { "round": 7, - "ai_0": [1,16,12,0,2,4,8,"932a36c9",18,"arcaneShip 0/4, kazimierzShip 1/2, kjeragShip 0/4, lateranoShip 0/3, preciShip 1/4, sargonShip 0/2, soloShip 1/0, steadShip 2/4, swiftShip 1/8",27,28,1,50] + "ai_0": [1,18,12,0,2,4,8,"932a36c9",18,"arcaneShip 0/4, kazimierzShip 1/2, kjeragShip 0/4, lateranoShip 0/3, preciShip 1/4, sargonShip 0/2, soloShip 1/0, steadShip 2/4, swiftShip 1/8",27,28,1,50] }, { "round": 8, - "ai_0": [1,15,13,0,0,4,8,"c470c9bb",26,"arcaneShip 1/8, kazimierzShip 1/2, kjeragShip 0/8, lateranoShip 0/3, preciShip 0/4, sargonShip 0/2, soloShip 1/0, steadShip 2/8, swiftShip 1/8",19,20,1,62] + "ai_0": [1,17,13,0,0,4,8,"c470c9bb",26,"arcaneShip 1/8, kazimierzShip 1/2, kjeragShip 0/8, lateranoShip 0/3, preciShip 0/4, sargonShip 0/2, soloShip 1/0, steadShip 2/8, swiftShip 1/8",19,20,1,62] }, { "round": 9, - "ai_0": [1,5,12,0,1,4,8,"096b1e6c",62,"arcaneShip 1/18, kazimierzShip 1/2, kjeragShip 1/13, lateranoShip 0/3, preciShip 1/13, sargonShip 0/2, soloShip 1/0, steadShip 1/8, suntShip 1/0, swiftShip 1/8",17,32,15,72] + "ai_0": [1,7,12,0,1,4,8,"096b1e6c",62,"arcaneShip 1/18, kazimierzShip 1/2, kjeragShip 1/13, lateranoShip 0/3, preciShip 1/13, sargonShip 0/2, soloShip 1/0, steadShip 1/8, suntShip 1/0, swiftShip 1/8",17,32,15,72] }, { "round": 10, - "ai_0": [1,2,13,0,0,5,8,"568e11b8",62,"arcaneShip 1/18, kazimierzShip 1/6, kjeragShip 1/13, lateranoShip 0/3, preciShip 2/17, sargonShip 0/2, soloShip 1/0, steadShip 1/8, suntShip 1/0, swiftShip 0/8",27,30,3,86] + "ai_0": [1,4,13,0,0,5,8,"568e11b8",62,"arcaneShip 1/18, kazimierzShip 1/6, kjeragShip 1/13, lateranoShip 0/3, preciShip 2/17, sargonShip 0/2, soloShip 1/0, steadShip 1/8, suntShip 1/0, swiftShip 0/8",27,30,3,86] }, { "round": 11, @@ -503,7 +503,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 0, "reward": 213, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1690078,"gold":98,"itemsEquipped":6,"kills":166,"leaks":43,"lpLost":37,"merges":3,"perfectRounds":4,"refreshes":10}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1692524,"gold":98,"itemsEquipped":6,"kills":168,"leaks":41,"lpLost":35,"merges":3,"perfectRounds":4,"refreshes":10}, "lineup": [], "bonds": ["arcaneShip 0/18","kazimierzShip 0/10","kjeragShip 0/18","lateranoShip 0/3","preciShip 0/26","raidShip 0/24","sargonShip 0/2","steadShip 0/8","swiftShip 0/8"] } @@ -519,7 +519,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act2autochess_m04","bossId":"boss_3","hiddenBossId":"boss_8","factions":["FLY","TIMES","DOT"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":62,"bossPoolLeft":0,"virtualMs":116900}, + "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":59,"bossPoolLeft":0,"virtualMs":116900}, "rng": {"setup":25,"shop":449,"waves":0,"draft":40,"bots":21637,"meta":8}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -581,12 +581,12 @@ { "round": 12, "ai_0": [1,45,14,0,0,6,8,"dd5db63e",168,"arcaneShip 2/46, miraShip 1/6, preciShip 0/10, sargonShip 0/10, siracusaShip 1/68, skillfulShip 1/18, soloShip 1/6, suntShip 1/0, swiftShip 1/24",105,32,0,113], - "ai_1": [1,28,12,0,0,6,8,"992eaa0c",157,"arcaneShip 2/28, kazimierzShip 1/30, kjeragShip 0/8, lateranoShip 0/8, preciShip 1/45, sargonShip 0/10, steadShip 1/0, suntShip 1/0, swiftShip 1/54",103,32,2,114] + "ai_1": [1,28,12,0,0,6,8,"992eaa0c",157,"arcaneShip 2/28, kazimierzShip 1/30, kjeragShip 0/8, lateranoShip 0/8, preciShip 1/45, sargonShip 0/10, steadShip 1/0, suntShip 1/0, swiftShip 1/54",104,32,1,114] }, { "round": 13, "ai_0": [1,38,12,0,2,6,8,"d0654a7f",214,"arcaneShip 2/70, miraShip 1/12, preciShip 0/10, sargonShip 0/10, siracusaShip 1/98, skillfulShip 1/28, soloShip 1/6, suntShip 1/0, swiftShip 0/32",27,34,7,125], - "ai_1": [1,24,12,0,0,6,8,"dc3bc59a",189,"arcaneShip 2/34, kazimierzShip 1/38, kjeragShip 0/8, lateranoShip 0/8, preciShip 1/50, sargonShip 0/10, steadShip 1/0, suntShip 1/0, swiftShip 1/67",30,34,4,125] + "ai_1": [1,21,12,0,0,6,8,"dc3bc59a",189,"arcaneShip 2/34, kazimierzShip 1/38, kjeragShip 0/8, lateranoShip 0/8, preciShip 1/50, sargonShip 0/10, steadShip 1/0, suntShip 1/0, swiftShip 1/67",27,34,7,125] } ], "players": { @@ -600,7 +600,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":250,"bossDamage":511134,"dmgDealt":3170636,"gold":139,"itemsEquipped":12,"kills":335,"leaks":7,"lpLost":7,"merges":5,"perfectRounds":12,"refreshes":23}, + "stats": {"activatedLayers":250,"bossDamage":479924,"dmgDealt":3139636,"gold":139,"itemsEquipped":12,"kills":333,"leaks":7,"lpLost":7,"merges":5,"perfectRounds":12,"refreshes":23}, "lineup": ["3_19_b@11,7[2_04_e_b]","5_12_a@11,8","4_10_a@10,5[1_02_e_b+2_01_e_a]","6_06_a@9,4","1_08_b@9,5","6_16_a@9,7","5_20_a@9,8[3_05_e_a+3_02_e_b]","3_13_b@9,9"], "bonds": ["arcaneShip 2/86","miraShip 1/12","preciShip 0/10","sargonShip 0/10","siracusaShip 1/110","skillfulShip 1/36","soloShip 1/6","suntShip 1/0","swiftShip 0/32"] }, @@ -609,12 +609,12 @@ "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 24, + "lp": 21, "bandId": "band_dusk", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":199,"bossDamage":906366,"dmgDealt":3780569,"gold":137,"itemsEquipped":18,"kills":323,"leaks":6,"lpLost":4,"merges":5,"perfectRounds":11,"refreshes":13}, + "stats": {"activatedLayers":199,"bossDamage":937576,"dmgDealt":3727447,"gold":137,"itemsEquipped":18,"kills":321,"leaks":8,"lpLost":7,"merges":5,"perfectRounds":11,"refreshes":13}, "lineup": ["4_20_a@12,8[3_06_e_a]","1_17_b@11,7[3_08_e_a]","4_02_b@11,8[3_02_e_a+4_03_e_b]","4_01_b@10,7[4_04_e_a+1_02_e_a]","6_17_a@10,8[4_06_e_a+4_08_e_a]","6_19_a@9,4[1_05_e_a+1_01_e_a]","4_14_a@9,8","5_07_a@9,9"], "bonds": ["arcaneShip 2/34","kazimierzShip 1/38","kjeragShip 0/8","lateranoShip 0/8","preciShip 2/55","raidShip 1/0","sargonShip 0/10","suntShip 1/0","swiftShip 1/72"] } @@ -691,7 +691,7 @@ }, { "round": 12, - "ai_0": [1,3,13,0,0,6,8,"a701cd86",125,"kazimierzShip 1/29, kjeragShip 0/2, raidShip 1/49, skillfulShip 0/9, soloShip 1/3, steadShip 2/18, suntShip 1/0, swiftShip 1/26, visiShip 1/0",31,50,19,114], + "ai_0": [1,3,13,0,0,6,8,"a701cd86",125,"kazimierzShip 1/29, kjeragShip 0/2, raidShip 1/49, skillfulShip 0/9, soloShip 1/3, steadShip 2/18, suntShip 1/0, swiftShip 1/26, visiShip 1/0",32,50,18,114], "ai_1": [1,2,13,0,0,6,8,"62b855c3",71,"arcaneShip 0/2, kazimierzShip 0/2, preciShip 1/63, sargonShip 0/4, siracusaShip 2/8, skillfulShip 0/6, soloShip 1/0, suntShip 1/0, swiftShip 0/23",23,50,27,114] }, { @@ -711,7 +711,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 3, "reward": 298, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2920409,"gold":127,"itemsEquipped":9,"kills":226,"leaks":65,"lpLost":32,"merges":4,"perfectRounds":9,"refreshes":12}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2909987,"gold":127,"itemsEquipped":9,"kills":227,"leaks":64,"lpLost":32,"merges":4,"perfectRounds":9,"refreshes":12}, "lineup": [], "bonds": ["kazimierzShip 0/45","kjeragShip 0/10","miraShip 0/7","raidShip 0/49","skillfulShip 0/9","soloShip 0/3","steadShip 0/18","swiftShip 0/46","yanShip 0/6"] }, @@ -772,7 +772,7 @@ { "round": 5, "ai_0": [1,23,10,0,0,3,8,"d8f34b72",27,"deputShip 1/12, kazimierzShip 0/4, skillfulShip 1/7, swiftShip 1/8",53,16,0,33], - "ai_1": [1,45,9,0,0,3,8,"1cdacd0e",21,"deputShip 1/4, kazimierzShip 0/7, swiftShip 1/17",47,16,6,32], + "ai_1": [1,45,9,0,0,3,8,"df2ac198",21,"deputShip 1/4, kazimierzShip 0/7, swiftShip 1/17",43,16,10,32], "ai_2": [1,27,9,0,0,3,8,"b7b66774",14,"siracusaShip 1/10, soloShip 1/4, yanShip 0/1",52,16,1,31] }, { @@ -789,13 +789,13 @@ }, { "round": 8, - "ai_0": [1,13,11,0,1,4,8,"3c234f18",78,"deputShip 2/24, kazimierzShip 0/4, lateranoShip 1/4, skillfulShip 1/26, soloShip 1/8, swiftShip 1/16",7,20,13,60], + "ai_0": [1,13,11,0,1,4,8,"3c234f18",78,"deputShip 2/24, kazimierzShip 0/4, lateranoShip 1/4, skillfulShip 1/26, soloShip 1/8, swiftShip 1/16",8,20,12,60], "ai_1": [1,35,11,0,0,4,8,"e467c2a4",77,"deputShip 2/16, kazimierzShip 0/7, siracusaShip 1/10, skillfulShip 1/4, soloShip 0/8, suntShip 1/12, swiftShip 1/35",6,20,14,60], "ai_2": [1,17,11,0,0,4,8,"e7b660e2",62,"siracusaShip 1/52, soloShip 1/4, swiftShip 1/6, yanShip 0/1",9,20,11,58] }, { "round": 9, - "ai_0": [1,3,13,0,2,4,8,"c27d4a4b",110,"deputShip 2/28, kazimierzShip 0/4, lateranoShip 1/11, miraShip 1/4, skillfulShip 1/35, soloShip 1/12, swiftShip 1/20",35,22,12,73], + "ai_0": [1,3,13,0,2,4,8,"c27d4a4b",110,"deputShip 2/28, kazimierzShip 0/4, lateranoShip 1/11, miraShip 1/4, skillfulShip 1/35, soloShip 1/12, swiftShip 1/20",34,22,10,73], "ai_1": [1,26,12,0,0,4,8,"ab750cbb",82,"deputShip 1/18, kazimierzShip 0/7, raidShip 1/4, siracusaShip 1/20, skillfulShip 1/8, soloShip 1/10, steadShip 1/8, suntShip 1/14, swiftShip 0/37",44,22,9,72], "ai_2": [1,7,12,0,4,4,8,"335cbc51",78,"siracusaShip 1/68, soloShip 1/4, suntShip 1/0, swiftShip 1/6, yanShip 0/1",36,22,16,69] }, @@ -829,7 +829,7 @@ "title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"}, "trophies": 2, "reward": 191, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1401967,"gold":87,"itemsEquipped":4,"kills":221,"leaks":37,"lpLost":30,"merges":1,"perfectRounds":6,"refreshes":17}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1390676,"gold":87,"itemsEquipped":4,"kills":225,"leaks":34,"lpLost":30,"merges":1,"perfectRounds":6,"refreshes":17}, "lineup": [], "bonds": ["deputShip 0/33","kazimierzShip 0/4","lateranoShip 0/16","miraShip 0/6","siracusaShip 0/10","skillfulShip 0/45","soloShip 0/12","swiftShip 0/28"] }, @@ -843,7 +843,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 2, "reward": 255, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2425484,"gold":107,"itemsEquipped":9,"kills":246,"leaks":104,"lpLost":49,"merges":4,"perfectRounds":4,"refreshes":18}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":2425486,"gold":107,"itemsEquipped":9,"kills":242,"leaks":108,"lpLost":49,"merges":4,"perfectRounds":4,"refreshes":18}, "lineup": [], "bonds": ["deputShip 0/30","kazimierzShip 0/7","raidShip 0/12","siracusaShip 0/41","skillfulShip 0/25","soloShip 0/16","steadShip 0/28","suntShip 0/20","swiftShip 0/37"] }, @@ -1044,14 +1044,14 @@ "rounds": [ { "round": 1, - "ai_0": [1,45,4,0,0,1,2,"cf5de4b4",0,"kazimierzShip 0/2, swiftShip 0/2",5,5,0,4], - "ai_1": [1,26,4,0,0,1,2,"59374416",0,"kazimierzShip 0/2, sargonShip 0/2, swiftShip 0/2",5,5,0,4], + "ai_0": [1,45,4,0,0,1,2,"79943064",0,"kazimierzShip 0/2, swiftShip 0/2",5,5,0,4], + "ai_1": [1,26,4,0,0,1,2,"704ffa4d",0,"kazimierzShip 0/2, sargonShip 0/2, swiftShip 0/2",5,5,0,4], "ai_2": [1,28,4,0,0,1,2,"eb0c1458",0,"deputShip 0/2, victoriaShip 0/2",2,5,3,4], "ai_3": [1,26,4,0,0,1,2,"ba03322a",0,"soloShip 1/0",5,5,0,4] }, { "round": 2, - "ai_0": [1,45,5,0,0,1,4,"62de86cd",4,"kazimierzShip 0/4, swiftShip 1/4",8,8,0,9], + "ai_0": [1,45,5,0,0,1,4,"e8a46594",4,"kazimierzShip 0/4, swiftShip 1/4",8,8,0,9], "ai_1": [1,26,5,0,0,1,4,"a2ec5116",5,"kazimierzShip 0/5, sargonShip 0/2, soloShip 1/0, swiftShip 1/5",8,8,0,9], "ai_2": [1,28,5,0,0,1,3,"70d74d61",0,"deputShip 0/4, kjeragShip 0/2, soloShip 1/0, victoriaShip 0/6",7,8,1,9], "ai_3": [1,26,5,0,0,1,4,"9e98d014",0,"sargonShip 0/2, soloShip 1/0",8,8,0,9] @@ -1073,64 +1073,64 @@ { "round": 5, "ai_0": [1,35,9,0,0,3,8,"62c03eb5",8,"arcaneShip 0/8, kazimierzShip 0/4, preciShip 0/8, swiftShip 1/8",4,17,13,32], - "ai_1": [1,16,9,0,0,3,8,"f7768b7d",8,"arcaneShip 1/2, kazimierzShip 0/5, kjeragShip 0/2, preciShip 0/2, sargonShip 0/4, soloShip 1/0, steadShip 0/2, swiftShip 1/6",6,17,11,30], - "ai_2": [1,19,11,0,0,3,8,"d90f1f12",24,"deputShip 1/10, kazimierzShip 0/2, kjeragShip 0/10, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/8, steadShip 0/4, swiftShip 1/6, victoriaShip 0/10, yanShip 0/2",8,17,9,32], + "ai_1": [1,16,9,0,0,3,8,"f7768b7d",8,"arcaneShip 1/2, kazimierzShip 0/5, kjeragShip 0/2, preciShip 0/2, sargonShip 0/4, soloShip 1/0, steadShip 0/2, swiftShip 1/6",5,17,12,30], + "ai_2": [1,20,11,0,0,3,8,"246c804d",22,"deputShip 1/10, kazimierzShip 0/2, kjeragShip 0/12, siracusaShip 0/4, soloShip 1/8, steadShip 0/4, swiftShip 1/4, victoriaShip 0/12, yanShip 0/2",9,17,8,32], "ai_3": [1,16,8,0,0,3,8,"080ecfab",3,"arcaneShip 0/2, preciShip 0/2, sargonShip 0/2, siracusaShip 1/0, soloShip 1/3",3,17,14,31] }, { "round": 6, "ai_0": [1,35,9,0,0,3,8,"844b219a",33,"arcaneShip 0/8, kazimierzShip 0/4, kjeragShip 0/5, preciShip 2/20, suntShip 1/0, swiftShip 1/13",14,14,0,41], "ai_1": [1,16,9,0,0,3,8,"6faf7f5a",34,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 1/13, kjeragShip 0/2, preciShip 0/2, sargonShip 0/4, siracusaShip 0/6, soloShip 1/2, steadShip 0/2, swiftShip 1/17",13,14,1,40], - "ai_2": [1,19,9,0,0,3,8,"b0c01f2d",55,"deputShip 1/12, egirShip 0/2, kazimierzShip 0/4, kjeragShip 0/10, raidShip 0/2, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/12, steadShip 2/18, swiftShip 1/13, victoriaShip 0/10, yanShip 0/2",14,14,0,41], + "ai_2": [1,20,9,0,0,3,8,"b0c01f2d",53,"deputShip 1/13, egirShip 0/2, kazimierzShip 0/4, kjeragShip 0/12, raidShip 0/2, siracusaShip 0/4, soloShip 1/12, steadShip 2/18, swiftShip 1/10, victoriaShip 0/12, yanShip 0/2",14,14,0,41], "ai_3": [1,16,9,0,0,3,8,"06355ccd",24,"arcaneShip 0/2, deputShip 1/2, preciShip 0/2, sargonShip 1/9, siracusaShip 1/8, soloShip 1/5",6,14,8,41] }, { "round": 7, - "ai_0": [1,25,10,0,0,4,8,"8510e7b4",45,"arcaneShip 0/8, kazimierzShip 0/4, kjeragShip 0/5, preciShip 2/27, suntShip 1/0, swiftShip 1/18",8,21,13,51], + "ai_0": [1,25,10,0,0,4,8,"8510e7b4",45,"arcaneShip 0/8, kazimierzShip 0/4, kjeragShip 0/5, preciShip 2/27, suntShip 1/0, swiftShip 1/18",7,21,14,51], "ai_1": [1,6,10,0,0,4,8,"017dac16",57,"arcaneShip 1/4, deputShip 1/4, kazimierzShip 1/27, kjeragShip 0/2, preciShip 0/2, sargonShip 0/4, siracusaShip 0/6, soloShip 0/2, steadShip 0/2, swiftShip 1/22",4,21,17,49], - "ai_2": [1,19,10,0,0,4,8,"0c6b8294",83,"deputShip 1/14, egirShip 0/4, kazimierzShip 0/4, kjeragShip 0/12, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/4, soloShip 1/14, steadShip 2/36, swiftShip 1/19, victoriaShip 0/10, yanShip 0/2",21,21,0,52], + "ai_2": [1,20,10,0,0,4,8,"0c6b8294",80,"deputShip 1/15, egirShip 0/4, kazimierzShip 0/4, kjeragShip 0/14, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/14, steadShip 2/35, swiftShip 1/16, victoriaShip 0/12, yanShip 0/2",21,21,0,52], "ai_3": [1,6,10,0,0,4,8,"1968962a",25,"arcaneShip 0/2, deputShip 1/4, preciShip 0/2, sargonShip 0/9, siracusaShip 1/12, skillfulShip 1/2, soloShip 1/7",2,21,19,52] }, { "round": 8, "ai_0": [1,21,11,0,0,4,8,"8a1b740d",78,"arcaneShip 1/10, deputShip 1/2, kazimierzShip 0/7, kjeragShip 0/5, preciShip 2/36, suntShip 1/2, swiftShip 1/28",5,9,4,61], "ai_1": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",2,9,7,60], - "ai_2": [1,13,11,0,0,4,8,"4075ce4e",91,"arcaneShip 2/9, deputShip 1/18, egirShip 0/6, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/2, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/4, soloShip 1/18, steadShip 1/46, swiftShip 0/21, victoriaShip 0/10, yanShip 0/2",3,9,6,63], + "ai_2": [1,14,11,0,0,4,8,"4075ce4e",91,"arcaneShip 2/9, deputShip 1/19, egirShip 0/6, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/2, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/18, steadShip 1/45, swiftShip 0/18, victoriaShip 0/12, yanShip 0/2",3,9,6,63], "ai_3": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",0,9,9,63] }, { "round": 9, "ai_0": [1,21,12,0,1,4,8,"82251d49",167,"arcaneShip 2/16, deputShip 0/2, indomShip 1/12, kazimierzShip 1/37, kjeragShip 0/5, preciShip 2/67, suntShip 1/2, swiftShip 1/33",8,19,11,73], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [1,13,12,0,1,4,8,"33626d88",142,"arcaneShip 2/18, deputShip 1/22, egirShip 0/8, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/6, soloShip 1/22, steadShip 1/58, swiftShip 0/21, victoriaShip 1/16, yanShip 0/2",19,19,0,76], + "ai_2": [1,14,12,0,1,4,8,"33626d88",141,"arcaneShip 2/18, deputShip 1/23, egirShip 0/8, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/4, soloShip 1/22, steadShip 1/56, swiftShip 0/18, victoriaShip 1/18, yanShip 0/2",19,19,0,76], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 10, - "ai_0": [1,21,13,0,2,5,8,"a8c1652a",199,"arcaneShip 2/16, deputShip 0/2, indomShip 1/22, kazimierzShip 1/45, kjeragShip 0/5, preciShip 2/76, suntShip 1/2, swiftShip 1/38",13,25,12,86], + "ai_0": [1,21,13,0,2,5,8,"a8c1652a",219,"arcaneShip 2/16, deputShip 0/2, indomShip 1/24, kazimierzShip 1/55, kjeragShip 0/5, preciShip 2/84, suntShip 1/2, swiftShip 1/38",15,25,10,86], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [1,13,13,0,2,5,8,"b6041c07",181,"arcaneShip 2/27, deputShip 1/26, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/10, soloShip 1/24, steadShip 1/68, swiftShip 0/21, victoriaShip 1/26, yanShip 0/2",25,25,0,88], + "ai_2": [1,14,13,0,2,5,8,"b6041c07",180,"arcaneShip 2/27, deputShip 1/27, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/8, soloShip 1/24, steadShip 1/66, swiftShip 0/18, victoriaShip 1/28, yanShip 0/2",25,25,0,88], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 11, - "ai_0": [1,11,14,0,3,5,8,"7de6a28e",265,"arcaneShip 2/22, deputShip 0/2, indomShip 0/22, kazimierzShip 1/76, kjeragShip 0/16, preciShip 2/94, suntShip 1/2, swiftShip 1/71",9,25,16,101], + "ai_0": [1,11,14,0,3,5,8,"7de6a28e",283,"arcaneShip 2/22, deputShip 0/2, indomShip 0/24, kazimierzShip 1/86, kjeragShip 0/16, preciShip 2/102, suntShip 1/2, swiftShip 1/71",10,25,15,101], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [1,7,14,0,1,5,8,"e9b19bda",237,"arcaneShip 1/37, deputShip 2/32, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/16, soloShip 1/30, steadShip 1/82, suntShip 1/4, swiftShip 0/21, victoriaShip 1/36, yanShip 0/4",19,25,6,102], + "ai_2": [1,8,14,0,1,5,8,"e9b19bda",236,"arcaneShip 1/37, deputShip 2/33, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/14, soloShip 1/30, steadShip 1/80, suntShip 1/4, swiftShip 0/18, victoriaShip 1/38, yanShip 0/4",19,25,6,102], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 12, - "ai_0": [1,1,15,0,0,6,8,"2ed340cf",311,"arcaneShip 2/22, deputShip 0/2, indomShip 0/22, kazimierzShip 1/94, kjeragShip 0/16, preciShip 2/107, suntShip 1/2, swiftShip 1/86",8,47,39,115], + "ai_0": [1,1,15,0,0,6,8,"2ed340cf",329,"arcaneShip 2/22, deputShip 0/2, indomShip 0/24, kazimierzShip 1/104, kjeragShip 0/16, preciShip 2/115, suntShip 1/2, swiftShip 1/86",8,47,39,115], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [0,0,13,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/36, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/34, steadShip 0/98, suntShip 0/6, swiftShip 0/21, victoriaShip 0/42, yanShip 0/6",20,47,27,114], + "ai_2": [0,0,13,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/37, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/24, soloShip 0/34, steadShip 0/96, suntShip 0/6, swiftShip 0/18, victoriaShip 0/44, yanShip 0/6",24,47,23,114], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 13, - "ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/2, indomShip 0/22, kazimierzShip 0/109, kjeragShip 0/19, preciShip 0/121, suntShip 0/2, swiftShip 0/107",11,39,28,126], + "ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/2, indomShip 0/24, kazimierzShip 0/119, kjeragShip 0/19, preciShip 0/129, suntShip 0/2, swiftShip 0/107",10,39,29,126], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/36, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/34, steadShip 0/98, suntShip 0/6, swiftShip 0/21, victoriaShip 0/42, yanShip 0/6",null,null,null,114], + "ai_2": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/37, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/24, soloShip 0/34, steadShip 0/96, suntShip 0/6, swiftShip 0/18, victoriaShip 0/44, yanShip 0/6",null,null,null,114], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] } ], @@ -1145,9 +1145,9 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 3, "reward": 298, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3412269,"gold":126,"itemsEquipped":13,"kills":112,"leaks":136,"lpLost":54,"merges":3,"perfectRounds":5,"refreshes":15}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3520258,"gold":126,"itemsEquipped":13,"kills":113,"leaks":135,"lpLost":54,"merges":3,"perfectRounds":5,"refreshes":15}, "lineup": [], - "bonds": ["arcaneShip 0/32","deputShip 0/2","indomShip 0/22","kazimierzShip 0/109","kjeragShip 0/19","preciShip 0/121","suntShip 0/2","swiftShip 0/107"] + "bonds": ["arcaneShip 0/32","deputShip 0/2","indomShip 0/24","kazimierzShip 0/119","kjeragShip 0/19","preciShip 0/129","suntShip 0/2","swiftShip 0/107"] }, "ai_1": { "alive": false, @@ -1159,7 +1159,7 @@ "title": null, "trophies": 1, "reward": 149, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":815705,"gold":60,"itemsEquipped":3,"kills":62,"leaks":36,"lpLost":27,"merges":1,"perfectRounds":4,"refreshes":3}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":828223,"gold":60,"itemsEquipped":3,"kills":61,"leaks":37,"lpLost":27,"merges":1,"perfectRounds":4,"refreshes":3}, "lineup": [], "bonds": ["arcaneShip 0/4","deputShip 0/8","emptyShip 0/4","kazimierzShip 0/38","kjeragShip 0/2","preciShip 0/2","sargonShip 0/8","siracusaShip 0/6","soloShip 0/6","steadShip 0/2","swiftShip 0/22"] }, @@ -1173,9 +1173,9 @@ "title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"}, "trophies": 2, "reward": 255, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4957507,"gold":114,"itemsEquipped":8,"kills":197,"leaks":52,"lpLost":31,"merges":3,"perfectRounds":6,"refreshes":20}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4946661,"gold":114,"itemsEquipped":8,"kills":200,"leaks":47,"lpLost":30,"merges":3,"perfectRounds":6,"refreshes":20}, "lineup": [], - "bonds": ["arcaneShip 0/55","deputShip 0/36","egirShip 0/10","kazimierzShip 0/4","kjeragShip 0/12","lateranoShip 0/4","raidShip 0/4","siracusaShip 0/6","skillfulShip 0/26","soloShip 0/34","steadShip 0/98","suntShip 0/6","swiftShip 0/21","victoriaShip 0/42","yanShip 0/6"] + "bonds": ["arcaneShip 0/55","deputShip 0/37","egirShip 0/10","kazimierzShip 0/4","kjeragShip 0/14","lateranoShip 0/4","raidShip 0/4","siracusaShip 0/6","skillfulShip 0/24","soloShip 0/34","steadShip 0/96","suntShip 0/6","swiftShip 0/18","victoriaShip 0/44","yanShip 0/6"] }, "ai_3": { "alive": false, @@ -1314,7 +1314,7 @@ "combat": "client", "boost": {"lp":400,"layers":300}, "setup": {"stageId":"act1autochess_m02","bossId":"boss_5","hiddenBossId":"boss_10","factions":["TIMES","ELEMENT","DOT"]}, - "end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":399,"bossPoolLeft":0,"virtualMs":113700}, + "end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":398,"bossPoolLeft":0,"virtualMs":113700}, "rng": {"setup":25,"shop":346,"waves":0,"draft":42,"bots":10350,"meta":3}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -1377,12 +1377,12 @@ "victory": true, "roundsPassed": 15, "eliminatedRound": null, - "lp": 399, + "lp": 398, "bandId": "band_paganini", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 0, "reward": 425, - "stats": {"activatedLayers":2281,"bossDamage":4580000,"dmgDealt":6374793,"gold":175,"itemsEquipped":25,"kills":378,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":34}, + "stats": {"activatedLayers":2281,"bossDamage":4580000,"dmgDealt":6374918,"gold":175,"itemsEquipped":25,"kills":377,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":34}, "lineup": ["4_02_b@12,7[3_08_e_a+1_02_e_b]","6_01_a@12,8[3_03_e_a+3_02_e_a]","6_16_a@11,5","3_18_a@11,8[4_11_e_a+4_05_e_b]","4_10_a@10,4[1_05_e_b]","6_05_a@10,5","4_01_b@10,6[4_06_e_a+4_05_e_a]","1_08_b@9,9[4_10_e_a]"], "bonds": ["arcaneShip 2/389","deputShip 0/300","egirShip 0/300","emptyShip 0/300","indomShip 0/308","investShip 0/300","kazimierzShip 0/308","kjeragShip 0/300","lateranoShip 1/322","maniShip 0/300","miraShip 0/300","preciShip 1/302","raidShip 0/300","sargonShip 0/300","siracusaShip 1/345","skillfulShip 0/335","soloShip 1/307","steadShip 0/300","suntShip 1/300","swiftShip 1/316","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"] } @@ -1479,7 +1479,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 8, "reward": 425, - "stats": {"activatedLayers":3362,"bossDamage":7735924,"dmgDealt":20519044,"gold":154,"itemsEquipped":21,"kills":287,"leaks":8,"lpLost":0,"merges":7,"perfectRounds":12,"refreshes":21}, + "stats": {"activatedLayers":3362,"bossDamage":7735924,"dmgDealt":20519193,"gold":154,"itemsEquipped":21,"kills":287,"leaks":8,"lpLost":0,"merges":7,"perfectRounds":12,"refreshes":21}, "lineup": ["4_09_b@11,5[3_11_e_a+3_11_e_b]","6_11_a@11,8","3_13_b@10,3","3_05_b@10,8[1_01_e_a+6_09_e_a]","6_16_a@9,6","6_05_a@9,7[3_02_e_a]","4_14_b@9,8[2_01_e_a+1_02_e_b]","5_07_a@9,9[4_10_e_b]"], "bonds": ["arcaneShip 1/365","deputShip 0/304","egirShip 1/362","emptyShip 0/300","indomShip 0/300","investShip 0/300","kazimierzShip 0/302","kjeragShip 0/308","lateranoShip 0/300","maniShip 1/300","miraShip 0/300","preciShip 1/345","raidShip 1/423","sargonShip 1/300","siracusaShip 0/300","skillfulShip 1/338","soloShip 1/307","steadShip 0/333","suntShip 1/300","swiftShip 1/322","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"] }, @@ -1509,7 +1509,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m01","bossId":"boss_5","hiddenBossId":"boss_10","factions":["DOT","INVISIBLE","REFLECTION"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":40,"bossPoolLeft":0,"virtualMs":121400}, + "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":34,"bossPoolLeft":0,"virtualMs":118400}, "rng": {"setup":25,"shop":489,"waves":0,"draft":34,"bots":18039,"meta":11}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -1550,33 +1550,33 @@ }, { "round": 8, - "h_0": [1,28,13,0,2,4,8,"2bca9c35",59,"arcaneShip 1/7, kazimierzShip 0/8, preciShip 0/4, raidShip 1/44, skillfulShip 1/0, swiftShip 1/8, yanShip 0/1",14,15,1,62], + "h_0": [1,28,13,0,2,4,8,"2bca9c35",59,"arcaneShip 1/7, kazimierzShip 0/8, preciShip 0/4, raidShip 1/44, skillfulShip 1/0, swiftShip 1/8, yanShip 0/1",15,15,0,62], "ai_0": [1,23,12,0,0,4,8,"17716ab9",95,"arcaneShip 0/2, deputShip 1/14, kazimierzShip 0/8, lateranoShip 1/30, preciShip 0/10, sargonShip 0/2, skillfulShip 1/2, soloShip 1/2, suntShip 1/12, swiftShip 1/35",15,15,0,61] }, { "round": 9, "h_0": [1,28,14,0,0,4,8,"6e857f7b",98,"arcaneShip 1/11, kazimierzShip 1/20, preciShip 0/8, raidShip 1/56, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/11, yanShip 0/1",23,23,0,78], - "ai_0": [1,23,12,0,2,4,8,"4e17a01f",138,"arcaneShip 0/2, deputShip 1/16, kazimierzShip 0/8, lateranoShip 1/35, preciShip 1/17, sargonShip 0/2, skillfulShip 1/9, soloShip 0/5, suntShip 1/14, swiftShip 1/47",23,23,0,73] + "ai_0": [1,23,12,0,2,4,8,"4e17a01f",144,"arcaneShip 0/2, deputShip 1/16, kazimierzShip 0/8, lateranoShip 1/38, preciShip 1/20, sargonShip 0/2, skillfulShip 1/9, soloShip 0/5, suntShip 1/14, swiftShip 1/47",23,23,0,73] }, { "round": 10, "h_0": [1,28,12,0,0,5,8,"00fe855c",114,"arcaneShip 1/11, kazimierzShip 1/28, preciShip 0/8, raidShip 1/64, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/11, yanShip 0/1",31,31,0,88], - "ai_0": [1,23,14,0,0,5,8,"b70033a0",160,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/38, preciShip 2/27, sargonShip 0/2, skillfulShip 1/14, soloShip 1/5, suntShip 1/14, swiftShip 1/62",31,31,0,88] + "ai_0": [1,23,14,0,0,5,8,"b70033a0",166,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/41, preciShip 2/30, sargonShip 0/2, skillfulShip 1/14, soloShip 1/5, suntShip 1/14, swiftShip 1/62",31,31,0,88] }, { "round": 11, - "h_0": [1,27,12,0,0,5,8,"7c35f14c",146,"arcaneShip 1/11, kazimierzShip 1/40, miraShip 1/4, preciShip 0/8, raidShip 1/76, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/15, yanShip 0/1",23,25,2,100], - "ai_0": [1,23,12,0,0,5,8,"0e29ce35",193,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/41, preciShip 2/40, sargonShip 0/2, skillfulShip 1/19, soloShip 1/5, suntShip 1/14, swiftShip 1/74",25,25,0,101] + "h_0": [1,27,12,0,0,5,8,"7c35f14c",149,"arcaneShip 1/14, kazimierzShip 1/40, miraShip 1/4, preciShip 0/8, raidShip 1/76, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/15, yanShip 0/1",23,25,2,100], + "ai_0": [1,23,12,0,0,5,8,"0e29ce35",205,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/47, preciShip 2/46, sargonShip 0/2, skillfulShip 1/19, soloShip 1/5, suntShip 1/14, swiftShip 1/74",25,25,0,101] }, { "round": 12, - "h_0": [1,27,12,0,0,6,8,"c8e0476d",181,"arcaneShip 1/14, kazimierzShip 1/52, miraShip 1/8, preciShip 0/8, raidShip 1/88, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/19, yanShip 0/1",27,31,4,112], - "ai_0": [1,23,12,0,0,6,8,"55f8656e",229,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/47, preciShip 2/53, sargonShip 0/2, skillfulShip 1/24, soloShip 1/5, suntShip 1/14, swiftShip 1/86",31,31,0,112] + "h_0": [1,24,12,0,0,6,8,"c8e0476d",184,"arcaneShip 1/17, kazimierzShip 1/52, miraShip 1/8, preciShip 0/8, raidShip 1/88, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/19, yanShip 0/1",28,31,3,112], + "ai_0": [1,20,12,0,0,6,8,"54a25cd7",241,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/53, preciShip 2/59, sargonShip 0/2, skillfulShip 1/24, soloShip 1/5, suntShip 1/14, swiftShip 1/86",28,31,3,112] }, { "round": 13, - "h_0": [1,17,12,0,0,6,8,"b18b37b2",191,"arcaneShip 0/14, kazimierzShip 1/60, miraShip 1/12, preciShip 0/8, raidShip 1/96, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/23, yanShip 0/1",17,57,40,124], - "ai_0": [1,23,12,0,0,6,8,"dc15adde",265,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/53, preciShip 2/63, sargonShip 0/2, skillfulShip 1/29, soloShip 1/5, suntShip 1/14, swiftShip 1/101, visiShip 1/0",57,57,0,126] + "h_0": [1,14,12,0,0,6,8,"005da75b",208,"arcaneShip 1/17, kazimierzShip 1/60, miraShip 1/12, preciShip 0/8, raidShip 1/96, skillfulShip 0/3, soloShip 1/0, suntShip 1/0, swiftShip 1/23, yanShip 0/1",17,57,40,124], + "ai_0": [1,20,12,0,0,6,8,"dc15adde",283,"arcaneShip 0/2, deputShip 0/16, kazimierzShip 0/8, lateranoShip 1/59, preciShip 2/72, sargonShip 0/2, skillfulShip 1/29, soloShip 1/5, suntShip 1/14, swiftShip 1/104, visiShip 1/0",57,57,0,126] } ], "players": { @@ -1585,28 +1585,28 @@ "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 17, + "lp": 14, "bandId": "band_amedic", "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":198,"bossDamage":380567,"dmgDealt":2997433,"gold":136,"itemsEquipped":21,"kills":268,"leaks":47,"lpLost":11,"merges":3,"perfectRounds":9,"refreshes":21}, - "lineup": ["6_18_a@12,3","4_10_a@12,4[2_01_e_b+2_04_e_a]","1_17_b@11,3[4_03_e_a+1_01_e_a]","5_20_a@11,8[6_05_e_a+3_06_e_a]","3_17_b@10,3","3_12_a@10,4[1_02_e_a+3_11_e_a]","5_07_a@10,7","1_19_b@10,8[2_01_e_b+4_04_e_b]"], - "bonds": ["arcaneShip 2/18","kazimierzShip 1/60","miraShip 1/12","preciShip 0/8","raidShip 1/96","siracusaShip 1/12","skillfulShip 0/3","soloShip 1/0","suntShip 1/0","swiftShip 0/23","yanShip 0/1"] + "stats": {"activatedLayers":201,"bossDamage":239344,"dmgDealt":2835179,"gold":134,"itemsEquipped":22,"kills":267,"leaks":45,"lpLost":14,"merges":3,"perfectRounds":10,"refreshes":21}, + "lineup": ["6_18_a@12,3[2_01_e_b]","4_10_a@12,4","1_17_b@11,3[4_03_e_a+1_01_e_a]","5_20_a@11,8[6_05_e_a+3_06_e_a]","3_17_b@10,3","3_12_a@10,4[1_02_e_a+3_11_e_a]","5_07_a@10,7[4_02_e_b+4_11_e_a]","1_19_b@10,8[2_01_e_b+4_04_e_b]"], + "bonds": ["arcaneShip 2/21","kazimierzShip 1/60","miraShip 1/12","preciShip 0/8","raidShip 1/96","siracusaShip 1/12","skillfulShip 0/3","soloShip 1/0","suntShip 1/0","swiftShip 0/23","yanShip 0/1"] }, "ai_0": { "alive": true, "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 23, + "lp": 20, "bandId": "band_chiave", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":296,"bossDamage":399433,"dmgDealt":3904432,"gold":140,"itemsEquipped":17,"kills":327,"leaks":0,"lpLost":0,"merges":3,"perfectRounds":13,"refreshes":22}, + "stats": {"activatedLayers":314,"bossDamage":540656,"dmgDealt":3686133,"gold":140,"itemsEquipped":17,"kills":311,"leaks":3,"lpLost":3,"merges":3,"perfectRounds":12,"refreshes":22}, "lineup": ["3_21_a@12,3[4_08_e_a+6_02_e_a]","4_25_a@12,4","2_01_a@12,5[3_01_e_a]","6_12_a@11,3[1_05_e_a+3_11_e_a]","4_14_b@11,4[1_05_e_b+4_07_e_a]","1_01_b@10,3[3_08_e_a]","5_01_a@10,4[4_05_e_a]","2_13_a@9,4[4_02_e_b]"], - "bonds": ["arcaneShip 0/2","deputShip 0/16","emptyShip 1/0","kazimierzShip 0/8","lateranoShip 1/56","preciShip 2/76","sargonShip 0/2","skillfulShip 1/34","soloShip 0/5","suntShip 1/14","swiftShip 1/113","visiShip 1/3"] + "bonds": ["arcaneShip 0/2","deputShip 0/16","emptyShip 1/0","kazimierzShip 0/8","lateranoShip 1/62","preciShip 2/85","sargonShip 0/2","skillfulShip 1/34","soloShip 0/5","suntShip 1/14","swiftShip 1/116","visiShip 1/3"] } }, "standIns": { @@ -1638,8 +1638,8 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m03","bossId":"boss_7","hiddenBossId":"boss_10","factions":["ELEMENT","INVISIBLE","REFLECTION"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":55,"bossPoolLeft":0,"virtualMs":119900}, - "rng": {"setup":25,"shop":477,"waves":0,"draft":34,"bots":16274,"meta":23}, + "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":47,"bossPoolLeft":0,"virtualMs":118400}, + "rng": {"setup":25,"shop":477,"waves":0,"draft":34,"bots":16274,"meta":24}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ {"round":1,"h_0":[1,27,4,0,0,5,1,"3e4697a0",0,"",5,5,0,3],"ai_0":[1,28,4,0,0,1,2,"a1734bc6",0,"sargonShip 0/2, soloShip 1/0",5,5,0,4]}, @@ -1687,13 +1687,13 @@ }, { "round": 12, - "h_0": [1,27,12,0,0,6,8,"efd0ac13",413,"arcaneShip 0/2, indomShip 1/26, kazimierzShip 0/8, kjeragShip 0/8, maniShip 1/0, preciShip 1/129, sargonShip 1/169, steadShip 2/54, suntShip 1/0, swiftShip 0/40, victoriaShip 1/35, visiShip 0/6",33,33,0,117], - "ai_0": [1,28,12,0,0,6,8,"931d261f",245,"preciShip 1/105, sargonShip 1/107, skillfulShip 1/3, soloShip 1/0, suntShip 1/0, victoriaShip 0/5, visiShip 1/0, yanShip 1/30",27,33,6,113] + "h_0": [1,25,12,0,0,6,8,"efd0ac13",419,"arcaneShip 0/2, indomShip 1/28, kazimierzShip 0/8, kjeragShip 0/8, maniShip 1/0, preciShip 1/130, sargonShip 1/170, steadShip 2/54, suntShip 1/0, swiftShip 0/40, victoriaShip 1/37, visiShip 0/6",31,33,2,117], + "ai_0": [1,22,12,0,0,6,8,"931d261f",245,"preciShip 1/105, sargonShip 1/107, skillfulShip 1/3, soloShip 1/0, suntShip 1/0, victoriaShip 0/5, visiShip 1/0, yanShip 1/30",27,33,6,113] }, { "round": 13, - "h_0": [1,27,12,0,0,6,8,"e1220022",484,"arcaneShip 0/2, indomShip 1/28, kazimierzShip 0/8, kjeragShip 0/8, maniShip 1/0, preciShip 1/161, sargonShip 1/193, steadShip 2/59, suntShip 1/0, swiftShip 0/40, victoriaShip 1/43, visiShip 0/6",50,50,0,130], - "ai_0": [1,28,12,0,0,6,8,"a2f4a969",302,"preciShip 1/134, sargonShip 1/131, skillfulShip 1/3, soloShip 1/0, suntShip 1/0, victoriaShip 0/5, visiShip 1/0, yanShip 1/34",50,50,0,127] + "h_0": [1,25,12,0,0,6,8,"e1220022",494,"arcaneShip 0/2, indomShip 1/32, kazimierzShip 0/8, kjeragShip 0/8, maniShip 1/0, preciShip 1/162, sargonShip 1/194, steadShip 2/59, suntShip 1/0, swiftShip 0/40, victoriaShip 1/47, visiShip 0/6",50,50,0,130], + "ai_0": [1,22,12,0,0,6,8,"a2f4a969",302,"preciShip 1/134, sargonShip 1/131, skillfulShip 1/3, soloShip 1/0, suntShip 1/0, victoriaShip 0/5, visiShip 1/0, yanShip 1/34",50,50,0,127] } ], "players": { @@ -1702,26 +1702,26 @@ "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 27, + "lp": 25, "bandId": "band_yu", "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":496,"bossDamage":678256,"dmgDealt":4102418,"gold":141,"itemsEquipped":24,"kills":319,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":13,"refreshes":19}, + "stats": {"activatedLayers":506,"bossDamage":680576,"dmgDealt":3897100,"gold":141,"itemsEquipped":24,"kills":311,"leaks":2,"lpLost":2,"merges":2,"perfectRounds":12,"refreshes":19}, "lineup": ["4_20_b@11,8[3_05_e_a+5_03_e_a]","6_11_a@10,4[6_05_e_a+4_06_e_a]","5_02_a@10,6[5_01_e_a+6_01_e_a]","6_07_a@10,8[2_04_e_a+6_09_e_a]","3_16_a@9,4[4_05_e_a+3_09_e_a]","2_08_b@9,5[3_11_e_a+3_07_e_a]","6_03_a@9,6[4_04_e_b+2_01_e_a]","4_07_a@9,9[4_11_e_a+4_02_e_a]"], - "bonds": ["arcaneShip 0/2","indomShip 1/28","kazimierzShip 0/8","kjeragShip 0/8","maniShip 1/0","preciShip 1/161","sargonShip 1/195","steadShip 2/63","suntShip 1/0","swiftShip 0/40","victoriaShip 1/49","visiShip 0/6"] + "bonds": ["arcaneShip 0/2","indomShip 1/32","kazimierzShip 0/8","kjeragShip 0/8","maniShip 1/0","preciShip 1/162","sargonShip 1/196","steadShip 2/63","suntShip 1/0","swiftShip 0/40","victoriaShip 1/53","visiShip 0/6"] }, "ai_0": { "alive": true, "victory": true, "roundsPassed": 14, "eliminatedRound": null, - "lp": 28, + "lp": 22, "bandId": "band_mlyss", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":316,"bossDamage":896744,"dmgDealt":3970823,"gold":140,"itemsEquipped":19,"kills":279,"leaks":10,"lpLost":0,"merges":4,"perfectRounds":10,"refreshes":21}, + "stats": {"activatedLayers":316,"bossDamage":894424,"dmgDealt":3968281,"gold":140,"itemsEquipped":19,"kills":279,"leaks":10,"lpLost":6,"merges":4,"perfectRounds":10,"refreshes":21}, "lineup": ["5_02_a@12,8[3_01_e_a+5_01_e_a]","2_04_b@11,7[2_04_e_a+3_08_e_a]","5_03_a@11,8","3_13_a@10,5","6_08_a@10,6","4_04_b@10,8[4_02_e_a+4_08_e_a]","3_03_a@9,8[4_06_e_b]","6_06_a@9,9[4_10_e_a+4_07_e_a]"], "bonds": ["preciShip 1/134","sargonShip 1/131","skillfulShip 1/3","suntShip 1/0","victoriaShip 0/5","visiShip 1/10","yanShip 1/38"] } diff --git a/test/golden/roster.json b/test/golden/roster.json index 35e2da6e..15609f9d 100644 --- a/test/golden/roster.json +++ b/test/golden/roster.json @@ -78,50 +78,50 @@ "time": 110, "ticks": 3300, "reason": "timeout", - "killed": 29, + "killed": 33, "total": 43, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 88, + "rngDraws": 93, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":29,"total":43,"perfect":false,"leaks":15,"leaksUncounted":0,"coins":8,"dmg":264848,"bossDmg":0,"heal":6152,"deaths":14,"layerGains":{}}}, + "players": {"p1":{"killed":33,"total":43,"perfect":false,"leaks":11,"leaksUncounted":0,"coins":8,"dmg":268583,"bossDmg":0,"heal":5978,"deaths":14,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",3645.23,1,63,2,9693,5979,0,26,1], + ["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",3936.6,1,63,0,7676,5373,0,19,1], ["p1",2,"op","chess_char_1_20_a",1,null,2857.4,1,1,0,0,0,0,0,0], - ["p1",3,"op","chess_char_1_04_b",1,"uniequip_002_udflow",2252.64,1,4,0,5543,1523,0,8,1], - ["p1",4,"op","chess_char_1_08_b",1,"uniequip_002_texas",0,0,7,1,11498,3473,0,2,3], - ["p1",5,"op","chess_char_1_18_a",1,null,0,0,60,3,3495,6928,350,7,2], - ["p1",6,"op","chess_char_1_19_a",1,null,97.98,1,64,0,9055,5682,0,14,1], + ["p1",3,"op","chess_char_1_04_b",1,"uniequip_002_udflow",2009.21,1,4,1,6099,1766,0,7,1], + ["p1",4,"op","chess_char_1_08_b",1,"uniequip_002_texas",0,0,7,0,9407,3473,0,2,3], + ["p1",5,"op","chess_char_1_18_a",1,null,0,0,60,1,2876,6828,250,5,2], + ["p1",6,"op","chess_char_1_19_a",1,null,1079.08,1,62,1,7557,4701,0,12,1], ["p1",7,"op","chess_char_1_17_a",1,null,0,0,5,0,0,1481,0,0,0], - ["p1",8,"op","chess_char_1_01_b",1,"uniequip_002_inside",0,0,8,6,60897,4121,0,62,3], - ["p1",9,"op","chess_char_1_03_b",1,"uniequip_002_leizi",1062.94,1,62,4,29852,2554,0,16,1], - ["p1",10,"op","chess_char_1_06_b",1,"uniequip_002_vendla",0,0,61,5,25517,7173,5802,30,2], - ["p1",11,"op","chess_char_1_07_b",0,"uniequip_002_prove",0,0,58,3,40515,5955,0,27,0], - ["p1",12,"op","chess_char_1_09_b",1,"uniequip_002_caper",801.74,1,2,5,68783,2078,0,44,2] + ["p1",8,"op","chess_char_1_01_b",1,"uniequip_002_inside",0,0,8,8,60608,4326,0,62,3], + ["p1",9,"op","chess_char_1_03_b",1,"uniequip_002_leizi",0,0,6,8,34679,1808,0,18,1], + ["p1",10,"op","chess_char_1_06_b",1,"uniequip_002_vendla",0,0,61,3,27588,6894,5728,31,2], + ["p1",11,"op","chess_char_1_07_b",0,"uniequip_002_prove",1985.1,1,64,3,40852,5955,0,27,0], + ["p1",12,"op","chess_char_1_09_b",1,"uniequip_002_caper",63.1,1,2,8,71241,2816,0,47,2] ], "enemies": { "enemy_1000_gopro_2": [1,1,0,0,2938], "enemy_10065_ftzlc": [1,1,0,0,6566], "enemy_10112_ymgds": [1,1,0,0,8640], - "enemy_1019_jshoot": [9,3,5,14290,15838], + "enemy_1019_jshoot": [9,5,3,14360,16444], "enemy_1040_bombd": [1,1,0,0,6912], - "enemy_1043_zomsbr": [18,17,1,317,84858], + "enemy_1043_zomsbr": [18,18,0,317,84347], "enemy_1116_liprr": [1,1,0,0,9504], "enemy_1168_dumage_2": [1,1,0,2185,11232], "enemy_1199_sfjin": [1,1,0,0,11232], - "enemy_1200_msfjin": [1,0,1,0,19], - "enemy_1234_dsubrl": [1,0,1,6718,14990], - "enemy_1288_duskls_2": [1,0,1,0,10368], - "enemy_1299_ymkilr": [3,1,2,3997,14688], + "enemy_1200_msfjin": [1,0,1,0,23], + "enemy_1234_dsubrl": [1,1,0,3994,17280], + "enemy_1288_duskls_2": [1,0,1,0,12050], + "enemy_1299_ymkilr": [3,1,2,4833,18893], "enemy_1381_winman_2": [1,1,0,0,13478], - "enemy_1501_demonk": [1,0,0,8205,23695], - "enemy_2005_axetro": [1,0,0,7946,26640], - "enemy_9011_acrefr": [1,0,0,0,3251] + "enemy_1501_demonk": [1,0,0,9043,18620], + "enemy_2005_axetro": [1,0,0,6913,27169], + "enemy_9011_acrefr": [1,0,0,489,3255] }, - "hooks": [1,64,3300,376,376,473,517,3286,43,54,16,18,48,7606,34,12,44,11,1,44,0,0,0], - "events": {"atk":398,"bounty":4,"deploy":20,"die":43,"dmg":517,"engage":10,"fx":83,"heal":36,"leak":11,"skill":37,"spawn":56,"status":68}, - "fx": {"aoe":5,"counter":14,"crit":23,"displace":10,"dp":3,"ember":1,"pulse":22,"revive":1,"sp":1,"summon":1,"taunt":2}, - "snaps": "e780a460 61ee47ae bdf76d96 06fbd6a7 1037bf32 f06a06c4 cbd23de7 17d297e3 95dffa16 fe0088d3 7c8c9766" + "hooks": [1,64,3300,366,366,453,478,2506,47,54,16,18,48,7433,39,13,44,7,1,48,0,0,0], + "events": {"atk":393,"bounty":4,"deploy":20,"die":47,"dmg":478,"engage":10,"fx":72,"heal":36,"leak":7,"skill":38,"spawn":56,"status":79}, + "fx": {"aoe":5,"counter":15,"crit":25,"displace":7,"dp":3,"ember":1,"pulse":11,"revive":1,"sp":1,"summon":1,"taunt":2}, + "snaps": "e780a460 61ee47ae bdf76d96 b7009eb8 5a69ee99 cabe470e 209737c5 242ac4a4 89d424d9 96be567b 6f54375c" }, "roster-003": { "about": "pass 0 band 2: chess_char_1_10_b chess_char_1_12_b chess_char_1_20_b chess_char_1_18_b chess_char_1_19_b chess_char_1_13_b chess_char_1_14_b chess_char_1_17_b chess_char_2_01_a chess_char_2_02_a chess_char_2_04_a chess_char_2_05_a token_10000_silent_healrb", @@ -139,52 +139,52 @@ "total": 34, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 59, + "rngDraws": 88, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":83,"total":34,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":14,"dmg":119766,"bossDmg":0,"heal":20323,"deaths":3,"layerGains":{"preciShip":3}} + "p1": {"killed":83,"total":34,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":14,"dmg":119870,"bossDmg":0,"heal":20269,"deaths":7,"layerGains":{"preciShip":3}} }, "units": [ - ["p1",1,"op","chess_char_1_10_b",0,"uniequip_002_sunbr",2493,1,5,0,0,0,288,2,2], - ["p1",2,"op","chess_char_1_12_b",1,"uniequip_002_estell",2589,1,7,7,2056,288,0,26,1], - ["p1",3,"op","chess_char_1_20_b",1,"uniequip_002_liskam",2892,1,10,17,24011,363,0,70,1], - ["p1",4,"op","chess_char_1_18_b",1,"uniequip_002_utage",809.38,1,11,10,22101,9469,6924,99,1], - ["p1",5,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,14,6,43152,8749,0,83,2], - ["p1",6,"op","chess_char_1_13_b",1,"uniequip_002_podego",2446.5,1,8,5,1049,0,0,4,2], - ["p1",7,"op","chess_char_1_14_b",1,"uniequip_002_greyy",1505,1,12,8,2578,2093,0,20,1], + ["p1",1,"op","chess_char_1_10_b",0,"uniequip_002_sunbr",2493,1,5,2,2,0,988,8,6], + ["p1",2,"op","chess_char_1_12_b",1,"uniequip_002_estell",2589,1,7,9,7146,1520,1000,28,2], + ["p1",3,"op","chess_char_1_20_b",1,"uniequip_002_liskam",0,0,10,19,19947,5053,0,73,1], + ["p1",4,"op","chess_char_1_18_b",1,"uniequip_002_utage",0,0,11,13,25993,9090,5736,84,1], + ["p1",5,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,14,6,42667,8674,0,73,2], + ["p1",6,"op","chess_char_1_13_b",1,"uniequip_002_podego",2446.5,1,8,6,1056,0,0,7,3], + ["p1",7,"op","chess_char_1_14_b",1,"uniequip_002_greyy",0,0,12,7,2571,1505,0,13,1], ["p1",8,"op","chess_char_1_17_b",1,"uniequip_002_indigo",0,0,15,7,9634,1613,0,9,1], - ["p1",9,"op","chess_char_2_01_a",1,null,1694,1,4,9,3985,0,0,22,1], - ["p1",10,"op","chess_char_2_02_a",1,null,1400,1,6,0,0,0,7363,39,4], - ["p1",11,"op","chess_char_2_04_a",1,null,977,1,9,14,11200,0,0,58,3], - ["p1",12,"op","chess_char_2_05_a",1,null,0,0,13,0,0,5030,2430,22,1], - ["p1",13,"token","token_10000_silent_healrb",null,null,1000,1,106,0,0,0,3318,55,null], + ["p1",9,"op","chess_char_2_01_a",1,null,1694,1,4,9,5280,0,0,23,1], + ["p1",10,"op","chess_char_2_02_a",1,null,1400,1,6,0,0,468,7206,36,4], + ["p1",11,"op","chess_char_2_04_a",1,null,0,0,9,5,5573,977,0,35,2], + ["p1",12,"op","chess_char_2_05_a",1,null,0,0,13,0,0,4834,3012,24,1], + ["p1",13,"token","token_10000_silent_healrb",null,null,1000,1,106,0,0,0,2326,34,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_10018_sgrobh": [1,1,0,1580,6750], - "enemy_10067_ftsjc": [1,1,0,1748,11700], + "enemy_10067_ftsjc": [1,1,0,1455,11700], "enemy_10116_ymgtop": [1,1,0,423,9000], "enemy_1041_lazerd": [1,1,0,418,2430], - "enemy_1116_liprr_2": [1,1,0,42,6750], + "enemy_1116_liprr_2": [1,1,0,28,6750], "enemy_1169_duphlx": [1,1,0,11,3600], - "enemy_1195_sfyin": [12,12,0,68,21600], + "enemy_1195_sfyin": [12,12,0,201,21600], "enemy_1196_msfyin": [24,24,0,0,48], - "enemy_1197_sfshu": [9,9,0,211,20250], + "enemy_1197_sfshu": [9,9,0,185,20250], "enemy_1198_msfshu": [27,27,0,0,81], "enemy_1200_msfjin": [1,1,0,0,27], - "enemy_1234_dsubrl_2": [1,1,0,9584,12600], - "enemy_1292_duskld": [1,1,0,992,9010], - "enemy_1387_winshd": [1,0,0,286,10513], - "enemy_1502_crowns": [1,1,0,144,5400], - "enemy_2008_flking": [1,0,0,10423,0], + "enemy_1234_dsubrl_2": [1,1,0,13797,12600], + "enemy_1292_duskld": [1,1,0,1847,9010], + "enemy_1387_winshd": [1,0,0,980,9222], + "enemy_1502_crowns": [1,1,0,718,5400], + "enemy_2008_flking": [1,0,0,10415,1394], "enemy_9016_acstmr": [1,1,0,0,7] }, - "hooks": [1,105,3300,579,579,660,773,241,86,90,20,19,0,15985,207,29,85,0,1,92,1,0,0], - "events": {"atk":656,"bounty":7,"deploy":17,"die":90,"dmg":749,"engage":9,"fx":101,"heal":212,"layer":1,"skill":39,"spawn":101,"status":228}, - "fx": {"aoe":1,"blink":1,"displace":8,"ember":1,"explode":9,"garrison":1,"heal":2,"phase":1,"pulse":41,"reveal":1,"sleep":7,"summon":25,"undying":1,"zone":2}, - "snaps": "23086eb2 62198379 4013be03 54f09692 fac5503d 7def8563 16aff8bb 1c932c52 15f57f1a 500e8654 2f228080" + "hooks": [1,105,3300,517,517,702,858,209,90,94,25,25,0,15229,237,31,85,0,1,99,1,0,0], + "events": {"atk":627,"bounty":7,"deploy":17,"die":94,"dmg":827,"engage":10,"fx":113,"heal":185,"layer":1,"skill":50,"spawn":101,"status":179}, + "fx": {"aoe":1,"displace":10,"ember":1,"explode":8,"garrison":1,"heal":6,"pulse":50,"reveal":1,"sleep":5,"summon":25,"undying":2,"zone":3}, + "snaps": "28541aa3 4bc641fa 2745aed0 22253b77 14448657 af1d85b8 b71522f3 bfad6114 7d9f43fd eeb4d043 86486863" }, "roster-004": { "about": "pass 0 band 2: chess_char_2_08_a chess_char_2_17_a chess_char_2_18_a chess_char_2_07_a chess_char_2_09_a chess_char_2_11_a chess_char_2_13_a chess_char_2_16_a chess_char_2_12_a chess_char_2_06_a chess_char_2_10_a chess_char_2_14_a", @@ -385,56 +385,56 @@ "time": 140, "ticks": 4200, "reason": "timeout", - "killed": 110, + "killed": 118, "total": 71, "unspawned": 0, "bossHpLeft": null, "rngDraws": 63, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":110,"total":71,"perfect":false,"leaks":53,"leaksUncounted":1,"coins":4,"dmg":209618,"bossDmg":0,"heal":1552,"deaths":11,"layerGains":{}}}, + "players": {"p1":{"killed":118,"total":71,"perfect":false,"leaks":47,"leaksUncounted":1,"coins":4,"dmg":212178,"bossDmg":0,"heal":1557,"deaths":11,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_3_12_a",2,null,2334,1,185,2,2951,2334,989,14,1], - ["p1",2,"op","chess_char_3_16_a",1,null,2173,1,189,0,455,3725,564,1,1], - ["p1",3,"op","chess_char_3_18_a",2,null,1481,1,190,5,10060,2962,0,29,1], - ["p1",4,"op","chess_char_3_08_a",1,null,1326,1,4,12,23818,268,0,20,2], - ["p1",5,"op","chess_char_3_09_a",1,null,746.2,1,7,15,23603,521,0,63,2], + ["p1",1,"op","chess_char_3_12_a",2,null,2334,1,187,2,2951,2334,989,14,1], + ["p1",2,"op","chess_char_3_16_a",1,null,2173,1,191,0,455,3730,568,1,1], + ["p1",3,"op","chess_char_3_18_a",2,null,1481,1,192,5,10060,2962,0,29,1], + ["p1",4,"op","chess_char_3_08_a",1,null,1326,1,4,22,24950,268,0,20,2], + ["p1",5,"op","chess_char_3_09_a",1,null,746.2,1,7,14,24218,521,0,63,2], ["p1",6,"op","chess_char_3_10_a",1,null,0,0,10,18,13862,1650,0,25,2], - ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,188,9,10052,1316,0,18,3], - ["p1",8,"op","chess_char_3_13_a",1,null,1064,1,178,3,5421,1064,0,21,9], - ["p1",9,"op","chess_char_3_14_a",1,null,0,0,5,10,17911,1251,0,42,2], + ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,190,9,10052,1316,0,18,3], + ["p1",8,"op","chess_char_3_13_a",1,null,1064,1,180,3,5421,1064,0,21,9], + ["p1",9,"op","chess_char_3_14_a",1,null,0,0,5,9,18702,1251,0,42,2], ["p1",10,"op","chess_char_3_17_a",1,null,0,0,8,7,43134,2246,0,63,4], - ["p1",11,"op","chess_char_3_19_a",2,null,731,1,145,15,35381,2147,0,94,2], - ["p1",12,"op","chess_char_3_20_a",1,null,1121,1,184,3,5552,1121,0,38,1], + ["p1",11,"op","chess_char_3_19_a",2,null,731,1,147,17,34717,2147,0,94,2], + ["p1",12,"op","chess_char_3_20_a",1,null,1121,1,186,3,5552,1121,0,38,1], ["p1",13,"token","token_10028_vigil_wolf",null,null,280.26,0,108,4,4379,1680,0,14,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,146,7,13040,2038,0,31,null] + ["p1","~1","token","token_10028_vigil_wolf",null,null,405.92,1,148,5,13725,2038,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,0,1,5253,29207], - "enemy_1045_hammer": [1,0,1,518,3908], + "enemy_10127_rkmbst_2": [1,0,1,5055,29207], + "enemy_1045_hammer": [1,0,1,518,4353], "enemy_1121_lifbos_2": [1,0,1,1204,3004], "enemy_1172_dugago": [1,0,1,80,4589], - "enemy_1195_sfyin": [36,27,9,815,73499], - "enemy_1195_sfyin_2": [15,8,7,1557,41167], - "enemy_1196_msfyin": [54,46,8,0,93], - "enemy_1196_msfyin_2": [16,9,7,0,33], + "enemy_1195_sfyin": [36,27,9,800,75304], + "enemy_1195_sfyin_2": [15,9,6,1595,41687], + "enemy_1196_msfyin": [54,50,4,0,101], + "enemy_1196_msfyin_2": [18,10,8,0,34], "enemy_1197_sfshu": [9,6,3,523,22048], - "enemy_1198_msfshu": [18,10,8,0,39], + "enemy_1198_msfshu": [18,12,6,0,41], "enemy_1203_sfhu": [1,1,0,4545,7488], "enemy_1204_msfhu": [4,0,4,0,2], - "enemy_1252_lysytb_2": [1,0,1,2323,3559], + "enemy_1252_lysytb_2": [1,0,1,2323,3336], "enemy_1305_mhslim": [1,1,0,184,1382], "enemy_1407_hummbd": [1,1,0,77,5184], "enemy_1512_mcmstr": [1,0,1,6792,11323], "enemy_2021_syfish": [1,0,1,0,788] }, - "hooks": [1,189,4200,602,602,858,862,392,122,176,30,29,0,18633,16,36,164,53,1,129,0,0,0], - "events": {"atk":734,"bounty":2,"deploy":23,"die":123,"dmg":852,"engage":14,"fx":133,"heal":2,"leak":53,"skill":59,"spawn":180,"status":55}, - "fx": {"aoe":2,"camouflage":1,"displace":22,"dp":2,"explode":21,"phase":1,"pull":22,"revive":2,"sp":1,"strike":3,"summon":44,"volley":7,"wolfShadow":2,"wolfShadowLost":3}, - "snaps": "8447aca6 0085b7c9 33307063 cd2bf975 e6c8eeb1 7331d165 340230f4 4e983e4a fd8f005c e400c6cd 0e8b1aa8 9330488b d2efc4c0 40e02a59" + "hooks": [1,191,4200,602,602,873,877,395,130,178,30,29,0,18626,16,36,166,47,1,137,0,0,0], + "events": {"atk":745,"bounty":2,"deploy":23,"die":131,"dmg":867,"engage":14,"fx":134,"heal":2,"leak":47,"skill":59,"spawn":182,"status":55}, + "fx": {"aoe":2,"camouflage":1,"displace":22,"dp":2,"explode":21,"phase":1,"pull":22,"revive":2,"sp":1,"strike":3,"summon":45,"volley":7,"wolfShadow":2,"wolfShadowLost":3}, + "snaps": "8447aca6 0085b7c9 33307063 cd2bf975 f5188834 86cd303d d41a351f 70d279f4 ed1143e8 4c8ae8f7 3ee55ff1 1af8a398 c1b71010 b0f4b62c" }, "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", @@ -448,7 +448,7 @@ "time": 170, "ticks": 5100, "reason": "timeout", - "killed": 45, + "killed": 47, "total": 83, "unspawned": 0, "bossHpLeft": null, @@ -456,13 +456,13 @@ "errors": {"count":0,"kinds":[]}, "players": { "p1": { - "killed": 45, + "killed": 47, "total": 83, "perfect": false, - "leaks": 42, + "leaks": 40, "leaksUncounted": 1, "coins": 8, - "dmg": 509318, + "dmg": 506600, "bossDmg": 0, "heal": 5038, "deaths": 15, @@ -478,10 +478,10 @@ ["p1",6,"op","chess_char_3_05_b",2,"uniequip_002_skadi",3123.21,1,124,13,85727,23739,0,41,2], ["p1",7,"op","chess_char_3_21_a",2,null,0,0,2,3,24933,1464,0,22,1], ["p1",8,"op","chess_char_3_01_b",2,"uniequip_002_angel",0,0,3,2,78698,1887,0,50,2], - ["p1",9,"op","chess_char_3_08_b",1,"uniequip_002_mint",0,0,4,1,25619,6586,0,9,1], + ["p1",9,"op","chess_char_3_08_b",1,"uniequip_002_mint",0,0,4,2,27253,6586,0,9,1], ["p1",10,"op","chess_char_3_09_b",1,"uniequip_002_haini",613.6,1,137,0,34921,2041,0,30,1], - ["p1",11,"op","chess_char_3_10_b",1,"uniequip_002_pinecn",0,0,1,2,12042,2220,0,10,1], - ["p1",12,"op","chess_char_3_11_b",1,"uniequip_002_snhunt",0,0,5,5,67101,1850,0,36,9], + ["p1",11,"op","chess_char_3_10_b",1,"uniequip_002_pinecn",0,0,1,3,10140,2220,0,10,1], + ["p1",12,"op","chess_char_3_11_b",1,"uniequip_002_snhunt",0,0,5,5,64651,1850,0,36,9], ["p1","~1","token","token_10031_swire2_gdtrap",null,null,1000,0,13,0,0,0,0,0,null], ["p1","~2","token","token_10031_swire2_gdtrap",null,null,1000,0,45,0,0,0,0,0,null], ["p1","~3","token","token_10031_swire2_gdtrap",null,null,1000,0,46,0,0,0,0,0,null], @@ -515,22 +515,22 @@ "enemy_10030_vtwand": [1,0,0,0,0], "enemy_1007_slime": [1,1,0,0,950], "enemy_10138_xdsnow": [1,1,0,13,9504], - "enemy_1045_hammer_2": [1,0,1,10435,19290], + "enemy_1045_hammer_2": [1,0,1,11085,19290], "enemy_1148_dssbr": [1,1,0,0,4838], "enemy_1172_dugago_2": [1,0,1,3146,18990], "enemy_1203_sfhu_2": [1,1,0,3612,15120], - "enemy_1204_msfhu_2": [4,0,4,0,29], + "enemy_1204_msfhu_2": [4,1,3,0,33], "enemy_1254_lypa_2": [1,1,0,1003,17280], "enemy_1305_mhslim_2": [1,1,0,614,3110], - "enemy_1415_mmkabi_2": [1,0,1,724,26704], - "enemy_1513_dekght": [1,0,1,8165,11440], - "enemy_2021_syfish": [60,37,23,2548,276038], + "enemy_1415_mmkabi_2": [1,0,1,74,26704], + "enemy_1513_dekght": [1,0,1,8165,8125], + "enemy_2021_syfish": [60,38,22,2548,276631], "enemy_2025_syufo": [13,2,8,36905,106023] }, - "hooks": [1,137,5100,539,539,1062,1157,387,60,130,21,23,0,8443,80,45,88,39,1,66,12,12,0], - "events": {"atk":624,"bounty":4,"deploy":49,"die":91,"dmg":1084,"engage":12,"fx":231,"heal":386,"layer":12,"leak":39,"skill":47,"spawn":128,"status":130}, - "fx": {"aoe":20,"blink":3,"buff":1,"burst":12,"coin":29,"displace":32,"explode":34,"garrison":8,"layer":4,"pull":32,"revive":6,"shield":1,"shieldBreak":1,"strike":9,"summon":29,"telegraph":1,"volley":9}, - "snaps": "17903402 6c8167ba 07381013 82bb886b 608b7ec4 49a9f161 e85b61cf 22016225 ee0925e6 4ee5eeb2 8a500100 aa9abb07 2ce0b42a fcb5b9cb d8b6506e b8cd651a b26cce51" + "hooks": [1,137,5100,539,539,1072,1167,387,62,130,21,23,0,8443,79,46,88,37,1,68,12,12,0], + "events": {"atk":636,"bounty":4,"deploy":49,"die":93,"dmg":1087,"engage":12,"fx":233,"heal":386,"layer":12,"leak":37,"skill":47,"spawn":128,"status":128}, + "fx": {"aoe":20,"blink":3,"buff":1,"burst":12,"coin":29,"displace":33,"explode":34,"garrison":8,"layer":4,"pull":33,"revive":6,"shield":1,"shieldBreak":1,"strike":9,"summon":29,"telegraph":1,"volley":9}, + "snaps": "17903402 6c8167ba 07381013 82bb886b 608b7ec4 49a9f161 e85b61cf 67fd6d17 22a61f87 b284b6f6 4e0b242d df66d3a4 158e2cfb 11543d94 9a2ac26f d2946799 f4dc978a" }, "roster-009": { "about": "pass 0 band 4: chess_char_3_16_b chess_char_4_01_a chess_char_3_18_b chess_char_4_04_a chess_char_3_13_b chess_char_3_14_b chess_char_3_17_b chess_char_3_19_b chess_char_3_20_b chess_char_3_21_b chess_char_4_02_a chess_char_4_06_a token_10028_vigil_wolf", @@ -548,23 +548,23 @@ "total": 63, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 148, + "rngDraws": 149, "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": [ ["p1",1,"op","chess_char_3_16_b",1,"uniequip_002_snakek",5363,1,3,0,0,0,0,0,0], ["p1",2,"op","chess_char_4_01_a",2,null,4563.74,1,6,0,0,0,0,0,0], ["p1",3,"op","chess_char_3_18_b",2,"uniequip_002_vulpis",3494.6,1,8,4,10170,0,0,14,2], - ["p1",4,"op","chess_char_4_04_a",1,null,1465.9,1,12,11,16299,1579,0,155,4], - ["p1",5,"op","chess_char_3_13_b",1,"uniequip_002_malist",2378.75,1,9,21,12399,0,0,66,31], - ["p1",6,"op","chess_char_3_14_b",1,"uniequip_002_slbell",2793.95,1,10,6,7013,0,0,41,3], - ["p1",7,"op","chess_char_3_17_b",1,"uniequip_002_shotst",2359.13,1,14,21,29176,2653,0,59,8], - ["p1",8,"op","chess_char_3_19_b",2,"uniequip_002_vigil",3110.54,1,4,3,3125,0,0,7,4], - ["p1",9,"op","chess_char_3_20_b",1,"uniequip_002_kjera",2508.5,1,7,0,306,0,0,9,2], - ["p1",10,"op","chess_char_3_21_b",2,"uniequip_002_archet",2750.7,1,11,71,123157,0,0,204,5], - ["p1",11,"op","chess_char_4_02_a",2,null,2470.44,1,166,15,63554,2470,0,36,2], - ["p1",12,"op","chess_char_4_06_a",1,null,2111.67,1,13,18,11022,44,0,75,2], - ["p1",13,"token","token_10028_vigil_wolf",null,null,146.08,1,5,1,3398,3432,0,30,null], + ["p1",4,"op","chess_char_4_04_a",1,null,1465.9,1,12,13,14651,1579,0,156,4], + ["p1",5,"op","chess_char_3_13_b",1,"uniequip_002_malist",2378.75,1,9,18,10500,0,0,70,31], + ["p1",6,"op","chess_char_3_14_b",1,"uniequip_002_slbell",2447.16,1,10,8,6578,347,0,43,3], + ["p1",7,"op","chess_char_3_17_b",1,"uniequip_002_shotst",1518.03,1,14,22,30620,3494,0,60,9], + ["p1",8,"op","chess_char_3_19_b",2,"uniequip_002_vigil",3110.54,1,4,2,2569,0,0,7,4], + ["p1",9,"op","chess_char_3_20_b",1,"uniequip_002_kjera",2094.42,1,7,0,337,414,0,9,2], + ["p1",10,"op","chess_char_3_21_b",2,"uniequip_002_archet",2750.7,1,11,68,126148,0,0,205,5], + ["p1",11,"op","chess_char_4_02_a",2,null,2470.44,1,166,15,64528,2470,0,36,2], + ["p1",12,"op","chess_char_4_06_a",1,null,2015.73,1,13,20,10995,140,0,75,2], + ["p1",13,"token","token_10028_vigil_wolf",null,null,674.03,1,5,1,2524,3784,0,30,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] ], @@ -577,7 +577,7 @@ "enemy_1174_duholy": [1,1,0,932,16200], "enemy_1195_sfyin": [33,33,0,55,71280], "enemy_1196_msfyin": [66,66,0,0,132], - "enemy_1197_sfshu": [12,12,0,0,32400], + "enemy_1197_sfshu": [12,12,0,96,32400], "enemy_1198_msfshu": [36,36,0,0,108], "enemy_1199_sfjin": [6,6,0,0,42120], "enemy_1200_msfjin": [6,6,0,0,192], @@ -585,13 +585,13 @@ "enemy_1267_nhpbr": [1,1,0,400,4860], "enemy_1320_wdrrl_2": [1,1,0,1061,27000], "enemy_1422_lrsldr": [1,1,0,0,5076], - "enemy_1513_dekght_2": [1,1,0,7730,43200], + "enemy_1513_dekght_2": [1,1,0,9684,43200], "enemy_2034_sythef": [1,1,0,0,8640] }, - "hooks": [1,187,4674,713,713,1306,1290,0,172,172,63,61,0,21782,106,10,171,0,1,179,0,0,0], - "events": {"atk":886,"bounty":6,"deploy":14,"die":172,"dmg":1290,"engage":11,"fx":176,"skill":124,"spawn":186,"status":238}, - "fx": {"camouflage":1,"crit":24,"displace":30,"dp":5,"explode":4,"phase":1,"ripple":8,"shadowWeave":24,"shield":2,"stealth":4,"summon":51,"telegraph":6,"volley":8,"wolfShadow":4,"wolfShadowLost":3,"zone":1}, - "snaps": "69a7f9d4 a676cad6 57a90446 c208123b ae74e9b8 1b323369 8b5283e9 4c70fd14 717d3193 f69fe3aa 1e6c1532 ddb7d885 f774a464 57e74ab4 20bd8a39 ac5fa54d" + "hooks": [1,187,4674,724,724,1316,1300,0,172,172,64,62,0,21795,111,8,171,0,1,180,0,0,0], + "events": {"atk":902,"bounty":6,"deploy":14,"die":172,"dmg":1299,"engage":11,"fx":182,"skill":126,"spawn":186,"status":238}, + "fx": {"camouflage":1,"crit":20,"displace":29,"dp":5,"explode":7,"phase":1,"ripple":8,"shadowWeave":28,"shield":2,"shieldBreak":1,"stealth":4,"summon":51,"telegraph":6,"volley":9,"wolfShadow":5,"wolfShadowLost":4,"zone":1}, + "snaps": "69a7f9d4 a676cad6 57a90446 2b5bc93f 44bf59d1 20609e24 c9411ff3 c887c191 22915f4f 777777ee 8d8df3ad 4f0dc6c1 889db822 d2bc409a c4c665fb 8bf694ed" }, "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", @@ -605,27 +605,27 @@ "time": 170, "ticks": 5100, "reason": "timeout", - "killed": 45, + "killed": 44, "total": 69, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 99, + "rngDraws": 94, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":45,"total":69,"perfect":false,"leaks":57,"leaksUncounted":0,"coins":4,"dmg":442763,"bossDmg":0,"heal":3335,"deaths":23,"layerGains":{"preciShip":12}} + "p1": {"killed":44,"total":69,"perfect":false,"leaks":58,"leaksUncounted":0,"coins":4,"dmg":438561,"bossDmg":0,"heal":3295,"deaths":23,"layerGains":{"preciShip":12}} }, "units": [ - ["p1",1,"op","chess_char_4_17_a",1,null,0,0,5,0,3672,2849,0,7,0], + ["p1",1,"op","chess_char_4_17_a",1,null,0,0,5,0,7251,2849,0,14,0], ["p1",2,"op","chess_char_4_18_a",1,null,0,0,6,0,3167,4489,1622,4,4], ["p1",3,"op","chess_char_4_11_a",1,null,2144,1,133,0,1453,2934,0,3,1], ["p1",4,"op","chess_char_4_19_a",2,null,0,0,90,1,12530,3120,0,27,1], ["p1",5,"op","chess_char_4_07_a",1,null,1738,1,134,0,1793,3476,0,2,1], - ["p1",6,"op","chess_char_4_16_a",2,null,0,0,126,6,107272,7475,1245,36,8], + ["p1",6,"op","chess_char_4_16_a",2,null,0,0,126,3,97746,7475,1245,36,6], ["p1",7,"op","chess_char_4_09_a",1,null,0,0,120,0,30872,2672,0,19,1], - ["p1",8,"op","chess_char_4_10_a",1,null,0,0,107,0,35046,4379,0,18,1], - ["p1",9,"op","chess_char_4_12_a",2,null,0,0,104,2,27366,3976,468,20,1], - ["p1",10,"op","chess_char_4_13_a",1,null,0,0,96,1,30170,3174,0,50,4], - ["p1",11,"op","chess_char_4_14_a",1,null,0,0,88,15,154931,2552,0,26,2], + ["p1",8,"op","chess_char_4_10_a",1,null,0,0,107,1,31925,4894,0,18,1], + ["p1",9,"op","chess_char_4_12_a",2,null,0,0,100,2,25457,3936,428,18,1], + ["p1",10,"op","chess_char_4_13_a",1,null,0,0,96,1,30391,3174,0,50,4], + ["p1",11,"op","chess_char_4_14_a",1,null,0,0,88,16,161487,2552,0,27,3], ["p1",12,"op","chess_char_4_20_a",2,null,0,0,4,4,34490,1217,0,13,1], ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null], ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], @@ -635,26 +635,26 @@ ], "enemies": { "enemy_10034_cnvsax": [1,1,0,344,42998], - "enemy_1005_yokai": [24,17,7,0,62851], - "enemy_1005_yokai_2": [27,8,14,4793,74644], - "enemy_1005_yokai_3": [6,0,5,17691,104777], + "enemy_1005_yokai": [24,17,7,0,63503], + "enemy_1005_yokai_2": [27,8,14,4609,74481], + "enemy_1005_yokai_3": [6,0,5,17480,104731], "enemy_10083_hlbird": [1,1,0,0,6450], - "enemy_10144_xdelk_2": [1,0,1,2927,43644], - "enemy_1050_lslime": [1,0,1,9204,17718], + "enemy_10144_xdelk_2": [1,0,1,2927,45336], + "enemy_1050_lslime": [1,0,1,9539,20439], "enemy_1158_divman": [1,1,0,461,14189], - "enemy_1174_duholy_2": [1,0,1,2161,5126], + "enemy_1174_duholy_2": [1,0,1,1152,6043], "enemy_1204_msfhu_2": [1,0,1,0,10], "enemy_1267_nhpbr_2": [1,0,1,160,8090], - "enemy_1269_nhfly": [33,17,16,4510,35939], - "enemy_1321_wdarft": [1,0,1,0,5210], + "enemy_1269_nhfly": [33,16,17,5535,27200], + "enemy_1321_wdarft": [1,0,1,0,3974], "enemy_1422_lrsldr_2": [1,0,1,0,21116], - "enemy_1516_jakill": [1,0,1,62,0], + "enemy_1516_jakill": [1,0,1,582,0], "enemy_2034_sythef_2": [1,0,1,0,0] }, - "hooks": [1,132,5100,457,457,1127,1077,332,71,119,25,26,0,8109,376,12,102,51,1,200,3,0,41], - "events": {"atk":557,"bounty":2,"deploy":27,"die":68,"dmg":985,"engage":12,"fx":195,"heal":7,"layer":3,"leak":51,"skill":52,"spawn":119,"status":335}, - "fx": {"block":9,"catShield":2,"charge":1,"dilemma":1,"dodge":41,"explode":18,"explosion":2,"featherArrow":1,"flame":1,"frostNova":4,"garrison":3,"garrisonGrant":1,"overclock":1,"phase":1,"pull":1,"riposte":2,"rockslide":4,"shieldBreak":5,"slippery":1,"summon":11,"swordRain":46,"swordStorm":8,"telegraph":2,"thorns":16,"tornado":1,"tornadoPulse":5,"undying":7}, - "snaps": "06e15d5c 9c6e5b81 2ecc1e6a 71fee850 b79ab0d2 3601a029 af7e3130 8290988c ef603826 41e4badb 232f36b3 92680cda 18b57768 3253586c 584ddab4 65fdbd7c 43bb928d" + "hooks": [1,132,5100,442,442,1125,1088,303,68,119,24,25,0,7928,385,11,102,52,1,201,3,0,23], + "events": {"atk":540,"bounty":2,"deploy":27,"die":67,"dmg":996,"engage":12,"fx":194,"heal":7,"layer":3,"leak":52,"skill":50,"spawn":119,"status":345}, + "fx": {"block":14,"catShield":2,"charge":1,"dilemma":1,"dodge":23,"explode":18,"explosion":3,"featherArrow":1,"flame":1,"frostNova":4,"garrison":3,"garrisonGrant":1,"overclock":1,"phase":1,"pull":1,"riposte":2,"rockslide":4,"shieldBreak":5,"slippery":1,"summon":11,"swordRain":46,"swordStorm":6,"telegraph":2,"thorns":29,"tornado":1,"tornadoPulse":5,"undying":7}, + "snaps": "06e15d5c 9c6e5b81 9f5d725d b13396df 98ecac6a f6ce7a0e 93fdfd13 934d9971 f00721d3 0f063f43 efae5003 e36862a5 bf3bd5e8 864b2548 d1bf8652 213491b2 c2b8be45" }, "roster-011": { "about": "pass 0 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_21_a chess_char_4_24_a chess_char_4_25_a chess_char_4_26_a chess_char_4_02_b chess_char_4_06_b", @@ -668,28 +668,28 @@ "time": 190, "ticks": 5700, "reason": "timeout", - "killed": 78, + "killed": 79, "total": 78, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 231, + "rngDraws": 230, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":78,"total":78,"perfect":false,"leaks":4,"leaksUncounted":0,"coins":12,"dmg":698950,"bossDmg":0,"heal":15928,"deaths":5,"layerGains":{"visiShip":8}} + "p1": {"killed":79,"total":78,"perfect":false,"leaks":3,"leaksUncounted":0,"coins":12,"dmg":698244,"bossDmg":0,"heal":16417,"deaths":5,"layerGains":{"visiShip":4}} }, "units": [ - ["p1",1,"op","chess_char_4_23_a",2,null,4358,1,99,11,140344,15336,0,111,3], - ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",102.62,1,8,5,46833,5323,0,48,1], - ["p1",3,"op","chess_char_4_22_a",2,null,2022,1,6,13,88212,0,0,108,2], - ["p1",4,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,9,11,81681,912,912,177,6], - ["p1",5,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,100,2,13185,2918,611,45,17], - ["p1",6,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1736,1,12,13,126109,490,656,60,6], + ["p1",1,"op","chess_char_4_23_a",2,null,4358,1,99,12,139568,15336,0,111,3], + ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",102.62,1,8,5,47852,5323,0,48,1], + ["p1",3,"op","chess_char_4_22_a",2,null,2022,1,6,15,83626,0,0,108,2], + ["p1",4,"op","chess_char_4_04_b",1,"uniequip_002_ines",2149,1,9,10,81585,912,912,175,6], + ["p1",5,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2383,1,100,1,12506,3042,734,46,18], + ["p1",6,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",1736,1,12,12,124814,741,812,60,6], ["p1",7,"op","chess_char_4_21_a",1,null,1271,1,3,0,0,0,10978,55,2], - ["p1",8,"op","chess_char_4_24_a",1,null,1726,1,4,6,93889,0,0,93,5], - ["p1",9,"op","chess_char_4_25_a",2,null,1221,1,85,0,0,2172,586,0,2], - ["p1",10,"op","chess_char_4_26_a",0,null,1368,1,14,0,0,1870,2125,7,0], - ["p1",11,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1359,1,5,11,90717,336,0,45,2], - ["p1",12,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,101,5,17979,3121,60,101,2], + ["p1",8,"op","chess_char_4_24_a",1,null,1726,1,4,7,93004,0,0,93,5], + ["p1",9,"op","chess_char_4_25_a",2,null,1221,1,85,0,0,2172,662,0,2], + ["p1",10,"op","chess_char_4_26_a",0,null,1368,1,14,0,0,1870,2259,7,0], + ["p1",11,"op","chess_char_4_02_b",2,"uniequip_002_mostma",1359,1,5,10,95777,336,0,46,2], + ["p1",12,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",1561,1,101,5,19511,3121,60,101,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] ], @@ -708,13 +708,13 @@ "enemy_1325_cbgpro": [1,1,0,0,3040], "enemy_1425_lrcmra": [1,1,0,324,16000], "enemy_1517_xi": [1,1,0,11243,48000], - "enemy_2048_smgrd": [1,1,0,5522,40000], - "enemy_9011_acrefr": [12,8,0,11500,318808] + "enemy_2048_smgrd": [1,1,0,5609,40000], + "enemy_9011_acrefr": [12,9,0,11787,318125] }, - "hooks": [1,101,5700,972,972,2317,2716,1581,83,83,48,44,30,29691,498,34,82,0,1,84,2,0,1], - "events": {"atk":1788,"bounty":6,"deploy":17,"die":83,"dmg":2486,"engage":9,"fx":280,"heal":79,"layer":2,"skill":92,"spawn":96,"status":1157}, - "fx": {"camouflage":2,"charge":17,"counter":30,"crit":38,"dilemma":6,"displace":7,"dodge":1,"explode":1,"garrison":2,"healField":2,"jungleSoul":3,"mote":26,"quadShot":1,"redistribute":30,"revive":1,"reweave":2,"ripple":15,"sandChains":5,"sermon":1,"shadowWeave":35,"shield":4,"slash":36,"stealth":6,"summon":1,"telegraph":6,"truesilver":2}, - "snaps": "4ec6c58b 31b6e4f7 b3a1832d 1d3aef5f a87a8d54 03884138 51cdef78 9ed2fd94 6dc7967a 5abbf904 1c8c11b7 1d22075e 459d6f35 c29e281e 36befd7b 59fdbfb6 ba6c43fa eafb4ef7 2ce67130" + "hooks": [1,101,5700,973,973,2312,2712,1746,84,84,49,45,30,29802,490,34,82,0,1,85,1,0,0], + "events": {"atk":1786,"bounty":6,"deploy":17,"die":84,"dmg":2482,"engage":9,"fx":281,"heal":79,"layer":1,"skill":94,"spawn":96,"status":1143}, + "fx": {"camouflage":2,"charge":18,"counter":30,"crit":37,"dilemma":6,"displace":7,"explode":1,"garrison":1,"healField":2,"jungleSoul":3,"mote":26,"quadShot":1,"redistribute":30,"revive":1,"reweave":2,"ripple":17,"sandChains":5,"sermon":1,"shadowWeave":36,"shield":4,"slash":36,"stealth":6,"summon":1,"telegraph":6,"truesilver":2}, + "snaps": "4ec6c58b 31b6e4f7 b3a1832d 7fb1648c 667f2020 f9e3b739 abb3f8fa d43cec00 81828927 23349a66 a56c1fc9 c942c114 2b41ad62 7c637dc3 d9577229 4acbab9d 79be14af d6e74675 ba50dd99" }, "roster-012": { "about": "pass 0 band 5: chess_char_4_17_b chess_char_4_18_b chess_char_4_11_b chess_char_4_19_b chess_char_4_22_b chess_char_4_16_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b chess_char_4_20_b chess_char_4_21_b token_10041_cathy_catsld token_10041_cathy_catsld", @@ -777,7 +777,7 @@ "hooks": [1,125,4847,485,485,1427,1424,821,110,113,83,82,0,17042,1514,29,100,1,1,119,1,0,3], "events": {"atk":636,"bounty":5,"deploy":22,"die":112,"dmg":1415,"engage":10,"fx":275,"heal":212,"layer":1,"leak":1,"skill":167,"spawn":117,"status":1018}, "fx": {"beam":6,"blink":2,"block":2,"displace":11,"dodge":3,"explode":6,"explosion":23,"featherArrow":4,"flame":3,"frostNova":35,"garrison":1,"garrisonGrant":1,"healField":2,"overclock":1,"palsy":1,"pull":2,"revive":4,"riposte":2,"rockslide":4,"shieldBreak":9,"slash":30,"summon":1,"swordRain":28,"swordStorm":6,"telegraph":3,"thorns":1,"tornado":2,"tornadoPulse":10,"truesilver":3,"zone":69}, - "snaps": "ccfbde35 4d2aba8a 8dfe85b0 528967cd 3dbb0c86 c06ed10c 2e96bd48 7b9b35a5 b7b36032 323ec922 4199cd1a 0940cade b87b745a ff75d11f 64cca2ce b9bb5bac fc4d294c" + "snaps": "ccfbde35 4d2aba8a 8dfe85b0 528967cd 3dbb0c86 c06ed10c 2e96bd48 7b9b35a5 81a8026f 675eec02 948b697a 13acafbe ccecc7ba 12eda37f 39b76bae 6dc9150c ed5e09ac" }, "roster-013": { "about": "pass 0 band 5: chess_char_4_23_b chess_char_5_08_a chess_char_5_01_a chess_char_5_05_a chess_char_5_06_a chess_char_5_07_a chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b chess_char_5_02_a chess_char_5_03_a chess_char_5_10_a", @@ -1135,7 +1135,7 @@ "hooks": [1,193,5965,895,895,1366,1742,349,184,186,46,43,123,35603,1303,179,174,0,1,193,3,3,0], "events": {"atk":910,"bounty":6,"deploy":19,"die":186,"dmg":1518,"engage":11,"fx":201,"heal":138,"layer":3,"skill":89,"spawn":188,"status":918}, "fx": {"airstrike":33,"beam":6,"burst":3,"cleanse":3,"displace":1,"dp":3,"drone":50,"droneLock":21,"drones":1,"emergency":7,"explode":16,"finale":4,"garrison":3,"link":2,"scorchBurst":18,"slash":17,"steal":3,"summon":3,"sunBurst":2,"talent":3,"undying":2}, - "snaps": "43b03df4 4fcc619d 2be2121d b478fa2a 1c29c601 b33d14b7 0584e2d0 82b225f7 09241fe7 4f2805dd 3462bfac 3ffdbd77 73f9a044 2a84c2d8 8d905cc5 3ebb29ff 02a7318c 9bab956c 7db8bfe9 5cc46ec7" + "snaps": "43b03df4 4fcc619d 2be2121d b478fa2a 1c29c601 96aa34d3 0e886eac f600ec73 907ca853 552e1671 341eafc8 6e0f6a0b 372bf3a0 624a0dcc 83ca1bb1 b6c00e03 87871968 eb329c28 18669ab5 6b1c8ca3" }, "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", @@ -1247,19 +1247,19 @@ "coins": 12, "dmg": 3002858, "bossDmg": 0, - "heal": 151109, + "heal": 151373, "deaths": 0, "layerGains": {"deputShip":12} } }, "units": [ ["p1",1,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",6263.63,1,14,26,881807,49881,0,208,3], - ["p1",2,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",6087.4,1,9,8,257902,2105,0,9,3], + ["p1",2,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",6087.4,1,9,8,257902,2368,0,9,3], ["p1",3,"op","chess_char_5_01_b",0,"uniequip_003_excu2",4049.22,1,10,0,8361,1953,200,3,0], ["p1",4,"op","chess_char_5_05_b",0,"none",12815,1,7,0,0,1000,100,0,0], ["p1",5,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",10122.44,1,24,20,425280,48361,0,105,3], ["p1",6,"op","chess_char_6_13_b",1,"uniequip_002_angel2",4873,1,2,28,540782,10588,1317,60,2], - ["p1",7,"op","chess_char_6_14_b",2,"uniequip_002_lumen",4177.8,1,3,0,0,0,9754,78,1], + ["p1",7,"op","chess_char_6_14_b",2,"uniequip_002_lumen",4177.8,1,3,0,0,0,10017,78,1], ["p1",8,"op","chess_char_6_16_b",2,"uniequip_002_halo2",3165.8,1,4,1,81240,0,0,48,2], ["p1",9,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",3390.2,1,8,17,575679,1000,0,72,3], ["p1",10,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",3475.3,1,12,0,0,37945,139738,69,2], @@ -1282,13 +1282,13 @@ "enemy_1367_dseed": [1,1,0,0,8600], "enemy_1439_dslntf_2": [1,1,0,20025,94596], "enemy_2003_rockman": [1,1,0,1417,214991], - "enemy_9007_acelem": [12,12,0,41756,1238347], + "enemy_9007_acelem": [12,12,0,42020,1238347], "enemy_9009_acfort": [1,1,0,3643,68797] }, - "hooks": [1,125,6028,925,925,2810,3369,649,108,113,30,27,55,22777,1447,79,108,0,1,108,2,7,0], - "events": {"atk":1296,"bounty":6,"deploy":17,"die":113,"dmg":3164,"engage":10,"fx":532,"heal":537,"layer":2,"skill":57,"spawn":123,"status":448}, + "hooks": [1,125,6028,925,925,2811,3370,648,108,113,30,27,55,22777,1447,79,108,0,1,108,2,7,0], + "events": {"atk":1296,"bounty":6,"deploy":17,"die":113,"dmg":3165,"engage":10,"fx":532,"heal":536,"layer":2,"skill":57,"spawn":123,"status":448}, "fx": {"airstrike":17,"aoe":11,"beam":24,"blink":2,"bombard":10,"bombardShell":10,"burst":7,"cleanse":2,"displace":4,"drone":353,"droneLock":45,"drones":3,"emergency":1,"finale":3,"garrison":2,"garrisonGrant":1,"link":4,"radiantSword":3,"slash":21,"steal":2,"summon":3,"sunBurst":1,"talent":3}, - "snaps": "01a34277 0e7ad63e efd260c2 caa9f746 70118f40 b3efb03c de6d6921 949345a2 044a2b7f 708e7b55 4d219240 d5449fa5 16d7d388 9acd59d5 6a170c8e 5cb70efa f2ae5891 7f3e163c 63a11ec8 d5bcbf3a" + "snaps": "01a34277 0e7ad63e efd260c2 caa9f746 70118f40 b3efb03c de6d6921 949345a2 7e82b678 f52d675c 2ff925cb 4ac8700c f634f469 4fe3ff96 e4da1646 afc659b2 2a175c39 f51d0224 234f4ad0 8b7bcae2" }, "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", @@ -1897,28 +1897,28 @@ "time": 190, "ticks": 5700, "reason": "timeout", - "killed": 64, + "killed": 72, "total": 76, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 141, + "rngDraws": 137, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":64,"total":76,"perfect":false,"leaks":12,"leaksUncounted":0,"coins":6,"dmg":808362,"bossDmg":0,"heal":46581,"deaths":6,"layerGains":{"preciShip":8}} + "p1": {"killed":72,"total":76,"perfect":false,"leaks":4,"leaksUncounted":0,"coins":6,"dmg":855320,"bossDmg":0,"heal":46424,"deaths":5,"layerGains":{"preciShip":8}} }, "units": [ - ["p1",1,"op","chess_char_4_17_b",0,"uniequip_003_hsguma",294.8,1,94,0,8514,6981,0,54,2], - ["p1",2,"op","chess_char_4_18_b",0,"uniequip_003_mudrok",5522.9,1,99,5,76661,9083,3182,50,2], + ["p1",1,"op","chess_char_4_17_b",0,"uniequip_003_hsguma",855.47,1,94,0,8514,6421,0,54,2], + ["p1",2,"op","chess_char_4_18_b",0,"uniequip_003_mudrok",5522.9,1,5,12,137510,5514,5325,90,3], ["p1",3,"op","chess_char_4_11_b",0,"none",2544,1,86,0,6128,6333,0,32,0], - ["p1",4,"op","chess_char_4_19_b",0,"uniequip_003_flamtl",1943,1,83,4,74590,3126,0,76,13], - ["p1",5,"op","chess_char_4_22_b",0,"none",2379,1,12,11,125646,18243,0,123,41], - ["p1",6,"op","chess_char_4_16_b",0,"uniequip_003_texas2",1609,1,14,10,118693,20183,0,168,2], + ["p1",4,"op","chess_char_4_19_b",0,"uniequip_003_flamtl",1943,1,83,4,72764,3365,0,74,13], + ["p1",5,"op","chess_char_4_22_b",0,"none",2379,1,12,14,126025,17637,0,124,41], + ["p1",6,"op","chess_char_4_16_b",0,"uniequip_003_texas2",1609,1,14,13,117650,18252,0,168,2], ["p1",7,"op","chess_char_4_10_b",0,"none",1514,1,8,0,0,0,0,0,0], - ["p1",8,"op","chess_char_4_12_b",0,"uniequip_003_glady",4456.2,1,9,0,59468,0,0,30,26], - ["p1",9,"op","chess_char_4_13_b",0,"uniequip_003_gnosis",1974,1,13,13,141663,0,0,100,100], - ["p1",10,"op","chess_char_4_14_b",0,"none",0,0,73,3,30168,3092,0,14,3], - ["p1",11,"op","chess_char_4_20_b",0,"uniequip_003_fartth",1499,1,6,17,166831,0,0,82,4], - ["p1",12,"op","chess_char_4_21_b",0,"none",1524,1,10,0,0,0,43399,61,4], + ["p1",8,"op","chess_char_4_12_b",0,"uniequip_003_glady",4456.2,1,9,3,63571,0,0,34,28], + ["p1",9,"op","chess_char_4_13_b",0,"uniequip_003_gnosis",1974,1,13,8,142846,0,0,101,101], + ["p1",10,"op","chess_char_4_14_b",0,"none",1546,1,99,1,17041,3092,0,8,2], + ["p1",11,"op","chess_char_4_20_b",0,"uniequip_003_fartth",1499,1,6,16,163271,0,0,82,4], + ["p1",12,"op","chess_char_4_21_b",0,"none",1524,1,10,0,0,0,41099,61,4], ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,15,0,0,0,0,0,null], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], @@ -1926,20 +1926,20 @@ ], "enemies": { "enemy_1006_shield_2": [1,1,0,366,16589], - "enemy_1010_demon": [21,17,4,34710,234366], + "enemy_1010_demon": [21,21,0,32464,261274], "enemy_1019_jshoot_2": [1,1,0,129,4479], "enemy_1148_dssbr": [1,1,0,0,4645], "enemy_1198_msfshu": [1,1,0,0,5], "enemy_1269_nhfly": [1,1,0,533,0], - "enemy_1320_wdrrl_2": [6,2,3,11472,116114], + "enemy_1320_wdrrl_2": [6,3,2,15003,140316], "enemy_1387_winshd": [1,1,0,2918,19907], - "enemy_1422_lrsldr_2": [42,39,3,1365,371802], - "enemy_1539_reid": [1,0,1,15550,40456] + "enemy_1422_lrsldr_2": [42,42,0,1715,383201], + "enemy_1539_reid": [1,0,1,7486,24905] }, - "hooks": [1,97,5700,1034,1034,1118,1102,123,70,81,197,195,0,16443,2326,63,76,11,1,85,1,0,8], - "events": {"atk":1088,"bounty":3,"deploy":19,"die":70,"dmg":1090,"engage":10,"fx":84,"heal":115,"layer":1,"leak":11,"skill":395,"spawn":92,"status":429}, - "fx": {"block":8,"charge":4,"displace":19,"dodge":8,"dp":13,"explode":4,"garrison":1,"garrisonGrant":1,"revive":1,"riposte":8,"shieldBreak":12,"swordRain":2,"telegraph":1,"undying":2}, - "snaps": "8285ab52 9e70080e a7c10a1e 192dab0b 40a84501 f7c55fa6 88ea3b8a 8d6efb4d 630fcfc6 772e22aa 624415dc f071b098 39ef0344 0961f483 027e3ae9 6bad7832 df731dc0 16849966 f7249471" + "hooks": [1,97,5700,1092,1092,1172,1157,127,77,80,200,199,0,16940,2320,68,76,3,1,84,1,0,8], + "events": {"atk":1143,"bounty":3,"deploy":19,"die":77,"dmg":1139,"engage":10,"fx":84,"heal":121,"layer":1,"leak":3,"skill":402,"spawn":92,"status":452}, + "fx": {"block":7,"charge":4,"displace":16,"dodge":8,"dp":13,"explode":5,"garrison":1,"garrisonGrant":1,"riposte":8,"shieldBreak":18,"swordRain":2,"undying":1}, + "snaps": "8285ab52 6fd65ebc 6f14bfe5 6afc4793 320fd5a9 b55ab40a 56b0c5b8 466755bb 27f410e5 54a5e39c 3105543e 858c7c28 c88fd1b6 29f59d2f 9f8a9f34 cf042b90 8bfd2013 6888b81d 02fcb210" }, "roster-032": { "about": "pass 1 band 5: chess_char_4_23_b chess_char_5_08_a chess_char_5_01_a chess_char_5_05_a chess_char_5_06_a chess_char_5_07_a chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b chess_char_5_02_a chess_char_5_03_a chess_char_5_10_a", @@ -1969,21 +1969,21 @@ "coins": 4, "dmg": 1027851, "bossDmg": 0, - "heal": 133329, + "heal": 132091, "deaths": 9, "layerGains": {"sargonShip":25} } }, "units": [ ["p1",1,"op","chess_char_4_23_b",0,"uniequip_003_gvial2",0,0,100,6,55704,12833,7201,41,1], - ["p1",2,"op","chess_char_5_08_a",0,null,0,0,77,9,96743,4819,2199,27,9], + ["p1",2,"op","chess_char_5_08_a",0,null,0,0,77,9,95157,4819,2199,27,9], ["p1",3,"op","chess_char_5_01_a",0,null,1967,1,11,3,22366,932,932,25,1], - ["p1",4,"op","chess_char_5_05_a",0,null,6147,1,13,21,223297,52451,40817,50,22], - ["p1",5,"op","chess_char_5_06_a",0,null,1133.44,1,15,27,442625,59116,56580,127,35], + ["p1",4,"op","chess_char_5_05_a",0,null,6147,1,13,21,224883,51685,40270,50,22], + ["p1",5,"op","chess_char_5_06_a",0,null,1133.44,1,15,27,442625,58644,56107,127,35], ["p1",6,"op","chess_char_5_07_a",0,null,2216,1,102,0,6,2215,0,6,1], ["p1",7,"op","chess_char_4_24_b",0,"uniequip_003_billro",1978,1,103,1,82826,1978,0,25,3], ["p1",8,"op","chess_char_4_25_b",0,"none",2982,1,87,0,0,4733,1751,0,2], - ["p1",9,"op","chess_char_4_26_b",1,"none",1482,1,88,0,0,9084,20113,32,3], + ["p1",9,"op","chess_char_4_26_b",1,"none",1482,1,88,0,0,9084,19894,32,3], ["p1",10,"op","chess_char_5_02_a",0,null,1208,1,97,2,27288,5469,3735,75,1], ["p1",11,"op","chess_char_5_03_a",0,null,1206,1,4,2,57903,0,0,77,7], ["p1",12,"op","chess_char_5_10_a",0,null,1184,1,101,0,19093,1184,0,40,2], @@ -1999,14 +1999,14 @@ "enemy_1168_dumage_2": [1,1,0,2963,16174], "enemy_1208_msfji": [1,0,1,0,59], "enemy_1299_ymkilr_2": [10,6,4,50098,185312], - "enemy_1422_lrsldr_2": [42,40,2,13480,556334], + "enemy_1422_lrsldr_2": [42,40,2,12241,556334], "enemy_1433_dsbasi_2": [1,1,0,932,14183], "enemy_2025_syufo": [1,0,1,5469,9694] }, - "hooks": [1,103,5700,823,823,3255,3506,6134,80,89,87,86,9,25932,386,80,80,8,1,116,7,3,0], - "events": {"atk":1308,"bounty":2,"deploy":20,"die":81,"dmg":3506,"engage":10,"fx":186,"heal":1058,"layer":7,"leak":8,"skill":173,"spawn":95,"status":355}, + "hooks": [1,103,5700,819,819,3250,3501,6123,80,89,87,86,9,25932,386,80,80,8,1,116,7,3,0], + "events": {"atk":1304,"bounty":2,"deploy":20,"die":81,"dmg":3501,"engage":10,"fx":186,"heal":1052,"layer":7,"leak":8,"skill":173,"spawn":95,"status":355}, "fx": {"anchor":22,"aoe":7,"bloodBattle":5,"burst":3,"camouflage":2,"displace":29,"ember":1,"explode":6,"extraAttack":4,"garrison":7,"garrisonGrant":1,"mote":56,"reborn":1,"shell":3,"spGift":36,"zone":3}, - "snaps": "081da39e 3e9bded5 546a9685 5d9692fc a0e3c592 060a5462 3b9d8ec7 d5fb168e c6e70fb2 fd25a934 1913bcc1 112882b2 6914176b e229210a 87b12b30 b5ba23f7 7eb48111 87002903 04bad58b" + "snaps": "081da39e 3e9bded5 546a9685 2ee63d86 7f4610d0 8cd9ed6a 09a886a3 b9ab5848 c73f5fee 138a8259 1bdc3e58 b4be4487 fa91162e a0fa5569 5d6f1e63 f2e13250 e4390d81 c24f7f33 1d4dd37b" }, "roster-033": { "about": "pass 1 band 6: chess_char_5_11_a chess_char_5_19_a chess_char_5_13_a chess_char_5_14_a chess_char_5_06_b chess_char_5_17_a chess_char_5_12_a chess_char_5_15_a chess_char_5_20_a chess_char_5_21_a chess_char_5_22_a chess_char_5_23_a", @@ -2404,33 +2404,21 @@ "rngDraws": 29, "errors": {"count":0,"kinds":[]}, "players": { - "p1": { - "killed": 47, - "total": 52, - "perfect": false, - "leaks": 5, - "leaksUncounted": 1, - "coins": 6, - "dmg": 440079, - "bossDmg": 0, - "heal": 13648, - "deaths": 1, - "layerGains": {"miraShip":1,"raidShip":27} - } + "p1": {"killed":47,"total":52,"perfect":false,"leaks":5,"leaksUncounted":1,"coins":6,"dmg":440079,"bossDmg":0,"heal":13665,"deaths":1,"layerGains":{"raidShip":27}} }, "units": [ ["p1",1,"op","chess_char_3_12_a",1,null,4481.28,1,29,8,53301,3605,3608,222,9], ["p1",2,"op","chess_char_3_12_b",1,"none",5637.12,1,31,6,51231,479,479,143,7], ["p1",3,"op","chess_char_3_18_a",1,null,1481,1,10,0,7643,0,0,0,7], ["p1",4,"op","chess_char_3_18_b",1,"none",1715.43,1,57,4,77894,5011,3036,137,9], - ["p1",5,"op","chess_char_3_04_a",2,null,1864,1,9,4,38720,34,34,94,3], + ["p1",5,"op","chess_char_3_04_a",2,null,1864,1,9,5,39120,51,51,94,3], ["p1",6,"op","chess_char_3_05_a",1,null,5876,1,11,3,26580,4580,4580,80,1], ["p1",7,"op","chess_char_3_04_b",2,"uniequip_004_swire2",2658.89,1,73,5,40260,275,275,54,3], ["p1",8,"op","chess_char_3_05_b",1,"none",6821.76,1,61,3,32949,1630,1636,23,3], - ["p1",9,"op","chess_char_3_01_a",1,null,1511.94,1,1,2,4527,0,0,47,2], - ["p1",10,"op","chess_char_3_19_a",1,null,1439,1,4,1,31340,0,0,101,4], - ["p1",11,"op","chess_char_3_21_a",1,null,1364,1,7,9,66107,0,0,177,17], - ["p1",12,"op","chess_char_3_01_b",1,"none",1965.6,1,2,2,7790,0,0,47,2], + ["p1",9,"op","chess_char_3_01_a",1,null,1511.94,1,1,1,4192,0,0,46,2], + ["p1",10,"op","chess_char_3_19_a",1,null,1439,1,4,0,31620,0,0,101,4], + ["p1",11,"op","chess_char_3_21_a",1,null,1364,1,7,10,65763,0,0,177,17], + ["p1",12,"op","chess_char_3_01_b",1,"none",1965.6,1,2,2,7790,0,0,46,2], ["p1",13,"token","token_10028_vigil_wolf",null,null,880,1,5,0,1737,0,0,7,null] ], "enemies": { @@ -2441,15 +2429,15 @@ "enemy_1208_msfji_2": [1,1,0,0,32], "enemy_1302_ymtro_2": [1,1,0,0,32400], "enemy_1381_winman": [21,21,0,1157,131544], - "enemy_1381_winman_2": [12,12,0,1085,101088], + "enemy_1381_winman_2": [12,12,0,1102,101088], "enemy_1387_winshd": [12,7,0,8431,121750], "enemy_1438_dspred": [1,1,0,2934,14256], "enemy_2034_sythef": [1,1,0,25,8640] }, - "hooks": [1,74,5100,1392,1392,1946,1946,3274,48,55,67,64,0,15874,103,85,53,0,1,48,7,0,0], - "events": {"atk":1392,"bounty":3,"deploy":21,"die":55,"dmg":1946,"engage":12,"fx":146,"heal":8,"layer":7,"skill":131,"spawn":66,"status":167}, - "fx": {"aoe":31,"blink":4,"bondMilestone":1,"buff":6,"coin":50,"displace":8,"dp":20,"garrison":7,"shield":1,"volley":17,"wolfShadow":1}, - "snaps": "b7d44319 4fc048ae 28ee4e6e c9c603c2 55d0890f 7dc46b6f 45f82890 a80e21f1 4798eff8 d051d766 d7744b9f bb5fd3de c958366f 0c72b3be 3c5f8167 11cd7bde 9e47cb83" + "hooks": [1,74,5100,1391,1391,1946,1946,3277,48,55,67,64,0,15874,103,86,53,0,1,48,6,0,0], + "events": {"atk":1391,"bounty":3,"deploy":21,"die":55,"dmg":1946,"engage":12,"fx":145,"heal":8,"layer":6,"skill":131,"spawn":66,"status":167}, + "fx": {"aoe":31,"blink":4,"bondMilestone":1,"buff":6,"coin":50,"displace":8,"dp":20,"garrison":6,"shield":1,"volley":17,"wolfShadow":1}, + "snaps": "b7d44319 4fc048ae 28ee4e6e c9c603c2 55d0890f 7dc46b6f 45f82890 a80e21f1 4798eff8 d051d766 d7744b9f 8f75050e 6b39ddea 434592eb 4c2804c6 615628a3 81d412fe" }, "roster-040": { "about": "pass 2 band 4: chess_char_4_01_a chess_char_4_17_a chess_char_4_18_a chess_char_4_04_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_3_19_b chess_char_3_21_b chess_char_4_02_a chess_char_4_12_a chess_char_4_13_a token_10028_vigil_wolf", @@ -2467,44 +2455,43 @@ "total": 65, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 290, + "rngDraws": 314, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":28,"total":65,"perfect":false,"leaks":37,"leaksUncounted":0,"coins":4,"dmg":539070,"bossDmg":0,"heal":532,"deaths":29,"layerGains":{}}}, + "players": {"p1":{"killed":28,"total":65,"perfect":false,"leaks":37,"leaksUncounted":0,"coins":4,"dmg":561208,"bossDmg":0,"heal":460,"deaths":29,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_01_a",1,null,0,0,3,1,4146,2638,0,43,1], - ["p1",2,"op","chess_char_4_17_a",2,null,0,0,6,0,15255,2849,0,27,1], - ["p1",3,"op","chess_char_4_18_a",2,null,0,0,8,0,14465,2867,0,13,1], - ["p1",4,"op","chess_char_4_04_a",2,null,1380.13,1,103,3,44236,7420,0,27,5], + ["p1",1,"op","chess_char_4_01_a",1,null,0,0,3,0,2677,2638,0,54,1], + ["p1",2,"op","chess_char_4_17_a",2,null,2438.68,1,104,1,17340,3259,0,29,1], + ["p1",3,"op","chess_char_4_18_a",2,null,0,0,8,0,15871,2867,0,14,1], + ["p1",4,"op","chess_char_4_04_a",2,null,395.34,1,103,8,65906,8405,0,48,5], ["p1",5,"op","chess_char_4_07_a",2,null,0,0,84,0,2834,8690,0,12,1], - ["p1",6,"op","chess_char_4_16_a",1,null,520.98,1,102,0,60790,8201,0,23,7], - ["p1",7,"op","chess_char_4_09_a",2,null,1179.06,1,101,1,13963,1493,0,18,0], - ["p1",8,"op","chess_char_3_19_b",1,"none",0,0,92,6,63680,3296,0,75,2], - ["p1",9,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,94,6,149953,3180,0,64,7], - ["p1",10,"op","chess_char_4_02_a",1,null,0,0,88,4,62899,2856,0,20,1], - ["p1",11,"op","chess_char_4_12_a",1,null,0,0,89,4,41821,4040,532,37,1], + ["p1",6,"op","chess_char_4_16_a",1,null,641.81,1,102,0,62045,8080,0,23,7], + ["p1",7,"op","chess_char_4_09_a",2,null,969.81,1,92,1,19207,1702,0,20,1], + ["p1",8,"op","chess_char_3_19_b",1,"none",0,0,100,3,42286,3296,0,73,1], + ["p1",9,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,93,4,165665,3180,0,71,8], + ["p1",10,"op","chess_char_4_02_a",1,null,0,0,88,5,60853,2856,0,20,1], + ["p1",11,"op","chess_char_4_12_a",1,null,0,0,89,3,41495,3968,460,36,1], ["p1",12,"op","chess_char_4_13_a",2,null,0,0,77,3,65028,3174,0,64,1], - ["p1",13,"token","token_10028_vigil_wolf",null,null,1026,0,5,0,0,0,0,0,null], + ["p1",13,"token","token_10028_vigil_wolf",null,null,567.5,0,101,0,0,3219,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], - ["p1","~1","token","token_10028_vigil_wolf",null,null,854.06,0,93,0,0,1161,0,0,null] + ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null] ], "enemies": { - "enemy_1005_yokai": [24,15,9,0,61406], - "enemy_1005_yokai_2": [27,10,12,9640,95871], - "enemy_1005_yokai_3": [6,0,5,21276,242322], + "enemy_1005_yokai": [24,14,10,0,58116], + "enemy_1005_yokai_2": [27,10,13,11839,120127], + "enemy_1005_yokai_3": [6,1,4,20879,232521], "enemy_10065_ftzlc": [1,1,0,0,16339], - "enemy_10162_mnctpt": [1,0,1,5059,43013], + "enemy_10162_mnctpt": [1,0,1,6673,47734], "enemy_1119_vofsd": [1,1,0,0,47298], "enemy_1196_msfyin_2": [1,1,0,0,7], - "enemy_1254_lypa_2": [1,0,1,9973,29143], - "enemy_1367_dseed": [1,0,1,0,1995], - "enemy_1517_xi": [1,0,1,5916,1676], - "enemy_9016_acstmr": [1,0,1,0,0] + "enemy_1254_lypa_2": [1,0,1,10588,31313], + "enemy_1367_dseed": [1,0,1,0,2182], + "enemy_1517_xi": [1,0,1,4956,5540], + "enemy_9016_acstmr": [1,0,1,0,31] }, - "hooks": [1,102,5100,642,642,976,1028,371,57,91,28,27,29,9673,247,15,65,31,1,63,0,2,9], - "events": {"atk":719,"bounty":2,"deploy":35,"die":60,"dmg":1021,"engage":12,"fx":91,"leak":31,"skill":55,"spawn":81,"status":269}, - "fx": {"beam":5,"block":2,"buff":3,"burst":2,"coldWind":1,"dodge":9,"dp":2,"iceSpike":1,"overclock":1,"overload":1,"revive":4,"rockfall":1,"sentry":6,"shadowWeave":19,"shield":6,"shieldBreak":7,"stone":1,"summon":1,"swordStorm":7,"telegraph":2,"volley":7,"wake":1,"wolfShadow":1,"zone":1}, - "snaps": "1a929dbc 7451dcc4 0ee48092 20e4366e 344bb7d6 c4ddc413 f7b86fa8 ba9b29f8 5fd594a5 5be4437d 366984c4 7d7082b1 98b0b2f1 2eca0438 b1da6518 1e074864 280e1bad" + "hooks": [1,103,5100,734,734,1094,1100,320,58,92,29,28,19,10332,251,15,65,32,1,66,0,1,23], + "events": {"atk":818,"bounty":2,"deploy":36,"die":60,"dmg":1093,"engage":12,"fx":111,"leak":32,"skill":57,"spawn":80,"status":271}, + "fx": {"beam":5,"block":3,"buff":2,"burst":1,"coldWind":1,"dodge":23,"dp":1,"explode":1,"iceSpike":1,"overclock":1,"overload":1,"revive":3,"ripple":1,"rockfall":1,"sentry":6,"shadowWeave":21,"shield":7,"shieldBreak":6,"stone":1,"summon":1,"swordStorm":7,"telegraph":3,"volley":8,"wake":1,"wolfShadow":1,"wolfShadowLost":3,"zone":1}, + "snaps": "1a929dbc 10d3e1a1 32c57a4c 453c40de 39991d46 d1badb60 93a80ae5 3f5fd356 9790cf11 f7a44c04 7d48a2d9 fcd195ec 791a30be ab595962 df33ce42 438bb413 ba2b787d" }, "roster-041": { "about": "pass 2 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_19_a chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_20_a chess_char_4_24_a chess_char_4_25_a chess_char_4_02_b chess_char_4_12_b", @@ -2522,40 +2509,40 @@ "total": 47, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 39, + "rngDraws": 35, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":46,"total":47,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":8,"dmg":526018,"bossDmg":0,"heal":15976,"deaths":5,"layerGains":{}}}, + "players": {"p1":{"killed":46,"total":47,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":8,"dmg":525754,"bossDmg":0,"heal":11766,"deaths":4,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_23_a",1,null,0,0,6,1,36052,2179,0,57,2], - ["p1",2,"op","chess_char_4_01_b",1,"none",4593.08,1,9,1,5749,397,0,62,1], - ["p1",3,"op","chess_char_4_19_a",1,null,0,0,59,0,1924,5063,0,43,3], - ["p1",4,"op","chess_char_4_22_a",1,null,2022,1,7,0,203,707,18,6,1], - ["p1",5,"op","chess_char_4_04_b",2,"uniequip_002_ines",0,0,52,4,69846,16432,0,119,2], + ["p1",1,"op","chess_char_4_23_a",1,null,2179,1,65,2,22185,2179,0,43,2], + ["p1",2,"op","chess_char_4_01_b",1,"none",4829.79,1,9,0,4678,161,0,56,1], + ["p1",3,"op","chess_char_4_19_a",1,null,279.88,1,58,0,2312,4737,0,50,4], + ["p1",4,"op","chess_char_4_22_a",1,null,2022,1,7,0,290,24,0,9,1], + ["p1",5,"op","chess_char_4_04_b",2,"uniequip_002_ines",2149,1,64,5,80714,13555,0,98,3], ["p1",6,"op","chess_char_4_07_b",2,"none",2233,1,8,0,0,0,0,0,0], - ["p1",7,"op","chess_char_4_09_b",2,"uniequip_004_mizuki",1756,1,12,24,295735,1193,0,52,2], - ["p1",8,"op","chess_char_4_20_a",1,null,1217,1,2,2,20266,0,0,81,3], - ["p1",9,"op","chess_char_4_24_a",2,null,1726,1,3,11,64854,0,0,25,4], - ["p1",10,"op","chess_char_4_25_a",1,null,1221,1,4,0,3366,0,0,0,3], + ["p1",7,"op","chess_char_4_09_b",2,"uniequip_004_mizuki",1756,1,12,24,294418,588,0,52,2], + ["p1",8,"op","chess_char_4_20_a",1,null,1217,1,2,2,21189,0,0,81,3], + ["p1",9,"op","chess_char_4_24_a",2,null,1726,1,3,9,70217,0,0,25,4], + ["p1",10,"op","chess_char_4_25_a",1,null,1221,1,4,2,1692,0,0,0,3], ["p1",11,"op","chess_char_4_02_b",1,"none",2966.25,1,1,0,0,0,0,0,0], - ["p1",12,"op","chess_char_4_12_b",1,"none",4562.3,1,5,3,28023,0,0,72,4], - ["p1","~1","token","char_613_acmedc",null,null,1314,1,13,0,0,0,15959,19,2] + ["p1",12,"op","chess_char_4_12_b",1,"none",4562.3,1,5,2,28059,0,0,70,4], + ["p1","~1","token","char_613_acmedc",null,null,1314,1,13,0,0,0,11766,16,2] ], "enemies": { - "enemy_1001_bigbo": [1,1,0,2198,17600], + "enemy_1001_bigbo": [1,1,0,2105,17600], "enemy_10097_crshd": [1,1,0,0,8000], "enemy_1045_hammer": [1,1,0,864,8000], - "enemy_1045_hammer_2": [6,5,0,16620,92229], - "enemy_1061_zomshd": [33,33,0,4296,371379], + "enemy_1045_hammer_2": [6,5,0,14153,94451], + "enemy_1061_zomshd": [33,33,0,2349,368893], "enemy_1166_dusbr": [1,1,0,0,2400], "enemy_1204_msfhu_2": [1,1,0,0,5], "enemy_1288_duskls_2": [1,1,0,0,4805], - "enemy_1427_lrnazg": [1,1,0,649,12000], - "enemy_2010_csdcr": [1,1,0,1080,9600] + "enemy_1427_lrnazg": [1,1,0,709,12000], + "enemy_2010_csdcr": [1,1,0,800,9600] }, - "hooks": [1,63,5700,638,638,1045,1040,16158,51,52,27,24,45,26424,83,49,47,0,1,52,0,0,11], - "events": {"atk":949,"bounty":4,"deploy":16,"die":52,"dmg":1003,"engage":9,"fx":178,"heal":36,"skill":51,"spawn":60,"status":342}, - "fx": {"aoe":3,"beam":2,"devour":4,"displace":53,"dodge":11,"ember":1,"garrisonGrant":1,"link":3,"mote":56,"overload":3,"reweave":3,"riposte":5,"ripple":2,"sentry":4,"shadowWeave":18,"shield":3,"snow":1,"summon":1,"wake":4}, - "snaps": "903d6a08 54ed0b39 a5926312 e06609d8 d934b95c f7f55901 ea89d0e0 89193a86 d2705c22 d4e888ca 3ac948ff 97bcf3d4 3390f555 7b4ec718 55959646 3dc3ef0b 4446f6f0 e98ede33 e9343e0a" + "hooks": [1,65,5700,585,585,978,969,15770,50,51,29,24,45,27263,88,50,47,0,1,51,0,0,15], + "events": {"atk":868,"bounty":4,"deploy":18,"die":51,"dmg":934,"engage":9,"fx":189,"heal":26,"skill":53,"spawn":60,"status":364}, + "fx": {"aoe":4,"beam":3,"devour":4,"displace":50,"dodge":15,"ember":1,"garrisonGrant":1,"link":3,"mote":55,"overload":3,"reweave":3,"riposte":9,"ripple":2,"sentry":4,"shadowWeave":24,"shield":2,"snow":1,"summon":1,"wake":4}, + "snaps": "16582b38 4b611f79 fc5f370d f37bce54 1013d4bf 82eb8ef8 703acf6a e8ce017e 7c4c601e e9aefda5 e699abc5 e2bc82ea 81a451c8 6f0f0d96 4754f9f5 2e1c5ee0 077777be a3327f6b 1ba4aea7" }, "roster-042": { "about": "pass 2 band 5: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_5_01_a chess_char_4_16_b chess_char_4_13_b chess_char_4_20_b chess_char_4_24_b chess_char_4_25_b chess_char_5_02_a", @@ -2595,14 +2582,14 @@ ["p1",2,"op","chess_char_4_18_b",2,"none",6783,1,5,0,0,0,0,0,0], ["p1",3,"op","chess_char_4_23_b",1,"uniequip_004_gvial2",3667.3,1,7,1,14104,123,123,6,1], ["p1",4,"op","chess_char_4_19_b",1,"none",2525.9,1,10,0,23540,1439,0,5,4], - ["p1",5,"op","chess_char_4_22_b",1,"uniequip_002_svrash",3339.7,1,11,3,38288,7309,4592,48,1], + ["p1",5,"op","chess_char_4_22_b",1,"uniequip_002_svrash",3339.7,1,11,3,38288,7309,4512,48,1], ["p1",6,"op","chess_char_5_01_a",2,null,0,0,56,4,51648,11544,3873,52,1], ["p1",7,"op","chess_char_4_16_b",1,"none",658.3,1,73,14,149695,5766,656,115,6], ["p1",8,"op","chess_char_4_13_b",2,"uniequip_004_gnosis",2553.2,1,8,5,33793,0,0,42,3], ["p1",9,"op","chess_char_4_20_b",1,"none",1844.7,1,9,15,99818,998,0,47,2], ["p1",10,"op","chess_char_4_24_b",2,"none",2571.4,1,12,8,161836,6702,551,45,4], ["p1",11,"op","chess_char_4_25_b",1,"uniequip_002_cetsyr",2172.3,1,4,2,15745,0,0,0,3], - ["p1",12,"op","chess_char_5_02_a",1,null,1570.4,1,6,7,117674,633,11937,24,4], + ["p1",12,"op","chess_char_5_02_a",1,null,1570.4,1,6,7,117674,633,12017,24,4], ["-","~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] ], @@ -2619,10 +2606,10 @@ "enemy_1512_mcmstr": [1,1,0,5348,92160], "enemy_9008_acbunn": [1,1,0,1028,13824] }, - "hooks": [1,77,4804,498,498,1222,1233,1563,67,64,29,26,3,16171,1879,43,59,0,1,70,50,0,6], - "events": {"atk":610,"bounty":4,"deploy":16,"die":64,"dmg":1050,"engage":9,"fx":182,"heal":131,"layer":50,"skill":55,"spawn":73,"status":288}, - "fx": {"aoe":4,"bombard":5,"bombardShell":5,"coldWind":3,"devour":4,"displace":1,"dodge":6,"explode":22,"extraAttack":9,"garrison":26,"garrisonGrant":1,"iceSpike":3,"link":2,"mote":33,"overload":1,"revive":1,"reweave":3,"shieldBreak":1,"sleepGuard":4,"snow":1,"swordStorm":6,"telegraph":2,"zone":39}, - "snaps": "6e6cd551 0a57f9de 2e71cf0f 17a84a1d 76ac0e19 3bc65f34 335a0eba 3d3be75c 70af313e 8ab9d9eb e18092b4 f3302e53 c52c8f3b e39fbb70 b6a62e34 fbd754d1" + "hooks": [1,77,4804,498,498,1222,1233,1545,67,64,29,26,3,16171,1879,43,59,0,1,70,50,0,6], + "events": {"atk":610,"bounty":4,"deploy":16,"die":64,"dmg":1050,"engage":9,"fx":183,"heal":130,"layer":50,"skill":55,"spawn":73,"status":288}, + "fx": {"aoe":4,"bombard":5,"bombardShell":5,"coldWind":3,"devour":4,"displace":2,"dodge":6,"explode":22,"extraAttack":9,"garrison":26,"garrisonGrant":1,"iceSpike":3,"link":2,"mote":33,"overload":1,"revive":1,"reweave":3,"shieldBreak":1,"sleepGuard":4,"snow":1,"swordStorm":6,"telegraph":2,"zone":39}, + "snaps": "6e6cd551 0a57f9de 2e71cf0f 17a84a1d 887baea6 9fc899ab a5269265 a2a687a7 955e2c69 049afe28 5bec820f 9c5b8568 a8342098 53ef11cf 353e98b3 40d8183e" }, "roster-043": { "about": "pass 2 band 5: chess_char_5_08_a chess_char_5_11_a chess_char_5_05_a chess_char_5_06_a chess_char_5_13_a chess_char_5_14_a chess_char_5_07_a chess_char_5_17_a chess_char_5_03_a chess_char_5_10_a chess_char_5_12_a chess_char_5_15_a", @@ -2633,51 +2620,51 @@ "round": 10, "seed": 955578768, "waveId": "act1autochess_h03", - "time": 168.63, - "ticks": 5059, + "time": 172.3, + "ticks": 5169, "reason": "cleared", "killed": 55, "total": 64, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 197, + "rngDraws": 246, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":55,"total":64,"perfect":false,"leaks":9,"leaksUncounted":0,"coins":4,"dmg":917471,"bossDmg":0,"heal":25613,"deaths":15,"layerGains":{"indomShip":45}} + "p1": {"killed":55,"total":64,"perfect":false,"leaks":9,"leaksUncounted":0,"coins":4,"dmg":924251,"bossDmg":0,"heal":24122,"deaths":14,"layerGains":{"indomShip":45}} }, "units": [ - ["p1",1,"op","chess_char_5_08_a",1,null,0,0,76,7,99459,8527,2199,31,2], - ["p1",2,"op","chess_char_5_11_a",2,null,3618.8,1,92,0,8448,13778,1010,17,2], - ["p1",3,"op","chess_char_5_05_a",1,null,6232.41,1,78,6,86944,41233,12040,33,0], - ["p1",4,"op","chess_char_5_06_a",1,null,3013,1,74,5,89954,8914,3898,15,3], - ["p1",5,"op","chess_char_5_13_a",2,null,1521.62,1,37,7,121611,17521,0,34,1], + ["p1",1,"op","chess_char_5_08_a",1,null,0,0,4,6,95289,4902,1100,28,2], + ["p1",2,"op","chess_char_5_11_a",2,null,3618.8,1,90,0,8448,14018,1991,17,2], + ["p1",3,"op","chess_char_5_05_a",1,null,6209.3,1,65,4,73753,34284,10490,30,0], + ["p1",4,"op","chess_char_5_06_a",1,null,2863,1,75,5,96401,9833,4076,12,3], + ["p1",5,"op","chess_char_5_13_a",2,null,1546.02,1,37,9,101933,14783,0,38,1], ["p1",6,"op","chess_char_5_14_a",2,null,1732,1,7,5,43541,7604,3392,63,1], - ["p1",7,"op","chess_char_5_07_a",1,null,2216,1,84,0,2357,3215,0,3,0], - ["p1",8,"op","chess_char_5_17_a",2,null,1545.08,1,90,2,65729,7205,0,68,2], - ["p1",9,"op","chess_char_5_03_a",1,null,1206,1,6,6,135747,6373,3073,42,3], - ["p1",10,"op","chess_char_5_10_a",1,null,1162.34,1,65,5,28706,4356,0,56,1], - ["p1",11,"op","chess_char_5_12_a",2,null,694,1,67,3,95716,10214,0,35,1], - ["p1",12,"op","chess_char_5_15_a",2,null,926,1,58,9,139259,4584,0,80,1], + ["p1",7,"op","chess_char_5_07_a",1,null,2216,1,83,0,2357,3215,0,3,0], + ["p1",8,"op","chess_char_5_17_a",2,null,0,0,64,3,132702,9300,0,80,2], + ["p1",9,"op","chess_char_5_03_a",1,null,1206,1,6,6,131191,6253,3073,39,3], + ["p1",10,"op","chess_char_5_10_a",1,null,1162.34,1,66,3,27494,3656,0,52,1], + ["p1",11,"op","chess_char_5_12_a",2,null,698.68,1,68,4,90952,11059,0,36,1], + ["p1",12,"op","chess_char_5_15_a",2,null,926,1,58,10,120189,4993,0,83,2], ["-","~1","device","trap_1105_accrate",null,null,100,0,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_10084_hlegle": [1,0,1,13362,5751], + "enemy_10084_hlegle": [1,0,1,12642,5751], "enemy_1041_lazerd": [1,0,1,3650,3309], "enemy_1161_tidmag_2": [1,1,0,5338,13271], "enemy_1202_msfzhi_2": [1,1,0,0,7], - "enemy_1267_nhpbr_2": [33,32,1,31390,294340], - "enemy_1270_nhstlk_2": [12,12,0,38343,318505], + "enemy_1267_nhpbr_2": [33,32,1,31192,294340], + "enemy_1270_nhstlk_2": [12,12,0,33455,318505], "enemy_1275_dwlock_2": [1,1,0,5427,23224], "enemy_1422_lrsldr": [1,1,0,0,7797], "enemy_2004_balloon": [1,0,1,164,19473], - "enemy_9006_actoxi": [12,7,5,19200,231793] + "enemy_9006_actoxi": [12,7,5,15843,238573] }, - "hooks": [1,94,5059,727,727,2318,2424,4400,70,81,17,11,18,29643,777,65,64,9,1,97,9,7,1], - "events": {"atk":817,"bounty":2,"deploy":27,"die":72,"dmg":2397,"engage":12,"fx":126,"heal":1145,"layer":9,"leak":9,"skill":28,"spawn":79,"status":466}, - "fx": {"aoe":6,"beam":1,"bloodBattle":2,"burst":7,"crit":17,"displace":10,"dodge":1,"dollEnd":1,"downed":2,"ember":1,"explode":1,"garrison":9,"meltdown":4,"overload":2,"reborn":1,"revive":8,"steal":2,"substitute":5,"swap":3,"telegraph":2,"zone":41}, - "snaps": "1683cbba c8489b09 157c0969 ce05ea97 58c14c23 9cb16f9e 18492dac 031d7b31 f419a567 3c35057c faf50a85 24f7f8ea afc61728 13e61918 b78203c7 89b7950a b46e858a" + "hooks": [1,92,5169,715,715,2291,2389,4393,69,80,18,14,18,29847,766,70,64,9,1,95,9,7,2], + "events": {"atk":816,"bounty":2,"deploy":25,"die":71,"dmg":2370,"engage":12,"fx":159,"heal":1157,"layer":9,"leak":9,"skill":32,"spawn":79,"status":457}, + "fx": {"aoe":6,"beam":1,"bloodBattle":1,"burst":7,"crit":23,"displace":35,"dodge":2,"dollEnd":1,"downed":2,"ember":1,"explode":1,"garrison":9,"meltdown":4,"overload":2,"reborn":1,"revive":7,"steal":2,"substitute":5,"swap":3,"telegraph":2,"zone":44}, + "snaps": "1683cbba c8489b09 157c0969 ce05ea97 58c14c23 9cb16f9e 18492dac 031d7b31 46a621ac f5de529b cee8a24f b70e4e74 39a90c54 b7a8e753 72f0deab a2ac15f9 ac8909ef f6c5d065" }, "roster-044": { "about": "pass 2 band 6: chess_char_5_19_a chess_char_5_11_b chess_char_5_19_b chess_char_5_13_b chess_char_5_14_b chess_char_5_17_b chess_char_5_20_a chess_char_5_22_a chess_char_5_12_b chess_char_5_15_b chess_char_5_20_b chess_char_5_22_b", @@ -2688,67 +2675,70 @@ "round": 12, "seed": 2595819878, "waveId": "act1autochess_h05", - "time": 225.23, - "ticks": 6757, + "time": 221, + "ticks": 6630, "reason": "cleared", - "killed": 107, + "killed": 103, "total": 119, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 104, + "rngDraws": 113, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":107,"total":119,"perfect":false,"leaks":12,"leaksUncounted":0,"coins":8,"dmg":3438971,"bossDmg":0,"heal":34802,"deaths":15,"layerGains":{}}}, + "players": {"p1":{"killed":103,"total":119,"perfect":false,"leaks":16,"leaksUncounted":0,"coins":8,"dmg":3407531,"bossDmg":0,"heal":38331,"deaths":14,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_19_a",1,null,3241,1,163,4,41252,10539,1203,43,4], - ["p1",2,"op","chess_char_5_11_b",2,"none",0,0,133,2,7843,18562,20456,30,3], - ["p1",3,"op","chess_char_5_19_b",1,"uniequip_002_mlynar",3907,1,151,1,75581,8142,328,25,4], - ["p1",4,"op","chess_char_5_13_b",2,"uniequip_004_ghost2",3498.12,1,9,2,115644,21203,878,29,2], - ["p1",5,"op","chess_char_5_14_b",2,"none",1747.41,1,141,16,270463,16523,7240,133,4], - ["p1",6,"op","chess_char_5_17_b",2,"none",2578,1,165,1,161842,15590,530,49,5], - ["p1",7,"op","chess_char_5_20_a",1,null,1108,1,3,2,42826,1688,403,344,4], - ["p1",8,"op","chess_char_5_22_a",2,null,1237,1,4,9,159503,5774,1590,154,3], - ["p1",9,"op","chess_char_5_12_b",2,"uniequip_004_dusk",1667,1,13,7,404614,0,0,64,2], - ["p1",10,"op","chess_char_5_15_b",2,"uniequip_002_thorn2",1170,1,14,48,1651638,0,0,174,6], - ["p1",11,"op","chess_char_5_20_b",1,"uniequip_004_aglina",1292,1,5,6,117395,1688,403,413,5], - ["p1",12,"op","chess_char_5_22_b",2,"none",1511,1,11,8,377360,1913,433,190,4], + ["p1",1,"op","chess_char_5_19_a",1,null,302.39,1,134,2,39813,13079,977,48,4], + ["p1",2,"op","chess_char_5_11_b",2,"none",3380.99,1,145,1,6275,17755,26578,36,3], + ["p1",3,"op","chess_char_5_19_b",1,"uniequip_002_mlynar",3907,1,106,2,91122,8834,1078,31,3], + ["p1",4,"op","chess_char_5_13_b",2,"uniequip_004_ghost2",3498.12,1,9,3,116180,10709,88,21,1], + ["p1",5,"op","chess_char_5_14_b",2,"none",0,0,142,16,280983,15962,4857,103,4], + ["p1",6,"op","chess_char_5_17_b",2,"none",2578,1,167,3,205432,15613,897,58,5], + ["p1",7,"op","chess_char_5_20_a",1,null,1108,1,3,1,39942,1688,424,345,5], + ["p1",8,"op","chess_char_5_22_a",2,null,1237,1,4,7,158291,5774,1373,152,3], + ["p1",9,"op","chess_char_5_12_b",2,"uniequip_004_dusk",1667,1,13,8,458856,0,0,64,2], + ["p1",10,"op","chess_char_5_15_b",2,"uniequip_002_thorn2",1170,1,14,40,1523335,0,0,172,6], + ["p1",11,"op","chess_char_5_20_b",1,"uniequip_004_aglina",1292,1,5,6,115270,1688,424,426,5], + ["p1",12,"op","chess_char_5_22_b",2,"none",1511,1,11,13,357628,1913,469,184,4], ["-","~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_10015_dusk_drgn",null,null,0,0,31,0,478,2050,53,2,null], - ["p1","~2","token","token_10015_dusk_drgn",null,null,0,0,34,0,1015,2130,133,4,null], - ["p1","~3","token","token_10015_dusk_drgn",null,null,0,0,41,0,663,2067,70,3,null], - ["p1","~4","token","token_10015_dusk_drgn",null,null,0,0,49,0,271,2000,3,1,null], - ["p1","~5","token","token_10015_dusk_drgn",null,null,0,0,52,0,601,2067,70,3,null], - ["p1","~6","token","token_10015_dusk_drgn",null,null,0,0,57,0,1289,2092,95,5,null], - ["p1","~7","token","token_10015_dusk_drgn",null,null,0,0,62,0,836,1997,0,4,null], - ["p1","~8","token","token_10015_dusk_drgn",null,null,0,0,68,1,286,1997,0,2,null], - ["p1","~9","token","token_10015_dusk_drgn",null,null,0,0,74,0,1154,2089,92,5,null], - ["p1","~10","token","token_10015_dusk_drgn",null,null,0,0,82,0,1076,2115,118,4,null], - ["p1","~11","token","token_10015_dusk_drgn",null,null,0,0,139,0,199,2000,3,1,null], - ["p1","~12","token","token_10015_dusk_drgn",null,null,0,0,143,0,823,2067,70,3,null], - ["p1","~13","token","token_10015_dusk_drgn",null,null,0,0,147,0,1233,1997,0,4,null], - ["p1","~14","token","token_10015_dusk_drgn",null,null,0,0,152,0,404,1997,0,1,null], - ["p1","~15","token","token_10015_dusk_drgn",null,null,0,0,154,0,557,1997,0,2,null], - ["p1","~16","token","token_10015_dusk_drgn",null,null,0,0,158,0,613,1997,0,2,null], - ["p1","~17","token","token_10015_dusk_drgn",null,null,0,0,162,0,716,2045,48,3,null], - ["p1","~18","token","token_10015_dusk_drgn",null,null,576.81,0,164,0,796,1999,578,4,null] + ["p1","~1","token","token_10015_dusk_drgn",null,null,0,0,31,0,637,2060,63,3,null], + ["p1","~2","token","token_10015_dusk_drgn",null,null,0,0,36,0,1114,2130,133,4,null], + ["p1","~3","token","token_10015_dusk_drgn",null,null,0,0,43,0,785,2044,47,3,null], + ["p1","~4","token","token_10015_dusk_drgn",null,null,0,0,51,0,728,2064,67,3,null], + ["p1","~5","token","token_10015_dusk_drgn",null,null,0,0,56,0,1114,2050,53,5,null], + ["p1","~6","token","token_10015_dusk_drgn",null,null,0,0,61,0,398,1997,0,2,null], + ["p1","~7","token","token_10015_dusk_drgn",null,null,0,0,65,1,613,1997,0,3,null], + ["p1","~8","token","token_10015_dusk_drgn",null,null,0,0,71,0,955,2030,33,4,null], + ["p1","~9","token","token_10015_dusk_drgn",null,null,0,0,80,0,1862,2225,228,7,null], + ["p1","~10","token","token_10015_dusk_drgn",null,null,0,0,126,0,239,1997,0,1,null], + ["p1","~11","token","token_10015_dusk_drgn",null,null,0,0,129,0,876,2124,127,4,null], + ["p1","~12","token","token_10015_dusk_drgn",null,null,0,0,136,0,597,2064,67,3,null], + ["p1","~13","token","token_10015_dusk_drgn",null,null,0,0,144,0,199,2000,3,1,null], + ["p1","~14","token","token_10015_dusk_drgn",null,null,0,0,147,0,279,2002,5,1,null], + ["p1","~15","token","token_10015_dusk_drgn",null,null,0,0,149,0,249,2000,3,1,null], + ["p1","~16","token","token_10015_dusk_drgn",null,null,0,0,152,0,1214,2145,148,5,null], + ["p1","~17","token","token_10015_dusk_drgn",null,null,0,0,156,0,199,1997,0,1,null], + ["p1","~18","token","token_10015_dusk_drgn",null,null,0,0,158,0,557,1997,0,2,null], + ["p1","~19","token","token_10015_dusk_drgn",null,null,0,0,162,0,597,2052,55,3,null], + ["p1","~20","token","token_10015_dusk_drgn",null,null,0,0,165,0,796,2100,103,4,null], + ["p1","~21","token","token_10015_dusk_drgn",null,null,1423.84,0,166,0,398,601,28,2,null] ], "enemies": { - "enemy_10042_prtrop_2": [1,1,0,1732,23888], - "enemy_1010_demon": [42,41,1,25172,934856], + "enemy_10042_prtrop_2": [1,1,0,0,23888], + "enemy_1010_demon": [42,39,3,25517,920815], "enemy_10122_uacann_2": [1,1,0,20029,29860], "enemy_1072_dlancer": [1,1,0,0,17916], - "enemy_1172_dugago_2": [1,0,1,3395,22864], + "enemy_1172_dugago_2": [1,0,1,1027,10552], "enemy_1229_darmy": [1,1,0,0,12541], "enemy_1325_cbgpro": [1,1,0,0,11347], - "enemy_1422_lrsldr_2": [45,45,0,6900,739031], - "enemy_1425_lrcmra_2": [24,15,9,78414,1570549], - "enemy_1502_crowns": [1,1,0,27,17916], - "enemy_2085_skzjxd": [1,0,1,0,90313] + "enemy_1422_lrsldr_2": [45,43,2,8292,728181], + "enemy_1425_lrcmra_2": [24,15,9,78862,1542786], + "enemy_1502_crowns": [1,1,0,0,17916], + "enemy_2085_skzjxd": [1,0,1,0,127789] }, - "hooks": [1,165,6757,1862,1862,4721,4732,7233,139,152,46,44,0,27340,2790,132,119,12,1,143,0,0,0], - "events": {"atk":2250,"bounty":4,"deploy":44,"die":140,"dmg":4732,"engage":30,"fx":133,"heal":145,"leak":12,"skill":90,"spawn":151,"status":809}, - "fx": {"crit":21,"displace":37,"explode":5,"sp":10,"substitute":4,"summon":18,"swap":3,"teleport":12,"zone":23}, - "snaps": "390205c8 64b194ac 764c64e9 d08a179a c89dbbb8 58483a89 f0c4a3aa 2207231c cf1dfe92 820e711a bce8df8c 1b39a7ec 38d0f91d 0af170df ac801290 043f1d7e 1c2d9bab 89a33e74 e7dbf207 64456a14 90e05b01 6bbea8ea ecea2b80" + "hooks": [1,167,6630,1856,1856,4937,4941,6598,137,154,45,43,0,27109,3367,143,119,16,1,140,0,0,0], + "events": {"atk":2300,"bounty":4,"deploy":46,"die":138,"dmg":4941,"engage":33,"fx":155,"heal":170,"leak":16,"skill":88,"spawn":154,"status":788}, + "fx": {"crit":28,"displace":48,"explode":5,"sp":11,"substitute":3,"summon":21,"swap":3,"teleport":13,"zone":23}, + "snaps": "390205c8 83144cc8 bbf1f4aa 5e26fd44 e650b42d bc99a847 154d5aaf 9284ad8e 7094d37f 9be2c896 4dcdb9de 30207c7b 4294ea35 fc2622c7 5269b707 ec3b358a 8cc1ea8c 12f29b80 3a82d9d8 25f0ac02 5854dabc 9205e4b4 ef9f876b" }, "roster-045": { "about": "pass 2 band 6: chess_char_6_03_a chess_char_6_06_a chess_char_6_07_a chess_char_6_01_a chess_char_6_02_a chess_char_6_04_a chess_char_6_05_a chess_char_6_08_a chess_char_6_09_a chess_char_6_11_a chess_char_6_12_a chess_char_6_13_a token_10017_skadi2_dedant", @@ -2843,7 +2833,7 @@ "rngDraws": 73, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":2,"total":134,"perfect":false,"leaks":132,"leaksUncounted":0,"coins":2,"dmg":296933,"bossDmg":0,"heal":7131,"deaths":25,"layerGains":{"swiftShip":8}} + "p1": {"killed":2,"total":134,"perfect":false,"leaks":132,"leaksUncounted":0,"coins":2,"dmg":296951,"bossDmg":0,"heal":7131,"deaths":25,"layerGains":{"swiftShip":8}} }, "units": [ ["p1",1,"op","chess_char_6_03_b",1,"uniequip_002_yu",0,0,3,1,25387,9467,957,5,1], @@ -2851,7 +2841,7 @@ ["p1",3,"op","chess_char_6_19_a",1,null,0,0,4,0,12406,2168,0,11,0], ["p1",4,"op","chess_char_6_17_a",1,null,2698,1,168,0,46350,8769,0,19,5], ["p1",5,"op","chess_char_6_14_a",1,null,0,0,64,0,0,4002,1296,3,0], - ["p1",6,"op","chess_char_6_16_a",1,null,1992.43,1,164,0,8647,9044,1220,14,2], + ["p1",6,"op","chess_char_6_16_a",1,null,1992.43,1,164,0,8665,9044,1220,14,2], ["p1",7,"op","chess_char_6_18_a",1,null,0,0,108,1,21917,2284,0,11,1], ["p1",8,"op","chess_char_6_20_a",1,null,0,0,158,0,0,8319,3122,7,0], ["p1",9,"op","chess_char_6_01_b",1,"uniequip_002_lemuen",0,0,10,0,18194,1765,258,8,1], @@ -2869,15 +2859,15 @@ "enemy_1062_rager_2": [1,0,1,3918,34676], "enemy_1169_duphlx_2": [1,0,1,186,7664], "enemy_1209_sfden": [1,0,1,0,0], - "enemy_1267_nhpbr_2": [87,1,86,4631,186748], + "enemy_1267_nhpbr_2": [87,1,86,4631,186765], "enemy_1305_mhslim": [1,0,1,0,0], "enemy_1439_dslntf": [1,0,1,397,0], "enemy_2034_sythef_2": [1,0,1,0,0] }, - "hooks": [1,167,6632,244,244,541,551,1258,27,163,11,10,5,4610,454,16,134,132,1,28,1,1,0], - "events": {"atk":342,"bounty":1,"deploy":33,"die":31,"dmg":542,"engage":8,"fx":174,"heal":22,"layer":1,"leak":132,"skill":21,"spawn":149,"status":450}, + "hooks": [1,167,6632,244,244,541,551,1258,27,163,11,10,5,4610,465,16,134,132,1,28,1,1,0], + "events": {"atk":342,"bounty":1,"deploy":33,"die":31,"dmg":542,"engage":8,"fx":174,"heal":22,"layer":1,"leak":132,"skill":21,"spawn":149,"status":452}, "fx": {"blessing":1,"blink":2,"burst":1,"camouflage":2,"displace":3,"explode":72,"garrison":1,"garrisonGrant":2,"link":3,"snow":7,"sunBurst":3,"talent":3,"telegraph":2,"zone":72}, - "snaps": "7cdf7066 e20e2d49 aa5de392 916cd872 c09dc5a0 b4090036 29b6982d d55f5160 43009c41 4fef8e7b a9dbc902 7acd38c1 056dab18 67d8ba30 d739a230 ff7fc2e4 6846e710 c2736812 c6e00652 6f33d1e1 fc0a02d4 c1fbd451 6ecf057b" + "snaps": "7cdf7066 e20e2d49 aa5de392 916cd872 c09dc5a0 b4090036 29b6982d d55f5160 43009c41 4fef8e7b a9dbc902 7acd38c1 056dab18 67d8ba30 d739a230 ff7fc2e4 6846e710 c2736812 c6e00652 5c1492c6 619c8b94 b34171fa e4a3e774" }, "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", diff --git a/test/golden/standins.json b/test/golden/standins.json index 6e3f6062..3903cc48 100644 --- a/test/golden/standins.json +++ b/test/golden/standins.json @@ -142,20 +142,20 @@ "total": 74, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 278, + "rngDraws": 270, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":41,"total":74,"perfect":false,"leaks":33,"leaksUncounted":0,"coins":8,"dmg":322054,"bossDmg":0,"heal":40884,"deaths":10,"layerGains":{}}}, + "players": {"p1":{"killed":41,"total":74,"perfect":false,"leaks":33,"leaksUncounted":0,"coins":8,"dmg":320925,"bossDmg":0,"heal":42417,"deaths":10,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_5_08_a",2,null,2206.8,1,91,0,5895,3841,0,57,1], - ["p1",2,"op","chess_char_5_14_a",2,null,0,0,90,23,138688,7595,0,63,6], - ["p1",3,"op","chess_char_5_19_a",0,null,349.6,1,89,6,47622,15311,0,100,3], + ["p1",2,"op","chess_char_5_14_a",2,null,353,1,90,24,145090,7662,0,66,6], + ["p1",3,"op","chess_char_5_19_a",0,null,784.8,1,89,6,42209,15296,0,99,3], ["p1",4,"op","chess_char_5_07_a",2,null,2564,1,92,0,12112,3824,0,24,1], - ["p1",5,"op","chess_char_5_13_a",2,null,1801,1,11,7,56384,10325,0,123,4], - ["p1",6,"op","chess_char_5_17_a",2,null,20,1,81,1,7284,4998,0,77,0], - ["p1",7,"op","chess_char_5_10_a",2,null,932,1,2,1,7776,0,0,58,2], - ["p1",8,"op","chess_char_5_11_a",2,null,1224,1,3,0,0,0,40884,67,2], - ["p1",9,"op","chess_char_5_12_a",2,null,1160,1,4,0,19936,0,0,79,2], - ["p1",10,"op","chess_char_5_15_a",2,null,0,0,84,2,8336,14152,0,96,2], + ["p1",5,"op","chess_char_5_13_a",2,null,1520,1,11,6,55817,10325,0,121,4], + ["p1",6,"op","chess_char_5_17_a",2,null,0,0,81,1,5190,6413,0,69,0], + ["p1",7,"op","chess_char_5_10_a",2,null,932,1,2,1,9099,0,0,69,2], + ["p1",8,"op","chess_char_5_11_a",2,null,1224,1,3,0,0,0,42417,68,2], + ["p1",9,"op","chess_char_5_12_a",2,null,1160,1,4,0,19147,0,0,75,2], + ["p1",10,"op","chess_char_5_15_a",2,null,0,0,84,2,8346,13732,0,96,2], ["p1",11,"op","chess_char_5_18_a",2,null,0,0,1,1,11149,1272,0,22,1], ["p1",12,"op","chess_char_5_20_a",2,null,0,0,5,0,6872,1972,0,38,2] ], @@ -168,14 +168,14 @@ "enemy_10087_hlchgr": [1,1,0,38,4800], "enemy_10094_crstf": [1,1,0,28,3200], "enemy_10097_crshd": [1,1,0,0,8000], - "enemy_1166_dusbr_2": [42,28,14,2956,110452], - "enemy_1170_dushld_2": [12,5,6,26204,45033], - "enemy_9011_acrefr": [12,1,7,22144,124041] + "enemy_1166_dusbr_2": [42,27,15,2888,108284], + "enemy_1170_dushld_2": [12,6,5,31043,51138], + "enemy_9011_acrefr": [12,1,8,18420,118976] }, - "hooks": [1,92,5700,1025,1025,1522,1523,112,51,79,26,26,0,27108,3400,51,74,28,1,52,0,0,10], - "events": {"atk":1128,"bounty":4,"deploy":18,"die":51,"dmg":1522,"engage":11,"fx":134,"heal":106,"leak":28,"skill":55,"spawn":86,"status":609}, - "fx": {"aoe":30,"displace":1,"dodge":16,"dp":29,"phase":1,"slash":48,"sp":1,"spGain":8}, - "snaps": "530ce9ab 3259d8c0 918a3cff a85e2d90 3b23751a 8f259c98 9faf0458 b98e7e80 e64fb37d 38b17953 2458f514 b2894d2f 6c036845 609d268d 5a2493c6 23bae8dc e4a6485d 424e64d1 745ddf7a" + "hooks": [1,92,5700,1024,1024,1534,1535,115,51,80,26,27,0,27292,3473,49,74,29,1,52,0,0,10], + "events": {"atk":1125,"bounty":4,"deploy":18,"die":51,"dmg":1534,"engage":11,"fx":132,"heal":109,"leak":29,"skill":55,"spawn":86,"status":626}, + "fx": {"aoe":30,"displace":1,"dodge":13,"dp":30,"phase":1,"slash":48,"sp":1,"spGain":8}, + "snaps": "530ce9ab 3259d8c0 918a3cff a85e2d90 3b23751a 8f259c98 9faf0458 b98e7e80 e64fb37d 38b17953 2458f514 b2894d2f 6c036845 395d7cfe a9ead632 07893f6c 64586b5e 9402040c 55700def" }, "standin-04": { "about": "normal band 6 as stand-ins: chess_char_6_03_a→char_610_acfend chess_char_6_02_a→char_608_acpion chess_char_6_07_a→char_617_sharp2 chess_char_6_10_a→char_617_sharp2 chess_char_6_11_a→char_608_acpion chess_char_6_06_a→char_609_acguad chess_char_5_22_a→char_611_acnipe chess_char_6_01_a→char_611_acnipe chess_char_6_04_a→char_614_acsupo chess_char_6_05_a→char_611_acnipe chess_char_6_08_a→char_612_accast chess_char_6_09_a→char_613_acmedc", @@ -240,24 +240,24 @@ "round": 12, "seed": 4096833445, "waveId": "act1autochess_h05", - "time": 220.27, - "ticks": 6608, + "time": 216.03, + "ticks": 6481, "reason": "cleared", - "killed": 5, + "killed": 8, "total": 104, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 225, + "rngDraws": 234, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":5,"total":104,"perfect":false,"leaks":99,"leaksUncounted":0,"coins":0,"dmg":418583,"bossDmg":0,"heal":451,"deaths":23,"layerGains":{"raidShip":3}} + "p1": {"killed":8,"total":104,"perfect":false,"leaks":96,"leaksUncounted":0,"coins":0,"dmg":433423,"bossDmg":0,"heal":451,"deaths":22,"layerGains":{"raidShip":3}} }, "units": [ ["p1",1,"op","chess_char_6_17_a",2,null,0,0,130,1,102521,9556,0,46,1], - ["p1",2,"op","chess_char_6_13_a",2,null,0,0,135,0,25983,10386,0,85,0], - ["p1",3,"op","chess_char_6_19_a",2,null,1154,1,136,3,24753,9232,0,127,0], + ["p1",2,"op","chess_char_6_13_a",2,null,0,0,133,1,28392,9232,0,79,0], + ["p1",3,"op","chess_char_6_19_a",2,null,514.2,1,135,4,32421,9872,0,139,0], ["p1",4,"op","chess_char_6_12_a",2,null,671.78,1,7,0,141278,975,0,83,2], - ["p1",5,"op","chess_char_6_15_a",2,null,0,0,134,1,53745,4965,0,110,2], + ["p1",5,"op","chess_char_6_15_a",2,null,0,0,134,2,58508,4965,0,113,2], ["p1",6,"op","chess_char_6_18_a",2,null,1372,1,85,0,70303,1372,0,42,2], ["p1",7,"op","chess_char_6_20_a",2,null,1224,1,4,0,0,451,451,1,1], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], @@ -273,14 +273,14 @@ "enemy_10144_xdelk_2": [1,0,1,0,0], "enemy_10156_mncrer": [1,0,1,0,1476], "enemy_10159_mntrjn": [1,0,1,0,0], - "enemy_1381_winman": [27,4,23,2007,92343], - "enemy_1381_winman_2": [39,0,39,8923,168815], - "enemy_1387_winshd": [30,1,29,16725,136197] + "enemy_1381_winman": [27,6,21,3255,100648], + "enemy_1381_winman_2": [39,1,38,9029,175774], + "enemy_1387_winshd": [30,1,29,14859,135775] }, - "hooks": [1,136,6608,592,592,980,980,2,28,129,8,25,0,15091,2491,28,104,99,1,28,1,0,0], - "events": {"atk":623,"deploy":29,"die":30,"dmg":888,"engage":6,"fx":65,"heal":1,"layer":1,"leak":99,"skill":52,"spawn":114,"status":507}, - "fx": {"aoe":5,"blink":2,"camouflage":1,"displace":29,"dodge":1,"dp":2,"explode":7,"garrison":1,"garrisonGrant":2,"slash":8,"zone":7}, - "snaps": "7d1098cf a2545bc6 e235d106 8dfcbe4d 7418beb3 b07a14d3 d8595728 777b37c0 fcf9e593 4701b892 b3bb788e 48db2071 75eccfeb 54b87291 0c274801 025d0454 6e6490df e548bc32 a587ffae 097958c2 b5acd030 f192d5d8" + "hooks": [1,135,6481,604,604,990,990,2,30,128,8,24,0,14943,2502,30,104,96,1,30,1,0,0], + "events": {"atk":635,"deploy":28,"die":32,"dmg":897,"engage":6,"fx":55,"heal":1,"layer":1,"leak":96,"skill":50,"spawn":114,"status":500}, + "fx": {"aoe":5,"blink":2,"camouflage":1,"displace":18,"dodge":2,"dp":2,"explode":7,"garrison":1,"garrisonGrant":2,"slash":8,"zone":7}, + "snaps": "7d1098cf a2545bc6 e235d106 8dfcbe4d cbd66f3e d02eb500 28229c34 df0ed6a9 90a49dcf b9747bc6 d343d0fd 88a84b18 fa841456 6ea8596f afa61e73 45aa5112 7782a063 f7161b9b d3da53b7 1175003f aae5f017 59ce2b8b" }, "standin-06": { "about": "elite band 5 as stand-ins: chess_char_3_12_b→char_608_acpion chess_char_4_09_b→char_617_sharp2 chess_char_3_05_b→char_601_cguard chess_char_3_18_b→char_609_acguad chess_char_4_04_b→char_607_cspec chess_char_4_07_b→char_601_cguard chess_char_4_16_b→char_615_acspec chess_char_3_01_b→char_603_csnipe chess_char_3_04_b→char_605_cmedic chess_char_3_21_b→char_611_acnipe chess_char_4_02_b→char_611_acnipe chess_char_4_13_b→char_614_acsupo", @@ -411,28 +411,28 @@ "round": 12, "seed": 2456427706, "waveId": "act1autochess_h05", - "time": 226.63, - "ticks": 6799, + "time": 216.37, + "ticks": 6491, "reason": "cleared", - "killed": 42, + "killed": 44, "total": 179, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 981, + "rngDraws": 964, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":42,"total":179,"perfect":false,"leaks":137,"leaksUncounted":0,"coins":2,"dmg":1733157,"bossDmg":0,"heal":77968,"deaths":13,"layerGains":{}}}, + "players": {"p1":{"killed":44,"total":179,"perfect":false,"leaks":135,"leaksUncounted":0,"coins":2,"dmg":1792553,"bossDmg":0,"heal":75042,"deaths":12,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_acfend",3242.12,1,7,5,122124,8280,0,159,4], - ["p1",2,"op","chess_char_5_14_b",2,"uniequip_002_acpion",1904,1,201,14,520028,10508,0,46,6], - ["p1",3,"op","chess_char_5_19_b",0,"uniequip_002_sharp2",4154.5,1,207,5,264095,31935,0,79,3], - ["p1",4,"op","chess_char_5_07_b",2,"none",3334,1,205,2,42880,20656,0,36,3], - ["p1",5,"op","chess_char_5_13_b",2,"uniequip_002_acguad",3411,1,206,4,80947,12473,0,40,2], - ["p1",6,"op","chess_char_5_17_b",2,"uniequip_002_acspec",1448,1,188,4,90888,27092,0,116,0], - ["p1",7,"op","chess_char_5_10_b",2,"none",1131,1,4,2,64373,0,0,134,4], - ["p1",8,"op","chess_char_5_11_b",2,"uniequip_002_acmedc",2262.4,1,5,0,0,0,77968,77,3], - ["p1",9,"op","chess_char_5_12_b",2,"uniequip_002_acsupo",1430,1,11,3,105459,0,0,135,3], - ["p1",10,"op","chess_char_5_15_b",2,"none",1510,1,13,0,83399,0,0,215,4], - ["p1",11,"op","chess_char_5_18_b",2,"uniequip_002_acnipe",2380.5,1,6,3,266479,0,0,178,3], + ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_acfend",3328.04,1,7,6,120405,8494,0,163,4], + ["p1",2,"op","chess_char_5_14_b",2,"uniequip_002_acpion",1904,1,200,13,582727,10397,0,50,7], + ["p1",3,"op","chess_char_5_19_b",0,"uniequip_002_sharp2",0,0,164,5,264095,31935,0,79,3], + ["p1",4,"op","chess_char_5_07_b",2,"none",3334,1,204,2,41162,20656,0,35,3], + ["p1",5,"op","chess_char_5_13_b",2,"uniequip_002_acguad",0,0,130,4,91514,12473,0,48,2], + ["p1",6,"op","chess_char_5_17_b",2,"uniequip_002_acspec",1448,1,155,3,70659,22528,0,98,0], + ["p1",7,"op","chess_char_5_10_b",2,"none",1131,1,4,2,71806,0,0,146,4], + ["p1",8,"op","chess_char_5_11_b",2,"uniequip_002_acmedc",2262.4,1,5,0,0,0,75042,73,3], + ["p1",9,"op","chess_char_5_12_b",2,"uniequip_002_acsupo",1430,1,11,2,108370,0,0,138,3], + ["p1",10,"op","chess_char_5_15_b",2,"none",1510,1,13,0,84172,0,0,215,4], + ["p1",11,"op","chess_char_5_18_b",2,"uniequip_002_acnipe",2380.5,1,6,7,265158,0,0,156,3], ["p1",12,"op","chess_char_5_20_b",2,"uniequip_002_acsupo",1430,1,14,0,92485,0,0,125,3], ["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null], @@ -447,14 +447,14 @@ "enemy_1118_lidbox_2": [1,0,1,0,809], "enemy_1119_vofsd": [1,0,1,0,889], "enemy_1121_lifbos": [1,0,1,4806,7013], - "enemy_1249_lysdb_2": [60,18,42,37448,866144], - "enemy_1251_lysyta": [63,22,41,7583,520464], - "enemy_1254_lypa_2": [48,1,47,58748,262208] + "enemy_1249_lysdb_2": [60,20,40,34591,927986], + "enemy_1251_lysyta": [63,22,41,7408,522114], + "enemy_1254_lypa_2": [48,1,47,57320,258113] }, - "hooks": [1,207,6799,1790,1790,3161,3225,149,55,192,38,43,0,26658,17254,63,179,137,1,55,0,0,6], - "events": {"atk":2022,"bounty":1,"deploy":25,"die":55,"dmg":3200,"engage":11,"fx":302,"heal":133,"leak":137,"skill":88,"spawn":194,"status":1230}, - "fx": {"aoe":120,"displace":8,"dodge":31,"dp":20,"liberate":1,"phase":1,"shieldBreak":60,"slash":48,"sp":1,"spGain":12}, - "snaps": "c4ba1bfb fae78ec3 4853328f 674d8548 bcbe6142 1a53e0eb 214c2462 a608c08f 504eb3ba 4e0e6e68 d4d1daf8 a6dc8003 1ce13419 a363753a 07e954ca 3e70563d 7e686001 0f4877a6 ba4f9efe e6778a6d 6675e221 520b5fe5 4464a0d3" + "hooks": [1,204,6491,1773,1773,3184,3244,143,56,191,39,41,0,24792,17208,64,179,135,1,56,0,0,10], + "events": {"atk":2011,"bounty":1,"deploy":22,"die":56,"dmg":3226,"engage":11,"fx":311,"heal":124,"leak":135,"skill":86,"spawn":194,"status":1260}, + "fx": {"aoe":120,"displace":6,"dodge":33,"dp":20,"liberate":1,"phase":1,"shieldBreak":60,"slash":56,"sp":3,"spGain":11}, + "snaps": "c4ba1bfb fae78ec3 4853328f 674d8548 bcbe6142 1a53e0eb e36dd50a c1fffc0d 6b8ca6c2 ea59d397 fcda4d5a 0b327687 9c504162 f940765a ed653c1f 40083fa0 8b28d76e faf8fc30 827f9624 f00940c5 a4839ca3 7cbbb8ee" }, "standin-09": { "about": "elite band 7 as stand-ins: chess_char_6_03_b→char_610_acfend chess_char_6_02_b→char_608_acpion chess_char_6_07_b→char_617_sharp2 chess_char_6_10_b→char_617_sharp2 chess_char_6_11_b→char_608_acpion chess_char_6_06_b→char_609_acguad chess_char_5_22_b→char_611_acnipe chess_char_6_01_b→char_611_acnipe chess_char_6_04_b→char_614_acsupo chess_char_6_05_b→char_611_acnipe chess_char_6_08_b→char_612_accast chess_char_6_09_b→char_613_acmedc", @@ -524,43 +524,43 @@ "time": 230, "ticks": 6900, "reason": "timeout", - "killed": 28, + "killed": 29, "total": 131, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 263, + "rngDraws": 293, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":28,"total":131,"perfect":false,"leaks":103,"leaksUncounted":0,"coins":2,"dmg":538265,"bossDmg":0,"heal":10974,"deaths":25,"layerGains":{"raidShip":6}} + "p1": {"killed":29,"total":131,"perfect":false,"leaks":102,"leaksUncounted":0,"coins":2,"dmg":542398,"bossDmg":0,"heal":10974,"deaths":25,"layerGains":{"raidShip":6}} }, "units": [ - ["p1",1,"op","chess_char_6_17_b",2,"uniequip_002_acpion",954.91,1,164,10,211581,13444,0,77,10], - ["p1",2,"op","chess_char_6_13_b",2,"uniequip_002_acspec",0,0,165,5,46991,13356,0,106,0], - ["p1",3,"op","chess_char_6_19_b",2,"uniequip_002_acspec",1484,1,166,4,75038,16324,0,138,0], + ["p1",1,"op","chess_char_6_17_b",2,"uniequip_002_acpion",1904,1,164,10,209944,12495,0,67,10], + ["p1",2,"op","chess_char_6_13_b",2,"uniequip_002_acspec",0,0,162,6,51334,11872,0,120,0], + ["p1",3,"op","chess_char_6_19_b",2,"uniequip_002_acspec",0,0,165,4,76465,17808,0,154,0], ["p1",4,"op","chess_char_6_12_b",2,"uniequip_002_accast",2265.49,1,4,4,78264,281,0,32,2], - ["p1",5,"op","chess_char_6_15_b",2,"uniequip_002_acsupo",0,0,147,2,54506,6494,0,39,3], + ["p1",5,"op","chess_char_6_15_b",2,"uniequip_002_acsupo",0,0,148,2,54506,6494,0,39,3], ["p1",6,"op","chess_char_6_18_b",2,"uniequip_002_accast",1819,1,8,3,71885,900,0,43,2], ["p1",7,"op","chess_char_6_20_b",2,"uniequip_002_acmedc",1464,1,9,0,0,4263,10974,19,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_1006_shield_3": [21,1,20,16907,164634], - "enemy_1043_zomsbr": [66,22,44,908,136175], + "enemy_1006_shield_3": [21,1,20,13939,164939], + "enemy_1043_zomsbr": [66,23,43,617,138600], "enemy_1162_magmot": [1,0,1,4704,11483], "enemy_1165_duhond": [1,1,0,93,4645], "enemy_1165_duhond_2": [1,0,1,0,0], "enemy_1166_dusbr": [1,0,1,0,0], "enemy_1166_dusbr_2": [1,0,1,0,0], "enemy_1168_dumage": [1,1,0,1897,7465], - "enemy_1168_dumage_2": [1,1,0,4932,10783], + "enemy_1168_dumage_2": [1,1,0,4286,10783], "enemy_1169_duphlx": [1,0,1,0,1489], - "enemy_1402_tgshd_2": [36,2,33,25620,201592] + "enemy_1402_tgshd_2": [36,2,33,28576,202995] }, - "hooks": [1,166,6900,578,578,900,914,7048,53,158,18,38,0,8737,1167,48,131,102,1,53,1,1,0], - "events": {"atk":585,"bounty":1,"deploy":33,"die":56,"dmg":848,"engage":6,"fx":539,"heal":25,"layer":1,"leak":102,"skill":78,"spawn":140,"status":384}, - "fx": {"aoe":4,"blink":3,"burst":1,"displace":18,"dodge":1,"dp":20,"expose":414,"garrison":1,"garrisonGrant":3,"slash":74}, - "snaps": "fba27448 40f8ddeb 904aa1c4 7f5fd3e3 9795959e b8c7a6c7 f5b1092e b4109451 8082d0cc a86cc61b fb1870c6 9cf94d5d 1d3df05d ceb38c64 2d46f54e 5fd7022a d8ef7fcc 55250098 09b8ad07 d6c97808 bbb9cfcc a2163482 34deba04" + "hooks": [1,165,6900,595,595,924,938,6943,54,158,18,38,0,8737,1171,47,131,101,1,54,1,1,0], + "events": {"atk":602,"bounty":1,"deploy":32,"die":57,"dmg":868,"engage":6,"fx":580,"heal":25,"layer":1,"leak":101,"skill":76,"spawn":140,"status":383}, + "fx": {"aoe":4,"blink":3,"burst":1,"displace":21,"dodge":3,"dp":20,"expose":450,"garrison":1,"garrisonGrant":3,"slash":74}, + "snaps": "fba27448 40f8ddeb 904aa1c4 7f5fd3e3 9795959e 7e944cb9 a1f602a2 23ce8d11 bc4a8a16 bf530478 d8ce6699 3c7531f2 1723301e 3a33e4a9 1776e2c7 9f4e39b8 4a745c4f 04ba5967 cbaf6007 94a5d280 8d5c37cb 5d25eb40 2be9ff1d" } } } diff --git a/test/render/unitview.test.js b/test/render/unitview.test.js index bc86b85b..30e32113 100644 --- a/test/render/unitview.test.js +++ b/test/render/unitview.test.js @@ -611,6 +611,24 @@ describe('a push / pull slide (推拉: the official impulse under friction)', () assert.equal(ice.x, 7.7, 'the destination is authoritative whatever the floor'); }); + test('the slide takes the sim\'s 失衡 time: the fx `dur` (game s) at the playback rate — 0.8 s at 2× is 0.4 real s', async () => { + const at2 = async (id) => { + const ctx = fakeViewCtx(fake.P, { assets: store({ spine: true }), cam, animRate: () => 2 }); + const v = new UnitView(ctx, { id, side: 'enemy', kind: 'enemy', defId: 'enemy_1007_slime', x: 5, y: 12, maxHp: 100 }, {}); + await tick(); await tick(); + return v; + }; + const push = await at2(11), pull = await at2(12), old = await at2(13); + push.slideTo(6.7, 12, { dur: 0.8 }); // a 受力等级 0 push (1.7 tiles, PRTS 位移时间 0.8 s) + assert.ok(Math.abs(push.slide.dur - 0.4) < 1e-9, `${push.slide.dur}`); + pull.slideTo(3, 12, { dur: 1 }); // a pull's force window + assert.ok(Math.abs(pull.slide.dur - 0.5) < 1e-9, `${pull.slide.dur}`); + old.slideTo(6.7, 12); // an fx without `dur` (an older recording): the fallback + assert.ok(Math.abs(old.slide.dur - Math.min(0.45, Math.max(0.12, 0.14 * Math.sqrt(1.7)))) < 1e-9, `${old.slide.dur}`); + step(push, push.slide.dur); + assert.equal(push.x, 6.7, 'lands on the destination'); + }); + test('the duration follows √distance, not distance', async () => { const near = await view(4), far = await view(5); near.slideTo(6.2, 12); far.slideTo(10.5, 12); // 1.2 vs 5.5 tiles diff --git a/test/sim/feedback1b-displacement.test.js b/test/sim/feedback1b-displacement.test.js index 35e88b00..5f3e2977 100644 --- a/test/sim/feedback1b-displacement.test.js +++ b/test/sim/feedback1b-displacement.test.js @@ -13,7 +13,8 @@ // - 守墓石像 turns into a flyer at run time (data WALK, no 静态刚体): its statue ("无法被阻挡,自缚,失衡免疫,免疫浮空") and its // flight ("变为飞行单位,失衡免疫") are 失衡免疫 (PRTS 守墓石像 / 愤怒的守墓石像 天赋). // Unchanged: ground enemies keep the 力度 − 重量 tables (DESIGN §20.3); the hovering 吉兆飞鳞 / 掠海漂移体 are 失衡免疫 while they -// hover and displaceable once grounded (no 静态刚体 on their pages). [ASSUMED] the 0.1 s 失衡硬直 of a 静态刚体 is not modelled. +// hover and displaceable once grounded (no 静态刚体 on their pages). Since 0.2.2 a force > 0 on a 静态刚体 gives its 0.1 s 失衡 +// floor (特殊机制 静态刚体 「失衡状态拥有 0.1 秒保底持续时间」; battle/displacement.js _staticForce): it pauses, never moves. import { test } from 'node:test'; import assert from 'node:assert/strict'; @@ -105,7 +106,7 @@ test('B5 (the player\'s scenario): 薄绿 S2 hits the drones but never drags the } }); -test('B5 (the player\'s scenario): on act2 m01 a round-7 drone flies past 薄绿 on its route, hit after hit', REAL, () => { +test('B5 (the player\'s scenario): on act2 m01 a round-7 drone flies past 薄绿 on its route, hit after hit — never moved, only held 0.1 s per force', REAL, () => { // round 7's FLY route 10 (… (11,8) → (11,6) → (10,6) → (10,5) …) passes her x-1 range on the melee tile (10,7) const { routes } = spawnsFromTemplate(getDefaultSource().getWave('act1autochess_07')); assert.equal(routes[10].motion, 'FLY'); @@ -123,10 +124,12 @@ test('B5 (the player\'s scenario): on act2 m01 a round-7 drone flies past 薄绿 }; const ref = fly(false), got = fly(true); assert.ok(got.hits >= 5, `S2 hits the drone (${got.hits} hits)`); - assert.equal(got.path.length, ref.path.length, 'it reaches the goal on the same tick'); - let dev = 0; - for (let i = 0; i < ref.path.length; i++) dev = Math.max(dev, Math.hypot(got.path[i][0] - ref.path[i][0], got.path[i][1] - ref.path[i][1])); - approx(dev, 0, 1e-9, 'its flight is the undisturbed one'); + // every place it passes is a place of the undisturbed flight: the pulls never move it, they only hold it a moment + const key = (p) => `${p[0].toFixed(6)},${p[1].toFixed(6)}`; + const route = new Set(ref.path.map(key)); + assert.ok(got.path.every((p) => route.has(key(p))), 'its flight is the undisturbed one, with pauses'); + const late = got.path.length - ref.path.length; // ticks; the 0.1 s floor is 3 ticks, overlapping holds merge + assert.ok(late > 0 && late <= got.hits * 4, `held for ${late} ticks over ${got.hits} hits`); checkInvariants(got.h.b); }); diff --git a/test/sim/unbalance.test.js b/test/sim/unbalance.test.js new file mode 100644 index 00000000..76456a4d --- /dev/null +++ b/test/sim/unbalance.test.js @@ -0,0 +1,151 @@ +// 失衡 (UNBALANCE) after a push / pull — PR #392 by @xcdoge brought the state; its timing re-done from the sources +// (docs/research/13-knockback-official.md): a state machine, not a status (PRTS 失衡位移机制; 异常效果: 「不属于异常效果」), during +// which the enemy neither walks nor starts a normal attack (异常效果图鉴/失衡免疫 「失衡期间无法自主移动、发动攻击、使用技能」). +// - a push: the 位移时间 of its 受力等级 (PRTS 游戏数据基础 推力-位移近似对应表: 0.2 / 0.4 / 0.8 / 0.9 / 32⁄30 / 35⁄30 s); +// - a pull: its force window (推与拉 §拉力: 1 s, 0.5 s below 受力等级 −1), to its end after the 急停 too; +// - a 静态刚体 hit by a force > 0: the 0.1 s 失衡硬直 floor, no movement (特殊机制 静态刚体); 失衡免疫: never; +// - 浮空 ends it (术语释义 浮空); the move itself stays instant (the unbalanced() talents keyed off the jump). +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { makeBattle, enemyRec, chessRec, checkInvariants } from '../helpers/battleHarness.js'; +import { PUSH_UNBALANCE, PULL_UNBALANCE, PULL_UNBALANCE_WEAK, UNBALANCE_MIN, PUSH_TILES, TICK } from '../../server/sim/constants.js'; + +const near = (a, b, eps = 1e-9) => Math.abs(a - b) <= eps; +const WALL = chessRec({ id: 't_wall', profession: 'TANK', stats: { atk: 0, maxHp: 1e7, blockCnt: 0 }, rangeGrid: [[0, 0]], skill: null }); + +/** One walker (weight `mass`) on an open stage; `units` / `o` extra makeBattle options. */ +function field({ mass = 1, enemy = {}, units = [], ...o } = {}) { + const h = makeBattle({ + content: 'none', autoFinish: false, timeLimit: 120, captureNoisy: true, hooks: ['attack'], + defs: { enemies: { enemy_w: enemyRec({ key: 'enemy_w', hp: 1e7, speed: 1, mass, ...enemy }) }, chess: { t_wall: WALL } }, + enemies: [{ key: 'enemy_w', pos: [10, 7] }], units, ...o, + }); + h.step(); + return { h, e: h.enemy('enemy_w') }; +} +/** Seconds until `e` moves again (its position changes), up to `max`. */ +function stillFor(h, e, max = 3) { + const x = e.x, y = e.y, t0 = h.b.time; + while (h.b.time - t0 < max) { + h.step(); + if (!near(e.x, x) || !near(e.y, y)) return h.b.time - t0; + } + return Infinity; +} + +test('a push holds the enemy for the 位移时间 of its 受力等级 (PRTS 游戏数据基础), then it walks on', () => { + for (const [force, level] of [[-1, -2], [0, -1], [1, 0], [2, 1], [3, 2], [4, 3], [6, 3]]) { + const { h, e } = field(); + const t0 = h.b.time; + const moved = h.b.push(e, force, { from: { x: e.x + 1, y: e.y } }); // to the left: room for 3.53 tiles + assert.ok(near(moved, PUSH_TILES[level], 1e-6), `力度 ${force}: moved ${moved}`); + const want = PUSH_UNBALANCE[level]; + assert.ok(near(e.unbalanceUntil - t0, want), `受力等级 ${level}: ${e.unbalanceUntil - t0} s, want ${want}`); + const t = stillFor(h, e); + assert.ok(t >= want - 1e-9 && t <= want + 2 * TICK + 1e-9, `受力等级 ${level}: walks again after ${t.toFixed(3)} s`); + assert.ok(!e.s.flags.stun, 'no stun status'); + checkInvariants(h.b); + } + assert.deepEqual([PUSH_UNBALANCE[0], PUSH_UNBALANCE[3]], [0.8, 35 / 30], 'the table: 24 and 35 frames'); +}); + +test('no normal attack while it lasts — a 恐惧 does not walk out of it either (no exemption)', () => { + // a ranged enemy shooting the wall operator: pushed, it holds its fire for 0.8 s, then shoots again + const { h, e } = field({ mass: 0, enemy: { atk: 100, range: 6, bat: 0.5, speed: 0 }, units: [{ chessId: 't_wall', row: 10, col: 3 }] }); + assert.ok(h.runUntil(() => h.hooksOf('attack').some((c) => c.attacker === e), 5), 'it shoots the wall'); + const shots = () => h.hooksOf('attack').filter((c) => c.attacker === e).length; + const n0 = shots(), t0 = h.b.time; + h.b.push(e, 0, { from: { x: e.x - 1, y: e.y } }); // 受力等级 0: 0.8 s + h.run(0.8 - TICK); + assert.equal(shots(), n0, 'no attack in the 0.8 s'); + assert.ok(h.runUntil(() => shots() > n0, 3), 'then it attacks again'); + assert.ok(h.b.time - t0 >= 0.8 - 1e-9); + // 恐惧: still held + const f = field({ mass: 0 }); + f.h.b.applyStatus(f.e, 'fear', { duration: 5, force: true }); + f.h.b.push(f.e, 0, { from: { x: f.e.x - 1, y: f.e.y } }); + assert.ok(stillFor(f.h, f.e) >= 0.8 - 1e-9, 'a feared enemy stays put through the hold'); +}); + +test('the −2 angle correction picks the row: a directional push off by more than 45° holds 0.2 s', () => { + const { h, e } = field(); // weight 1: 中力 (1) → 受力等级 0, corrected −2 + const t0 = h.b.time; + const moved = h.b.push(e, 1, { from: { x: e.x, y: e.y - 1 }, dir: { x: 1, y: 0 } }); + assert.ok(near(moved, PUSH_TILES[-2], 1e-6), `the radial −2 push: ${moved}`); + assert.ok(near(e.unbalanceUntil - t0, PUSH_UNBALANCE[-2])); +}); + +test('the row time stays when the 特效 column or a wall shortens the slide; a wall at the first step gives the 0.1 s floor', () => { + const eff = field({ mass: 0 }); + const t0 = eff.h.b.time; + const m = eff.h.b.push(eff.e, 0, { from: { x: eff.e.x - 1, y: eff.e.y }, effect: true }); + assert.ok(m < PUSH_TILES[0] && near(eff.e.unbalanceUntil - t0, PUSH_UNBALANCE[0]), '特效 push: shorter, same 0.8 s'); + // against the field's edge: 1.7 tiles asked, a little moved, then none + const wall = field({ mass: 0 }); + wall.e.x = 9.6; + const t1 = wall.h.b.time; + const m1 = wall.h.b.push(wall.e, 0, { from: { x: wall.e.x - 1, y: wall.e.y } }); + assert.ok(m1 > 0 && m1 < PUSH_TILES[0], `stopped by the edge after ${m1}`); + assert.ok(near(wall.e.unbalanceUntil - t1, PUSH_UNBALANCE[0]), 'still the row time [ASSUMED]'); + const m2 = wall.h.b.push(wall.e, 0, { from: { x: wall.e.x - 1, y: wall.e.y } }); + assert.equal(m2, 0, 'no room left'); + assert.ok(near(wall.e.unbalanceUntil - t1, PUSH_UNBALANCE[0]), 'a running longer state is kept'); + const w2 = field({ mass: 0 }); + w2.e.x = 9.6; + w2.h.b.push(w2.e, 0, { from: { x: w2.e.x - 1, y: w2.e.y } }); + w2.h.run(1); + const t2 = w2.h.b.time; + assert.equal(w2.h.b.push(w2.e, 0, { from: { x: w2.e.x - 1, y: w2.e.y } }), 0); + assert.ok(near(w2.e.unbalanceUntil - t2, UNBALANCE_MIN), 'stopped at once: the 0.1 s floor [ASSUMED]'); +}); + +test('a pull holds for its force window (推与拉): 1 s, 0.5 s below 受力等级 −1, to the end after the 急停; ≤ −3 nothing', () => { + for (const [force, mass, want] of [[1, 1, PULL_UNBALANCE], [0, 1, PULL_UNBALANCE], [-1, 1, PULL_UNBALANCE_WEAK], [-2, 1, 0]]) { + const { h, e } = field({ mass }); + const t0 = h.b.time; + h.b.pull(e, force, { to: { x: 3, y: 10 } }); + const got = Number.isFinite(e.unbalanceUntil) ? e.unbalanceUntil - t0 : 0; + assert.ok(near(got, want), `力度 ${force} − 重量 ${mass}: ${got} s, want ${want}`); + } + // already inside the 急停 circle: no movement, the state for the whole window + const { h, e } = field(); + const t0 = h.b.time; + assert.equal(h.b.pull(e, 1, { to: { x: e.x - 0.3, y: e.y }, center: { x: e.x - 0.3, y: e.y } }), 0); + assert.ok(near(e.unbalanceUntil - t0, PULL_UNBALANCE), '急停 at once: still 1 s'); + assert.ok(stillFor(h, e) >= PULL_UNBALANCE - 1e-9); +}); + +test('a 静态刚体 hit by a force > 0 gets the 0.1 s floor and never moves; 失衡免疫 never enters it', () => { + const s = field({ enemy: { motion: 'FLY' } }); + s.e.def = { ...s.e.def, staticBody: true }; + const x0 = s.e.x, t0 = s.h.b.time; + assert.equal(s.h.b.push(s.e, 3, { from: { x: s.e.x - 1, y: s.e.y } }), 0); + assert.equal(s.e.x, x0, 'not moved'); + assert.ok(near(s.e.unbalanceUntil - t0, UNBALANCE_MIN), '0.1 s'); + const s2 = field({ enemy: { motion: 'FLY' } }); + s2.e.def = { ...s2.e.def, staticBody: true }; + s2.h.b.pull(s2.e, -3, { to: { x: 3, y: 10 } }); // 受力等级 −4: force 0 + assert.ok(!Number.isFinite(s2.e.unbalanceUntil), 'no force, no state'); + const im = field(); + im.h.b.addBuff(im.e, { key: 'test:immune', flags: { noDisplace: true } }); + im.h.b.push(im.e, 3, { from: { x: im.e.x - 1, y: im.e.y } }); + im.h.b.pull(im.e, 3, { to: { x: 3, y: 10 } }); + assert.ok(!Number.isFinite(im.e.unbalanceUntil), '失衡免疫: never'); +}); + +test('浮空 ends the state at once (术语释义 浮空)', () => { + const { h, e } = field({ mass: 0 }); + h.b.push(e, 3, { from: { x: e.x - 1, y: e.y } }); + assert.ok(e.unbalanceUntil > h.b.time); + h.b.applyStatus(e, 'levitate', { duration: 0.5, force: true }); + h.step(); + assert.ok(!(e.unbalanceUntil > h.b.time), 'cleared'); +}); + +test('the displace fx carries the state\'s game seconds for the client\'s slide', () => { + const { h, e } = field({ mass: 0 }); + h.b.drainEvents(); + h.b.push(e, 1, { from: { x: e.x - 1, y: e.y } }); + const fx = (h.b.drainEvents() || []).find((t) => t[0] === 'fx' && t[1] === 'displace'); + assert.ok(fx && near(fx[4].dur, PUSH_UNBALANCE[1]), JSON.stringify(fx)); +}); From 1db84d799df0ef1cb70178bd052796825fb6aa1f Mon Sep 17 00:00:00 2001 From: sganggs Date: Thu, 8 Oct 2026 22:42:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feedback7=20R22-UNBAL:=20=E5=A4=B1=E8=A1=A1?= =?UTF-8?q?=20review=20fixes=20=E2=80=94=20a=20pulled=20=E9=9D=99=E6=80=81?= =?UTF-8?q?=E5=88=9A=E4=BD=93=20is=20held=20for=20the=20pull's=20window,?= =?UTF-8?q?=20=E5=BC=A7=E5=85=89=E9=94=8B=E5=8D=AB=20bleeds=20400=20every?= =?UTF-8?q?=200.066=20s=20while=20the=20state=20lasts,=20no=20enemy=20skil?= =?UTF-8?q?l=20/=20blink=20/=20scripted=20move=20during=20it,=20a=20route?= =?UTF-8?q?=20APPEAR=20or=20a=20=E9=80=90=E7=81=AB=20=E9=87=8D=E7=94=9F=20?= =?UTF-8?q?ends=20it,=20every=20push=20row=20holds=20its=20exact=20frames;?= =?UTF-8?q?=20golden:=2032=20move,=208=20in=20outcomes=20(below)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Branch review of fb7-unbalance (MERGE AFTER FIXES): 1. A 静态刚体 pulled got the 0.1 s floor: _staticForce now knows push from pull — a push's force is instant (推与拉), so 0.1 s; a pull's lasts its window (pullUnbalance: 1 s, 0.5 s below −1) — PRTS 特殊机制 静态刚体 「在失去施力后立刻」 out, 「0.1 秒保底」. pull() checks the puller's own block before the static case. 2. 弧光锋卫 (PRTS 天赋 「处于失衡状态时,每0.066s受到400点无来源真实持续伤害」, data unbalanced_bleed): a tick bleed of 400 every 0.066 s while unbalancedNow holds; the per-tile one-shot from the position jump ([ASSUMED], UNBALANCE_SPEED) is gone. A 受力等级 0 push (0.8 s) → 12 hits = 4800 (was 2037), a 急停 pull with no movement (1 s) → 15 = 6000 (was 0), a wall-shortened slide keeps the 0.8 s row → 4800. 3. 失衡免疫 「失衡期间无法自主移动、发动攻击、使用技能」: enemies/helpers.js unbalancedNow; canCast(e, sil, battle) refuses while it runs (content skills; the boss parts' calls pass the battle), blinkForward returns null, 枯朽之种's dive / blast and the 铳 / 碎铳之簧 charges wait, 乌顶巨角卢鲁's clash waits for its end. A route APPEAR relocation clears it (a forced state switch, 失衡位移机制). Left running on purpose (docs/SIM.md): 水遁忍者's damage check (异常效果 「仍然能正常造成伤害」), passive auras and terrain / periodic effects, death / damage-taken triggers, skill cooldowns, 弧光锋卫's bleed itself. 4. husk() (逐火 余烬 重生) clears the state like reborn(). 5. The 35/30 row held 36 frames (t0 + 35/30 overshoots in floats): every check compares with 1e-9; the frames are asserted. Tests: test/sim/unbalance.test.js +6 (exact frames 6 / 12 / 24 / 27 / 32 / 35 with the walk on the next frame; static pull 1 s / 0.5 s, push 0.1 s; 弧光锋卫 4800 / 6000 / 4800; canCast / blinkForward refused, 枯朽之种 held then diving; the elk's clash after the state; APPEAR and a 逐火 重生 clear it — all six fail on the parent); enemies_bosses (失衡 kit test) and feedback1d-solvent (BUFF damage) updated to the state bleed. test/sim + test/content + test/render pass. Docs: SIM.md (push / pull row), PLAYING.md, design/engine.md (helpers, enemy AI), constants / displacement comments. Golden against the previous commit — outcome moves: roster-010 (歌蕾蒂娅 pulls 妖怪 drones, now held 1 s: killed 44→45, leaks 58→57), roster-040 (static pulls of 妖怪: killed 28→25, leaks 37→40, deaths 29→30), roster-043 / 044 (山: deaths 14→16 / 14→13), hidden-boss_9-pair (锏: boss HP 3636991→3586929), coop4-ABYSS-7 (ai_2 LP +1 from round 5), diy-115 (黑键: leaks 70→75), diy-116 (黑键: killed 2→3, leaks 121→120) — the static pulls (probe) and the 1e-9 end (a frame shorter where the float sum overshot: the 35/30 row, some pull windows); other moves (damage / snapshots only): roster-008 / 017 / 039, 9 bonds, boss-boss_4-pair / boss_6-pair / hidden-boss_10-pair, coop2-NORMAL-14-standins / coop2-NORMAL-3 / solo-ABYSS-1 / solo-HARD-1 / solo-HARD-9-boosted / solo-NORMAL-1, diy-053 / 085 / 102. --- docs/PLAYING.md | 2 +- docs/SIM.md | 2 +- docs/design/engine.md | 4 +- server/sim/ai.js | 4 +- server/sim/battle/displacement.js | 24 +-- server/sim/constants.js | 3 +- server/sim/content/bosses.js | 14 +- server/sim/content/enemies.js | 4 +- server/sim/content/enemies/archetypes.js | 3 + server/sim/content/enemies/fly.js | 3 +- server/sim/content/enemies/helpers.js | 10 +- server/sim/content/enemies/leaders.js | 29 ++-- test/content/enemies_bosses.test.js | 9 +- test/content/feedback1d-solvent.test.js | 4 +- test/golden/bonds.json | 72 ++++---- test/golden/diy.json | 115 ++++++------ test/golden/fields.json | 76 ++++---- test/golden/matches.json | 44 ++--- test/golden/roster.json | 212 ++++++++++++----------- test/sim/unbalance.test.js | 107 ++++++++++++ 20 files changed, 440 insertions(+), 301 deletions(-) diff --git a/docs/PLAYING.md b/docs/PLAYING.md index fa1bb832..28549631 100644 --- a/docs/PLAYING.md +++ b/docs/PLAYING.md @@ -80,7 +80,7 @@ - **阻挡**看接触:干员阻挡中心距离约 0.7 格以内、与它接触的敌人(地面干员挡不住飞行和近地悬浮的敌人)。敌人卡在两名干员之间时,阻挡它的干员倒下、撤退或被晕眩后,另一名仍与它接触、还有空余阻挡数的干员会**立刻接替阻挡**;都没有空位时敌人才会走掉。被冻结或晕眩的敌人同样会被接触到的干员挡住:干员再部署到它身边就会阻挡它,隐匿的敌人也随之破隐(沉睡、浮空、恐惧的敌人仍然挡不住)。迎面走来的敌人会停在干员格子前面。**阻挡了就一定能打到**:任何干员(包括站在近战位的远程干员和召唤物)总能攻击自己阻挡的敌人,不管它在不在攻击范围内、在干员哪一侧,并且优先攻击它——只有速射手例外:攻击范围内有飞行敌人时先打飞行敌人(特性「优先攻击空中单位」,维护者 2026-10-08 的决定,GitHub #220)(医疗干员除外:咒愈师以外的医疗挡住敌人时照常治疗队友,不会攻击它;「停止攻击」类技能期间也除外;技能原文另有限制的也按原文:普罗旺斯二技能开启时不以生命值高于 80% 的敌人为目标,寒檀二技能的冰凌随机落在攻击范围内的地块上)。 - 开战时干员按**逐列从左到右、每列从上到下**的顺序部署(最左一列最先,与阿戈尔吞噬「更靠左和靠上」的顺序相同),召唤物在所有干员之后。被阻挡的敌人先打阻挡它的干员;没被阻挡的远程敌人先打嘲讽等级高的,同级时打最后部署的(召唤物、最右一列靠下的干员和刚再部署的干员更容易挨打)。隐匿的干员只会被它阻挡的敌人攻击,没被它挡住的敌人的溅射、爆炸、范围技能、留下的伤害区域(包括假想敌:蚀裂被击倒后喷出的毒雾)以及深池伙友卫队、扎罗的减攻速光环也落不到它身上(和官方一样;写明「无视无法选择」的效果如污染秽蚀照常能打到,寒霜的减攻速光环和“墓碑”这类地图效果照常生效);**迷彩**(如忍冬三技能期间击倒敌人后、寒芒克洛丝一技能)同样只会被它阻挡的敌人攻击,也显示为半透明,但躲不开溅射、爆炸和范围伤害(同时打范围内所有单位的普通攻击——如“斩胄之剑”“破胄之锤”“灵幛”——打不到它),也不算隐匿(不触发叙拉古等「隐匿时」效果)。叙拉古的隐匿按时(32 秒 + 每层 0.4 秒)结束;忍冬的迷彩按官方持续到她下一次开技能。**蒂比起飞**期间只挡飞行敌人,地面敌人不会选她为目标(普通攻击、溅射、技能范围、燃烧区域和要选中目标的减益都落不到她身上);飞行和悬浮敌人、写明「无视无法选择」的效果(如污染秽蚀)照常能打到她;地面敌人的光环和全场效果(如“墓碑”让全场攻击力、防御力减半)、她攻击敌人时招来的反制(如重装侦察兵的暴露)照常生效,起飞前已挂上的持续伤害也照常跳。 - **技能自动释放**按官方「技能策略」:一般的手动技能在技能就绪、即将攻击 / 治疗且初始攻击范围内有敌人(治疗技能:有受伤的队友)时释放;**带独立技能范围**的技能(如德克萨斯「剑雨」、凛御银灰「御敌的锋锐」、锏「归于宁静」,不含「攻击范围扩大」类)在**技能范围内出现敌人**时就释放,不必先攻击;**开启后攻击范围比平时大**的手动技能(如莫斯提马「序时之匙」、银灰「真银斩」、史尔特尔「黄昏」、白面鸮「脑啡肽」)在**开启后的攻击范围内出现敌人**(治疗技能:有受伤的队友)时就释放,不必等敌人走进平时的攻击范围,这是本作按玩家反馈有意与官方不同的地方;**重装干员**的手动技能在受到伤害时释放(例外:深巡、雷蛇的二技能,号角的二、三技能,灰毫的一、二技能按玩家反馈改为攻击范围内有敌人时就释放(深巡二技能按开启后更远的攻击范围判断),余的二技能「厚礼上宾」改为周围两格(技能范围)内有敌人时就释放,这是本作有意与官方不同的地方;深巡一技能仍要受到伤害);执旗手 / 战术家 / 吟游者技能就绪即释放,解放者 / 阵法术师在初始攻击范围内有敌人时释放(开启后攻击范围扩大的技能——薄绿「风语」、蜜蜡「沙暴扩散」、卡涅利安「食噬之印」、玛恩纳「未宽解的悲哀」,以及安洁莉娜「秘杖·反重力模式」——同样按开启后的攻击范围判断)。**自动触发**的技能按其本身规则:只作用于队友的(如引星棘刺「度算浪波」、浊心斯卡蒂「同葬无光之愿」、纯烬艾雅法拉「无声润物」)技力满就释放,不用等敌人或伤员;立即生效、本身不是一次攻击的技能(如度算浪波、先锋的回费技能)两次释放之间至少隔一个攻击间隔(释放本身不占用普通攻击),攻速越快放得越勤,迅捷返还的技力再多也不会每一帧都放(GitHub #298);伺夜「领袖的呼唤」「领袖的馈赠」只在场上有狼群时释放:狼群处于战术点形态时,「领袖的呼唤」也会释放并让它立刻带着 1 只狼影回到场上(狼影未满时改为加 1 只狼影,已满时把狼群的生命值回满),「领袖的馈赠」也会释放(立即获得费用,强化留给回来的狼群的下一次攻击);又如古米「备用军粮」在身边(技能范围内)有受伤的队友时就会发动,下一次攻击改为治疗该队友(不用先接敌;她的二技能「食粮烹制」是手动技能,按重装规则在受到伤害时释放);塞雷娅「急救」在她即将攻击时、身边有生命不高于一半的队友才发动,这次攻击直接改为治疗;新约能天使二技能的护盾按官方给攻击范围内**仇恨最高**的队友(嘲讽等级高的优先,同级时给最后部署的),不一定是站在最前面挨打的那个。手动技能的自动释放有 3 秒冷却:开战部署后先等 3 秒,之后同一干员两次自动释放至少间隔 3 秒(可充能的技能不会同时放完)。白铁的「铁钳号·原型机」能被我方干员攻击(不受伤害):它在攻击范围 / 技能范围内时,能作用到它的技能会像遇到敌人一样自动开启并消耗弹药(项目维护者 2026-10-08 按官方体验确认;白铁™多功能平台不会被攻击);技能效果只会挑选敌人、打不到它的技能(如德克萨斯「剑雨」)不会为它开启,留给真正的敌人。 -- **推开 / 拉拽**按官方「力度 − 重量」决定距离:例如野鬃二技能(中等力度)把重量 0 / 1 / 2 / 3 的敌人推开约 2.1 / 1.7 / 0.4 / 0.1 格,重量 4 以上推不动——轻型敌人反而推得更远。野鬃二技能沿她的朝向推开:正前方 45° 以内按上面的距离,身后、侧面或贴身的敌人只被轻推一下(约 0.4 格以内);琳琅诗怀雅三技能的金币则从她身边向外推开,落在她前方 2–4 格的范围(官方「范围2-4」)内的地面敌人和她阻挡的敌人身上。被推开、拉动的敌人会进入官方的**失衡**状态,这段时间里不走路、也不发动普通攻击:推开按力度减重量的档位持续 0.2–约 1.17 秒(中等力度推重量 1 的敌人为 0.8 秒),拉拽持续 1 秒(力度比重量低 2 档时 0.5 秒,拉到身前后也一样),推不动的空中单位(静态刚体)受力时也会停顿 0.1 秒;浮空会立刻解除失衡。画面上的滑行也用同样的时间(默认 2 倍速下现实时间减半)。攻击速度最低为 20(沼泽、寒霜等减速叠满时也不会更慢)。 +- **推开 / 拉拽**按官方「力度 − 重量」决定距离:例如野鬃二技能(中等力度)把重量 0 / 1 / 2 / 3 的敌人推开约 2.1 / 1.7 / 0.4 / 0.1 格,重量 4 以上推不动——轻型敌人反而推得更远。野鬃二技能沿她的朝向推开:正前方 45° 以内按上面的距离,身后、侧面或贴身的敌人只被轻推一下(约 0.4 格以内);琳琅诗怀雅三技能的金币则从她身边向外推开,落在她前方 2–4 格的范围(官方「范围2-4」)内的地面敌人和她阻挡的敌人身上。被推开、拉动的敌人会进入官方的**失衡**状态,这段时间里不走路、也不发动普通攻击:推开按力度减重量的档位持续 0.2–约 1.17 秒(中等力度推重量 1 的敌人为 0.8 秒),拉拽持续 1 秒(力度比重量低 2 档时 0.5 秒,拉到身前后也一样),失衡期间也不会放技能(例如弑君者的闪现)或执行脚本移动(例如枯朽之种俯冲),弧光锋卫则在失衡期间每 0.066 秒受到 400 点真实伤害;推不动的空中单位(静态刚体)被推时停顿 0.1 秒、被拉时停顿整个拉力作用时间;浮空、重生和路线上的瞬移出现都会立刻解除失衡。画面上的滑行也用同样的时间(默认 2 倍速下现实时间减半)。攻击速度最低为 20(沼泽、寒霜等减速叠满时也不会更慢)。 - **生命回复不是治疗**(与官方一致):吟游者的特性(魔王、浊心斯卡蒂及其海嗣)、调香师的天赋、瑕光二技能、铃兰三技能、锡人和引星棘刺(一、二技能)的炼金单元给友军的「每秒恢复生命」是提高对方的**生命回复速度**,不是治疗:收割者 / 不屈者 / 武者(如隐德来希、圣约送葬人、折桠)这类「无法被友方治疗」的干员和处于禁疗的干员也能吃到,治疗量加成(如「受到的治疗效果提升」)也不会放大它;铃兰三技能开启后的第一秒没有回复。直接治疗(医疗干员的治疗、技能的「恢复…生命」)仍然对这些干员无效。 - **元素损伤条**在单位自己的血条正下方:左边是元素图标,白条是剩余的元素值,只有真正爆发时才会耗尽;爆发后条变成元素的颜色、图标闪烁,在冷却期间慢慢回满(这段时间不会再积累元素损伤)。 - **弹药、狼影和「我执」**也画在血条上(0.2.2):弹药类技能(如隐现的二技能,14 发)开启时,血条下方的技力条换成**分格的黄色弹药条**——一格一发,打一发少一格,补弹时回来;这类技能开启期间脚下不再有持续的金色光环。伺夜的狼群在血条下方有一排**菱形**,亮的是剩下的狼影,暗的是已用掉的空位(最多 3 个),进入战术点形态时消失。斩业星熊进入「我执」后,绿色血条停在 1 点,超出的伤害涨成血条上的**红条**,红条满了才会倒下。这些只是显示,不改变任何战斗数值。 diff --git a/docs/SIM.md b/docs/SIM.md index 2c8c46d8..344bef46 100644 --- a/docs/SIM.md +++ b/docs/SIM.md @@ -896,7 +896,7 @@ instance) and skip `'counter'` / `'reflect'` damage. When the guard trips, the l | `moveRedeploy(unit, r, c, { clearSp })` | a 【移动】 (PRTS 术语释义: "不退场,以当前血量在目标位置部署", a special retreat + redeploy): `relocate`'s checks (false = refused, nothing changed), then a new deployment (`deploySeq` / `aggroSeq` / `deployedAt`) and `deploy {initial:false, move:true}` (deploy effects fire again); no `die` / `death`, timer or cost (不屈 / 阿戈尔's revive never see it); HP, buffs and a running skill are kept (owner's deviation, DESIGN §22.3); `clearSp` empties the SP before the deploy handlers run — 乌尔比安 S3's move (kits/ops/chess_char_5_05-ulpia.js) and 【返回】 (`clearSp`; also the 从不混淆的方向 fallback, content/tokens.js) | | `redeploy(unit, { free=true, tile, keepSp })` | immediate (re)deployment of a dead/retreated ally (full HP, `deploy {initial:false}`); `free: false` pays `base.cost` DP (refused without it); without `tile` it lands on the unit's rest tile (`restTile`: where a knocked-out operator lies, else home); `tile: [r, c]` lands on that tile once (home unchanged; refused when off-rect, occupied or a knocked-out operator's tile, no fallback); `keepSp` keeps SP/charges (保留技力), restored before `deploy` fires — but not for a skill that costs no SP, which the reset re-arms as at every deployment (伊内丝 S3 casts again on a 突袭 landing) — 突袭 raids, 阿戈尔 / 不屈 revives where the unit lies | | `refreshRange(unit)`, `setExtraRange(unit, keys)`, `rangeChanged(unit)` | rebuild the ranges after changing `unit.rangeGrid` (流形 copies); extra targetable tiles (absolute keys; merged into every later rebuild until set again; `null` clears; never in `baseRangeKeys`): 蕾缪安 wanted, 维娜 S3 | -| `push(enemy, force, {from, dir, fixed, fixedAngle, inward, effect})`, `pull(enemy, force, {to, center, stop})`, `pullToFront(enemy, unit, force)`, `forceLevel(enemy, force)`, `pushDistance(enemy, force, {effect})` | the official 位移 (PRTS 游戏数据基础 §重量公式 / 推与拉; user playtest #6 item 14): 受力等级 = 力度 (微小力 −1, 小力 0, 中力 1, 较大力 2, 大力 3 …) − current 重量等级 (massLevel, 失重 counts). Push distance per level (`constants.js PUSH_TILES`, PRTS 推与拉's 弹道 column): ≤ −3 → 0, −2 → 0.12, −1 → 0.44, 0 → 1.7, 1 → 2.14, 2 → 2.96, ≥ 3 → 3.53 tiles; `effect` = a 特效 push (`PUSH_TILES_EFFECT`: −2 → 0.085, −1 → 0.374, 0 → 1.562, 1 → 1.987, 2 → 2.773, ≥ 3 → 3.331 — 见行者 S1 / S2, `PUSH_EFFECT_SKILLS`; every other pusher uses the 弹道 column [ASSUMED]); radial (away from `from`; the client's buff template `knockback[relative]`: 莫斯提马 S3, 山 S3, 琳琅诗怀雅 S3 — also PRTS 备注 "推开效果为径向推动") unless `dir` (directional; template `knockback[dir]` = Knockback {`_useSourceDirection` true, `_decreaseForceLevelWhenNotInDirection` 2}: 推击手, 野鬃 S2 "往攻击方向" (charpack char_496_wildmn: buff `wildmn_s_2[force]`) — > 45° off or < 0.25 tile ⇒ radial and level −2; `fixed` waives both (圣聆初雪 S1 朝部署方向, `KnockBackWithCharacterDirection`), `fixedAngle` only the angle (见行者 S2)); `inward` = a push towards `from` (薄绿 S2), stopping at the 急停 radius. Pull: level ≥ 0 → to `to` / the 急停 radius around `center`, −1 → 35 % of the way, −2 → 0.03, ≤ −3 → 0; `pullToFront` aims at the 拉力起点 0.5 tile ahead of the unit with the 急停 radius 0.6708 around it (never moves an enemy the unit itself blocks — nor does a pull towards an ally's centre, e.g. the 流形 S3 pulse) A 静态刚体 (data `staticBody`: every air unit of the mode except “炎佑”, plus 昆图斯 — PRTS 特殊机制 "可以进入失衡状态…但物理层面上无法产生任何速度或移动", "与单位的行动方式无关") moves 0 from every source while the skills that reach it still hit it (薄绿 S2, 锏 S3, the 钩索师 …; player report after 0.1.0). **失衡 (UNBALANCE)** (PR #392's idea, its timing re-done from the sources): the move stays instant, then the enemy is held in the 失衡 state — a state machine, not a status (PRTS 失衡位移机制; 异常效果 「失衡…不属于异常效果」: no stun, no immunity, SP untouched), `enemy.unbalanceUntil`, read by `ai.js updateEnemy`: no walking (恐惧 / 诱导 included — no fear exemption) and no normal attack started, a swing short of its frame cut, the attack clip's stand ended; checks that ignore the state (水遁忍者's damage, content abilities) go on — no global skill lock ([ASSUMED] scope: 失衡免疫's 「无法…使用技能」 is not modelled). Length, game seconds: a push — the 位移时间 of its 受力等级, PRTS 游戏数据基础 推力-位移近似对应表 (`constants.js PUSH_UNBALANCE`: −2 → 0.2, −1 → 0.4, 0 → 0.8, 1 → 0.9, 2 → 32/30, ≥ 3 → 35/30), the level push() computes (the −2 correction included), kept when the 特效 column or a wall shortens the slide ([ASSUMED] for the wall; a wall at the first step → the 0.1 s floor [ASSUMED]); a pull — its force window, 推与拉 「作用时间默认为 1 s;若本次受力等级 < −1,作用时间改为 0.5 s」 (`PULL_UNBALANCE` / `_WEAK`), to its end after the 急停 too (「目标将仍保持失衡状态至拉力作用时间结束为止」), none at ≤ −3; a 静态刚体 hit by a force > 0 — the 0.1 s 失衡硬直 floor (`UNBALANCE_MIN`, 特殊机制 静态刚体), no movement; 失衡免疫 and leaders never. 浮空 ends it (术语释义 浮空), so does a 重生. The `displace` fx carries the length (`dur`): the client's slide takes as long (render/units.js slideTo). PR #392's 0.6387·√tiles (from the page's μ = 0.5 单位假设) and its fear exemption are not taken | +| `push(enemy, force, {from, dir, fixed, fixedAngle, inward, effect})`, `pull(enemy, force, {to, center, stop})`, `pullToFront(enemy, unit, force)`, `forceLevel(enemy, force)`, `pushDistance(enemy, force, {effect})` | the official 位移 (PRTS 游戏数据基础 §重量公式 / 推与拉; user playtest #6 item 14): 受力等级 = 力度 (微小力 −1, 小力 0, 中力 1, 较大力 2, 大力 3 …) − current 重量等级 (massLevel, 失重 counts). Push distance per level (`constants.js PUSH_TILES`, PRTS 推与拉's 弹道 column): ≤ −3 → 0, −2 → 0.12, −1 → 0.44, 0 → 1.7, 1 → 2.14, 2 → 2.96, ≥ 3 → 3.53 tiles; `effect` = a 特效 push (`PUSH_TILES_EFFECT`: −2 → 0.085, −1 → 0.374, 0 → 1.562, 1 → 1.987, 2 → 2.773, ≥ 3 → 3.331 — 见行者 S1 / S2, `PUSH_EFFECT_SKILLS`; every other pusher uses the 弹道 column [ASSUMED]); radial (away from `from`; the client's buff template `knockback[relative]`: 莫斯提马 S3, 山 S3, 琳琅诗怀雅 S3 — also PRTS 备注 "推开效果为径向推动") unless `dir` (directional; template `knockback[dir]` = Knockback {`_useSourceDirection` true, `_decreaseForceLevelWhenNotInDirection` 2}: 推击手, 野鬃 S2 "往攻击方向" (charpack char_496_wildmn: buff `wildmn_s_2[force]`) — > 45° off or < 0.25 tile ⇒ radial and level −2; `fixed` waives both (圣聆初雪 S1 朝部署方向, `KnockBackWithCharacterDirection`), `fixedAngle` only the angle (见行者 S2)); `inward` = a push towards `from` (薄绿 S2), stopping at the 急停 radius. Pull: level ≥ 0 → to `to` / the 急停 radius around `center`, −1 → 35 % of the way, −2 → 0.03, ≤ −3 → 0; `pullToFront` aims at the 拉力起点 0.5 tile ahead of the unit with the 急停 radius 0.6708 around it (never moves an enemy the unit itself blocks — nor does a pull towards an ally's centre, e.g. the 流形 S3 pulse) A 静态刚体 (data `staticBody`: every air unit of the mode except “炎佑”, plus 昆图斯 — PRTS 特殊机制 "可以进入失衡状态…但物理层面上无法产生任何速度或移动", "与单位的行动方式无关") moves 0 from every source while the skills that reach it still hit it (薄绿 S2, 锏 S3, the 钩索师 …; player report after 0.1.0). **失衡 (UNBALANCE)** (PR #392's idea, its timing re-done from the sources): the move stays instant, then the enemy is held in the 失衡 state — a state machine, not a status (PRTS 失衡位移机制; 异常效果 「失衡…不属于异常效果」: no stun, no immunity, SP untouched), `enemy.unbalanceUntil`, read by `ai.js updateEnemy`: no walking (恐惧 / 诱导 included — no fear exemption) and no normal attack started, a swing short of its frame cut, the attack clip's stand ended; and no skill (失衡免疫 「失衡期间无法自主移动、发动攻击、使用技能」): content skills wait (`enemies/helpers.js canCast(e, sil, battle)`, `unbalancedNow`), so do blinks (`blinkForward`) and scripted moves (枯朽之种's dive, the 碎铳之簧 / 铳 charges), and 乌顶巨角卢鲁's clash waits for its end. Left running on purpose: checks the state does not stop (异常效果: 水遁忍者's damage — 「仍然能正常造成伤害」), passive auras and terrain / periodic effects (no skills), death / damage-taken triggers, skill cooldowns (only the cast waits) — and 弧光锋卫's bleed, which is the state's own (天赋 「处于失衡状态时,每0.066s受到400点无来源真实持续伤害」: every 0.066 s for as long as it lasts — until 0.2.2 one hit per tile moved [ASSUMED]). Length, game seconds: a push — the 位移时间 of its 受力等级, PRTS 游戏数据基础 推力-位移近似对应表 (`constants.js PUSH_UNBALANCE`: −2 → 0.2, −1 → 0.4, 0 → 0.8, 1 → 0.9, 2 → 32/30, ≥ 3 → 35/30), the level push() computes (the −2 correction included), kept when the 特效 column or a wall shortens the slide ([ASSUMED] for the wall; a wall at the first step → the 0.1 s floor [ASSUMED]); a pull — its force window, 推与拉 「作用时间默认为 1 s;若本次受力等级 < −1,作用时间改为 0.5 s」 (`PULL_UNBALANCE` / `_WEAK`), to its end after the 急停 too (「目标将仍保持失衡状态至拉力作用时间结束为止」), none at ≤ −3; a 静态刚体 hit by a force > 0 — no movement, the state while the force acts (特殊机制 静态刚体: 「在失去施力后立刻」 out, 「0.1 秒保底」): a push 0.1 s (`UNBALANCE_MIN`; a push's force is instant), a pull its window; 失衡免疫 and leaders never. 浮空 ends it (术语释义 浮空), so do a 重生 (重生 / 逐火's 余烬) and a route APPEAR relocation — forced state switches (失衡位移机制). The end compares with 1e-9 so a float-summed 35/30 s keeps its 35 frames. The `displace` fx carries the length (`dur`): the client's slide takes as long (render/units.js slideTo). PR #392's 0.6387·√tiles (from the page's μ = 0.5 单位假设) and its fear exemption are not taken | | `displace(enemy, {x, y}, tiles, {dur})` | the raw mover behind push / pull: along passable tiles (by `motion`: FLY in the rect, else ground-passable), no weight rule, no 失衡 state of its own (push / pull add it; `dur` only rides on its `displace` fx); nothing for 失衡免疫 (`noDisplace`: 近地悬浮 incl. 喷气人's 飞行模式, 浮空, the 胄 parts, 守墓石像's statue and flight), 静态刚体 (`def.staticBody`) and leaders (`_displaceable`); unblocks + re-paths | | `after(seconds, fn, {owner})`, `every(seconds, fn, {owner, immediate})` | return `{cancel()}`; fn(battle, sched) | | `fx(kind, params)`, `rng()` (+ `rng.int/range/chance/pick/shuffle/weighted`) | never use Math.random; for distances, angles and powers use `hypot`, `sin`, `cos`, `atan2`, `powi` from `server/sim/detmath.js`, never `Math.hypot` / `sin` / `cos` / `atan2` / `pow` / `**` (their last bits differ between browsers) | diff --git a/docs/design/engine.md b/docs/design/engine.md index afae1825..fa1932fd 100644 --- a/docs/design/engine.md +++ b/docs/design/engine.md @@ -113,7 +113,7 @@ Base stats (from data): `maxHp, atk, def, res` (0–100), `aspd` (100 base), `ba DamageInfo: `{ amount (pre-mitigation), type: 'phys'|'arts'|'true'|'element', element?: 'burn'|'necrosis'|'neural'|'apoptosis', atkScale, defIgnoreFlat, defIgnorePct, resIgnoreFlat, resIgnorePct, mul (multiplier), canDodge, isSkill, isSplash, ignoreSelect (no selection — a 无视无法选择 ability, a direct pick, a debuff's tick: it reaches an airborne 起飞 ally, §21.22), tags[] }`. -Engine helpers (content must use these, never touch internals): `battle.dealDamage(source, target, dmgInfo)`, `battle.heal(source, target, amount, {overheal=false})`, `battle.applyStatus(target, key, { duration, source, value })`, `battle.addBuff(unit, buff)`, `battle.removeBuff(unit, key)`, `battle.spawnToken(ownerUnit|playerId, tokenId, row, col, opts)`, `battle.spawnEnemy(enemyKey, { routeIndex, pos, mods, tag })`, `battle.addProjectile({ from, to|target, speed, onHit, visual })`, `battle.push(e, force, { from, dir, fixed, fixedAngle, inward, effect })` / `battle.pull(e, force, { to, center, stop })` / `battle.pullToFront(e, unit, force)` / `battle.forceLevel(e, force)` / `battle.pushDistance(e, force, { effect })` (the official 力度 − 重量 tables, §20.3; a 静态刚体 — data `staticBody` — is never moved, §21.9; `battle.displace(e, dir, distance)` is the raw mover), `battle.allySelectable(a, by)` / `battle.alliesFor(by, ownerId)` (friendly selection, skipping 孤立 units, §20.3), `battle.unitsInGrid(unit, grid)`, `battle.enemiesInRadius(x, y, r)` (every enemy: enemy-side auras / heals, collisions), `battle.foesInRadius(x, y, r)` (the enemies an operator's area effect can select — no untargetable, no unblocked unrevealed 隐匿 enemy; PRTS 作战机制 §AOE伤害判定, §21.19), `battle.alliesInRadius(x, y, r, ownerId?)`, `battle.addLayers(playerId, bondId, n, reason)` (no-op when gains disabled; at most the room left under `BOND_LAYER_CAP` 999 — `shared/constants.js layerGainRoom`, §20.12; records into result), `battle.loseHp(target, amount, { source, from, sourceless })` (流失 — it skips the damage events: no 受击回复, TAKE_DAMAGE, shield or counter, `damage.js isHpLoss`; only for what the official calls 流失 — "N 真实伤害 per second" effects such as 源石溶剂 are `periodicDamage` damage, §21.12; a 物理流失 is first reduced by the target's DEF, 阿戈尔's devour, §21.19; `sourceless` = 无来源, `source` keeps the credit — leader parts pass damage on 1:1 with it, §20.10), `battle.addCoins(playerId, n)`, `battle.fx(kind, params)` (client VFX event), `battle.rng()` (never `Math.random`), `battle.getPlayer(playerId)` (bonds/band/effects view), `battle.redeploy(unit)` (on its rest tile: where a knocked-out operator lies, else its home; `battle.isReservedTile(r, c)` = a tile no automatic placement takes, `battle.downOn(r, c)` = the knocked-out operator lying there, whose tile no ally deploys or moves onto — §21.24), `battle.after(seconds, fn)` (scheduled callbacks), `battle.every(seconds, fn)`. +Engine helpers (content must use these, never touch internals): `battle.dealDamage(source, target, dmgInfo)`, `battle.heal(source, target, amount, {overheal=false})`, `battle.applyStatus(target, key, { duration, source, value })`, `battle.addBuff(unit, buff)`, `battle.removeBuff(unit, key)`, `battle.spawnToken(ownerUnit|playerId, tokenId, row, col, opts)`, `battle.spawnEnemy(enemyKey, { routeIndex, pos, mods, tag })`, `battle.addProjectile({ from, to|target, speed, onHit, visual })`, `battle.push(e, force, { from, dir, fixed, fixedAngle, inward, effect })` / `battle.pull(e, force, { to, center, stop })` / `battle.pullToFront(e, unit, force)` / `battle.forceLevel(e, force)` / `battle.pushDistance(e, force, { effect })` (the official 力度 − 重量 tables, §20.3; a 静态刚体 — data `staticBody` — is never moved, §21.9; a push / pull then holds the enemy in its 失衡 state — no walking, normal attack or skill — for the PRTS 位移时间 / force window, 0.2.2, SIM.md §6; `battle.displace(e, dir, distance)` is the raw mover), `battle.allySelectable(a, by)` / `battle.alliesFor(by, ownerId)` (friendly selection, skipping 孤立 units, §20.3), `battle.unitsInGrid(unit, grid)`, `battle.enemiesInRadius(x, y, r)` (every enemy: enemy-side auras / heals, collisions), `battle.foesInRadius(x, y, r)` (the enemies an operator's area effect can select — no untargetable, no unblocked unrevealed 隐匿 enemy; PRTS 作战机制 §AOE伤害判定, §21.19), `battle.alliesInRadius(x, y, r, ownerId?)`, `battle.addLayers(playerId, bondId, n, reason)` (no-op when gains disabled; at most the room left under `BOND_LAYER_CAP` 999 — `shared/constants.js layerGainRoom`, §20.12; records into result), `battle.loseHp(target, amount, { source, from, sourceless })` (流失 — it skips the damage events: no 受击回复, TAKE_DAMAGE, shield or counter, `damage.js isHpLoss`; only for what the official calls 流失 — "N 真实伤害 per second" effects such as 源石溶剂 are `periodicDamage` damage, §21.12; a 物理流失 is first reduced by the target's DEF, 阿戈尔's devour, §21.19; `sourceless` = 无来源, `source` keeps the credit — leader parts pass damage on 1:1 with it, §20.10), `battle.addCoins(playerId, n)`, `battle.fx(kind, params)` (client VFX event), `battle.rng()` (never `Math.random`), `battle.getPlayer(playerId)` (bonds/band/effects view), `battle.redeploy(unit)` (on its rest tile: where a knocked-out operator lies, else its home; `battle.isReservedTile(r, c)` = a tile no automatic placement takes, `battle.downOn(r, c)` = the knocked-out operator lying there, whose tile no ally deploys or moves onto — §21.24), `battle.after(seconds, fn)` (scheduled callbacks), `battle.every(seconds, fn)`. ### 5.5 Combat rules (engine) @@ -122,7 +122,7 @@ Engine helpers (content must use these, never touch internals): `battle.dealDama - **Blocking** (contact radius, PRTS 游戏数据基础 §阻挡半径 / 作战机制 "中点判定…案例:阻挡"; `constants.js BLOCK_RADIUS`, `Battle._checkBlock`, §19.2): an operator with free capacity blocks an unblocked, blockable enemy whose position lies within its block radius of its centre — ground 0.7071 (squared 0.49999037), 0.8944 × the blocker's 阻挡半径倍率 for blockFly units vs flyers (起飞; mod `blockRadiusScale` = 倍率 − 1 — PRTS 游戏数据基础 "飞行阻挡半径 = 0.8944 × 阻挡半径倍率", 凯尔希·思衡托 +0.23), devices 0.4472 (阻隔工事 / 障碍物); air units (FLY, 近地悬浮, 浮空) only by blockFly units. A ground enemy is never blocked by a unit standing on a tile ground units cannot pass (围墙 / 围栏: PRTS 地形机制 "部署在其中的单位,若当前阻挡类型为'地面阻挡'则无法阻挡敌人" — an enemy pushed or pulled against the fence walks on; air blocking there stays [ASSUMED], §21.23) nor by an airborne (起飞) unit, which blocks flyers only (§21.22). An enemy holding 不可阻挡 (PRTS 异常效果 BLOCK_FREE 「无法阻挡/被阻挡,自动解除阻挡」) — `unblockable` (恐惧, 诱导, enemy abilities), 浮空, and 沉睡 (SLEEPING = 无法行动+无敌+不可阻挡) — is never blocked and is released at once: a sleeping enemy frees its blocker's slot, stays where it is and, once awake, is blocked again only by a blocker with room (§24.9). The nearest such operator wins (ties: scan order [ASSUMED]). It is re-checked every tick, moving or not, so another operator in contact with room takes the enemy over when its blocker dies, is withdrawn or is stunned, and an operator whose capacity frees up grabs an overlapping enemy; one that finds no room walks on. A stunned or frozen enemy is checked too — 晕眩 / 冻结 hold no 不可阻挡 (PRTS 异常效果: the STUN / FROZEN state machines stop its moves and attacks) —, so an operator redeployed beside a held enemy blocks it where it stands and lifts its 隐匿; one held short of contact is blocked once it walks in after the status (GitHub #232; until 0.2.0 the check waited for the status to end). A head-on enemy stops at contact (≈ 0.71 tile), outside the blocker's tile. Enemy uses `blockCnt` capacity (default 1). Blocked enemies stop moving and attack their blocker if melee (or anyone in range if ranged, blocker first). **Every blocker** — melee units (重装要塞 / 领主 / 哨戒铁卫 included), summons and a ranged operator on a melee tile alike — whose attack hits enemies may always target the enemies it blocks, in range or not, whatever its facing, and targets them first — a 速射手's air priority (优先攻击空中单位) excepted, which comes before the enemy it blocks (the owner's decision of 2026-10-08, GitHub #220) — ("可以选择且优先选择阻挡单位", PRTS 选择器; the user's rule after playtest #6, "阻挡了就一定要能打到": officially the collision pushes a blocked enemy to its blocker's front; `Battle.blockedTargets`, `targeting.js sortEnemyTargets`; §20.3 — it replaces the playtest #5 QA's melee-only restriction of §19.2). A healer (dmgType `heal`, or a skill attack turned into a heal) selects injured allies only and keeps healing while it blocks (PRTS 卫戍协议/帮助 "对于医疗干员(咒愈师分支除外),攻击目标为需要治疗的单位"; §21.17); 咒愈师 follow the blocker rule. The huge leaders are 自缚 + unblockable (§7). - **Operator attacks**: every `interval` s if a valid target exists; targets = up to `maxTargets` (default 1) from `unitsInGrid(rangeGrid)` (a `rangeAoe` profile — 阵法术师, 轰击术师 — takes every selectable enemy in range, §21.18; 「同时攻击阻挡的所有敌人」 — 强攻手 / 重剑手 / 推击手 and the skills worded so, `hitAllBlocked` — up to the block count, never fewer than 1, since 0.2.0: PRTS 分支特性信息 "普通攻击最大目标数等于阻挡数(不会低于1)"), priority: (1) the enemies it blocks (every blocker, in range or not, §20.3), (2) profession/trait priorities (e.g. fly-first snipers, `trait` text parsed by build-data into `targetPriority`), (3) enemy with the **least remaining path distance** to its goal, ties → earliest spawned. Melee (no ranged trait) and ground-only attacks cannot hit air units (`Unit.isFlying`: FLY, or a 近地悬浮 / 浮空 enemy — PRTS "算作空中单位", §19.1). Stealthed enemies can't be targeted unless blocked or revealed — or within 3 s of a block's end (§22.8). Ranged ops fire projectiles (speed ~12 tiles/s, instant for melee/arts-beam classes as data indicates); damage applies on impact; a 锁定攻击范围 AoE (`rangeAoe`) strikes every selectable enemy on its range at once with instant hits (§21.18). - **Healers** (`dmgType heal`): target the ally in range with the lowest HP% below 100%, never a 禁疗 / 孤立 unit (tokens.json `abnormal`, `noHeal`; §20.3; 史尔特尔 during 余烬, §22.7), and never the enemies they block — also while blocking (§21.17); do nothing otherwise (SP still regenerates). -- **Enemy AI**: follow the route (checkpoints; WALK paths recomputed on the grid when devices change); when blocked stop & fight (`dmgType 'none'` enemies never attack unless content arms them through `e.profile` — 转译基底's armed forms, §21.4); ranged enemies (`rangeRadius > 0`) attack ops whose 0.25 collider touches their radius (centre distance ≤ `rangeRadius` + 0.25, §3, §20.4): the enemy's own target rule filters the candidates first (`profile.canTarget`: 只攻击地面单位 …), then priority blocker → special priority → highest taunt → **latest deployed** (`aggroSeq`) — PRTS 索敌 "阻挡→特殊优先级→仇恨值→最早出现"; a stealthed ally is attacked only by the enemy it blocks (§19.1) — and not even by that one when its 索敌不受阻挡影响 (自制投石机, `profile.blockFree`: it selects as if unblocked, §25.18) —, and an enemy's area effects — splash, blasts, area skills, zones, jumps — and buff auras skip it unless it blocks that enemy, while 迷彩 does not protect from splash and the other area effects (`targeting.js areaSelectable` / `auraSelectable`, §22.12); an airborne (起飞) ally is never a ground enemy's selection — picks, area damage, zones and statuses skip it, while 无视无法选择 abilities, direct picks, debuff ticks and flying units still reach it (§21.22); unblocked, they stand for each attack's clip (enemies.json `attackAnim`: its wind-up before the strike and the rest of the clip after it, shortened when the attacks come quicker than the clip; `ATTACK_PAUSE = 0.35 s` after the strike when no clip is known; a 「不停止移动」 attacker never stops; §22.14); any enemy whose block ends after its strike (its blocker stunned by it, knocked out, retreated) stands for the rest of that clip too — PRTS 状态机: the enemy's COMBAT state ends with its attack — and a displacement ends a stand (0.2.0). Every enemy attack strikes at its clip's damage frame after its swing starts — the first one of a contact too —, and a stun / freeze / sleep / 浮空, hiding, 缴械, 恐惧 or 战栗 (blocked) before that frame cuts the swing: no strike, the next swing starts from its wind-up (0.2.0, `ai.js attackWindup`; PRTS 状态机 / 异常效果 STUNNED; no clip known: no wind-up). FLY enemies ignore ground obstacles (only blockFly units block them) and follow their checkpoint route. A feared enemy runs between random 恐惧可达地块 away from the source (PRTS 诱发移动; `fear.js`); 恐惧 outranks 诱导; the 恐惧 / 诱导 walks re-plan from where the enemy stands after a push or an obstacle change, and the route re-plans when they end (§20.4). +- **Enemy AI**: follow the route (checkpoints; WALK paths recomputed on the grid when devices change); when blocked stop & fight (`dmgType 'none'` enemies never attack unless content arms them through `e.profile` — 转译基底's armed forms, §21.4); ranged enemies (`rangeRadius > 0`) attack ops whose 0.25 collider touches their radius (centre distance ≤ `rangeRadius` + 0.25, §3, §20.4): the enemy's own target rule filters the candidates first (`profile.canTarget`: 只攻击地面单位 …), then priority blocker → special priority → highest taunt → **latest deployed** (`aggroSeq`) — PRTS 索敌 "阻挡→特殊优先级→仇恨值→最早出现"; a stealthed ally is attacked only by the enemy it blocks (§19.1) — and not even by that one when its 索敌不受阻挡影响 (自制投石机, `profile.blockFree`: it selects as if unblocked, §25.18) —, and an enemy's area effects — splash, blasts, area skills, zones, jumps — and buff auras skip it unless it blocks that enemy, while 迷彩 does not protect from splash and the other area effects (`targeting.js areaSelectable` / `auraSelectable`, §22.12); an airborne (起飞) ally is never a ground enemy's selection — picks, area damage, zones and statuses skip it, while 无视无法选择 abilities, direct picks, debuff ticks and flying units still reach it (§21.22); unblocked, they stand for each attack's clip (enemies.json `attackAnim`: its wind-up before the strike and the rest of the clip after it, shortened when the attacks come quicker than the clip; `ATTACK_PAUSE = 0.35 s` after the strike when no clip is known; a 「不停止移动」 attacker never stops; §22.14); any enemy whose block ends after its strike (its blocker stunned by it, knocked out, retreated) stands for the rest of that clip too — PRTS 状态机: the enemy's COMBAT state ends with its attack — and a displacement ends a stand (0.2.0) and holds the enemy in its 失衡 state (0.2.2: no walking, no attack started, no skill — PRTS 失衡位移机制). Every enemy attack strikes at its clip's damage frame after its swing starts — the first one of a contact too —, and a stun / freeze / sleep / 浮空, hiding, 缴械, 恐惧 or 战栗 (blocked) before that frame cuts the swing: no strike, the next swing starts from its wind-up (0.2.0, `ai.js attackWindup`; PRTS 状态机 / 异常效果 STUNNED; no clip known: no wind-up). FLY enemies ignore ground obstacles (only blockFly units block them) and follow their checkpoint route. A feared enemy runs between random 恐惧可达地块 away from the source (PRTS 诱发移动; `fear.js`); 恐惧 outranks 诱导; the 恐惧 / 诱导 walks re-plan from where the enemy stands after a push or an obstacle change, and the route re-plans when they end (§20.4). - **Damage**: phys `max(A − max(0, D×(1−defIgnorePct) − defIgnoreFlat), 0.05·A)`; arts `max(A × (1 − R'/100), 0.05·A)` with `R' = max(0, R×(1−resIgnorePct) − resIgnoreFlat)`; true = A; 元素伤害 ('elemental') `max(A × (1 − 元素抗性/100), 0.05·A)`. Then × `dmgDealtMul` (source) × `dmgTakenMul` & type-specific taken multipliers (target) × `dmg.mul` — 元素伤害 takes 元素脆弱 (`elementalTakenMul`) alone, not `dmgTakenMul` (脆弱 = "受到的物理、法术、真实伤害提升"). Then **限伤**: on a leader (`isBoss` — the 10 bossInfoDict enemyIds and their mirrored copies; never parts, drones or escorts) in a `'boss'` / `'hidden'` battle a hit with `ceil(final) ≥ 300000` is cancelled — no HP or pool loss, no credit, no damage number, no `damaged` / kill (`shared/constants.js BOSS_HIT_LIMIT`, `damage.js leaderHitCancelled`, after every multiplier and the hit-step blocks, before HP shields; `loseHp` too — a part's 传递, but not 胄's drone link, a share of the pool that is no hit (`noHitLimit`, §25.13.4); the client's `MAX_BATTLE_DAMAGE`, §20.12). Then shields absorb; dodge checks for phys/arts. Element damage fills a gauge (1000; enemy leaders 2000) × `elemTakenMul` × max(0.05, 1 − 损伤抵抗/100), 损伤抵抗 = data `epResistance` (PRTS 元素; the 5 % floor of DMG_e, PRTS 游戏数据基础). An element fill on a target with no HP left is refused (damage.js `hasHp`: no burst on a corpse). A full gauge bursts with the side-specific official effects, as **无来源** damage (no damage-dealt multiplier or penetration of the unit that filled the gauge, which keeps the kill and the stats; §19.5) (sim/constants.js `ELEMENT`; operators: 灼燃 1200 arts + RES −20, 神经 stun 10 s then 1000 true, 凋亡 15 s of 阻回 (`noSp`: no SP gain of any kind) + 静默 with −1 SP/s and 100 arts/s, 侵蚀 DEF −100 then 800 phys; enemies: the "·我方" terms). Every burst starts a **爆发冷却** = its duration (灼燃 / 神经 / 侵蚀 10 s — enemies' 侵蚀 8 s — 凋亡 15 s) during which NO element of the unit fills or can be recovered; when it ends every gauge of the unit resets (§18.3). - **Leak**: an enemy reaching its goal is removed, counted as leaked for its field owner (`sourcePlayerId` for unite). LP accounting is done by the match, not the battle. - **Results**: `damageDealt` / a unit's `dmg` count only HP removed from the other side — a unit's own drain or 流失 and friendly damage are the target's `taken` only (§21.12). diff --git a/server/sim/ai.js b/server/sim/ai.js index ed27e4dc..e55a889b 100644 --- a/server/sim/ai.js +++ b/server/sim/ai.js @@ -540,7 +540,7 @@ export function updateEnemy(b, e, dt) { // 失衡 (UNBALANCE, battle/displacement.js _unbalance): a state machine, not a status — 浮空 ends it (PRTS 术语释义 浮空 // 「触发浮空时清除受到的推/拉力…无法陷入失衡」); while it lasts the enemy neither walks nor starts a normal attack if (e.s.flags.levitate && e.unbalanceUntil > b.time) e.unbalanceUntil = -Infinity; - const unbalanced = b.time < e.unbalanceUntil; + const unbalanced = b.time < e.unbalanceUntil - 1e-9; // (the 1e-9: a float-summed end such as 35/30 s keeps its frame) const prevCd = e.atkCd; if (e.atkCd > 0 && !stunned && !e.hidden) e.atkCd = Math.max(0, e.atkCd - dt); // a stun / freeze / sleep / 浮空 / 失衡 — or leaving the field — takes the enemy out of its attack: a swing short of its @@ -663,6 +663,8 @@ function advanceRoute(b, e, dt, R, standing = false) { if (leg.t === 'appear') { e.x = leg.c; e.y = leg.r; b._setHidden(e, false); + // a relocation is a forced state switch: it ends a 失衡 (PRTS 失衡位移机制 「被强制切换至其他状态机」) + e.unbalanceUntil = -Infinity; R.legIdx++; R.pts = null; continue; } diff --git a/server/sim/battle/displacement.js b/server/sim/battle/displacement.js index 415722d8..911e48be 100644 --- a/server/sim/battle/displacement.js +++ b/server/sim/battle/displacement.js @@ -55,7 +55,7 @@ export class BattleDisplacement { * Returns the tiles moved. */ push(e, force, { from = null, dir = null, fixed = false, fixedAngle = false, inward = false, effect = false } = {}) { - if (!this._displaceable(e)) { this._staticForce(e, force); return 0; } + if (!this._displaceable(e)) { this._staticForce(e, force, false); return 0; } let level = this.forceLevel(e, force); const fx0 = fin(from?.x, e.x), fy0 = fin(from?.y, e.y); const vx = e.x - fx0, vy = e.y - fy0, d = hypot(vx, vy); @@ -89,9 +89,9 @@ export class BattleDisplacement { */ pull(e, force, { to, center = null, stop = PULL_STOP_RADIUS } = {}) { if (!to) return 0; - if (!this._displaceable(e)) { this._staticForce(e, force); return 0; } // an enemy the puller itself blocks already stands in front of it (at contact) [ASSUMED: no pull, no unblocking] - if (center && center.side === 'ally' && e.blockedBy === center) return 0; + if (e && center && center.side === 'ally' && e.blockedBy === center) return 0; + if (!this._displaceable(e)) { this._staticForce(e, force, true); return 0; } const level = this.forceLevel(e, force); // 失衡 for the force window, whatever the travel: the 急停 zeroes the movement, the state lasts to the window's end const hold = pullUnbalance(level); @@ -140,13 +140,16 @@ export class BattleDisplacement { } /** - * A push / pull of 力度 `force` on a 静态刚体 (data `staticBody`; not 失衡免疫 `noDisplace` — PRTS 特殊机制 静态刚体: unlike - * 失衡免疫 it "可以进入失衡状态并启用物理,但物理层面上无法产生任何速度或移动", leaving it 「在失去施力后立刻」 with 「0.1 秒保底持续 - * 时间」): a force > 0 (受力等级 ≥ −2) gives the UNBALANCE_MIN state, no movement. Leaders (the boss pool) stay out. + * A push (`pull` false) / pull of 力度 `force` on a 静态刚体 (data `staticBody`; not 失衡免疫 `noDisplace` — PRTS 特殊机制 + * 静态刚体: unlike 失衡免疫 it "可以进入失衡状态并启用物理,但物理层面上无法产生任何速度或移动", leaving it 「在失去施力后立刻」 with + * 「0.1 秒保底持续时间」): no movement, the state as long as the force acts — a push's is instant (推与拉 「作用时间:瞬间」) so + * the UNBALANCE_MIN floor, a pull's is its window (pullUnbalance: 1 s, 0.5 s below −1); a force > 0 (受力等级 ≥ −2) only. + * Leaders (the boss pool) stay out. */ - _staticForce(e, force) { + _staticForce(e, force, pull = false) { if (!(e && e.alive && e.side === 'enemy' && !e.isBoss && !e.s.flags.noDisplace && e.def && e.def.staticBody)) return; - if (this.forceLevel(e, force) >= -2) this._unbalance(e, UNBALANCE_MIN); + const level = this.forceLevel(e, force); + if (level >= -2) this._unbalance(e, pull ? Math.max(UNBALANCE_MIN, pullUnbalance(level)) : UNBALANCE_MIN); } /** @@ -155,8 +158,9 @@ export class BattleDisplacement { * updateEnemy reads `unbalanceUntil`: the enemy neither walks (恐惧 / 诱导 included) nor starts a normal attack, a swing * short of its frame is cut; checks that ignore the state (水遁忍者's damage, content abilities) go on. The state machine * switch ends the attack clip it stood for (PRTS 状态机: the states are exclusive — UNBALANCE, then DEFAULT → MOVE). It - * ends with its time, or at once with 浮空 (术语释义 浮空 「触发浮空时清除受到的推/拉力…无法陷入失衡」, ai.js) or a 重生. - * No global skill lock: enemy abilities keep ticking (the 「使用技能」 part is not modelled — docs/SIM.md). + * ends with its time, or at once with 浮空 (术语释义 浮空 「触发浮空时清除受到的推/拉力…无法陷入失衡」, ai.js), a 重生 or a route + * APPEAR (forced state switches). No skill meanwhile either (失衡免疫 「…使用技能」): content skills, blinks and scripted moves + * check `enemies/helpers.js unbalancedNow` (docs/SIM.md lists what deliberately keeps running). */ _unbalance(e, dur) { if (!(dur > 0) || !e || !e.alive) return; diff --git a/server/sim/constants.js b/server/sim/constants.js index 598ac848..de3133d0 100644 --- a/server/sim/constants.js +++ b/server/sim/constants.js @@ -136,7 +136,8 @@ export const PUSH_DIRECTIONAL_MIN_DIST = 0.25; * 27, 32, 35; the 0.1 s floor is inside them); PULL_UNBALANCE / PULL_UNBALANCE_WEAK = a pull's force window — 推与拉 §拉力 * 「作用时间默认为 1 s;若本次受力等级 < −1,作用时间改为 0.5 s」, the state lasting to its end after the 急停 too (「目标将仍保持 * 失衡状态至拉力作用时间结束为止」); UNBALANCE_MIN = the 失衡硬直 floor (「立刻拥有 0.1 s 的“失衡硬直”。此期间无法解除失衡状态机 - * ——哪怕已经没有被移动或者受力」) — what a 静态刚体 hit by a force gets (特殊机制 静态刚体 「失衡状态拥有 0.1 秒保底持续时间」). + * ——哪怕已经没有被移动或者受力」) — what a 静态刚体 hit by a push gets (特殊机制 静态刚体 「失衡状态拥有 0.1 秒保底持续时间」; a pulled + * one stays for the pull's window, its force lasting that long). * PR #392 by @xcdoge brought the state; its 0.6387·√tiles was derived from the page's μ = 0.5 单位假设, not printed. */ export const PUSH_UNBALANCE = Object.freeze({ '-2': 0.2, '-1': 0.4, 0: 0.8, 1: 0.9, 2: 32 / 30, 3: 35 / 30 }); diff --git a/server/sim/content/bosses.js b/server/sim/content/bosses.js index e47b7bf7..3bb1e2fe 100644 --- a/server/sim/content/bosses.js +++ b/server/sim/content/bosses.js @@ -73,7 +73,7 @@ import { compileRoute } from '../ai.js'; import { normalizeRoute } from '../simdata.js'; import { ensureInstalled, abOf, attach, T, elem, hurt, targetsNear, allTargets, byPriority, areaAllies, areaAlliesInTiles, fieldAllies, - remainingRoute, stayRoute, stepToward, setHits, hitCount, lpLoss, blinkForward, canCast, absorbArts, nthOf, + remainingRoute, stayRoute, stepToward, setHits, hitCount, lpLoss, blinkForward, canCast, unbalancedNow, absorbArts, nthOf, } from './enemies.js'; import { hypot, powi } from '../detmath.js'; @@ -539,7 +539,7 @@ function kitBlade(ab, e, b, tpl) { if (P.state === 'dive' && e2.alive && ++P.hits >= (bb.max_hit_cnt ?? Infinity)) shotDown(b2, e2); // 仅1次 }, tick(b2, e2, a, dt) { - if (P.state !== 'dive' || !canCast(e2)) return; // a stunned blade does not fly on + if (P.state !== 'dive' || !canCast(e2, false, b2)) return; // a stunned blade does not fly on const t = P.target; if (!stepToward(e2, t.c, t.r, e2.s.moveSpeed * MOVE_SCALE * dt)) return; // arrival: 3×3 stun + DoT (无来源: credited to 胄, as the shell's), then the 初始模式 copy takes over @@ -593,7 +593,7 @@ function kitGun(ab, e, b) { dealt(c, b2, e2) { elem(b2, e2, c.target, 'erosion', e2.s.atk * (T(ab, '1.ep_damage_ratio') ?? 0)); }, // 攻击时附带侵蚀损伤 tick(b2, e2, a, dt) { const ch = P.charge; - if (!ch) return; + if (!ch || unbalancedNow(b2, e2)) return; // (失衡: no scripted move meanwhile) const t = ch.target; const sp = (e2.s.moveSpeed + (T(ab, '3.move_speed') ?? 0)) * MOVE_SCALE * dt; const nx = e2.x, ny = e2.y; @@ -711,7 +711,7 @@ function kitSpring(ab, e) { tick(b, e2, a, dt) { if (!P.up && P.downAt != null && b.time - P.downAt >= regen) raise(b); const d = e2.mem.ab.dash; - if (!d) return; + if (!d || unbalancedNow(b, e2)) return; // (失衡: no scripted move meanwhile) // 追逐模式 lasts the whole gain (PRTS 末日布道 "令全场的“碎铳之簧”获得5秒增益…增益期间切换为追逐模式"; “碎铳之簧” // 追逐模式 "持续追踪令其进入该形态的场上的假想敌:铳移动" — no arrival clause, unlike the 铳's own 冲锋模式): reaching // the gun does not end it, the spring keeps following the gun until the 5 s are over (PR #347 by @CXUtk; until @@ -820,7 +820,7 @@ function pipeCore(ab, e, b, tpl, { form, prefix }) { tick(b2, e2, a, dt) { P.acc += dt; if (P.acc >= (e2.hpRatio < thr ? lo : hi)) { P.acc = 0; summon(b2, e2); } - if (!canCast(e2, false)) return; + if (!canCast(e2, false, b2)) return; P.atk += dt; if (P.atk < e2.s.interval) return; const t = b2.rng.pick(echoesOf(b2, form)); // 优先攻击…形态余音 @@ -1052,7 +1052,7 @@ function kitLion(ab, e, b) { b2.addBuff(e2, { key: 'boss:advance', persist: true, visible: true, mods: { defPct: T(ab, 'advance.def') ?? 0, resFlat: T(ab, 'advance.magic_resistance') ?? 0 } }); b2.fx('phase', { x: e2.x, y: e2.y, id: e2.id, kind: 'lionAdvance' }); } - if (!canCast(e2, false)) return; + if (!canCast(e2, false, b2)) return; P.sp += dt * ENEMY_SP_PER_SEC; if (P.sp >= cost && decree(b2, e2)) P.sp = 0; // 【莫非王土】: ANIMATE_DELAY s after equipment first lies on the field, then once per 王权号令 cycle @@ -1100,7 +1100,7 @@ function kitDeer(ab, e) { b.addBuff(e2, { key: 'boss:madness', persist: true, visible: true, mods: { physTakenMul: 1 - dr, artsTakenMul: 1 - dr } }); // 物理和法术伤害降低 b.fx('phase', { x: e2.x, y: e2.y, id: e2.id, kind: 'deerMadness' }); } - if (!canCast(e2, false)) return; + if (!canCast(e2, false, b)) return; P.acc += dt; if (P.acc < e2.s.interval) return; const cands = fairOrder(b, e2, allTargets(b, e2), P); diff --git a/server/sim/content/enemies.js b/server/sim/content/enemies.js index 1ce33f4d..1c7450ee 100644 --- a/server/sim/content/enemies.js +++ b/server/sim/content/enemies.js @@ -119,7 +119,7 @@ import { LEADER_KITS } from './enemies/leaders.js'; import { hypot } from '../detmath.js'; export { - EROSION, EROSION_BURST, HUSK_REBIRTH, nthOf, abOf, attach, T, silenced, canCast, elem, hurt, alliesInTiles, + EROSION, EROSION_BURST, HUSK_REBIRTH, nthOf, abOf, attach, T, silenced, canCast, unbalancedNow, elem, hurt, alliesInTiles, targetsNear, allTargets, areaAllies, areaAlliesInTiles, fieldAllies, auraAllies, targetAndArea, byPriority, zone, remainingRoute, stayRoute, spawnChildren, stepToward, setHits, hitCount, isHitCount, setForm, lpLoss, expose, expectedFinal, absorbArts, @@ -260,7 +260,7 @@ function onTick(b, dt) { } if (a.fire && a.cd != null) { a.left -= dt; - if (a.left <= 1e-9 && canCast(e, a.sil) && (!a.cond || safe(b, e, () => a.cond(b, e, a)))) { + if (a.left <= 1e-9 && canCast(e, a.sil, b) && (!a.cond || safe(b, e, () => a.cond(b, e, a)))) { a.left = Math.max(TICK, a.cd); a.casts = (a.casts ?? 0) + 1; e.skillAnimUntil = b.time + 0.5; diff --git a/server/sim/content/enemies/archetypes.js b/server/sim/content/enemies/archetypes.js index 5f682f97..abd3d4da 100644 --- a/server/sim/content/enemies/archetypes.js +++ b/server/sim/content/enemies/archetypes.js @@ -7,6 +7,7 @@ import { MOVE_SCALE, COLS, STEALTH_RESTORE } from '../../constants.js'; import { HUSK_REBIRTH, BOOM_RADIUS, POLLUTION_INTERVAL, STEALTH_RESTORE_BY_KEY, DUCK_STEALTH_RESTORE, nthOf, stOf, safe, num, T, elem, hurt, areaAllies, areaAlliesInTiles, zone, spawnChildren, stepToward, setHits, hitCount, setForm, absorbArts, auraBuff, + unbalancedNow, } from './helpers.js'; import { hypot } from '../../detmath.js'; @@ -478,6 +479,7 @@ function husk({ hits, delay, stealthy = true, unblock = false, onHusk = null, ke if (a.state === 'husk' || !(hits > 0) || !(delay > 0)) return false; // the husk's knock-out is the real death a.state = 'husk'; a.rebornUntil = b.time + HUSK_REBIRTH; + e.unbalanceUntil = -Infinity; // a 重生 is a forced state change: it ends a 失衡 (PRTS 失衡位移机制 「例如复活」) a.noAtk = e.profile.noAttack; a.max = a.max ?? e.base.maxHp; rebirthCleanse(b, e); @@ -602,6 +604,7 @@ const skill = (s, fire, { cond = null, sil = false, cd = null, icd = null, id = /** Blink past the blocker along the path (弑君者 / 卢西恩). Returns the start position. */ export function blinkForward(b, e, dist) { + if (unbalancedNow(b, e)) return null; // 失衡: 「无法…使用技能」 — no blink meanwhile const from = { x: e.x, y: e.y }; const R = e.route; let left = dist; diff --git a/server/sim/content/enemies/fly.js b/server/sim/content/enemies/fly.js index 88755fc5..ad533db5 100644 --- a/server/sim/content/enemies/fly.js +++ b/server/sim/content/enemies/fly.js @@ -4,7 +4,7 @@ import { TICK, MOVE_SCALE, PROJECTILE_SPEEDS, ALLY_COLLIDER_RADIUS } from '../../constants.js'; import { num, T, hurt, targetsNear, allTargets, areaAllies, areaAlliesInTiles, fieldAllies, byPriority, spawnChildren, - stepToward, setForm, expose, + stepToward, setForm, expose, unbalancedNow, } from './helpers.js'; import { enemyAura, allyAura, selfFear, skill, kitSelfFear } from './archetypes.js'; import { hypot } from '../../detmath.js'; @@ -258,6 +258,7 @@ export const FLY_KITS = Object.freeze({ spawn(b, e) { e.profile.noAttack = true; }, tick(b, e, a, dt) { if (a.t && !a.t.alive) { a.t = null; b.removeBuff(e, 'ab:dive'); } + if (unbalancedNow(b, e)) return; // 失衡: no dive, no blast meanwhile if (!a.t) { const l = targetsNear(b, e, e.base.rangeRadius || 1).sort((p, q) => hypot(p.x - e.x, p.y - e.y) - hypot(q.x - e.x, q.y - e.y)); if (!l.length) return; diff --git a/server/sim/content/enemies/helpers.js b/server/sim/content/enemies/helpers.js index 700f0e6d..38bbff1e 100644 --- a/server/sim/content/enemies/helpers.js +++ b/server/sim/content/enemies/helpers.js @@ -132,7 +132,15 @@ export function T(ab, ...keys) { for (const k of keys) { const v = ab.t[k]; if ( export function silenced(e) { return !!e.s.flags.silence; } -export function canCast(e, sil) { return e.alive && !e.hidden && !e.s.flags.stun && !(sil && e.s.flags.silence); } +/** + * Is enemy `e` in its 失衡 (UNBALANCE) state now (battle/displacement.js _unbalance; the 1e-9 keeps a float-summed + * end — 35/30 s — on its frame)? PRTS 异常效果图鉴/失衡免疫: 「失衡期间无法自主移动、发动攻击、使用技能」 — content skills + * (canCast), blinks and scripted moves wait for its end. + */ +export function unbalancedNow(b, e) { return !!(b && e && b.time < e.unbalanceUntil - 1e-9); } + +/** Can enemy `e` use a skill now: alive, on the field, not stunned, not silenced (`sil`), not in its 失衡 state (`b` given). */ +export function canCast(e, sil, b = null) { return e.alive && !e.hidden && !e.s.flags.stun && !(sil && e.s.flags.silence) && !unbalancedNow(b, e); } // --------------------------------------------------------------------------------------------------------------- // helpers (exported for bosses.js) diff --git a/server/sim/content/enemies/leaders.js b/server/sim/content/enemies/leaders.js index 3a4fddb8..15dbec7d 100644 --- a/server/sim/content/enemies/leaders.js +++ b/server/sim/content/enemies/leaders.js @@ -6,7 +6,7 @@ import { aggroCmp, areaSelectable } from '../../targeting.js'; import { periodicDamage } from '../../damage.js'; import { nthOf, T, hurt, alliesInTiles, targetsNear, allTargets, areaAllies, areaAlliesInTiles, auraAllies, targetAndArea, - byPriority, setForm, auraBuff, watchDeaths, + byPriority, setForm, auraBuff, watchDeaths, unbalancedNow, } from './helpers.js'; import { unblockable, maxTargets, onHitStatus, splashAttack, pathKeysAhead, noAirTargets, resist, nthAttackStatus, lowHpBuff, @@ -60,8 +60,6 @@ const XI_CROSS_REACH = 2; * Until 0.1.3: 2.5 / 2.5 / −30, the aura only during the 重生 [ASSUMED]. */ const WOLF_RANGE = 1.25, WOLF_AWE_RADIUS = 1.5, WOLF_AWE_ASPD = -50; -/** 失衡 movement speed that turns 弧光锋卫's per-interval bleed into HP per tile moved [ASSUMED]. */ -const UNBALANCE_SPEED = 5; /** 乌顶巨角卢鲁 【角力对决】: the operator cannot be pushed (fixed tiles) ⇒ "更多伤害" multiplier [ASSUMED]. */ const ELK_FAIL_SCALE = 2; @@ -722,7 +720,7 @@ function kitElk(ab) { const ch = P.ch; if (!ch) return; if (e.s.flags.stun || !ch.t.alive || e.blockedBy !== ch.t) { stop(b, e); b.fx('phase', { x: e.x, y: e.y, id: e.id, kind: 'chargeBroken' }); return; } - if (b.time + 1e-9 < ch.until) return; + if (b.time + 1e-9 < ch.until || unbalancedNow(b, e)) return; // a 失衡 that did not move it holds the clash (no skill meanwhile) stop(b, e); b.fx('explode', { x: ch.t.x, y: ch.t.y, r: 0.5, kind: 'elkClash' }); hurt(b, e, ch.t, e.s.atk * ((s && s.bb.atk_scale_s) ?? 1) * ELK_FAIL_SCALE, 'phys'); @@ -773,12 +771,23 @@ export const LEADER_KITS = Object.freeze({ enemy_2085_skzjxd: (ab) => [unblockable(), frontGuard(T(ab, 'Weakness.damage_resistance') ?? 0, faceCrowd)], enemy_2085_skzjxd_2: (ab) => [unblockable(), frontGuard(T(ab, 'Weakness.damage_resistance') ?? 0, faceCrowd)], // (鸭爵 strategy) same // 失衡 (pushed / pulled by operators) - enemy_1328_cbjedi: (ab) => [unbalanced((b, e, a, d) => { // 弧光锋卫 · takes damage in proportion to the distance moved while unbalanced - // PRTS 修正 "失衡移动时持续受到真实伤害", "处于失衡状态时,每0.066s受到400点无来源真实持续伤害" (伤害分类: 弧光锋卫失衡状态下的自残 - // 伤害 is BUFF damage): damage, not a 流失 (player report D1 audit) - const v = T(ab, 'unbalanced_bleed.damage') ?? 0, iv = T(ab, 'unbalanced_bleed.interval') ?? 1; - if (v > 0 && iv > 0) b.dealDamage(null, e, { ...periodicDamage((v * d) / (iv * UNBALANCE_SPEED)), tags: ['dot', 'periodic', 'unbalanced'] }); - })], + enemy_1328_cbjedi: (ab) => { // 弧光锋卫 · bleeds while in its 失衡 state + // PRTS 修正 "失衡移动时持续受到真实伤害", 天赋 "处于失衡状态时,每0.066s受到400点无来源真实持续伤害" (data unbalanced_bleed.damage / + // .interval; 伤害分类: 弧光锋卫失衡状态下的自残伤害 is BUFF damage): damage, not a 流失 (player report D1 audit) — every `interval` + // s for as long as the state lasts (battle/displacement.js _unbalance: a push's 位移时间, a pull's force window even + // after the 急停 or with no movement). Until 0.2.2 one hit in proportion to the tiles moved [ASSUMED], from the position jump. + const v = T(ab, 'unbalanced_bleed.damage') ?? 0, iv = T(ab, 'unbalanced_bleed.interval') ?? 0; + return [{ + tick(b, e, a, dt) { + if (!(v > 0 && iv > 0) || !unbalancedNow(b, e)) { a.bleed = 0; return; } + a.bleed = (a.bleed ?? 0) + dt; + while (a.bleed >= iv - 1e-9 && e.alive) { + a.bleed -= iv; + b.dealDamage(null, e, { ...periodicDamage(v), tags: ['dot', 'periodic', 'unbalanced'] }); + } + }, + }]; + }, enemy_10112_ymgds: (ab) => [unbalanced((b, e) => { // 冒失的小弟 · stunned after being unbalanced const st = T(ab, 'StunAfterUnbalance.stun') ?? 0; if (st > 0) b.applyStatus(e, 'stun', { duration: st, source: null }); diff --git a/test/content/enemies_bosses.test.js b/test/content/enemies_bosses.test.js index 80d57185..3879d7c7 100644 --- a/test/content/enemies_bosses.test.js +++ b/test/content/enemies_bosses.test.js @@ -2068,7 +2068,7 @@ test(`${nm('enemy_10098_crhro')}: 重生 once after ${tb('enemy_10098_crhro', 'r assert.ok(!e.alive); }); -test('失衡: 弧光锋卫 bleeds per tile pushed; 冒失的小弟 is stunned; 拥霜羽兽 drops its egg (faster, unblockable)', () => { +test('失衡: 弧光锋卫 bleeds every 0.066 s while unbalanced; 冒失的小弟 is stunned; 拥霜羽兽 drops its egg (faster, unblockable)', () => { const h = arena({ hooks: ['statusApplied'] }); h.step(); const j = put(h, 'enemy_1328_cbjedi', [10, 7]); @@ -2076,17 +2076,20 @@ test('失衡: 弧光锋卫 bleeds per tile pushed; 冒失的小弟 is stunned; const p = put(h, 'enemy_10141_xdpeng_2', [12, 7]); h.step(2); const hp0 = j.hp; - const moved = h.b.displace(j, { x: 1, y: 0 }, 1, { force: 3 }); + // 弧光锋卫: its 失衡 state — a 受力等级 0 push holds 0.8 s (24 frames) — bleeds unbalanced_bleed.damage every .interval s + // (PRTS "处于失衡状态时,每0.066s受到400点无来源真实持续伤害"): 12 hits; until 0.2.2 one hit per tile moved [ASSUMED] + h.b.push(j, j.s.massLevel, { from: { x: j.x - 1, y: j.y } }); h.b.displace(g, { x: 1, y: 0 }, 1, { force: 3 }); h.b.displace(p, { x: 1, y: 0 }, 1, { force: 3 }); h.step(); - approx(hp0 - j.hp, (tb('enemy_1328_cbjedi', 'unbalanced_bleed.damage') * moved) / (tb('enemy_1328_cbjedi', 'unbalanced_bleed.interval') * 5), 0.05); assert.equal(statuses(h, g.id, 'stun').length, 1); approx(statuses(h, g.id, 'stun')[0].duration, tb('enemy_10112_ymgds', 'StunAfterUnbalance.stun')); assert.ok(p.s.flags.unblockable); assert.equal(p.findBuff('ab:noEgg').mods.moveMul, 1 + tb('enemy_10141_xdpeng_2', 'speed.move_speed')); assert.ok(p.profile.noAttack, '拥霜羽兽 失去蛋的模式: 不进行普通攻击 (no attack, so no stand for its clip)'); assert.equal(typeof p.profile.canTarget === 'function' && p.profile.canTarget({ isFlying: true }), false, '拥霜羽兽: 不会攻击飞行单位'); + h.run(0.8); + approx(hp0 - j.hp, 12 * tb('enemy_1328_cbjedi', 'unbalanced_bleed.damage'), 1e-6); // 雪孩子: pushed into high ground (row 12 col 2 is 'h' on the flat stage) ⇒ hitWall.value const sn = put(h, 'enemy_10138_xdsnow', [10, 3]); const sn2 = put(h, 'enemy_10138_xdsnow', [11, 6]); diff --git a/test/content/feedback1d-solvent.test.js b/test/content/feedback1d-solvent.test.js index 153a9601..e0c2694d 100644 --- a/test/content/feedback1d-solvent.test.js +++ b/test/content/feedback1d-solvent.test.js @@ -450,8 +450,8 @@ test('enemy-side BUFF damage (PRTS 伤害分类 "深水区/涨潮水蚀", "弧 const j = h.spawn('enemy_1328_cbjedi', { pos: [10, 7], routeIndex: 0, mods: { speedMul: 0 } }); h.step(2); const hp0 = j.hp; - h.b.displace(j, { x: 1, y: 0 }, 1, { force: 3 }); - h.step(); + h.b.push(j, 3, { from: { x: j.x - 1, y: j.y } }); // its 失衡 state (the bleed runs while it lasts) + h.run(0.2); const bleed = h.hooksOf('damaged').filter((c) => c.target === j); assert.ok(bleed.length >= 1 && hp0 > j.hp, 'bled'); for (const c of bleed) { assert.equal(c.source, null); assert.equal(c.type, 'true'); assert.ok(!hpLoss(c), '失衡 bleed is damage'); } diff --git a/test/golden/bonds.json b/test/golden/bonds.json index 27e31575..86bd3d6d 100644 --- a/test/golden/bonds.json +++ b/test/golden/bonds.json @@ -93,8 +93,8 @@ "round": 5, "seed": 4108057433, "waveId": "act1autochess_05", - "time": 60.27, - "ticks": 1808, + "time": 53, + "ticks": 1590, "reason": "cleared", "killed": 21, "total": 21, @@ -102,24 +102,24 @@ "bossHpLeft": null, "rngDraws": 29, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":72522,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{}}}, + "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,103.12,1,3,1,14295,2231,0,32,1], + ["p1",1,"op","chess_char_3_12_a",2,null,1134.53,1,3,3,12656,1199,0,26,1], ["p1",2,"op","chess_char_1_06_a",1,null,1137,1,4,2,2896,0,0,13,1], ["p1",3,"op","chess_char_1_13_a",1,null,913,1,6,3,2746,0,0,12,1], ["p1",4,"op","chess_char_3_08_a",1,null,1594,1,8,1,6742,0,0,10,1], ["p1",5,"op","chess_char_3_09_a",1,null,1267,1,9,1,13794,0,0,27,1], ["p1",6,"op","chess_char_3_10_a",1,null,1650,1,10,0,7040,0,0,8,1], - ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,5,12,20370,0,0,24,3], + ["p1",7,"op","chess_char_3_11_a",1,null,1316,1,5,10,17813,0,0,20,3], ["p1",8,"op","chess_char_3_13_a",1,null,1064,1,7,1,4639,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,243,27000],"enemy_1251_lysyta":[15,15,0,48,37125],"enemy_1328_cbjedi":[1,1,0,1940,9000]}, - "hooks": [1,31,1808,176,176,224,219,0,21,21,15,15,0,9752,12,11,21,0,1,21,0,0,0], - "events": {"atk":194,"deploy":8,"die":21,"dmg":219,"engage":8,"fx":38,"skill":30,"spawn":31,"status":20}, + "enemies": {"enemy_1249_lysdb_2":[5,5,0,205,27000],"enemy_1251_lysyta":[15,15,0,24,37125],"enemy_1328_cbjedi":[1,1,0,970,9000]}, + "hooks": [1,31,1590,160,160,214,209,0,21,21,15,14,0,8522,11,11,21,0,1,21,0,0,0], + "events": {"atk":178,"deploy":8,"die":21,"dmg":209,"engage":8,"fx":38,"skill":29,"spawn":31,"status":19}, "fx": {"aoe":1,"displace":12,"pull":12,"shieldBreak":5,"strike":3,"taunt":1,"volley":3,"zone":1}, - "snaps": "c6b020b2 1c788562 9da6272d cd36ff9d d5b5678d 63be814b" + "snaps": "c6b020b2 1c788562 9da6272d d0f3ec29 4ca17634 09b68c9c" }, "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", @@ -144,8 +144,8 @@ ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2644,1,5,0,0,0,0,0,0], ["p1",2,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1402,1,7,2,41957,5880,6023,40,3], ["p1",3,"op","chess_char_1_13_b",1,"uniequip_002_podego",815.5,1,9,0,36527,0,0,34,5], - ["p1",4,"op","chess_char_2_14_b",1,"uniequip_002_flower",1544,1,10,0,0,0,435,19,1], - ["p1",5,"op","chess_char_1_06_a",1,null,1137,1,11,2,22568,1537,1023,40,1], + ["p1",4,"op","chess_char_2_14_b",1,"uniequip_002_flower",1544,1,10,0,0,0,448,19,1], + ["p1",5,"op","chess_char_1_06_a",1,null,1137,1,11,2,22568,1537,1010,40,1], ["p1",6,"op","chess_char_1_13_a",1,null,913,1,4,0,0,0,0,0,0], ["p1",7,"op","chess_char_4_10_b",1,"uniequip_002_aroma",1664,1,8,1,11499,64,0,8,2], ["p1",8,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,6,2,17222,31,31,9,1], @@ -156,10 +156,10 @@ ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null] ], "enemies": {"enemy_1005_yokai_2":[4,4,0,85,5357],"enemy_1005_yokai_3":[2,2,0,862,69120],"enemy_9009_acfort":[2,2,0,685,55296]}, - "hooks": [1,21,2964,212,212,351,351,1970,8,8,13,11,0,11247,107,0,8,0,1,7,0,0,0], + "hooks": [1,21,2964,212,212,351,351,1963,8,8,13,11,0,11247,107,0,8,0,1,7,0,0,0], "events": {"atk":212,"deploy":10,"die":8,"dmg":351,"engage":5,"fx":36,"heal":82,"skill":24,"spawn":21,"status":80}, "fx": {"beam":2,"counter":16,"pull":1,"slippery":2,"taunt":4,"tornado":1,"tornadoPulse":5,"zone":5}, - "snaps": "574ee580 09a0f1f4 bfc664da e9ec3f0c 3b21cd95 a6acc441 61c2f36b 303868a6 ffd954e0 97cea3c3" + "snaps": "574ee580 09a0f1f4 bfc664da e9ec3f0c 3b21cd95 a6acc441 614de77c 4ac709f7 4f380796 4158a688" }, "bond-egirShip-low": { "about": "阿戈尔 low: tier 1 layers 1; chess_char_1_04_a chess_char_3_16_a chess_char_2_07_a chess_char_3_18_a chess_char_3_05_a chess_char_3_14_a chess_char_3_17_a chess_char_3_19_a token_10028_vigil_wolf", @@ -524,7 +524,7 @@ "hooks": [1,27,2080,221,221,421,421,1602,18,18,8,7,0,7504,13,16,16,0,1,18,1,0,0], "events": {"atk":245,"deploy":8,"die":18,"dmg":413,"engage":5,"fx":57,"heal":48,"layer":1,"skill":15,"spawn":27,"status":50}, "fx": {"displace":14,"garrison":1,"healField":1,"liberate":3,"phase":2,"redistribute":15,"reweave":1,"sandChains":2,"shield":1,"slash":16,"truesilver":1}, - "snaps": "657d1bd5 dd4a6c63 5e39c4b6 9485b163 f601c36f 7699a7ce 5912c331" + "snaps": "657d1bd5 dd4a6c63 ae660140 73869bd4 7e2f65ec f09d259d d3913f6a" }, "bond-kazimierzShip-high": { "about": "卡西米尔 high: tier 2 layers 999; chess_char_2_18_b chess_char_3_12_b chess_char_5_08_b chess_char_4_19_b chess_char_1_19_b chess_char_2_12_b chess_char_3_17_b chess_char_5_10_b", @@ -867,7 +867,7 @@ "hooks": [1,31,4881,472,472,793,805,0,20,21,32,30,8,10728,75,7,18,0,1,21,3,3,0], "events": {"atk":507,"deploy":11,"die":21,"dmg":796,"engage":9,"fx":157,"layer":3,"skill":62,"spawn":29,"status":159}, "fx": {"aoe":9,"buff":1,"burst":3,"charge":13,"counter":8,"crit":57,"displace":28,"garrison":3,"quadShot":2,"ripple":9,"sentry":1,"sermon":1,"shadowWeave":11,"shield":1,"soul":3,"stealth":4,"substitute":1,"summon":1,"swap":1}, - "snaps": "05658c81 b2907752 ead04df4 478efd02 d1141f15 996c1ea1 2b4a83db a04411b6 a5761ef5 325d24d8 bbf423e9 8aca2f53 c0a962a9 74308e41 8047910b 5c77ad28 de91902b" + "snaps": "05658c81 4864ae17 7f92bb0e 8f4e6718 c5c1091f 2ed43fcb e18779d5 88082474 8caa6667 3aedbf02 6fa3510b e7f2e4e1 979eef93 8ee3417b 1951310d aad88122 9f9294a9" }, "bond-preciShip-low": { "about": "精准 low: tier 1 layers 1; chess_char_4_11_a chess_char_4_04_a chess_char_4_07_a chess_char_4_09_a chess_char_1_09_a chess_char_1_17_a chess_char_4_10_a chess_char_4_12_a token_10041_cathy_catsld token_10041_cathy_catsld", @@ -1224,7 +1224,7 @@ "hooks": [1,30,1565,155,155,221,221,0,19,19,8,7,0,7825,39,3,19,0,1,19,0,0,0], "events": {"atk":206,"deploy":8,"die":19,"dmg":221,"engage":8,"fx":47,"skill":15,"spawn":30,"status":66}, "fx": {"aoe":1,"displace":20,"pull":20,"sleep":2,"strike":2,"volley":2}, - "snaps": "3fec6d69 cbf41b37 0dc808f0 23d91444 2db20031 1441efbb" + "snaps": "3fec6d69 cbf41b37 0dc808f0 382f9e64 ce63ae51 e497f05b" }, "bond-skillfulShip-high": { "about": "灵巧 high: tier 1 layers 999; chess_char_5_08_b chess_char_5_05_b chess_char_5_07_b chess_char_1_14_b chess_char_2_04_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b", @@ -1296,10 +1296,10 @@ ["-","~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,643,34560],"enemy_1118_lidbox_2":[2,2,0,5918,21888]}, - "hooks": [1,28,1674,167,167,291,291,0,19,19,7,5,4,7074,32,20,17,0,1,24,2,0,0], + "hooks": [1,28,1674,167,167,291,291,0,19,19,7,5,4,7074,32,19,17,0,1,24,2,0,0], "events": {"atk":210,"deploy":9,"die":19,"dmg":289,"engage":8,"fx":47,"layer":2,"skill":12,"spawn":28,"status":97}, "fx": {"aoe":1,"camouflage":1,"counter":4,"displace":19,"dp":3,"garrison":2,"liberate":2,"phase":4,"ripple":6,"sermon":1,"shield":3,"wolfShadow":1}, - "snaps": "0b626ccd 4c5c3338 6be5bea8 7eb547a7 b7dca0f5 333a3221" + "snaps": "0b626ccd 4c5c3338 6be5bea8 7eb547a7 584fb208 f9dc0314" }, "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", @@ -1421,7 +1421,7 @@ "hooks": [1,40,3108,217,228,341,354,47,30,30,53,50,0,13734,46,4,30,0,1,30,0,2,0], "events": {"atk":257,"deploy":8,"die":30,"dmg":354,"engage":3,"fx":150,"heal":47,"skill":103,"spawn":40,"status":107}, "fx": {"aoe":8,"burst":2,"counter":6,"displace":30,"heal":32,"iceSpike":32,"ripple":15,"shadowWeave":19,"soul":2,"stealth":4}, - "snaps": "900e366c 4c623662 9b24da57 88686361 3743dd96 16bcbb0a ceae7cfe 4efae7da c9a75cab bfea9ee9 664303d4" + "snaps": "900e366c 297e912f 3e7a566e 2b969380 1120bc1b 1cde9dd3 6d76deff d726fb6b 28affdda 6e3e3d18 b02d8661" }, "bond-suntShip-low": { "about": "绝技 low: tier 1 layers 1; chess_char_1_02_b chess_char_4_17_a chess_char_4_18_a chess_char_4_16_a chess_char_1_01_b chess_char_4_12_a chess_char_4_13_a chess_char_4_14_a", @@ -1505,8 +1505,8 @@ "round": 5, "seed": 2212044350, "waveId": "act1autochess_05", - "time": 45.9, - "ticks": 1377, + "time": 43.5, + "ticks": 1305, "reason": "cleared", "killed": 21, "total": 21, @@ -1514,22 +1514,22 @@ "bossHpLeft": null, "rngDraws": 9, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":68408,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"miraShip":1}}}, + "players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":65805,"bossDmg":0,"heal":0,"deaths":0,"layerGains":{"miraShip":1}}}, "units": [ - ["p1",1,"op","chess_char_4_23_a",2,null,3075.82,1,2,0,0,0,0,0,0], - ["p1",2,"op","chess_char_4_22_a",2,null,2918.82,1,4,5,9800,0,0,15,1], - ["p1",3,"op","chess_char_1_19_a",1,null,2378.82,1,6,1,4770,0,0,13,1], + ["p1",1,"op","chess_char_4_23_a",2,null,2179,1,2,0,0,0,0,0,0], + ["p1",2,"op","chess_char_4_22_a",2,null,2022,1,4,5,6319,0,0,13,1], + ["p1",3,"op","chess_char_1_19_a",1,null,1482,1,6,1,4770,0,0,13,1], ["p1",4,"op","chess_char_1_01_a",1,null,1123,1,7,3,14007,0,0,25,1], ["p1",5,"op","chess_char_4_24_a",1,null,1726,1,8,3,16645,0,0,17,1], - ["p1",6,"op","chess_char_4_25_a",2,null,1379.73,1,1,0,0,0,0,0,1], - ["p1",7,"op","chess_char_4_26_a",0,null,2264.82,1,3,0,0,0,0,0,0], - ["p1",8,"op","chess_char_3_01_a",2,null,2408.76,1,5,9,23188,0,0,43,1] + ["p1",6,"op","chess_char_4_25_a",2,null,1379.73,1,1,0,0,0,0,0,0], + ["p1",7,"op","chess_char_4_26_a",0,null,1368,1,3,0,0,0,0,0,0], + ["p1",8,"op","chess_char_3_01_a",2,null,1511.94,1,5,9,24065,0,0,40,1] ], "enemies": {"enemy_1249_lysdb_2":[5,5,0,0,27000],"enemy_1251_lysyta":[15,15,0,0,37125],"enemy_1328_cbjedi":[1,1,0,0,9000]}, - "hooks": [1,29,1377,113,113,267,262,1,21,21,6,3,14,5930,35,0,21,0,1,21,1,0,0], - "events": {"atk":137,"deploy":8,"die":21,"dmg":262,"engage":5,"fx":51,"layer":1,"skill":9,"spawn":29,"status":99}, - "fx": {"buff":1,"displace":12,"garrison":1,"garrisonGrant":1,"mote":16,"reweave":1,"sandChains":1,"shieldBreak":5,"slash":5,"sp":1,"spGift":6,"truesilver":1}, - "snaps": "b42f9eae 30c763c9 93204068 0638457f 44034563" + "hooks": [1,29,1305,108,108,267,262,1,21,21,5,3,14,5668,35,0,21,0,1,21,1,0,0], + "events": {"atk":130,"deploy":8,"die":21,"dmg":262,"engage":5,"fx":48,"layer":1,"skill":8,"spawn":29,"status":94}, + "fx": {"buff":1,"displace":12,"garrison":1,"garrisonGrant":1,"mote":16,"sandChains":1,"shieldBreak":5,"slash":3,"sp":1,"spGift":6,"truesilver":1}, + "snaps": "b42f9eae 30c763c9 93204068 613009b0 fa377289" }, "bond-swiftShip-high": { "about": "迅捷 high: tier 1 layers 999; chess_char_4_11_b chess_char_1_19_b chess_char_4_07_b chess_char_4_09_b chess_char_1_01_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b token_10041_cathy_catsld token_10041_cathy_catsld", @@ -1671,8 +1671,8 @@ "round": 5, "seed": 3923365115, "waveId": "act1autochess_05", - "time": 61.03, - "ticks": 1831, + "time": 60.97, + "ticks": 1829, "reason": "cleared", "killed": 16, "total": 17, @@ -1693,10 +1693,10 @@ ["p1",9,"token","token_10000_silent_healrb",null,null,1000,1,29,0,0,0,1487,20,null] ], "enemies": {"enemy_1116_liprr":[11,11,0,2293,54450],"enemy_1116_liprr_2":[4,4,0,932,27000],"enemy_1118_lidbox_2":[2,1,1,5086,16330]}, - "hooks": [1,28,1831,191,191,202,202,34,18,21,15,15,0,8324,2,26,17,1,1,18,0,0,0], + "hooks": [1,28,1829,191,191,202,202,34,18,21,15,15,0,8314,2,26,17,1,1,18,0,0,0], "events": {"atk":225,"deploy":11,"die":20,"dmg":202,"engage":6,"fx":55,"heal":34,"leak":1,"skill":30,"spawn":26,"status":25}, "fx": {"aoe":1,"displace":19,"liberate":3,"phase":5,"pull":19,"strike":3,"summon":2,"volley":3}, - "snaps": "1774960c 545a8597 76b2bced 15a43322 4a542e7d 74a46ccc 4ac83a35" + "snaps": "1774960c 545a8597 76b2bced 1a13fea9 2d1fca5c 71f3785d" }, "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", diff --git a/test/golden/diy.json b/test/golden/diy.json index df808a84..ffe8b216 100644 --- a/test/golden/diy.json +++ b/test/golden/diy.json @@ -2171,7 +2171,7 @@ "hooks": [1,128,6000,640,640,2628,4423,0,114,114,18,18,0,21502,828,127,114,0,1,114,0,190,0], "events": {"atk":779,"deploy":12,"die":114,"dmg":4091,"engage":3,"fx":692,"skill":36,"spawn":128,"status":1989}, "fx": {"burst":190,"displace":16,"shield":471,"zone":15}, - "snaps": "00a90afe 8ab9145f 036b1fc4 25e62a9f 926a9f27 847ba8da 6f592c87 f0b39913 a8bc3409 c574d2f9 8e6e657a ee991610 3f41e73a acc324f7 c9f42c79 6afc3cf2 6d141175 e21e35cc 68fdc79e 470986f3" + "snaps": "00a90afe 8ab9145f 036b1fc4 25e62a9f 926a9f27 847ba8da 6f592c87 f0b39913 a8bc3409 c574d2f9 8e6e657a ee991610 3f41e73a acc324f7 c9f42c79 73ef15ea 6b6b5817 1cfd8a96 a6544dac 1b108919" }, "diy-054": { "about": "5_diy1_a=zumama/S1 5_diy2_a=zumama/S2 5_diy1_a=zumama/S3 5_diy2_b=zumama/S1 5_diy1_b=zumama/S2 5_diy2_b=zumama/S3 5_diy1_b=zumama/S1/002_zumama 5_diy2_b=zumama/S2/002_zumama 5_diy1_b=zumama/S3/002_zumama 5_diy2_b=zumama/S1/003_zumama 5_diy1_b=zumama/S2/003_zumama 5_diy2_b=zumama/S3/003_zumama", @@ -3649,10 +3649,10 @@ ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_ray",0,0,91,0,37527,3978,0,23,1] ], "enemies": {"enemy_1045_hammer_2":[18,0,18,12600,41514],"enemy_1061_zomshd":[60,2,58,25580,370999]}, - "hooks": [1,102,6797,439,439,439,439,21112,22,98,35,34,0,17667,60,23,78,76,1,22,0,0,0], + "hooks": [1,102,6797,439,439,439,439,21109,22,98,35,34,0,17665,60,23,78,76,1,22,0,0,0], "events": {"atk":439,"deploy":24,"die":22,"dmg":439,"engage":12,"fx":15,"leak":76,"skill":69,"spawn":90,"status":68}, "fx": {"displace":15}, - "snaps": "302b7a03 2519ff22 acad49df ef6229e8 0ca972e6 99d14293 0b4e6cfe 29980344 1677c1ca 9af09a6e a78d20cb 0e1146f7 b474b3cf 3b82e1a2 255ddf94 3f4712aa 87f33be9 ce3fade5 dad45133 0a4b0f36 d62aae1e fd5fd458 80709e27" + "snaps": "302b7a03 2519ff22 acad49df 476444fe 84001ee9 7f5ea75c cde3e736 2de38cc6 580e0df8 1a36023e bb44ef3b af252743 dfc80dc3 a53bbaf5 50461f15 c306df7f f4547d2b 01c2c098 0f2df4af c84d6a15 111a4ddd ed9921db cd8111f4" }, "diy-086": { "about": "5_diy1_a=ascln/S1 5_diy2_a=ascln/S2 5_diy1_a=ascln/S3 5_diy2_b=ascln/S1 5_diy1_b=ascln/S2 5_diy2_b=ascln/S3 5_diy1_b=ascln/S1/002_ascln 5_diy2_b=ascln/S2/002_ascln 5_diy1_b=ascln/S3/002_ascln 5_diy2_b=ascln/S1/003_ascln 5_diy1_b=ascln/S2/003_ascln 5_diy2_b=ascln/S3/003_ascln", @@ -4369,7 +4369,7 @@ "hooks": [1,162,6900,901,901,932,917,7223,69,154,0,38,0,0,31,73,117,85,1,69,0,0,15], "events": {"atk":901,"deploy":42,"die":69,"dmg":900,"engage":12,"fx":421,"leak":85,"skill":83,"spawn":132,"status":110}, "fx": {"aoe":12,"buff":15,"displace":12,"dodge":15,"expose":352,"shield":15}, - "snaps": "22057a43 e979e325 58c21275 0e318d82 f1a489d0 480e8f9e 36a09ceb bfc0f20e 5886d7cf d7218bb5 646e4158 aecbb06c a19fe55c 3f64f495 dc1a8d69 6bccee64 70e0d18c 1dd120a2 d9751fc3 542489ba 40ebcaf2 5914d84a dc001495" + "snaps": "22057a43 e979e325 58c21275 0e318d82 f1a489d0 480e8f9e 36a09ceb bfc0f20e 5886d7cf d7218bb5 646e4158 aecbb06c 9604abcd 6a923e78 a41d4144 d73a9759 8487c279 acdd7ab7 78e43dde f57d7a3b 11b5e047 3755c2e3 c0b6bae4" }, "diy-103": { "about": "6_diy1_b=phatom/S1 6_diy2_b=phatom/S2 6_diy1_b=phatom/S3 6_diy2_b=phatom/S1/002_phatom 6_diy1_b=phatom/S2/002_phatom 6_diy2_b=phatom/S3/002_phatom 6_diy1_b=phatom/S1/003_phatom 6_diy2_b=phatom/S2/003_phatom 6_diy1_b=phatom/S3/003_phatom 6_diy2_b=phatom/S1/004_phatom 6_diy1_b=phatom/S2/004_phatom 6_diy2_b=phatom/S3/004_phatom", @@ -4931,54 +4931,54 @@ "bossHpLeft": null, "rngDraws": 0, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":156,"total":96,"perfect":false,"leaks":70,"leaksUncounted":0,"coins":0,"dmg":502125,"bossDmg":0,"heal":0,"deaths":9,"layerGains":{}}}, + "players": {"p1":{"killed":156,"total":96,"perfect":false,"leaks":75,"leaksUncounted":0,"coins":0,"dmg":503892,"bossDmg":0,"heal":0,"deaths":9,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_ebnhlz",1570,1,10,4,57606,0,0,47,5], ["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_ebnhlz",1570,1,11,8,31893,0,0,30,0], - ["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_ebnhlz",1570,1,1,7,8950,0,0,24,4], - ["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_ebnhlz",1650,1,3,21,40584,0,0,76,8], + ["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_ebnhlz",1570,1,1,6,9039,0,0,24,4], + ["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_ebnhlz",1650,1,3,22,40056,0,0,76,8], ["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_ebnhlz",1650,1,5,8,49875,0,0,62,7], ["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_ebnhlz",1650,1,7,9,128862,0,0,49,4], ["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_004_ebnhlz",1570,1,9,0,0,0,0,0,3], ["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_004_ebnhlz",1570,1,12,5,61651,0,0,50,14], - ["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_004_ebnhlz",0,0,158,0,1442,3140,0,6,2], - ["p1",10,"op","chess_char_6_diy1_a",0,null,1359,1,264,7,10369,2718,0,32,2], - ["p1",11,"op","chess_char_6_diy2_a",1,null,53.27,1,252,4,17545,4024,0,21,0], - ["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,250,2,17986,4077,0,15,1], + ["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_004_ebnhlz",0,0,171,0,1442,3140,0,6,2], + ["p1",10,"op","chess_char_6_diy1_a",0,null,1359,1,270,7,12574,2718,0,28,2], + ["p1",11,"op","chess_char_6_diy2_a",1,null,53.27,1,257,4,17545,4024,0,21,0], + ["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,255,2,17986,4077,0,15,1], ["p1","~1","token","token_10024_ebnhlz_rcube",null,null,1000,0,29,0,0,0,0,0,null], ["p1","~2","token","token_10024_ebnhlz_rcube",null,null,1000,0,30,0,13232,0,0,0,null], - ["p1","~3","token","token_10024_ebnhlz_rcube",null,null,1000,0,50,0,5752,0,0,0,null], - ["p1","~4","token","token_10024_ebnhlz_rcube",null,null,1000,0,70,0,5177,0,0,0,null], - ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,72,0,0,0,0,0,null], - ["p1","~6","token","token_10024_ebnhlz_rcube",null,null,1000,0,85,0,5177,0,0,0,null], - ["p1","~7","token","token_10024_ebnhlz_rcube",null,null,1000,0,108,0,14956,0,0,0,null], - ["p1","~8","token","token_10024_ebnhlz_rcube",null,null,1000,0,114,0,0,0,0,0,null], - ["p1","~9","token","token_10024_ebnhlz_rcube",null,null,1000,0,126,0,2876,0,0,0,null], - ["p1","~10","token","token_10024_ebnhlz_rcube",null,null,1000,0,144,0,2305,0,0,0,null], - ["p1","~11","token","token_10024_ebnhlz_rcube",null,null,1000,0,155,0,0,0,0,0,null], - ["p1","~12","token","token_10024_ebnhlz_rcube",null,null,1000,0,165,0,5177,0,0,0,null], - ["p1","~13","token","token_10024_ebnhlz_rcube",null,null,1000,0,193,0,9778,0,0,0,null], - ["p1","~14","token","token_10024_ebnhlz_rcube",null,null,1000,0,203,0,0,0,0,0,null], - ["p1","~15","token","token_10024_ebnhlz_rcube",null,null,1000,0,210,0,2876,0,0,0,null], - ["p1","~16","token","token_10024_ebnhlz_rcube",null,null,1000,0,227,0,2880,0,0,0,null], - ["p1","~17","token","token_10024_ebnhlz_rcube",null,null,1000,0,236,0,0,0,0,0,null], - ["p1","~18","token","token_10024_ebnhlz_rcube",null,null,1000,0,239,0,5177,0,0,0,null], - ["p1","~19","token","token_10024_ebnhlz_rcube",null,null,1000,0,255,0,0,0,0,0,null], - ["p1","~20","token","token_10024_ebnhlz_rcube",null,null,1000,1,265,0,0,0,0,0,null], - ["p1","~21","token","token_10024_ebnhlz_rcube",null,null,1000,1,266,0,0,0,0,0,null] + ["p1","~3","token","token_10024_ebnhlz_rcube",null,null,1000,0,53,0,5752,0,0,0,null], + ["p1","~4","token","token_10024_ebnhlz_rcube",null,null,1000,0,73,0,5177,0,0,0,null], + ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,75,0,0,0,0,0,null], + ["p1","~6","token","token_10024_ebnhlz_rcube",null,null,1000,0,90,0,5177,0,0,0,null], + ["p1","~7","token","token_10024_ebnhlz_rcube",null,null,1000,0,113,0,14956,0,0,0,null], + ["p1","~8","token","token_10024_ebnhlz_rcube",null,null,1000,0,119,0,0,0,0,0,null], + ["p1","~9","token","token_10024_ebnhlz_rcube",null,null,1000,0,131,0,2876,0,0,0,null], + ["p1","~10","token","token_10024_ebnhlz_rcube",null,null,1000,0,149,0,2305,0,0,0,null], + ["p1","~11","token","token_10024_ebnhlz_rcube",null,null,1000,0,160,0,0,0,0,0,null], + ["p1","~12","token","token_10024_ebnhlz_rcube",null,null,1000,0,169,0,5177,0,0,0,null], + ["p1","~13","token","token_10024_ebnhlz_rcube",null,null,1000,0,198,0,9778,0,0,0,null], + ["p1","~14","token","token_10024_ebnhlz_rcube",null,null,1000,0,208,0,0,0,0,0,null], + ["p1","~15","token","token_10024_ebnhlz_rcube",null,null,1000,0,215,0,2876,0,0,0,null], + ["p1","~16","token","token_10024_ebnhlz_rcube",null,null,1000,0,232,0,2880,0,0,0,null], + ["p1","~17","token","token_10024_ebnhlz_rcube",null,null,1000,0,241,0,0,0,0,0,null], + ["p1","~18","token","token_10024_ebnhlz_rcube",null,null,1000,0,244,0,5177,0,0,0,null], + ["p1","~19","token","token_10024_ebnhlz_rcube",null,null,1000,0,260,0,0,0,0,0,null], + ["p1","~20","token","token_10024_ebnhlz_rcube",null,null,1000,1,269,0,0,0,0,0,null], + ["p1","~21","token","token_10024_ebnhlz_rcube",null,null,1000,1,271,0,0,0,0,0,null] ], "enemies": { - "enemy_1195_sfyin": [45,23,22,8411,157028], - "enemy_1196_msfyin": [46,39,7,0,219], - "enemy_1197_sfshu": [39,24,15,5548,191163], - "enemy_1198_msfshu": [72,58,14,0,455], + "enemy_1195_sfyin": [45,24,21,8532,158214], + "enemy_1196_msfyin": [48,38,10,0,206], + "enemy_1197_sfshu": [39,25,14,5427,191874], + "enemy_1198_msfshu": [75,57,18,0,467], "enemy_1199_sfjin": [12,12,0,0,186325], - "enemy_1200_msfjin": [12,0,12,0,463] + "enemy_1200_msfjin": [12,0,12,0,462] }, - "hooks": [1,266,6045,462,462,2436,2558,0,165,254,50,48,0,29626,0,23,226,70,1,165,0,0,0], - "events": {"atk":462,"deploy":40,"die":184,"dmg":2558,"engage":11,"fx":189,"leak":70,"skill":98,"spawn":259}, - "fx": {"aoe":13,"displace":17,"pull":17,"summon":80,"volley":62}, - "snaps": "25481013 aa3440f3 4685e7a3 b08da51f 9f758a7e 37f43c16 c79ffc87 98cbe2a3 ba2b8f1a 1407a331 0e301670 3e7c7b8f d9043c7d fd78a0d2 ce3af6b8 cd061667 724823f0 6505b73d 0a991be8 88f7aaf0 6d682149" + "hooks": [1,271,6045,458,458,2438,2560,0,165,259,50,48,0,29723,0,25,231,75,1,165,0,0,0], + "events": {"atk":458,"deploy":40,"die":184,"dmg":2560,"engage":11,"fx":191,"leak":75,"skill":98,"spawn":264}, + "fx": {"aoe":13,"displace":17,"pull":17,"summon":82,"volley":62}, + "snaps": "25481013 7d0ae0b0 5e7274eb eb59dbd9 80733c26 48610a2e 56dbac9d 7538534b 89a3194b 3aecb43b 411a2af4 4000a3f1 fadeb322 c770c858 88b7d077 166a9639 e1072711 ed68f0ac f92763f7 6ba5cdb8 8889fcde" }, "diy-116": { "about": "6_diy1_b=ebnhlz/S1 6_diy2_b=ebnhlz/S2 6_diy1_b=ebnhlz/S3 6_diy2_b=ebnhlz/S1/002_ebnhlz 6_diy1_b=ebnhlz/S2/002_ebnhlz 6_diy2_b=ebnhlz/S3/002_ebnhlz 6_diy1_b=ebnhlz/S1/003_ebnhlz 6_diy2_b=ebnhlz/S2/003_ebnhlz 6_diy1_b=ebnhlz/S3/003_ebnhlz 6_diy2_b=ebnhlz/S1/004_ebnhlz 6_diy1_b=ebnhlz/S2/004_ebnhlz 6_diy2_b=ebnhlz/S3/004_ebnhlz", @@ -4992,38 +4992,37 @@ "time": 217.6, "ticks": 6528, "reason": "cleared", - "killed": 2, + "killed": 3, "total": 123, "unspawned": 0, "bossHpLeft": null, "rngDraws": 8, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":2,"total":123,"perfect":false,"leaks":121,"leaksUncounted":0,"coins":0,"dmg":288443,"bossDmg":0,"heal":0,"deaths":21,"layerGains":{}}}, + "players": {"p1":{"killed":3,"total":123,"perfect":false,"leaks":120,"leaksUncounted":0,"coins":0,"dmg":294141,"bossDmg":0,"heal":0,"deaths":21,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_6_diy1_b",0,"none",0,0,113,1,21882,3140,0,27,2], - ["p1",2,"op","chess_char_6_diy2_b",1,"none",0,0,90,0,27538,3140,0,18,4], - ["p1",3,"op","chess_char_6_diy1_b",2,"none",0,0,130,0,21860,3140,0,9,1], - ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_ebnhlz",0,0,141,0,16756,3140,0,16,1], - ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_002_ebnhlz",0,0,150,0,18745,4710,0,11,1], - ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_ebnhlz",0,0,77,0,12168,3140,0,7,0], - ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_003_ebnhlz",0,0,73,0,21305,3490,0,5,0], + ["p1",1,"op","chess_char_6_diy1_b",0,"none",0,0,91,1,34465,3140,0,27,2], + ["p1",2,"op","chess_char_6_diy2_b",1,"none",0,0,113,0,18932,3140,0,10,2], + ["p1",3,"op","chess_char_6_diy1_b",2,"none",0,0,129,0,21860,3140,0,9,1], + ["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_ebnhlz",0,0,140,0,15159,3140,0,14,1], + ["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_002_ebnhlz",0,0,149,0,18745,4710,0,11,1], + ["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_ebnhlz",0,0,78,0,12168,3140,0,7,0], + ["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_003_ebnhlz",0,0,74,0,21305,3490,0,5,0], ["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_003_ebnhlz",0,0,7,0,13689,1745,0,5,0], ["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_003_ebnhlz",0,0,9,0,26215,1745,0,8,1], - ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_004_ebnhlz",0,0,75,0,11814,3140,0,5,0], - ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_004_ebnhlz",0,0,4,0,29683,1570,0,5,1], - ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_004_ebnhlz",0,0,6,0,29794,1570,0,8,1], + ["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_004_ebnhlz",0,0,76,0,11814,3140,0,5,0], + ["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_004_ebnhlz",0,0,4,0,29832,1570,0,6,2], + ["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_004_ebnhlz",0,0,6,0,29126,1570,0,8,1], ["p1","~1","token","token_10024_ebnhlz_rcube",null,null,1000,0,26,0,1907,0,0,0,null], ["p1","~2","token","token_10024_ebnhlz_rcube",null,null,1000,0,27,0,18005,0,0,0,null], ["p1","~3","token","token_10024_ebnhlz_rcube",null,null,1000,0,28,0,5052,0,0,0,null], ["p1","~4","token","token_10024_ebnhlz_rcube",null,null,1000,0,37,1,5491,0,0,0,null], - ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,98,0,2724,0,0,0,null], - ["p1","~6","token","token_10024_ebnhlz_rcube",null,null,1000,0,121,0,3814,0,0,0,null] + ["p1","~5","token","token_10024_ebnhlz_rcube",null,null,1000,0,38,1,10376,0,0,0,null] ], - "enemies": {"enemy_1006_shield_3":[21,0,21,8025,130381],"enemy_1043_zomsbr":[66,1,65,15266,80405],"enemy_1402_tgshd_2":[36,1,35,10379,77656]}, - "hooks": [1,150,6528,190,190,340,360,12512,23,150,12,12,0,9354,0,24,123,121,1,23,0,1,0], - "events": {"atk":190,"deploy":27,"die":29,"dmg":360,"engage":12,"fx":105,"leak":121,"skill":24,"spawn":141,"status":42}, - "fx": {"aoe":6,"burst":1,"displace":8,"expose":63,"pull":8,"summon":6,"volley":13}, - "snaps": "691ad5fa 646da9eb a1f8ea41 fe731b91 6da71566 f4f8e4ee 3c0f0da0 fc5fe596 caf68706 1d5933fe 129d0ab4 332dad2e 4bff2df6 9bc1ad09 2c797af1 d1372b1b e9c44ce5 c57571d6 05a6f455 7a1ed9e8 d1f17800 e205c30f" + "enemies": {"enemy_1006_shield_3":[21,0,21,8523,127871],"enemy_1043_zomsbr":[66,2,64,14767,76925],"enemy_1402_tgshd_2":[36,1,35,10379,89345]}, + "hooks": [1,149,6528,178,178,332,359,10940,24,149,11,11,0,9065,0,25,123,120,1,24,0,1,0], + "events": {"atk":178,"deploy":26,"die":29,"dmg":359,"engage":12,"fx":113,"leak":120,"skill":22,"spawn":140,"status":46}, + "fx": {"aoe":5,"burst":1,"displace":9,"expose":70,"pull":9,"summon":5,"volley":14}, + "snaps": "691ad5fa 8c0879a7 60069559 f61219f3 a319b595 ee8eba93 e8c33ea0 4a4f2bad 4a11e85e 89d61e0c d2af6b10 542a1a2d e8c10270 780a5b63 5cc92cd4 47f29927 02d2e3ae ad654e95 51427d74 29086ff4 cf4f4fc4 4aab434f" }, "diy-117": { "about": "5_diy1_a=mgllan/S1 5_diy2_a=mgllan/S2 5_diy1_a=mgllan/S3 5_diy2_b=mgllan/S1 5_diy1_b=mgllan/S2 5_diy2_b=mgllan/S3 5_diy1_b=mgllan/S1/002_mgllan 5_diy2_b=mgllan/S2/002_mgllan 5_diy1_b=mgllan/S3/002_mgllan 5_diy2_b=mgllan/S1/003_mgllan 5_diy1_b=mgllan/S2/003_mgllan 5_diy2_b=mgllan/S3/003_mgllan", diff --git a/test/golden/fields.json b/test/golden/fields.json index 6f876e11..094c7e33 100644 --- a/test/golden/fields.json +++ b/test/golden/fields.json @@ -435,15 +435,15 @@ "rngDraws": 586, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":12,"total":14,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1051588,"bossDmg":348531,"heal":24590,"deaths":18,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1024342,"bossDmg":675841,"heal":11551,"deaths":18,"layerGains":{}} + "p1": {"killed":12,"total":14,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1051583,"bossDmg":348531,"heal":24590,"deaths":18,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":1024346,"bossDmg":675841,"heal":11551,"deaths":18,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",1529.8,1,60,3,127646,6704,420,23,1], + ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",1529.8,1,60,3,127644,6704,420,23,1], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3313.03,1,59,1,18993,8260,1117,13,2], ["p1",3,"op","chess_char_5_14_b",1,"none",0,0,49,0,54350,11582,2258,18,11], ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",0,0,57,0,16983,9470,33,10,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,58,2,402657,4059,549,98,15], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",0,0,58,2,402655,4059,549,98,15], ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",0,0,55,1,85045,10014,2086,30,4], ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,19,0,117239,4097,2126,150,4], ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1058.29,1,62,4,118723,2559,395,35,12], @@ -456,7 +456,7 @@ ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",2322.43,1,63,1,270484,5747,2514,55,5], ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,53,0,148207,3584,462,128,2], ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,14,0,0,3934,1521,0,0], - ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,20,0,63317,5817,3585,73,4], + ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",0,0,20,0,63322,5817,3585,73,4], ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",1501.32,1,64,0,62705,2825,348,61,18], ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1105.8,1,65,0,162943,2741,594,71,13], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], @@ -502,7 +502,7 @@ "weightless": 4, "zone": 296 }, - "snaps": "98983314 a631783a ccc2dc9a bfd1a9d0 9c652c81 40f8d98e 08d313bf e5981c81 697be22d b0240d7c 1d954142 c60f8007 a74df9a8 9f265f02 2eea5c29 3ceddda5 818cf4b3 d569afac 20be7df9 ac07bc57" + "snaps": "ed484d33 33f3d6da 7870ff24 543fba69 70391f85 d04365ca 03abfe93 22b9a98d 175f4779 bef63720 45719c56 008d21fb f4323e9c 87f82a06 a6f06b4d 059aa061 d70a0dbf ab69ce90 7b447a0d 0f2d7bfb" }, "boss-boss_4-solo": { "about": "盐风主教昆图斯 solo pool 4200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -720,9 +720,9 @@ "units": [ ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",3907,1,3,0,141185,0,0,30,2], ["p1",2,"op","chess_char_4_01_b",2,"uniequip_002_rmixer",3537,1,1,0,0,0,0,0,0], - ["p1",3,"op","chess_char_5_14_b",1,"none",2174,1,5,1,34607,0,0,0,13], + ["p1",3,"op","chess_char_5_14_b",1,"none",2174,1,5,1,35215,0,0,0,13], ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",4654.6,1,11,1,25069,1974,1974,15,1], - ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,2,341600,0,0,82,15], + ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",1170,1,7,2,340992,0,0,82,15], ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",1382,1,13,0,197578,0,0,73,6], ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",0,0,15,0,28546,1629,0,52,2], ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",0,0,51,0,161857,3453,231,51,17], @@ -749,10 +749,10 @@ "enemy_1010_demon": [4,4,0,14161,200612], "enemy_9032_aclionk": [1,0,0,41978,1094757] }, - "hooks": [1,63,6000,1187,1211,2290,2305,620,39,41,111,106,0,34547,890,9,19,0,1,27,0,3,0], - "events": {"atk":1274,"deploy":44,"die":41,"dmg":2220,"engage":15,"fx":723,"heal":7,"skill":217,"spawn":41,"status":1221}, + "hooks": [1,63,6000,1187,1211,2289,2304,620,39,41,111,106,0,34547,890,9,19,0,1,27,0,3,0], + "events": {"atk":1274,"deploy":44,"die":41,"dmg":2219,"engage":15,"fx":723,"heal":7,"skill":217,"spawn":41,"status":1221}, "fx": {"aoe":38,"appear":6,"blink":2,"burst":3,"crit":109,"dilemma":6,"disappear":6,"displace":21,"equip":15,"explosion":7,"frostNova":15,"garrisonGrant":1,"iceSpike":44,"overclock":1,"pull":4,"quadShot":3,"revive":2,"ripple":25,"sentry":4,"shadowWeave":6,"shield":1,"soul":3,"sp":15,"stealth":6,"swordRain":44,"swordStorm":8,"telegraph":20,"tornado":5,"tornadoPulse":20,"vest":8,"weightless":6,"zone":269}, - "snaps": "8ef2441b 1f0b7d9b 358031de d7fac848 6bc45581 c14c05ea 9d45ac22 41b0826b f08fb48f f40bdbfc 557a25e0 2ffc6990 e3eab3cd 4805839b 41854b5c efd95f41 8e8c177f 7bd3b7ee 5f3edf58 060ad10f" + "snaps": "8ef2441b 1f0b7d9b 358031de 8a0737dd 27c06d84 de465885 9fcdeb44 e64e7283 1d9ca8dc 20a1c85b 97a58b2f 7e7bb35b 2ad9878a 7dc14844 c16a38c3 a7024372 85516100 60b95b21 2b2dc4a3 176abd14" }, "boss-boss_6-solo": { "about": "阿利斯泰尔,帝国余晖 solo pool 3980000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", @@ -1081,18 +1081,18 @@ "killed": 8, "total": 8, "unspawned": 0, - "bossHpLeft": 3636991, - "rngDraws": 1645, + "bossHpLeft": 3586929, + "rngDraws": 1615, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1813003,"bossDmg":790560,"heal":15516,"deaths":4,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3233639,"bossDmg":1129525,"heal":130347,"deaths":10,"layerGains":{}} + "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1675683,"bossDmg":739063,"heal":15516,"deaths":4,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":3543901,"bossDmg":1230964,"heal":126078,"deaths":10,"layerGains":{}} }, "units": [ ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",2601.77,1,66,0,0,11336,7438,0,2], ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,11,0,25365,227,0,37,1], ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",2535.79,1,17,0,53146,4017,0,51,2], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",204.28,1,7,1,1363387,2333,0,58,8], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1217.02,1,7,1,1226067,1320,0,58,8], ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,9,0,33316,9693,0,46,2], ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",954.58,1,55,0,35830,12093,529,0,4], ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2451.4,1,13,1,69554,0,0,0,11], @@ -1101,16 +1101,16 @@ ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,60,0,50598,9393,349,84,3], ["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,1640,318,4,1], - ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",2057.07,1,67,4,707045,24024,0,312,3], + ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",0,0,67,4,730915,26081,0,317,3], ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",0,0,59,0,231858,17841,0,41,4], - ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,65,0,4091,6660,1695,24,2], - ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",0,0,58,1,483793,26213,0,71,3], - ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",173.1,1,8,0,687440,10444,0,73,3], - ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",0,0,14,0,742766,9295,4040,242,5], - ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1662.91,1,20,0,0,1375,14267,80,1], - ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",0,0,10,0,95777,1439,0,122,3], - ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1680.1,1,41,0,217704,24241,0,59,4], - ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1662.1,1,25,0,0,14000,110345,83,2], + ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,65,0,16117,7380,2415,28,2], + ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",0,0,58,1,602101,26213,0,80,3], + ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",1332.47,1,8,0,674466,3109,0,73,3], + ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",1727.29,1,14,0,924004,6580,2751,263,5], + ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",0,0,20,0,0,3038,8952,78,1], + ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1439,1,10,0,96068,0,0,126,3], + ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1203.55,1,41,0,205207,26966,0,59,4], + ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1588.6,1,25,0,0,14000,111960,83,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], @@ -1127,33 +1127,33 @@ ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1322,1,61,0,0,155,92,0,1], ["p1","~2","token","token_10017_skadi2_dedant",null,null,100,0,62,0,0,0,0,0,null], ["p1","~2","token","token_10040_siege2_vlion",null,null,4000,0,63,0,0,0,0,0,null], - ["p2","~3","token","token_10019_nearl2_sword",null,null,0,0,64,0,33414,6564,0,16,null], + ["p2","~3","token","token_10019_nearl2_sword",null,null,1351.68,0,64,0,33413,5212,0,12,null], ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,1,68,0,0,0,0,0,null] ], "enemies": { "enemy_1267_nhpbr_2": [6,6,0,1500,141894], "enemy_9007_acelem": [2,2,0,18532,309587], - "enemy_9017_achunt_2": [2,0,0,58104,1963009], - "enemy_9018_actrpa": [1,0,0,51655,811529], - "enemy_9019_actrpb": [1,0,0,30033,718108], - "enemy_9020_actrpc": [1,0,0,24632,1185793] + "enemy_9017_achunt_2": [2,0,0,58672,2013071], + "enemy_9018_actrpa": [1,0,0,40802,832791], + "enemy_9019_actrpb": [1,0,0,32263,746620], + "enemy_9020_actrpc": [1,0,0,25887,1259125] }, - "hooks": [1,66,6000,1727,1727,7189,13487,2668,28,39,95,89,277,48035,2985,15,13,0,1,29,0,16,0], - "events": {"atk":2084,"deploy":47,"die":39,"dmg":12976,"engage":22,"fx":2157,"heal":966,"skill":184,"spawn":53,"status":821}, + "hooks": [1,66,6000,1768,1768,7069,13203,2682,27,39,95,90,292,48490,2998,15,13,0,1,28,0,12,0], + "events": {"atk":2132,"deploy":47,"die":39,"dmg":12703,"engage":22,"fx":2158,"heal":961,"skill":185,"spawn":53,"status":790}, "fx": { - "airstrike": 84, - "beam": 26, + "airstrike": 85, + "beam": 31, "blessing": 1, "blink": 5, "bombard": 72, "bombardShell": 72, - "burst": 16, + "burst": 12, "camouflage": 1, "copy": 3, "dash": 24, "displace": 14, "dp": 3, - "drone": 320, + "drone": 319, "droneLock": 14, "drones": 4, "extraAttack": 5, @@ -1181,7 +1181,7 @@ "wanted": 6, "zone": 6 }, - "snaps": "2a921421 57801ce9 e8f35705 fba04fd7 d2a6440c a3b24855 a2d10035 e394b69f 7de21c75 bd6caaad ea4accdc 41ef5240 67c52051 5cd402c4 583f7ecc 859a9f1c 2c2aa8dd d206cf4c 4b695b81 674f683a" + "snaps": "2a921421 57801ce9 e8f35705 fba04fd7 d2a6440c a3b24855 a2d10035 e394b69f 7de21c75 bd6caaad ea4accdc 41ef5240 67c52051 5cd402c4 583f7ecc 859a9f1c a9cf2775 721d01e9 c30e073b 203814c0" }, "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", @@ -1327,7 +1327,7 @@ "weightless": 2, "zone": 160 }, - "snaps": "f891236c f6672d61 f9ae299a bd864733 a34ff855 ee6e490a 8d637482 2808cda1 b8ebc810 72052abe c42b6edb 8a1ce86d f52b121e 6ec9eb74 6a1199ed 05aa4e08 5d012397 6fee9656 361ddec2 24e36087" + "snaps": "f891236c f6672d61 f9ae299a 38137066 7529d68c 7ccc83e3 76a143d3 bd5434d4 792d5035 9a6514ef 4a121dc2 3e3ba3e8 f714ce47 869d9185 409dfa84 85fb9505 93086aba 52a21bef dd22d89f b852066e" }, "hidden-boss_10-solo": { "about": "假想敌:管 solo pool 7600000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", diff --git a/test/golden/matches.json b/test/golden/matches.json index 5874b86f..0c99ec33 100644 --- a/test/golden/matches.json +++ b/test/golden/matches.json @@ -152,7 +152,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, "reward": 320, - "stats": {"activatedLayers":270,"bossDamage":321387,"dmgDealt":2293260,"gold":131,"itemsEquipped":23,"kills":384,"leaks":10,"lpLost":10,"merges":5,"perfectRounds":12,"refreshes":15}, + "stats": {"activatedLayers":270,"bossDamage":321387,"dmgDealt":2290482,"gold":131,"itemsEquipped":23,"kills":384,"leaks":10,"lpLost":10,"merges":5,"perfectRounds":12,"refreshes":15}, "lineup": ["3_20_b@12,5[3_06_e_a+4_08_e_a]","2_14_a@12,7","5_20_b@11,5[6_09_e_a+5_02_e_b]","5_10_a@11,8[4_07_e_a+3_08_e_b]","6_11_a@10,3[4_12_e_a+5_02_e_b]","3_18_a@10,8[2_04_e_b+4_05_e_b]","1_08_a@9,4[1_01_e_a+1_02_e_a]","6_19_a@9,5[4_04_e_a+4_10_e_a]"], "bonds": ["arcaneShip 0/2","deputShip 1/14","emptyShip 1/10","kazimierzShip 0/16","kjeragShip 1/24","maniShip 1/2","miraShip 1/13","preciShip 0/12","sargonShip 0/8","siracusaShip 1/139","soloShip 1/22","steadShip 0/6","suntShip 1/8","swiftShip 1/38"] } @@ -296,7 +296,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, "reward": 340, - "stats": {"activatedLayers":274,"bossDamage":771866,"dmgDealt":2483763,"gold":140,"itemsEquipped":16,"kills":395,"leaks":25,"lpLost":17,"merges":3,"perfectRounds":10,"refreshes":15}, + "stats": {"activatedLayers":274,"bossDamage":771866,"dmgDealt":2481000,"gold":140,"itemsEquipped":16,"kills":395,"leaks":25,"lpLost":17,"merges":3,"perfectRounds":10,"refreshes":15}, "lineup": ["6_12_a@12,5[5_01_e_a+5_02_e_a]","5_10_a@12,7[4_07_e_a+4_08_e_a]","4_14_a@11,8","3_11_a@10,3","5_14_a@9,4[3_08_e_a+3_11_e_a]","1_08_a@9,5[1_01_e_a+4_05_e_a]","6_02_a@9,6","4_10_a@9,8[5_02_e_b+4_10_e_b]"], "bonds": ["arcaneShip 1/30","deputShip 0/14","emptyShip 1/10","kazimierzShip 0/16","kjeragShip 1/56","preciShip 2/55","sargonShip 0/8","siracusaShip 1/75","soloShip 1/15","steadShip 0/21","swiftShip 1/33","visiShip 1/0"] } @@ -436,7 +436,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 0, "reward": 255, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1678545,"gold":111,"itemsEquipped":13,"kills":235,"leaks":49,"lpLost":35,"merges":2,"perfectRounds":8,"refreshes":6}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1673916,"gold":111,"itemsEquipped":13,"kills":235,"leaks":49,"lpLost":35,"merges":2,"perfectRounds":8,"refreshes":6}, "lineup": [], "bonds": ["arcaneShip 0/18","deputShip 0/14","emptyShip 0/10","kazimierzShip 0/8","kjeragShip 0/27","preciShip 0/23","sargonShip 0/8","siracusaShip 0/69","soloShip 0/15","steadShip 0/17","swiftShip 0/8"] } @@ -600,7 +600,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":250,"bossDamage":479924,"dmgDealt":3139636,"gold":139,"itemsEquipped":12,"kills":333,"leaks":7,"lpLost":7,"merges":5,"perfectRounds":12,"refreshes":23}, + "stats": {"activatedLayers":250,"bossDamage":509077,"dmgDealt":3168469,"gold":139,"itemsEquipped":12,"kills":334,"leaks":7,"lpLost":7,"merges":5,"perfectRounds":12,"refreshes":23}, "lineup": ["3_19_b@11,7[2_04_e_b]","5_12_a@11,8","4_10_a@10,5[1_02_e_b+2_01_e_a]","6_06_a@9,4","1_08_b@9,5","6_16_a@9,7","5_20_a@9,8[3_05_e_a+3_02_e_b]","3_13_b@9,9"], "bonds": ["arcaneShip 2/86","miraShip 1/12","preciShip 0/10","sargonShip 0/10","siracusaShip 1/110","skillfulShip 1/36","soloShip 1/6","suntShip 1/0","swiftShip 0/32"] }, @@ -614,7 +614,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":199,"bossDamage":937576,"dmgDealt":3727447,"gold":137,"itemsEquipped":18,"kills":321,"leaks":8,"lpLost":7,"merges":5,"perfectRounds":11,"refreshes":13}, + "stats": {"activatedLayers":199,"bossDamage":908423,"dmgDealt":3696698,"gold":137,"itemsEquipped":18,"kills":321,"leaks":8,"lpLost":7,"merges":5,"perfectRounds":11,"refreshes":13}, "lineup": ["4_20_a@12,8[3_06_e_a]","1_17_b@11,7[3_08_e_a]","4_02_b@11,8[3_02_e_a+4_03_e_b]","4_01_b@10,7[4_04_e_a+1_02_e_a]","6_17_a@10,8[4_06_e_a+4_08_e_a]","6_19_a@9,4[1_05_e_a+1_01_e_a]","4_14_a@9,8","5_07_a@9,9"], "bonds": ["arcaneShip 2/34","kazimierzShip 1/38","kjeragShip 0/8","lateranoShip 0/8","preciShip 2/55","raidShip 1/0","sargonShip 0/10","suntShip 1/0","swiftShip 1/72"] } @@ -1051,7 +1051,7 @@ }, { "round": 2, - "ai_0": [1,45,5,0,0,1,4,"e8a46594",4,"kazimierzShip 0/4, swiftShip 1/4",8,8,0,9], + "ai_0": [1,45,5,0,0,1,4,"62de86cd",4,"kazimierzShip 0/4, swiftShip 1/4",8,8,0,9], "ai_1": [1,26,5,0,0,1,4,"a2ec5116",5,"kazimierzShip 0/5, sargonShip 0/2, soloShip 1/0, swiftShip 1/5",8,8,0,9], "ai_2": [1,28,5,0,0,1,3,"70d74d61",0,"deputShip 0/4, kjeragShip 0/2, soloShip 1/0, victoriaShip 0/6",7,8,1,9], "ai_3": [1,26,5,0,0,1,4,"9e98d014",0,"sargonShip 0/2, soloShip 1/0",8,8,0,9] @@ -1074,63 +1074,63 @@ "round": 5, "ai_0": [1,35,9,0,0,3,8,"62c03eb5",8,"arcaneShip 0/8, kazimierzShip 0/4, preciShip 0/8, swiftShip 1/8",4,17,13,32], "ai_1": [1,16,9,0,0,3,8,"f7768b7d",8,"arcaneShip 1/2, kazimierzShip 0/5, kjeragShip 0/2, preciShip 0/2, sargonShip 0/4, soloShip 1/0, steadShip 0/2, swiftShip 1/6",5,17,12,30], - "ai_2": [1,20,11,0,0,3,8,"246c804d",22,"deputShip 1/10, kazimierzShip 0/2, kjeragShip 0/12, siracusaShip 0/4, soloShip 1/8, steadShip 0/4, swiftShip 1/4, victoriaShip 0/12, yanShip 0/2",9,17,8,32], + "ai_2": [1,21,11,0,0,3,8,"d90f1f12",24,"deputShip 1/10, kazimierzShip 0/2, kjeragShip 0/10, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/8, steadShip 0/4, swiftShip 1/6, victoriaShip 0/10, yanShip 0/2",10,17,7,32], "ai_3": [1,16,8,0,0,3,8,"080ecfab",3,"arcaneShip 0/2, preciShip 0/2, sargonShip 0/2, siracusaShip 1/0, soloShip 1/3",3,17,14,31] }, { "round": 6, "ai_0": [1,35,9,0,0,3,8,"844b219a",33,"arcaneShip 0/8, kazimierzShip 0/4, kjeragShip 0/5, preciShip 2/20, suntShip 1/0, swiftShip 1/13",14,14,0,41], "ai_1": [1,16,9,0,0,3,8,"6faf7f5a",34,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 1/13, kjeragShip 0/2, preciShip 0/2, sargonShip 0/4, siracusaShip 0/6, soloShip 1/2, steadShip 0/2, swiftShip 1/17",13,14,1,40], - "ai_2": [1,20,9,0,0,3,8,"b0c01f2d",53,"deputShip 1/13, egirShip 0/2, kazimierzShip 0/4, kjeragShip 0/12, raidShip 0/2, siracusaShip 0/4, soloShip 1/12, steadShip 2/18, swiftShip 1/10, victoriaShip 0/12, yanShip 0/2",14,14,0,41], + "ai_2": [1,21,9,0,0,3,8,"b0c01f2d",55,"deputShip 1/12, egirShip 0/2, kazimierzShip 0/4, kjeragShip 0/10, raidShip 0/2, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/12, steadShip 2/18, swiftShip 1/13, victoriaShip 0/10, yanShip 0/2",14,14,0,41], "ai_3": [1,16,9,0,0,3,8,"06355ccd",24,"arcaneShip 0/2, deputShip 1/2, preciShip 0/2, sargonShip 1/9, siracusaShip 1/8, soloShip 1/5",6,14,8,41] }, { "round": 7, "ai_0": [1,25,10,0,0,4,8,"8510e7b4",45,"arcaneShip 0/8, kazimierzShip 0/4, kjeragShip 0/5, preciShip 2/27, suntShip 1/0, swiftShip 1/18",7,21,14,51], "ai_1": [1,6,10,0,0,4,8,"017dac16",57,"arcaneShip 1/4, deputShip 1/4, kazimierzShip 1/27, kjeragShip 0/2, preciShip 0/2, sargonShip 0/4, siracusaShip 0/6, soloShip 0/2, steadShip 0/2, swiftShip 1/22",4,21,17,49], - "ai_2": [1,20,10,0,0,4,8,"0c6b8294",80,"deputShip 1/15, egirShip 0/4, kazimierzShip 0/4, kjeragShip 0/14, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/14, steadShip 2/35, swiftShip 1/16, victoriaShip 0/12, yanShip 0/2",21,21,0,52], + "ai_2": [1,21,10,0,0,4,8,"0c6b8294",82,"deputShip 1/14, egirShip 0/4, kazimierzShip 0/4, kjeragShip 0/12, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/4, soloShip 1/14, steadShip 2/35, swiftShip 1/19, victoriaShip 0/10, yanShip 0/2",21,21,0,52], "ai_3": [1,6,10,0,0,4,8,"1968962a",25,"arcaneShip 0/2, deputShip 1/4, preciShip 0/2, sargonShip 0/9, siracusaShip 1/12, skillfulShip 1/2, soloShip 1/7",2,21,19,52] }, { "round": 8, "ai_0": [1,21,11,0,0,4,8,"8a1b740d",78,"arcaneShip 1/10, deputShip 1/2, kazimierzShip 0/7, kjeragShip 0/5, preciShip 2/36, suntShip 1/2, swiftShip 1/28",5,9,4,61], "ai_1": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",2,9,7,60], - "ai_2": [1,14,11,0,0,4,8,"4075ce4e",91,"arcaneShip 2/9, deputShip 1/19, egirShip 0/6, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/2, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/2, soloShip 1/18, steadShip 1/45, swiftShip 0/18, victoriaShip 0/12, yanShip 0/2",3,9,6,63], + "ai_2": [1,15,11,0,0,4,8,"4075ce4e",90,"arcaneShip 2/9, deputShip 1/18, egirShip 0/6, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/2, raidShip 0/4, siracusaShip 0/4, skillfulShip 0/4, soloShip 1/18, steadShip 1/45, swiftShip 0/21, victoriaShip 0/10, yanShip 0/2",3,9,6,63], "ai_3": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",0,9,9,63] }, { "round": 9, "ai_0": [1,21,12,0,1,4,8,"82251d49",167,"arcaneShip 2/16, deputShip 0/2, indomShip 1/12, kazimierzShip 1/37, kjeragShip 0/5, preciShip 2/67, suntShip 1/2, swiftShip 1/33",8,19,11,73], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [1,14,12,0,1,4,8,"33626d88",141,"arcaneShip 2/18, deputShip 1/23, egirShip 0/8, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/4, soloShip 1/22, steadShip 1/56, swiftShip 0/18, victoriaShip 1/18, yanShip 0/2",19,19,0,76], + "ai_2": [1,15,12,0,1,4,8,"33626d88",141,"arcaneShip 2/18, deputShip 1/22, egirShip 0/8, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/6, soloShip 1/22, steadShip 1/57, swiftShip 0/21, victoriaShip 1/16, yanShip 0/2",19,19,0,76], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 10, "ai_0": [1,21,13,0,2,5,8,"a8c1652a",219,"arcaneShip 2/16, deputShip 0/2, indomShip 1/24, kazimierzShip 1/55, kjeragShip 0/5, preciShip 2/84, suntShip 1/2, swiftShip 1/38",15,25,10,86], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [1,14,13,0,2,5,8,"b6041c07",180,"arcaneShip 2/27, deputShip 1/27, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/8, soloShip 1/24, steadShip 1/66, swiftShip 0/18, victoriaShip 1/28, yanShip 0/2",25,25,0,88], + "ai_2": [1,15,13,0,2,5,8,"b6041c07",181,"arcaneShip 2/27, deputShip 1/26, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/10, soloShip 1/24, steadShip 1/68, swiftShip 0/21, victoriaShip 1/26, yanShip 0/2",25,25,0,88], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 11, "ai_0": [1,11,14,0,3,5,8,"7de6a28e",283,"arcaneShip 2/22, deputShip 0/2, indomShip 0/24, kazimierzShip 1/86, kjeragShip 0/16, preciShip 2/102, suntShip 1/2, swiftShip 1/71",10,25,15,101], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [1,8,14,0,1,5,8,"e9b19bda",236,"arcaneShip 1/37, deputShip 2/33, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/14, soloShip 1/30, steadShip 1/80, suntShip 1/4, swiftShip 0/18, victoriaShip 1/38, yanShip 0/4",19,25,6,102], + "ai_2": [1,9,14,0,1,5,8,"e9b19bda",237,"arcaneShip 1/37, deputShip 2/32, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/4, skillfulShip 1/16, soloShip 1/30, steadShip 1/82, suntShip 1/4, swiftShip 0/21, victoriaShip 1/36, yanShip 0/4",19,25,6,102], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 12, "ai_0": [1,1,15,0,0,6,8,"2ed340cf",329,"arcaneShip 2/22, deputShip 0/2, indomShip 0/24, kazimierzShip 1/104, kjeragShip 0/16, preciShip 2/115, suntShip 1/2, swiftShip 1/86",8,47,39,115], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [0,0,13,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/37, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/24, soloShip 0/34, steadShip 0/96, suntShip 0/6, swiftShip 0/18, victoriaShip 0/44, yanShip 0/6",24,47,23,114], + "ai_2": [0,0,13,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/36, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/34, steadShip 0/98, suntShip 0/6, swiftShip 0/21, victoriaShip 0/42, yanShip 0/6",20,47,27,114], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] }, { "round": 13, "ai_0": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/32, deputShip 0/2, indomShip 0/24, kazimierzShip 0/119, kjeragShip 0/19, preciShip 0/129, suntShip 0/2, swiftShip 0/107",10,39,29,126], "ai_1": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/8, emptyShip 0/4, kazimierzShip 0/38, kjeragShip 0/2, preciShip 0/2, sargonShip 0/8, siracusaShip 0/6, soloShip 0/6, steadShip 0/2, swiftShip 0/22",null,null,null,60], - "ai_2": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/37, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/14, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/24, soloShip 0/34, steadShip 0/96, suntShip 0/6, swiftShip 0/18, victoriaShip 0/44, yanShip 0/6",null,null,null,114], + "ai_2": [0,0,0,0,0,5,0,"811c9dc5",0,"arcaneShip 0/55, deputShip 0/36, egirShip 0/10, kazimierzShip 0/4, kjeragShip 0/12, lateranoShip 0/4, raidShip 0/4, siracusaShip 0/6, skillfulShip 0/26, soloShip 0/34, steadShip 0/98, suntShip 0/6, swiftShip 0/21, victoriaShip 0/42, yanShip 0/6",null,null,null,114], "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, deputShip 0/6, preciShip 0/2, sargonShip 0/9, siracusaShip 0/26, skillfulShip 0/4, soloShip 0/9, swiftShip 0/6",null,null,null,63] } ], @@ -1145,7 +1145,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 3, "reward": 298, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3520258,"gold":126,"itemsEquipped":13,"kills":113,"leaks":135,"lpLost":54,"merges":3,"perfectRounds":5,"refreshes":15}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3517086,"gold":126,"itemsEquipped":13,"kills":113,"leaks":135,"lpLost":54,"merges":3,"perfectRounds":5,"refreshes":15}, "lineup": [], "bonds": ["arcaneShip 0/32","deputShip 0/2","indomShip 0/24","kazimierzShip 0/119","kjeragShip 0/19","preciShip 0/129","suntShip 0/2","swiftShip 0/107"] }, @@ -1159,7 +1159,7 @@ "title": null, "trophies": 1, "reward": 149, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":828223,"gold":60,"itemsEquipped":3,"kills":61,"leaks":37,"lpLost":27,"merges":1,"perfectRounds":4,"refreshes":3}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":822166,"gold":60,"itemsEquipped":3,"kills":61,"leaks":37,"lpLost":27,"merges":1,"perfectRounds":4,"refreshes":3}, "lineup": [], "bonds": ["arcaneShip 0/4","deputShip 0/8","emptyShip 0/4","kazimierzShip 0/38","kjeragShip 0/2","preciShip 0/2","sargonShip 0/8","siracusaShip 0/6","soloShip 0/6","steadShip 0/2","swiftShip 0/22"] }, @@ -1173,9 +1173,9 @@ "title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"}, "trophies": 2, "reward": 255, - "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4946661,"gold":114,"itemsEquipped":8,"kills":200,"leaks":47,"lpLost":30,"merges":3,"perfectRounds":6,"refreshes":20}, + "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4886604,"gold":114,"itemsEquipped":8,"kills":196,"leaks":50,"lpLost":29,"merges":3,"perfectRounds":6,"refreshes":20}, "lineup": [], - "bonds": ["arcaneShip 0/55","deputShip 0/37","egirShip 0/10","kazimierzShip 0/4","kjeragShip 0/14","lateranoShip 0/4","raidShip 0/4","siracusaShip 0/6","skillfulShip 0/24","soloShip 0/34","steadShip 0/96","suntShip 0/6","swiftShip 0/18","victoriaShip 0/44","yanShip 0/6"] + "bonds": ["arcaneShip 0/55","deputShip 0/36","egirShip 0/10","kazimierzShip 0/4","kjeragShip 0/12","lateranoShip 0/4","raidShip 0/4","siracusaShip 0/6","skillfulShip 0/26","soloShip 0/34","steadShip 0/98","suntShip 0/6","swiftShip 0/21","victoriaShip 0/42","yanShip 0/6"] }, "ai_3": { "alive": false, @@ -1382,7 +1382,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 0, "reward": 425, - "stats": {"activatedLayers":2281,"bossDamage":4580000,"dmgDealt":6374918,"gold":175,"itemsEquipped":25,"kills":377,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":34}, + "stats": {"activatedLayers":2281,"bossDamage":4580000,"dmgDealt":6374752,"gold":175,"itemsEquipped":25,"kills":377,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":34}, "lineup": ["4_02_b@12,7[3_08_e_a+1_02_e_b]","6_01_a@12,8[3_03_e_a+3_02_e_a]","6_16_a@11,5","3_18_a@11,8[4_11_e_a+4_05_e_b]","4_10_a@10,4[1_05_e_b]","6_05_a@10,5","4_01_b@10,6[4_06_e_a+4_05_e_a]","1_08_b@9,9[4_10_e_a]"], "bonds": ["arcaneShip 2/389","deputShip 0/300","egirShip 0/300","emptyShip 0/300","indomShip 0/308","investShip 0/300","kazimierzShip 0/308","kjeragShip 0/300","lateranoShip 1/322","maniShip 0/300","miraShip 0/300","preciShip 1/302","raidShip 0/300","sargonShip 0/300","siracusaShip 1/345","skillfulShip 0/335","soloShip 1/307","steadShip 0/300","suntShip 1/300","swiftShip 1/316","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"] } @@ -1590,7 +1590,7 @@ "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":201,"bossDamage":239344,"dmgDealt":2835179,"gold":134,"itemsEquipped":22,"kills":267,"leaks":45,"lpLost":14,"merges":3,"perfectRounds":10,"refreshes":21}, + "stats": {"activatedLayers":201,"bossDamage":240142,"dmgDealt":2837269,"gold":134,"itemsEquipped":22,"kills":267,"leaks":45,"lpLost":14,"merges":3,"perfectRounds":10,"refreshes":21}, "lineup": ["6_18_a@12,3[2_01_e_b]","4_10_a@12,4","1_17_b@11,3[4_03_e_a+1_01_e_a]","5_20_a@11,8[6_05_e_a+3_06_e_a]","3_17_b@10,3","3_12_a@10,4[1_02_e_a+3_11_e_a]","5_07_a@10,7[4_02_e_b+4_11_e_a]","1_19_b@10,8[2_01_e_b+4_04_e_b]"], "bonds": ["arcaneShip 2/21","kazimierzShip 1/60","miraShip 1/12","preciShip 0/8","raidShip 1/96","siracusaShip 1/12","skillfulShip 0/3","soloShip 1/0","suntShip 1/0","swiftShip 0/23","yanShip 0/1"] }, @@ -1604,7 +1604,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":314,"bossDamage":540656,"dmgDealt":3686133,"gold":140,"itemsEquipped":17,"kills":311,"leaks":3,"lpLost":3,"merges":3,"perfectRounds":12,"refreshes":22}, + "stats": {"activatedLayers":314,"bossDamage":539858,"dmgDealt":3683624,"gold":140,"itemsEquipped":17,"kills":311,"leaks":3,"lpLost":3,"merges":3,"perfectRounds":12,"refreshes":22}, "lineup": ["3_21_a@12,3[4_08_e_a+6_02_e_a]","4_25_a@12,4","2_01_a@12,5[3_01_e_a]","6_12_a@11,3[1_05_e_a+3_11_e_a]","4_14_b@11,4[1_05_e_b+4_07_e_a]","1_01_b@10,3[3_08_e_a]","5_01_a@10,4[4_05_e_a]","2_13_a@9,4[4_02_e_b]"], "bonds": ["arcaneShip 0/2","deputShip 0/16","emptyShip 1/0","kazimierzShip 0/8","lateranoShip 1/62","preciShip 2/85","sargonShip 0/2","skillfulShip 1/34","soloShip 0/5","suntShip 1/14","swiftShip 1/116","visiShip 1/3"] } diff --git a/test/golden/roster.json b/test/golden/roster.json index 15609f9d..9ffc21e8 100644 --- a/test/golden/roster.json +++ b/test/golden/roster.json @@ -530,7 +530,7 @@ "hooks": [1,137,5100,539,539,1072,1167,387,62,130,21,23,0,8443,79,46,88,37,1,68,12,12,0], "events": {"atk":636,"bounty":4,"deploy":49,"die":93,"dmg":1087,"engage":12,"fx":233,"heal":386,"layer":12,"leak":37,"skill":47,"spawn":128,"status":128}, "fx": {"aoe":20,"blink":3,"buff":1,"burst":12,"coin":29,"displace":33,"explode":34,"garrison":8,"layer":4,"pull":33,"revive":6,"shield":1,"shieldBreak":1,"strike":9,"summon":29,"telegraph":1,"volley":9}, - "snaps": "17903402 6c8167ba 07381013 82bb886b 608b7ec4 49a9f161 e85b61cf 67fd6d17 22a61f87 b284b6f6 4e0b242d df66d3a4 158e2cfb 11543d94 9a2ac26f d2946799 f4dc978a" + "snaps": "17903402 6c8167ba 07381013 82bb886b 608b7ec4 49a9f161 e85b61cf 67fd6d17 2e8295ec 7b44cd2f fe281674 1329f3f1 89e58c86 949f3155 0fac869a 91bdd7cc 305f7a07" }, "roster-009": { "about": "pass 0 band 4: chess_char_3_16_b chess_char_4_01_a chess_char_3_18_b chess_char_4_04_a chess_char_3_13_b chess_char_3_14_b chess_char_3_17_b chess_char_3_19_b chess_char_3_20_b chess_char_3_21_b chess_char_4_02_a chess_char_4_06_a token_10028_vigil_wolf", @@ -605,27 +605,27 @@ "time": 170, "ticks": 5100, "reason": "timeout", - "killed": 44, + "killed": 45, "total": 69, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 94, + "rngDraws": 103, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":44,"total":69,"perfect":false,"leaks":58,"leaksUncounted":0,"coins":4,"dmg":438561,"bossDmg":0,"heal":3295,"deaths":23,"layerGains":{"preciShip":12}} + "p1": {"killed":45,"total":69,"perfect":false,"leaks":57,"leaksUncounted":0,"coins":4,"dmg":449532,"bossDmg":0,"heal":3358,"deaths":23,"layerGains":{"preciShip":12}} }, "units": [ - ["p1",1,"op","chess_char_4_17_a",1,null,0,0,5,0,7251,2849,0,14,0], + ["p1",1,"op","chess_char_4_17_a",1,null,0,0,5,0,4451,2849,0,9,0], ["p1",2,"op","chess_char_4_18_a",1,null,0,0,6,0,3167,4489,1622,4,4], ["p1",3,"op","chess_char_4_11_a",1,null,2144,1,133,0,1453,2934,0,3,1], ["p1",4,"op","chess_char_4_19_a",2,null,0,0,90,1,12530,3120,0,27,1], ["p1",5,"op","chess_char_4_07_a",1,null,1738,1,134,0,1793,3476,0,2,1], - ["p1",6,"op","chess_char_4_16_a",2,null,0,0,126,3,97746,7475,1245,36,6], + ["p1",6,"op","chess_char_4_16_a",2,null,0,0,126,6,110802,7475,1245,36,8], ["p1",7,"op","chess_char_4_09_a",1,null,0,0,120,0,30872,2672,0,19,1], - ["p1",8,"op","chess_char_4_10_a",1,null,0,0,107,1,31925,4894,0,18,1], - ["p1",9,"op","chess_char_4_12_a",2,null,0,0,100,2,25457,3936,428,18,1], - ["p1",10,"op","chess_char_4_13_a",1,null,0,0,96,1,30391,3174,0,50,4], - ["p1",11,"op","chess_char_4_14_a",1,null,0,0,88,16,161487,2552,0,27,3], + ["p1",8,"op","chess_char_4_10_a",1,null,0,0,107,0,35046,4379,0,18,1], + ["p1",9,"op","chess_char_4_12_a",2,null,0,0,104,2,29828,3999,491,22,1], + ["p1",10,"op","chess_char_4_13_a",1,null,0,0,96,1,30170,3174,0,50,4], + ["p1",11,"op","chess_char_4_14_a",1,null,0,0,88,15,154931,2552,0,26,2], ["p1",12,"op","chess_char_4_20_a",2,null,0,0,4,4,34490,1217,0,13,1], ["p1",13,"token","token_10041_cathy_catsld",null,null,100,1,17,0,0,0,0,0,null], ["p1",14,"token","token_10041_cathy_catsld",null,null,100,1,16,0,0,0,0,0,null], @@ -635,26 +635,26 @@ ], "enemies": { "enemy_10034_cnvsax": [1,1,0,344,42998], - "enemy_1005_yokai": [24,17,7,0,63503], - "enemy_1005_yokai_2": [27,8,14,4609,74481], - "enemy_1005_yokai_3": [6,0,5,17480,104731], + "enemy_1005_yokai": [24,17,7,0,62851], + "enemy_1005_yokai_2": [27,8,14,5642,74644], + "enemy_1005_yokai_3": [6,0,5,17677,107239], "enemy_10083_hlbird": [1,1,0,0,6450], - "enemy_10144_xdelk_2": [1,0,1,2927,45336], - "enemy_1050_lslime": [1,0,1,9539,20439], + "enemy_10144_xdelk_2": [1,0,1,2071,43624], + "enemy_1050_lslime": [1,0,1,9318,18436], "enemy_1158_divman": [1,1,0,461,14189], - "enemy_1174_duholy_2": [1,0,1,1152,6043], + "enemy_1174_duholy_2": [1,0,1,2697,5206], "enemy_1204_msfhu_2": [1,0,1,0,10], "enemy_1267_nhpbr_2": [1,0,1,160,8090], - "enemy_1269_nhfly": [33,16,17,5535,27200], - "enemy_1321_wdarft": [1,0,1,0,3974], + "enemy_1269_nhfly": [33,17,16,3903,39468], + "enemy_1321_wdarft": [1,0,1,0,5210], "enemy_1422_lrsldr_2": [1,0,1,0,21116], - "enemy_1516_jakill": [1,0,1,582,0], + "enemy_1516_jakill": [1,0,1,62,0], "enemy_2034_sythef_2": [1,0,1,0,0] }, - "hooks": [1,132,5100,442,442,1125,1088,303,68,119,24,25,0,7928,385,11,102,52,1,201,3,0,23], - "events": {"atk":540,"bounty":2,"deploy":27,"die":67,"dmg":996,"engage":12,"fx":194,"heal":7,"layer":3,"leak":52,"skill":50,"spawn":119,"status":345}, - "fx": {"block":14,"catShield":2,"charge":1,"dilemma":1,"dodge":23,"explode":18,"explosion":3,"featherArrow":1,"flame":1,"frostNova":4,"garrison":3,"garrisonGrant":1,"overclock":1,"phase":1,"pull":1,"riposte":2,"rockslide":4,"shieldBreak":5,"slippery":1,"summon":11,"swordRain":46,"swordStorm":6,"telegraph":2,"thorns":29,"tornado":1,"tornadoPulse":5,"undying":7}, - "snaps": "06e15d5c 9c6e5b81 9f5d725d b13396df 98ecac6a f6ce7a0e 93fdfd13 934d9971 f00721d3 0f063f43 efae5003 e36862a5 bf3bd5e8 864b2548 d1bf8652 213491b2 c2b8be45" + "hooks": [1,132,5100,458,458,1145,1095,348,71,119,25,26,0,8132,378,12,102,51,1,196,3,0,37], + "events": {"atk":559,"bounty":2,"deploy":27,"die":68,"dmg":1003,"engage":12,"fx":198,"heal":7,"layer":3,"leak":51,"skill":52,"spawn":119,"status":336}, + "fx": {"block":13,"catShield":2,"charge":1,"dilemma":1,"dodge":37,"explode":18,"explosion":2,"featherArrow":1,"flame":1,"frostNova":4,"garrison":3,"garrisonGrant":1,"overclock":1,"phase":1,"pull":1,"riposte":2,"rockslide":4,"shieldBreak":5,"slippery":1,"summon":11,"swordRain":46,"swordStorm":8,"telegraph":2,"thorns":19,"tornado":1,"tornadoPulse":5,"undying":7}, + "snaps": "06e15d5c 9c6e5b81 da751fea a5ae2428 97a80096 c8fcdf97 64d0ee62 5c3cc2a5 2e2b9eaf 4fcef599 8d82eaa1 d0de5be5 8a6ea87e e5bfe3ac acd36acf 85f7790f 5c273449" }, "roster-011": { "about": "pass 0 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_21_a chess_char_4_24_a chess_char_4_25_a chess_char_4_26_a chess_char_4_02_b chess_char_4_06_b", @@ -1135,7 +1135,7 @@ "hooks": [1,193,5965,895,895,1366,1742,349,184,186,46,43,123,35603,1303,179,174,0,1,193,3,3,0], "events": {"atk":910,"bounty":6,"deploy":19,"die":186,"dmg":1518,"engage":11,"fx":201,"heal":138,"layer":3,"skill":89,"spawn":188,"status":918}, "fx": {"airstrike":33,"beam":6,"burst":3,"cleanse":3,"displace":1,"dp":3,"drone":50,"droneLock":21,"drones":1,"emergency":7,"explode":16,"finale":4,"garrison":3,"link":2,"scorchBurst":18,"slash":17,"steal":3,"summon":3,"sunBurst":2,"talent":3,"undying":2}, - "snaps": "43b03df4 4fcc619d 2be2121d b478fa2a 1c29c601 96aa34d3 0e886eac f600ec73 907ca853 552e1671 341eafc8 6e0f6a0b 372bf3a0 624a0dcc 83ca1bb1 b6c00e03 87871968 eb329c28 18669ab5 6b1c8ca3" + "snaps": "43b03df4 4fcc619d 2be2121d b478fa2a 1c29c601 56106e78 be7b61ff 0ff4cff4 1bc98534 6e3313a6 46072d77 8a0c9240 af96efcf 63669eb7 35b980b6 b956f2fc 3ccb4cbf a09042c3 afc8db16 2cd17534" }, "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", @@ -2437,7 +2437,7 @@ "hooks": [1,74,5100,1391,1391,1946,1946,3277,48,55,67,64,0,15874,103,86,53,0,1,48,6,0,0], "events": {"atk":1391,"bounty":3,"deploy":21,"die":55,"dmg":1946,"engage":12,"fx":145,"heal":8,"layer":6,"skill":131,"spawn":66,"status":167}, "fx": {"aoe":31,"blink":4,"bondMilestone":1,"buff":6,"coin":50,"displace":8,"dp":20,"garrison":6,"shield":1,"volley":17,"wolfShadow":1}, - "snaps": "b7d44319 4fc048ae 28ee4e6e c9c603c2 55d0890f 7dc46b6f 45f82890 a80e21f1 4798eff8 d051d766 d7744b9f 8f75050e 6b39ddea 434592eb 4c2804c6 615628a3 81d412fe" + "snaps": "b7d44319 4fc048ae 28ee4e6e c9c603c2 55d0890f 7dc46b6f 45f82890 a80e21f1 4798eff8 d051d766 d7744b9f 583b475f e78e6fcb 39dde0c2 615dd87b ff263872 66d1ef0f" }, "roster-040": { "about": "pass 2 band 4: chess_char_4_01_a chess_char_4_17_a chess_char_4_18_a chess_char_4_04_a chess_char_4_07_a chess_char_4_16_a chess_char_4_09_a chess_char_3_19_b chess_char_3_21_b chess_char_4_02_a chess_char_4_12_a chess_char_4_13_a token_10028_vigil_wolf", @@ -2451,47 +2451,48 @@ "time": 170, "ticks": 5100, "reason": "timeout", - "killed": 28, + "killed": 25, "total": 65, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 314, + "rngDraws": 303, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":28,"total":65,"perfect":false,"leaks":37,"leaksUncounted":0,"coins":4,"dmg":561208,"bossDmg":0,"heal":460,"deaths":29,"layerGains":{}}}, + "players": {"p1":{"killed":25,"total":65,"perfect":false,"leaks":40,"leaksUncounted":0,"coins":4,"dmg":452607,"bossDmg":0,"heal":259,"deaths":30,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_4_01_a",1,null,0,0,3,0,2677,2638,0,54,1], - ["p1",2,"op","chess_char_4_17_a",2,null,2438.68,1,104,1,17340,3259,0,29,1], - ["p1",3,"op","chess_char_4_18_a",2,null,0,0,8,0,15871,2867,0,14,1], - ["p1",4,"op","chess_char_4_04_a",2,null,395.34,1,103,8,65906,8405,0,48,5], - ["p1",5,"op","chess_char_4_07_a",2,null,0,0,84,0,2834,8690,0,12,1], - ["p1",6,"op","chess_char_4_16_a",1,null,641.81,1,102,0,62045,8080,0,23,7], - ["p1",7,"op","chess_char_4_09_a",2,null,969.81,1,92,1,19207,1702,0,20,1], - ["p1",8,"op","chess_char_3_19_b",1,"none",0,0,100,3,42286,3296,0,73,1], - ["p1",9,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,93,4,165665,3180,0,71,8], - ["p1",10,"op","chess_char_4_02_a",1,null,0,0,88,5,60853,2856,0,20,1], - ["p1",11,"op","chess_char_4_12_a",1,null,0,0,89,3,41495,3968,460,36,1], - ["p1",12,"op","chess_char_4_13_a",2,null,0,0,77,3,65028,3174,0,64,1], - ["p1",13,"token","token_10028_vigil_wolf",null,null,567.5,0,101,0,0,3219,0,0,null], + ["p1",1,"op","chess_char_4_01_a",1,null,0,0,3,0,3597,2638,0,41,1], + ["p1",2,"op","chess_char_4_17_a",2,null,0,0,6,0,16600,2849,0,27,1], + ["p1",3,"op","chess_char_4_18_a",2,null,0,0,8,1,10381,2867,0,13,1], + ["p1",4,"op","chess_char_4_04_a",2,null,0,0,103,7,43034,8800,0,30,5], + ["p1",5,"op","chess_char_4_07_a",2,null,0,0,86,0,4731,8690,0,14,1], + ["p1",6,"op","chess_char_4_16_a",1,null,641.81,1,102,2,68490,8080,0,23,8], + ["p1",7,"op","chess_char_4_09_a",2,null,115.72,1,90,1,13963,2556,0,18,0], + ["p1",8,"op","chess_char_3_19_b",1,"none",0,0,100,1,26556,3296,0,29,2], + ["p1",9,"op","chess_char_3_21_b",1,"uniequip_004_archet",0,0,97,4,116075,3180,0,51,5], + ["p1",10,"op","chess_char_4_02_a",1,null,0,0,89,3,45957,2856,0,15,1], + ["p1",11,"op","chess_char_4_12_a",1,null,0,0,92,3,38081,3767,259,32,1], + ["p1",12,"op","chess_char_4_13_a",2,null,0,0,79,3,65141,3174,0,65,1], + ["p1",13,"token","token_10028_vigil_wolf",null,null,1026,0,5,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] + ["-","~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,37.28,0,101,0,0,989,0,0,null] ], "enemies": { - "enemy_1005_yokai": [24,14,10,0,58116], - "enemy_1005_yokai_2": [27,10,13,11839,120127], - "enemy_1005_yokai_3": [6,1,4,20879,232521], + "enemy_1005_yokai": [24,9,15,0,48657], + "enemy_1005_yokai_2": [27,13,10,10359,100199], + "enemy_1005_yokai_3": [6,0,5,21416,160854], "enemy_10065_ftzlc": [1,1,0,0,16339], - "enemy_10162_mnctpt": [1,0,1,6673,47734], + "enemy_10162_mnctpt": [1,0,1,5618,44935], "enemy_1119_vofsd": [1,1,0,0,47298], "enemy_1196_msfyin_2": [1,1,0,0,7], - "enemy_1254_lypa_2": [1,0,1,10588,31313], - "enemy_1367_dseed": [1,0,1,0,2182], - "enemy_1517_xi": [1,0,1,4956,5540], - "enemy_9016_acstmr": [1,0,1,0,31] + "enemy_1254_lypa_2": [1,0,1,10192,28315], + "enemy_1367_dseed": [1,0,1,0,3083], + "enemy_1517_xi": [1,0,1,6157,2919], + "enemy_9016_acstmr": [1,0,1,0,0] }, - "hooks": [1,103,5100,734,734,1094,1100,320,58,92,29,28,19,10332,251,15,65,32,1,66,0,1,23], - "events": {"atk":818,"bounty":2,"deploy":36,"die":60,"dmg":1093,"engage":12,"fx":111,"leak":32,"skill":57,"spawn":80,"status":271}, - "fx": {"beam":5,"block":3,"buff":2,"burst":1,"coldWind":1,"dodge":23,"dp":1,"explode":1,"iceSpike":1,"overclock":1,"overload":1,"revive":3,"ripple":1,"rockfall":1,"sentry":6,"shadowWeave":21,"shield":7,"shieldBreak":6,"stone":1,"summon":1,"swordStorm":7,"telegraph":3,"volley":8,"wake":1,"wolfShadow":1,"wolfShadowLost":3,"zone":1}, - "snaps": "1a929dbc 10d3e1a1 32c57a4c 453c40de 39991d46 d1badb60 93a80ae5 3f5fd356 9790cf11 f7a44c04 7d48a2d9 fcd195ec 791a30be ab595962 df33ce42 438bb413 ba2b787d" + "hooks": [1,102,5100,586,586,889,896,185,56,93,27,27,29,10161,251,14,65,35,1,62,0,1,19], + "events": {"atk":662,"bounty":2,"deploy":35,"die":58,"dmg":889,"engage":12,"fx":97,"leak":35,"skill":54,"spawn":81,"status":249}, + "fx": {"beam":5,"block":1,"buff":3,"burst":1,"coldWind":1,"dodge":19,"dp":2,"iceSpike":1,"overclock":1,"overload":1,"revive":3,"rockfall":1,"sentry":7,"shadowWeave":18,"shield":6,"shieldBreak":7,"stone":1,"summon":1,"swordStorm":8,"telegraph":2,"volley":5,"wake":1,"wolfShadow":1,"zone":1}, + "snaps": "1a929dbc 2a9d573b 1b8c4491 5b536db8 1136543b 22d35a84 76be0b3b 74b136ec 69dfdcfb e6164a7b 4296c4cc 91389b96 58585ad3 4166f7a4 c2076c45 15da2aea 88de94d6" }, "roster-041": { "about": "pass 2 band 5: chess_char_4_23_a chess_char_4_01_b chess_char_4_19_a chess_char_4_22_a chess_char_4_04_b chess_char_4_07_b chess_char_4_09_b chess_char_4_20_a chess_char_4_24_a chess_char_4_25_a chess_char_4_02_b chess_char_4_12_b", @@ -2620,51 +2621,51 @@ "round": 10, "seed": 955578768, "waveId": "act1autochess_h03", - "time": 172.3, - "ticks": 5169, + "time": 168.4, + "ticks": 5052, "reason": "cleared", "killed": 55, "total": 64, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 246, + "rngDraws": 207, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":55,"total":64,"perfect":false,"leaks":9,"leaksUncounted":0,"coins":4,"dmg":924251,"bossDmg":0,"heal":24122,"deaths":14,"layerGains":{"indomShip":45}} + "p1": {"killed":55,"total":64,"perfect":false,"leaks":9,"leaksUncounted":0,"coins":4,"dmg":932398,"bossDmg":0,"heal":27434,"deaths":16,"layerGains":{"indomShip":50}} }, "units": [ - ["p1",1,"op","chess_char_5_08_a",1,null,0,0,4,6,95289,4902,1100,28,2], - ["p1",2,"op","chess_char_5_11_a",2,null,3618.8,1,90,0,8448,14018,1991,17,2], - ["p1",3,"op","chess_char_5_05_a",1,null,6209.3,1,65,4,73753,34284,10490,30,0], - ["p1",4,"op","chess_char_5_06_a",1,null,2863,1,75,5,96401,9833,4076,12,3], - ["p1",5,"op","chess_char_5_13_a",2,null,1546.02,1,37,9,101933,14783,0,38,1], + ["p1",1,"op","chess_char_5_08_a",1,null,0,0,82,6,104822,15494,4398,37,2], + ["p1",2,"op","chess_char_5_11_a",2,null,3618.8,1,93,0,8448,13778,1627,17,2], + ["p1",3,"op","chess_char_5_05_a",1,null,6129.73,1,64,4,73753,34484,10890,30,0], + ["p1",4,"op","chess_char_5_06_a",1,null,3088,1,74,5,94809,9508,4053,9,2], + ["p1",5,"op","chess_char_5_13_a",2,null,1268.06,1,37,4,110521,16317,0,31,1], ["p1",6,"op","chess_char_5_14_a",2,null,1732,1,7,5,43541,7604,3392,63,1], - ["p1",7,"op","chess_char_5_07_a",1,null,2216,1,83,0,2357,3215,0,3,0], - ["p1",8,"op","chess_char_5_17_a",2,null,0,0,64,3,132702,9300,0,80,2], - ["p1",9,"op","chess_char_5_03_a",1,null,1206,1,6,6,131191,6253,3073,39,3], - ["p1",10,"op","chess_char_5_10_a",1,null,1162.34,1,66,3,27494,3656,0,52,1], - ["p1",11,"op","chess_char_5_12_a",2,null,698.68,1,68,4,90952,11059,0,36,1], - ["p1",12,"op","chess_char_5_15_a",2,null,926,1,58,10,120189,4993,0,83,2], + ["p1",7,"op","chess_char_5_07_a",1,null,2216,1,85,0,2357,3215,0,3,0], + ["p1",8,"op","chess_char_5_17_a",2,null,210.49,1,92,3,74277,8890,0,71,2], + ["p1",9,"op","chess_char_5_03_a",1,null,1206,1,6,8,132449,7458,3073,47,3], + ["p1",10,"op","chess_char_5_10_a",1,null,1184,1,65,3,27601,3784,0,53,1], + ["p1",11,"op","chess_char_5_12_a",2,null,694,1,67,7,93376,9964,0,35,1], + ["p1",12,"op","chess_char_5_15_a",2,null,926,1,58,10,166444,4638,0,80,2], ["-","~1","device","trap_1105_accrate",null,null,100,0,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_10084_hlegle": [1,0,1,12642,5751], + "enemy_10084_hlegle": [1,0,1,14081,5751], "enemy_1041_lazerd": [1,0,1,3650,3309], "enemy_1161_tidmag_2": [1,1,0,5338,13271], "enemy_1202_msfzhi_2": [1,1,0,0,7], - "enemy_1267_nhpbr_2": [33,32,1,31192,294340], - "enemy_1270_nhstlk_2": [12,12,0,33455,318505], + "enemy_1267_nhpbr_2": [33,32,1,30642,294340], + "enemy_1270_nhstlk_2": [12,12,0,34072,318505], "enemy_1275_dwlock_2": [1,1,0,5427,23224], "enemy_1422_lrsldr": [1,1,0,0,7797], "enemy_2004_balloon": [1,0,1,164,19473], - "enemy_9006_actoxi": [12,7,5,15843,238573] + "enemy_9006_actoxi": [12,7,5,25545,246720] }, - "hooks": [1,92,5169,715,715,2291,2389,4393,69,80,18,14,18,29847,766,70,64,9,1,95,9,7,2], - "events": {"atk":816,"bounty":2,"deploy":25,"die":71,"dmg":2370,"engage":12,"fx":159,"heal":1157,"layer":9,"leak":9,"skill":32,"spawn":79,"status":457}, - "fx": {"aoe":6,"beam":1,"bloodBattle":1,"burst":7,"crit":23,"displace":35,"dodge":2,"dollEnd":1,"downed":2,"ember":1,"explode":1,"garrison":9,"meltdown":4,"overload":2,"reborn":1,"revive":7,"steal":2,"substitute":5,"swap":3,"telegraph":2,"zone":44}, - "snaps": "1683cbba c8489b09 157c0969 ce05ea97 58c14c23 9cb16f9e 18492dac 031d7b31 46a621ac f5de529b cee8a24f b70e4e74 39a90c54 b7a8e753 72f0deab a2ac15f9 ac8909ef f6c5d065" + "hooks": [1,95,5052,738,738,2359,2458,4403,71,82,17,13,18,29900,758,69,64,9,1,100,10,7,2], + "events": {"atk":830,"bounty":2,"deploy":28,"die":73,"dmg":2441,"engage":12,"fx":139,"heal":1172,"layer":10,"leak":9,"skill":30,"spawn":79,"status":459}, + "fx": {"aoe":4,"beam":1,"bloodBattle":4,"burst":7,"crit":17,"displace":14,"dodge":2,"dollEnd":1,"downed":2,"ember":1,"explode":1,"garrison":10,"meltdown":4,"overload":2,"reborn":1,"revive":9,"sp":2,"steal":2,"substitute":5,"swap":4,"telegraph":2,"zone":44}, + "snaps": "1683cbba c8489b09 157c0969 ce05ea97 58c14c23 9cb16f9e 18492dac 031d7b31 4b904e63 b211e3ee d11a8312 4281b6e2 e1ad888b 9a0fd348 01eabd74 f00f9646 2f7f3756" }, "roster-044": { "about": "pass 2 band 6: chess_char_5_19_a chess_char_5_11_b chess_char_5_19_b chess_char_5_13_b chess_char_5_14_b chess_char_5_17_b chess_char_5_20_a chess_char_5_22_a chess_char_5_12_b chess_char_5_15_b chess_char_5_20_b chess_char_5_22_b", @@ -2675,29 +2676,29 @@ "round": 12, "seed": 2595819878, "waveId": "act1autochess_h05", - "time": 221, - "ticks": 6630, + "time": 209.8, + "ticks": 6294, "reason": "cleared", "killed": 103, "total": 119, "unspawned": 0, "bossHpLeft": null, - "rngDraws": 113, + "rngDraws": 105, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":103,"total":119,"perfect":false,"leaks":16,"leaksUncounted":0,"coins":8,"dmg":3407531,"bossDmg":0,"heal":38331,"deaths":14,"layerGains":{}}}, + "players": {"p1":{"killed":103,"total":119,"perfect":false,"leaks":16,"leaksUncounted":0,"coins":8,"dmg":3382286,"bossDmg":0,"heal":36169,"deaths":13,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_19_a",1,null,302.39,1,134,2,39813,13079,977,48,4], - ["p1",2,"op","chess_char_5_11_b",2,"none",3380.99,1,145,1,6275,17755,26578,36,3], - ["p1",3,"op","chess_char_5_19_b",1,"uniequip_002_mlynar",3907,1,106,2,91122,8834,1078,31,3], - ["p1",4,"op","chess_char_5_13_b",2,"uniequip_004_ghost2",3498.12,1,9,3,116180,10709,88,21,1], - ["p1",5,"op","chess_char_5_14_b",2,"none",0,0,142,16,280983,15962,4857,103,4], - ["p1",6,"op","chess_char_5_17_b",2,"none",2578,1,167,3,205432,15613,897,58,5], - ["p1",7,"op","chess_char_5_20_a",1,null,1108,1,3,1,39942,1688,424,345,5], - ["p1",8,"op","chess_char_5_22_a",2,null,1237,1,4,7,158291,5774,1373,152,3], - ["p1",9,"op","chess_char_5_12_b",2,"uniequip_004_dusk",1667,1,13,8,458856,0,0,64,2], - ["p1",10,"op","chess_char_5_15_b",2,"uniequip_002_thorn2",1170,1,14,40,1523335,0,0,172,6], - ["p1",11,"op","chess_char_5_20_b",1,"uniequip_004_aglina",1292,1,5,6,115270,1688,424,426,5], - ["p1",12,"op","chess_char_5_22_b",2,"none",1511,1,11,13,357628,1913,469,184,4], + ["p1",1,"op","chess_char_5_19_a",1,null,3241,1,134,2,38464,9807,644,33,3], + ["p1",2,"op","chess_char_5_11_b",2,"none",1715.67,1,144,1,6962,19050,25064,42,3], + ["p1",3,"op","chess_char_5_19_b",1,"uniequip_002_mlynar",3907,1,106,3,97491,7314,782,34,3], + ["p1",4,"op","chess_char_5_13_b",2,"uniequip_004_ghost2",3498.12,1,9,2,111036,10794,88,20,1], + ["p1",5,"op","chess_char_5_14_b",2,"none",0,0,145,19,310614,16042,4910,104,4], + ["p1",6,"op","chess_char_5_17_b",2,"none",2578,1,165,0,163596,12668,530,52,5], + ["p1",7,"op","chess_char_5_20_a",1,null,1108,1,3,1,41169,1688,424,345,5], + ["p1",8,"op","chess_char_5_22_a",2,null,1237,1,4,8,160464,5774,1320,144,3], + ["p1",9,"op","chess_char_5_12_b",2,"uniequip_004_dusk",1667,1,13,5,456416,0,0,64,2], + ["p1",10,"op","chess_char_5_15_b",2,"uniequip_002_thorn2",1170,1,14,46,1541083,0,0,176,7], + ["p1",11,"op","chess_char_5_20_b",1,"uniequip_004_aglina",1292,1,5,4,97544,1688,424,408,5], + ["p1",12,"op","chess_char_5_22_b",2,"none",1511,1,11,10,342635,1913,469,165,4], ["-","~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_10015_dusk_drgn",null,null,0,0,31,0,637,2060,63,3,null], @@ -2712,33 +2713,34 @@ ["p1","~10","token","token_10015_dusk_drgn",null,null,0,0,126,0,239,1997,0,1,null], ["p1","~11","token","token_10015_dusk_drgn",null,null,0,0,129,0,876,2124,127,4,null], ["p1","~12","token","token_10015_dusk_drgn",null,null,0,0,136,0,597,2064,67,3,null], - ["p1","~13","token","token_10015_dusk_drgn",null,null,0,0,144,0,199,2000,3,1,null], + ["p1","~13","token","token_10015_dusk_drgn",null,null,0,0,143,0,199,2000,3,1,null], ["p1","~14","token","token_10015_dusk_drgn",null,null,0,0,147,0,279,2002,5,1,null], ["p1","~15","token","token_10015_dusk_drgn",null,null,0,0,149,0,249,2000,3,1,null], - ["p1","~16","token","token_10015_dusk_drgn",null,null,0,0,152,0,1214,2145,148,5,null], + ["p1","~16","token","token_10015_dusk_drgn",null,null,0,0,152,0,1214,2149,152,5,null], ["p1","~17","token","token_10015_dusk_drgn",null,null,0,0,156,0,199,1997,0,1,null], ["p1","~18","token","token_10015_dusk_drgn",null,null,0,0,158,0,557,1997,0,2,null], ["p1","~19","token","token_10015_dusk_drgn",null,null,0,0,162,0,597,2052,55,3,null], - ["p1","~20","token","token_10015_dusk_drgn",null,null,0,0,165,0,796,2100,103,4,null], - ["p1","~21","token","token_10015_dusk_drgn",null,null,1423.84,0,166,0,398,601,28,2,null] + ["p1","~20","token","token_10015_dusk_drgn",null,null,0,0,164,0,597,2099,102,3,null], + ["p1","~21","token","token_10015_dusk_drgn",null,null,0,0,166,0,597,2064,67,3,null], + ["p1","~22","token","token_10015_dusk_drgn",null,null,1703.84,1,167,1,407,601,308,2,null] ], "enemies": { "enemy_10042_prtrop_2": [1,1,0,0,23888], - "enemy_1010_demon": [42,39,3,25517,920815], + "enemy_1010_demon": [42,40,2,26194,919925], "enemy_10122_uacann_2": [1,1,0,20029,29860], "enemy_1072_dlancer": [1,1,0,0,17916], "enemy_1172_dugago_2": [1,0,1,1027,10552], "enemy_1229_darmy": [1,1,0,0,12541], "enemy_1325_cbgpro": [1,1,0,0,11347], - "enemy_1422_lrsldr_2": [45,43,2,8292,728181], - "enemy_1425_lrcmra_2": [24,15,9,78862,1542786], + "enemy_1422_lrsldr_2": [45,43,2,8473,727546], + "enemy_1425_lrcmra_2": [24,14,10,73792,1513761], "enemy_1502_crowns": [1,1,0,0,17916], - "enemy_2085_skzjxd": [1,0,1,0,127789] + "enemy_2085_skzjxd": [1,0,1,0,133945] }, - "hooks": [1,167,6630,1856,1856,4937,4941,6598,137,154,45,43,0,27109,3367,143,119,16,1,140,0,0,0], - "events": {"atk":2300,"bounty":4,"deploy":46,"die":138,"dmg":4941,"engage":33,"fx":155,"heal":170,"leak":16,"skill":88,"spawn":154,"status":788}, - "fx": {"crit":28,"displace":48,"explode":5,"sp":11,"substitute":3,"summon":21,"swap":3,"teleport":13,"zone":23}, - "snaps": "390205c8 83144cc8 bbf1f4aa 5e26fd44 e650b42d bc99a847 154d5aaf 9284ad8e 7094d37f 9be2c896 4dcdb9de 30207c7b 4294ea35 fc2622c7 5269b707 ec3b358a 8cc1ea8c 12f29b80 3a82d9d8 25f0ac02 5854dabc 9205e4b4 ef9f876b" + "hooks": [1,167,6294,1799,1799,4900,4903,6258,137,153,45,41,0,26482,3465,136,119,16,1,140,0,0,1], + "events": {"atk":2267,"bounty":4,"deploy":46,"die":137,"dmg":4903,"engage":34,"fx":146,"heal":162,"leak":16,"skill":86,"spawn":155,"status":792}, + "fx": {"crit":21,"displace":41,"dodge":1,"explode":5,"sp":11,"substitute":3,"summon":22,"swap":3,"teleport":13,"zone":26}, + "snaps": "390205c8 efedeb6e 01ec6235 41fc6dfd dd7a4e34 58fb3f1e 92e37212 9c82afa3 807c7a9e 10727fe7 ea332c0e 1c2bbce7 0e564e2d 9e0d35bd d775e5b0 427fcd59 0475d0ab db9dc9d0 c31b2c1a ad5953ec d6e8d00f" }, "roster-045": { "about": "pass 2 band 6: chess_char_6_03_a chess_char_6_06_a chess_char_6_07_a chess_char_6_01_a chess_char_6_02_a chess_char_6_04_a chess_char_6_05_a chess_char_6_08_a chess_char_6_09_a chess_char_6_11_a chess_char_6_12_a chess_char_6_13_a token_10017_skadi2_dedant", diff --git a/test/sim/unbalance.test.js b/test/sim/unbalance.test.js index 76456a4d..68d163d4 100644 --- a/test/sim/unbalance.test.js +++ b/test/sim/unbalance.test.js @@ -9,6 +9,10 @@ import { test } from 'node:test'; import assert from 'node:assert/strict'; import { makeBattle, enemyRec, chessRec, checkInvariants } from '../helpers/battleHarness.js'; import { PUSH_UNBALANCE, PULL_UNBALANCE, PULL_UNBALANCE_WEAK, UNBALANCE_MIN, PUSH_TILES, TICK } from '../../server/sim/constants.js'; +import { hasGeneratedData } from '../../server/sim/simdata.js'; +import * as enemiesMod from '../../server/sim/content/enemies.js'; +import { canCast } from '../../server/sim/content/enemies/helpers.js'; +import { blinkForward } from '../../server/sim/content/enemies/archetypes.js'; const near = (a, b, eps = 1e-9) => Math.abs(a - b) <= eps; const WALL = chessRec({ id: 't_wall', profession: 'TANK', stats: { atk: 0, maxHp: 1e7, blockCnt: 0 }, rangeGrid: [[0, 0]], skill: null }); @@ -149,3 +153,106 @@ test('the displace fx carries the state\'s game seconds for the client\'s slide' const fx = (h.b.drainEvents() || []).find((t) => t[0] === 'fx' && t[1] === 'displace'); assert.ok(fx && near(fx[4].dur, PUSH_UNBALANCE[1]), JSON.stringify(fx)); }); + +// --------------------------------------------------------------------------------------------------------------- +// the branch review (fb7-unbalance): exact frames, a 静态刚体 pulled, 弧光锋卫's bleed, skills and scripted moves, the +// forced state switches + +test('every push row holds its exact frames at 30 fps (6, 12, 24, 27, 32, 35) — the enemy walks on the next frame', () => { + for (const [force, frames] of [[-1, 6], [0, 12], [1, 24], [2, 27], [3, 32], [4, 35]]) { + const { h, e } = field(); + h.b.push(e, force, { from: { x: e.x + 1, y: e.y } }); + const x = e.x, y = e.y; + let k = 0; + while (k < 60) { h.step(); k++; if (!near(e.x, x) || !near(e.y, y)) break; } + assert.equal(k, frames + 1, `力度 ${force} (受力等级 ${force - 1}): held ${k - 1} frames, want ${frames}`); + } +}); + +test('a 静态刚体 pulled is held for the pull\'s force window (1 s; 0.5 s below 受力等级 −1), a pushed one 0.1 s — never moved', () => { + for (const [kind, force, want] of [['pull', 1, PULL_UNBALANCE], ['pull', -1, PULL_UNBALANCE_WEAK], ['push', 3, UNBALANCE_MIN]]) { + const s = field({ enemy: { motion: 'FLY' } }); + s.e.def = { ...s.e.def, staticBody: true }; + const x0 = s.e.x, t0 = s.h.b.time; + if (kind === 'pull') s.h.b.pull(s.e, force, { to: { x: 3, y: 10 } }); + else s.h.b.push(s.e, force, { from: { x: s.e.x - 1, y: s.e.y } }); + assert.equal(s.e.x, x0, `${kind}: not moved`); + assert.ok(near(s.e.unbalanceUntil - t0, want), `${kind} 力度 ${force}: ${s.e.unbalanceUntil - t0} s, want ${want}`); + } +}); + +const REAL = { skip: !hasGeneratedData() }; +/** A pinned real enemy (data/enemies.json) on the open stage, with its content kit. */ +function real(key, o = {}) { + const h = makeBattle({ content: 'generic', extraContent: [enemiesMod], seed: 7, autoFinish: false, timeLimit: 60, captureNoisy: true, + hooks: ['damaged'], defs: { chess: { t_wall: { ...WALL, stats: { ...WALL.stats, blockCnt: 3 } } } }, ...o }); + h.step(); + const e = h.spawn(key, { pos: o.pos ?? [10, 7], routeIndex: 0, mods: { speedMul: o.move ? 1 : 0 } }); + h.step(); + return { h, e }; +} + +test('弧光锋卫 bleeds 400 true damage every 0.066 s for as long as the state lasts (PRTS 天赋) — a push, a 急停 pull, a wall-shortened slide', REAL, () => { + const bleed = (act) => { + const { h, e } = real('enemy_1328_cbjedi'); + const hp0 = e.hp; + act(h, e); + h.run(2); + const hits = h.hooksOf('damaged').filter((c) => c.target === e && c.dmg.tags?.includes('unbalanced')); + return { lost: hp0 - e.hp, hits: hits.length }; + }; + // weight 1: 力度 1 → 受力等级 0, 0.8 s → 12 × 400; a 急停 pull (no movement) 1 s → 15 × 400; the wall keeps the 0.8 s row + assert.deepEqual(bleed((h, e) => h.b.push(e, 1, { from: { x: e.x + 1, y: e.y } })), { lost: 4800, hits: 12 }); + assert.deepEqual(bleed((h, e) => h.b.pull(e, 2, { to: { x: e.x - 0.3, y: e.y }, center: { x: e.x - 0.3, y: e.y } })), { lost: 6000, hits: 15 }); + assert.deepEqual(bleed((h, e) => { e.x = 9.6; h.b.push(e, 1, { from: { x: e.x - 1, y: e.y } }); }), { lost: 4800, hits: 12 }); +}); + +test('no skill, blink or scripted move while it lasts (失衡免疫 「失衡期间无法自主移动、发动攻击、使用技能」)', REAL, () => { + // the skill gate and the blink + const { h, e } = field(); + h.b.pull(e, 1, { to: { x: e.x - 0.3, y: e.y }, center: { x: e.x - 0.3, y: e.y } }); // 1 s, no movement + assert.equal(canCast(e, false, h.b), false, 'canCast'); + const x0 = e.x; + assert.equal(blinkForward(h.b, e, 1.5), null, 'blinkForward'); + assert.equal(e.x, x0); + h.run(1.05); + assert.equal(canCast(e, false, h.b), true, 'after the state'); + // 枯朽之种 (a 静态刚体 flyer: a pull's window, no movement): no dive, no blast meanwhile + const s = real('enemy_1269_nhfly', { units: [{ chessId: 't_wall', row: 10, col: 6 }], pos: [10, 7] }); + const t0 = s.h.b.time; + s.h.b.pull(s.e, 3, { to: { x: 3, y: 10 } }); + assert.ok(near(s.e.unbalanceUntil - t0, PULL_UNBALANCE)); + const sx = s.e.x, sy = s.e.y; + s.h.run(0.9); + assert.ok(s.e.alive && near(s.e.x, sx) && near(s.e.y, sy), 'still where it was, not exploded'); + assert.ok(s.h.runUntil(() => !s.e.alive, 5), 'then it dives and blows up'); +}); + +test('乌顶巨角卢鲁: a 失衡 that does not move it holds its clash until the state ends', REAL, () => { + const { h, e } = real('enemy_10144_xdelk_2', { units: [{ chessId: 't_wall', row: 10, col: 6 }], move: true }); + assert.ok(h.runUntil(() => h.eventsOf('fx').some((x) => x[1] === 'telegraph' && x[4]?.kind === 'elkCharge'), 10), 'the charge starts'); + const start = h.b.time, dur = 8; + h.run(dur - 0.5); + h.b.pull(e, 5, { to: { x: e.x + 0.2, y: e.y }, center: { x: e.x + 0.2, y: e.y } }); // 急停 at once: 1 s, no movement + const until = e.unbalanceUntil; + assert.ok(until > start + dur, 'the state outlasts the charge timer'); + const clash = () => h.eventsOf('fx').some((x) => x[1] === 'explode' && x[4]?.kind === 'elkClash'); + assert.ok(h.runUntil(clash, 3), 'it clashes'); + assert.ok(h.b.time >= until - 1e-9, `not before the state ends (${h.b.time.toFixed(3)} vs ${until.toFixed(3)})`); +}); + +test('a route APPEAR (a forced relocation) and a 逐火 重生 end the state', REAL, () => { + const { h, e } = field({ mass: 0 }); + h.b.push(e, 3, { from: { x: e.x - 1, y: e.y } }); + assert.ok(e.unbalanceUntil > h.b.time); + e.route.legs.splice(e.route.legIdx, 0, { t: 'appear', r: 10, c: 3 }); + h.step(); + assert.equal(e.x, 3, 'relocated'); + assert.ok(!(e.unbalanceUntil > h.b.time), 'APPEAR ended it'); + const w = real('enemy_1288_duskls'); + w.h.b.push(w.e, 4, { from: { x: w.e.x + 1, y: w.e.y } }); + assert.ok(w.e.unbalanceUntil > w.h.b.time); + w.h.b.dealDamage(null, w.e, { amount: 1e9, type: 'true' }); + assert.ok(w.e.alive, 'it fell into its 余烬 (重生)'); + assert.ok(!(w.e.unbalanceUntil > w.h.b.time), 'the 重生 ended it'); +});