diff --git a/XIVSlothCombo/Combos/CustomComboPreset.cs b/XIVSlothCombo/Combos/CustomComboPreset.cs index 470babb2b..947ff796e 100644 --- a/XIVSlothCombo/Combos/CustomComboPreset.cs +++ b/XIVSlothCombo/Combos/CustomComboPreset.cs @@ -2179,6 +2179,32 @@ public enum CustomComboPreset #endregion + #region PICTOMANCER + [ReplaceSkill(PCT.FireInRed)] + [ConflictingCombos(CombinedAetherhues)] + [CustomComboInfo("Simple Mode - Single Target", $"Replaces Fire in Red with a one-button full single target rotation.\nThis is ideal for newcomers to the job.", PCT.JobID)] + PCT_ST_SimpleMode = 20000, + + [ReplaceSkill(PCT.FireIIinRed)] + [ConflictingCombos(CombinedAetherhues)] + [CustomComboInfo("Simple Mode - AoE", $"Replaces Fire II in Red with a one-button full single target rotation.\nThis is ideal for newcomers to the job.", PCT.JobID)] + PCT_AoE_SimpleMode = 20001, + + [ReplaceSkill(PCT.FireInRed, PCT.FireIIinRed)] + [ConflictingCombos(PCT_ST_SimpleMode, PCT_AoE_SimpleMode)] + [CustomComboInfo("Combined Aetherhues Feature", "Combines aetherhue actions onto one button for their respective target types.", PCT.JobID)] + CombinedAetherhues = 20002, + + [ReplaceSkill(PCT.CreatureMotif, PCT.WeaponMotif, PCT.LandscapeMotif)] + [CustomComboInfo("One Button Motifs", "Combine Motifs and Muses into one button.", PCT.JobID)] + CombinedMotifs = 20003, + + [ReplaceSkill(PCT.HolyInWhite)] + [CustomComboInfo("One Button Paint", "Combines paint consuming actions into one button.", PCT.JobID)] + CombinedPaint = 20004, + + #endregion + #region PALADIN //// Last value = 11032 diff --git a/XIVSlothCombo/Combos/PvE/PCT.cs b/XIVSlothCombo/Combos/PvE/PCT.cs index 6de26f6d1..c1cd539fd 100644 --- a/XIVSlothCombo/Combos/PvE/PCT.cs +++ b/XIVSlothCombo/Combos/PvE/PCT.cs @@ -1,43 +1,56 @@ -namespace XIVSlothCombo.Combos.PvE +using Dalamud.Game.ClientState.JobGauge.Types; +using XIVSlothCombo.CustomComboNS; +using XIVSlothCombo.CustomComboNS.Functions; +using XIVSlothCombo.Extensions; + +namespace XIVSlothCombo.Combos.PvE { internal class PCT { public const byte JobID = 42; public const uint - AdventofChocobastion = 39215, - AeroinGreen = 39192, - BlizzardinCyan = 39194, + BlizzardinCyan = 34653, + BlizzardIIinCyan = 34659, ClawMotif = 34666, - CometinBlack = 39199, + ClawedMuse = 34672, + CometinBlack = 34663, CreatureMotif = 34689, + FireInRed = 34650, + FireIIinRed = 34656, + HammerStamp = 34678, + HolyInWhite = 34662, + LandscapeMotif = 34691, LivingMuse = 35347, MawMotif = 34667, - MogoftheAges = 39782, - PomMotif1 = 34664, - PomMotif2 = 39200, - PomMuse1 = 34670, - PomMuse2 = 39205, + MogoftheAges = 34676, + PomMotif = 34664, + PomMuse = 34670, RainbowDrip = 34688, - ReleaseSubtractivePalette = 39214, - RetributionoftheMadeen1 = 34677, - RetributionoftheMadeen2 = 39783, + RetributionoftheMadeen = 34677, ScenicMuse = 35349, - Smudge1 = 34684, - Smudge2 = 39210, + Smudge = 34684, StarPrism = 34681, SteelMuse = 35348, - SubtractivePalette = 39213, + SubtractivePalette = 34683, ThunderIIinMagenta = 34661, - ThunderinMagenta1 = 34655, - ThunderinMagenta2 = 39196, + ThunderinMagenta = 34655, WaterinBlue = 34652, WeaponMotif = 34690, WingMotif = 34665; public static class Buffs { - + public const ushort + SubtractivePalette = 3674, + RainbowBright = 3679, + HammerTime = 3680, + MonochromeTones = 3691, + StarryMuse = 3685, + Hyperphantasia = 3688, + Inspiration = 3689, + SubtractiveSpectrum = 3690, + Starstruck = 3681; } public static class Debuffs @@ -47,7 +60,278 @@ public static class Debuffs public static class Config { + public static UserInt + CombinedAetherhueChoices = new("CombinedAetherhueChoices"); + + public static UserBool + CombinedMotifsMog = new("CombinedMotifsMog"), + CombinedMotifsMadeen = new("CombinedMotifsMadeen"), + CombinedMotifsWeapon = new("CombinedMotifsWeapon"); + } + + + internal class PCT_ST_SimpleMode : CustomCombo + { + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.PCT_ST_SimpleMode; + + protected override uint Invoke(uint actionID, uint lastComboActionID, float comboTime, byte level) + { + if (actionID is FireInRed) + { + var gauge = GetJobGauge(); + bool canWeave = HasEffect(Buffs.SubtractivePalette) ? CanSpellWeave(OriginalHook(BlizzardinCyan)) : CanSpellWeave(OriginalHook(FireInRed)); + + if (HasEffect(Buffs.Starstruck)) + return OriginalHook(StarPrism); + + if (HasEffect(Buffs.RainbowBright)) + return OriginalHook(RainbowDrip); + + if (IsMoving) + { + if (gauge.Paint > 0) + { + if (HasEffect(Buffs.MonochromeTones)) + return OriginalHook(CometinBlack); + + return OriginalHook(HolyInWhite); + } + } + + + if (HasEffect(Buffs.StarryMuse)) + { + if (HasEffect(Buffs.SubtractiveSpectrum) && !HasEffect(Buffs.SubtractivePalette) && canWeave) + return OriginalHook(SubtractivePalette); + + if (MogoftheAges.LevelChecked() && (gauge.MooglePortraitReady || gauge.MadeenPortraitReady) && IsOffCooldown(OriginalHook(MogoftheAges))) + return OriginalHook(MogoftheAges); + + if (!HasEffect(Buffs.HammerTime) && gauge.WeaponMotifDrawn && HasCharges(OriginalHook(SteelMuse)) && GetBuffRemainingTime(Buffs.StarryMuse) >= 15f) + return OriginalHook(SteelMuse); + + if (gauge.CreatureMotifDrawn && HasCharges(OriginalHook(LivingMuse)) && canWeave) + return OriginalHook(LivingMuse); + + if (HasEffect(Buffs.HammerTime)) + return OriginalHook(HammerStamp); + + if (HasEffect(Buffs.SubtractivePalette)) + return OriginalHook(BlizzardinCyan); + + return actionID; + } + + if (gauge.PalleteGauge >= 50 && !HasEffect(Buffs.SubtractivePalette) && canWeave) + return OriginalHook(SubtractivePalette); + + if (HasEffect(Buffs.HammerTime) && !canWeave) + return OriginalHook(HammerStamp); + + if (InCombat()) + { + if (gauge.LandscapeMotifDrawn && gauge.WeaponMotifDrawn && (gauge.MooglePortraitReady || gauge.MadeenPortraitReady) && IsOffCooldown(MogoftheAges) && IsOffCooldown(ScenicMuse) && canWeave) + return OriginalHook(ScenicMuse); + + if (MogoftheAges.LevelChecked() && (gauge.MooglePortraitReady || gauge.MadeenPortraitReady) && IsOffCooldown(OriginalHook(MogoftheAges)) && (GetCooldown(LivingMuse).CooldownRemaining < GetCooldown(ScenicMuse).CooldownRemaining || !ScenicMuse.LevelChecked()) && canWeave) + return OriginalHook(MogoftheAges); + + if (!HasEffect(Buffs.HammerTime) && gauge.WeaponMotifDrawn && HasCharges(OriginalHook(SteelMuse)) && (GetCooldown(SteelMuse).CooldownRemaining < GetCooldown(ScenicMuse).CooldownRemaining || GetRemainingCharges(SteelMuse) == GetMaxCharges(SteelMuse) || !ScenicMuse.LevelChecked()) && canWeave) + return OriginalHook(SteelMuse); + + if (gauge.CreatureMotifDrawn && (!(gauge.MooglePortraitReady || gauge.MadeenPortraitReady) || GetCooldown(LivingMuse).CooldownRemaining > GetCooldown(ScenicMuse).CooldownRemaining || GetRemainingCharges(LivingMuse) == GetMaxCharges(LivingMuse) || !ScenicMuse.LevelChecked()) && HasCharges(OriginalHook(LivingMuse)) && canWeave) + return OriginalHook(LivingMuse); + + if (LandscapeMotif.LevelChecked() && !gauge.LandscapeMotifDrawn && GetCooldownRemainingTime(ScenicMuse) <= GetActionCastTime(OriginalHook(LandscapeMotif))) + return OriginalHook(LandscapeMotif); + + if (CreatureMotif.LevelChecked() && !gauge.CreatureMotifDrawn && (HasCharges(LivingMuse) || GetCooldownChargeRemainingTime(LivingMuse) <= GetActionCastTime(OriginalHook(CreatureMotif)))) + return OriginalHook(CreatureMotif); + + if (WeaponMotif.LevelChecked() && !HasEffect(Buffs.HammerTime) && !gauge.WeaponMotifDrawn && (HasCharges(SteelMuse) || GetCooldownChargeRemainingTime(SteelMuse) <= GetActionCastTime(OriginalHook(WeaponMotif)))) + return OriginalHook(WeaponMotif); + + } + if (gauge.Paint > 0 && HasEffect(Buffs.MonochromeTones)) + return OriginalHook(CometinBlack); + + if (HasEffect(Buffs.SubtractivePalette)) + return OriginalHook(BlizzardinCyan); + + } + return actionID; + } + } + + internal class PCT_AoE_SimpleMode : CustomCombo + { + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.PCT_AoE_SimpleMode; + + protected override uint Invoke(uint actionID, uint lastComboActionID, float comboTime, byte level) + { + if (actionID is FireIIinRed) + { + var gauge = GetJobGauge(); + bool canWeave = HasEffect(Buffs.SubtractivePalette) ? CanSpellWeave(OriginalHook(BlizzardinCyan)) : CanSpellWeave(OriginalHook(FireInRed)); + + if (HasEffect(Buffs.Starstruck)) + return OriginalHook(StarPrism); + + if (HasEffect(Buffs.RainbowBright)) + return OriginalHook(RainbowDrip); + + if (IsMoving) + { + if (gauge.Paint > 0) + { + if (HasEffect(Buffs.MonochromeTones)) + return OriginalHook(CometinBlack); + + return OriginalHook(HolyInWhite); + } + } + + if (HasEffect(Buffs.StarryMuse)) + { + if (HasEffect(Buffs.SubtractiveSpectrum) && !HasEffect(Buffs.SubtractivePalette) && canWeave) + return OriginalHook(SubtractivePalette); + + if (MogoftheAges.LevelChecked() && (gauge.MooglePortraitReady || gauge.MadeenPortraitReady) && IsOffCooldown(OriginalHook(MogoftheAges))) + return OriginalHook(MogoftheAges); + + if (!HasEffect(Buffs.HammerTime) && gauge.WeaponMotifDrawn && HasCharges(OriginalHook(SteelMuse)) && GetBuffRemainingTime(Buffs.StarryMuse) >= 15f) + return OriginalHook(SteelMuse); + + if (gauge.CreatureMotifDrawn && HasCharges(OriginalHook(LivingMuse)) && canWeave) + return OriginalHook(LivingMuse); + + if (HasEffect(Buffs.HammerTime)) + return OriginalHook(HammerStamp); + + if (HasEffect(Buffs.SubtractivePalette)) + return OriginalHook(BlizzardIIinCyan); + + return actionID; + } + + if (gauge.PalleteGauge >= 50 && !HasEffect(Buffs.SubtractivePalette) && canWeave) + return OriginalHook(SubtractivePalette); + + if (HasEffect(Buffs.HammerTime) && !canWeave) + return OriginalHook(HammerStamp); + + if (InCombat()) + { + if (gauge.LandscapeMotifDrawn && gauge.WeaponMotifDrawn && (gauge.MooglePortraitReady || gauge.MadeenPortraitReady) && IsOffCooldown(MogoftheAges) && IsOffCooldown(ScenicMuse) && canWeave) + return OriginalHook(ScenicMuse); + + if (MogoftheAges.LevelChecked() && (gauge.MooglePortraitReady || gauge.MadeenPortraitReady) && IsOffCooldown(OriginalHook(MogoftheAges)) && (GetCooldown(MogoftheAges).CooldownRemaining < GetCooldown(ScenicMuse).CooldownRemaining || !ScenicMuse.LevelChecked()) && canWeave) + return OriginalHook(MogoftheAges); + + if (!HasEffect(Buffs.HammerTime) && gauge.WeaponMotifDrawn && HasCharges(OriginalHook(SteelMuse)) && (GetCooldown(SteelMuse).CooldownRemaining < GetCooldown(ScenicMuse).CooldownRemaining || GetRemainingCharges(SteelMuse) == GetMaxCharges(SteelMuse) || !ScenicMuse.LevelChecked()) && canWeave) + return OriginalHook(SteelMuse); + + if (gauge.CreatureMotifDrawn && (!(gauge.MooglePortraitReady || gauge.MadeenPortraitReady) || GetCooldown(LivingMuse).CooldownRemaining > GetCooldown(ScenicMuse).CooldownRemaining || GetRemainingCharges(LivingMuse) == GetMaxCharges(LivingMuse) || !ScenicMuse.LevelChecked()) && HasCharges(OriginalHook(LivingMuse)) && canWeave) + return OriginalHook(LivingMuse); + + if (LandscapeMotif.LevelChecked() && !gauge.LandscapeMotifDrawn && GetCooldownRemainingTime(ScenicMuse) <= GetActionCastTime(OriginalHook(LandscapeMotif))) + return OriginalHook(LandscapeMotif); + + if (CreatureMotif.LevelChecked() && !gauge.CreatureMotifDrawn && (HasCharges(LivingMuse) || GetCooldownChargeRemainingTime(LivingMuse) <= GetActionCastTime(OriginalHook(CreatureMotif)))) + return OriginalHook(CreatureMotif); + + if (WeaponMotif.LevelChecked() && !HasEffect(Buffs.HammerTime) && !gauge.WeaponMotifDrawn && (HasCharges(SteelMuse) || GetCooldownChargeRemainingTime(SteelMuse) <= GetActionCastTime(OriginalHook(WeaponMotif)))) + return OriginalHook(WeaponMotif); + } + + if (gauge.Paint > 0 && HasEffect(Buffs.MonochromeTones)) + return OriginalHook(CometinBlack); + + if (gauge.Paint > 0) + return OriginalHook(HolyInWhite); + + if (HasEffect(Buffs.SubtractivePalette)) + return OriginalHook(BlizzardIIinCyan); + + } + return actionID; + } + } + + internal class CombinedAetherhues : CustomCombo + { + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.CombinedAetherhues; + + protected override uint Invoke(uint actionID, uint lastComboActionID, float comboTime, byte level) + { + int choice = Config.CombinedAetherhueChoices; + + if (actionID == FireInRed && choice is 0 or 1) + { + if (HasEffect(Buffs.SubtractivePalette)) + return OriginalHook(BlizzardinCyan); + } + + if (actionID == FireIIinRed && choice is 0 or 2) + { + if (HasEffect(Buffs.SubtractivePalette)) + return OriginalHook(BlizzardIIinCyan); + } + + return actionID; + } + } + + internal class CombinedMotifs : CustomCombo + { + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.CombinedMotifs; + + protected override uint Invoke(uint actionID, uint lastComboActionID, float comboTime, byte level) + { + var gauge = GetJobGauge(); + + if (actionID == CreatureMotif) + { + if ((Config.CombinedMotifsMog && gauge.MooglePortraitReady) || (Config.CombinedMotifsMadeen && gauge.MadeenPortraitReady) && IsOffCooldown(OriginalHook(MogoftheAges))) + return OriginalHook(MogoftheAges); + + if (gauge.CreatureMotifDrawn) + return OriginalHook(LivingMuse); + } + + if (actionID == WeaponMotif) + { + if (Config.CombinedMotifsWeapon && HasEffect(Buffs.HammerTime)) + return OriginalHook(HammerStamp); + + if (gauge.WeaponMotifDrawn) + return OriginalHook(SteelMuse); + } + + if (actionID == LandscapeMotif) + { + if (gauge.LandscapeMotifDrawn) + return OriginalHook(ScenicMuse); + } + + return actionID; + } + } + + internal class CombinedPaint : CustomCombo + { + protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.CombinedPaint; + + protected override uint Invoke(uint actionID, uint lastComboActionID, float comboTime, byte level) + { + if (actionID == HolyInWhite) + { + if (HasEffect(Buffs.MonochromeTones)) + return CometinBlack; + } + return actionID; + } } } } diff --git a/XIVSlothCombo/Data/TempSCHGauge.cs b/XIVSlothCombo/Data/TempSCHGauge.cs index 5a48fbab1..82fc5192c 100644 --- a/XIVSlothCombo/Data/TempSCHGauge.cs +++ b/XIVSlothCombo/Data/TempSCHGauge.cs @@ -1,7 +1,11 @@ using Dalamud.Game.ClientState.JobGauge.Enums; using Dalamud.Game.ClientState.JobGauge.Types; +using ECommons.DalamudServices; +using System; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using XIVSlothCombo.Services; +using XIVSlothCombo.Window.Tabs; namespace XIVSlothCombo.Data; @@ -23,6 +27,40 @@ public TmpSCHGauge() } } +public unsafe class TmpPCTGauge +{ + public byte PalleteGauge => Struct->PalleteGauge; + + public byte Paint => Struct->Paint; + + public bool CreatureMotifDrawn => Struct->CreatureMotifDrawn; + + public bool WeaponMotifDrawn => Struct->WeaponMotifDrawn; + + public bool LandscapeMotifDrawn => Struct->LandscapeMotifDrawn; + + public bool MooglePortraitReady => Struct->MooglePortraitReady; + + public bool MadeenPortraitReady => Struct->MadeenPortraitReady; + + public CreatureFlags Flags => Struct->CreatureFlags; + + private protected PictoGauge* Struct; + + public byte GetOffset(int offset) + { + var val = IntPtr.Add(Address, offset); + return Marshal.ReadByte(val); + } + + private nint Address; + public TmpPCTGauge() + { + Address = Svc.SigScanner.GetStaticAddressFromSig("48 8B 3D ?? ?? ?? ?? 33 ED") + 0x8; + Struct = (PictoGauge*)Address; + } +} + [StructLayout(LayoutKind.Explicit, Size = 0x10)] public struct TmpScholarGauge { @@ -32,3 +70,40 @@ public struct TmpScholarGauge [FieldOffset(0x0C)] public byte DismissedFairy; } +[StructLayout(LayoutKind.Explicit, Size = 0x10)] +public struct PictoGauge +{ + [FieldOffset(0x08)] public byte PalleteGauge; + [FieldOffset(0x0A)] public byte Paint; + [FieldOffset(0x0B)] public CanvasFlags CanvasFlags; + [FieldOffset(0x0C)] public CreatureFlags CreatureFlags; + + public bool CreatureMotifDrawn => CanvasFlags.HasFlag(CanvasFlags.Pom) || CanvasFlags.HasFlag(CanvasFlags.Wing) || CanvasFlags.HasFlag(CanvasFlags.Claw) || CanvasFlags.HasFlag(CanvasFlags.Maw); + public bool WeaponMotifDrawn => CanvasFlags.HasFlag(CanvasFlags.Weapon); + public bool LandscapeMotifDrawn => CanvasFlags.HasFlag(CanvasFlags.Landscape); + public bool MooglePortraitReady => CreatureFlags.HasFlag(CreatureFlags.MooglePortrait); + public bool MadeenPortraitReady => CreatureFlags.HasFlag(CreatureFlags.MadeenPortrait); + +} + +[Flags] +public enum CanvasFlags : byte +{ + Pom = 1, + Wing = 2, + Claw = 4, + Maw = 8, + Weapon = 16, + Landscape = 32, +} + +[Flags] +public enum CreatureFlags : byte +{ + Pom = 1, + Wings = 2, + Claw = 4, + + MooglePortrait = 16, + MadeenPortrait = 32, +} diff --git a/XIVSlothCombo/Extensions/UIntExtensions.cs b/XIVSlothCombo/Extensions/UIntExtensions.cs index 3a0b858a6..bbef91205 100644 --- a/XIVSlothCombo/Extensions/UIntExtensions.cs +++ b/XIVSlothCombo/Extensions/UIntExtensions.cs @@ -11,4 +11,9 @@ internal static class UIntExtensions internal static string ActionName(this uint value) => ActionWatching.GetActionName(value); } + + internal static class UShortExtensions + { + internal static string StatusName(this ushort value) => ActionWatching.GetStatusName(value); + } } diff --git a/XIVSlothCombo/Window/Functions/UserConfig.cs b/XIVSlothCombo/Window/Functions/UserConfig.cs index 7fa3d7785..739782e08 100644 --- a/XIVSlothCombo/Window/Functions/UserConfig.cs +++ b/XIVSlothCombo/Window/Functions/UserConfig.cs @@ -1740,6 +1740,23 @@ internal static void Draw(CustomComboPreset preset, bool enabled) if (preset == CustomComboPreset.NIN_Variant_Cure) UserConfig.DrawSliderInt(1, 100, NIN.Config.NIN_VariantCure, "HP% to be at or under", 200); + #endregion + // ==================================================================================== + #region PICTOMANCER + if (preset == CustomComboPreset.CombinedAetherhues) + { + UserConfig.DrawRadioButton(PCT.Config.CombinedAetherhueChoices, "Both Single Target & AoE", $"Replaces both {PCT.FireInRed.ActionName()} & {PCT.FireIIinRed.ActionName()}", 0); + UserConfig.DrawRadioButton(PCT.Config.CombinedAetherhueChoices, "Single Target Only", $"Replace only {PCT.FireInRed.ActionName()}", 1); + UserConfig.DrawRadioButton(PCT.Config.CombinedAetherhueChoices, "AoE Only", $"Replace only {PCT.FireIIinRed.ActionName()}", 2); + } + + if (preset == CustomComboPreset.CombinedMotifs) + { + UserConfig.DrawAdditionalBoolChoice(PCT.Config.CombinedMotifsMog, $"{PCT.MogoftheAges.ActionName()} Feature", $"Add {PCT.MogoftheAges.ActionName()} when fully drawn and off cooldown."); + UserConfig.DrawAdditionalBoolChoice(PCT.Config.CombinedMotifsMadeen, $"{PCT.RetributionoftheMadeen.ActionName()} Feature", $"Add {PCT.RetributionoftheMadeen.ActionName()} when fully drawn and off cooldown."); + UserConfig.DrawAdditionalBoolChoice(PCT.Config.CombinedMotifsWeapon, $"{PCT.HammerStamp.ActionName()} Feature", $"Add {PCT.HammerStamp.ActionName()} when under the effect of {PCT.Buffs.HammerTime.StatusName()}."); + } + #endregion // ==================================================================================== #region PALADIN diff --git a/XIVSlothCombo/Window/Tabs/Debug.cs b/XIVSlothCombo/Window/Tabs/Debug.cs index d6daf94d1..fbf6e06b0 100644 --- a/XIVSlothCombo/Window/Tabs/Debug.cs +++ b/XIVSlothCombo/Window/Tabs/Debug.cs @@ -1,5 +1,6 @@ using Dalamud.Game.ClientState.Objects.SubKinds; using Dalamud.Game.ClientState.Objects.Types; +using ECommons.DalamudServices; using ImGuiNET; using System; using System.Linq; @@ -26,6 +27,7 @@ internal class DebugCombo : CustomCombo protected override uint Invoke(uint actionID, uint lastComboActionID, float comboTime, byte level) => actionID; } + public static int debugNum = 0; internal unsafe static new void Draw() { IPlayerCharacter? LocalPlayer = Service.ClientState.LocalPlayer; @@ -64,7 +66,17 @@ internal class DebugCombo : CustomCombo ImGui.TextUnformatted($"SELECTED BLU SPELLS:\n{string.Join("\n", Service.Configuration.ActiveBLUSpells.Select(x => ActionWatching.GetActionName(x)).OrderBy(x => x))}"); ImGui.EndChild(); + var pctGauge = new TmpPCTGauge(); + ImGui.InputInt("DebugNum", ref debugNum); + ImGui.Text($"{pctGauge.GetOffset(debugNum)}"); + ImGui.Text($"Pallete: {pctGauge.PalleteGauge}"); + ImGui.Text($"Paint: {pctGauge.Paint}"); + ImGui.Text($"Creature: {pctGauge.CreatureMotifDrawn}"); + ImGui.Text($"Weapon: {pctGauge.WeaponMotifDrawn}"); + ImGui.Text($"Landscape: {pctGauge.LandscapeMotifDrawn}"); + ImGui.Text($"Moogle Potrait: {pctGauge.MooglePortraitReady}"); + ImGui.Text($"{CustomComboFunctions.GetCooldown(CustomComboFunctions.OriginalHook(PCT.FireInRed)).CooldownRemaining}"); } else