Skip to content

Commit

Permalink
Merge pull request #101 from FFXIV-CombatReborn/SB-Trials
Browse files Browse the repository at this point in the history
The Jade Stoa and Hells Kier first passes
  • Loading branch information
LTS-FFXIV authored May 23, 2024
2 parents 2514fcc + 6642448 commit 6e4318c
Show file tree
Hide file tree
Showing 7 changed files with 145 additions and 30 deletions.
2 changes: 1 addition & 1 deletion BossMod/Modules/Stormblood/Trial/T05Yojimbo/T05Yojimbo.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace BossMod.Stormblood.Trial.T05Yojimbo;

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 262, NameID = 6089)]
[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 595, NameID = 6089)]
public class T05Yojimbo(WorldState ws, Actor primary) : BossModule(ws, primary, new(100, 100), new ArenaBoundsSquare(20));
54 changes: 53 additions & 1 deletion BossMod/Modules/Stormblood/Trial/T07Byakko/T07Byakko.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,56 @@
namespace BossMod.Stormblood.Trial.T07Byakko;

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 243, NameID = 6221)]
class StormPulse(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.StormPulse));
class HeavenlyStrike(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.HeavenlyStrike));
class HeavenlyStrikeSpread(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.HeavenlyStrike), 3);
class SweepTheLeg1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SweepTheLeg1), new AOEShapeCone(28.5f, 135.Degrees()));
class SweepTheLeg3(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SweepTheLeg3), new AOEShapeDonut(5, 30));
class TheRoarOfThunder(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.TheRoarOfThunder));
class ImperialGuard(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ImperialGuard), new AOEShapeRect(44.75f, 2.5f));
class FireAndLightning1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.FireAndLightning1), new AOEShapeRect(50, 10));
class FireAndLightning2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.FireAndLightning2), new AOEShapeRect(50, 10));
//class Aratama1(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Aratama1), 4);
class DistantClap(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DistantClap), new AOEShapeDonut(5, 30));

class HighestStakes(BossModule module) : Components.StackWithIcon(module, (uint)IconID.Stackmarker, ActionID.MakeSpell(AID.HighestStakes2), 6, 5, 7);

class AratamaForce(BossModule module) : Components.GenericAOEs(module)
{
private readonly IReadOnlyList<Actor> _bubbles = module.Enemies(OID.AratamaForce);

private static readonly AOEShapeCircle _shape = new(2);

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor) => _bubbles.Where(actor => !actor.IsDead).Select(b => new AOEInstance(_shape, b.Position));
}

class HundredfoldHavoc(BossModule module) : Components.Exaflare(module, 5)
{
public override void OnCastStarted(Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID is AID.HundredfoldHavocFirst)
{
Lines.Add(new() { Next = spell.LocXZ, Advance = 5 * caster.Rotation.ToDirection(), NextExplosion = spell.NPCFinishAt, TimeToMove = 1, ExplosionsLeft = 10, MaxShownExplosions = 2 });
}
}

public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
if ((AID)spell.Action.ID is AID.HundredfoldHavocFirst or AID.HundredfoldHavocRest)
{
++NumCasts;
int index = Lines.FindIndex(item => item.Next.AlmostEqual(spell.TargetXZ, 1));
if (index == -1)
{
ReportError($"Failed to find entry for {caster.InstanceID:X}");
return;
}

AdvanceLine(Lines[index], spell.TargetXZ);
if (Lines[index].ExplosionsLeft == 0)
Lines.RemoveAt(index);
}
}
}

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 290, NameID = 6221)]
public class T07Byakko(WorldState ws, Actor primary) : BossModule(ws, primary, new(0, 0), new ArenaBoundsCircle(20));
18 changes: 10 additions & 8 deletions BossMod/Modules/Stormblood/Trial/T07Byakko/T07ByakkoEnums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public enum AID : uint
AutoAttack = 872, // Boss->player, no cast, single-target
MobAutoAttack = 870, // Hakutei1->player, no cast, single-target

DanceOfTheIncomplete = 9681, // Boss->self, no cast, single-target

AnswerOnHigh = 10212, // Boss->self, no cast, single-target

Aratama1 = 10793, // Helper->location, 2.5s cast, range 4 circle
Expand All @@ -26,28 +28,28 @@ public enum AID : uint
Bombogenesis2 = 10811, // Helper->self, no cast, range 6 circle

Clutch = 10209, // Boss->player, no cast, single-target
DanceOfTheIncomplete = 9681, // Boss->self, no cast, single-target

DistantClap = 10800, // Boss->self, 5.0s cast, range ?-25 donut
FellSwoop = 10829, // Helper->self, no cast, range 100 circle

FireAndLightning1 = 10796, // Boss->self, 4.0s cast, range 50+R width 20 rect
FireAndLightning2 = 10801, // Hakutei1->self, 4.0s cast, range 50+R width 20 rect

