Skip to content

Commit 5c8b5e7

Browse files
Merge pull request #938 from FFXIV-CombatReborn/mergeWIP
update Cutter's Cry modules for 7.3, change Necron Ex Aetherblight hints
2 parents 9d305ca + 0d9355d commit 5c8b5e7

File tree

5 files changed

+296
-122
lines changed

5 files changed

+296
-122
lines changed

BossMod/Modules/Dawntrail/Extreme/Ex5Necron/Aetherblight.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ public override void OnEventIcon(Actor actor, uint iconID, ulong targetID)
7474
{
7575
(var shape, var hint) = iconID switch
7676
{
77-
(uint)IconID.AetherblightCircle => ((AOEShape)circle, "Circle"),
78-
(uint)IconID.AetherblightDonut => (donut, "Donut"),
79-
(uint)IconID.AetherblightRectSingle => (rect, "Middle"),
80-
(uint)IconID.AetherblightRectDouble => (rect, "Sides"),
77+
(uint)IconID.AetherblightCircle => ((AOEShape)circle, "Out"),
78+
(uint)IconID.AetherblightDonut => (donut, "In"),
79+
(uint)IconID.AetherblightRectSingle => (rect, "Sides"),
80+
(uint)IconID.AetherblightRectDouble => (rect, "Center"),
8181
_ => default
8282
};
8383
if (shape != null)
@@ -146,7 +146,7 @@ public override void AddGlobalHints(GlobalHints hints)
146146
var count = Hints.Count;
147147
if (count > 0)
148148
{
149-
var sb = new StringBuilder("Stored: ", 8 + 4 * (count - 1) + count * 5);
149+
var sb = new StringBuilder("Order: ", 7 + 4 * (count - 1) + count * 5);
150150
var ord = CollectionsMarshal.AsSpan(Hints);
151151
for (var i = 0; i < count; ++i)
152152
{
@@ -181,17 +181,17 @@ public override void OnActorModelStateChange(Actor actor, byte modelState, byte
181181
{
182182
switch (Hints[i])
183183
{
184-
case "Sides":
184+
case "Center":
185185
AddAOE(rect, new(88f, 85f), i);
186186
AddAOE(rect, new(112f, 85f), i);
187187
break;
188-
case "Circle":
188+
case "Out":
189189
AddAOE(circle, loc, i);
190190
break;
191-
case "Donut":
191+
case "In":
192192
AddAOE(donut, loc, i);
193193
break;
194-
case "Middle":
194+
case "Sides":
195195
AddAOE(rect, loc, i);
196196
break;
197197
}

BossMod/Modules/RealmReborn/Dungeon/D09CuttersCry/D091MyrmidonPrincess.cs

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,61 @@
11
namespace BossMod.RealmReborn.Dungeon.D09CuttersCry.D091MyrmidonPrincess;
2-
// TODO: Revist when it gets duty support to finish.
2+
33
public enum OID : uint
44
{
5-
// Boss
6-
Boss = 0x646, // Myrimidon Princess
7-
8-
// Trash
9-
MyrmidonMarshal = 0x647,
10-
MyrmidonSoldier = 0x649
5+
MyrmidonPrincess = 0x48FB, // R3.0
6+
MyrmidonSoldier = 0x48FE, // R1.05
7+
MyrmidonGuard = 0x48FD, // R1.95
8+
MyrmidonMarshal = 0x48FC, // R2.4
9+
Helper = 0x233C
1110
}
1211

1312
public enum AID : uint
1413
{
15-
// Boss
16-
AutoAttack = 870, // Boss->player, no cast, single target
17-
MandibleBite = 1109, // Boss->self, 2.5s cast, range 9.0 90-degree cone
18-
Silence = 307, // Boss->player, 2.5s cast, random single-target
19-
TrapJaws = 523, // Boss->player, no cast, single target
20-
Haste = 744, // Boss->enemy, 2.5s cast, single target
21-
22-
// Trash
23-
AutoAttackTrash = 870, // Trash->player, no cast, single target
24-
FormicPheromones = 1110 // MyrmidonMarshal->Boss, 4.5s cast, single target
14+
AutoAttack = 870, // MyrmidonPrincess/MyrmidonSoldier/MyrmidonGuard/MyrmidonMarshal->player, no cast, single-target
15+
16+
StoneIIVisual = 44226, // MyrmidonPrincess->self, 2.3+0,7s cast, single-target
17+
StoneII = 44227, // Helper->location, 3.0s cast, range 5 circle
18+
Silence = 44228, // MyrmidonPrincess->player, 5.0s cast, single-target, interrupt
19+
MandibleBite = 44229, // MyrmidonPrincess->self, 2.5s cast, range 6+R 90-degree cone
20+
TrapJaws = 44231, // MyrmidonSoldier/MyrmidonGuard->player, no cast, single-target
21+
Protection = 44230 // MyrmidonMarshal->MyrmidonPrincess, no cast, single-target
2522
}
2623

27-
class MandibleBite(BossModule module) : Components.SimpleAOEs(module, (uint)AID.MandibleBite, new AOEShapeCone(9f, 45f.Degrees()));
24+
sealed class MandibleBite(BossModule module) : Components.SimpleAOEs(module, (uint)AID.MandibleBite, new AOEShapeCone(9f, 45f.Degrees()));
25+
sealed class StoneII(BossModule module) : Components.SimpleAOEs(module, (uint)AID.StoneII, 5f);
26+
sealed class Silence(BossModule module) : Components.CastInterruptHint(module, (uint)AID.Silence, showNameInHint: true);
2827

29-
class D091MyrmidonPrincessStates : StateMachineBuilder
28+
sealed class D091MyrmidonPrincessStates : StateMachineBuilder
3029
{
3130
public D091MyrmidonPrincessStates(BossModule module) : base(module)
3231
{
3332
TrivialPhase()
33+
.ActivateOnEnter<StoneII>()
34+
.ActivateOnEnter<Silence>()
3435
.ActivateOnEnter<MandibleBite>();
3536
}
3637
}
3738

38-
[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "Chuggalo", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 12, NameID = 1585)]
39-
public class D091MyrmidonPrincess(WorldState ws, Actor primary) : BossModule(ws, primary, new(-20f, 200f), new ArenaBoundsCircle(35f))
39+
[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "The Combat Reborn Team (Malediktus), Chuggalo", PrimaryActorOID = (uint)OID.MyrmidonPrincess, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 12u, NameID = 1585u, Category = BossModuleInfo.Category.Dungeon, Expansion = BossModuleInfo.Expansion.RealmReborn, SortOrder = 1)]
40+
public sealed class D091MyrmidonPrincess(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
4041
{
41-
private static readonly uint[] trash = [(uint)OID.MyrmidonMarshal, (uint)OID.MyrmidonSoldier];
42+
private static readonly uint[] trash = [(uint)OID.MyrmidonMarshal, (uint)OID.MyrmidonSoldier, (uint)OID.MyrmidonGuard];
43+
private static readonly ArenaBoundsComplex arena = new([new PolygonCustom([new(-29.24f, 177.93f), new(-11.23f, 190.65f),
44+
new(-10.72f, 190.55f), new(-10.20f, 190.18f), new(-9.60f, 189.97f),
45+
new(-8.97f, 189.85f), new(-7.67f, 190.15f), new(-7.09f, 190.56f), new(-4.98f, 197.15f), new(-4.77f, 197.73f),
46+
new(-4.16f, 198.93f), new(-3.91f, 200.31f), new(-3.93f, 203.00f), new(-4.25f, 204.28f), new(-5.73f, 206.57f),
47+
new(-5.81f, 207.12f), new(-5.62f, 208.37f), new(-5.90f, 208.81f), new(-15.81f, 216.56f), new(-16.20f, 217.00f),
48+
new(-16.23f, 217.66f), new(-16.18f, 218.16f), new(-20.58f, 220.47f), new(-21.09f, 220.88f), new(-21.33f, 221.45f),
49+
new(-21.78f, 221.97f), new(-22.43f, 222.27f), new(-22.80f, 222.72f), new(-23.06f, 223.15f), new(-23.56f, 223.24f),
50+
new(-24.25f, 223.20f), new(-24.84f, 223.24f), new(-26.83f, 224.89f), new(-27.53f, 224.88f), new(-28.77f, 225.05f),
51+
new(-29.39f, 224.90f), new(-30.04f, 224.59f), new(-30.57f, 224.16f), new(-32.23f, 223.05f), new(-32.84f, 223.01f),
52+
new(-33.48f, 223.13f), new(-34.17f, 223.15f), new(-35.55f, 223.01f), new(-49.30f, 206.21f), new(-49.42f, 205.62f),
53+
new(-50.09f, 204.52f), new(-50.31f, 203.86f), new(-50.49f, 202.56f), new(-50.39f, 199.94f), new(-50.27f, 199.33f),
54+
new(-48.16f, 195.99f), new(-48.42f, 195.53f), new(-48.43f, 194.87f), new(-43.38f, 185.97f), new(-42.85f, 185.55f),
55+
new(-41.67f, 184.94f), new(-40.48f, 184.47f), new(-39.83f, 184.31f), new(-37.77f, 184.20f), new(-35.23f, 184.54f),
56+
new(-34.67f, 184.99f), new(-34.30f, 185.57f), new(-33.12f, 184.63f), new(-33.03f, 182.80f), new(-32.69f, 182.18f),
57+
new(-32.18f, 181.78f), new(-31.99f, 180.41f), new(-31.72f, 179.75f), new(-31.16f, 179.32f), new(-30.63f, 178.97f),
58+
new(-29.74f, 178.02f), new(-29.24f, 177.93f)])]);
4259

4360
protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints)
4461
{
@@ -49,7 +66,7 @@ protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRoles
4966
e.Priority = e.Actor.OID switch
5067
{
5168
(uint)OID.MyrmidonMarshal => 2,
52-
(uint)OID.Boss => 1,
69+
(uint)OID.MyrmidonPrincess => 1,
5370
_ => 0
5471
};
5572
}
Lines changed: 130 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,155 @@
11
namespace BossMod.RealmReborn.Dungeon.D09CuttersCry.D092GiantTunnelWorm;
2-
// TODO: Revist when it gets duty support to finish.
2+
33
public enum OID : uint
44
{
5-
Boss = 0x536, // x1
6-
BottomlessDesertHelper = 0x64A, // x1
7-
SandPillarHelper = 0x64B // x7
5+
GiantTunnelWorm = 0x48FF, // R4.5
6+
Helper = 0x233C
87
}
98

109
public enum AID : uint
1110
{
12-
AutoAttack = 870, // Boss->player, no cast
11+
AutoAttack = 870, // GiantTunnelWorm->player, no cast, single-target
12+
13+
Sandstorm = 44235, // GiantTunnelWorm->player, no cast, single-target
14+
SandCyclone = 44236, // GiantTunnelWorm->player, no cast, single-target, applies sludge
15+
SandPillar = 44232, // Helper->self, no cast, range 4 circle
16+
Earthbreak = 44233, // GiantTunnelWorm->self, no cast, range 10 circle
17+
BottomlessDesert = 44234, // Helper->self, no cast, range 65 circle, pull 32 between hitboxes, raidwide
18+
}
19+
20+
public enum SID : uint
21+
{
22+
Sludge = 270 // GiantTunnelWorm->player, extra=0x0
1323

14-
Sandstorm = 529, // Boss->self, no cast, range 10.5 90-degree cleave
15-
SandCyclone = 1111, // Boss->player, no cast, random single-target
16-
Earthbreak = 531, // Boss->self, no cast, range 14.5 aoe
17-
BottomlessDesert = 1112, // BottomlessDesertHelper->self, no cast, raidwide drawin
18-
SandPillar = 1113 // SandPillarHelper->self, no cast, range 4.5 aoe
1924
}
2025

21-
class Sandstorm(BossModule module) : Components.Cleave(module, (uint)AID.Sandstorm, new AOEShapeCone(10.5f, 45f.Degrees()));
26+
sealed class Sludge(BossModule module) : Components.CleansableDebuff(module, (uint)SID.Sludge, "Sludge", "muddied");
2227

23-
// TODO: pillars teleport right before cast, so we don't show them for now...
24-
class Submerge(BossModule module) : Components.GenericAOEs(module, (uint)AID.Earthbreak)
28+
sealed class SandPillarEarthbreak(BossModule module) : Components.GenericAOEs(module)
2529
{
26-
private readonly AOEShapeCircle _shape = new(14.5f);
30+
private readonly AOEShapeCircle circleSmall = new(4f), circleBig = new(10f);
31+
private readonly List<AOEInstance> _aoes = new(7);
32+
private static readonly (WPos initialPos, Angle rotation)[] positions =
33+
[
34+
(new(-135.623f, 147.871f), -45f.Degrees()),
35+
(new(-142.695f, 144.942f), default),
36+
(new(-149.766f, 162.013f), 135f.Degrees()),
37+
(new(-142.695f, 164.942f), 180f.Degrees()),
38+
(new(-152.695f, 154.942f), 90f.Degrees()),
39+
(new(-135.623f, 162.013f), -135f.Degrees()),
40+
(new(-149.766f, 147.871f), 45f.Degrees()),
41+
(new(-132.694f, 154.942f), -90f.Degrees()),
42+
];
2743

2844
public override ReadOnlySpan<AOEInstance> ActiveAOEs(int slot, Actor actor)
2945
{
30-
// TODO: proper timings...
31-
if (!Module.PrimaryActor.IsTargetable)
32-
return new AOEInstance[1] { new(_shape, Module.PrimaryActor.Position, Module.PrimaryActor.Rotation) };
33-
return [];
46+
var count = _aoes.Count;
47+
if (count == 0)
48+
{
49+
return [];
50+
}
51+
var aoes = CollectionsMarshal.AsSpan(_aoes);
52+
if (count > 1)
53+
{
54+
ref var aoe = ref aoes[0];
55+
aoe.Color = Colors.Danger;
56+
}
57+
return aoes;
58+
}
59+
60+
public override void OnEventCast(Actor caster, ActorCastEvent spell)
61+
{
62+
switch (spell.Action.ID)
63+
{
64+
case (uint)AID.SandPillar:
65+
var count = _aoes.Count;
66+
if (count == 0)
67+
{
68+
var cPos = caster.Position;
69+
for (var i = 0; i < 8; ++i)
70+
{
71+
ref readonly var pos = ref positions[i];
72+
var initialPosition = pos.initialPos;
73+
if (initialPosition.AlmostEqual(cPos, 1f))
74+
{
75+
var dir = 4f * pos.rotation.ToDirection();
76+
for (var j = 1; j < 8; ++j)
77+
{
78+
_aoes.Add(new(j != 7 ? circleSmall : circleBig, (initialPosition + j * dir).Quantized(), default, WorldState.FutureTime(0.9d * j)));
79+
}
80+
return;
81+
}
82+
}
83+
}
84+
else
85+
{
86+
_aoes.RemoveAt(0);
87+
}
88+
break;
89+
case (uint)AID.Earthbreak:
90+
if (_aoes.Count != 0)
91+
{
92+
_aoes.RemoveAt(0);
93+
}
94+
break;
95+
case (uint)AID.BottomlessDesert:
96+
_aoes.Add(new(circleBig, caster.Position.Quantized(), default, WorldState.FutureTime(3.1d)));
97+
break;
98+
}
3499
}
35100
}
36101

37-
class D092GiantTunnelWormStates : StateMachineBuilder
102+
sealed class D092GiantTunnelWormStates : StateMachineBuilder
38103
{
39104
public D092GiantTunnelWormStates(BossModule module) : base(module)
40105
{
41106
TrivialPhase()
42-
.ActivateOnEnter<Sandstorm>()
43-
.ActivateOnEnter<Submerge>();
107+
.ActivateOnEnter<Sludge>()
108+
.ActivateOnEnter<SandPillarEarthbreak>();
44109
}
45110
}
46111

47-
[ModuleInfo(BossModuleInfo.Maturity.Verified, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 12, NameID = 1589)]
48-
public class D092GiantTunnelWorm(WorldState ws, Actor primary) : BossModule(ws, primary, new(-140f, 150f), new ArenaBoundsCircle(35f));
112+
[ModuleInfo(BossModuleInfo.Maturity.Verified, Contributors = "The Combat Reborn Team (Malediktus)", PrimaryActorOID = (uint)OID.GiantTunnelWorm, GroupType = BossModuleInfo.GroupType.CFC, GroupID = 12u, NameID = 1589u, Category = BossModuleInfo.Category.Dungeon, Expansion = BossModuleInfo.Expansion.RealmReborn, SortOrder = 2)]
113+
public sealed class D092GiantTunnelWorm(WorldState ws, Actor primary) : BossModule(ws, primary, arena.Center, arena)
114+
{
115+
private static readonly ArenaBoundsComplex arena = new([new PolygonCustom([new(-152.42f, 127.49f), new(-152.01f, 127.81f),
116+
new(-151.04f, 128.76f), new(-150.49f, 128.97f), new(-150.04f, 129.24f),
117+
new(-149.53f, 129.72f), new(-148.43f, 130.37f), new(-147.83f, 130.49f), new(-147.34f, 130.23f), new(-146.91f, 129.77f),
118+
new(-145.89f, 128.91f), new(-145.29f, 128.62f), new(-144.64f, 128.5f), new(-143.06f, 128.46f), new(-142.42f, 128.59f),
119+
new(-141.78f, 128.78f), new(-140.75f, 129.67f), new(-140.41f, 130.16f), new(-139.92f, 130.63f), new(-139.39f, 130.62f),
120+
new(-138.69f, 130.38f), new(-138.24f, 130.86f), new(-137.62f, 131.16f), new(-137.02f, 131.01f), new(-136.37f, 130.95f),
121+
new(-134.29f, 131.24f), new(-133.92f, 130.6f), new(-133.55f, 130.26f), new(-133.04f, 129.9f), new(-132.42f, 130.03f),
122+
new(-130.86f, 131.94f), new(-130.38f, 132.3f), new(-129.76f, 132.47f), new(-127.15f, 132.38f), new(-125.27f, 132.7f),
123+
new(-124.59f, 132.9f), new(-123.15f, 134.26f), new(-122.68f, 134.84f), new(-122.04f, 136.61f), new(-121.75f, 137.79f),
124+
new(-120.71f, 138.45f), new(-120.18f, 138.96f), new(-119.75f, 139.52f), new(-118.46f, 142.06f), new(-117.85f, 144.61f),
125+
new(-117.96f, 145.96f), new(-117.81f, 146.54f), new(-117.44f, 146.99f), new(-116.93f, 146.92f), new(-115.62f, 146.9f),
126+
new(-115.7f, 147.55f), new(-117.3f, 148.8f), new(-117.77f, 149.26f), new(-118.03f, 149.83f), new(-118.11f, 150.47f),
127+
new(-117.91f, 151.08f), new(-117.35f, 152.27f), new(-117.18f, 152.75f), new(-117.58f, 153.84f), new(-118.04f, 154.36f),
128+
new(-118.4f, 154.88f), new(-118.49f, 155.49f), new(-118.21f, 156.01f), new(-117.77f, 156.47f), new(-116.69f, 157.27f),
129+
new(-116.49f, 157.73f), new(-116.63f, 158.4f), new(-117.71f, 160.77f), new(-118.75f, 161.67f), new(-119.11f, 162.16f),
130+
new(-118.94f, 163.41f), new(-118.97f, 164.11f), new(-119.16f, 165.38f), new(-119.37f, 166.03f), new(-119.79f, 166.52f),
131+
new(-120.35f, 166.9f), new(-121.05f, 166.87f), new(-121.68f, 166.66f), new(-122.84f, 166.11f), new(-123.41f, 165.99f),
132+
new(-127.02f, 167.29f), new(-128.27f, 168.87f), new(-128.58f, 169.4f), new(-128.34f, 171.92f), new(-128.41f, 172.55f),
133+
new(-128.61f, 173.19f), new(-128.88f, 173.8f), new(-129.14f, 174.23f), new(-130.47f, 174.31f), new(-131.06f, 174.52f),
134+
new(-131.14f, 175.05f), new(-130.84f, 175.64f), new(-130.79f, 176.3f), new(-132.03f, 178.66f), new(-132.52f, 179.15f),
135+
new(-133.08f, 179.57f), new(-133.51f, 180.05f), new(-134.02f, 180.51f), new(-135.19f, 181.09f), new(-135.8f, 181.17f),
136+
new(-136.42f, 181.39f), new(-138.11f, 182.43f), new(-138.73f, 182.27f), new(-139.32f, 182.37f), new(-148.32f, 182.55f),
137+
new(-148.89f, 182.23f), new(-149.43f, 181.8f), new(-149.71f, 181.34f), new(-151.22f, 181.05f), new(-151.84f, 181.06f),
138+
new(-152.49f, 180.97f), new(-153.09f, 180.71f), new(-153.73f, 180.63f), new(-154.39f, 180.38f), new(-155.54f, 179.77f),
139+
new(-155.61f, 179.09f), new(-155.41f, 178.42f), new(-155.05f, 177.82f), new(-154.94f, 177.12f), new(-155.07f, 176.6f),
140+
new(-157.42f, 175.56f), new(-157.95f, 175.2f), new(-158.44f, 174.74f), new(-159.73f, 172.52f), new(-160.3f, 172.17f),
141+
new(-162.25f, 172.07f), new(-162.26f, 171.39f), new(-162.17f, 170.74f), new(-161.92f, 170.09f), new(-161.95f, 169.42f),
142+
new(-162.35f, 169.01f), new(-162.96f, 168.85f), new(-163.48f, 169.16f), new(-164.11f, 169.41f), new(-164.76f, 169.56f),
143+
new(-165.27f, 169.51f), new(-166.39f, 169.27f), new(-166.97f, 169.25f), new(-167.46f, 169.12f), new(-167.54f, 168.49f),
144+
new(-168.15f, 167.34f), new(-168.3f, 166.73f), new(-168.49f, 165.44f), new(-168.23f, 164.11f), new(-167.77f, 163.59f),
145+
new(-167.13f, 163.24f), new(-166.61f, 162.8f), new(-166.31f, 162.22f), new(-167.23f, 160.62f), new(-167.73f, 159.4f),
146+
new(-167.9f, 158.74f), new(-167.97f, 158.1f), new(-168.23f, 157.64f), new(-171.29f, 155.25f), new(-171.36f, 154.54f),
147+
new(-171.03f, 153.95f), new(-170.57f, 153.45f), new(-168.4f, 151.96f), new(-167.85f, 151.69f), new(-167.65f, 151.15f),
148+
new(-167.32f, 149.94f), new(-167.07f, 149.33f), new(-166.28f, 148.24f), new(-165.3f, 147.32f), new(-164.62f, 147.2f),
149+
new(-163.94f, 147.42f), new(-163.25f, 147.48f), new(-162.57f, 147.35f), new(-162.06f, 147.04f), new(-161.76f, 145.78f),
150+
new(-161.54f, 145.15f), new(-160.58f, 143.39f), new(-160.17f, 142.92f), new(-160.53f, 141.02f), new(-160.58f, 139.67f),
151+
new(-159.62f, 138.68f), new(-158.96f, 138.44f), new(-158.28f, 138.47f), new(-157.65f, 138.25f), new(-157.16f, 137.78f),
152+
new(-156.85f, 137.23f), new(-157.01f, 136.72f), new(-157.29f, 136.13f), new(-157.48f, 135.52f), new(-157.56f, 134.84f),
153+
new(-157.26f, 133.59f), new(-157.03f, 132.89f), new(-156.77f, 132.3f), new(-155.87f, 131.23f), new(-155.11f, 129.42f),
154+
new(-154.53f, 128.98f), new(-153.87f, 128.71f), new(-153.35f, 128.36f), new(-152.99f, 127.81f), new(-152.42f, 127.49f)])]);
155+
}

0 commit comments

Comments
 (0)