Skip to content

Commit

Permalink
[Arcane Mage] The War Within Update (WoWAnalyzer#6905)
Browse files Browse the repository at this point in the history
* Arcane Missiles/Clearcasting

* Arcane Barrage

* Arcane Orb

* Evocation

* Arcane Surge

* Touch of the Magi & Buffs

* Arcane Bombardment & Echo

* Checklist

* Mana Graph

* Haste

* Arcane Charges

* Cast Links, Guide, Spells

* changelog

* remove touch of the magi from checklist

* added prepatch warning, removed checklist

* show config alert warnings on guide view in addition to checklist view

* support version

* feedback stuff

* shifting power

* fix evocation missing prepull cast

* extra log
  • Loading branch information
Sharrq authored Jul 31, 2024
1 parent 9575a38 commit 9b1658f
Show file tree
Hide file tree
Showing 37 changed files with 2,284 additions and 709 deletions.
8 changes: 8 additions & 0 deletions src/analysis/retail/mage/arcane/CHANGELOG.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
import SPELLS from 'common/SPELLS';
import TALENTS from 'common/TALENTS/mage';
import SpellLink from 'interface/SpellLink';
import { change, date } from 'common/changelog';
import { Sharrq } from 'CONTRIBUTORS';

export default [
change(date(2024, 7, 29), <>Removed ability to load Checklist.</>, Sharrq),
change(date(2024, 7, 29), <>Increased spec support to 11.0, Partial Support.</>, Sharrq),
change(date(2024, 7, 29), <>Added a warning to the Overview page for Prepatch.</>, Sharrq),
change(date(2024, 7, 28), <>Added Guide view and started removing Suggestions and Checklist.</>, Sharrq),
change(date(2024, 7, 28), <>Complete rewrite of <SpellLink spell={TALENTS.ARCANE_SURGE_TALENT} />, <SpellLink spell={TALENTS.TOUCH_OF_THE_MAGI_TALENT} />, <SpellLink spell={SPELLS.CLEARCASTING_ARCANE} />, <SpellLink spell={SPELLS.ARCANE_BARRAGE} />, <SpellLink spell={SPELLS.ARCANE_ORB} />, <SpellLink spell={TALENTS.NETHER_PRECISION_TALENT} />, <SpellLink spell={TALENTS.EVOCATION_TALENT} />, and <SpellLink spell={TALENTS.ARCANE_TEMPO_TALENT} />.</>, Sharrq),
change(date(2024, 6, 15), <>Removed the Radiant Spark, Rule of Threes, and Arcane Familiar modules.</>, Sharrq),
change(date(2024, 6, 15), <>Updated the Arcane Spec Spellbook and the Mage Class Spellbook.</>, Sharrq),
change(date(2024, 6, 15), <>Initial The War Within support.</>, Sharrq),
Expand Down
14 changes: 13 additions & 1 deletion src/analysis/retail/mage/arcane/CONFIG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import SPECS from 'game/SPECS';
import Config, { SupportLevel } from 'parser/Config';

import CHANGELOG from './CHANGELOG';
import AlertWarning from 'interface/AlertWarning';

const config: Config = {
// The people that have contributed to this spec recently. People don't have to sign up to be long-time maintainers to be included in this list. If someone built a large part of the spec or contributed something recently to that spec, they can be added to the contributors list. If someone goes MIA, they may be removed after major changes or during a new expansion.
contributors: [Sharrq, SyncSubaru],
branch: GameBranch.Retail,
// The WoW client patch this spec was last updated.
patchCompatibility: '10.2.7',
patchCompatibility: '11.0.0',
supportLevel: SupportLevel.MaintainedPartial,
// Explain the status of this spec's analysis here. Try to mention how complete it is, and perhaps show links to places users can learn more.
// If this spec's analysis does not show a complete picture please mention this in the `<Warning>` component.
Expand Down Expand Up @@ -44,6 +45,17 @@ const config: Config = {
<br />
</>
),
pages: {
overview: {
frontmatterType: 'guide',
notes: (
<AlertWarning>
This analysis is a Work in Progress and is in preparation for The War Within and Nerub'ar
Palace. It is not intended to be accurate for Prepatch.
</AlertWarning>
),
},
},
// A recent example report to see interesting parts of the spec. Will be shown on the homepage.
exampleReport: '/report/x3ZYqgMm6VPHXkyc/2-Mythic+Eranog+-+Kill+(2:49)/Bthread/standard',

Expand Down
21 changes: 0 additions & 21 deletions src/analysis/retail/mage/arcane/Checklist/Component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,6 @@ const ArcaneMageChecklist = ({ combatant, castEfficiency, thresholds }: Checklis
}
>
<AbilityRequirement spell={TALENTS.ARCANE_SURGE_TALENT.id} />
<Requirement
name="Arcane Surge Pre-Cast Setup"
tooltip="In order to effectively utilize Arcane Surge, there are some abilities and spells that you need to setup before you cast Arcane Surge. Ensuring you have 4 Arcane Charges, a good amount of mana, and ensuring other abilities such as Radiant Spark and Siphon Storm are properly utilized will help you get the most out of your Arcane Surge cast and your burn phase as a whole."
thresholds={thresholds.arcaneSurgePreReqs}
/>
<Requirement
name="Arcane Surge Mana Mgmt."
tooltip="Arcane Surge expends all your mana and deals damage based on how much damage it expended, so the more mana you have when you cast Arcane Surge, the harder it will hit."
thresholds={thresholds.arcaneSurgeManaUtilization}
/>
</Rule>
<Rule
name="Using your supporting spells and talents"
Expand Down Expand Up @@ -118,11 +108,6 @@ const ArcaneMageChecklist = ({ combatant, castEfficiency, thresholds }: Checklis
spell={TALENTS.SHIFTING_POWER_TALENT.id}
/>
)}
<Requirement
name="Missed Arcane Orbs"
tooltip="Arcane Orb is a skillshot which means that it is important for you to aim it properly in order to get the most out of it. Therefore, on single target you should always ensure that the enemy gets hit by it, and if there are multiple enemies then you should do what you can to ensure all or most of them will get hit by the Orb as well."
thresholds={thresholds.arcaneOrbMissedOrbs}
/>
</Rule>
<Rule
name={<>Manage your mana</>}
Expand All @@ -137,12 +122,6 @@ const ArcaneMageChecklist = ({ combatant, castEfficiency, thresholds }: Checklis
}
>
<Requirement name="Mana left on boss kill" thresholds={thresholds.manaOnKill} />
{!combatant.hasTalent(TALENTS.ARCANE_HARMONY_TALENT) && (
<Requirement
name="Arcane Missiles only with Clearcasting"
thresholds={thresholds.arcaneMissilesUtilization}
/>
)}
{combatant.hasTalent(TALENTS.TIME_ANOMALY_TALENT) && (
<Requirement
name="Time Anomaly Mana Mgmt."
Expand Down
19 changes: 3 additions & 16 deletions src/analysis/retail/mage/arcane/Checklist/Module.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ import Combatants from 'parser/shared/modules/Combatants';
import BaseChecklist from 'parser/shared/modules/features/Checklist/Module';

import AlwaysBeCasting from '../core/AlwaysBeCasting';
import ArcaneMissiles from '../core/ArcaneMissiles';
import ArcaneSurgeMana from '../core/ArcaneSurgeMana';
import ArcaneSurgePreReqs from '../core/ArcaneSurgePreReqs';
import Clearcasting from '../core/Clearcasting';
import ManaValues from '../ManaChart/ManaValues';
import ArcaneOrb from '../talents/ArcaneOrb';
import TouchOfTheMagi from '../talents/TouchOfTheMagi';
Expand All @@ -24,11 +22,9 @@ class Checklist extends BaseChecklist {
combatants: Combatants,
castEfficiency: CastEfficiency,
arcaneOrb: ArcaneOrb,
arcaneSurgePreReqs: ArcaneSurgePreReqs,
arcaneSurgeMana: ArcaneSurgeMana,
touchOfTheMagi: TouchOfTheMagi,
timeAnomaly: TimeAnomaly,
arcaneMissiles: ArcaneMissiles,
clearcasting: Clearcasting,
manaValues: ManaValues,
arcaneIntellect: ArcaneIntellect,
cancelledCasts: CancelledCasts,
Expand All @@ -39,11 +35,9 @@ class Checklist extends BaseChecklist {
protected combatants!: Combatants;
protected castEfficiency!: CastEfficiency;
protected arcaneOrb!: ArcaneOrb;
protected arcaneSurgePreReqs!: ArcaneSurgePreReqs;
protected arcaneSurgeMana!: ArcaneSurgeMana;
protected touchOfTheMagi!: TouchOfTheMagi;
protected timeAnomaly!: TimeAnomaly;
protected arcaneMissiles!: ArcaneMissiles;
protected clearcasting!: Clearcasting;
protected manaValues!: ManaValues;
protected arcaneIntellect!: ArcaneIntellect;
protected cancelledCasts!: CancelledCasts;
Expand All @@ -60,14 +54,7 @@ class Checklist extends BaseChecklist {
...this.preparationRuleAnalyzer.thresholds,

downtimeSuggestionThresholds: this.alwaysBeCasting.downtimeSuggestionThresholds,
arcaneOrbMissedOrbs: this.arcaneOrb.missedOrbsThresholds,
arcaneSurgePreReqs: this.arcaneSurgePreReqs.arcaneSurgeThresholds,
siphonStormPreReqs: this.arcaneSurgePreReqs.siphonStormThresholds,
arcaneSurgeManaUtilization: this.arcaneSurgeMana.arcaneSurgeManaUtilization,
touchMagiBadUses: this.touchOfTheMagi.touchOfTheMagiUtilization,
touchMagiOverlap: this.touchOfTheMagi.touchOfTheMagiOverlap,
timeAnomalyManaUtilization: this.timeAnomaly.timeAnomalyManaThresholds,
arcaneMissilesUtilization: this.arcaneMissiles.arcaneMissileUsageThresholds,
manaOnKill: this.manaValues.suggestionThresholds,
arcaneIntellectUptime: this.arcaneIntellect.suggestionThresholds,
cancelledCasts: this.cancelledCasts.suggestionThresholds,
Expand Down
64 changes: 48 additions & 16 deletions src/analysis/retail/mage/arcane/CombatLogParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,44 @@ import CoreCombatLogParser from 'parser/core/CombatLogParser';
import Channeling from 'parser/shared/normalizers/Channeling';

//Core
import Checklist from './Checklist/Module';
import Abilities from './core/Abilities';
import AlwaysBeCasting from './core/AlwaysBeCasting';
import Buffs from './core/Buffs';
import CooldownThroughputTracker from './core/CooldownThroughputTracker';
import ArcaneChargeTracker from './core/ArcaneChargeTracker';
import ArcaneMissiles from './core/ArcaneMissiles';
import ArcaneSurgeMana from './core/ArcaneSurgeMana';
import ArcaneSurgePreReqs from './core/ArcaneSurgePreReqs';
import Clearcasting from './core/Clearcasting';
import ArcaneBarrage from './core/ArcaneBarrage';
import ArcaneOrb from './talents/ArcaneOrb';
import ArcaneSurge from './core/ArcaneSurge';

//Guide
import Guide from './Guide';
import ArcaneSurgeGuide from './guide/ArcaneSurge';
import TouchOfTheMagiGuide from './guide/TouchOfTheMagi';
import ShiftingPowerGuide from './guide/ShiftingPower';
import ArcaneBarrageGuide from './guide/ArcaneBarrage';
import ArcaneOrbGuide from './guide/ArcaneOrb';
import ClearcastingGuide from './guide/Clearcasting';
import NetherPrecisionGuide from './guide/NetherPrecision';
import SiphonStormGuide from './guide/SiphonStorm';
import ArcaneTempoGuide from './guide/ArcaneTempo';

//Items

//Mana Chart
import Mana from './ManaChart/Mana';
import ManaValues from './ManaChart/ManaValues';
import ManaLevelChart from 'parser/shared/modules/resources/mana/ManaLevelChart';

//Talents
import ArcaneBombardment from './talents/ArcaneBombardment';
import ArcaneEcho from './talents/ArcaneEcho';
import ArcaneHarmony from './talents/ArcaneHarmony';
import ArcaneOrb from './talents/ArcaneOrb';
import TouchOfTheMagi from './talents/TouchOfTheMagi';
import ShiftingPowerArcane from './talents/ShiftingPower';
import NetherPrecision from './talents/NetherPrecision';
import SiphonStorm from './talents/SiphonStorm';
import ArcaneTempo from './talents/ArcaneTempo';

//Normalizers
import ArcaneChargesNormalizer from './normalizers/ArcaneCharges';
Expand All @@ -50,38 +66,54 @@ class CombatLogParser extends CoreCombatLogParser {
castLinkNormalizer: CastLinkNormalizer,

//Core
checklist: Checklist,
buffs: Buffs,
alwaysBeCasting: AlwaysBeCasting,
abilities: Abilities,
cooldownThroughputTracker: CooldownThroughputTracker,
channeling: Channeling,
mana: Mana,
manaValues: ManaValues,
manaLevelChart: ManaLevelChart,
cancelledCasts: CancelledCasts,
arcaneChargeTracker: ArcaneChargeTracker,
arcaneSurgePreReqs: ArcaneSurgePreReqs,
arcaneSurgeMana: ArcaneSurgeMana,
arcaneMissiles: ArcaneMissiles,

// Talents - Arcane
arcaneSurge: ArcaneSurge,
clearcasting: Clearcasting,
arcaneBarrage: ArcaneBarrage,
arcaneOrb: ArcaneOrb,
arcaneEcho: ArcaneEcho,
arcaneHarmony: ArcaneHarmony,
arcaneBombardment: ArcaneBombardment,
shiftingPower: ShiftingPower,
touchOfTheMagi: TouchOfTheMagi,

// Guide
arcaneSurgeGuide: ArcaneSurgeGuide,
touchOfTheMagiGuide: TouchOfTheMagiGuide,
shiftingPowerGuide: ShiftingPowerGuide,
arcaneBarrageGuide: ArcaneBarrageGuide,
arcaneOrbGuide: ArcaneOrbGuide,
clearcastingGuide: ClearcastingGuide,
netherPrecisionGuide: NetherPrecisionGuide,
siphonStormGuide: SiphonStormGuide,
arcaneTempoGuide: ArcaneTempoGuide,

//Talents - Shared
divertedEnergy: DivertedEnergy,
quickWitted: QuickWitted,
tempestBarrier: TempestBarrier,
mirrorImage: MirrorImage,
shiftingPower: ShiftingPower,
elementalBarrier: ElementalBarrier,
timeAnomaly: TimeAnomaly,
masterOfTime: MasterOfTime,
arcaneIntellect: ArcaneIntellect,

// Talents - Arcane
arcaneEcho: ArcaneEcho,
arcaneHarmony: ArcaneHarmony,
arcaneBombardment: ArcaneBombardment,
shiftingPowerArcane: ShiftingPowerArcane,
touchOfTheMagi: TouchOfTheMagi,
netherPrecision: NetherPrecision,
siphonStorm: SiphonStorm,
arcaneTempo: ArcaneTempo,
};
static guide = Guide;
}

export default CombatLogParser;
Loading

0 comments on commit 9b1658f

Please sign in to comment.