Skip to content

Commit

Permalink
update PotD arena bounds
Browse files Browse the repository at this point in the history
  • Loading branch information
CarnifexOptimus committed Feb 16, 2025
1 parent d1625ba commit 3390ed2
Show file tree
Hide file tree
Showing 21 changed files with 142 additions and 73 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,19 @@ public DD100NybethObdilordStates(BossModule module) : base(module)
[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 208, NameID = 5356)]
public class DD100NybethObdilord : BossModule
{
public DD100NybethObdilord(WorldState ws, Actor primary) : base(ws, primary, new(300f, 300f), new ArenaBoundsCircle(24f))
public DD100NybethObdilord(WorldState ws, Actor primary) : base(ws, primary, arena.Center, arena)
{
ActivateComponent<EncounterHints>();
}

private static readonly WPos[] vertices = [new(302.11f, 276.34f), new(307.39f, 276.36f), new(308.04f, 276.58f), new(309.51f, 278.03f), new(310.04f, 278.17f),
new(311.94f, 278.24f), new(312.52f, 278.61f), new(321.65f, 287.79f), new(321.81f, 288.44f), new(321.9f, 290.34f),
new(324.01f, 292.58f), new(324.28f, 293.17f), new(324.29f, 306.71f), new(324.08f, 307.35f), new(321.86f, 309.64f),
new(321.77f, 312.15f), new(312.3f, 321.62f), new(311.60f, 321.80f), new(309.56f, 321.92f), new(307.32f, 324.12f),
new(306.66f, 324.29f), new(300.1f, 324.22f), new(293.11f, 324.29f), new(292.52f, 323.96f), new(290.57f, 322.02f),
new(290.01f, 321.88f), new(288.08f, 321.81f), new(287.52f, 321.42f), new(278.22f, 312.13f), new(278.14f, 310.01f),
new(278f, 309.45f), new(275.71f, 307.13f), new(275.73f, 293.36f), new(275.86f, 292.68f), new(277.75f, 290.77f),
new(278.12f, 290.27f), new(278.20f, 288.37f), new(278.33f, 287.73f), new(287.51f, 278.59f), new(288.05f, 278.21f),
new(290.12f, 278.13f), new(290.61f, 277.91f), new(291.97f, 276.56f), new(302.11f, 276.34f)];
private static readonly ArenaBoundsComplex arena = new([new PolygonCustom(vertices)]);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ namespace BossMod.Heavensward.DeepDungeon.PalaceOfTheDead.DD10PalaceDeathgaze;

public enum OID : uint
{
Boss = 0x1692, // R6.000, x1
Boss = 0x1692 // R6.0
}

public enum AID : uint
Expand All @@ -13,7 +13,7 @@ public enum AID : uint
Bombination = 6418, // Boss->self, 3.0s cast, range 6+R circle
Lumisphere = 6419, // Boss->location, 3.0s cast, range 6 circle
Stormwind = 6417, // Boss->self, 3.0s cast, range 12+R 90-degree cone
Whipcrack = 6416, // Boss->player, no cast, single-target
Whipcrack = 6416 // Boss->player, no cast, single-target
}

class AeroBlast(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.AeroBlast));
Expand All @@ -34,4 +34,7 @@ public DD10PalaceDeathgazeStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 174, NameID = 4986)]
public class DD10PalaceDeathgaze(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -220f), new ArenaBoundsCircle(24f));
public class DD10PalaceDeathgaze(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
{
private static readonly ArenaBoundsComplex arena = new([new Polygon(new(-300f, -220f), 24.65f, 48)], [new Rectangle(new(-300f, -245f), 20f, 1.25f)]);
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@ public DD110AlicantoStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 209, NameID = 5371)]
public class DD110Alicanto(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -235f), new ArenaBoundsCircle(24f));
public class DD110Alicanto(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds2090110.Center, SharedBounds.ArenaBounds2090110);
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
}
class BloodyCaress(BossModule module) : Components.Cleave(module, ActionID.MakeSpell(AID.BloodyCaress), new AOEShapeCone(11.6f, 60f.Degrees()), activeWhileCasting: false);
class FinalSting(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.FinalSting), "Final sting is being cast! \nKill the add or take 98% of your hp!");
class GoldDust(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.GoldDust), 8);
class GoldDust(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.GoldDust), 8f);
class Leafstorm(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Leafstorm));
class RottenStench(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.RottenStench), new AOEShapeRect(48.6f, 6f));

