From 9aa809c7935e9b7451e0b6c6aeae022cd91fcdc5 Mon Sep 17 00:00:00 2001 From: CarnifexOptimus <156172553+CarnifexOptimus@users.noreply.github.com> Date: Sat, 12 Oct 2024 07:03:23 +0200 Subject: [PATCH] updated Valigarmanda module --- .../Ex1Valigarmanda/Ex1ValigarmandaEnums.cs | 12 +- .../Extreme/Ex1Valigarmanda/NorthernCross.cs | 2 +- .../Extreme/Ex1Valigarmanda/Stance.cs | 2 +- .../Ex1Valigarmanda/ThunderPlatform.cs | 22 +-- .../Raid/M03NBruteBomber/BarbarousBarrage.cs | 1 + .../Trial/T01Valigarmanda/ArcaneLightning.cs | 21 +++ .../T01Valigarmanda/ChillingCataclysm.cs | 25 +++ .../Trial/T01Valigarmanda/NorthernCross.cs | 29 ++++ .../Trial/T01Valigarmanda/Ruinfall.cs | 34 ++++ .../StranglingCoilSlitheringStrike.cs | 25 +++ .../Trial/T01Valigarmanda/T01Valigarmanda.cs | 119 ++++++++------ .../T01Valigarmanda/T01ValigarmandaEnums.cs | 148 ++++++++---------- .../Trial/T01Valigarmanda/ThunderPlatform.cs | 109 +++++++++++++ .../T02ZoraalJa.cs} | 8 +- .../T02ZoraalJaEnums.cs} | 2 +- .../T02ZoraalJaP2.cs} | 8 +- .../T02ZoraalJaP2Border.cs} | 2 +- .../T02ZoraalJaP2Enums.cs} | 2 +- 18 files changed, 407 insertions(+), 164 deletions(-) create mode 100644 BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ArcaneLightning.cs create mode 100644 BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ChillingCataclysm.cs create mode 100644 BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/NorthernCross.cs create mode 100644 BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/Ruinfall.cs create mode 100644 BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/StranglingCoilSlitheringStrike.cs create mode 100644 BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ThunderPlatform.cs rename BossMod/Modules/Dawntrail/Trial/{T02Zoraal/T02Zoraal.cs => T02ZoraalJa/T02ZoraalJa.cs} (85%) rename BossMod/Modules/Dawntrail/Trial/{T02Zoraal/T02ZoraalEnums.cs => T02ZoraalJa/T02ZoraalJaEnums.cs} (97%) rename BossMod/Modules/Dawntrail/Trial/{T02Zoraal/T02ZoraalP2.cs => T02ZoraalJa/T02ZoraalJaP2.cs} (88%) rename BossMod/Modules/Dawntrail/Trial/{T02Zoraal/T02ZoralP2Border.cs => T02ZoraalJa/T02ZoraalJaP2Border.cs} (96%) rename BossMod/Modules/Dawntrail/Trial/{T02Zoraal/T02ZoraalP2Enums.cs => T02ZoraalJa/T02ZoraalJaP2Enums.cs} (98%) diff --git a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Ex1ValigarmandaEnums.cs b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Ex1ValigarmandaEnums.cs index 18ecc1e8b2..950916b2c9 100644 --- a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Ex1ValigarmandaEnums.cs +++ b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Ex1ValigarmandaEnums.cs @@ -25,17 +25,17 @@ public enum AID : uint Spikesicle = 36850, // Boss->self, 10.0+0.5s cast, single-target, visual (curved aoes) SpikesicleRepeat = 36851, // Boss->self, no cast, single-target, visual (second+ curve) SpikesicleEnd = 36852, // Boss->self, no cast, single-target, visual (mechanic end) - SpikesicleAOE1 = 36853, // Helper->self, 1.7s cast, range ?-25 donut - SpikesicleAOE2 = 36854, // Helper->self, 1.7s cast, range ?-30 donut - SpikesicleAOE3 = 36855, // Helper->self, 1.7s cast, range ?-35 donut - SpikesicleAOE4 = 36856, // Helper->self, 1.7s cast, range ?-40 donut + SpikesicleAOE1 = 36853, // Helper->self, 1.7s cast, range 20-25 donut + SpikesicleAOE2 = 36854, // Helper->self, 1.7s cast, range 25-30 donut + SpikesicleAOE3 = 36855, // Helper->self, 1.7s cast, range 30-35 donut + SpikesicleAOE4 = 36856, // Helper->self, 1.7s cast, range 35-40 donut SpikesicleAOE5 = 36857, // Helper->self, 1.7s cast, range 40 width 5 rect SphereShatter = 39261, // IceBoulder->self, 1.5s cast, range 13 circle SusurrantBreathThunder = 36805, // Boss->self, 6.5s cast, single-target, visual (cone in thunder phase) SusurrantBreathIce = 36806, // Boss->self, 6.5s cast, single-target, visual (cone in ice phase) SusurrantBreathFire = 36807, // Boss->self, 6.5s cast, single-target, visual (cone in fire phase) - SusurrantBreathAOE = 36808, // Helper->self, 7.3s cast, range 50 ?-degree cone + SusurrantBreathAOE = 36808, // Helper->self, 7.3s cast, range 50 80-degree cone SlitheringStrikeThunder = 36809, // Boss->self, 6.5s cast, single-target, visual (out in thunder phase) SlitheringStrikeIce = 36810, // Boss->self, 6.5s cast, single-target, visual (out in ice phase) SlitheringStrikeFire = 36811, // Boss->self, 6.5s cast, single-target, visual (out in fire phase) @@ -110,7 +110,7 @@ public enum AID : uint BlightedBoltFail = 36832, // Helper->player, no cast, range 3 circle, ??? (second hit if mechanic failed) BlightedBoltAOE = 36833, // Helper->FeatherOfRuin, 5.8s cast, range 8 circle ThunderousBreath = 36834, // Boss->self, 7.0+0.9s cast, single-target, visual (lines + require levitation) - ThunderousBreathAOE = 36835, // Helper->self, 7.9s cast, range 50 ?-degree cone + ThunderousBreathAOE = 36835, // Helper->self, 7.9s cast, range 50 135-degree cone ArcaneLightning = 39002, // ArcaneSphere->self, 1.0s cast, range 50 width 5 rect Ruinfall = 36860, // Boss->self, 4.0+1.6s cast, single-target, visual (shared tankbuster tower + knockbacks) RuinfallTower = 36861, // Helper->self, 5.6s cast, range 6 circle, 2-man tankbuster tower diff --git a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/NorthernCross.cs b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/NorthernCross.cs index 3de314e3da..2285d09c39 100644 --- a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/NorthernCross.cs +++ b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/NorthernCross.cs @@ -23,7 +23,7 @@ public override void OnEventEnvControl(byte index, uint state) _ => default }; if (offset != default) - AOE = new(_shape, Module.Center, -126.875f.Degrees() + offset, WorldState.FutureTime(9.2f)); + AOE = new(_shape, Arena.Center, -126.875f.Degrees() + offset, WorldState.FutureTime(9.2f)); } public override void OnEventCast(Actor caster, ActorCastEvent spell) diff --git a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Stance.cs b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Stance.cs index 7ea1b29e6d..f67f26d0f1 100644 --- a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Stance.cs +++ b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/Stance.cs @@ -17,7 +17,7 @@ public override void OnCastStarted(Actor caster, ActorCastInfo spell) { AID.SusurrantBreathAOE => (_shapeCone, new(100, 75)), AID.SlitheringStrikeAOE => (_shapeOut, caster.Position), - AID.StranglingCoilAOE => (_shapeIn, Module.Center), + AID.StranglingCoilAOE => (_shapeIn, Arena.Center), _ => ((AOEShape?)null, default(WPos)) }; if (shape != null) diff --git a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/ThunderPlatform.cs b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/ThunderPlatform.cs index 4dc3941a65..0ee354b4f1 100644 --- a/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/ThunderPlatform.cs +++ b/BossMod/Modules/Dawntrail/Extreme/Ex1Valigarmanda/ThunderPlatform.cs @@ -1,6 +1,6 @@ namespace BossMod.Dawntrail.Extreme.Ex1Valigarmanda; -class ThunderPlatform(BossModule module) : BossComponent(module) +class ThunderPlatform(BossModule module) : Components.GenericAOEs(module) { public BitMask RequireLevitating; public BitMask RequireHint; @@ -8,17 +8,11 @@ class ThunderPlatform(BossModule module) : BossComponent(module) private static readonly AOEShapeRect _shape = new(5, 5, 5); - public override void AddHints(int slot, Actor actor, TextHints hints) + public override IEnumerable ActiveAOEs(int slot, Actor actor) { if (RequireHint[slot]) - hints.Add(RequireLevitating[slot] ? "Levitate" : "Stay on ground", RequireLevitating[slot] != _levitating[slot]); - } - - public override void DrawArenaBackground(int pcSlot, Actor pc) - { - if (RequireHint[pcSlot]) { - var highlightLevitate = RequireLevitating[pcSlot]; + var highlightLevitate = RequireLevitating[slot]; for (var x = 0; x < 2; ++x) { for (var z = 0; z < 3; ++z) @@ -26,14 +20,20 @@ public override void DrawArenaBackground(int pcSlot, Actor pc) var cellLevitating = ((x ^ z) & 1) != 0; if (cellLevitating != highlightLevitate) { - _shape.Draw(Arena, Module.Center + new WDir(-5 - 10 * x, -10 + 10 * z), default, Colors.AOE); - _shape.Draw(Arena, Module.Center + new WDir(+5 + 10 * x, -10 + 10 * z), default, Colors.AOE); + yield return new(_shape, Arena.Center + new WDir(-5 - 10 * x, -10 + 10 * z)); + yield return new(_shape, Arena.Center + new WDir(+5 + 10 * x, -10 + 10 * z)); } } } } } + public override void AddHints(int slot, Actor actor, TextHints hints) + { + if (RequireHint[slot]) + hints.Add(RequireLevitating[slot] ? "Levitate" : "Stay on ground", RequireLevitating[slot] != _levitating[slot]); + } + public override void OnStatusGain(Actor actor, ActorStatus status) { if ((SID)status.ID == SID.Levitate) diff --git a/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs b/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs index a52c73290b..88af62b3f5 100644 --- a/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs +++ b/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs @@ -32,6 +32,7 @@ public override IEnumerable Sources(int slot, Actor actor) public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints) { + base.AddAIHints(slot, actor, assignment, hints); var towers = Module.FindComponent()!.Towers; var isDelayDeltaLow = (towers.FirstOrDefault().Activation - WorldState.CurrentTime).TotalSeconds < 5; var isActorInsideTower = towers.Any(x => x.IsInside(actor)); diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ArcaneLightning.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ArcaneLightning.cs new file mode 100644 index 0000000000..4d9adc89bb --- /dev/null +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ArcaneLightning.cs @@ -0,0 +1,21 @@ +namespace BossMod.Dawntrail.Trial.T01Valigarmanda; + +class ArcaneLightning(BossModule module) : Components.GenericAOEs(module) +{ + private static readonly AOEShapeRect rect = new(50, 2.5f); + public readonly List AOEs = []; + + public override IEnumerable ActiveAOEs(int slot, Actor actor) => AOEs; + + public override void OnActorCreated(Actor actor) + { + if ((OID)actor.OID == OID.ArcaneSphere1) + AOEs.Add(new(rect, actor.Position, actor.Rotation, WorldState.FutureTime(8.6f))); + } + + public override void OnCastFinished(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID == AID.ArcaneLightning) + AOEs.Clear(); + } +} diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ChillingCataclysm.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ChillingCataclysm.cs new file mode 100644 index 0000000000..de973424f4 --- /dev/null +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ChillingCataclysm.cs @@ -0,0 +1,25 @@ +namespace BossMod.Dawntrail.Trial.T01Valigarmanda; + +class ChillingCataclysm(BossModule module) : Components.GenericAOEs(module) +{ + public readonly List AOEs = []; + + private static readonly AOEShapeCross _shape = new(40, 2.5f); + + public override IEnumerable ActiveAOEs(int slot, Actor actor) => AOEs; + + public override void OnActorCreated(Actor actor) + { + if ((OID)actor.OID == OID.ArcaneSphere2) + { + AOEs.Add(new(_shape, actor.Position, -0.003f.Degrees(), WorldState.FutureTime(7.1f))); + AOEs.Add(new(_shape, actor.Position, 44.998f.Degrees(), WorldState.FutureTime(7.1f))); + } + } + + public override void OnCastFinished(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID == AID.ChillingCataclysm) + AOEs.Clear(); + } +} diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/NorthernCross.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/NorthernCross.cs new file mode 100644 index 0000000000..a88c9aac4e --- /dev/null +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/NorthernCross.cs @@ -0,0 +1,29 @@ +namespace BossMod.Dawntrail.Trial.T01Valigarmanda; + +class NorthernCross(BossModule module) : Components.GenericAOEs(module) +{ + public AOEInstance? _aoe; + private static readonly AOEShapeRect _shape = new(25, 30); + + public override IEnumerable ActiveAOEs(int slot, Actor actor) => Utils.ZeroOrOne(_aoe); + + public override void OnEventEnvControl(byte index, uint state) + { + if (index != 0x02) + return; + var offset = state switch + { + 0x00200010 => -90.Degrees(), + 0x00020001 => 90.Degrees(), + _ => default + }; + if (offset != default) + _aoe = new(_shape, Arena.Center, -126.875f.Degrees() + offset, WorldState.FutureTime(9.2f)); + } + + public override void OnEventCast(Actor caster, ActorCastEvent spell) + { + if ((AID)spell.Action.ID is AID.NorthernCross1 or AID.NorthernCross2) + _aoe = null; + } +} diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/Ruinfall.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/Ruinfall.cs new file mode 100644 index 0000000000..a6828766fd --- /dev/null +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/Ruinfall.cs @@ -0,0 +1,34 @@ +namespace BossMod.Dawntrail.Trial.T01Valigarmanda; + +class RuinfallAOE(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RuinfallAOE), new AOEShapeCircle(6)); + +class RuinfallKB(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.RuinfallKB), 21, stopAfterWall: true, kind: Kind.DirForward) +{ + public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints) + { + var source = Sources(slot, actor).FirstOrDefault(); + if (source != default && actor.Role != Role.Tank) + { + hints.AddForbiddenZone(ShapeDistance.InvertedRect(Module.PrimaryActor.Position, new Angle(), 1, 0, 20), source.Activation); + } + } +} + +class RuinfallTower(BossModule module) : Components.CastTowers(module, ActionID.MakeSpell(AID.RuinfallTower), 6, 2, 2) +{ + public override void Update() + { + if (Towers.Count == 0) + return; + var forbidden = Raid.WithSlot().WhereActor(p => p.Role != Role.Tank).Mask(); + foreach (ref var t in Towers.AsSpan()) + t.ForbiddenSoakers = forbidden; + } + + public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints) + { + base.AddAIHints(slot, actor, assignment, hints); + if (Towers.Count > 0 && Towers.Any(x => x.IsInside(actor) && (Towers.FirstOrDefault().Activation - WorldState.CurrentTime).TotalSeconds < 5)) + hints.ActionsToExecute.Push(ActionID.MakeSpell(ClassShared.AID.ArmsLength), actor, ActionQueue.Priority.High); + } +} diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/StranglingCoilSlitheringStrike.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/StranglingCoilSlitheringStrike.cs new file mode 100644 index 0000000000..cf6932bf08 --- /dev/null +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/StranglingCoilSlitheringStrike.cs @@ -0,0 +1,25 @@ +namespace BossMod.Dawntrail.Trial.T01Valigarmanda; + +class StranglingCoilSusurrantBreath(BossModule module) : Components.GenericAOEs(module) +{ + private static readonly AOEShapeDonut donut = new(8, 30); + private static readonly AOEShapeCone cone = new(50, 40.Degrees()); + private readonly ArcaneLightning aoe = module.FindComponent()!; + private AOEInstance? _aoe; + + public override IEnumerable ActiveAOEs(int slot, Actor actor) => aoe.AOEs.Count == 0 ? Utils.ZeroOrOne(_aoe) : ([]); + + public override void OnCastStarted(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID == AID.StranglingCoil) + _aoe = new(donut, Arena.Center, default, Module.CastFinishAt(spell)); + else if ((AID)spell.Action.ID == AID.SusurrantBreath) + _aoe = new(cone, new(100, 75), default, Module.CastFinishAt(spell)); + } + + public override void OnCastFinished(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID is AID.StranglingCoil or AID.SusurrantBreath) + _aoe = null; + } +} diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01Valigarmanda.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01Valigarmanda.cs index 8af567d3b0..a256d89561 100644 --- a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01Valigarmanda.cs +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01Valigarmanda.cs @@ -1,48 +1,23 @@ namespace BossMod.Dawntrail.Trial.T01Valigarmanda; -class T01ValigarmandaStates : StateMachineBuilder +class SlitheringStrike(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SlitheringStrike), new AOEShapeCone(24, 90.Degrees())); +class Skyruin1(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Skyruin1)); +class Skyruin2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Skyruin2)); +class HailOfFeathers(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.HailOfFeathers)); +class DisasterZone1(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.DisasterZone1)); +class DisasterZone2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.DisasterZone2)); + +abstract class CalamitousCry(BossModule module, AID aid) : Components.LineStack(module, ActionID.MakeSpell(aid), ActionID.MakeSpell(AID.CalamitousCry), 5, 60, 3) { - public T01ValigarmandaStates(BossModule module) : base(module) + public override void OnEventCast(Actor caster, ActorCastEvent spell) { - TrivialPhase() - //.ActivateOnEnter() Disabled for now, not displaying properly, showing on boss instead of helper - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() - //.ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() // Need to be tied to spawn of ArcaneSphere - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() // Need to be tied to animation - .ActivateOnEnter() // Need to be tied to animation - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter() - .ActivateOnEnter(); + base.OnEventCast(caster, spell); + if ((AID)spell.Action.ID == AID.LimitBreakVisual4) // not sure if line stack gets cancelled when limit break phase ends, just a safety feature + CurrentBaits.Clear(); } } -class StranglingCoil2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.StranglingCoil2), new AOEShapeDonut(7, 60)); -class SlitheringStrike2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SlitheringStrike2), new AOEShapeCone(24, 90.Degrees())); -class SusurrantBreath2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SusurrantBreath2), new AOEShapeCone(50, 65.Degrees())); -class Skyruin2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Skyruin2)); -class Skyruin3(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Skyruin3)); -class ThunderousBreath2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ThunderousBreath2), new AOEShapeCone(50, 67.5f.Degrees())); -class HailOfFeathers3(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.HailOfFeathers3)); -class ArcaneLightning(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ArcaneLightning), new AOEShapeRect(50, 2.5f)); -class DisasterZone2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.DisasterZone2)); -class DisasterZone4(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.DisasterZone4)); -class RuinfallAOE(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RuinfallAOE), new AOEShapeCircle(6)); -class Ruinfall3(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.Ruinfall3), 21, stopAtWall: true, kind: Kind.DirForward); -class RuinfallTower(BossModule module) : Components.CastTowers(module, ActionID.MakeSpell(AID.RuinfallTower), 6, 2, 2); - -class NorthernCross1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.NorthernCross1), new AOEShapeRect(60, 60, DirectionOffset: -90.Degrees())); -class NorthernCross2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.NorthernCross2), new AOEShapeRect(60, 60, DirectionOffset: 90.Degrees())); +class CalamitousCry1(BossModule module) : CalamitousCry(module, AID.CalamitousCryMarker1); +class CalamitousCry2(BossModule module) : CalamitousCry(module, AID.CalamitousCryMarker2); class FreezingDust(BossModule module) : Components.StayMove(module) { @@ -57,23 +32,71 @@ public override void OnStatusLose(Actor actor, ActorStatus status) if ((SID)status.ID == SID.FreezingUp && Raid.FindSlot(actor.InstanceID) is var slot && slot >= 0) PlayerStates[slot] = default; } + + public override void OnStatusGain(Actor actor, ActorStatus status) // it sometimes seems to skip the freezing up debuff? + { + if ((SID)status.ID == SID.DeepFreeze && Raid.FindSlot(actor.InstanceID) is var slot && slot >= 0) + PlayerStates[slot] = default; + } } -class ChillingCataclysm2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ChillingCataclysm2), new AOEShapeCross(40, 2.5f)); class RuinForetold(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.RuinForetold)); class CalamitousEcho(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.CalamitousEcho), new AOEShapeCone(40, 10.Degrees())); -class Tulidisaster1(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Tulidisaster1)); -class Eruption2(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Eruption2), 6); -[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 832, NameID = 12854)] +abstract class Tulidisaster(BossModule module, AID aid, float delay) : Components.RaidwideCastDelay(module, ActionID.MakeSpell(AID.TulidisasterVisual), ActionID.MakeSpell(aid), delay); +class Tulidisaster1(BossModule module) : Tulidisaster(module, AID.Tulidisaster1, 3.1f); +class Tulidisaster2(BossModule module) : Tulidisaster(module, AID.Tulidisaster2, 11.6f); +class Tulidisaster3(BossModule module) : Tulidisaster(module, AID.Tulidisaster3, 19.6f); + +class Eruption(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Eruption), 6); +class IceTalon(BossModule module) : Components.BaitAwayIcon(module, new AOEShapeCircle(6), (uint)IconID.Tankbuster, ActionID.MakeSpell(AID.IceTalon), 5, true) +{ + public override void AddGlobalHints(GlobalHints hints) + { + if (CurrentBaits.Count > 0) + hints.Add("Tankbuster cleave"); + } +} + +class T01ValigarmandaStates : StateMachineBuilder +{ + public T01ValigarmandaStates(BossModule module) : base(module) + { + TrivialPhase() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter() + .ActivateOnEnter(); + } +} + +[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "The Combat Reborn Team (Malediktus, LTS)", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 832, NameID = 12854)] public class T01Valigarmanda(WorldState ws, Actor primary) : BossModule(ws, primary, new(100, 100), new ArenaBoundsRect(20, 15)) { protected override void DrawEnemies(int pcSlot, Actor pc) { - Arena.Actor(PrimaryActor); - Arena.Actors(Enemies(OID.IceBoulder)); - Arena.Actors(Enemies(OID.FlameKissedBeacon)); - Arena.Actors(Enemies(OID.GlacialBeacon)); - Arena.Actors(Enemies(OID.ThunderousBeacon)); + Arena.Actors(Enemies(OID.IceBoulder).Concat(Enemies(OID.FlameKissedBeacon)).Concat(Enemies(OID.GlacialBeacon)).Concat(Enemies(OID.ThunderousBeacon)).Concat([PrimaryActor])); } } diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01ValigarmandaEnums.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01ValigarmandaEnums.cs index 1df13abc8c..a34791523e 100644 --- a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01ValigarmandaEnums.cs +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/T01ValigarmandaEnums.cs @@ -2,128 +2,104 @@ public enum OID : uint { - Helper = 0x233C, // R0.500, x20, 523 type - Boss = 0x4115, // R20.000, x1 - - Valigarmanda1 = 0x417A, // R0.000, x1, Part type - Valigarmanda2 = 0x4179, // R0.000, x1, Part type - - FeatherOfRuin = 0x4116, // R2.680, x0 (spawn during fight) - - ArcaneSphere1 = 0x4181, // R1.000, x0 (spawn during fight) - ArcaneSphere2 = 0x4493, // R1.000, x0 (spawn during fight) - - IceBoulder = 0x4117, // R1.260, x0 (spawn during fight) - FlameKissedBeacon = 0x438B, // R4.800, x0 (spawn during fight) - GlacialBeacon = 0x438C, // R4.800, x0 (spawn during fight) - ThunderousBeacon = 0x438A, // R4.800, x0 (spawn during fight) - - Actor1ea1a1 = 0x1EA1A1, // R0.500-2.000, x1, EventObj type + Boss = 0x4115, // R20.0 + Valigarmanda1 = 0x417A, + Valigarmanda2 = 0x4179, + FeatherOfRuin = 0x4116, // R2.68 + ArcaneSphere1 = 0x4181, // R1.0 + ArcaneSphere2 = 0x4493, // R1.0 + IceBoulder = 0x4117, // R1.26 + FlameKissedBeacon = 0x438B, // R4.8 + GlacialBeacon = 0x438C, // R4.8 + ThunderousBeacon = 0x438A, // R4.8 + Helper = 0x233C } public enum AID : uint { - Attack = 36899, // Boss->player, no cast, single-target + AutoAttack = 36899, // Boss->player, no cast, single-target - StranglingCoil1 = 36159, // Boss->self, 6.5s cast, single-target - StranglingCoil2 = 36160, // Helper->self, 7.3s cast, range ?-30 donut + StranglingCoilVisual = 36159, // Boss->self, 6.5s cast, single-target + StranglingCoil = 36160, // Helper->self, 7.3s cast, range 8-30 donut - SlitheringStrike1 = 36157, // Boss->self, 6.5s cast, single-target - SlitheringStrike2 = 36158, // Helper->self, 7.3s cast, range 24 180.000-degree cone // Point blank AOE, out of melee range safe + SlitheringStrikeVisual = 36157, // Boss->self, 6.5s cast, single-target + SlitheringStrike = 36158, // Helper->self, 7.3s cast, range 24 180-degree cone, point blank AOE, out of melee range safe - SusurrantBreath1 = 36155, // Boss->self, 6.5s cast, single-target - SusurrantBreath2 = 36156, // Helper->self, 7.3s cast, range 50 ?-degree cone // Corners of arena safe + SusurrantBreathVisual = 36155, // Boss->self, 6.5s cast, single-target + SusurrantBreath = 36156, // Helper->self, 7.3s cast, range 50 80-degree cone, corners of arena safe - Skyruin1 = 36161, // Boss->self, 6.0+5.3s cast, single-target - Skyruin2 = 36162, // Helper->self, 4.5s cast, range 80 circle // Raidwide - Skyruin3 = 36163, // Helper->self, 4.5s cast, range 80 circle // Raidwide - Skyruin4 = 38338, // Boss->self, 6.0+5.3s cast, single-target + SkyruinVisual1 = 36161, // Boss->self, 6.0+5.3s cast, single-target + SkyruinVisual2 = 38338, // Boss->self, 6.0+5.3s cast, single-target + Skyruin1 = 36162, // Helper->self, 4.5s cast, range 80 circle, raidwide + Skyruin2 = 36163, // Helper->self, 4.5s cast, range 80 circle, raidwide - ThunderousBreath1 = 36175, // Boss->self, 7.0+0.9s cast, single-target - ThunderousBreath2 = 36176, // Helper->self, 7.9s cast, range 50 135.000-degree cone // Raidwide, mitigated by standing on levitation pads + ThunderousBreathVisual = 36175, // Boss->self, 7.0+0.9s cast, single-target + ThunderousBreath = 36176, // Helper->self, 7.9s cast, range 50 135-degree cone, raidwide, mitigated by standing on levitation pads - HailOfFeathers1 = 36170, // Boss->self, 4.0+2.0s cast, single-target - HailOfFeathers2 = 36171, // FeatherOfRuin->self, no cast, single-target - HailOfFeathers3 = 36361, // Helper->self, 6.0s cast, range 80 circle // Raidwide + HailOfFeathersVisual1 = 36170, // Boss->self, 4.0+2.0s cast, single-target + HailOfFeathersVisual2 = 36171, // FeatherOfRuin->self, no cast, single-target + HailOfFeathers = 36361, // Helper->self, 6.0s cast, range 80 circle, raidwide - BlightedBolt1 = 36172, // Boss->self, 7.0+0.8s cast, single-target - BlightedBolt2 = 36173, // Helper->player, no cast, range 3 circle // Player-targeted AOE, mitigated by leaving the levitation pads - BlightedBolt3 = 36174, // Helper->FeatherOfRuin, 7.8s cast, range 7 circle // Feather-targeted AOE + BlightedBoltVisual = 36172, // Boss->self, 7.0+0.8s cast, single-target + BlightedBolt1 = 36173, // Helper->player, no cast, range 3 circle, player-targeted AOE, mitigated by leaving the levitation tiles + BlightedBolt2 = 36174, // Helper->FeatherOfRuin, 7.8s cast, range 7 circle, feather-targeted AOE ArcaneLightning = 39001, // ArcaneSphere1->self, 1.0s cast, range 50 width 5 rect - DisasterZone1 = 36164, // Boss->self, 3.0+0.8s cast, ??? - DisasterZone2 = 36165, // Helper->self, 3.8s cast, range 80 circle // Raidwide - DisasterZone3 = 36166, // Boss->self, 3.0+0.8s cast, ??? - DisasterZone4 = 36167, // Helper->self, 3.8s cast, range 80 circle // Raidwide + DisasterZoneVisual1 = 36164, // Boss->self, 3.0+0.8s cast, ??? + DisasterZoneVisual2 = 36166, // Boss->self, 3.0+0.8s cast, ??? + DisasterZone1 = 36165, // Helper->self, 3.8s cast, range 80 circle, raidwide + DisasterZone2 = 36167, // Helper->self, 3.8s cast, range 80 circle, raidwide - Ruinfall1 = 36186, // Boss->self, 4.0+1.6s cast, single-target + RuinfallVisual = 36186, // Boss->self, 4.0+1.6s cast, single-target RuinfallTower = 36187, // Helper->self, 5.6s cast, range 6 circle - Ruinfall3 = 36189, // Helper->self, 8.0s cast, range 40 width 40 rect // Knockback 21 DirForward + RuinfallKB = 36189, // Helper->self, 8.0s cast, range 40 width 40 rect, knockback 21, forward RuinfallAOE = 39129, // Helper->location, 9.7s cast, range 6 circle NorthernCross1 = 36168, // Helper->self, 3.0s cast, range 60 width 25 rect NorthernCross2 = 36169, // Helper->self, 3.0s cast, range 60 width 25 rect - FreezingDust = 36177, // Boss->self, 5.0+0.8s cast, range 80 circle // Move or be frozen + FreezingDust = 36177, // Boss->self, 5.0+0.8s cast, range 80 circle, move or be frozen - ChillingCataclysm1 = 39264, // ArcaneSphere2->self, 1.0s cast, single-target - ChillingCataclysm2 = 39265, // Helper->self, 1.5s cast, range 40 width 5 cross + ChillingCataclysmVisual = 39264, // ArcaneSphere2->self, 1.0s cast, single-target + ChillingCataclysm = 39265, // Helper->self, 1.5s cast, range 40 width 5 cross - RuinForetold = 38545, // Boss->self, 5.0s cast, range 80 circle // Raidwide, summons 3 adds that must be destroyed + RuinForetold = 38545, // Boss->self, 5.0s cast, range 80 circle, raidwide, summons 3 adds that must be destroyed - UnknownAbility1 = 34722, // Helper->player, no cast, single-target + CalamitousCryVisual1 = 36192, // Boss->self, 5.1+0.9s cast, single-target + CalamitousCryVisual2 = 36193, // Boss->self, no cast, single-target + CalamitousCryMarker1 = 26708, // Helper->player, no cast, single-target + CalamitousCryMarker2 = 34722, // Helper->player, no cast, single-target + CalamitousCry = 36194, // Helper->self, no cast, range 80 width 6 rect - CalamitousCry1 = 36192, // Boss->self, 5.1+0.9s cast, single-target - CalamitousCry2 = 36193, // Boss->self, no cast, single-target - CalamitousCry3 = 36194, // Helper->self, no cast, range 80 width 6 rect + CalamitousEcho = 36195, // Helper->self, 5.0s cast, range 40 20-degree cone - CalamitousEcho = 36195, // Helper->self, 5.0s cast, range 40 20.000-degree cone // telegraphed conal AoEs + LimitBreakVisual1 = 38245, // FlameKissedBeacon->Boss, no cast, single-target + LimitBreakVisual2 = 38247, // GlacialBeacon->Boss, no cast, single-target + LimitBreakVisual3 = 38246, // ThunderousBeacon->Boss, no cast, single-target + LimitBreakVisual4 = 38323, // Boss->self, no cast, single-target, limit break phase ends - UnknownAbility2 = 26708, // Helper->player, no cast, single-target - UnknownWeaponskill1 = 38245, // FlameKissedBeacon->Boss, no cast, single-target - UnknownWeaponskill2 = 38247, // GlacialBeacon->Boss, no cast, single-target - UnknownWeaponskill3 = 38246, // ThunderousBeacon->Boss, no cast, single-target - UnknownWeaponskill4 = 38323, // Boss->self, no cast, single-target + TulidisasterVisual = 36197, // Boss->self, 7.0+3.0s cast, single-target, 3x raidwide, enrage if adds not killed + Tulidisaster1 = 36199, // Helper->self, no cast, range 80 circle + Tulidisaster2 = 36200, // Helper->self, no cast, range 80 circle + Tulidisaster3 = 36198, // Helper->self, no cast, range 80 circle - Tulidisaster1 = 36197, // Boss->self, 7.0+3.0s cast, single-target // Repeat Raidwides, wipe if adds not killed - Tulidisaster2 = 36199, // Helper->self, no cast, range 80 circle - Tulidisaster3 = 36200, // Helper->self, no cast, range 80 circle - Tulidisaster4 = 36198, // Helper->self, no cast, range 80 circle + EruptionVisual = 36190, // Boss->self, 3.0s cast, single-target + Eruption = 36191, // Helper->location, 3.0s cast, range 6 circle, baited AOEs - Eruption1 = 36190, // Boss->self, 3.0s cast, single-target - Eruption2 = 36191, // Helper->location, 3.0s cast, range 6 circle // Baited AOEs - - IceTalonVisual = 36184, // Boss->self, 4.0+1.0s cast, single-target - IceTalonTankbuster = 36185, // Valigarmanda1/Valigarmanda2->player, no cast, range 6 circle // AOE Tankbuster + IceTalonVisual = 36184, // Boss->self, 4.0+1.0s cast, single-target, AOE Tankbuster + IceTalon = 36185 // Valigarmanda1/Valigarmanda2->player, no cast, range 6 circle } public enum SID : uint { - SustainedDamage = 2935, // Helper->player, extra=0x0 - Trauma = 3796, // Helper->player, extra=0x1 - DamageDown = 628, // Helper->player, extra=0x1 - Concussion = 997, // Helper->player, extra=0xF43 - Electrocution = 2086, // Helper->player, extra=0x0 - Levitate = 3974, // none->player, extra=0xD7 - UnknownStatus = 2552, // none->player/FeatherOfRuin, extra=0x21/0x2AD/0x2BA - Frostbite = 2083, // Helper->player, extra=0x0 FreezingUp = 3523, // Boss->player, extra=0x0 - DeepFreeze = 4150, // Helper->player, extra=0x0 - DamageUp = 3975, // Boss->Boss, extra=0x1/0x2/0x3/0x4 - PerpetualConflagration = 4122, // none->player, extra=0x0 - VulnerabilityUp = 1789, // Helper->player, extra=0x1 - Paralysis = 3463, // ArcaneSphere1->player, extra=0x0 - + DeepFreeze = 4150, // Boss/Helper->player, extra=0x0 + Levitate = 3974 // none->player, extra=0xD7 } public enum IconID : uint { - Icon225 = 225, // player - Icon344 = 344, // player -} - -public enum TetherID : uint -{ - Tether6 = 6, // ArcaneSphere1->Boss + Tankbuster = 344, // player + FreezingUp = 225, // player } diff --git a/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ThunderPlatform.cs b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ThunderPlatform.cs new file mode 100644 index 0000000000..2b1a8b00f1 --- /dev/null +++ b/BossMod/Modules/Dawntrail/Trial/T01Valigarmanda/ThunderPlatform.cs @@ -0,0 +1,109 @@ +namespace BossMod.Dawntrail.Trial.T01Valigarmanda; + +class ThunderPlatform(BossModule module) : Components.GenericAOEs(module) +{ + private BitMask requireLevitating; + private BitMask requireHint; + private BitMask levitating; + private DateTime activation; + + private static readonly AOEShapeRect rect = new(5, 5, 5); + + public override IEnumerable ActiveAOEs(int slot, Actor actor) + { + if (requireHint[slot]) + { + var highlightLevitate = requireLevitating[slot]; + for (var x = 0; x < 2; ++x) + { + for (var z = 0; z < 3; ++z) + { + var cellLevitating = ((x ^ z) & 1) != 0; + if (cellLevitating != highlightLevitate) + { + yield return new(rect, Arena.Center + new WDir(-5 - 10 * x, -10 + 10 * z), default, activation); + yield return new(rect, Arena.Center + new WDir(+5 + 10 * x, -10 + 10 * z), default, activation); + } + } + } + } + } + + public override void OnCastStarted(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID == AID.ThunderousBreath) + { + foreach (var (i, _) in Raid.WithSlot(true)) + requireHint[i] = requireLevitating[i] = true; + activation = Module.CastFinishAt(spell); + } + else if ((AID)spell.Action.ID == AID.BlightedBoltVisual) + { + foreach (var (i, _) in Raid.WithSlot(true)) + { + requireHint[i] = true; + requireLevitating[i] = false; + } + activation = Module.CastFinishAt(spell); + } + } + + public override void OnCastFinished(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID is AID.ThunderousBreath or AID.BlightedBolt2) + { + requireHint.Reset(); + requireLevitating.Reset(); + } + } + + public override void AddHints(int slot, Actor actor, TextHints hints) + { + if (requireHint[slot]) + hints.Add(requireLevitating[slot] ? "Levitate" : "Stay on ground", requireLevitating[slot] != levitating[slot]); + } + + public override void OnStatusGain(Actor actor, ActorStatus status) + { + if ((SID)status.ID == SID.Levitate) + levitating.Set(Raid.FindSlot(actor.InstanceID)); + } + + public override void OnStatusLose(Actor actor, ActorStatus status) + { + if ((SID)status.ID == SID.Levitate) + levitating.Clear(Raid.FindSlot(actor.InstanceID)); + } +} + +class BlightedBolt1(BossModule module) : Components.GenericAOEs(module) +{ + private readonly ThunderPlatform _levitate = module.FindComponent()!; + private static readonly AOEShapeCircle circle = new(3); + private bool active; + + public override IEnumerable ActiveAOEs(int slot, Actor actor) + { + if (active) + foreach (var p in Raid.WithSlot().Exclude(actor)) + { + var pos = p.Item2.Position; + if (_levitate.ActiveAOEs(slot, actor).Any(c => c.Check(pos))) + yield return new(circle, pos); + } + } + + public override void OnCastStarted(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID == AID.BlightedBoltVisual) + active = true; + } + + public override void OnCastFinished(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID == AID.BlightedBoltVisual) + active = false; + } +} + +class BlightedBolt2(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.BlightedBolt2), 7); \ No newline at end of file diff --git a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02Zoraal.cs b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJa.cs similarity index 85% rename from BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02Zoraal.cs rename to BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJa.cs index a8462287f6..f50c319a95 100644 --- a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02Zoraal.cs +++ b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJa.cs @@ -1,8 +1,8 @@ -namespace BossMod.Dawntrail.Trial.T02Zoraal; +namespace BossMod.Dawntrail.Trial.T02ZoraalJa; -class T02ZoraalStates : StateMachineBuilder +class T02ZoraalJaStates : StateMachineBuilder { - public T02ZoraalStates(BossModule module) : base(module) + public T02ZoraalJaStates(BossModule module) : base(module) { TrivialPhase() .ActivateOnEnter() @@ -27,4 +27,4 @@ class VorpalTrail4(BossModule module) : Components.ChargeAOEs(module, ActionID.M class VorpalTrail5(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.VorpalTrail5), 2f); [ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 995, NameID = 12881)] -public class T02Zoraal(WorldState ws, Actor primary) : BossModule(ws, primary, new(100, 100), new ArenaBoundsSquare(20, 45.Degrees())); +public class T02ZoraalJa(WorldState ws, Actor primary) : BossModule(ws, primary, new(100, 100), new ArenaBoundsSquare(20, 45.Degrees())); diff --git a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalEnums.cs b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaEnums.cs similarity index 97% rename from BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalEnums.cs rename to BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaEnums.cs index d8a8b3466e..a8c3d47061 100644 --- a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalEnums.cs +++ b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaEnums.cs @@ -1,4 +1,4 @@ -namespace BossMod.Dawntrail.Trial.T02Zoraal; +namespace BossMod.Dawntrail.Trial.T02ZoraalJa; public enum OID : uint { diff --git a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalP2.cs b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2.cs similarity index 88% rename from BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalP2.cs rename to BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2.cs index 5a8298ed9a..859e295fce 100644 --- a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalP2.cs +++ b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2.cs @@ -1,8 +1,8 @@ -namespace BossMod.Dawntrail.Trial.T02ZoraalP2; +namespace BossMod.Dawntrail.Trial.T02ZoraalJaP2; -class T02ZoraalP2States : StateMachineBuilder +class T02ZoraalJaP2States : StateMachineBuilder { - public T02ZoraalP2States(BossModule module) : base(module) + public T02ZoraalJaP2States(BossModule module) : base(module) { TrivialPhase() .ActivateOnEnter() @@ -34,5 +34,5 @@ class Actualize(BossModule module) : Components.RaidwideCast(module, ActionID.Ma class HalfCircuit5(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.HalfCircuit5), new AOEShapeCircle(10)); [ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 995, NameID = 12882)] -public class T02ZoraalP2(WorldState ws, Actor primary) : BossModule(ws, primary, DawnofanAgeBorder.Center, DawnofanAgeBorder.NormalBounds); +public class T02ZoraalJaP2(WorldState ws, Actor primary) : BossModule(ws, primary, DawnofanAgeBorder.Center, DawnofanAgeBorder.NormalBounds); // Arena swaps to 10x10 square with 45 degree rotation periodically diff --git a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoralP2Border.cs b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2Border.cs similarity index 96% rename from BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoralP2Border.cs rename to BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2Border.cs index 2e267569c9..add105c662 100644 --- a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoralP2Border.cs +++ b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2Border.cs @@ -1,4 +1,4 @@ -namespace BossMod.Dawntrail.Trial.T02ZoraalP2; +namespace BossMod.Dawntrail.Trial.T02ZoraalJaP2; class DawnofanAgeBorder(BossModule module) : Components.GenericAOEs(module) { diff --git a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalP2Enums.cs b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2Enums.cs similarity index 98% rename from BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalP2Enums.cs rename to BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2Enums.cs index 09977950fb..ac122c8ce2 100644 --- a/BossMod/Modules/Dawntrail/Trial/T02Zoraal/T02ZoraalP2Enums.cs +++ b/BossMod/Modules/Dawntrail/Trial/T02ZoraalJa/T02ZoraalJaP2Enums.cs @@ -1,4 +1,4 @@ -namespace BossMod.Dawntrail.Trial.T02ZoraalP2; +namespace BossMod.Dawntrail.Trial.T02ZoraalJaP2; public enum OID : uint {