Skip to content

Commit

Permalink
merge fix
Browse files Browse the repository at this point in the history
  • Loading branch information
CarnifexOptimus committed Jan 17, 2025
1 parent 788e059 commit d936d55
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 30 deletions.
7 changes: 4 additions & 3 deletions BossMod/Modules/Dawntrail/Ultimate/FRU/P2DiamondDust.cs
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,7 @@ class P2TwinStillnessSilence(BossModule module) : Components.GenericAOEs(module)
private readonly Actor? _source = module.Enemies(OID.OraclesReflection).FirstOrDefault();
private BitMask _thinIce;
private P2SinboundHolyVoidzone? _voidzones; // used for hints only
private const float SlideDistance = 32;

private readonly AOEShapeCone _shapeFront = new(30, 135.Degrees());
private readonly AOEShapeCone _shapeBack = new(30, 45.Degrees());
Expand Down Expand Up @@ -431,12 +432,12 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
if (dist >= SlideDistance)
{
// voidzone center is outside slide distance => forbid voidzone itself
zoneList.ForbidCircle(z.Position, _voidzones.Shape.Radius);
zoneList.ForbidCircle(z.Position, 6);
}
else if (dist >= _voidzones.Shape.Radius)
else if (dist >= 6)
{
// forbid the voidzone's shadow
zoneList.ForbidArcByLength(Angle.FromDirection(offset), Angle.Asin(_voidzones.Shape.Radius / dist));
zoneList.ForbidArcByLength(Angle.FromDirection(offset), Angle.Asin(6 / dist));
}
// else: we're already in voidzone, oh well
}
Expand Down
6 changes: 3 additions & 3 deletions BossMod/Modules/Dawntrail/Ultimate/FRU/P4AkhRhai.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
{
// preposition for baits - note that this is very arbitrary...
var off = 10 * 45.Degrees().ToDirection();
var p1 = ShapeDistance.Circle(Module.Center + off, 1);
var p2 = ShapeDistance.Circle(Module.Center - off, 1);
hints.AddForbiddenZone(p => -MathF.Min(p1(p), p2(p)), DateTime.MaxValue);
var p1 = ShapeDistance.Circle(Arena.Center + off, 1);
var p2 = ShapeDistance.Circle(Arena.Center - off, 1);
hints.AddForbiddenZone(p => -Math.Min(p1(p), p2(p)), DateTime.MaxValue);
}
}

