Update class mechanics, stat rulesets, and CoA reference catalogs

This commit is contained in:
phenom committed 2026-10-04 12:56:30 -04:00
1 parent b16821e92e
commit 39458d5de6
221 files changed
+2584962 -568

No files matched your search

+55
View File
@@ -9,10 +9,39 @@ export const ROM_KNIGHT_COMPASSION_OF_HOLY_LIGHT_TAG = "rom-compassion-of-holy-l
export const ROM_KNIGHT_HOLY_ILLUMINATION_TAG = "rom-holy-illumination";
export const ROM_KNIGHT_MASTER_OF_PARRY_TAG = "rom-knight-master-of-parry";
export const ROM_KNIGHT_MASTER_OF_PARRY_BLOCK_PROC = "rom-knight-master-of-parry-block";
export const ROM_KNIGHT_PANTHERS_BLESSING_TAG = "rom-knight-panthers-blessing";
export const ROM_KNIGHT_DEADLY_WHIRLWIND_TAG = "rom-deadly-whirlwind";
export const ROM_KNIGHT_CURRENT_COA_WHIRLWIND_SHIELD_ID = 1_493_719;
export const ROM_KNIGHT_LOCAL_WHIRLWIND_SHIELD_ID = 490_175;
export interface RomKnightGodsVengeanceResetContext {
readonly characterClassId: string;
readonly secondaryClassId: string | null | undefined;
readonly ability: Pick<AbilityDefinition, "source" | "classId" | "secondaryClassId" | "dbcSpellId">;
readonly learnedPassiveSpellIds: readonly number[];
readonly shadowStepLearned: boolean;
readonly targetSealStacks: number;
readonly sameTarget: boolean;
readonly landed: boolean;
}
/** Current CoA God's Vengeance resets Shadow Step only for its linked Punishment hit at exactly four Seals. */
export function romKnightGodsVengeanceShouldResetShadowStep(
context: RomKnightGodsVengeanceResetContext,
): boolean {
return context.characterClassId === "rom-knight"
&& context.secondaryClassId === "rom-rogue"
&& context.ability.source === "runewaker"
&& context.ability.classId === "rom-knight"
&& context.ability.secondaryClassId === "rom-rogue"
&& context.ability.dbcSpellId === 499_909
&& context.learnedPassiveSpellIds.includes(499_934)
&& context.shadowStepLearned
&& context.targetSealStacks === 4
&& context.sameTarget
&& context.landed;
}
/** Shield of Valor reduces Holy Seal's remaining cooldown only on an active-aura parry. */
export function romKnightShieldOfValorCooldownReductionMs(auraActive: boolean, parried: boolean): number {
return auraActive && parried ? 1_000 : 0;
@@ -216,11 +245,37 @@ function holyIlluminationPassive(row: RomGeneratedAbilityLike): readonly Ability
}];
}
function panthersBlessingPassiveMarker(row: RomGeneratedAbilityLike): readonly AbilityEffect[] {
return [{
kind: "apply-aura",
recipient: "caster",
aura: {
id: "rom-knight-passive-493047",
name: row.name,
disposition: "buff",
durationMs: null,
utilityTags: [ROM_KNIGHT_PANTHERS_BLESSING_TAG],
},
sourceEffectType: -1,
sourceAuraType: -1,
miscValue: 0,
triggerSpellId: 493_047,
}];
}
/** Source-backed Knight passive and cast adjustments. */
export function overrideRomKnightEffects(
row: RomGeneratedAbilityLike,
translated: readonly AbilityEffect[],
): readonly AbilityEffect[] | null {
if (row.classId === "rom-knight"
&& row.secondaryClassId === "rom-rogue"
&& row.sourceSkillId === 493047) {
// Keep the stale RuneWaker shield-conditioned +2 Dodge child suppressed:
// its chance and required-buff gate are absent. The current CoA dodge
// restore is handled by romKnightPanthersBlessingRuntime.ts.
return panthersBlessingPassiveMarker(row);
}
if (row.classId === "rom-knight"
&& row.secondaryClassId === "rom-warrior"
&& row.sourceSkillId === 490088) {