From 44521c9eb78bdca99e1a49ecec8052923df692e9 Mon Sep 17 00:00:00 2001 From: CarnifexOptimus <156172553+CarnifexOptimus@users.noreply.github.com> Date: Sat, 23 Nov 2024 00:31:44 +0100 Subject: [PATCH] Prishe module updated --- BossMod/Components/Exaflare.cs | 5 +- .../Dawntrail/Alliance/A11Prishe/A11Prishe.cs | 23 ++-- .../Alliance/A11Prishe/A11PrisheEnums.cs | 97 +++++-------- .../Alliance/A11Prishe/A11PrisheStates.cs | 17 +-- .../Alliance/A11Prishe/ArenaChanges.cs | 58 ++++++++ .../Alliance/A11Prishe/AsuranFists.cs | 22 +++ .../Alliance/A11Prishe/AuroralUppercut.cs | 29 ++++ .../Alliance/A11Prishe/BanishStorm.cs | 73 ++++++++++ .../Alliance/A11Prishe/KnuckleSandwich.cs | 26 ++++ .../Dawntrail/Alliance/A12Fafnir/A12Fafnir.cs | 24 ++-- .../Alliance/A12Fafnir/A12FafnirEnums.cs | 130 ++++++++++-------- .../Alliance/A13ArkAngels/A13ArkAngels.cs | 2 +- .../A13ArkAngels/A13ArkAngelsEnums.cs | 9 +- .../A14ShadowLord/A14ShadowLordEnums.cs | 20 ++- .../Raid/M03NBruteBomber/BarbarousBarrage.cs | 4 +- .../D11LapisManalis/D112GalateaMagna.cs | 3 +- 16 files changed, 374 insertions(+), 168 deletions(-) create mode 100644 BossMod/Modules/Dawntrail/Alliance/A11Prishe/ArenaChanges.cs create mode 100644 BossMod/Modules/Dawntrail/Alliance/A11Prishe/AsuranFists.cs create mode 100644 BossMod/Modules/Dawntrail/Alliance/A11Prishe/AuroralUppercut.cs create mode 100644 BossMod/Modules/Dawntrail/Alliance/A11Prishe/BanishStorm.cs create mode 100644 BossMod/Modules/Dawntrail/Alliance/A11Prishe/KnuckleSandwich.cs diff --git a/BossMod/Components/Exaflare.cs b/BossMod/Components/Exaflare.cs index f63f4290d6..53f12300b8 100644 --- a/BossMod/Components/Exaflare.cs +++ b/BossMod/Components/Exaflare.cs @@ -35,12 +35,13 @@ public override IEnumerable ActiveAOEs(int slot, Actor actor) protected IEnumerable<(WPos, DateTime, Angle)> FutureAOEs() { - foreach (var l in Lines) + for (var i = 0; i < Lines.Count; ++i) { + var l = Lines[i]; var num = Math.Min(l.ExplosionsLeft, l.MaxShownExplosions); var pos = l.Next; var time = l.NextExplosion > WorldState.CurrentTime ? l.NextExplosion : WorldState.CurrentTime; - for (var i = 1; i < num; ++i) + for (var j = 1; j < num; ++j) { pos += l.Advance; time = time.AddSeconds(l.TimeToMove); diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11Prishe.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11Prishe.cs index a1d35824b6..e08fe410c7 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11Prishe.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11Prishe.cs @@ -1,21 +1,14 @@ namespace BossMod.Dawntrail.Alliance.A11Prishe; class Banishga(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Banishga)); - -// Knuckle Sandwich and Brittle Impact happen at the same time and need to be staggered -class KnuckleSandwichAOE1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.KnuckleSandwichAOE1), new AOEShapeCircle(9)); -class KnuckleSandwichAOE2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.KnuckleSandwichAOE2), new AOEShapeCircle(18)); -class KnuckleSandwichAOE3(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.KnuckleSandwichAOE3), new AOEShapeCircle(27)); -class BrittleImpact1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BrittleImpact1), new AOEShapeDonut(9, 60)); -class BrittleImpact2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BrittleImpact2), new AOEShapeDonut(18, 60)); -class BrittleImpact3(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BrittleImpact3), new AOEShapeDonut(27, 60)); - -class NullifyingDropkick1(BossModule module) : Components.CastSharedTankbuster(module, ActionID.MakeSpell(AID.NullifyingDropkick1), 6); - -class Holy2(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.Holy2), 6); - +class NullifyingDropkick(BossModule module) : Components.CastSharedTankbuster(module, ActionID.MakeSpell(AID.NullifyingDropkick), 6); +class Holy(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.Holy), 6); class BanishgaIV(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.BanishgaIV)); class Explosion(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Explosion), new AOEShapeCircle(8)); -[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team (LTS)", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 1015, NameID = 13351)] -public class A11Prishe(WorldState ws, Actor primary) : BossModule(ws, primary, new(800, 400), new ArenaBoundsSquare(35)); +[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "The Combat Reborn Team (Malediktus, LTS)", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 1015, NameID = 13351)] +public class A11Prishe(WorldState ws, Actor primary) : BossModule(ws, primary, ArenaCenter, DefaultBounds) +{ + public static readonly WPos ArenaCenter = new(800, 400); + public static readonly ArenaBoundsSquare DefaultBounds = new(35); +} diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheEnums.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheEnums.cs index 5fe2b7b8cd..835d68cb36 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheEnums.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheEnums.cs @@ -2,81 +2,58 @@ public enum OID : uint { - Helper = 0x233C, // R0.500, x?, Helper type - Unknown1 = 0x46CF, // R1.200, x? - Unknown2 = 0x4696, // R0.465, x? - SpatialRift = 0x1EBCD1, // R0.500, x?, EventObj type - Boss = 0x4673, // R6.342, x? - BakoolJaJa = 0x4697, // R3.150, x? - LuminousRemnant = 0x4674, // R1.000-1.860, x? - Actor1ebcc9 = 0x1EBCC9, // R0.500, x?, EventObj type + Boss = 0x4673, // R6.342 + LuminousRemnant = 0x4674, // R1.000-1.86 + Tower = 0x1EBCC9, // R0.500, x0 (spawn during fight), EventObj type + Helper3 = 0x4696, // R0.465 + Helper2 = 0x46CF, // R1.2 + Helper = 0x233C } public enum AID : uint { - AutoAttack = 40934, // 4673->player, no cast, single-target - Banishga = 40935, // 4673->self, 5.0s cast, range 80 circle - UnknownAbility = 40933, // 4673->location, no cast, single-target + AutoAttack = 40934, // Boss->player, no cast, single-target + Teleport = 40933, // Boss->location, no cast, single-target - KnuckleSandwich1 = 40936, // 4673->location, 12.0+1.0s cast, single-target - KnuckleSandwich2 = 40937, // 4673->location, 12.0+1.0s cast, single-target - KnuckleSandwich3 = 40938, // 4673->location, 12.0+1.0s cast, single-target - KnuckleSandwichAOE1 = 40939, // 233C->self, 13.0s cast, range 9 circle - KnuckleSandwichAOE2 = 40940, // 233C->self, 13.0s cast, range 18 circle - KnuckleSandwichAOE3 = 40941, // 233C->self, 13.0s cast, range 27 circle + Banishga = 40935, // Boss->self, 5.0s cast, range 80 circle - BrittleImpact1 = 40942, // 233C->self, 14.5s cast, range ?-60 donut - BrittleImpact2 = 40943, // 233C->self, 14.5s cast, range ?-60 donut - BrittleImpact3 = 40944, // 233C->self, 14.5s cast, range ?-60 donut + KnuckleSandwichVisual1 = 40936, // Boss->location, 12.0+1.0s cast, single-target + KnuckleSandwichVisual2 = 40937, // Boss->location, 12.0+1.0s cast, single-target + KnuckleSandwichVisual3 = 40938, // Boss->location, 12.0+1.0s cast, single-target + KnuckleSandwich1 = 40939, // Helper->self, 13.0s cast, range 9 circle + KnuckleSandwich2 = 40940, // Helper->self, 13.0s cast, range 18 circle + KnuckleSandwich3 = 40941, // Helper->self, 13.0s cast, range 27 circle + BrittleImpact1 = 40942, // Helper->self, 14.5s cast, range 9-60 donut + BrittleImpact2 = 40943, // Helper->self, 14.5s cast, range 18-60 donut + BrittleImpact3 = 40944, // Helper->self, 14.5s cast, range 27-60 donut - NullifyingDropkick1 = 40945, // 4673->players, 5.0+1.5s cast, range 6 circle - NullifyingDropkick2 = 40957, // 233C->players, 6.5s cast, range 6 circle + NullifyingDropkickVisual = 40945, // Boss->players, 5.0+1.5s cast, range 6 circle + NullifyingDropkick = 40957, // Helper->players, 6.5s cast, range 6 circle - BanishStorm = 40946, // 4673->self, 4.0s cast, single-target // Marching AOEs - Banish = 40947, // 233C->self, no cast, range 6 circle + BanishStorm = 40946, // Boss->self, 4.0s cast, single-target, marching AOEs + Banish = 40947, // Helper->self, no cast, range 6 circle - Holy1 = 40962, // 4673->self, 4.0+1.0s cast, single-target - Holy2 = 40963, // 233C->players, 5.0s cast, range 6 circle // Spread Markers + HolyVisual = 40962, // Boss->self, 4.0+1.0s cast, single-target + Holy = 40963, // Helper->players, 5.0s cast, range 6 circle, spread Markers - CrystallineThorns = 40948, // 4673->self, 4.0+1.0s cast, single-target // Arena Change - Thornbite = 40949, // 233C->self, no cast, range 80 circle + CrystallineThorns = 40948, // Boss->self, 4.0+1.0s cast, single-target, arena change + Thornbite = 40949, // Helper->self, no cast, range 80 circle - // AuroralUppercut1 = 40950, // 4673->self, 11.4+1.6s cast, single-target // Suspected single space cast - AuroralUppercut2 = 40951, // 4673->self, 11.4+1.6s cast, single-target // Suspected two space cast - AuroralUppercut3 = 40952, // 4673->self, 11.4+1.6s cast, single-target // Definitely 3 space cast - AuroralUppercut4 = 40953, // 233C->self, no cast, range 80 circle + AuroralUppercut1 = 40950, // Boss->self, 11.4+1,6s cast, single-target, knockback 12 + AuroralUppercut2 = 40951, // Helper->self, 11.4+1.6s cast, single-target, knockback 25 + AuroralUppercut3 = 40952, // Boss->self, 11.4+1.6s cast, single-target, knockback 38 + AuroralUppercut4 = 40953, // Helper->self, no cast, range 80 circle - BanishgaIV = 40954, // 4673->self, 5.0s cast, range 80 circle // Raidwide that spawns AOEs - Explosion = 40955, // 4674->self, 5.0s cast, range 8 circle + BanishgaIV = 40954, // Boss->self, 5.0s cast, range 80 circle, raidwide that spawns AOEs + Explosion = 40955, // LuminousRemnant->self, 5.0s cast, range 8 circle - AsuranFists1 = 40956, // 4673->self, 6.5+0.5s cast, single-target - AsuranFists2 = 40958, // 233C->self, no cast, range 6 circle - AsuranFists3 = 40959, // 233C->self, no cast, range 6 circle - AsuranFists4 = 40960, // 233C->self, no cast, range 6 circle + AsuranFistsVisual = 40956, // Boss->self, 6.5+0.5s cast, single-target + AsuranFists1 = 40958, // Helper->self, no cast, range 6 circle + AsuranFists2 = 40959, // Helper->self, no cast, range 6 circle + AsuranFists3 = 40960 // Helper->self, no cast, range 6 circle } public enum SID : uint { - LightResistanceDown = 2278, // Helper->player, extra=0x0 - Stun1 = 4378, // none->player, extra=0x0 - Stun2 = 4374, // none->player, extra=0x0 - SustainedDamage1 = 2935, // Helper->player, extra=0x0 - SustainedDamage2 = 3795, // none->LuminousRemnant, extra=0x1 - Unknown1 = 2195, // none->Boss, extra=0x338 - Unknown2 = 2056, // none->Boss, extra=0x339 - Unknown3 = 3517, // Helper->player, extra=0x0 - VulnerabilityUp1 = 1789, // Helper/LuminousRemnant->player, extra=0x1/0x2/0x3/0x4 - VulnerabilityUp2 = 3366, // none->player, extra=0x0 -} - -public enum IconID : uint -{ - Icon570 = 570, // player->self - Icon215 = 215, // player->self -} - -public enum TetherID : uint -{ - Tether215 = 215, // Unknown1->Boss - Tether297 = 297, // player->Unknown1 + Knockback = 3517 // Helper->player, extra=0x0 } diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheStates.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheStates.cs index 5d9a94a89e..e5d8f00c72 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheStates.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/A11PrisheStates.cs @@ -5,15 +5,16 @@ class A11PrisheStates : StateMachineBuilder public A11PrisheStates(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(); } diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/ArenaChanges.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/ArenaChanges.cs new file mode 100644 index 0000000000..ba50414eb5 --- /dev/null +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/ArenaChanges.cs @@ -0,0 +1,58 @@ +namespace BossMod.Dawntrail.Alliance.A11Prishe; + +class ArenaChanges(BossModule module) : Components.GenericAOEs(module) +{ + private AOEInstance? _aoe; + private static readonly Square[] defaultSquare = [new(A11Prishe.ArenaCenter, 35)]; + private static readonly Shape[] differenceENVC00020001 = [new Square(new(795, 405), 10), new Square(new(805, 395), 10), new Rectangle(new(810, 430), 15, 5), + new Rectangle(new(830, 420), 5, 15), new Rectangle(new(790, 370), 15, 5), new Rectangle(new(770, 380), 5, 15)]; + private static readonly AOEShapeCustom arenaChangeENVC00020001 = new(defaultSquare, differenceENVC00020001); + private static readonly ArenaBoundsComplex arenaENVC00020001 = new(differenceENVC00020001); + private static readonly Shape[] differenceENVC02000100 = [new Square(new(795, 395), 10), new Square(new(805, 405), 10), new Rectangle(new(820, 370), 15, 5), + new Rectangle(new(830, 390), 5, 15), new Rectangle(new(780, 430), 15, 5), new Rectangle(new(770, 410), 5, 15)]; + private static readonly AOEShapeCustom arenaChangeENVC02000100 = new(defaultSquare, differenceENVC02000100); + private static readonly ArenaBoundsComplex arenaENVC02000100 = new(differenceENVC02000100); + public override IEnumerable ActiveAOEs(int slot, Actor actor) => Utils.ZeroOrOne(_aoe); + + public override void OnEventEnvControl(byte index, uint state) + { + if (index != 0x01) + return; + switch (state) + { + case 0x00020001: + SetAOE(arenaChangeENVC00020001); + break; + case 0x02000100: + SetAOE(arenaChangeENVC02000100); + break; + case 0x00200010: + SetArena(arenaENVC00020001); + break; + case 0x08000400: + SetArena(arenaENVC02000100); + break; + case 0x00080004 or 0x00800004: + SetDefaultArena(); + break; + } + } + + private void SetDefaultArena() + { + Arena.Bounds = A11Prishe.DefaultBounds; + Arena.Center = A11Prishe.ArenaCenter; + } + + private void SetArena(ArenaBoundsComplex bounds) + { + Arena.Bounds = bounds; + Arena.Center = bounds.Center; + _aoe = null; + } + + private void SetAOE(AOEShapeCustom shape) + { + _aoe = new(shape, A11Prishe.ArenaCenter, default, WorldState.FutureTime(5)); + } +} diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/AsuranFists.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/AsuranFists.cs new file mode 100644 index 0000000000..4b0fa64a0e --- /dev/null +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/AsuranFists.cs @@ -0,0 +1,22 @@ +namespace BossMod.Dawntrail.Alliance.A11Prishe; + +class AsuranFists(BossModule module) : Components.GenericTowers(module) +{ + public override void OnActorCreated(Actor actor) + { + if ((OID)actor.OID == OID.Tower) + Towers.Add(new(actor.Position, 6, PartyState.MaxAllianceSize, PartyState.MaxAllianceSize, activation: WorldState.FutureTime(6.5f))); + } + + public override void OnEventCast(Actor caster, ActorCastEvent spell) + { + if ((AID)spell.Action.ID is AID.AsuranFists1 or AID.AsuranFists2 or AID.AsuranFists3) + { + if (++NumCasts == 8) + { + NumCasts = 0; + Towers.Clear(); + } + } + } +} diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/AuroralUppercut.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/AuroralUppercut.cs new file mode 100644 index 0000000000..602554cd23 --- /dev/null +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/AuroralUppercut.cs @@ -0,0 +1,29 @@ +namespace BossMod.Dawntrail.Alliance.A11Prishe; + +class AuroralUppercut(BossModule module) : Components.Knockback(module, ignoreImmunes: true) +{ + private Source? _source; + public override IEnumerable Sources(int slot, Actor actor) => Utils.ZeroOrOne(_source); + + public override void OnCastStarted(Actor caster, ActorCastInfo spell) + { + switch ((AID)spell.Action.ID) + { + case AID.AuroralUppercut1: + _source = new(Arena.Center, 12, Module.CastFinishAt(spell)); + break; + case AID.AuroralUppercut2: + _source = new(Arena.Center, 25, Module.CastFinishAt(spell)); + break; + case AID.AuroralUppercut3: + _source = new(Arena.Center, 38, Module.CastFinishAt(spell)); + break; + } + } + + public override void OnStatusLose(Actor actor, ActorStatus status) + { + if (_source != null && (SID)status.ID == SID.Knockback) + _source = null; + } +} diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/BanishStorm.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/BanishStorm.cs new file mode 100644 index 0000000000..388cebe620 --- /dev/null +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/BanishStorm.cs @@ -0,0 +1,73 @@ +namespace BossMod.Dawntrail.Alliance.A11Prishe; + +class BanishStorm(BossModule module) : Components.Exaflare(module, 6) +{ + private static readonly WPos[] positions = [new(815, 415), new(800, 385), new(785, 400), new(785, 385), new(815, 400), new(800, 415)]; + private static readonly WDir[] directions = + [ + 4 * (-0.003f).Degrees().ToDirection(), + 4 * 119.997f.Degrees().ToDirection(), + 4 * (-120.003f).Degrees().ToDirection(), + 4 * 180.Degrees().ToDirection(), + 4 * (-60.005f).Degrees().ToDirection(), + 4 * 60.Degrees().ToDirection(), + 4 * 89.999f.Degrees().ToDirection(), + 4 * (-150.001f).Degrees().ToDirection(), + 4 * (-30.001f).Degrees().ToDirection(), + 4 * (-90.004f).Degrees().ToDirection(), + 4 * 29.996f.Degrees().ToDirection(), + 4 * 149.996f.Degrees().ToDirection(), + ]; + private static readonly Dictionary LineConfigs = new() + { + { 0x0A, (0, [0, 1, 2], [5, 5, 14]) }, + { 0x34, (0, [0, 1, 2], [5, 5, 14]) }, + { 0x0D, (0, [3, 5, 4], [13, 5, 9]) }, + { 0x05, (3, [0, 1, 2], [13, 9, 5]) }, + { 0x02, (3, [3, 5, 4], [5, 14, 5]) }, + { 0x32, (3, [3, 5, 4], [5, 14, 5]) }, + { 0x0B, (1, [3, 4, 5], [5, 10, 10]) }, + { 0x35, (1, [3, 4, 5], [5, 10, 10]) }, + { 0x08, (1, [0, 2, 1], [13, 9, 9]) }, + { 0x09, (2, [9, 11, 10], [5, 10, 10]) }, + { 0x0C, (2, [6, 7, 8], [13, 9, 9]) }, + { 0x03, (4, [6, 7, 8], [5, 10, 10]) }, + { 0x06, (4, [9, 11, 10], [13, 9, 9]) }, + { 0x07, (5, [0, 1, 2], [5, 10, 10]) }, + { 0x33, (5, [0, 1, 2], [5, 10, 10]) }, + { 0x04, (5, [3, 5, 4], [13, 9, 9]) }, + }; + + public override void OnEventEnvControl(byte index, uint state) + { + if (state == 0x00020001 && LineConfigs.TryGetValue(index, out var config)) + { + var activation1 = WorldState.FutureTime(9.1f); + var activation2 = WorldState.FutureTime(9.8f); + + for (var i = 0; i < 3; ++i) + { + Lines.Add(new() + { + Next = positions[config.position] + (i > 0 ? directions[config.directions[i]] : default), + Advance = directions[config.directions[i]], + NextExplosion = i == 0 ? activation1 : activation2, + TimeToMove = 0.7f, + ExplosionsLeft = config.numExplosions[i], + MaxShownExplosions = config.numExplosions[i] + }); + } + } + } + + public override void OnEventCast(Actor caster, ActorCastEvent spell) + { + if ((AID)spell.Action.ID == AID.Banish) + { + var index = Lines.FindIndex(item => item.Next.AlmostEqual(caster.Position, 1)); + AdvanceLine(Lines[index], caster.Position); + if (Lines[index].ExplosionsLeft == 0) + Lines.RemoveAt(index); + } + } +} diff --git a/BossMod/Modules/Dawntrail/Alliance/A11Prishe/KnuckleSandwich.cs b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/KnuckleSandwich.cs new file mode 100644 index 0000000000..3569db6665 --- /dev/null +++ b/BossMod/Modules/Dawntrail/Alliance/A11Prishe/KnuckleSandwich.cs @@ -0,0 +1,26 @@ +namespace BossMod.Dawntrail.Alliance.A11Prishe; + +abstract class KnuckleSandwich(BossModule module, AID aid1, AID aid2, AOEShape shape1, AOEShape shape2) : Components.ConcentricAOEs(module, [shape1, shape2]) +{ + public override void OnCastStarted(Actor caster, ActorCastInfo spell) + { + if ((AID)spell.Action.ID == aid1) + AddSequence(spell.LocXZ, Module.CastFinishAt(spell)); + } + + public override void OnCastFinished(Actor caster, ActorCastInfo spell) + { + if (Sequences.Count != 0) + { + var order = -1; + if ((AID)spell.Action.ID == aid1) + order = 0; + else if ((AID)spell.Action.ID == aid2) + order = 1; + AdvanceSequence(order, spell.LocXZ, WorldState.FutureTime(1.4f)); + } + } +} +class KnuckleSandwich1(BossModule module) : KnuckleSandwich(module, AID.KnuckleSandwich1, AID.BrittleImpact1, new AOEShapeCircle(9), new AOEShapeDonut(9, 60)); +class KnuckleSandwich2(BossModule module) : KnuckleSandwich(module, AID.KnuckleSandwich2, AID.BrittleImpact2, new AOEShapeCircle(18), new AOEShapeDonut(18, 60)); +class KnuckleSandwich3(BossModule module) : KnuckleSandwich(module, AID.KnuckleSandwich3, AID.BrittleImpact3, new AOEShapeCircle(27), new AOEShapeDonut(27, 60)); diff --git a/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12Fafnir.cs b/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12Fafnir.cs index 9ce567a2ba..6998174f02 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12Fafnir.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12Fafnir.cs @@ -1,8 +1,8 @@ namespace BossMod.Dawntrail.Alliance.A12Fafnir; class DarkMatterBlast(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.DarkMatterBlast)); -class HorridRoar2(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.HorridRoar2), 4); -class HorridRoar3(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.HorridRoar3), 8); +class HorridRoar2(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.HorridRoarAOE), 4); +class HorridRoar3(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.HorridRoarSpread), 8); class SpikeFlail(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SpikeFlail), new AOEShapeCone(80, 135.Degrees())); class Touchdown(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Touchdown), new AOEShapeCircle(27)); @@ -12,7 +12,7 @@ class HurricaneWing1(BossModule module) : Components.ConcentricAOEs(module, _sha public override void OnCastStarted(Actor caster, ActorCastInfo spell) { - if ((AID)spell.Action.ID == AID.HurricaneWing7) + if ((AID)spell.Action.ID == AID.HurricaneWingConcentricA1) AddSequence(Arena.Center, Module.CastFinishAt(spell)); } @@ -22,10 +22,10 @@ public override void OnEventCast(Actor caster, ActorCastEvent spell) { var order = (AID)spell.Action.ID switch { - AID.HurricaneWing7 => 0, - AID.HurricaneWing8 => 1, - AID.HurricaneWing9 => 2, - AID.HurricaneWing10 => 3, + AID.HurricaneWingConcentricA1 => 0, + AID.HurricaneWingConcentricA2 => 1, + AID.HurricaneWingConcentricA3 => 2, + AID.HurricaneWingConcentricA4 => 3, _ => -1 }; AdvanceSequence(order, Arena.Center, WorldState.FutureTime(3)); @@ -39,7 +39,7 @@ class HurricaneWing2(BossModule module) : Components.ConcentricAOEs(module, _sha public override void OnCastStarted(Actor caster, ActorCastInfo spell) { - if ((AID)spell.Action.ID == AID.HurricaneWing11) + if ((AID)spell.Action.ID == AID.HurricaneWingConcentricB1) AddSequence(Arena.Center, Module.CastFinishAt(spell)); } @@ -49,10 +49,10 @@ public override void OnEventCast(Actor caster, ActorCastEvent spell) { var order = (AID)spell.Action.ID switch { - AID.HurricaneWing11 => 0, - AID.HurricaneWing12 => 1, - AID.HurricaneWing13 => 2, - AID.HurricaneWing14 => 3, + AID.HurricaneWingConcentricB1 => 0, + AID.HurricaneWingConcentricB2 => 1, + AID.HurricaneWingConcentricB3 => 2, + AID.HurricaneWingConcentricB4 => 3, _ => -1 }; AdvanceSequence(order, Arena.Center, WorldState.FutureTime(3)); diff --git a/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12FafnirEnums.cs b/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12FafnirEnums.cs index 9dceb5f5ff..debda72b02 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12FafnirEnums.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A12Fafnir/A12FafnirEnums.cs @@ -2,18 +2,13 @@ public enum OID : uint { - Actor1e8f2f = 0x1E8F2F, // R0.500, x1, EventObj type - Actor1e8fb8 = 0x1E8FB8, // R2.000, x1, EventObj type - Actor1ebccb = 0x1EBCCB, // R0.500, x4, EventObj type - BakoolJaJa = 0x4697, // R3.150, x1 - BitingWind = 0x41E8, // R1.000, x6 - Boss = 0x41E5, // R17.000, x1 - Darter = 0x41E9, // R2.250, x0 (spawn during fight) - Helper = 0x233C, // R0.500, x43, Helper type - RavagingWind = 0x41E7, // R3.000, x3 - SpatialRift = 0x1EBCD6, // R0.500, x1, EventObj type - Teleporter = 0x1EBCCE, // R0.500, x1, EventObj type - Unknown = 0x41E6, // R1.000, x3 + Boss = 0x41E5, // R17.0 + BitingWind = 0x41E8, // R1.0 + Darter = 0x41E9, // R2.25 + RavagingWind = 0x41E7, // R3.0 + SpatialRift = 0x1EBCD6, // R0.5 + Unknown = 0x41E6, // R1.0 + Helper = 0x233C } public enum AID : uint @@ -21,62 +16,83 @@ public enum AID : uint AutoAttack1 = 40633, // Darter->player, no cast, single-target AutoAttack2 = 40860, // Boss->player, no cast, single-target - AbsoluteTerror1 = 40845, // Boss->self, 6.0+1.4s cast, single-target - AbsoluteTerror2 = 40846, // Helper->self, 7.4s cast, range 70 width 20 rect + AbsoluteTerrorVisual = 40845, // Boss->self, 6.0+1.4s cast, single-target + AbsoluteTerror = 40846, // Helper->self, 7.4s cast, range 70 width 20 rect - BalefulNail = 40812, // Boss->location, no cast, single-target // Four hit line AOE - DarkMatterBlast = 40854, // Boss->self, 5.0s cast, range 70 circle - - GreatWhirlwind1 = 39873, // RavagingWind->self, 4.5s cast, range 10 circle - GreatWhirlwind2 = 39874, // BitingWind->self, 4.5s cast, range 3 circle - GreatWhirlwind3 = 40843, // Helper->self, no cast, range 9 circle - GreatWhirlwind4 = 40844, // Helper->self, no cast, range 3 circle - - HorridRoar1 = 40849, // Boss->self, 3.0s cast, single-target - HorridRoar2 = 40850, // Helper->location, 4.0s cast, range 4 circle - HorridRoar3 = 40851, // Helper->players, 5.0s cast, range 8 circle // Spreadmarker + BalefulNailVisual1 = 40812, // Boss->location, no cast, single-target, four hit line AOE + BalefulNailVisual2 = 40813, // Boss->location, no cast, single-target + BalefulBreathVisual1 = 39922, // Boss->self, 8.0s cast, single-target + BalefulBreathVisual2 = 39798, // Boss->self, no cast, single-target + BalefulBreath1 = 40852, // Boss->self, no cast, range 70 width 6 rect + BalefulBreath2 = 40853, // Boss->self, no cast, range 70 width 6 rect - HurricaneWing1 = 40817, // Boss->self, 3.0+2.5s cast, single-target - HurricaneWing2 = 40818, // Helper->self, no cast, range 70 circle - HurricaneWing3 = 40819, // Helper->self, no cast, range 70 circle - HurricaneWing4 = 40820, // Helper->self, no cast, range 70 circle - HurricaneWing5 = 40821, // Helper->self, no cast, range 70 circle - HurricaneWing6 = 40822, // Helper->self, no cast, range 70 circle + DarkMatterBlast = 40854, // Boss->self, 5.0s cast, range 70 circle - // Concentric AOEs - HurricaneWing7 = 40829, // Helper->self, 5.0s cast, range 9 circle - HurricaneWing8 = 40830, // Helper->self, 7.0s cast, range 9-16 donut - HurricaneWing9 = 40831, // Helper->self, 9.0s cast, range 16-23 donut - HurricaneWing10 = 40832, // Helper->self, 11.0s cast, range 23-30 donut + GreatWhirlwindFirst1 = 39873, // RavagingWind->self, 4.5s cast, range 10 circle + GreatWhirlwindFirst2 = 39874, // BitingWind->self, 4.5s cast, range 3 circle + GreatWhirlwindrest1 = 40843, // Helper->self, no cast, range 9 circle + GreatWhirlwindRest2 = 40844, // Helper->self, no cast, range 3 circle + + HorridRoarVisual = 40849, // Boss->self, 3.0s cast, single-target + HorridRoarAOE = 40850, // Helper->location, 4.0s cast, range 4 circle + HorridRoarSpread = 40851, // Helper->players, 5.0s cast, range 8 circle, spreadmarker + + HurricaneWingVisual = 40817, // Boss->self, 3.0+2.5s cast, single-target + HurricaneWing1 = 40818, // Helper->self, no cast, range 70 circle + HurricaneWing2 = 40819, // Helper->self, no cast, range 70 circle + HurricaneWing3 = 40820, // Helper->self, no cast, range 70 circle + HurricaneWing4 = 40821, // Helper->self, no cast, range 70 circle + HurricaneWing5 = 40822, // Helper->self, no cast, range 70 circle + HurricaneWing6 = 41302, // Helper->self, no cast, range 70 circle + HurricaneWing7 = 41303, // Helper->self, no cast, range 70 circle + HurricaneWing8 = 41304, // Helper->self, no cast, range 70 circle + HurricaneWing9 = 41305, // Helper->self, no cast, range 70 circle // Concentric AOEs - HurricaneWing11 = 40839, // Helper->self, 4.0s cast, range 9 circle - HurricaneWing12 = 40840, // Helper->self, 6.0s cast, range 9-16 donut - HurricaneWing13 = 40841, // Helper->self, 8.0s cast, range 16-23 donut - HurricaneWing14 = 40842, // Helper->self, 10.0s cast, range 23-30 donut - - HurricaneWing15 = 41302, // Helper->self, no cast, range 70 circle - HurricaneWing16 = 41303, // Helper->self, no cast, range 70 circle - HurricaneWing17 = 41304, // Helper->self, no cast, range 70 circle - HurricaneWing18 = 41305, // Helper->self, no cast, range 70 circle - - OffensivePosture1 = 40811, // Boss->self, 8.0+1.0s cast, single-target - OffensivePosture2 = 40814, // Boss->self, 8.0+1.1s cast, single-target - OffensivePosture3 = 40816, // Boss->self, 8.0+1.2s cast, single-target - - SpikeFlail = 41114, // Helper->self, 9.0s cast, range 80 270.000-degree cone // Rear cone aoe - DragonBreath = 40815, // Helper->self, no cast, range ?-30 donut // Donut, inner circle is boss hitbox - Touchdown = 41116, // Helper->self, 9.2s cast, range 24 circle // Point blank AOE, likely slightly larger than Boss hitbox + HurricaneWingConcentricA1 = 40829, // Helper->self, 5.0s cast, range 9 circle + HurricaneWingConcentricA2 = 40830, // Helper->self, 7.0s cast, range 9-16 donut + HurricaneWingConcentricA3 = 40831, // Helper->self, 9.0s cast, range 16-23 donut + HurricaneWingConcentricA4 = 40832, // Helper->self, 11.0s cast, range 23-30 donut + + HurricaneWingConcentricB1 = 40839, // Helper->self, 4.0s cast, range 9 circle + HurricaneWingConcentricB2 = 40840, // Helper->self, 6.0s cast, range 9-16 donut + HurricaneWingConcentricB3 = 40841, // Helper->self, 8.0s cast, range 16-23 donut + HurricaneWingConcentricB4 = 40842, // Helper->self, 10.0s cast, range 23-30 donut + + HurricaneWingConcentricC1 = 40834, // Helper->self, 4.0s cast, range 23-30 donut + HurricaneWingConcentricC2 = 40835, // Helper->self, 6.0s cast, range 16-23 donut + HurricaneWingConcentricC3 = 40836, // Helper->self, 8.0s cast, range 9-16 donut + HurricaneWingConcentricC4 = 40837, // Helper->self, 10.0s cast, range 9 circle + + HurricaneWingConcentricD1 = 40824, // Helper->self, 5.0s cast, range 23-30 donut + HurricaneWingConcentricD2 = 40825, // Helper->self, 7.0s cast, range 16-23 donut + HurricaneWingConcentricD3 = 40826, // Helper->self, 9.0s cast, range 9-16 donut + HurricaneWingConcentricD4 = 40827, // Helper->self, 11.0s cast, range 9 circle + + HurricaneWingConcentricE1 = 40834, // Helper->self, 4.0s cast, range ?-30 donut + HurricaneWingConcentricE2 = 40835, // Helper->self, 6.0s cast, range 16-23 donut + HurricaneWingConcentricE3 = 40836, // Helper->self, 8.0s cast, range 9-16 donut + HurricaneWingConcentricE4 = 40837, // Helper->self, 10.0s cast, range 9 circle + + OffensivePostureVisual1 = 40811, // Boss->self, 8.0+1.0s cast, single-target + OffensivePostureVisual2 = 40814, // Boss->self, 8.0+1.1s cast, single-target + OffensivePostureVisual3 = 40816, // Boss->self, 8.0+1.2s cast, single-target + + SpikeFlail = 41114, // Helper->self, 9.0s cast, range 80 270-degree cone, rear cone aoe + DragonBreath = 40815, // Helper->self, no cast, range 17-30 donut, dnut, inner circle is boss hitbox + Touchdown = 41116, // Helper->self, 9.2s cast, range 24 circle, point blank AOE, likely slightly larger than Boss hitbox PestilentSphere = 40859, // Darter->player, 5.0s cast, single-target - SharpSpike1 = 40855, // Boss->self, 5.0+1.0s cast, single-target // AOE tankbusters on all 3 tanks - SharpSpike2 = 40856, // Helper->player, no cast, range 4 circle + SharpSpikeVisual = 40855, // Boss->self, 5.0+1.0s cast, single-target, AOE tankbusters on all 3 tanks + SharpSpike = 40856, // Helper->player, no cast, range 4 circle ShudderingEarth = 40857, // Boss->location, no cast, single-target - WingedTerror1 = 40847, // Boss->self, 6.0+1.4s cast, single-target - WingedTerror2 = 40848, // Helper->self, 7.4s cast, range 70 width 25 rect + WingedTerrorVisual = 40847, // Boss->self, 6.0+1.4s cast, single-target + WingedTerror = 40848, // Helper->self, 7.4s cast, range 70 width 25 rect + + Venom = 40858, // Darter->self, 4.0s cast, range 30 120-degree cone } public enum SID : uint diff --git a/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngels.cs b/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngels.cs index 67b4c57908..175a5b3b66 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngels.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngels.cs @@ -9,7 +9,7 @@ class TachiGekko(BossModule module) : Components.CastGaze(module, ActionID.MakeS class LightsChain(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.LightsChain), new AOEShapeDonut(6, 60)); class Guillotine1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Guillotine1), new AOEShapeCone(80, 135.Degrees())); class DominionSlash(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.DominionSlash)); -class DivineDominion(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DivineDominion), new AOEShapeCircle(6)); +class DivineDominion(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DivineDominion1), new AOEShapeCircle(6)); class CrossReaver2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.CrossReaver2), new AOEShapeCross(50, 6)); class Holy(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Holy)); class SpiralFinish2(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.SpiralFinish2), 16, stopAtWall: true, kind: Kind.AwayFromOrigin); diff --git a/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngelsEnums.cs b/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngelsEnums.cs index b1adc70dd7..0ac3d16c0a 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngelsEnums.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A13ArkAngels/A13ArkAngelsEnums.cs @@ -50,6 +50,7 @@ public enum AID : uint Aethersplit2 = 41105, // ArkAngelGK->ArkAngelTT/ArkAngelEV, no cast, single-target Aethersplit3 = 41106, // ArkAngelHM->ArkAngelEV/ArkAngelTT, no cast, single-target Aethersplit4 = 41107, // ArkAngelEV->ArkAngelTT, no cast, single-target + Aethersplit5 = 41103, // ArkAngelTT->Boss/ArkAngelGK/ArkAngelHM, no cast, single-target ArroganceIncarnate1 = 41095, // ArkAngelEV->self, 5.0s cast, single-target ArroganceIncarnate2 = 41096, // Helper->players, no cast, range 6 circle @@ -68,7 +69,8 @@ public enum AID : uint // DominionSlash = 41093, // ArkAngelEV->self, 5.0s cast, range 100 circle - DivineDominion = 41094, // Helper->self, 2.0s cast, range 6 circle + DivineDominion1 = 41094, // Helper->self, 2.0s cast, range 6 circle + DivineDominion2 = 40628, // Helper->self, no cast, range 6 circle Utsusemi = 41088, // ArkAngelHM->self, 3.0s cast, single-target MightyStrikes1 = 41089, // ArkAngelHM/ArkAngelHM2->self, 5.0s cast, single-target @@ -81,8 +83,8 @@ public enum AID : uint // Rotating conal aoes HavocSpiral1 = 41067, // Boss->self, 5.0+0.5s cast, single-target - HavocSpiral2 = 41070, // Helper->self, 5.5s cast, range 30 ?-degree cone - HavocSpiral3 = 41071, // Helper->self, no cast, range 30 30.000-degree cone + HavocSpiral2 = 41070, // Helper->self, 5.5s cast, range 30 30-degree cone + HavocSpiral3 = 41071, // Helper->self, no cast, range 30 30-degree cone SpiralFinish1 = 41068, // Boss->self, 11.0+0.5s cast, single-target SpiralFinish2 = 41069, // Helper->self, 11.5s cast, range 100 circle @@ -106,6 +108,7 @@ public enum AID : uint UnknownWeaponskill2 = 41073, // Helper->location, 3.0s cast, width 10 rect charge UnknownWeaponskill3 = 41074, // Helper->location, 3.0s cast, range 20 circle + Raiton = 41109, // ArkAngelHM->self, 5.0s cast, range 100 circle } public enum SID : uint diff --git a/BossMod/Modules/Dawntrail/Alliance/A14ShadowLord/A14ShadowLordEnums.cs b/BossMod/Modules/Dawntrail/Alliance/A14ShadowLord/A14ShadowLordEnums.cs index c318491bf5..9f57035a93 100644 --- a/BossMod/Modules/Dawntrail/Alliance/A14ShadowLord/A14ShadowLordEnums.cs +++ b/BossMod/Modules/Dawntrail/Alliance/A14ShadowLord/A14ShadowLordEnums.cs @@ -60,12 +60,13 @@ public enum AID : uint GigaSlashNightfallVisual1 = 42020, // Boss->self, 14.0+1.0s cast, single-target GigaSlashNightfallVisual2 = 42021, // Boss->self, 14.0+1.0s cast, single-target GigaSlashNightfallVisual3 = 42023, // Boss->self, 14.0+1.0s cast, single-target - GigaSlashNightfall1 = 42024, // Helper->self, 1.0s cast, range 60 210.000-degree cone - GigaSlashNightfall2 = 42025, // Helper->self, 1.0s cast, range 60 210.000-degree cone - GigaSlashNightfall3 = 42027, // Helper->self, 15.0s cast, range 60 225.000-degree cone - GigaSlashNightfall4 = 42028, // Helper->self, 1.0s cast, range 60 270.000-degree cone - GigaSlashNightfall5 = 42029, // Helper->self, 15.0s cast, range 60 225.000-degree cone - GigaSlashNightfall6 = 42030, // Helper->self, 1.0s cast, range 60 270.000-degree cone + GigaSlashNightfallVisual4 = 42022, // Boss->self, 14.0+1,0s cast, single-target + GigaSlashNightfall1 = 42024, // Helper->self, 1.0s cast, range 60 210-degree cone + GigaSlashNightfall2 = 42025, // Helper->self, 1.0s cast, range 60 210-degree cone + GigaSlashNightfall3 = 42027, // Helper->self, 15.0s cast, range 60 225-degree cone + GigaSlashNightfall4 = 42028, // Helper->self, 1.0s cast, range 60 270-degree cone + GigaSlashNightfall5 = 42029, // Helper->self, 15.0s cast, range 60 225-degree cone + GigaSlashNightfall6 = 42030, // Helper->self, 1.0s cast, range 60 270-degree cone ShadowSpawn = 40786, // Boss->self, 3.0s cast, single-target // Summons two untargetable Lordly Shadow clones @@ -80,6 +81,13 @@ public enum AID : uint DamningStrikes1 = 40791, // Boss->self, 8.0s cast, single-target // Tower Stacks DamningStrikes2 = 40793, // Boss->self, no cast, single-target DamningStrikes3 = 42052, // Boss->self, no cast, single-target + DamningStrikes4 = 41054, // Boss->self, 8.7s cast, single-target + DamningStrikes5 = 42055, // Boss->location, no cast, single-target + DamningStrikes6 = 42053, // Boss->self, no cast, single-target + DamningStrikes7 = 42054, // Boss->location, no cast, single-target + DamningStrikes8 = 40794, // Boss->location, no cast, single-target + + Shockwave = 41112, // Helper->self, no cast, range 100 circle Impact1 = 40792, // Helper->self, 10.5s cast, range 3 circle Impact2 = 41110, // Helper->self, 13.0s cast, range 3 circle diff --git a/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs b/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs index 88af62b3f5..29b71c25cf 100644 --- a/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs +++ b/BossMod/Modules/Dawntrail/Raid/M03NBruteBomber/BarbarousBarrage.cs @@ -7,8 +7,8 @@ class BarbarousBarrageTower(BossModule module) : Components.GenericTowers(module public override void OnEventEnvControl(byte index, uint state) { if (index == 0x01 && state == 0x00020004) - foreach (var p in positions) - Towers.Add(new(p, 4, 1, 1, default, WorldState.FutureTime(10))); + for (var i = 0; i < 4; ++i) + Towers.Add(new(positions[i], 4, 1, 1, default, WorldState.FutureTime(10))); } public override void OnEventCast(Actor caster, ActorCastEvent spell) diff --git a/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D112GalateaMagna.cs b/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D112GalateaMagna.cs index 7c410ab6c1..018986d159 100644 --- a/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D112GalateaMagna.cs +++ b/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D112GalateaMagna.cs @@ -170,12 +170,11 @@ public override void OnStatusLose(Actor actor, ActorStatus status) public class TenebrismTowers(BossModule module) : Components.GenericTowers(module) { - private WPos position; - public override void OnEventEnvControl(byte index, uint state) { if (state == 0x00010008) { + WPos position = default; switch (index) { case 0x07: