Skip to content

Commit

Permalink
changed LocationTargetedAOEs to SimpleAOEs
Browse files Browse the repository at this point in the history
  • Loading branch information
CarnifexOptimus committed Jan 11, 2025
1 parent 6f3b823 commit c46ea90
Show file tree
Hide file tree
Showing 407 changed files with 712 additions and 669 deletions.
61 changes: 52 additions & 9 deletions BossMod/Components/GenericAOEs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,20 @@ public class SelfTargetedAOEs(BossModule module, ActionID aid, AOEShape shape, i
public float RiskyAfterSeconds = riskyAfterSeconds; // can be used to delay risky status of AOEs, so AI waits longer to dodge, if 0 it will just use the bool Risky
public readonly List<Actor> Casters = [];

public IEnumerable<Actor> ActiveCasters => Casters.Take(MaxCasts);
public List<Actor> ActiveCasters
{
get
{
var count = Casters.Count;
var max = count > MaxCasts ? MaxCasts : count;
List<Actor> result = new(max);
for (var i = 0; i < max; ++i)
{
result.Add(Casters[i]);
}
return result;
}
}

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
Expand Down Expand Up @@ -86,7 +99,20 @@ public class SelfTargetedLegacyRotationAOEs(BossModule module, ActionID aid, AOE
public int MaxCasts = maxCasts; // used for staggered aoes, when showing all active would be pointless
public readonly List<Actor> Casters = [];

public IEnumerable<Actor> ActiveCasters => Casters.Take(MaxCasts);
public List<Actor> ActiveCasters
{
get
{
var count = Casters.Count;
var max = count > MaxCasts ? MaxCasts : count;
List<Actor> result = new(max);
for (var i = 0; i < max; ++i)
{
result.Add(Casters[i]);
}
return result;
}
}

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor) => ActiveCasters.Select(c => new AOEInstance(Shape, c.Position, c.Rotation, Module.CastFinishAt(c.CastInfo)));

Expand All @@ -103,10 +129,10 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
}
}

// location-targeted circle aoe that happens at the end of the cast
public class LocationTargetedAOEs(BossModule module, ActionID aid, AOEShape shape, int maxCasts = int.MaxValue, float riskyWithSecondsLeft = 0, bool targetIsLocation = false) : GenericAOEs(module, aid)
// For simple AOEs, formerly known as LocationTargetedAOEs, that happens at the end of the cast
public class SimpleAOEs(BossModule module, ActionID aid, AOEShape shape, int maxCasts = int.MaxValue, float riskyWithSecondsLeft = 0, bool targetIsLocation = false) : GenericAOEs(module, aid)
{
public LocationTargetedAOEs(BossModule module, ActionID aid, float radius, float riskyWithSecondsLeft = 0, int maxCasts = int.MaxValue, bool targetIsLocation = false) : this(module, aid, new AOEShapeCircle(radius), maxCasts, riskyWithSecondsLeft, targetIsLocation) { }
public SimpleAOEs(BossModule module, ActionID aid, float radius, float riskyWithSecondsLeft = 0, int maxCasts = int.MaxValue, bool targetIsLocation = false) : this(module, aid, new AOEShapeCircle(radius), maxCasts, riskyWithSecondsLeft, targetIsLocation) { }
public readonly AOEShape Shape = shape;
public readonly int MaxCasts = maxCasts; // used for staggered aoes, when showing all active would be pointless
public uint Color; // can be customized if needed
Expand All @@ -115,19 +141,36 @@ public class LocationTargetedAOEs(BossModule module, ActionID aid, AOEShape shap
public readonly float RiskyWithSecondsLeft = riskyWithSecondsLeft; // can be used to delay risky status of AOEs, so AI waits longer to dodge, if 0 it will just use the bool Risky

public readonly List<AOEInstance> Casters = [];
public IEnumerable<AOEInstance> ActiveCasters => Casters.Take(MaxCasts);

public List<AOEInstance> ActiveCasters
{
get
{
var count = Casters.Count;
var max = count > MaxCasts ? MaxCasts : count;
List<AOEInstance> result = new(max);
for (var i = 0; i < max; ++i)
{
result.Add(Casters[i]);
}
return result;
}
}

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
var count = Casters.Count;
if (count == 0)
yield break;
return [];
var time = WorldState.CurrentTime;
for (var i = 0; i < (count > MaxCasts ? MaxCasts : count); ++i)
var max = count > MaxCasts ? MaxCasts : count;
List<AOEInstance> result = new(max);
for (var i = 0; i < max; ++i)
{
var caster = Casters[i];
yield return RiskyWithSecondsLeft == 0 ? caster : caster with { Risky = caster.Activation.AddSeconds(-RiskyWithSecondsLeft) <= time };
result.Add(RiskyWithSecondsLeft == 0 ? caster : caster with { Risky = caster.Activation.AddSeconds(-RiskyWithSecondsLeft) <= time });
}
return result;
}

public override void OnCastStarted(Actor caster, ActorCastInfo spell)
Expand Down
4 changes: 2 additions & 2 deletions BossMod/Modules/Dawntrail/Alliance/A10Trash/A10Aquarius.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ public enum AID : uint
Agaricus = 41661 // DeathCap->self, 3.0s cast, range 5 circle
}

