feedback4: 缇缇 S2's sleep pulses each count as a new 沉睡 entry for her trait (GitHub #162; the owner's decision of 2026-10-06)
- The S2 ward ("期间持续使自身与该目标周围的敌人陷入沉睡") re-applies a 0.5 s sleep every 0.25 s, so an enemy held asleep
was one entry for garrison_125 (「每当范围内有敌人或干员进入沉睡或晕眩时」 萨尔贡 / 精准 +1, elite +2, at most 24 / 48 per
battle). The reporter's first-hand memory of the official mode: 「攻击范围内有陷入沉睡就开始迅速增加直至上限」.
- The pulse now passes applyStatus `reenter` (a new opt-in: statusApplied reports `entered`; the buff refreshes as
before) — once per enemy and pulse, not while a longer sleep from elsewhere holds it. With one enemy in her range the
trait reaches its cap 5.63 s into S2; an enemy outside her range still adds nothing; a refresh elsewhere is still no
entry (the garrison rule is unchanged). No enemy wakes between pulses. The pulse timing is [ASSUMED] (not in the data).
- Tests: garrisons_battle — new 缇缇 125 + S2 test (normal and elite: an enemy at her back adds nothing over 8 s of
pulses; an enemy in range beside both wards, one entry per pulse, takes the trait to 24 / 48 within 6.5 s).
- Docs: DESIGN §24.8 (and the §24 intro), the Battle.applyStatus / garrison / kit comments.
- Golden: roster-042 (缇缇 S2): her trait's 24 layers come within her first S2 (26–37 s) instead of over four casts up
to 177 s; same totals (capped), and the earlier layers end the fight at 166.97 s instead of 182.03 s, 5 knock-outs
instead of 7.
This commit is contained in:
1 parent
5bc2669407
commit
c236273cf2
6 files changed
+136
-34
No files matched your search
@@ -14,7 +14,9 @@
|
||||
// 'freeze', × prob) · act2autochess_gar_event_onstart (every deploy) ·
|
||||
// act2autochess_gar_event_allyenemy_sleepstun_inrange (an enemy or operator in range ENTERS
|
||||
// sleep / stun). "进入…时": re-applying a running status (a refresh) is not a new entry
|
||||
// (engine statusApplied ctx.entered). Targets: bond_by_id / bond_self (own active bonds) / bond_actived_maxstack;
|
||||
// (engine statusApplied ctx.entered) — except a pulse that re-applies its own short status as a
|
||||
// fresh one (applyStatus `reenter`: 缇缇 S2's sleep ward, DESIGN §24.8).
|
||||
// Targets: bond_by_id / bond_self (own active bonds) / bond_actived_maxstack;
|
||||
// amounts: by_count / by_charcount_samerow / by_charlevel; conditions character_same_row /
|
||||
// character_same_col (≥ check_count incl. self). Gains go through support.gainLayers with
|
||||
// reason 'garrison', source = the trait's owner, cap = max_add_count_per_battle per (instance, bond).
|
||||
|
||||
@@ -403,7 +403,8 @@ const KITS = {
|
||||
// enemies, sleeping enemies take 30 % ATK arts/s. T2 勇气的报偿: Sargon/Minos ops above 50 % HP get +20 ASPD.
|
||||
// S1 缓蚀 (duration): ATK +, attack@prob chance per attack to sleep the target attack@sleep s.
|
||||
// S2 封护 (duration): no attacks, ATK +; she and the lowest-HP-ratio operator in her range sleep until the skill ends
|
||||
// (沉睡 = invulnerable), enemies around either of them keep falling asleep; T1 ×talent_scale.
|
||||
// (沉睡 = invulnerable), enemies around either of them keep falling asleep — each 0.25 s pulse a new 沉睡 entry for
|
||||
// her trait (GitHub #162, DESIGN §24.8); T1 ×talent_scale.
|
||||
chess_char_5_02_a: (bb, chess, def) => {
|
||||
const t0 = talent(chess, 0), t1 = talent(chess, 1);
|
||||
const sid = selectedId(chess, def);
|
||||
@@ -444,9 +445,22 @@ const KITS = {
|
||||
unit.mem.titiWardAcc += dt;
|
||||
if (unit.mem.titiWardAcc < AURA_IV - 1e-9) return;
|
||||
unit.mem.titiWardAcc = 0;
|
||||
// "期间持续使自身与该目标周围的敌人陷入沉睡": every AURA_IV (0.25 s) the enemies around a ward sleep AURA_DUR (0.5 s),
|
||||
// and each pulse is a new 沉睡 entry (`reenter`), so her trait garrison_125 「每当范围内有敌人或干员进入沉睡或晕眩时」
|
||||
// climbs on it to its per-battle cap (GitHub #162, the reporter's memory of the official mode: 「攻击范围内有陷入
|
||||
// 沉睡就开始迅速增加直至上限」; the owner's decision of 2026-10-06, DESIGN §24.8). [ASSUMED] the pulse timing (not in
|
||||
// the data). Once per enemy and pulse (one beside both wards re-enters once); not while a longer sleep from
|
||||
// elsewhere holds it. The 0.5 s sleep outlasts the 0.25 s, so the enemy never wakes between pulses — only the
|
||||
// `entered` flag of the pulse changed (until 0.1.3 the first pulse alone was an entry).
|
||||
const pulsed = new Set();
|
||||
for (const a of unit.mem.titiWard || []) {
|
||||
if (!a.alive || !a.deployed || !a.findBuff('titi:ward')) continue;
|
||||
for (const e of battle.foesInRadius(a.x, a.y, RING1)) if (e.alive) battle.applyStatus(e, 'sleep', { duration: AURA_DUR, source: unit });
|
||||
for (const e of battle.foesInRadius(a.x, a.y, RING1)) {
|
||||
if (!e.alive) continue;
|
||||
const reenter = !pulsed.has(e) && !e.buffs.some((b) => (b.status ?? b.key) === 'sleep' && b.timeLeft > AURA_DUR + 1e-9);
|
||||
pulsed.add(e);
|
||||
battle.applyStatus(e, 'sleep', { duration: AURA_DUR, source: unit, reenter });
|
||||
}
|
||||
}
|
||||
},
|
||||
onEnd({ battle, unit }) {
|
||||
|
||||
Reference in new issue
Block a user