diff --git a/BossMod/Framework/IPCProvider.cs b/BossMod/Framework/IPCProvider.cs index 4afb2f2b2c..0803cd1ab1 100644 --- a/BossMod/Framework/IPCProvider.cs +++ b/BossMod/Framework/IPCProvider.cs @@ -8,6 +8,12 @@ class IPCProvider : IDisposable public IPCProvider(Autorotation autorotation) { + // TODO: this really needs to be reconsidered, this exposes implementation detail + // for usecase description, see PR 330 - really AI itself should handle heal range + Register("ActiveModuleComponentBaseList", () => autorotation.Bossmods.ActiveModule?.Components.Select(c => c.GetType().BaseType?.Name).ToList() ?? default); + Register("ActiveModuleComponentList", () => autorotation.Bossmods.ActiveModule?.Components.Select(c => c.GetType().Name).ToList() ?? default); + Register("ActiveModuleHasComponent", (string name) => autorotation.Bossmods.ActiveModule?.Components.Any(c => c.GetType().Name == name || c.GetType().BaseType?.Name == name) ?? false); + Register("HasModule", (GameObject obj) => ModuleRegistry.FindByOID(obj.DataId) != null); Register("IsMoving", () => ActionManagerEx.Instance!.InputOverride.IsMoving()); Register("ForbiddenZonesCount", () => autorotation.Hints.ForbiddenZones.Count); diff --git a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs index 5f9bd5b605..9569ca19ec 100644 --- a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs +++ b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs @@ -52,7 +52,7 @@ class SmolderingClaw : Components.SelfTargetedAOEs class TailStrike : Components.SelfTargetedAOEs { - public TailStrike() : base(ActionID.MakeSpell(AID.SmolderingClawReal), new AOEShapeCone(40, 75.Degrees())) { } + public TailStrike() : base(ActionID.MakeSpell(AID.TailStrikeReal), new AOEShapeCone(40, 75.Degrees())) { } } class FireRampageCleave : Components.GenericAOEs diff --git a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs index 0320631f2c..cc80296dea 100644 --- a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs +++ b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs @@ -54,7 +54,7 @@ public enum AID : uint TailStrikeStartActionCombo = 35047, // Boss->self, 3,5s cast, single-target TailStrikeStartActionCombo2 = 35049, // Helper->self, 0,6s cast, range 40 150-degree cone TailStrikeStartActionCombo3 = 35929, // Helper->self, 4,1s cast, range 40 150-degree cone - TailStrike = 35048, // Helper->self, 4,5s cast, range 40 150-degree cone + TailStrikeReal = 35048, // Helper->self, 4,5s cast, range 40 150-degree cone PyrosaultVisual = 35053, // Boss->location, 4,0s cast, single-target PyrosaultReal = 35054, // Helper->location, 5,0s cast, range 40 circle, damage fall off AOE, seems to be fine after about range 10 diff --git a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs index f699760eb6..67c6f5f4bb 100644 --- a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs +++ b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs @@ -10,6 +10,7 @@ public InfernalShadowStates(BossModule module) : base(module) .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter() + .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter() diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs index c5a47454ee..e53144cb3c 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs @@ -230,16 +230,11 @@ public EntrapmentNormal() : base(_allowedPatterns) { } class EntrapmentInescapable : Entrapment { - // TODO: don't think these patterns are actually correct... private readonly static Pattern[] _allowedPatterns = [ new() { Normal = BuildMask(3, 4, 5, 8, 20, 25, 38, 43, 46, 49, 52), Toad = BuildMask(10, 50, 54), Ice = BuildMask(40), Mini = BuildMask(29) }, - //new() { Normal = BuildMask(3, 8, 20, 25, 38, 43, 46, 49, 52), Toad = BuildMask(10, 50, 53), Ice = BuildMask(40), Mini = BuildMask(29) }, - new() { Normal = BuildMask(2, 5, 8, 11, 14, 16, 25, 29, 46, 49, 51), Toad = BuildMask(0, 4, 44), Ice = BuildMask(50), Mini = BuildMask(34) }, - //new() { Normal = BuildMask(2, 8, 11, 16, 25, 29, 38, 46), Toad = BuildMask(0, 4, 44), Ice = BuildMask(49), Mini = BuildMask(34) }, - new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask(6, 33, 38), Ice = BuildMask(4), Mini = BuildMask(48) }, - //new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask(6, 33, 38), Ice = BuildMask(4), Mini = BuildMask(48) }, - new() { Normal = BuildMask(5, 6, 8, 11, 25, 30, 32, 38, 43, 46, 50), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask(1) }, - //new() { Normal = BuildMask(5, 8, 11, 25, 30, 32, 38, 43, 50), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask(1) }, + new() { Normal = BuildMask(2, 5, 8, 11, 14, 16, 25, 29, 46, 49, 51), Toad = BuildMask( 0, 4, 44), Ice = BuildMask(50), Mini = BuildMask(34) }, + new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask( 6, 33, 38), Ice = BuildMask( 4), Mini = BuildMask(48) }, + new() { Normal = BuildMask(5, 8, 11, 25, 30, 32, 38, 43, 49, 50, 54), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask( 1) }, ]; public EntrapmentInescapable() : base(_allowedPatterns) { } diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs index e70e881c9c..856ad7b32b 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs @@ -49,7 +49,8 @@ private void Phase2(uint id) P2BloodAndBone(id + 0x30000, 4.2f); P2GunTurret(id + 0x40000, 10.2f); P2DoubleGambit(id + 0x50000, 10.3f); - // TODO: raidwides -> tankbusters -> 4th battery -> raidwides -> tankbusters -> enrage + P2BloodAndBone(id + 0x60000, 5.7f); + // TODO: tankbusters -> 4th battery -> raidwides -> tankbusters -> enrage SimpleState(id + 0xFF0000, 100, "???"); } diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs index 71f99ca944..349aaeb8e2 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs @@ -61,13 +61,12 @@ private void ForkSwordBowStaff(uint id) private void ForkStaffBowSword(uint id) { - // TODO: no idea about timings here - Staff1(id, 8); - Bow1(id + 0x100000, 8); - Sword1(id + 0x200000, 8); - Staff2(id + 0x300000, 8); - Bow2(id + 0x400000, 8); - Sword2(id + 0x500000, 8); + Staff1(id, 5.3f); + Bow1(id + 0x100000, 8.7f); + Sword1(id + 0x200000, 10.4f); + Staff2(id + 0x300000, 7.4f); + Bow2(id + 0x400000, 9.1f); + Sword2(id + 0x500000, 7.9f); Enrage(id + 0x600000, 16); // TODO: timing } diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs index 8188ccaef4..5922df624a 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs @@ -51,7 +51,7 @@ public override void OnEventCast(BossModule module, Actor caster, ActorCastEvent switch ((AID)spell.Action.ID) { case AID.LotsCastBigShort: - //case AID.LotsCastSmallShort: + case AID.LotsCastSmallShort: AdvanceState(State.ShortExplosionsDone); break; case AID.LotsCastLong: diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs index 602d71b428..3c334d3602 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs @@ -96,6 +96,8 @@ public enum AID : uint AboveBoard = 23051, // QueensWarrior->self, 6.0s cast, range 60 circle, visual (throw up) AboveBoardExtra = 23438, // Helper->self, 6.0s cast, range 60 circle, visual (???) LotsCastBigShort = 23433, // AetherialBurst->location, no cast, range 10 circle + LotsCastSmallShort = 23053, // AetherialBolt->location, no cast, range 10 circle + LotsCastBigLong = 23052, // AetherialBurst->location, no cast, range 10 circle visual LotsCastSmallLong = 23432, // AetherialBolt->location, no cast, range 10 circle visual LotsCastLong = 23478, // Helper->location, 1.2s cast, range 10 circle diff --git a/BossMod/Replay/ReplayUtils.cs b/BossMod/Replay/ReplayUtils.cs index 803c32f281..1ed14ed14c 100644 --- a/BossMod/Replay/ReplayUtils.cs +++ b/BossMod/Replay/ReplayUtils.cs @@ -4,7 +4,10 @@ public static class ReplayUtils { public static string ParticipantString(Replay.Participant? p, DateTime t) { - return p != null ? $"{p.Type} {p.InstanceID:X} ({p.OID:X}) '{p.NameAt(t)}'" : ""; + if (p == null) + return ""; + var name = p.NameAt(t); + return $"{p.Type} {p.InstanceID:X} ({p.OID:X}/{name.id}) '{name.name}'"; } public static string ParticipantPosRotString(Replay.Participant? p, DateTime t)