Skip to content

Commit

Permalink
Merge pull request #162 from ennvina/sod
Browse files Browse the repository at this point in the history
Season of Discovery
  • Loading branch information
ennvina authored Dec 6, 2023
2 parents c9ba1d5 + 437417f commit ec43e07
Show file tree
Hide file tree
Showing 20 changed files with 313 additions and 52 deletions.
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,8 @@
"GetItemInfo",
"SAO_DEBUG",
"DISABLE",
"ENABLE"
"ENABLE",
"IsPlayerSpell"
],
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#4f71dc",
Expand Down
4 changes: 2 additions & 2 deletions SpellActivationOverlay.toc
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
## Interface: 30403
## Title: |TInterface/Icons/Spell_Frost_Stun:16:16:0:0:512:512:64:448:64:448|t SpellActivationOverlay |cffa2f3ff1.0.0|r
## Title: |TInterface/Icons/Spell_Frost_Stun:16:16:0:0:512:512:64:448:64:448|t SpellActivationOverlay |cffa2f3ff1.1.1|r
## Notes: Mimic Spell Activation Overlays from Retail
## Author: Vinny
## Version: 1.0.0
## Version: 1.1.1
## SavedVariables: SpellActivationOverlayDB

# SpellActivationOverlay.lua, SpellActivationOverlay.xml and all textures
Expand Down
17 changes: 15 additions & 2 deletions _script/package.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,21 @@ rm -rf ./_release/wrath || bye "Cannot clean wrath directory"
mkdir -p ./_release/wrath/SpellActivationOverlay || bye "Cannot create wrath directory"
cp -R changelog.md LICENSE SpellActivationOverlay.* classes components options textures ./_release/wrath/SpellActivationOverlay/ || bye "Cannot copy wrath files"
cd ./_release/wrath || bye "Cannot cd to wrath directory"
echo -n "Cleaning up wrath directory... "
# Remove unused textures to reduce the archive size.
# The list below, SOD_ONLY_TEXTURES, is a list of textures added exclusively for Season of Discovery.
SOD_ONLY_TEXTURES=(tooth_and_claw
monk_serpent
raging_blow
arcane_missiles_1
arcane_missiles_2
arcane_missiles_3
)
for texname in ${SOD_ONLY_TEXTURES[@]}
do
rm -f SpellActivationOverlay/textures/"$texname".* || bye "Cannot cleanup textures from wrath installation"
done
echo
echo -n "Zipping wrath directory... "
"$CWD"/zip -9 -r -q SpellActivationOverlay-"$VERSION_TOC_VERSION"-wrath.zip SpellActivationOverlay || bye "Cannot zip wrath directory"
echo
Expand Down Expand Up @@ -76,8 +91,6 @@ maelstrom_weapon_4
backlash
predatory_swiftness
sword_and_board
impact
arcane_missiles
hot_streak
killing_machine
maelstrom_weapon_3
Expand Down
35 changes: 35 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,40 @@
## SpellActivationOverlay Changelog

#### v1.1.1 (2023-12-05)

- New SAO: Mage's Arcane Blast
- New GAB: Mage's Arcane Missiles, during Arcane Blast
- New GAB: Mage's Arcane Explosion, during Arcane Blast
- Updated SAO: Mage's Clearcasting is back to 150% size, to avoid overlap
- Hunter's Flanking Strike Spell Alert is no longer always displayed upon login
- Shaman's Molten Blast Spell Alert is no longer always displayed upon login

#### v1.1.0-beta (2023-12-01)

This release focuses on supporting runes introduced in Season of Discovery
- New SAO: Druid's Fury of Stormrage
- New SAO: Hunter's Flanking Strike
- New SAO: Hunter's Cobra Strikes
- New SAO: Mage's Fingers of Frost
- New SAO: Priest's Serendipity
- New SAO: Shaman's Molten Blast
- New SAO: Warrior's Raging Blow
- New GAB: Druid's Healing Touch, during Fury of Stormrage
- New GAB: Hunter's Flanking Strike, when the action is usable
- New GAB: Mage's Ice Lance, during Fingers of Frost
- New GAB: Mage's Ice Lance, when the enemy target is Frozen
- New GAB: Priest's Lesser Heal, during Serendipity
- New GAB: Priest's Heal, during Serendipity
- New GAB: Priest's Greater Heal, during Serendipity
- New GAB: Priest's Prayer of Healing, during Serendipity
- New GAB: Shaman's Molten Blast, when the action is usable
- New GAB: Warrior's Raging Blow, when the action is usable
- New GAB: Warrior's Victory Rush, when the action is usable

