forked from awgil/ffxiv_bossmod
-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BoneCrawler, Gamma, Orghana Stormblood S rank modules
- Loading branch information
1 parent
d46707a
commit 9d7b989
Showing
3 changed files
with
228 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { } | ||
} | ||
} |