Skip to content

Commit

Permalink
Merge pull request #70 from FFXIV-CombatReborn/V01SS-second-path
Browse files Browse the repository at this point in the history
various Sildihn Sub fixes
  • Loading branch information
LTS-FFXIV authored May 2, 2024
2 parents 0270c1d + 5657299 commit a79c278
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ namespace BossMod.Endwalker.Variant.V01SS.V012Silkie;
class CarpetBeater(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.CarpetBeater));
class TotalWash(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.TotalWash), "Raidwide");
class DustBlusterKnockback(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.DustBlusterKnockback), 16, shape: new AOEShapeCircle(60));
class WashOutKnockback(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.WashOutKnockback), 35, shape: new AOEShapeRect(60, 60));
class WashOutKnockback(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.WashOutKnockback), 35, shape: new AOEShapeRect(60, 60), kind: Kind.DirForward);

class BracingDuster1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BracingDuster1), new AOEShapeDonut(3, 60));
class BracingDuster2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BracingDuster2), new AOEShapeDonut(3, 60));
Expand Down
102 changes: 84 additions & 18 deletions BossMod/Modules/Endwalker/Variant/V01SS/V013Gladiator/V013Gladiator.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
using System.Linq;

namespace BossMod.Endwalker.Variant.V01SS.V013Gladiator;

class SunderedRemains(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SunderedRemains), new AOEShapeCircle(10));
class Landing(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Landing), new AOEShapeCircle(20));

class GoldenFlame(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.GoldenFlame), new AOEShapeRect(60, 5));
class SculptorsPassion(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SculptorsPassion), new AOEShapeRect(60, 4));
class RackAndRuin(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RackAndRuin), new AOEShapeRect(40, 2.5f), 8);
class FlashOfSteel1(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.FlashOfSteel1), "Raidwide");
class FlashOfSteel2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.FlashOfSteel2), "Raidwide");

class MightySmite(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.MightySmite), "Tankbuster");

class BitingWindBad(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.BitingWindBad), 4);
Expand All @@ -19,8 +19,8 @@ class RingOfMight1(BossModule module) : Components.GenericAOEs(module, ActionID.
private List<Actor> _castersRingOfMightOut = new();
private List<Actor> _castersRingOfMightIn = new();

private static readonly AOEShape _shapeRingOfMightOut = new AOEShapeCircle(13);
private static readonly AOEShape _shapeRingOfMightIn = new AOEShapeDonut(13, 30);
private static readonly AOEShape _shapeRingOfMightOut = new AOEShapeCircle(8);
private static readonly AOEShape _shapeRingOfMightIn = new AOEShapeDonut(8, 30);

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
Expand Down Expand Up @@ -53,8 +53,8 @@ class RingOfMight2(BossModule module) : Components.GenericAOEs(module, ActionID.
private List<Actor> _castersRingOfMightOut = new();
private List<Actor> _castersRingOfMightIn = new();

private static readonly AOEShape _shapeRingOfMightOut = new AOEShapeCircle(18);
private static readonly AOEShape _shapeRingOfMightIn = new AOEShapeDonut(18, 30);
private static readonly AOEShape _shapeRingOfMightOut = new AOEShapeCircle(13);
private static readonly AOEShape _shapeRingOfMightIn = new AOEShapeDonut(13, 30);

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
Expand Down Expand Up @@ -87,8 +87,8 @@ class RingOfMight3(BossModule module) : Components.GenericAOEs(module, ActionID.
private List<Actor> _castersRingOfMightOut = new();
private List<Actor> _castersRingOfMightIn = new();

private static readonly AOEShape _shapeRingOfMightOut = new AOEShapeCircle(8);
private static readonly AOEShape _shapeRingOfMightIn = new AOEShapeDonut(8, 30);
private static readonly AOEShape _shapeRingOfMightOut = new AOEShapeCircle(18);
private static readonly AOEShape _shapeRingOfMightIn = new AOEShapeDonut(18, 30);

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
Expand Down Expand Up @@ -150,24 +150,90 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
};
}

class FlashOfSteelMeteor(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.FlashOfSteelMeteor), 60, false)
class FlashOfSteel1(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.FlashOfSteel1), "Raidwide");
class FlashOfSteel2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.FlashOfSteel2), "Raidwide");
class ShatteringSteelMeteor(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.ShatteringSteel), 60, false)
{
public override IEnumerable<Actor> BlockerActors() => Module.Enemies(OID.AntiqueBoulder).Where(a => !a.IsDead);
}