Bug Fixes
- In rare circumstances, glowing buttons would never glow
- Reloading the UI would always fix the issue, until next log out

#### v1.0.0 (2023-12-01)

Spell Alerts have a shrinking effect to know when the alert is about to fade
Expand Down
19 changes: 17 additions & 2 deletions classes/druid.lua
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ local function updateSAOs(self)
updateLeftSAO (self, omenTexture, omenSpellID);
updateRightSAO(self, omenTexture, omenSpellID);
else
updateLeftSAO (self, '', 0);
updateRightSAO(self, '', 0);
updateLeftSAO (self, '', nil);
updateRightSAO(self, '', nil);
end
end
end
Expand Down Expand Up @@ -299,6 +299,12 @@ local function registerClass(self)
self:RegisterAura("wrath_of_elune", 0, 46833, "shooting_stars", "Top", 1, 255, 255, 255, true, { starfire }); -- PvP season 5-6-7-8
self:RegisterAura("elunes_wrath", 0, 64823, "shooting_stars", "Top", 1, 255, 255, 255, true, { starfire }); -- PvE tier 8

-- Fury of Stormrage (Season of Discovery)
local furyOfStormrage = 414800;
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC and GetSpellInfo(furyOfStormrage) then
self:RegisterAura("fury_of_stormrage", 0, furyOfStormrage, "fury_of_stormrage", "Top", 1, 255, 255, 255, true, { healingTouch });
end

-- Healing Trance / Soul Preserver
self:RegisterAuraSoulPreserver("soul_preserver_druid", 60512); -- 60512 = Druid buff

Expand Down Expand Up @@ -345,6 +351,9 @@ local function loadOptions(self)
local wrathOfEluneTalent = wrathOfEluneBuff; -- Not really a talent
local elunesWrathTalent = elunesWrathBuff; -- Not really a talent

local furyOfStormrageBuff = 414800;
local furyOfStormrageTalent = furyOfStormrageBuff; -- Not really a talent

local predatoryStrikesTalent = 16972;
local predatoryStrikesBuff = 69369;

Expand All @@ -359,6 +368,9 @@ local function loadOptions(self)
self:AddOverlayOption(solarEclipseTalent, solarSpellID, 0, nil, nil, nil, solarSpellID+1000000); -- Spell ID not used by ActivateOverlay like typical overlays
self:AddOverlayOption(wrathOfEluneTalent, wrathOfEluneBuff);
self:AddOverlayOption(elunesWrathTalent, elunesWrathBuff);
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC and GetSpellInfo(furyOfStormrageBuff) then
self:AddOverlayOption(furyOfStormrageTalent, furyOfStormrageBuff);
end
self:AddOverlayOption(naturesGraceTalent, naturesGraceBuff, 0, nil, naturesGraceVariants);
self:AddOverlayOption(predatoryStrikesTalent, predatoryStrikesBuff);
self:AddSoulPreserverOverlayOption(60512); -- 60512 = Druid buff
Expand All @@ -367,6 +379,9 @@ local function loadOptions(self)
self:AddGlowingOption(solarEclipseTalent, wrath, wrath);
self:AddGlowingOption(wrathOfEluneTalent, wrathOfEluneBuff, starfire);
self:AddGlowingOption(elunesWrathTalent, elunesWrathBuff, starfire);
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC and GetSpellInfo(furyOfStormrageBuff) then
self:AddGlowingOption(furyOfStormrageTalent, furyOfStormrageBuff, healingTouch);
end
if WOW_PROJECT_ID ~= WOW_PROJECT_CLASSIC then -- Must exclude this option specifically for Classic Era, because the talent exists in Era but it has no proc
self:AddGlowingOption(predatoryStrikesTalent, predatoryStrikesBuff, regrowth);
self:AddGlowingOption(predatoryStrikesTalent, predatoryStrikesBuff, healingTouch);
Expand Down
18 changes: 17 additions & 1 deletion classes/hunter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,19 @@ local function registerClass(self)
local mongooseBite = 1495;
self:RegisterAura("mongoose_bite", 0, mongooseBite, nil, "", 0, 0, 0, 0, false, { (GetSpellInfo(mongooseBite)) });
self:RegisterCounter("mongoose_bite");

local flankingStrike = 415320;
self:RegisterAura("flanking_strike", 0, flankingStrike, "tooth_and_claw", "Left + Right (Flipped)", 1, 255, 255, 255, true, { flankingStrike });
self:RegisterCounter("flanking_strike");

