import type { AbilityDefinition, AbilityEffect } from "./abilityCatalog"; import type { AuraDefinition } from "./combatAuras"; export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_ID = 499555; export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_DURATION_MS = 20_000; export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_COOLDOWN_MS = 60_000; /** CoA radius 150 is interpreted as 15 project units using the established 10:1 conversion. */ export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS = 15; export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_DAMAGE_BONUS = 0.174; export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_DESCRIPTION = "For 20 seconds, increases your and nearby party members' damage dealt by 17.4%, including periodic damage. Radius: 150. Cooldown: 60 seconds."; export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_AURA: AuraDefinition = Object.freeze({ id: "rom-scout-priest:screen-attack", name: "Screen Attack", description: "Increases damage dealt by 17.4% for 20 seconds.", disposition: "buff", durationMs: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DURATION_MS, stackBehavior: "replace", uniqueBySource: true, modifiers: [{ kind: "damage", direction: "dealt", operation: "percent", value: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DAMAGE_BONUS, }], }); const SCREEN_ATTACK_EFFECT: AbilityEffect = { kind: "apply-aura", aura: ROM_SCOUT_PRIEST_SCREEN_ATTACK_AURA, recipient: "caster", scope: "party", radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS, sourceEffectType: -1, sourceAuraType: -1, miscValue: 0, triggerSpellId: 0, }; /** * Current CoA Scout/Priest Screen Attack (499555) is an active raid damage buff. * Its current skill entry says 20 seconds; patch 11.1.1's rework note says 30. * The catalog follows the current skill entry and keeps that discrepancy in * the feature rationale rather than carrying the obsolete RuneWaker passive. */ export function romScoutPriestScreenAttackCatalogOverride( ability: AbilityDefinition, ): AbilityDefinition { if (ability.source !== "runewaker" || ability.classId !== "rom-scout" || ability.secondaryClassId !== "rom-priest" || ability.dbcSpellId !== ROM_SCOUT_PRIEST_SCREEN_ATTACK_ID) { return ability; } return { ...ability, name: "Screen Attack", description: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DESCRIPTION, target: "self", range: { min: 0, max: 0 }, radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS, targeting: { shape: "circle", radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS }, castMode: "instant", castTimeMs: 0, cooldownMs: ROM_SCOUT_PRIEST_SCREEN_ATTACK_COOLDOWN_MS, costs: [], cost: { resource: "mana", amount: 0 }, effects: [SCREEN_ATTACK_EFFECT], passive: false, romSkillGroup: "elite", ranks: ability.ranks?.map((rank) => ({ ...rank, description: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DESCRIPTION, castMode: "instant", castTimeMs: 0, cooldownMs: ROM_SCOUT_PRIEST_SCREEN_ATTACK_COOLDOWN_MS, costs: [], cost: { resource: "mana", amount: 0 }, effects: [SCREEN_ATTACK_EFFECT], targeting: { shape: "circle", radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS }, })), }; }