class SculptorsPassion(BossModule module) : Components.GenericWildCharge(module, 4, ActionID.MakeSpell(AID.SculptorsPassion))
class SilverFlame1(BossModule module) : Components.GenericAOEs(module)
{
private Actor? _source;
private Angle _startingRotation;
private Angle _increment;
private DateTime _startingActivation;

private static readonly AOEShapeRect _shape = new(60, 4);
private static readonly int _maxCasts = 8;

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
if (_source == null)
yield break;

for (int i = NumCasts + 1; i < _maxCasts; ++i)
yield return new(_shape, _source.Position, _startingRotation + i * _increment, _startingActivation.AddSeconds(0.5f * i));
if (NumCasts < _maxCasts)
yield return new(_shape, _source.Position, _startingRotation + NumCasts * _increment, _startingActivation.AddSeconds(0.5f * NumCasts), ArenaColor.Danger);
}

public override void OnCastStarted(Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID == AID.SilverFlameFirst1)
{
_source = caster;
_startingRotation = spell.Rotation;
_increment = _startingRotation.Rad > 0 ? 7.Degrees() : -7.Degrees();
_startingActivation = spell.NPCFinishAt;
}
}

public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
base.OnEventCast(caster, spell);
if ((AID)spell.Action.ID == AID.SculptorsPassion)
if ((AID)spell.Action.ID is AID.SilverFlameFirst1 or AID.SilverFlameRest)
++NumCasts;
}
}

class SilverFlame2(BossModule module) : Components.GenericAOEs(module)
{
private Actor? _source;
private Angle _startingRotation;
private Angle _increment;
private DateTime _startingActivation;

private static readonly AOEShapeRect _shape = new(60, 4);
private static readonly int _maxCasts = 8;

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
if (_source == null)
yield break;

for (int i = NumCasts + 1; i < _maxCasts; ++i)
yield return new(_shape, _source.Position, _startingRotation + i * _increment, _startingActivation.AddSeconds(0.5f * i));
if (NumCasts < _maxCasts)
yield return new(_shape, _source.Position, _startingRotation + NumCasts * _increment, _startingActivation.AddSeconds(0.5f * NumCasts), ArenaColor.Danger);
}

public override void OnCastStarted(Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID == AID.SilverFlameFirst2)
{
Source = Module.PrimaryActor;
foreach (var (slot, player) in Raid.WithSlot(true))
PlayerRoles[slot] = player.InstanceID == spell.MainTargetID ? PlayerRole.Target : player.Role == Role.Tank ? PlayerRole.Share : PlayerRole.ShareNotFirst;
_source = caster;
_startingRotation = spell.Rotation;
_increment = _startingRotation.Rad > 0 ? 7.Degrees() : -7.Degrees();
_startingActivation = spell.NPCFinishAt;
}
}

public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
if ((AID)spell.Action.ID is AID.SilverFlameFirst2 or AID.SilverFlameRest)
++NumCasts;
}
}

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "CombatReborn Team", PrimaryActorOID = (uint)OID.Boss, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 868, NameID = 11387)]
public class V013Gladiator(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsSquare(new(-35, -270), 20));
public class V013Gladiator(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsSquare(new(-35, -271), 20));
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public enum OID : uint
WhirlwindSafe = 0x39A2, // R2.000, x0 (spawn during fight)
WhirlwindBad = 0x3AEC, // R1.330, x0 (spawn during fight)
AntiqueBoulder = 0x39A3, // R1.800, x0 (spawn during fight)
HatefulVisage = 0x39A0, // R2.250, x0 (spawn during fight)
}

public enum AID : uint
Expand Down Expand Up @@ -35,21 +36,28 @@ public enum AID : uint
RingOfMight3In = 30276, // Helper->self, 12.0s cast, range 18-30 donut

FlashOfSteelMeteor = 30287, // Boss->self, 5.0s cast, range 60 circle

Landing = 30288, // AntiqueBoulder->self, 7.0s cast, range 50 circle


RushOfMight1 = 30266, // Boss->location, 10.0s cast, range 25 width 3 rect aoe
RushOfMight2 = 30267, // Boss->location, 10.0s cast, range 25 width 3 rect aoe
RushOfMight3 = 30268, // Boss->location, 10.0s cast, range 25 width 3 rect aoe
RushOfMightFront = 30269, // Helper->self, 10.5s cast, range 60 180-degree cone
RushOfMightBack = 30270, // Helper->self, 12.5s cast, range 60 180-degree cone

SculptorsPassion = 30282, // Boss->self, 5.0s cast, range 60 width 8 rect shared
SculptorsPassion = 30282, // Boss->self, 5.0s cast, range 60 width 8 rect shared ///
ShatteringSteel = 30283, // Boss->self, 12.0s cast, range 60 circle raidwide

SunderedRemainsVisual = 30280, // Boss->self, 3.0s cast, single-target
SunderedRemains = 30281, // Helper->self, 9.0s cast, range 10 circle aoe

//11
HatefulVisage = 30289, // Boss->self, 3.0s cast, single-target
GoldenFlame = 30290, // HatefulVisage->self, 8.0s cast, range 60 width 10 rect

