Skip to content

Commit

Permalink
Merge pull request #63 from FFXIV-CombatReborn/V01SS-second-path
Browse files Browse the repository at this point in the history
this was supposed to be just second path lol
  • Loading branch information
LTS-FFXIV authored Apr 28, 2024
2 parents c325507 + 85a944a commit ad6fae1
Show file tree
Hide file tree
Showing 15 changed files with 359 additions and 48 deletions.
16 changes: 15 additions & 1 deletion BossMod/Modules/Endwalker/Variant/V01SS/V011Geryon/V011Geryon.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
namespace BossMod.Endwalker.Variant.V01SS.V011Geryon;

class ColossalStrike(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.ColossalStrike));

class ColossalCharge1(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.ColossalCharge1), 7);
class ColossalCharge2(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.ColossalCharge2), 7);

class ColossalLaunch(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ColossalLaunch), new AOEShapeRect(20, 20));
class ExplosionAOE(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ExplosionAOE), new AOEShapeCircle(15));
class ExplosionDonut(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ExplosionDonut), new AOEShapeDonut(5, 17));

class ColossalSlam(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ColossalSlam), new AOEShapeCone(60, 60.Degrees()));
class ColossalSwing(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ColossalSwing), new AOEShapeCone(60, 180.Degrees()));

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

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "CombatReborn Team", PrimaryActorOID = (uint)OID.Boss, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 868, NameID = 11442)]
public class V011Geryon(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsSquare(new(183, 176.99f), 19.5f))
public class V011Geryon(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsSquare(new(183, 176.99f), 19.5f)) //left path -213, 100 // middle path 0, 0
{
protected override void DrawEnemies(int pcSlot, Actor pc)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,17 @@ public enum AID : uint
Unknown1 = 29894, // Boss->location, no cast, single-target
Unknown2 = 31260, // PowderKegRed->self, no cast, single-target
Unknown3 = 29907, // PowderKegBlue->self, no cast, single-target

Intake = 29913, // Helper->self, no cast, range 40 width 10 rect

RunawayRunoff = 29911, // Helper->self, 9.0s cast, range 60 circle
Gigantomill = 29898, // Boss->self, 8.0s cast, range 72 width 10 cross

}

public enum IconID : uint
{
Icon_218 = 218, // player
Icon_156 = 156, // Boss
Icon_157 = 157, // Boss
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,5 @@
namespace BossMod.Endwalker.Variant.V01SS.V011Geryon;

class ColossalStrike(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.ColossalStrike));

class ColossalCharge1(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.ColossalCharge1), 7);
class ColossalCharge2(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.ColossalCharge2), 7);

class ColossalLaunch(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ColossalLaunch), new AOEShapeRect(20, 20));
class ExplosionAOE(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ExplosionAOE), new AOEShapeCircle(15));
class ExplosionDonut(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ExplosionDonut), new AOEShapeDonut(5, 17));

class ColossalSlam(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ColossalSlam), new AOEShapeCone(60, 60.Degrees()));
class ColossalSwing(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ColossalSwing), new AOEShapeCone(60, 180.Degrees()));

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


class V011GeryonStates : StateMachineBuilder
{
public V011GeryonStates(BossModule module) : base(module)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
namespace BossMod.Endwalker.Variant.V01SS.V012Silkie;

class V012PuffTracker(BossModule module) : BossComponent(module)
{
public List<Actor> BracingPuffs = new();
public List<Actor> ChillingPuffs = new();
public List<Actor> FizzlingPuffs = new();

public override void DrawArenaForeground(int pcSlot, Actor pc)
{
Arena.Actors(BracingPuffs, 0xff80ff80, true);
Arena.Actors(ChillingPuffs, 0xffff8040, true);
Arena.Actors(FizzlingPuffs, 0xff40c0c0, true);
}

public override void OnStatusGain(Actor actor, ActorStatus status)
{
switch ((SID)status.ID)
{
case SID.BracingSudsPuff:
BracingPuffs.Add(actor);
ChillingPuffs.Remove(actor);
FizzlingPuffs.Remove(actor);
break;
case SID.ChillingSudsPuff:
BracingPuffs.Remove(actor);
ChillingPuffs.Add(actor);
FizzlingPuffs.Remove(actor);
break;
}
}

public override void OnStatusLose(Actor actor, ActorStatus status)
{
switch ((SID)status.ID)
{
case SID.BracingSudsPuff:
BracingPuffs.Remove(actor);
break;
case SID.ChillingSudsPuff:
ChillingPuffs.Remove(actor);
break;
}
}
}
27 changes: 27 additions & 0 deletions BossMod/Modules/Endwalker/Variant/V01SS/V012Silkie/V012Silkie.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
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 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));

class ChillingDuster1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ChillingDuster1), new AOEShapeCross(60, 5));
class ChillingDuster2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ChillingDuster2), new AOEShapeCross(60, 5));
class ChillingDuster3(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ChillingDuster3), new AOEShapeCross(60, 5));

class SlipperySoap(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.SlipperySoap), 5);
class SpotRemover2(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.SpotRemover2), 5);

class SqueakyCleanAOE1E(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SqueakyCleanAOE1E), new AOEShapeCone(60, 45.Degrees()));
class SqueakyCleanAOE2E(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SqueakyCleanAOE2E), new AOEShapeCone(60, 45.Degrees()));
class SqueakyCleanAOE3E(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SqueakyCleanAOE3E), new AOEShapeCone(60, 112.5f.Degrees()));

class SqueakyCleanAOE1W(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SqueakyCleanAOE1W), new AOEShapeCone(60, 45.Degrees()));
class SqueakyCleanAOE2W(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SqueakyCleanAOE2W), new AOEShapeCone(60, 45.Degrees()));
class SqueakyCleanAOE3W(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SqueakyCleanAOE3W), new AOEShapeCone(60, 112.5f.Degrees()));

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "CombatReborn Team", PrimaryActorOID = (uint)OID.Boss, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 868, NameID = 11369)]
public class V012Silkie(WorldState ws, Actor primary) : BossModule(ws, primary, new ArenaBoundsSquare(new(-335, -155), 20));
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
namespace BossMod.Endwalker.Variant.V01SS.V012Silkie;

public enum OID : uint
{
Boss = 0x39EF, // R6.000, x1
Helper = 0x233C, // R0.500, x15, 523 type
EasternEwer = 0x39F1, // R2.400, x5
SilkenPuff = 0x39F0, // R1.000, x15
Actor1e9230 = 0x1E9230, // R0.500, x0 (spawn during fight), EventObj type
}

public enum AID : uint
{
AutoAttack = 6497, // Boss->player, no cast, single-target

CarpetBeater = 30507, // Boss->player, 5.0s cast, single-target tankbuster
TotalWash = 30508, // Boss->self, 5.0s cast, range 60 circle // raidwide
DustBlusterKnockback = 30532, // Boss->location, 5.0s cast, range 60 circle // knockback

BracingSuds = 30517, // Boss->self, 5.0s cast, single-target, applies green status
ChillingSuds = 30518, // Boss->self, 5.0s cast, single-target, applies blue status
SoapsUp = 30519, // Boss->self, 4.0s cast, single-target, removes color statuses
FreshPuff = 30525, // Boss->self, 4.0s cast, single-target, visual (statuses on puffs)
SoapingSpreeBoss = 30526, // Boss->self, 6.0s cast, single-target, visual
SoapingSpreePuff = 30529, // SilkenPuff->self, 6.0s cast, single-target, removes color statuses

ChillingDuster1 = 30520, // Helper->self, 5.0s cast, range 60 width 10 cross
BracingDuster1 = 30521, // Helper->self, 5.0s cast, range ?-60 donut

ChillingDuster2 = 30523, // Helper->self, 8.5s cast, range 60 width 10 cross
BracingDuster2 = 30524, // Helper->self, 8.5s cast, range ?-60 donut

ChillingDuster3 = 30527, // Helper->self, 7.0s cast, range 60 width 10 cross
BracingDuster3 = 30528, // Helper->self, 8.5s cast, range ?-60 donut


SlipperySoap = 30522, // Boss->location, 5.0s cast, width 10 rect charge

SpotRemover1 = 30530, // Boss->self, 3.5s cast, single-target
SpotRemover2 = 30531, // Helper->location, 3.5s cast, range 5 circle

SqueakyCleanE = 30509, // Boss->self, 4.5s cast, single-target
SqueakyCleanAOE1E = 30511, // Helper->self, 6.0s cast, range 60 90-degree cone
SqueakyCleanAOE2E = 30512, // Helper->self, 7.7s cast, range 60 90-degree cone
SqueakyCleanAOE3E = 30513, // Helper->self, 9.2s cast, range 60 225-degree cone

SqueakyCleanW = 30510, // Boss->self, 4.5s cast, single-target
SqueakyCleanAOE1W = 30514, // Helper->self, 6.0s cast, range 60 90-degree cone
SqueakyCleanAOE2W = 30515, // Helper->self, 7.7s cast, range 60 90-degree cone
SqueakyCleanAOE3W = 30516, // Helper->self, 9.2s cast, range 60 225-degree cone

WashOut1 = 30533, // Boss->self, 8.0s cast, single-target
WashOutKnockback = 30534, // Helper->self, 8.0s cast, range 60 width 60 rect
}

