0.2.3: add Clementia and Shu/Ulpianus modules (#437)

Regenerate roster-019, roster-038 and diy-059 through diy-140 for added and regrouped loadouts; other golden families unchanged.
This commit is contained in:
sganggs committed 2026-10-09 17:10:30 +08:00
1 parent 62eb113419
commit 2e122873f0
21 files changed
+2940 -2312

No files matched your search

@@ -143,8 +143,14 @@ export default {
} },
{ install(battle, unit) { // 血脉的哺养
battle.on('kill', (c) => {
if (c.killer !== unit || c.victim.side !== 'enemy' || !on(unit)) return;
// CRU-Y stages 2/3: kills credited to any 深海猎人 count while Ulpianus is on the field.
const hunterKill = num(t1.add_block_cnt_stack_cnt) > 0 && isOp(c.killer) && isAbyssal(c.killer);
if ((c.killer !== unit && !hunterKill) || c.victim.side !== 'enemy' || !on(unit)) return;
battle.addBuff(unit, { key: 'ulpia:blood', refresh: 'stack', maxStacks: Math.max(1, num(t1.max_stack_cnt, 9)), mods: mods({ hpFlat: num(t1.max_hp), atkFlat: num(t1.atk) }) });
const threshold = num(t1.add_block_cnt_stack_cnt);
if (threshold > 0 && unit.findBuff('ulpia:blood')?.stacks >= threshold) {
battle.addBuff(unit, { key: 'ulpia:bloodBlock', mods: { blockCnt: num(t1.block_cnt) }, tags: ['talent'] });
}
const share = mods({ hpFlat: num(t1['ulpia_t_1[abyssal].max_hp']), atkFlat: num(t1['ulpia_t_1[abyssal].atk']) });
if (!Object.keys(share).length) return;
for (const a of battle.allies()) {
@@ -154,6 +160,11 @@ export default {
} },
],
install(battle, unit) {
// CRU-Y: all his damage against a blocked enemy is scaled, including anchor hits.
const blockedScale = num(tb.damage_scale, 1);
if (blockedScale !== 1) battle.on('hit', (c) => {
if (c.source === unit && c.target?.side === 'enemy' && c.target.blockedBy) c.dmg.mul *= blockedScale;
}, { owner: unit });
if (num(tb.heal_scale) > 0) permBuff(battle, unit, 'ulpia:module', { healingTakenMul: num(tb.heal_scale) });
},
};