class CursedSphere(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.CursedSphere), 3);
class WaterIII(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.WaterIII), 7);
class CursedSphere(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.CursedSphere), 3);
class WaterIII(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.WaterIII), 7);
class BubbleShower(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BubbleShower), new AOEShapeCone(6, 30.Degrees()));
class Scoop(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Scoop), new AOEShapeCone(15, 60.Degrees()));
class Agaricus(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Agaricus), new AOEShapeCircle(5));
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Modules/Dawntrail/Alliance/A10Trash/A10Despot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public enum AID : uint
PanzerfaustRepeats = 41353 // Boss->player, no cast, single-target, knockback 10, apply concussion
}

class IsleDrop(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.IsleDrop), 6);
class IsleDrop(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.IsleDrop), 6);
class WingCutter(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.WingCutter), new AOEShapeCone(6, 60.Degrees()));
class PanzerfaustHint(BossModule module) : Components.CastInterruptHint(module, ActionID.MakeSpell(AID.Panzerfaust), showNameInHint: true);
class Panzerfaust(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.Panzerfaust));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public enum AID : uint
DoubleRay = 41668 // Sprinkler->player, no cast, single-target
}

class IsleDrop(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.IsleDrop), 6);
class IsleDrop(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.IsleDrop), 6);
class MysteriousLight(BossModule module) : Components.CastGaze(module, ActionID.MakeSpell(AID.MysteriousLight));

public class A10GroundskeeperStates : StateMachineBuilder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public enum AID : uint
GoblinRush = 41654 // Boss->players, no cast, single-target
}

class BombToss(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.BombToss), 3);
class Seismostomp(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Seismostomp), 5);
class BombToss(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.BombToss), 3);
class Seismostomp(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Seismostomp), 5);

public class A10VanguardPathfinderStates : StateMachineBuilder
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
}
}

class HorridRoarPuddle(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.HorridRoarPuddle), 4)
class HorridRoarPuddle(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.HorridRoarPuddle), 4)
{
public override bool KeepOnPhaseChange => true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public override void OnEventIcon(Actor actor, uint iconID, ulong targetID)
}
}

class EvilSeedAOE(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.EvilSeedAOE), 5);
class EvilSeedAOE(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.EvilSeedAOE), 5);

class EvilSeedVoidzone(BossModule module) : Components.PersistentVoidzone(module, 5, module => module.Enemies(OID.EvilSeed).Where(z => z.EventState != 7));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class Whirlwind(BossModule module) : Components.PersistentVoidzone(module, 4.5f,
class Blade(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.Blade));
class HighWind(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.HighWind));
class BladesOfFamine(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BladesOfFamine), new AOEShapeRect(50, 6));
class Levinsickle(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Levinsickle), 4);
class Levinsickle(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Levinsickle), 4);
class LevinsickleSpark(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 4, ActionID.MakeSpell(AID.LevinsickleSpark), m => m.Enemies(OID.LightningVoidzone).Where(z => z.EventState != 7), 0.7f);
class WingOfLightning(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.WingOfLightning), new AOEShapeCone(40, 22.5f.Degrees()), 8);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
}
}

class Landing(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Landing), 8);
class Landing(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Landing), 8);

abstract class DeepThunder(BossModule module, AID aid) : Components.CastTowers(module, ActionID.MakeSpell(aid), 6, 4, 4);
class DeepThunder1(BossModule module) : DeepThunder(module, AID.DeepThunderTower1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ class EnhancedMobility3(BossModule module) : EnhancedMobility(module, AID.Enhanc
class EnhancedMobility4(BossModule module) : EnhancedMobility(module, AID.EnhancedMobility4);

class Rush(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.Rush), 2.5f);
class AerialOffensive(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.AerialOffensive), 14, maxCasts: 4);
class AerialOffensive(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.AerialOffensive), 14, maxCasts: 4);
class Electrosurge(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.Electrosurge), 5);

class D041CommanderR8States : StateMachineBuilder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
}
}

class Shock(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Shock), 3);
class Shock(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Shock), 3);

class HomingCannon(BossModule module) : Components.GenericAOEs(module)
{
Expand Down Expand Up @@ -241,7 +241,7 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
}
}

class Bombardment(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Bombardment), 5);
class Bombardment(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Bombardment), 5);

abstract class Electrowhirl(BossModule module, AID aid) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(aid), new AOEShapeCircle(6));
class Electrowhirl1(BossModule module) : Electrowhirl(module, AID.Electrowhirl1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public enum AID : uint
}

class IncendiaryCircle(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.IncendiaryCircle), new AOEShapeDonut(3, 12));
class GrenadoShot(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.GrenadoShot), 5);
class GrenadoShot(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.GrenadoShot), 5);

class D050OrigenicsAerostatStates : StateMachineBuilder
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class ConvulsiveCrush(BossModule module) : Components.SingleTargetDelayableCast(
class PoisonHeartSpread(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.PoisonHeartSpread), 5);
class PoisonHeartVoidzone(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 2, ActionID.MakeSpell(AID.PoisonHeartVoidzone), m => m.Enemies(OID.PoisonVoidzone).Where(z => z.EventState != 7), 0.9f);

