Skip to content

Commit

Permalink
add shb msq dungeons from oldwip
Browse files Browse the repository at this point in the history
  • Loading branch information
xanunderscore committed Feb 24, 2025
1 parent ace840e commit fb899e7
Show file tree
Hide file tree
Showing 19 changed files with 2,929 additions and 162 deletions.
78 changes: 78 additions & 0 deletions BossMod/Modules/Shadowbringers/Dungeon/D02DohnMheg/D021AencThon.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
namespace BossMod.Shadowbringers.Dungeon.D02DohnMheg.D021AencThon;

public enum OID : uint
{
Boss = 0x3F2,
Helper = 0x233C,
}

public enum AID : uint
{
_AutoAttack_Attack = 872, // Boss->player, no cast, single-target
_Weaponskill_CandyCane = 8857, // Boss->player, 4.0s cast, single-target
_Weaponskill_Hydrofall = 8871, // Boss->self, 3.0s cast, single-target
_Weaponskill_Hydrofall1 = 8893, // Helper->location, 3.0s cast, range 6 circle
_Weaponskill_LaughingLeap = 8852, // Boss->location, 4.0s cast, range 4 circle
_Weaponskill_LaughingLeap1 = 8840, // Boss->players, no cast, range 4 circle
_Weaponskill_Landsblood = 7822, // Boss->self, 3.0s cast, range 40 circle
_Weaponskill_Landsblood1 = 7899, // Boss->self, no cast, range 40 circle
_Weaponskill_Geyser = 8800, // Helper->self, no cast, range 6 circle
}

class CandyCane(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID._Weaponskill_CandyCane));
class Hydrofall(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID._Weaponskill_Hydrofall1), 6);
class LaughingLeap(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID._Weaponskill_LaughingLeap), 4);
class LaughingLeap2(BossModule module) : Components.StackWithIcon(module, 62, ActionID.MakeSpell(AID._Weaponskill_LaughingLeap1), 4, 5.15f);
class Landsblood(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID._Weaponskill_Landsblood));

class Geyser(BossModule module) : Components.GenericAOEs(module)
{
private readonly List<AOEInstance> Geysers = [];

private readonly List<WDir> Geysers1 = [new(0, -16), new(-9, 15)];
private readonly List<WDir> Geysers2 = [new(0, 5), new(-9, -15), new(7, -7)];

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor) => Geysers;

public override void OnActorEAnim(Actor actor, uint state)
{
if (state == 0x100020)
{
var geysers = actor.OID switch
{
0x1EAAA1 => Geysers1,
0x1EAAA2 => Geysers2,
_ => []
};
Geysers.AddRange(geysers.Select(d =>
{
var center = d.Rotate(-actor.Rotation) + actor.Position;
return new AOEInstance(new AOEShapeCircle(6), center, default, WorldState.FutureTime(5.1f));
}));
}
}

public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
if (spell.Action.ID == (uint)AID._Weaponskill_Geyser)
Geysers.RemoveAll(g => g.Origin.AlmostEqual(caster.Position, 1));
}
}

class AencThonLordOfTheLingeringGazeStates : StateMachineBuilder
{
public AencThonLordOfTheLingeringGazeStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<CandyCane>()
.ActivateOnEnter<Hydrofall>()
.ActivateOnEnter<LaughingLeap>()
.ActivateOnEnter<LaughingLeap2>()
.ActivateOnEnter<Landsblood>()
.ActivateOnEnter<Geyser>();
}
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 649, NameID = 8141)]
public class AencThonLordOfTheLingeringGaze(WorldState ws, Actor primary) : BossModule(ws, primary, new(0, 30), new ArenaBoundsCircle(19.5f));

Original file line number Diff line number Diff line change
Expand Up @@ -130,5 +130,5 @@ public AencThonLordOfTheLengthsomeGaitStates(BossModule module) : base(module)
}
}

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "xan, Malediktus", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 649, NameID = 8146)]
[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "xan, Malediktus", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 649, NameID = 8146)]
public class AencThonLordOfTheLengthsomeGait(WorldState ws, Actor primary) : BossModule(ws, primary, new(-128.5f, -244), new ArenaBoundsCircle(19.5f));
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,6 @@ public override void OnEventCast(Actor caster, ActorCastEvent spell)
if ((AID)spell.Action.ID is AID.Judged or AID.FoundWanting && Towers.Count > 0)
Towers.RemoveAt(0);
}