local cobraStrikes = 425714;
self:RegisterAura("cobra_strikes_1", 1, cobraStrikes, "monk_serpent", "Left", 0.7, 255, 255, 255, true);
self:RegisterAura("cobra_strikes_2", 2, cobraStrikes, "monk_serpent", "Left + Right (Flipped)", 0.7, 255, 255, 255, true);
end
end

local function loadOptions(self)
local mongooseBite = 1495;
local killShot = 53351;
local counterattack = 19306;
local aimedShot = 19434;
Expand All @@ -48,14 +57,21 @@ local function loadOptions(self)
local lockAndLoadBuff = 56453;
local lockAndLoadTalent = 56342;

local flankingStrike = 415320;
local cobraStrikes = 425714;

self:AddOverlayOption(improvedSteadyShotTalent, improvedSteadyShotBuff);
self:AddOverlayOption(lockAndLoadTalent, lockAndLoadBuff, 0, nil, nil, 2); -- setup any stacks, test with 2 stacks
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC then
self:AddOverlayOption(flankingStrike, flankingStrike);
self:AddOverlayOption(cobraStrikes, cobraStrikes, 0, nil, nil, 2); -- setup any stacks, test with 2 stacks
end

self:AddGlowingOption(nil, killShot, killShot);
self:AddGlowingOption(nil, counterattack, counterattack);
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC then
local mongooseBite = 1495;
self:AddGlowingOption(nil, mongooseBite, mongooseBite);
self:AddGlowingOption(nil, flankingStrike, flankingStrike);
end
self:AddGlowingOption(improvedSteadyShotTalent, improvedSteadyShotBuff, aimedShot);
self:AddGlowingOption(improvedSteadyShotTalent, improvedSteadyShotBuff, arcaneShot);
Expand Down
76 changes: 63 additions & 13 deletions classes/mage.lua
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ local FrozenHandler = {
freeze = { 33395 }, -- from Frost Elemental
shattered_barrier = { 55080 },
ice_lance = { 30455, 42913, 42914 },
ice_lance_sod = { 400640 }, -- Season of Discovery
deep_freeze = { 44572 }, -- Deep Freeze is both a debuff for 'Frozen' Spell Alert and its own Glowing Button

freezeID = 5276, -- Not really a 'Frozen' spell ID, but the name should help players identify the intent
Expand Down Expand Up @@ -386,6 +387,11 @@ local FrozenHandler = {
if (hasIceLanceGAB) then
SAO:AddGlow(iceLance, self.ice_lance); -- First arg is option ID, second arg is spell ID list
end
local iceLanceSoD = self.ice_lance_sod[1];
local hasIceLanceSoDGAB = not gabOption or type(gabOption[iceLanceSoD]) == "nil" or gabOption[iceLanceSoD];
if (hasIceLanceSoDGAB) then
SAO:AddGlow(iceLanceSoD, self.ice_lance_sod); -- First arg is option ID, second arg is spell ID list
end
local deepFreeze = self.deep_freeze[1];
local hasDeepFreezeGAB = not gabOption or type(gabOption[deepFreeze]) == "nil" or gabOption[deepFreeze];
if (hasDeepFreezeGAB) then
Expand All @@ -399,6 +405,7 @@ local FrozenHandler = {

-- GAB
SAO:RemoveGlow(self.ice_lance[1]);
SAO:RemoveGlow(self.ice_lance_sod[1]);
SAO:RemoveGlow(self.deep_freeze[1]);
end,

Expand Down Expand Up @@ -482,21 +489,38 @@ local function registerClass(self)
-- Please look at HotStreakHandler and customCLEU for more information

-- Frost Procs
local iceLanceAndDeepFreeze = { (GetSpellInfo(FrozenHandler.ice_lance[1])), (GetSpellInfo(FrozenHandler.deep_freeze[1])) };
self:RegisterAura("fingers_of_frost_1", 1, 74396, "frozen_fingers", "Left", 1, 255, 255, 255, true, iceLanceAndDeepFreeze);
self:RegisterAura("fingers_of_frost_2", 2, 74396, "frozen_fingers", "Left + Right (Flipped)", 1, 255, 255, 255, true, iceLanceAndDeepFreeze);
if WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC then
local iceLanceAndDeepFreeze = { (GetSpellInfo(FrozenHandler.ice_lance[1])), (GetSpellInfo(FrozenHandler.deep_freeze[1])) };
self:RegisterAura("fingers_of_frost_1", 1, 74396, "frozen_fingers", "Left", 1, 255, 255, 255, true, iceLanceAndDeepFreeze);
self:RegisterAura("fingers_of_frost_2", 2, 74396, "frozen_fingers", "Left + Right (Flipped)", 1, 255, 255, 255, true, iceLanceAndDeepFreeze);
elseif GetSpellInfo(FrozenHandler.ice_lance_sod[1]) then
local iceLanceSoD = { (GetSpellInfo(FrozenHandler.ice_lance_sod[1])) };
self:RegisterAura("fingers_of_frost_1_sod", 1, 400670, "frozen_fingers", "Left", 1, 255, 255, 255, true, iceLanceSoD);
self:RegisterAura("fingers_of_frost_2_sod", 2, 400670, "frozen_fingers", "Left + Right (Flipped)", 1, 255, 255, 255, true, iceLanceSoD);
end
self:RegisterAura("freeze", 0, FrozenHandler.fakeSpellID, FrozenHandler.saoTexture, "Top (CW)", FrozenHandler.saoScaleFactor, 255, 255, 255, false);
self:RegisterAura("brain_freeze", 0, 57761, "brain_freeze", "Top", 1, 255, 255, 255, true, { (GetSpellInfo(133)), (GetSpellInfo(44614)) });

-- Arcane Procs
self:RegisterAura("missile_barrage", 0, 44401, "arcane_missiles", "Left + Right (Flipped)", 1, 255, 255, 255, true, { (GetSpellInfo(5143)) });

lazyCreateClearcastingVariants(self);
local clearcastingScaleFactor = 1.5;
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC then
clearcastingScaleFactor = 1; -- No need to scale up Clearcasting on Classic Era, because they are no other spell alerts that share this spot
self:RegisterAura("clearcasting", 0, 12536, clearcastingVariants.textureFunc, "Left + Right (Flipped)", 1.5, 192, 192, 192, false);

local arcaneBlastSoDBuff = 400573;
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC and GetSpellInfo(arcaneBlastSoDBuff) then
local arcaneMissiles = 5143;
local arcaneExplosion = 1449;
-- local arcaneHealingSpellTBD = ...; -- @todo add healing spell that resets stacks, which might exist, according to the in-game tooltip
local resettingSpells = { (GetSpellInfo(arcaneMissiles)), (GetSpellInfo(arcaneExplosion)) };
for nbStacks=1,4 do
local scale = nbStacks == 4 and 1.2 or 0.6; -- 60%, 60%, 60%, 120%
local pulse = nbStacks == 4;
local glowIDs = nbStacks == 4 and resettingSpells or nil;
local texture = ({ "arcane_missiles_1", "arcane_missiles_2", "arcane_missiles_3", "arcane_missiles" })[nbStacks];
self:RegisterAura("serendipity_sod", nbStacks, arcaneBlastSoDBuff, texture, "Left + Right (Flipped)", scale, 255, 255, 255, pulse, glowIDs);
end
end
self:RegisterAura("clearcasting", 0, 12536, clearcastingVariants.textureFunc, "Left + Right (Flipped)", clearcastingScaleFactor, 192, 192, 192, false);
end

local function loadOptions(self)
Expand All @@ -523,14 +547,20 @@ local function loadOptions(self)

local fingersOfFrostBuff = 74396;
local fingersOfFrostTalent = 44543;
local fingersOfFrostSoDBuff = 400670;
local fingersOfFrostSoDTalent = fingersOfFrostSoDBuff; -- Not really a talent

local arcaneBlastSoDBuff = 400573;

local arcaneMissiles = 5143;
local arcaneExplosion = 1449;
local pyroblast = 11366;
local flamestrike = 2120;
local fireBlast = 2136;
local fireball = 133;
local frostfireBolt = 44614;
local iceLance = FrozenHandler.ice_lance[1];
local iceLanceSoD = FrozenHandler.ice_lance_sod[1];
local deepFreeze = FrozenHandler.deep_freeze[1];

local heatingUpDetails;
Expand Down Expand Up @@ -562,33 +592,53 @@ local function loadOptions(self)
-- local hotStreakHeatingUpDetails = string.format("%s+%s", heatingUpDetails, hotStreakDetails);
local hotStreakHeatingUpDetails = string.format("%s %s", STATUS_TEXT_BOTH, ACTION_SPELL_AURA_APPLIED_DOSE);

local oneToThreeStacks = string.format(CALENDAR_TOOLTIP_DATE_RANGE, "1", string.format(STACKS, 3));
local fourStacks = string.format(STACKS, 4);

-- Clearcasting variants
lazyCreateClearcastingVariants(self);

self:AddOverlayOption(clearcastingTalent, clearcastingBuff, 0, nil, clearcastingVariants);
self:AddOverlayOption(missileBarrageTalent, missileBarrageBuff);
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC and GetSpellInfo(arcaneBlastSoDBuff) then
self:AddOverlayOption(arcaneBlastSoDBuff, arcaneBlastSoDBuff, 0, oneToThreeStacks, nil, 3); -- setup any stacks, test with 3 stacks
self:AddOverlayOption(arcaneBlastSoDBuff, arcaneBlastSoDBuff, 4); -- setup 4 stacks
end
self:AddOverlayOption(hotStreakTalent, heatingUpBuff, 0, heatingUpDetails);
self:AddOverlayOption(hotStreakTalent, hotStreakBuff, 0, hotStreakDetails);
self:AddOverlayOption(hotStreakTalent, hotStreakHeatingUpBuff, 0, hotStreakHeatingUpDetails);
self:AddOverlayOption(firestarterTalent, firestarterBuff);
self:AddOverlayOption(impactTalent, impactBuff);
self:AddOverlayOption(fingersOfFrostTalent, fingersOfFrostBuff, 0, nil, nil, 2); -- setup any stacks, test with 2 stacks
if WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC then
self:AddOverlayOption(fingersOfFrostTalent, fingersOfFrostBuff, 0, nil, nil, 2); -- setup any stacks, test with 2 stacks
elseif GetSpellInfo(fingersOfFrostSoDBuff) then
self:AddOverlayOption(fingersOfFrostSoDTalent, fingersOfFrostSoDBuff, 0, nil, nil, 2); -- setup any stacks, test with 2 stacks
end
self:AddOverlayOption(FrozenHandler.freezeTalent, FrozenHandler.freezeID, 0, nil, nil, nil, FrozenHandler.fakeSpellID);
self:AddOverlayOption(brainFreezeTalent, brainFreezeBuff);

self:AddGlowingOption(missileBarrageTalent, missileBarrageBuff, arcaneMissiles);
if WOW_PROJECT_ID == WOW_PROJECT_CLASSIC and GetSpellInfo(arcaneBlastSoDBuff) then
self:AddGlowingOption(arcaneBlastSoDBuff, arcaneBlastSoDBuff, arcaneMissiles, fourStacks);
self:AddGlowingOption(arcaneBlastSoDBuff, arcaneBlastSoDBuff, arcaneExplosion, fourStacks);
end
self:AddGlowingOption(hotStreakTalent, hotStreakBuff, pyroblast);
self:AddGlowingOption(firestarterTalent, firestarterBuff, flamestrike);
if WOW_PROJECT_ID ~= WOW_PROJECT_CLASSIC then -- Must exclude this option specifically for Classic Era, because the talent exists in Era but the proc is passive
self:AddGlowingOption(impactTalent, impactBuff, fireBlast);
end
self:AddGlowingOption(brainFreezeTalent, brainFreezeBuff, fireball);
self:AddGlowingOption(brainFreezeTalent, brainFreezeBuff, frostfireBolt);
self:AddGlowingOption(fingersOfFrostTalent, fingersOfFrostBuff, iceLance);
self:AddGlowingOption(fingersOfFrostTalent, fingersOfFrostBuff, deepFreeze);
-- self:AddGlowingOption(fingersOfFrostTalent, fingersOfFrostBuff, ...); -- Maybe add more spell options for Fingers of Frost
self:AddGlowingOption(FrozenHandler.freezeTalent, FrozenHandler.freezeID, iceLance);
self:AddGlowingOption(FrozenHandler.freezeTalent, FrozenHandler.freezeID, deepFreeze);
if WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC then
self:AddGlowingOption(fingersOfFrostTalent, fingersOfFrostBuff, iceLance);
self:AddGlowingOption(fingersOfFrostTalent, fingersOfFrostBuff, deepFreeze);
-- self:AddGlowingOption(fingersOfFrostTalent, fingersOfFrostBuff, ...); -- Maybe add more spell options for Fingers of Frost
self:AddGlowingOption(FrozenHandler.freezeTalent, FrozenHandler.freezeID, iceLance);
self:AddGlowingOption(FrozenHandler.freezeTalent, FrozenHandler.freezeID, deepFreeze);
elseif GetSpellInfo(fingersOfFrostSoDBuff) and GetSpellInfo(iceLanceSoD) then
self:AddGlowingOption(fingersOfFrostSoDTalent, fingersOfFrostSoDBuff, iceLanceSoD);
self:AddGlowingOption(FrozenHandler.freezeTalent, FrozenHandler.freezeID, iceLanceSoD);
end
end

SAO.Class["MAGE"] = {
Expand Down
Loading

0 comments on commit ec43e07

Please sign in to comment.