class PodBurst(BossModule module, AID aid) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(aid), 6);
class PodBurst(BossModule module, AID aid) : Components.SimpleAOEs(module, ActionID.MakeSpell(aid), 6);
class PodBurst1(BossModule module) : PodBurst(module, AID.PodBurst1);
class PodBurst2(BossModule module) : PodBurst(module, AID.PodBurst2);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ public override void AddHints(int slot, Actor actor, TextHints hints)
}
}

class Electrolance(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Electrolance), 22);
class Electrolance(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Electrolance), 22);
class WhorlOfTheMind(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.WhorlOfTheMind), 5);

class Rush(BossModule module) : Components.GenericAOEs(module)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class Disassembly(BossModule module) : Components.RaidwideCast(module, ActionID.
class SupercellMatrix2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SupercellMatrix2), new AOEShapeRect(55, 4));
class StaticSpark(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.StaticSpark), 6);
class Amalgamight(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.Amalgamight));
class Voltburst(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Voltburst), 6);
class Voltburst(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Voltburst), 6);
class Superbolt(BossModule module) : Components.StackWithCastTargets(module, ActionID.MakeSpell(AID.Superbolt), 6, 4, 4);

class TernaryCharge(BossModule module) : Components.ConcentricAOEs(module, _shapes)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public enum AID : uint
ChimneySmack = 38468, // Helper->player, 5.0s cast, single-target, tankbuster
}

class Anthrabomb(BossModule module, AID aid) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(aid), 10);
class Anthrabomb(BossModule module, AID aid) : Components.SimpleAOEs(module, ActionID.MakeSpell(aid), 10);
class Anthrabomb1(BossModule module) : Anthrabomb(module, AID.Anthrabomb1);
class Anthrabomb2(BossModule module) : Anthrabomb(module, AID.Anthrabomb2);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public enum TetherID : uint

class TectonicShift(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.TectonicShift), new AOEShapeCircle(8));
class BoulderToss(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.BoulderToss));
class SunToss(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.SunToss), 6);
class SunToss(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.SunToss), 6);

class AncientWrath(BossModule module) : Components.GenericAOEs(module)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ class GreatestLabyrinthRaidwide(BossModule module) : Components.RaidwideCast(mod
class GreatestFloodRaidwide(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.GreatestFlood));
class ExaltedWobble(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ExaltedWobble), new AOEShapeCircle(9));
class MisplacedMystery(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.MisplacedMystery), new AOEShapeRect(25.5f, 2.5f, 25.5f));
class GreatTorrent(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.GreatTorrentAOE), 6, maxCasts: 10);
class GreatTorrent(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.GreatTorrentAOE), 6, maxCasts: 10);
class GreatTorrentSpread(BossModule module) : Components.SpreadFromIcon(module, (uint)IconID.Spreadmarker, ActionID.MakeSpell(AID.GreatTorrentSpread), 6, 5.1f);

class D074GreatestSerpentOfTuralStates : StateMachineBuilder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
class LineVoltage1(BossModule module) : LineVoltage(module, AID.LineVoltageNarrow1, 1);
class LineVoltage2(BossModule module) : LineVoltage(module, AID.LineVoltageNarrow2, 2, AID.LineVoltageWide1, AID.LineVoltageWide2);

class LightningBolt(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.LightningBolt), 6);
class LightningBolt(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.LightningBolt), 6);
class LightningStorm(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.LightningStorm), 5);
class ElectricalOverload(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.ElectricalOverload));
class SparkingFissure(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.SparkingFissure));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ class JaggedEdge(BossModule module) : Components.SpreadFromCastTargets(module, A
class TuraliStoneIV(BossModule module) : Components.StackWithCastTargets(module, ActionID.MakeSpell(AID.TuraliStoneIV), 6, 4, 4);
class LeporineLoaf(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.LeporineLoaf));
class BeastlyRoarRaidwide(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.BeastlyRoar));
class BeastlyRoar(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.BeastlyRoar), 25);
class BeastlyRoar(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.BeastlyRoar), 25);
class SonicHowl(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.SonicHowl));
class Slabber(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.Slabber));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public enum AID : uint
}

class SweepingGouge(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SweepingGouge), new AOEShapeCone(9, 45.Degrees()));
class Thunderball(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Thunderball), 8);
class Thunderball(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Thunderball), 8);

class D90ForestWoolbackStates : StateMachineBuilder
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public enum AID : uint
}

class GlassPunch(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.GlassPunch), new AOEShapeCone(7, 60.Degrees()));
class Catapult(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Catapult), 6);
class Catapult(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Catapult), 6);

class D90StationSpecterStates : StateMachineBuilder
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
}

class RuinfallKnockback(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.RuinfallKnockback), 25, kind: Kind.DirForward);
class RuinfallAOE(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.RuinfallAOE), 6);
class RuinfallAOE(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.RuinfallAOE), 6);
Loading

0 comments on commit c46ea90

Please sign in to comment.