//12
SilverFlameFirst1 = 30292, // HatefulVisage->self, 8.0s cast, range 60 width 10 rect
SilverFlameFirst2 = 30291, // HatefulVisage->self, 8.0s cast, range 60 width 10 rect
SilverFlameRest = 30293, // HatefulVisage->self, no cast, range 60 width 10 rect
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,15 @@ public V013GladiatorStates(BossModule module) : base(module)
.ActivateOnEnter<RingOfMight2>()
.ActivateOnEnter<RingOfMight3>()
.ActivateOnEnter<RushOfMight>()
.ActivateOnEnter<FlashOfSteelMeteor>()
.ActivateOnEnter<ShatteringSteelMeteor>()
.ActivateOnEnter<RackAndRuin>()
.ActivateOnEnter<FlashOfSteel1>()
.ActivateOnEnter<FlashOfSteel2>()
.ActivateOnEnter<SculptorsPassion>()
.ActivateOnEnter<GoldenFlame>()
.ActivateOnEnter<SilverFlame1>()
.ActivateOnEnter<SilverFlame2>()
.ActivateOnEnter<Landing>()
.ActivateOnEnter<MightySmite>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ class CastShadow(BossModule module) : Components.GenericAOEs(module, ActionID.Ma
private List<Actor> _castersShadowFirst = new();
private List<Actor> _castersShadowNext = new();

private static readonly AOEShape _shapeShadowFirst = new AOEShapeCone(50, 45.Degrees());
private static readonly AOEShape _shapeShadowNext = new AOEShapeCone(50, 45.Degrees());
private static readonly AOEShape _shapeShadowFirst = new AOEShapeCone(50, 15.Degrees());
private static readonly AOEShape _shapeShadowNext = new AOEShapeCone(50, 15.Degrees());

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
Expand Down Expand Up @@ -46,5 +46,8 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
};
}

class BlazingBenifice(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BlazingBenifice), new AOEShapeRect(100, 5, 100));


[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "CombatReborn Team", PrimaryActorOID = (uint)OID.Boss, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 868, NameID = 11394)]
public class V014ZelessGah(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsRect(new(289, -105), 15, 20));
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public enum OID : uint
MyrrhIncenseBurner = 0x1EB7CF, // R2.000, x1, EventObj type
ForebodingDoor = 0x1EB7CE, // R0.500, x1, EventObj type
BallOfFire = 0x39AF, // R1.000, x0 (spawn during fight)
ArcaneFont = 0x39B1, // R0.500-1.000, x0 (spawn during fight)
}

public enum AID : uint
Expand All @@ -26,7 +27,7 @@ public enum AID : uint
FiresteelFracture = 29868, // Boss->self/player, 5.0s cast, range 40 ?-degree cone
InfernBrand = 29841, // Boss->self, 4.0s cast, single-target

BlazingBenifice = 29861, // 39B1->self, 1.5s cast, range 100 width 10 rect
BlazingBenifice = 29861, // ArcaneFont->self, 1.5s cast, range 100 width 10 rect

InfernGale1 = 29858, // Boss->self, 4.0s cast, single-target
InfernGale2 = 29859, // Helper->player, no cast, single-target
Expand Down Expand Up @@ -60,4 +61,4 @@ public enum SID : uint
public enum IconID : uint
{
Icon_230 = 230, // player
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ public V014ZelessGahStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<Burn>()
.ActivateOnEnter<BlazingBenifice>()
.ActivateOnEnter<PureFire2>()
.ActivateOnEnter<CastShadow>()
.ActivateOnEnter<FiresteelFracture>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ class BlisteringBlow(BossModule module) : Components.SingleTargetCast(module, Ac
class SacredFlay2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SacredFlay2), new AOEShapeCone(50, 50.Degrees()));
class SacredFlay3(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SacredFlay3), new AOEShapeCone(50, 50.Degrees()));

class ForeHonor(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ForeHonor), new AOEShapeCone(50, 180.Degrees()));
class ForeHonor(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ForeHonor), new AOEShapeCone(50, 90.Degrees()));

class Cogwheel(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Cogwheel));

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "CombatReborn Team", PrimaryActorOID = (uint)OID.Boss, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 868, NameID = 11419)]
public class V015ThorneKnight(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsRect(new(289, -230), 20, 20, 45.Degrees()));
public class V015ThorneKnight(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsRect(new(289, -230), 15, 15, 45.Degrees()));
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public enum AID : uint
BlazingBeacon2 = 28926, // Helper->self, 6.5s cast, range 50 width 16 rect
BlazingBeacon3 = 28928, // Helper->self, 8.5s cast, range 50 width 16 rect

BlisteringBlow = 28906, // Boss->player, 5.0s cast, single-target
BlisteringBlow = 28906, // Boss->player, 5.0s cast, single-target //tankbuster
Cogwheel = 28907, // Boss->self, 5.0s cast, range 50 circle
Explosion = 28925, // BallOfFire->self, 7.0s cast, range 50 width 6 cross
ForeHonor = 28908, // Boss->self, 6.0s cast, range 50 180-degree cone
Expand Down

0 comments on commit a79c278

Please sign in to comment.