Expand Down
48 changes: 27 additions & 21 deletions BossMod/Modules/Dawntrail/Ultimate/FRU/P4CrystallizeTime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public enum Mechanic { None, FangEruption, FangWater, FangDarkness, FangBlizzard

public Actor? FindPlayerByAssignment(Mechanic mechanic, int side)
{
for (int i = 0; i < PlayerMechanics.Length; ++i)
for (var i = 0; i < PlayerMechanics.Length; ++i)
if (PlayerMechanics[i] == mechanic && ClawSides[i] == side)
return Raid[i];
return null;
Expand Down Expand Up @@ -59,8 +59,8 @@ public override void OnStatusLose(Actor actor, ActorStatus status)

public override void OnTethered(Actor source, ActorTetherInfo tether)
{
if (tether.ID == (uint)TetherID.UltimateRelativitySlow && source.Position.Z < Module.Center.Z)
NorthSlowHourglass = source.Position - Module.Center;
if (tether.ID == (uint)TetherID.UltimateRelativitySlow && source.Position.Z < Arena.Center.Z)
NorthSlowHourglass = source.Position - Arena.Center;
}

private void AssignMechanic(Actor player, Mechanic mechanic, Mechanic lowerPrio = Mechanic.None, Mechanic higherPrio = Mechanic.None)
Expand Down Expand Up @@ -124,9 +124,8 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme

public override void DrawArenaForeground(int pcSlot, Actor pc)
{
for (var i = 0; i < Heads.Count; ++i)
foreach (var h in Heads)
{
var h = _heads[i];
Arena.Actor(h.head, Colors.Object, true);
var interceptor = FindInterceptor(h.head, h.side);
if (interceptor != null)
Expand All @@ -139,12 +138,9 @@ public override void DrawArenaBackground(int pcSlot, Actor pc)
if (_ct != null /*&& ShowPuddles && !_ct.Cleansed[pcSlot]*/)
{
var pcAssignment = _ct.PlayerMechanics[pcSlot];
for (var i = 0; i < _puddles.Count; ++i)
{
var p = _puddles[i];
foreach (var p in _puddles)
if (p.puddle.EventState != 7)
Arena.ZoneCircle(p.puddle.Position, 1, p.soaker == pcAssignment ? Colors.SafeFromAOE : Colors.AOE);
}
}
}

Expand All @@ -153,7 +149,7 @@ public override void OnActorCreated(Actor actor)
switch ((OID)actor.OID)
{
case OID.DrachenWanderer:
Heads.Add((actor, actor.Position.X > Module.Center.X ? 1 : -1));
Heads.Add((actor, actor.Position.X > Arena.Center.X ? 1 : -1));
break;
case OID.DragonPuddle:
// TODO: this is very arbitrary
Expand Down Expand Up @@ -420,7 +416,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
{
var source = _ct.FindPlayerByAssignment(P4CrystallizeTime.Mechanic.ClawAir, _ct.NorthSlowHourglass.X > 0 ? -1 : 1);
var dest = Arena.Center + SafeOffsetDarknessStack(_ct.NorthSlowHourglass.X > 0 ? 1 : -1);
var pos = source != null ? source.Position + 2 * (dest - source.Position).Normalized() : Module.Center + hint.offset;
var pos = source != null ? source.Position + 2 * (dest - source.Position).Normalized() : Arena.Center + hint.offset;
hints.AddForbiddenZone(ShapeDistance.PrecisePosition(pos, new(0, 1), Arena.Bounds.MapResolution, actor.Position, 0.1f));
}
if (hint.hint.HasFlag(Hint.Mid) && _hourglass != null && !_hourglass.AOEs.Take(2).Any(aoe => aoe.Check(actor.Position)))
Expand Down Expand Up @@ -491,7 +487,7 @@ public override void OnEventCast(Actor caster, ActorCastEvent spell)
var head = _heads?.FindHead(clawSide);
if (head != null)
{
var headOff = head.Position - Module.Center;
var headOff = head.Position - Arena.Center;
var headDir = Angle.FromDirection(headOff);
return ((clawSide > 0 ? (headDir.Deg > 45) : (headDir.Deg < -45)) ? SafeOffsetSecondHeadBait(clawSide) : headOff, Hint.SafespotPrecise);
}
Expand Down Expand Up @@ -551,15 +547,15 @@ public override void AddHints(int slot, Actor actor, TextHints hints)
{
var players = Raid.WithoutSlot(false, true, true);
players.SortBy(p => p.Position.X);
var xOrder = players.IndexOf(actor);
var xOrder = Array.IndexOf(players, actor);
players.SortBy(p => p.Position.Z);
var zOrder = players.IndexOf(actor);
var zOrder = Array.IndexOf(players, actor);
if (xOrder >= 0 && zOrder >= 0)
{
if (_exalines.StartingOffsetSum.X > 0)
xOrder = players.Count - 1 - xOrder;
xOrder = players.Length - 1 - xOrder;
if (_exalines.StartingOffsetSum.Z > 0)
zOrder = players.Count - 1 - zOrder;
zOrder = players.Length - 1 - zOrder;

var isFirst = xOrder == 0 || zOrder == 0;
var isTank = actor.Role == Role.Tank;
Expand All @@ -570,9 +566,17 @@ public override void AddHints(int slot, Actor actor, TextHints hints)
if (isFirstX == isFirstZ)
hints.Add("Position in group properly!");
}
}
}

if (KnockbackSpots(actor.Position).Any(p => !Module.Bounds.Contains(p - Module.Center)))
hints.Add("About to be knocked into wall!");
public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
{
if (!RewindDone && _ct != null && _exalines != null && _ct.Cleansed[slot])
{
var midpoint = SafeCorner();
hints.GoalZones.Add(hints.GoalProximity(midpoint, 6, 0.5f));
var destPoint = midpoint + AssignedPositionOffset(actor, assignment);
hints.GoalZones.Add(hints.GoalProximity(destPoint, 1, 1));
}
}

Expand All @@ -581,9 +585,11 @@ public override void DrawArenaForeground(int pcSlot, Actor pc)
base.DrawArenaForeground(pcSlot, pc);
if (!RewindDone && _exalines != null)
{
var vertices = KnockbackSpots(pc.Position).ToList();
Arena.AddQuad(pc.Position, vertices[0], vertices[2], vertices[1], Colors.Danger);
Arena.AddCircle(Arena.Center + 0.5f * _exalines.StartingOffset, 1, Colors.Safe);
var midpoint = SafeCorner();
Arena.AddCircle(midpoint, 1, Colors.Danger);
var offset = AssignedPositionOffset(pc, Service.Config.Get<PartyRolesConfig>()[Module.Raid.Members[pcSlot].ContentId]);
if (offset != default)
Arena.AddCircle(midpoint + offset, 1, Colors.Safe);
}
}

Expand Down
2 changes: 1 addition & 1 deletion BossMod/Modules/Dawntrail/Ultimate/FRU/P5FulgentBlade.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public override void OnCastStarted(Actor caster, ActorCastInfo spell)

var dir = spell.Rotation.ToDirection();
var distanceToBorder = Intersect.RayCircle(caster.Position - Arena.Center, dir, 22);
Lines.Add(new() { Next = spell.LoxXZ, Advance = 5 * dir, Rotation = spell.Rotation, NextExplosion = Module.CastFinishAt(spell), TimeToMove = 2, ExplosionsLeft = (int)(distanceToBorder / 5) + 1, MaxShownExplosions = 1 });
Lines.Add(new() { Next = spell.LocXZ, Advance = 5 * dir, Rotation = spell.Rotation, NextExplosion = Module.CastFinishAt(spell), TimeToMove = 2, ExplosionsLeft = (int)(distanceToBorder / 5) + 1, MaxShownExplosions = 1 });
}
}

Expand Down
4 changes: 2 additions & 2 deletions BossMod/Modules/Dawntrail/Ultimate/FRU/P5PolarizingStrikes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public override void Update()
{
var left = _source.Rotation.ToDirection().OrthoL();
float distL = float.MaxValue, distR = float.MaxValue;
foreach (var p in Raid.WithoutSlot())
foreach (var p in Raid.WithoutSlot(false, true, true))
{
var off = p.Position - _source.Position;
var side = left.Dot(off) > 0;
Expand Down Expand Up @@ -90,7 +90,7 @@ public override void DrawArenaForeground(int pcSlot, Actor pc)
return;
foreach (var (baiter, forbidden) in _baiters.Zip(_forbidden))
if (baiter != null)
_shape.Outline(Arena, _source.Position, Angle.FromDirection(baiter.Position - _source.Position), forbidden[pcSlot] ? ArenaColor.Danger : ArenaColor.Safe);
_shape.Outline(Arena, _source.Position, Angle.FromDirection(baiter.Position - _source.Position), forbidden[pcSlot] ? Colors.Danger : Colors.Safe);
}

public override void OnCastStarted(Actor caster, ActorCastInfo spell)
Expand Down

0 comments on commit d936d55

Please sign in to comment.