public enum SID : uint
{
VulnerabilityUp = 1789, // Helper->player, extra=0x1/0x3
BracingSudsBoss = 3297, // Boss->Boss, extra=0x0
ChillingSudsBoss = 3298, // Boss->Boss, extra=0x0
BracingSudsPuff = 3305, // none->SilkenPuff, extra=0x0
ChillingSudsPuff = 3306, // none->SilkenPuff, extra=0x0
}

public enum IconID : uint
{
Icon_218 = 218, // player
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace BossMod.Endwalker.Variant.V01SS.V012Silkie;

class V012SilkieStates : StateMachineBuilder
{
public V012SilkieStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<DustBlusterKnockback>()
.ActivateOnEnter<WashOutKnockback>()
.ActivateOnEnter<BracingDuster1>()
.ActivateOnEnter<BracingDuster2>()
.ActivateOnEnter<ChillingDuster1>()
.ActivateOnEnter<ChillingDuster2>()
.ActivateOnEnter<ChillingDuster3>()
.ActivateOnEnter<SlipperySoap>()
.ActivateOnEnter<SpotRemover2>()
.ActivateOnEnter<SqueakyCleanAOE1E>()
.ActivateOnEnter<SqueakyCleanAOE2E>()
.ActivateOnEnter<SqueakyCleanAOE3E>()
.ActivateOnEnter<SqueakyCleanAOE1W>()
.ActivateOnEnter<SqueakyCleanAOE2W>()
.ActivateOnEnter<SqueakyCleanAOE3W>()
.ActivateOnEnter<V012PuffTracker>()
.ActivateOnEnter<CarpetBeater>()
.ActivateOnEnter<TotalWash>();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
namespace BossMod.Endwalker.Variant.V01SS.V013Gladiator;

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

class RingOfMight1Out(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RingOfMight1Out), new AOEShapeCircle(8));
class RingOfMight2Out(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RingOfMight2Out), new AOEShapeCircle(13));
class RingOfMight3Out(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RingOfMight3Out), new AOEShapeCircle(18));
class RingOfMight1In(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RingOfMight1In), new AOEShapeDonut(8, 30));
class RingOfMight2In(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RingOfMight2In), new AOEShapeDonut(13, 30));
class RingOfMight3In(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RingOfMight3In), new AOEShapeDonut(18, 30));

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 RushOfMightFront(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RushOfMightFront), new AOEShapeCone(60, 90.Degrees()));
class RushOfMightBack(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.RushOfMightBack), new AOEShapeCone(60, 90.Degrees()));
//class RushOfMight1(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.RushOfMight1), new AOEShapeCone(40, 180.Degrees()));
//class RushOfMight2(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.RushOfMight2), new AOEShapeCone(40, 180.Degrees()));
//class RushOfMight3(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.RushOfMight3), new AOEShapeCone(40, 180.Degrees()));

class BitingWindBad(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.BitingWindBad), 4);