public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
{
if (Towers.Count > 0)
hints.AddForbiddenZone(ShapeDistance.InvertedCircle(Towers[0].Position, 5));
if (Towers.Count > 1)
hints.ActionsToExecute.Push(ActionID.MakeSpell(ClassShared.AID.Sprint), actor, ActionQueue.Priority.High);
}
}

class Exegesis(BossModule module) : Components.GenericAOEs(module)
Expand Down
108 changes: 108 additions & 0 deletions BossMod/Modules/Shadowbringers/Dungeon/D06Amaurot/D061TheFirstBeast.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
namespace BossMod.Shadowbringers.Dungeon.D06Amaurot.D061FirstBeast;

public enum OID : uint
{
Boss = 0x27B6, // R=5.4
FallenStar = 0x29DC, // R=2.4
FallingTower = 0x18D6, // R=0.5
Helper = 0x233C
}

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

VenomousBreath = 15566, // Boss->self, 3.0s cast, range 9 120-degree cone
MeteorRainVisual = 15556, // Boss->self, 3.0s cast, single-target
MeteorRain = 15558, // Helper->location, 3.0s cast, range 6 circle

TheFallingSkyVisual = 15561, // Boss->self, 3.0s cast, single-target
TheFallingSky = 15562, // Helper->location, 4.5s cast, range 10 circle
TheFinalSky = 15563, // Boss->self, 12.0s cast, range 70 circle, meteor if failed to LoS
CosmicKiss = 17108, // FallenStar->self, 4.5s cast, range 50 circle, meteor, damage fall off AOE
CosmicShrapnel = 17110, // FallenStar->self, no cast, range 8 circle, meteor explodes after final sky, can be ignored since it only does like 500 dmg

Towerfall = 15564, // FallingTower->self, 8.0s cast, range 35 width 40 rect
Earthquake = 15565, // Boss->self, 4.0s cast, range 10 circle
TheBurningSkyVisual = 15559, // Boss->self, 5.2s cast, single-target
TheBurningSky1 = 13642, // FallingTower->location, 3.5s cast, range 6 circle
TheBurningSky2 = 15560, // Helper->player, 5.2s cast, range 6 circle, spread
}

public enum IconID : uint
{
Meteor = 57, // player
Spreadmarker = 139, // player
}

class VenomousBreath(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.VenomousBreath), new AOEShapeCone(9, 60.Degrees()));
class MeteorRain(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.MeteorRain), 6);
class TheFallingSky(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.TheFallingSky), 10);
class CosmicKiss(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.CosmicKiss), new AOEShapeCircle(10));
class Towerfall(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Towerfall), new AOEShapeRect(35, 20));
class Earthquake(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Earthquake), new AOEShapeCircle(10));
class TheBurningSky1(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.TheBurningSky1), 6);
class TheBurningSky2(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.TheBurningSky2), 6);

class Meteors(BossModule module) : Components.GenericBaitAway(module)
{
public List<Actor> targets = [];

public override void OnEventIcon(Actor actor, uint iconID, ulong targetID)
{
if (iconID == (uint)IconID.Meteor)
{
CurrentBaits.Add(new(actor, actor, new AOEShapeCircle(10)));
targets.Add(actor);
}
}

public override void OnActorCreated(Actor actor)
{
if ((OID)actor.OID == OID.FallenStar)
{
CurrentBaits.Clear();
targets.Clear();
}
}

public override void AddHints(int slot, Actor actor, TextHints hints)
{
base.AddHints(slot, actor, hints);
if (targets.Contains(actor))
hints.Add("Place meteor!");
}

public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
{
base.AddAIHints(slot, actor, assignment, hints);
if (targets.Contains(actor))
hints.AddForbiddenZone(ShapeDistance.InvertedRect(new(-80, 97), new(-80, 67), 15));
}
}