Expand All @@ -63,4 +63,4 @@ public DD120KirtimukhaStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 210, NameID = 5384)]
public class DD120Kirtimukha(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -235f), new ArenaBoundsCircle(24f));
public class DD120Kirtimukha(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds120130.Center, SharedBounds.ArenaBounds120130);
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public enum AID : uint

class Dissever(BossModule module) : Components.Cleave(module, ActionID.MakeSpell(AID.Dissever), new AOEShapeCone(10.8f, 45f.Degrees()), activeWhileCasting: false);

abstract class Voidzones(BossModule module, AID aid, uint oid) : Components.PersistentVoidzoneAtCastTarget(module, 6, ActionID.MakeSpell(aid), m => GetVoidzones(m, oid), 2.1f)
abstract class Voidzones(BossModule module, AID aid, uint oid) : Components.PersistentVoidzoneAtCastTarget(module, 6f, ActionID.MakeSpell(aid), m => GetVoidzones(m, oid), 2.1f)
{
private static Actor[] GetVoidzones(BossModule module, uint oid)
{
Expand Down Expand Up @@ -92,4 +92,4 @@ public DD130AlfardStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 211, NameID = 5397)]
public class DD130Alfard(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -237f), new ArenaBoundsCircle(24f));
public class DD130Alfard(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds120130.Center, SharedBounds.ArenaBounds120130);
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,4 @@ public DD140AhPuchStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 212, NameID = 5410)]
public class DD140AhPuch(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -237f), new ArenaBoundsCircle(24f));
public class DD140AhPuch(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds140150.Center, SharedBounds.ArenaBounds140150);
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
for (var i = 0; i < count; ++i)
{
var zombie = zombies[i];
hints.AddForbiddenZone(ShapeDistance.Circle(zombie.Position, 3));
hints.AddForbiddenZone(ShapeDistance.Circle(zombie.Position, 8), WorldState.FutureTime(5d));
hints.AddForbiddenZone(ShapeDistance.Circle(zombie.Position, 3f));
hints.AddForbiddenZone(ShapeDistance.Circle(zombie.Position, 8f), WorldState.FutureTime(5d));
}
}
else
Expand Down Expand Up @@ -92,7 +92,7 @@ public DD150TisiphoneStates(BossModule module) : base(module)
[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 213, NameID = 5424)]
public class DD150Tisiphone : BossModule
{
public DD150Tisiphone(WorldState ws, Actor primary) : base(ws, primary, new(-300f, -237.17f), new ArenaBoundsCircle(24f))
public DD150Tisiphone(WorldState ws, Actor primary) : base(ws, primary, SharedBounds.ArenaBounds140150.Center, SharedBounds.ArenaBounds140150)
{
ActivateComponent<EncounterHints>();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public enum AID : uint
Valfodr = 7156, // Boss->player, 4.0s cast, width 6 rect charge + kb
}

class CleaveAuto(BossModule module) : Components.Cleave(module, ActionID.MakeSpell(AID.AutoAttack), new AOEShapeCone(11.92f, 45.Degrees()), activeWhileCasting: false);
class HallOfSorrow(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 9, ActionID.MakeSpell(AID.HallOfSorrow), GetVoidzones, 1.3f)
class CleaveAuto(BossModule module) : Components.Cleave(module, ActionID.MakeSpell(AID.AutoAttack), new AOEShapeCone(11.92f, 45f.Degrees()), activeWhileCasting: false);
class HallOfSorrow(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 9f, ActionID.MakeSpell(AID.HallOfSorrow), GetVoidzones, 1.3f)
{
private static Actor[] GetVoidzones(BossModule module)
{
Expand All @@ -39,8 +39,8 @@ private static Actor[] GetVoidzones(BossModule module)
}
}

class Infatuation(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Infatuation), 7);
class Valfodr(BossModule module) : Components.BaitAwayChargeCast(module, ActionID.MakeSpell(AID.Valfodr), 3);
class Infatuation(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Infatuation), 7f);
class Valfodr(BossModule module) : Components.BaitAwayChargeCast(module, ActionID.MakeSpell(AID.Valfodr), 3f);
class ValfodrKB(BossModule module) : Components.Knockback(module, ActionID.MakeSpell(AID.Valfodr), stopAtWall: true) // note actual knockback is delayed by upto 1.2s in replay
{
private int _target;
Expand Down Expand Up @@ -80,11 +80,11 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
return null;
var forbidden = new Func<WPos, float>[count];
for (var i = 0; i < count; ++i)
forbidden[i] = ShapeDistance.Circle(_aoe.Casters[i].Origin, 7);
forbidden[i] = ShapeDistance.Circle(_aoe.Casters[i].Origin, 7f);
return ShapeDistance.Union(forbidden);
}

