Skip to content

Commit

Permalink
BoneCrawler, Gamma, Orghana Stormblood S rank modules
Browse files Browse the repository at this point in the history
  • Loading branch information
CarnifexOptimus committed Mar 29, 2024
1 parent d46707a commit 9d7b989
Show file tree
Hide file tree
Showing 3 changed files with 228 additions and 0 deletions.
78 changes: 78 additions & 0 deletions BossMod/Modules/Stormblood/HuntS/BoneCrawler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// CONTRIB: made by malediktus, not checked
namespace BossMod.Stormblood.HuntS.BoneCrawler
{
public enum OID : uint
{
Boss = 0x1AB5, // R=6.2
};

public enum AID : uint
{
AutoAttack = 870, // Boss->player, no cast, single-target
HeatBreath = 7924, // Boss->self, 3,0s cast, range 8+R 90-degree cone
RipperClaw = 7920, // Boss->self, 2,1s cast, range 5+R 90-degree cone
WildCharge = 7921, // Boss->location, 3,5s cast, width 8 rect charge
TailSmash = 7918, // Boss->self, 3,0s cast, range 12+R 90-degree cone
VolcanicHowl = 7917, // Boss->self, no cast, range 50 circle, raidwide, applies Haste to self
TailSwing = 7919, // Boss->self, 2,1s cast, range 10 circle, knockback 20, away from source
HotCharge = 7922, // Boss->location, 2,5s cast, width 12 rect charge
Haste = 7926, // Boss->self, no cast, single-target, boss applies Haste to self
BoneShaker = 7925, // Boss->self, no cast, range 30+R circle, raidwide player stun
};

class HeatBreath : Components.SelfTargetedAOEs
{
public HeatBreath() : base(ActionID.MakeSpell(AID.HeatBreath), new AOEShapeCone(14.2f, 45.Degrees())) { }
}

class RipperClaw : Components.SelfTargetedAOEs
{
public RipperClaw() : base(ActionID.MakeSpell(AID.RipperClaw), new AOEShapeCone(11.2f, 45.Degrees())) { }
}

class WildCharge : Components.ChargeAOEs
{
public WildCharge() : base(ActionID.MakeSpell(AID.WildCharge), 4) { }
}

class HotCharge : Components.ChargeAOEs
{
public HotCharge() : base(ActionID.MakeSpell(AID.HotCharge), 6) { }
}

class TailSwing : Components.SelfTargetedAOEs
{
public TailSwing() : base(ActionID.MakeSpell(AID.TailSwing), new AOEShapeCircle(10)) { }
}

class TailSwingKB : Components.KnockbackFromCastTarget
{
public TailSwingKB() : base(ActionID.MakeSpell(AID.TailSwing), 20, shape: new AOEShapeCircle(10)) { }
}

class TailSmash : Components.SelfTargetedAOEs
{
public TailSmash() : base(ActionID.MakeSpell(AID.TailSmash), new AOEShapeCone(18.2f, 45.Degrees())) { }
}

class BoneCrawlerStates : StateMachineBuilder
{
public BoneCrawlerStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<HeatBreath>()
.ActivateOnEnter<RipperClaw>()
.ActivateOnEnter<WildCharge>()
.ActivateOnEnter<HotCharge>()
.ActivateOnEnter<TailSwing>()
.ActivateOnEnter<TailSwingKB>()
.ActivateOnEnter<TailSmash>();
}
}