class TheFinalSky(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.TheFinalSky), 70, false)
{
public override IEnumerable<Actor> BlockerActors() => Module.Enemies(OID.FallenStar);
}

class D061FirstBeastStates : StateMachineBuilder
{
public D061FirstBeastStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<TheFinalSky>()
.ActivateOnEnter<Meteors>()
.ActivateOnEnter<TheBurningSky1>()
.ActivateOnEnter<TheBurningSky2>()
.ActivateOnEnter<Earthquake>()
.ActivateOnEnter<Towerfall>()
.ActivateOnEnter<CosmicKiss>()
.ActivateOnEnter<TheFallingSky>()
.ActivateOnEnter<MeteorRain>()
.ActivateOnEnter<VenomousBreath>();
}
}

[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "The Combat Reborn Team (Malediktus)", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 652, NameID = 8201)]
public class D061FirstBeast(WorldState ws, Actor primary) : BossModule(ws, primary, new(-80, 82), new ArenaBoundsSquare(19.5f));
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
namespace BossMod.Shadowbringers.Dungeon.D06Amaurot.D062Bellwether;

public enum OID : uint
{
Boss = 0x27B8, // R=6.0-12.0
TerminusFlesher = 0x27B9, // R=3.3
TerminusCrier = 0x27BD, // R=1.0
TerminusSprinter = 0x2879, // R=1.96
TerminusDetonator = 0x27BA, // R=2.0
TerminusShriver = 0x27BC, // R=1.35
TerminusRoiler = 0x27BB, // R=1.2
TerminusBeholder = 0x27BE, // R=1.32
Helper = 0x233C
}

public enum AID : uint
{
AutoAttack = 870, // Boss/TerminusSprinter/TerminusCrier->player, no cast, single-target
AutoAttack2 = 6499, // TerminusFlesher/TerminusBeholder->player, no cast, single-target
AutoAttack3 = 18013, // TerminusDetonator->player, no cast, single-target
ShrillShriek = 15567, // Boss->self, 3.0s cast, range 50 circle
Aetherspike = 15571, // TerminusSprinter->self, 4.0s cast, range 40 width 8 rect
SelfDestruct = 15570, // TerminusDetonator->self, no cast, range 6 circle
IllWill = 15573, // TerminusRoiler->player, no cast, single-target
SicklyFlame = 15588, // TerminusShriver->player, 2.0s cast, single-target
Comet = 15572, // 18D6->location, 4.0s cast, range 4 circle
SicklyInferno = 16765, // TerminusShriver->location, 3.0s cast, range 5 circle
Burst = 15569, // Boss->self, no cast, range 50 circle, raidwide on boss death
BurstEnrage = 15568, // Boss->self, 45.0s cast, single-target, enrage cast
ExplosionEnrage = 15919, // Boss->self, no cast, range 50 circle, enrage
}

class ShrillShriek(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.ShrillShriek));
class Aetherspike(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Aetherspike), new AOEShapeRect(40, 4));
class Comet(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Comet), 4);
class SicklyInferno(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.SicklyInferno), 5);
class Burst(BossModule module) : Components.CastHint(module, ActionID.MakeSpell(AID.BurstEnrage), "Enrage!", true);

class D062BellwetherStates : StateMachineBuilder
{
public D062BellwetherStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<ShrillShriek>()
.ActivateOnEnter<Aetherspike>()
.ActivateOnEnter<Comet>()
.ActivateOnEnter<SicklyInferno>()
.ActivateOnEnter<Burst>();
}
}

[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "The Combat Reborn Team (Malediktus)", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 652, NameID = 8202)]
public class D062Bellwether(WorldState ws, Actor primary) : BossModule(ws, primary, new(60, -361), new ArenaBoundsCircle(19.5f))
{
protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actors(WorldState.Actors.Where(a => !a.IsAlly), ArenaColor.Enemy);
}
}
Loading

0 comments on commit fb899e7

Please sign in to comment.