public override bool DestinationUnsafe(int slot, Actor actor, WPos pos) => GetFireballZone() is var z && z != null && z(pos) < 0;
public override bool DestinationUnsafe(int slot, Actor actor, WPos pos) => GetFireballZone() is var z && z != null && z(pos) < 0f;

public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
{
Expand All @@ -100,7 +100,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
hints.AddForbiddenZone(p =>
{
var dir = (p - kbSource).Normalized();
var proj = Arena.ClampToBounds(p + dir * 25);
var proj = Arena.ClampToBounds(p + dir * 25f);
return dangerZone(proj);
}, _source.Value.Activation);
}
Expand All @@ -120,4 +120,4 @@ public DD160TodesritterStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 214, NameID = 5438)]
public class DD160Todesritter(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -300f), new ArenaBoundsCircle(25f));
public class DD160Todesritter(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds160170180190.Center, SharedBounds.ArenaBounds160170180190);
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public enum AID : uint
FangsEnd = 7159 // Boss->player, no cast, single-target
}

class Douse(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 8, ActionID.MakeSpell(AID.Douse), GetVoidzones, 0.8f)
class Douse(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 8f, ActionID.MakeSpell(AID.Douse), GetVoidzones, 0.8f)
{
public static Actor[] GetVoidzones(BossModule module)
{
Expand Down Expand Up @@ -73,7 +73,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
{
var effPuddleSize = 8 + Module.PrimaryActor.HitboxRadius;
var tankDist = hints.FindEnemy(Module.PrimaryActor)?.TankDistance ?? 2;
// yaquaru tank distance seems to be around 2-2.5y, but from testing, 3y minimum is needed to move it out of the puddle, either because of rasterization shenanigans or netcode
// yulunggu tank distance seems to be around 2-2.5y, but from testing, 3y minimum is needed to move it out of the puddle, either because of rasterization shenanigans or netcode
var effTankDist = Module.PrimaryActor.HitboxRadius + tankDist + 1;

var len = puddles.Length;
Expand All @@ -87,7 +87,6 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
}

class Drench(BossModule module) : Components.Cleave(module, ActionID.MakeSpell(AID.Drench), new AOEShapeCone(15.75f, 45f.Degrees()), activeWhileCasting: false);

class Electrogenesis(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Electrogenesis), 8f);

class DD170YulungguStates : StateMachineBuilder
Expand All @@ -103,4 +102,4 @@ public DD170YulungguStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 215, NameID = 5449)]
public class DD170Yulunggu(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -300f), new ArenaBoundsCircle(25f));
public class DD170Yulunggu(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds160170180190.Center, SharedBounds.ArenaBounds160170180190);
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ public EncounterHints(BossModule module) : base(module)

public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
if ((AID)spell.Action.ID is AID.CharybdisCast or AID.Trounce or AID.Thunderbolt)
if (spell.Action.ID is (uint)AID.CharybdisCast or (uint)AID.Trounce or (uint)AID.Thunderbolt)
++NumCast;
else if ((AID)spell.Action.ID is AID.EclipticMeteor)
else if (spell.Action.ID == (uint)AID.EclipticMeteor)
NumCast = 11;

