diff --git a/BossMod/ActionQueue/ActionDefinition.cs b/BossMod/ActionQueue/ActionDefinition.cs index a730dfae45..366507fc3c 100644 --- a/BossMod/ActionQueue/ActionDefinition.cs +++ b/BossMod/ActionQueue/ActionDefinition.cs @@ -173,6 +173,14 @@ public sealed class ActionDefinitions : IDisposable public static readonly ActionID IDPotionInt = new(ActionType.Item, 1044165); // hq grade 2 gemdraught of intelligence public static readonly ActionID IDPotionMnd = new(ActionType.Item, 1044166); // hq grade 2 gemdraught of mind + // deep dungeon consumables + public static readonly ActionID IDSustainingPotion = new(ActionType.Item, 20309); + public static readonly ActionID IDMaxPotion = new(ActionType.Item, 1013637); + public static readonly ActionID IDEmpyreanPotion = new(ActionType.Item, 23163); + public static readonly ActionID IDSuperPotion = new(ActionType.Item, 1023167); + public static readonly ActionID IDOrthosPotion = new(ActionType.Item, 38944); + public static readonly ActionID IDHyperPotion = new(ActionType.Item, 1038956); + // special general actions that we support public static readonly ActionID IDGeneralLimitBreak = new(ActionType.General, 3); public static readonly ActionID IDGeneralSprint = new(ActionType.General, 4); @@ -219,6 +227,13 @@ private ActionDefinitions() RegisterPotion(IDPotionInt); RegisterPotion(IDPotionMnd); + RegisterPotion(IDSustainingPotion, 1.1f); + RegisterPotion(IDMaxPotion, 1.1f); + RegisterPotion(IDEmpyreanPotion, 1.1f); + RegisterPotion(IDSuperPotion, 1.1f); + RegisterPotion(IDOrthosPotion, 1.1f); + RegisterPotion(IDHyperPotion, 1.1f); + // special content actions - bozja, deep dungeons, etc for (var i = BozjaHolsterID.None + 1; i < BozjaHolsterID.Count; ++i) RegisterBozja(i); @@ -380,7 +395,7 @@ public void RegisterSpell(AID aid, bool isPhysRanged = false, float instant private void Register(ActionID aid, ActionDefinition definition) => _definitions.Add(aid, definition); - private void RegisterPotion(ActionID aid) + private void RegisterPotion(ActionID aid, float animLock = 0.6f) { var baseId = aid.ID % 500000; var item = ItemData(baseId); @@ -399,6 +414,7 @@ private void RegisterPotion(ActionID aid) CastTime = castTime, MainCooldownGroup = cdgroup, Cooldown = cooldown, + InstantAnimLock = animLock, }; var aidHQ = new ActionID(ActionType.Item, baseId + 1000000); _definitions[aidHQ] = new(aidHQ) @@ -408,6 +424,7 @@ private void RegisterPotion(ActionID aid) CastTime = castTime, MainCooldownGroup = cdgroup, Cooldown = cooldown * 0.9f, + InstantAnimLock = animLock }; } diff --git a/BossMod/ActionQueue/Roleplay.cs b/BossMod/ActionQueue/Roleplay.cs index ead5416138..2daf544c72 100644 --- a/BossMod/ActionQueue/Roleplay.cs +++ b/BossMod/ActionQueue/Roleplay.cs @@ -2,6 +2,13 @@ public enum AID : uint { + // palace of the dead/EO transformations + Pummel = 6273, + VoidFireII = 6274, + HeavenlyJudge = 6871, + Rotosmash = 32781, + WreckingBall = 32782, + // magitek reaper in Fly Free, My Pretty MagitekCannon = 7619, // range 30 radius 6 ground targeted aoe PhotonStream = 7620, // range 10 width 4 rect aoe @@ -262,6 +269,12 @@ public sealed class Definitions : IDisposable { public Definitions(ActionDefinitions d) { + d.RegisterSpell(AID.Pummel); + d.RegisterSpell(AID.VoidFireII); + d.RegisterSpell(AID.HeavenlyJudge); + d.RegisterSpell(AID.Rotosmash); + d.RegisterSpell(AID.WreckingBall); + d.RegisterSpell(AID.MagitekCannon); d.RegisterSpell(AID.PhotonStream); d.RegisterSpell(AID.DiffractiveMagitekCannon); diff --git a/BossMod/Autorotation/Standard/xan/AI/DeepDungeon.cs b/BossMod/Autorotation/Standard/xan/AI/DeepDungeon.cs index 379c9cb974..eb3c7a231a 100644 --- a/BossMod/Autorotation/Standard/xan/AI/DeepDungeon.cs +++ b/BossMod/Autorotation/Standard/xan/AI/DeepDungeon.cs @@ -184,8 +184,7 @@ private void DoTransformActions(StrategyValues strategy, Actor? primaryTarget, T return; Hints.GoalZones.Add(goal); - if (castTime == 0 || Hints.MaxCastTimeEstimate >= (castTime - 0.5f)) - Hints.ActionsToExecute.Push(attack, primaryTarget, ActionQueue.Priority.High, targetPos: primaryTarget.PosRot.XYZ()); + Hints.ActionsToExecute.Push(attack, primaryTarget, ActionQueue.Priority.High, targetPos: primaryTarget.PosRot.XYZ(), castTime: castTime - 0.5f); } private bool ShouldPotion(StrategyValues strategy)