class ShatteringSteel(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.ShatteringSteel), "Get in bigger Whirlwind to dodge");
class ViperPoisonPatterns(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 6, ActionID.MakeSpell(AID.BitingWindBad), m => m.Enemies(OID.WhirlwindBad).Where(z => z.EventState != 7), 0);

class SculptorsPassion(BossModule module) : Components.GenericWildCharge(module, 4, ActionID.MakeSpell(AID.SculptorsPassion))
{
public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
base.OnEventCast(caster, spell);
if ((AID)spell.Action.ID == AID.SculptorsPassion)
{
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;
}
}
}

[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));
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
namespace BossMod.Endwalker.Variant.V01SS.V013Gladiator;

public enum OID : uint
{
Boss = 0x399F, // R6.500, x1
Helper = 0x233C, // R0.500, x18, 523 type
Regret = 0x39A1, // R1.000, x0 (spawn during fight)
WhirlwindSafe = 0x39A2, // R2.000, x0 (spawn during fight)
WhirlwindBad = 0x3AEC, // R1.330, x0 (spawn during fight)
}

public enum AID : uint
{
AutoAttack = 6497, // Boss->player, no cast, single-target
Teleport = 30265, // Boss->location, no cast, single-target

BitingWindSafe = 30285, // Helper->self, 4.0s cast, range 6 circle
BitingWindKnockup = 30286, // Helper->player, no cast, single-target
BitingWindBad = 31222, // Helper->self, 4.0s cast, range 4 circle

FlashOfSteel1 = 30284, // Boss->self, 5.0s cast, range 60 circle raidwide
FlashOfSteel2 = 30294, // Boss->self, 5.0s cast, range 60 circle raidwide
MightySmite = 30295, // Boss->player, 5.0s cast, single-target tankbuster

WrathOfRuin = 30277, // Boss->self, 3.0s cast, single-target, visual
RackAndRuin = 30278, // Regret->location, 4.0s cast, range 40 width 5 rect

RingOfMightVisual = 30655, // Helper->self, 10.0s cast, range 18 circle
RingOfMight1Out = 30271, // Boss->self, 10.0s cast, range 8 circle
RingOfMight2Out = 30272, // Boss->self, 10.0s cast, range 13 circle
RingOfMight3Out = 30273, // Boss->self, 10.0s cast, range 18 circle
RingOfMight1In = 30274, // Helper->self, 12.0s cast, range 8-30 donut
RingOfMight2In = 30275, // Helper->self, 12.0s cast, range 13-30 donut
RingOfMight3In = 30276, // Helper->self, 12.0s cast, range 18-30 donut

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
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
}


public enum SID : uint
{
UnknownStatus = 2056, // none->Boss/Whirlwind1, extra=0x1D8/0x1D9/0x1F2/0x1D7
VulnerabilityUp = 1789, // Helper->player, extra=0x1/0x2
Liftoff = 3262, // Helper->player, extra=0x0
}

public enum IconID : uint
{
Icon_218 = 218, // player
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace BossMod.Endwalker.Variant.V01SS.V013Gladiator;

class V013GladiatorStates : StateMachineBuilder
{
public V013GladiatorStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<SunderedRemains>()
.ActivateOnEnter<BitingWindBad>()
.ActivateOnEnter<RingOfMight1Out>()
.ActivateOnEnter<RingOfMight2Out>()
.ActivateOnEnter<RingOfMight3Out>()
.ActivateOnEnter<RingOfMight1In>()
.ActivateOnEnter<RingOfMight2In>()
.ActivateOnEnter<RingOfMight3In>()
.ActivateOnEnter<RackAndRuin>()
.ActivateOnEnter<FlashOfSteel1>()
.ActivateOnEnter<FlashOfSteel2>()
.ActivateOnEnter<RushOfMightFront>()
.ActivateOnEnter<RushOfMightBack>()
//.ActivateOnEnter<RushOfMight1>()
//.ActivateOnEnter<RushOfMight2>()
//.ActivateOnEnter<RushOfMight3>()
.ActivateOnEnter<SculptorsPassion>()
.ActivateOnEnter<MightySmite>();
}
}
Loading

0 comments on commit ad6fae1

Please sign in to comment.