HeavenlyStrike = 10797, // Boss->player, 4.0s cast, range 3 circle
HeavenlyStrike = 10797, // Boss->player, 4.0s cast, range 3 circle // Tankbuster

HighestStakes1 = 10210, // Boss->location, 5.0s cast, single-target
HighestStakes2 = 10806, // Helper->location, no cast, range 6 circle

HundredfoldHavoc1 = 10808, // Helper->self, 5.0s cast, range 5 circle
HundredfoldHavoc2 = 10809, // Helper->self, no cast, range 5 circle
HundredfoldHavocFirst = 10808, // Helper->self, 5.0s cast, range 5 circle
HundredfoldHavocRest = 10809, // Helper->self, no cast, range 5 circle

ImperialGuard = 10819, // Hakutei2->self, 3.0s cast, range 40+R width 5 rect

StateOfShock1 = 10070, // Boss->player, no cast, single-target
StateOfShock2 = 10208, // Boss->player, 4.0s cast, single-target

SteelClaw = 10802, // Hakutei1->self, no cast, range 13+R ?-degree cone
StormPulse = 10799, // Boss->self, 4.0s cast, range 100 circle
StormPulse = 10799, // Boss->self, 4.0s cast, range 100 circle // Raidwide

SweepTheLeg1 = 10798, // Boss->self, 4.0s cast, range 24+R 270-degree cone
SweepTheLeg2 = 10821, // Boss->self, no cast, single-target
Expand Down Expand Up @@ -83,7 +85,7 @@ public enum SID : uint

public enum IconID : uint
{
Icon62 = 62, // Helper
Icon87 = 87, // player
Icon101 = 101, // player
Stackmarker = 62, // Helper
Burn = 87, // player
Spreadmarker = 101, // player
}
15 changes: 14 additions & 1 deletion BossMod/Modules/Stormblood/Trial/T07Byakko/T07ByakkoStates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@ class T07ByakkoStates : StateMachineBuilder
{
public T07ByakkoStates(BossModule module) : base(module)
{
TrivialPhase();
TrivialPhase()
.ActivateOnEnter<StormPulse>()
.ActivateOnEnter<HeavenlyStrike>()
.ActivateOnEnter<HeavenlyStrikeSpread>()
.ActivateOnEnter<SweepTheLeg1>()
.ActivateOnEnter<SweepTheLeg3>()
.ActivateOnEnter<TheRoarOfThunder>()
.ActivateOnEnter<ImperialGuard>()
//.ActivateOnEnter<HighestStakes>() stack marker not being removed properly
.ActivateOnEnter<FireAndLightning1>()
.ActivateOnEnter<FireAndLightning2>()
.ActivateOnEnter<DistantClap>()
//.ActivateOnEnter<HundredfoldHavoc>() just not appearing, unsure why
.ActivateOnEnter<AratamaForce>();
}
}
35 changes: 33 additions & 2 deletions BossMod/Modules/Stormblood/Trial/T08Suzaku/T08Suzaku.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,35 @@
namespace BossMod.Stormblood.Trial.T08Suzaku;

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 243, NameID = 6221)]
public class T08Suzaku(WorldState ws, Actor primary) : BossModule(ws, primary, new(100, 100), new ArenaBoundsCircle(20));
class ScarletFever(BossModule module) : BossComponent(module)
{
public override void OnCastFinished(Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID == AID.ScarletFever)
Module.Arena.Bounds = T08Suzaku.phase2Arena;
}
}

class ScreamsOfTheDamned(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.ScreamsOfTheDamned));
class SouthronStar(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.SouthronStar));
class AshesToAshes(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.AshesToAshes));
class ScarletFeverAOE(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.ScarletFever));