[ModuleInfo(NotoriousMonsterID = 106)]
public class BoneCrawler : SimpleBossModule
{
public BoneCrawler(WorldState ws, Actor primary) : base(ws, primary) { }
}
}
100 changes: 100 additions & 0 deletions BossMod/Modules/Stormblood/HuntS/Gamma.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
// CONTRIB: made by malediktus, not checked
namespace BossMod.Stormblood.HuntS.Gamma
{
public enum OID : uint
{
Boss = 0x1AB2, // R=8.4
};

public enum AID : uint
{
AutoAttack = 7351, // Boss->player, no cast, single-target
MagitekCannon = 7912, // Boss->player, no cast, single-target
DiffractiveLaser = 7914, // Boss->location, 2,0s cast, range 5 circle
MagitekFlamehook = 7913, // Boss->self, 1,5s cast, range 30+R circle, raidwide + pyretic
LimitCut = 7916, // Boss->self, 2,0s cast, single-target, applies Haste to self
Launcher = 7915, // Boss->self, 1,5s cast, range 30+R circle, raidwide, does %HP dmg (10%, 20%, 30%, or 50%)
};

public enum SID : uint
{
Pyretic = 960, // Boss->player, extra=0x0
Haste = 8, // Boss->Boss, extra=0x0
};

class DiffractiveLaser : Components.LocationTargetedAOEs
{
public DiffractiveLaser() : base(ActionID.MakeSpell(AID.DiffractiveLaser), 5) { }
}

class MagitekFlamehook : Components.RaidwideCast
{
public MagitekFlamehook() : base(ActionID.MakeSpell(AID.MagitekFlamehook), "Raidwide + Pyretic") { }
}

class Launcher : Components.RaidwideCast
{
public Launcher() : base(ActionID.MakeSpell(AID.Launcher), "Raidwide (%HP based)") { }
}

class MagitekFlamehookPyretic : BossComponent
{ //Note: boss is lvl 70, so this pyretic can probably be ignored at lvl 90, but we assume the player is also around lvl 70
private BitMask _pyretic;
public bool Pyretic { get; private set; }
private bool casting;

public override void OnCastStarted(BossModule module, Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID == AID.MagitekFlamehook)
casting = true;
}

public override void OnCastFinished(BossModule module, Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID == AID.MagitekFlamehook)
casting = false;
}

public override void OnStatusGain(BossModule module, Actor actor, ActorStatus status)
{
if ((SID)status.ID == SID.Pyretic)
_pyretic.Set(module.Raid.FindSlot(actor.InstanceID));
}

public override void OnStatusLose(BossModule module, Actor actor, ActorStatus status)
{
if ((SID)status.ID == SID.Pyretic)
_pyretic.Clear(module.Raid.FindSlot(actor.InstanceID));
}

public override void AddHints(BossModule module, int slot, Actor actor, TextHints hints, MovementHints? movementHints)
{
if (_pyretic[slot] != Pyretic)
hints.Add("Pyretic on you! STOP everything!");
}

public override void AddGlobalHints(BossModule module, GlobalHints hints)
{
if (casting)
hints.Add("Applies Pyretic - STOP everything until it runs out!");
}
}

class GammaStates : StateMachineBuilder
{
public GammaStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<DiffractiveLaser>()
.ActivateOnEnter<MagitekFlamehook>()
.ActivateOnEnter<Launcher>()
.ActivateOnEnter<MagitekFlamehookPyretic>();
}
}

[ModuleInfo(NotoriousMonsterID = 91)]
public class Gamma : SimpleBossModule
{
public Gamma(WorldState ws, Actor primary) : base(ws, primary) { }
}
}
50 changes: 50 additions & 0 deletions BossMod/Modules/Stormblood/HuntS/Orghana.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// CONTRIB: made by malediktus, not checked
namespace BossMod.Stormblood.HuntS.Orghana
{
public enum OID : uint
{
Boss = 0x1AB3, // R=5.04
};

public enum AID : uint
{
AutoAttack = 7998, // Boss->player, no cast, single-target
FlamingEpigraph = 7999, // Boss->location, no cast, range 10 circle, targets random player
TremblingEpigraph = 8000, // Boss->self, 5,0s cast, range 40 circle, usually raidwide x4
TremblingEpigraph2 = 8001, // Boss->self, no cast, range 40 circle
FlaringEpigraph = 8002, // Boss->self, 5,0s cast, range 40 circle
Epigraph = 7997, // Boss->self, 3,5s cast, range 50+R width 8 rect
};

class TremblingEpigraph : Components.RaidwideCast
{
public TremblingEpigraph() : base(ActionID.MakeSpell(AID.TremblingEpigraph), "Raidwide x4") { }
}

class FlaringEpigraph : Components.RaidwideCast
{
public FlaringEpigraph() : base(ActionID.MakeSpell(AID.FlaringEpigraph)) { }
}

class Epigraph : Components.SelfTargetedAOEs
{
public Epigraph() : base(ActionID.MakeSpell(AID.Epigraph), new AOEShapeRect(55.04f, 4)) { }
}

class OrghanaStates : StateMachineBuilder
{
public OrghanaStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<TremblingEpigraph>()
.ActivateOnEnter<FlaringEpigraph>()
.ActivateOnEnter<Epigraph>();
}
}

[ModuleInfo(NotoriousMonsterID = 96)]
public class Orghana : SimpleBossModule
{
public Orghana(WorldState ws, Actor primary) : base(ws, primary) { }
}
}

0 comments on commit 9d7b989

Please sign in to comment.