if (NumCast == 10)
Expand Down Expand Up @@ -153,7 +153,7 @@ private Action<uint> StateCommon(string name, float duration = 10000f)
[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 216, NameID = 5461, PlanLevel = 60)]
public class DD180Dendainsonne : BossModule
{
public DD180Dendainsonne(WorldState ws, Actor primary) : base(ws, primary, new(-300f, -300f), new ArenaBoundsCircle(25f))
public DD180Dendainsonne(WorldState ws, Actor primary) : base(ws, primary, SharedBounds.ArenaBounds160170180190.Center, SharedBounds.ArenaBounds160170180190)
{
ActivateComponent<Hints>();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
public enum OID : uint
{
Boss = 0x1820, // R3.750, x1
GiddyBomb = 0x18F3, // R0.600, x0 (spawn during fight), small bombs that are untargetable, multiple spawn up and explode at once
LavaBomb = 0x18F2, // R1.200, x0 (spawn during fight), (also known as greybomb) cast a pbaoe that stuns needs to be on top of the boss's hitbox to stun
RemedyBomb = 0x18F1 // R1.200, x0 (spawn during fight), cast a roomwide aoe that will hit for 80% of max hp + inflicts a dot
GiddyBomb = 0x18F3, // R0.6, small bombs that are untargetable, multiple spawn up and explode at once
LavaBomb = 0x18F2, // R1.2, (also known as greybomb) cast a pbaoe that stuns needs to be on top of the boss's hitbox to stun
RemedyBomb = 0x18F1 // R1.2, cast a roomwide aoe that will hit for 80% of max hp + inflicts a dot
}

public enum AID : uint
Expand Down Expand Up @@ -33,27 +33,27 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
hints.SetPriority(g, AIHints.Enemy.PriorityForbidden);
}
}
class Sap(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Sap), 8);
class Sap(BossModule module) : Components.SimpleAOEs(module, ActionID.MakeSpell(AID.Sap), 8f);
class ScaldingScoldingCleave(BossModule module) : Components.Cleave(module, ActionID.MakeSpell(AID.ScaldingScolding), new AOEShapeCone(11.75f, 45f.Degrees()), activeWhileCasting: false);
class RemedyBombEnrage(BossModule module) : Components.CastHint(module, ActionID.MakeSpell(AID.HypothermalCombustionRemedyBomb), "Remedy bomb is enraging!", true);
class MassiveBurstEnrage(BossModule module) : Components.CastHint(module, ActionID.MakeSpell(AID.MassiveBurst), "Enrage! Stun boss with the Lavabomb!", true);

class HypothermalMinion(BossModule module) : Components.GenericAOEs(module)
{
private readonly List<AOEInstance> _aoes = [];
private static readonly AOEShapeCircle Circle = new(6.6f);
private static readonly AOEShapeCircle circle = new(6.6f);

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

public override void OnActorCreated(Actor actor)
{
if ((OID)actor.OID == OID.GiddyBomb)
_aoes.Add(new(Circle, actor.Position, default, WorldState.FutureTime(10)));
if (actor.OID == (uint)OID.GiddyBomb)
_aoes.Add(new(circle, WPos.ClampToGrid(actor.Position), default, WorldState.FutureTime(10d)));
}

public override void OnCastFinished(Actor caster, ActorCastInfo spell)
{
if ((AID)spell.Action.ID == AID.HypothermalCombustionMinionCast)
if (spell.Action.ID == (uint)AID.HypothermalCombustionMinionCast)
_aoes.Clear();
}
}
Expand All @@ -74,4 +74,4 @@ public DD190TheGodfatherStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 217, NameID = 5471)]
public class DD190TheGodfather(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300, -300), new ArenaBoundsCircle(25));
public class DD190TheGodfather(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds160170180190.Center, SharedBounds.ArenaBounds160170180190);
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ namespace BossMod.Heavensward.DeepDungeon.PalaceOfTheDead.DD20Spurge;

public enum OID : uint
{
Boss = 0x169F, // R3.600, x1
PalaceHornet = 0x1763 // R0.400, x0 (spawn during fight)
Boss = 0x169F, // R3.6
PalaceHornet = 0x1763 // R0.4
}

public enum AID : uint
Expand Down Expand Up @@ -60,4 +60,4 @@ public DD20SpurgeStates(BossModule module) : base(module)
}

[ModuleInfo(BossModuleInfo.Maturity.Contributed, Contributors = "LegendofIceman", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 175, NameID = 4999)]
public class DD20Spurge(WorldState ws, Actor primary) : BossModule(ws, primary, new(-300f, -235f), new ArenaBoundsCircle(24f));
public class DD20Spurge(WorldState ws, Actor primary) : BossModule(ws, primary, SharedBounds.ArenaBounds2090110.Center, SharedBounds.ArenaBounds2090110);
Loading

0 comments on commit 3390ed2

Please sign in to comment.