class RuthlessRefrain(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.RuthlessRefrain), 8);
class Cremate(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.Cremate));
class PhantomFlurryTankbuster(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.PhantomFlurryTankbuster));
class PhantomFlurryAOE(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.PhantomFlurryAOE), new AOEShapeCone(41, 90.Degrees()));
class FleetingSummer(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.FleetingSummer), new AOEShapeCone(40, 45.Degrees()));
class Hotspot(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Hotspot), new AOEShapeCone(21, 60.Degrees()));
class Swoop(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Swoop), new AOEShapeRect(55, 3));
class WellOfFlame(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.WellOfFlame), new AOEShapeRect(41, 10));

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "The Combat Reborn Team", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 596, NameID = 6221)]
public class T08Suzaku(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
{
private static readonly List<Shape> union = [new Circle(new(100, 100), 20)];
public static readonly ArenaBounds arena = new ArenaBoundsComplex(union);

private static readonly List<Shape> union2 = [new Circle(new(100, 100), 20)];
private static readonly List<Shape> difference2 = [new Circle(new(100, 100), 4)];
public static readonly ArenaBounds phase2Arena = new ArenaBoundsComplex(union2, difference2);
}
36 changes: 20 additions & 16 deletions BossMod/Modules/Stormblood/Trial/T08Suzaku/T08SuzakuEnums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,32 @@ public enum AID : uint
ScarletLadyAuto = 14065, // ScarletLady->player, no cast, single-target
AutoAttack2 = 12863, // Boss->player, no cast, single-target

AshesToAshes = 12831, // ScarletLady->self, 3.0s cast, range 40 circle
Burn = 12861, // Helper->self, no cast, range 4 circle
Cremate = 12832, // Boss->player, 3.0s cast, single-target
EternalFlame = 12834, // Boss->self, 3.0s cast, range 80 circle
FleetingSummer = 12835, // Boss->self, 3.0s cast, range 40 90-degree cone
Hotspot = 12856, // Helper->self, 0.9s cast, range 21 ?-degree cone
IncandescentInterlude = 12860, // Boss->self, 4.0s cast, single-target
ScreamsOfTheDamned = 12833, // Boss->self, 3.0s cast, range 40 circle // Raidwide
SouthronStar = 12852, // Boss->self, 4.0s cast, range 41 circle // Raidwide
AshesToAshes = 12831, // ScarletLady->self, 3.0s cast, range 40 circle // Raidwide
ScarletFever = 12844, // Helper->self, 7.0s cast, range 41 circle // Raidwide

RuthlessRefrain = 12848, // Boss->self, 4.0s cast, range 41 circle // Knockback

Cremate = 12832, // Boss->player, 3.0s cast, single-target // Tankbuster

PhantomFlurry1 = 12849, // Boss->self, 4.0s cast, single-target
PhantomFlurry2 = 12850, // Helper->players, no cast, single-target
PhantomFlurry3 = 12851, // Helper->self, 6.0s cast, range 41 180-degree cone
PhantomFlurryVisual = 12849, // Boss->self, 4.0s cast, single-target
PhantomFlurryTankbuster = 12850, // Helper->players, no cast, single-target // Tankbuster
PhantomFlurryAOE = 12851, // Helper->self, 6.0s cast, range 41 180-degree cone

IncandescentInterlude = 12860, // Boss->self, 4.0s cast, single-target // Towers
Rekindle = 12853, // Helper->player, no cast, range 6 circle // Spread

EternalFlame = 12834, // Boss->self, 3.0s cast, range 80 circle // summons ScarletLady
PhoenixDown = 12836, // Boss->self, 3.0s cast, single-target
Rekindle = 12853, // Helper->player, no cast, range 6 circle
RuthlessRefrain = 12848, // Boss->self, 4.0s cast, range 41 circle
ScarletFever = 12844, // Helper->self, 7.0s cast, range 41 circle

Burn = 12861, // Helper->self, no cast, range 4 circle
FleetingSummer = 12835, // Boss->self, 3.0s cast, range 40 90-degree cone
Hotspot = 12856, // Helper->self, 0.9s cast, range 21 ?-degree cone

ScarletHymn1 = 12840, // RapturousEcho->player, no cast, single-target
ScarletHymn2 = 12855, // Boss->self, no cast, single-target

ScreamsOfTheDamned = 12833, // Boss->self, 3.0s cast, range 40 circle
SouthronStar = 12852, // Boss->self, 4.0s cast, range 41 circle
Swoop = 12859, // Suzaku1->self, 3.0s cast, range 55 width 6 rect
UnknownSpell = 12846, // Boss->location, no cast, single-target

Expand Down Expand Up @@ -76,7 +80,7 @@ public enum SID : uint
public enum IconID : uint
{
Icon381 = 381, // player
Icon139 = 139, // player
Spreadmarker = 139, // player
}

public enum TetherID : uint
Expand Down
15 changes: 14 additions & 1 deletion BossMod/Modules/Stormblood/Trial/T08Suzaku/T08SuzakuStates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@ class T08SuzakuStates : StateMachineBuilder
{
public T08SuzakuStates(BossModule module) : base(module)
{
TrivialPhase();
TrivialPhase()
.ActivateOnEnter<ScreamsOfTheDamned>()
.ActivateOnEnter<SouthronStar>()
.ActivateOnEnter<AshesToAshes>()
.ActivateOnEnter<ScarletFeverAOE>()
.ActivateOnEnter<RuthlessRefrain>()
.ActivateOnEnter<Cremate>()
.ActivateOnEnter<PhantomFlurryTankbuster>()
.ActivateOnEnter<PhantomFlurryAOE>()
.ActivateOnEnter<FleetingSummer>()
.ActivateOnEnter<Hotspot>()
.ActivateOnEnter<Swoop>()
.ActivateOnEnter<WellOfFlame>()
.ActivateOnEnter<ScarletFever>();
}
}

0 comments on commit 6e4318c

Please sign in to comment.