feedback1b WI: 守墓石像's statue and flight are 失衡免疫; 喷气人 lands unblockable
PRTS 守墓石像 / 愤怒的守墓石像: the statue is unblockable, rooted, 失衡免疫 and immune to 浮空; the reborn flyer is 失衡免疫 (not a 静态刚体, so a persistent noDisplace buff). PRTS 喷气人: 1.5 s at -90 % speed after take-off, then 1.333 s unblockable at -90 % speed after landing.
This commit is contained in:
1 parent
51fa7d7c84
commit
a7ec6a1438
3 files changed
+76
-11
No files matched your search
@@ -842,25 +842,32 @@ function husk({ hits, delay, stealthy = true, onHusk = null, key = 'ab:ember' })
|
||||
};
|
||||
}
|
||||
|
||||
/** 守墓石像: first knock-out → statue (DEF/RES up, immobile) → reborn as a flyer. */
|
||||
/**
|
||||
* 守墓石像 / 愤怒的守墓石像 (PRTS 天赋): first knock-out → 转换模式 for `stone.duration` s, "无法被阻挡,自缚,失衡免疫,免疫浮空。
|
||||
* 防御力增加800,法术抗性增加30" → 飞行模式, "变为飞行单位,失衡免疫": a flyer no push or pull moves. Its pages list no 静态刚体
|
||||
* (data `staticBody` stays off), so the 失衡免疫 of the flight is a persistent `noDisplace` buff. 浮空 is refused from the
|
||||
* statue on (`ab.immune`; data flyers refuse it anyway). [ASSUMED] a 浮空 it already carries at the knock-out runs out.
|
||||
*/
|
||||
function statue(ab) {
|
||||
const dur = T(ab, 'stone.duration') ?? 0;
|
||||
return {
|
||||
killed(c, b, e, a) {
|
||||
killed(c, b, e, a, ab2) {
|
||||
if (a.done || !(dur > 0)) return false;
|
||||
a.done = true;
|
||||
a.noAtk = e.profile.noAttack;
|
||||
e.profile.noAttack = true;
|
||||
e.hp = e.s.maxHp;
|
||||
ab2.immune = new Set([...(ab2.immune || []), 'levitate']);
|
||||
b.fx('stone', { x: e.x, y: e.y, id: e.id, dur });
|
||||
b.addBuff(e, {
|
||||
key: 'ab:stone', duration: dur, visible: true, flags: { noMove: true },
|
||||
key: 'ab:stone', duration: dur, visible: true, flags: { noMove: true, unblockable: true, noDisplace: true },
|
||||
mods: { defFlat: T(ab, 'stone.def') ?? 0, resFlat: T(ab, 'stone.magic_resistance') ?? 0 },
|
||||
onExpire: ({ battle }) => {
|
||||
if (!e.alive) return;
|
||||
e.motion = 'FLY';
|
||||
e.profile.noAttack = a.noAtk;
|
||||
e.hp = e.s.maxHp;
|
||||
battle.addBuff(e, { key: 'ab:statueFly', persist: true, flags: { noDisplace: true } });
|
||||
battle.addBuff(e, { key: 'ab:liftoff', duration: 0.2, flags: { unblockable: true } }); // releases its blocker
|
||||
if (e.route) e.route.pts = null;
|
||||
battle.fx('revive', { x: e.x, y: e.y, id: e.id, kind: 'fly' });
|
||||
@@ -1724,10 +1731,16 @@ function kitLeaderMisc(key, ab, e) {
|
||||
case 'enemy_2004_balloon': {
|
||||
// 喷气人 · 升空 when blocked → 飞行模式 for `duration` s: PRTS 喷气人 "近地悬浮,不可阻挡,失衡免疫,移动速度+50%,不进行
|
||||
// 攻击" — an air unit meanwhile (flag `float`: melee cannot hit it; it keeps the ground path, as setFloat), never
|
||||
// displaced. [ASSUMED] not modelled: the −90 % move speed for 1.5 s after take-off and 1.333 s after landing.
|
||||
// displaced; "切换为飞行模式后,1.5秒内移动速度最终降低90% … 结束后,1.333秒内不可阻挡,移动速度最终降低90%" (PRTS numbers:
|
||||
// the blackboard has only the duration and the +50 %).
|
||||
const s = ab.sk.TakeOff;
|
||||
const BRAKE = { moveMul: 0.1 }, BRAKE_UP = 1.5, LANDING = 1.333;
|
||||
return [skill(s, (b, e2) => {
|
||||
b.addBuff(e2, { key: 'ab:takeoff', duration: s.bb.duration ?? 0, flags: { unblockable: true, float: true, noDisplace: true }, mods: { moveMul: 1 + (s.bb['balloon_s[fly].move_speed'] ?? 0) }, visible: true });
|
||||
b.addBuff(e2, {
|
||||
key: 'ab:takeoff', duration: s.bb.duration ?? 0, flags: { unblockable: true, float: true, noDisplace: true }, mods: { moveMul: 1 + (s.bb['balloon_s[fly].move_speed'] ?? 0) }, visible: true,
|
||||
onExpire: ({ battle }) => { if (e2.alive) battle.addBuff(e2, { key: 'ab:landing', duration: LANDING, flags: { unblockable: true }, mods: BRAKE }); },
|
||||
});
|
||||
b.addBuff(e2, { key: 'ab:takeoffBrake', duration: BRAKE_UP, mods: BRAKE });
|
||||
b.fx('telegraph', { x: e2.x, y: e2.y, r: 0.5, kind: 'takeoff', id: e2.id });
|
||||
}, { cond: (b, e2) => !!e2.blockedBy })];
|
||||
}
|
||||
@@ -2457,7 +2470,7 @@ export const KITS = Object.freeze({
|
||||
enemy_1513_dekght_2: (ab, e) => kitLeaderMisc('enemy_1513_dekght_2', ab, e), // 凋零骑士 · 2 targets; rage when 腐败骑士 dies
|
||||
enemy_1539_reid: (ab, e) => kitLeaderMisc('enemy_1539_reid', ab, e), // “复仇者” · ATK up below half; revives once at 50 %
|
||||
enemy_2003_rockman: (ab, e) => kitLeaderMisc('enemy_2003_rockman', ab, e), // 迷路的巨像 · long-stun boulder on a non-stunned unit
|
||||
enemy_2004_balloon: (ab, e) => kitLeaderMisc('enemy_2004_balloon', ab, e), // 喷气人 · takes off (unblockable) when blocked
|
||||
enemy_2004_balloon: (ab, e) => kitLeaderMisc('enemy_2004_balloon', ab, e), // 喷气人 · takes off when blocked: 7 s hovering, unblockable, 失衡免疫
|
||||
enemy_2005_axetro: (ab, e) => kitLeaderMisc('enemy_2005_axetro', ab, e), // “遗弃者” · attack stacks, reset after 4 s idle
|
||||
enemy_2008_flking: (ab, e) => kitLeaderMisc('enemy_2008_flking', ab, e), // “墓碑” · operators' ATK/DEF halved; periodic barrier
|
||||
enemy_2048_smgrd: (ab, e) => kitLeaderMisc('enemy_2048_smgrd', ab, e), // “邪魔的利刃” · 国度 ASPD-down around it, ×2.5 inside
|
||||
|
||||
Reference in new issue
Block a user