From 4fab4f185c2a381b21157e056b415db674c413e5 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 10 Nov 2023 09:31:18 -0500 Subject: [PATCH 01/25] begin refactoring for sprite renderer --- square.lua => element.lua | 61 +++++++++++++++++++--------- updaters/ability.lua | 83 +++++++-------------------------------- updaters/command.lua | 56 +++++--------------------- updaters/empty.lua | 26 ++++-------- 4 files changed, 73 insertions(+), 153 deletions(-) rename square.lua => element.lua (53%) diff --git a/square.lua b/element.lua similarity index 53% rename from square.lua rename to element.lua index e78345a..5ee317f 100644 --- a/square.lua +++ b/element.lua @@ -10,28 +10,47 @@ local updaters = { local function DoMacro(macro) for _,line in ipairs(macro) do + local command, waitTime; if (string.sub(line, 1, 6) == '/wait ') then - local waitTime = tonumber(string.sub(line, 7)); - if type(waitTime) == 'number' then - if (waitTime < 0.1) then - coroutine.sleepf(1); - else - coroutine.sleep(waitTime); + waitTime = tonumber(string.sub(line, 7)); + else + command = line; + local waitStart, waitEnd = string.find(line, ' '); + if (waitStart ~= nil) and (waitEnd == string.len(line)) then + waitTime = tonumber(string.match(line, ' ')); + if (type(waitTime) == 'number') then + command = string.sub(line, 1, waitStart - 1); end end - else - AshitaCore:GetChatManager():QueueCommand(-1, line); + end + + if command then + AshitaCore:GetChatManager():QueueCommand(-1, command); + end + + if type(waitTime) == 'number' then + if (waitTime < 0.1) then + coroutine.sleepf(1); + else + coroutine.sleep(waitTime); + end end end end -local Square = {}; +local Element = {}; -function Square:New(structPointer, hotkey) +function Element:New(hotkey) local o = {}; setmetatable(o, self); self.__index = self; - o.StructPointer = structPointer; + o.State = { + Available = false, + Ready = false, + Cost = nil, + Recast = nil, + Skillchain = nil, + }; local updater = updaters.Empty; o.Activation = 0; o.Hotkey = hotkey; @@ -40,26 +59,32 @@ function Square:New(structPointer, hotkey) return o; end -function Square:Activate() +function Element:Activate() self.Activation = os.clock() + 0.25; if (self.Binding ~= nil) then - DoMacro:bind1(self.Binding.Macro):oncef(0); + local macroContainer = T{}; + for _,entry in ipairs(self.Binding.Macro) do + macroContainer:append(entry); + end + DoMacro:bind1(macroContainer):oncef(0); end end -function Square:Bind() +function Element:Bind() gBindingGUI:Show(self.Hotkey, self.Binding); end -function Square:Destroy() +function Element:Destroy() self.Updater:Destroy(); end -function Square:Update() +function Element:Render() self.Updater:Tick(); + --Ugh.. + end -function Square:UpdateBinding(binding) +function Element:UpdateBinding(binding) if (binding == self.Binding) then return; end @@ -81,4 +106,4 @@ function Square:UpdateBinding(binding) self.Updater:Initialize(self, self.Binding); end -return Square; \ No newline at end of file +return Element; \ No newline at end of file diff --git a/updaters/ability.lua b/updaters/ability.lua index e4cc15f..348e7cf 100644 --- a/updaters/ability.lua +++ b/updaters/ability.lua @@ -220,16 +220,9 @@ function Updater:New() return o; end -function Updater:Initialize(square, binding) - self.Binding = binding; - self.Square = square; - self.StructPointer = square.StructPointer; - self.Resource = AshitaCore:GetResourceManager():GetAbilityById(self.Binding.Id); - - local layout = gInterface:GetSquareManager().Layout; - self.IconImage = GetImagePath(self.Binding.Image); - self.CrossImage = layout.CrossPath; - self.TriggerImage = layout.TriggerPath; +function Updater:Initialize(element, binding) + self.Resource = AshitaCore:GetResourceManager():GetAbilityById(binding.Id); + self.State = element.State; --Set cost and recast function for charge-based abilities. if (self.Resource.RecastTimerId == 102) then @@ -270,18 +263,18 @@ function Updater:Initialize(square, binding) [825] = 2, [826] = 3 }; - local flourish = flourishes[self.Binding.Id]; + local flourish = flourishes[binding.Id]; --Custom (for use with jugs and such) - if (self.Binding.CostOverride) then - self.CostFunction = ItemCost:bind2(self.Binding.CostOverride); + if (binding.CostOverride) then + self.CostFunction = ItemCost:bind2(binding.CostOverride); --Angon - elseif (self.Binding.Id == 682) then + elseif (binding.Id == 682) then self.CostFunction = ItemCost:bind2(T{18259}); --Tomahawk - elseif (self.Binding.Id == 662) then + elseif (binding.Id == 662) then self.CostFunction = ItemCost:bind2(T{18258}); --Finishing Moves @@ -289,7 +282,7 @@ function Updater:Initialize(square, binding) self.CostFunction = FinishingMoveCost:bind2(flourish); --Rune Enchantment - elseif T{ 856, 878, 880, 881, 883, 884, 885, 887, 888 }:contains(self.Binding.Id) then + elseif T{ 856, 878, 880, 881, 883, 884, 885, 887, 888 }:contains(binding.Id) then self.CostFunction = RuneEnchantmentCost; end end @@ -304,59 +297,11 @@ function Updater:Tick() local abilityAvailable = gPlayer:KnowsAbility(self.Resource.Id); local abilityCostDisplay, costMet = self:CostFunction(recastReady); - if (gSettings.ShowHotkey) and (self.Binding.ShowHotkey) then - self.StructPointer.Hotkey = self.Square.Hotkey; - else - self.StructPointer.Hotkey = ''; - end - - self.StructPointer.OverlayImage1 = ''; - - if (self.IconImage == nil) then - self.StructPointer.IconImage = ''; - else - self.StructPointer.IconImage = self.IconImage; - end - - if (gSettings.ShowName) and (self.Binding.ShowName) then - self.StructPointer.Name = self.Binding.Label; - else - self.StructPointer.Name = ''; - end - - if (gSettings.ShowCost) and (self.Binding.ShowCost) then - self.StructPointer.Cost = abilityCostDisplay; - else - self.StructPointer.Cost = ''; - end - - if (gSettings.ShowRecast) and (self.Binding.ShowRecast) and (recastDisplay ~= nil) then - self.StructPointer.Recast = recastDisplay; - else - self.StructPointer.Recast = ''; - end - - if (gSettings.ShowCross) and (self.Binding.ShowCross) then - if abilityAvailable == false then - self.StructPointer.OverlayImage2 = self.CrossImage; - else - self.StructPointer.OverlayImage2 = ''; - end - end - - if (gSettings.ShowTrigger) and (self.Binding.ShowTrigger) then - if (self.Square.Activation > os.clock()) then - self.StructPointer.OverlayImage3 = self.TriggerImage; - else - self.StructPointer.OverlayImage3 = ''; - end - end - - if (gSettings.ShowFade) and (self.Binding.ShowFade) and ((costMet == false) or (recastReady == 0) or (recastReady == false)) then - self.StructPointer.Fade = 1; - else - self.StructPointer.Fade = 0; - end + self.State.Available = abilityAvailable; + self.State.Cost = abilityCostDisplay; + self.State.Ready = ((costMet == true) and ((recastReady > 0) or (recastReady == true))); + self.State.Recast = recastDisplay; + self.State.Skillchain = nil; end return Updater; \ No newline at end of file diff --git a/updaters/command.lua b/updaters/command.lua index 51da60b..af3374e 100644 --- a/updaters/command.lua +++ b/updaters/command.lua @@ -45,19 +45,11 @@ function Updater:New() return o; end -function Updater:Initialize(square, binding) - self.Binding = binding; - self.Square = square; - self.StructPointer = square.StructPointer; - - local layout = gInterface:GetSquareManager().Layout; - self.IconImage = GetImagePath(self.Binding.Image); - self.CrossImage = layout.CrossPath; - self.TriggerImage = layout.TriggerPath; +function Updater:Initialize(element, binding) + self.State = element.State; - --Custom - if (self.Binding.CostOverride) then - self.CostFunction = ItemCost:bind2(self.Binding.CostOverride); + if (binding.CostOverride) then + self.CostFunction = ItemCost:bind2(binding.CostOverride); else self.CostFunction = function() return '', true; @@ -70,41 +62,11 @@ function Updater:Destroy() end function Updater:Tick() - if (gSettings.ShowHotkey) and (self.Binding.ShowHotkey) then - self.StructPointer.Hotkey = self.Square.Hotkey; - else - self.StructPointer.Hotkey = ''; - end - - self.StructPointer.Recast = ''; - self.StructPointer.OverlayImage1 = ''; - self.StructPointer.OverlayImage2 = ''; - self.StructPointer.Fade = 0; - self.StructPointer.Recast = ''; - - if (self.IconImage == nil) then - self.StructPointer.IconImage = ''; - else - self.StructPointer.IconImage = self.IconImage; - end - - if (gSettings.ShowName) and (self.Binding.ShowName) then - self.StructPointer.Name = self.Binding.Label; - else - self.StructPointer.Name = ''; - end - - if (gSettings.ShowCost) and (self.Binding.ShowCost) then - self.StructPointer.Cost = self:CostFunction(); - end - - if (gSettings.ShowTrigger) and (self.Binding.ShowTrigger) then - if (self.Square.Activation > os.clock()) then - self.StructPointer.OverlayImage3 = self.TriggerImage; - else - self.StructPointer.OverlayImage3 = ''; - end - end + self.State.Available = true; + self.State.Cost = self:CostFunction(); + self.State.Ready = true; + self.State.Recast = ''; + self.State.Skillchain = nil; end return Updater; \ No newline at end of file diff --git a/updaters/empty.lua b/updaters/empty.lua index 17dee26..0a0e757 100644 --- a/updaters/empty.lua +++ b/updaters/empty.lua @@ -7,11 +7,8 @@ function Updater:New() return o; end -function Updater:Initialize(square, binding) - self.Binding = binding; - self.Square = square; - self.StructPointer = square.StructPointer; - +function Updater:Initialize(element, binding) + self.State = element.State; end function Updater:Destroy() @@ -19,20 +16,11 @@ function Updater:Destroy() end function Updater:Tick() - if (gSettings.ShowHotkey) then - self.StructPointer.Hotkey = self.Square.Hotkey; - else - self.StructPointer.Hotkey = ''; - end - - self.StructPointer.Fade = 0; - self.StructPointer.Cost = ''; - self.StructPointer.Name = ''; - self.StructPointer.Recast = ''; - self.StructPointer.OverlayImage1 = ''; - self.StructPointer.OverlayImage2 = ''; - self.StructPointer.OverlayImage3 = ''; - self.StructPointer.IconImage = ''; + self.State.Available = true; + self.State.Cost = ''; + self.State.Ready = true; + self.State.Recast = ''; + self.State.Skillchain = nil; end return Updater; \ No newline at end of file From 20d9bc4e5f8f04d715e30f599c0afd534ab2f99e Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:16:37 -0500 Subject: [PATCH 02/25] finish updaters add skillchains for immanence/chain affinity --- state/skillchain.lua | 42 ++++++++++++ updaters/item.lua | 65 ++++--------------- updaters/spell.lua | 90 ++++++++++---------------- updaters/trust.lua | 76 ++++------------------ updaters/weaponskill.lua | 134 +++++---------------------------------- 5 files changed, 116 insertions(+), 291 deletions(-) diff --git a/state/skillchain.lua b/state/skillchain.lua index 0e48a64..d2038b7 100644 --- a/state/skillchain.lua +++ b/state/skillchain.lua @@ -650,4 +650,46 @@ function exposed:GetSkillchain(targetIndex, weaponskillId) return; end +function exposed:GetSkillchainBySpell(targetIndex, spellId) + local buffId; + local spellAttributes = immanenceResonationMap[spellId]; + if spellAttributes then + buffId = 470; + else + spellAttributes = chainAffinityResonationMap[spellId]; + if spellAttributes then + buffId = 164; + end + end + if not buffId then + return; + end + + local buffActive = false; + local buffs = AshitaCore:GetMemoryManager():GetPlayer():GetStatusIcons(); + for i = 1,32 do + if (buffs[i] == buffId) then + buffActive = true; + break; + end + end + + if not buffActive then + return; + end + + local resonation = resonationMap[targetIndex]; + if not resonation then + return; + end + + for _,sc in ipairs(possibleSkillchains) do + if (resonation.Attributes:contains(sc[2])) then + if spellAttributes:contains(sc[3]) then + return resonation, sc[1]; + end + end + end +end + return exposed; \ No newline at end of file diff --git a/updaters/item.lua b/updaters/item.lua index 9a606e5..466610f 100644 --- a/updaters/item.lua +++ b/updaters/item.lua @@ -33,7 +33,6 @@ local function GetItemRecast(itemId) local itemCount = 0; local itemData = gInventory:GetItemData(itemId); if (itemData ~= nil) then - local currentTime = GetTimeUTC(); for _,itemEntry in ipairs(itemData.Locations) do if (containers:contains(itemEntry.Container)) then itemCount = itemCount + gInventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; @@ -94,22 +93,15 @@ function Updater:New() return o; end -function Updater:Initialize(square, binding) - self.Binding = binding; - self.Square = square; - self.StructPointer = square.StructPointer; - self.Resource = AshitaCore:GetResourceManager():GetItemById(self.Binding.Id); +function Updater:Initialize(element, binding) + self.State = element.State; + self.Resource = AshitaCore:GetResourceManager():GetItemById(binding.Id); if (bit.band(self.Resource.Flags, 0x800) ~= 0) then self.RecastFunction = GetEquipmentRecast:bind1(self.Resource); else self.RecastFunction = GetItemRecast:bind1(self.Resource.Id); end - - local layout = gInterface:GetSquareManager().Layout; - self.IconImage = GetImagePath(self.Binding.Image); - self.CrossImage = layout.CrossPath; - self.TriggerImage = layout.TriggerPath; end function Updater:Destroy() @@ -118,53 +110,20 @@ end function Updater:Tick() local count, recastTimer = self.RecastFunction(); - - if (gSettings.ShowHotkey) and (self.Binding.ShowHotkey) then - self.StructPointer.Hotkey = self.Square.Hotkey; - else - self.StructPointer.Hotkey = ''; - end - - self.StructPointer.OverlayImage1 = ''; - self.StructPointer.OverlayImage2 = ''; - if (self.IconImage == nil) then - self.StructPointer.IconImage = ''; + self.State.Available = true; + if (bit.band(self.Resource.Flags, 0x800) == 0) then + self.State.Cost = tostring(count); else - self.StructPointer.IconImage = self.IconImage; + self.State.Cost = ''; end - - if (gSettings.ShowName) and (self.Binding.ShowName) then - self.StructPointer.Name = self.Binding.Label; - else - self.StructPointer.Name = ''; - end - - if (gSettings.ShowCost) and (self.Binding.ShowCost) and (bit.band(self.Resource.Flags, 0x800) == 0) then - self.StructPointer.Cost = tostring(count); - else - self.StructPointer.Cost = ''; - end - - if (gSettings.ShowRecast) and (self.Binding.ShowRecast) and (recastTimer ~= nil) then - self.StructPointer.Recast = recastTimer; - else - self.StructPointer.Recast = ''; - end - - if (gSettings.ShowTrigger) and (self.Binding.ShowTrigger) then - if (self.Square.Activation > os.clock()) then - self.StructPointer.OverlayImage3 = self.TriggerImage; - else - self.StructPointer.OverlayImage3 = ''; - end - end - - if (gSettings.ShowFade) and (self.Binding.ShowFade) and ((count == 0) or (recastTimer ~= nil)) then - self.StructPointer.Fade = 1; + self.State.Ready = (count > 0) and (recastTimer == nil); + if (recastTimer ~= nil) then + self.State.Recast = recastTimer; else - self.StructPointer.Fade = 0; + self.State.Recast = ''; end + self.State.Skillchain = nil; end return Updater; \ No newline at end of file diff --git a/updaters/spell.lua b/updaters/spell.lua index 68c06c2..416e1b6 100644 --- a/updaters/spell.lua +++ b/updaters/spell.lua @@ -297,24 +297,17 @@ function Updater:New() return o; end -function Updater:Initialize(square, binding) - self.Binding = binding; - self.Square = square; - self.StructPointer = square.StructPointer; - self.Resource = AshitaCore:GetResourceManager():GetSpellById(self.Binding.Id); - - local layout = gInterface:GetSquareManager().Layout; - self.IconImage = GetImagePath(self.Binding.Image); - self.CrossImage = layout.CrossPath; - self.TriggerImage = layout.TriggerPath; - +function Updater:Initialize(element, binding) + self.State = element.State; + self.Resource = AshitaCore:GetResourceManager():GetSpellById(binding.Id); + --Set cost and recast function for charge-based abilities. - local ninjutsu = ninjutsuCost[self.Binding.Id]; + local ninjutsu = ninjutsuCost[binding.Id]; --Custom - if (self.Binding.CostOverride) then - self.CostFunction = ItemCost:bind2(self.Binding.CostOverride); + if (binding.CostOverride) then + self.CostFunction = ItemCost:bind2(binding.CostOverride); elseif (ninjutsu ~= nil) then self.CostFunction = NinjutsuCost:bind2(ninjutsu); elseif (self.Resource.ManaCost < 1) then @@ -381,60 +374,43 @@ function Updater:Tick() local recastReady, recastDisplay = GetSpellRecast(self.Resource); local spellKnown, spellAvailable = GetSpellAvailable(self); local spellCostDisplay, costMet = self:CostFunction(); - - if (gSettings.ShowHotkey) and (self.Binding.ShowHotkey) then - self.StructPointer.Hotkey = self.Square.Hotkey; - else - self.StructPointer.Hotkey = ''; - end - - self.StructPointer.OverlayImage1 = ''; - if (self.IconImage == nil) then - self.StructPointer.IconImage = ''; + self.State.Available = spellKnown; + self.State.Cost = spellCostDisplay; + self.State.Ready = ((costMet == true) and (recastReady == true) and (spellAvailable == true)); + if (recastDisplay ~= nil) then + self.State.Recast = recastDisplay; else - self.StructPointer.IconImage = self.IconImage; + self.State.Recast = ''; end + self.State.Skillchain = self:UpdateSkillchain(); +end - if (gSettings.ShowName) and (self.Binding.ShowName) then - self.StructPointer.Name = self.Binding.Label; - else - self.StructPointer.Name = ''; - end +function Updater:UpdateSkillchain() + local targetMgr = AshitaCore:GetMemoryManager():GetTarget(); + local target = targetMgr:GetTargetIndex(targetMgr:GetIsSubTargetActive()); - if (gSettings.ShowCost) and (self.Binding.ShowCost) then - self.StructPointer.Cost = spellCostDisplay; - else - self.StructPointer.Cost = ''; - end - - if (gSettings.ShowRecast) and (self.Binding.ShowRecast) and (recastDisplay ~= nil) then - self.StructPointer.Recast = recastDisplay; - else - self.StructPointer.Recast = ''; + --Skip if no target.. + if (target == 0) then + return; end - if (gSettings.ShowCross) and (self.Binding.ShowCross) then - if spellKnown == false then - self.StructPointer.OverlayImage2 = self.CrossImage; - else - self.StructPointer.OverlayImage2 = ''; - end + --Skip if target is a player.. + if (target >= 0x400) and (target < 0x700) then + return; end - if (gSettings.ShowTrigger) and (self.Binding.ShowTrigger) then - if (self.Square.Activation > os.clock()) then - self.StructPointer.OverlayImage3 = self.TriggerImage; - else - self.StructPointer.OverlayImage3 = ''; - end + --Skip if target is a pet.. + if (target >= 0x700) and (AshitaCore:GetMemoryManager():GetEntity():GetTrustOwnerTargetIndex(target) ~= 0) then + return; end - - if (gSettings.ShowFade) and (self.Binding.ShowFade) and ((costMet == false) or (recastReady == 0) or (recastReady == false) or (spellAvailable == false)) then - self.StructPointer.Fade = 1; - else - self.StructPointer.Fade = 0; + + local resonation, skillchain = gSkillchain:GetSkillchainBySpell(target, self.Resource.Id); + if (resonation == nil) or (resonation.WindowClose < os.clock()) then + return; end + + return { Skillchain=skillchain, Open=(os.clock() > resonation.WindowOpen) }; end return Updater; \ No newline at end of file diff --git a/updaters/trust.lua b/updaters/trust.lua index c0ae6b9..a91f156 100644 --- a/updaters/trust.lua +++ b/updaters/trust.lua @@ -71,20 +71,12 @@ function Updater:New() return o; end -function Updater:Initialize(square, binding) - self.Binding = binding; - self.Square = square; - self.StructPointer = square.StructPointer; - self.Resource = AshitaCore:GetResourceManager():GetSpellById(self.Binding.Id); - - local layout = gInterface:GetSquareManager().Layout; - self.IconImage = GetImagePath(self.Binding.Image); - self.CrossImage = layout.CrossPath; - self.TriggerImage = layout.TriggerPath; +function Updater:Initialize(element, binding) + self.State = element.State; + self.Resource = AshitaCore:GetResourceManager():GetSpellById(binding.Id); - --Custom - if (self.Binding.CostOverride) then - self.CostFunction = ItemCost:bind2(self.Binding.CostOverride); + if (binding.CostOverride) then + self.CostFunction = ItemCost:bind2(binding.CostOverride); else self.CostFunction = function() return '', true; @@ -102,59 +94,15 @@ function Updater:Tick() local spellKnown = gPlayer:KnowsSpell(self.Resource.Index) local spellCostDisplay, costMet = self:CostFunction(); - if (gSettings.ShowHotkey) and (self.Binding.ShowHotkey) then - self.StructPointer.Hotkey = self.Square.Hotkey; - else - self.StructPointer.Hotkey = ''; - end - - self.StructPointer.OverlayImage1 = ''; - - if (self.IconImage == nil) then - self.StructPointer.IconImage = ''; - else - self.StructPointer.IconImage = self.IconImage; - end - - if (gSettings.ShowName) and (self.Binding.ShowName) then - self.StructPointer.Name = self.Binding.Label; - else - self.StructPointer.Name = ''; - end - - if (gSettings.ShowCost) and (self.Binding.ShowCost) then - self.StructPointer.Cost = spellCostDisplay; - else - self.StructPointer.Cost = ''; - end - - if (gSettings.ShowRecast) and (self.Binding.ShowRecast) and (recastDisplay ~= nil) then - self.StructPointer.Recast = recastDisplay; - else - self.StructPointer.Recast = ''; - end - - if (gSettings.ShowCross) and (self.Binding.ShowCross) then - if spellKnown == false then - self.StructPointer.OverlayImage2 = self.CrossImage; - else - self.StructPointer.OverlayImage2 = ''; - end - end - - if (gSettings.ShowTrigger) and (self.Binding.ShowTrigger) then - if (self.Square.Activation > os.clock()) then - self.StructPointer.OverlayImage3 = self.TriggerImage; - else - self.StructPointer.OverlayImage3 = ''; - end - end - - if (gSettings.ShowFade) and (self.Binding.ShowFade) and ((costMet == false) or (recastReady == false)) then - self.StructPointer.Fade = 1; + self.State.Available = spellKnown; + self.State.Cost = spellCostDisplay; + self.State.Ready = ((costMet == true) and (recastReady == true)); + if (recastDisplay ~= nil) then + self.State.Recast = recastDisplay; else - self.StructPointer.Fade = 0; + self.State.Recast = ''; end + self.State.Skillchain = nil; end return Updater; \ No newline at end of file diff --git a/updaters/weaponskill.lua b/updaters/weaponskill.lua index ae48eb0..5e1a426 100644 --- a/updaters/weaponskill.lua +++ b/updaters/weaponskill.lua @@ -45,46 +45,13 @@ function Updater:New() return o; end -function Updater:Initialize(square, binding) - self.Binding = binding; - self.Square = square; - self.StructPointer = square.StructPointer; - self.Resource = AshitaCore:GetResourceManager():GetAbilityById(self.Binding.Id); - - local layout = gInterface:GetSquareManager().Layout; - self.IconImage = GetImagePath(self.Binding.Image); - self.CrossImage = layout.CrossPath; - self.TriggerImage = layout.TriggerPath; - self.AnimationIndex = 1; - self.SkillchainAnimationTime = layout.SkillchainAnimationTime; - self.SkillchainAnimationImages = layout.SkillchainAnimationPaths; - self.ResonanceToFile = { - [1] = 'skillchains/liquefaction.png', - [2] = 'skillchains/induration.png', - [3] = 'skillchains/detonation.png', - [4] = 'skillchains/scission.png', - [5] = 'skillchains/impaction.png', - [6] = 'skillchains/reverberation.png', - [7] = 'skillchains/transfixion.png', - [8] = 'skillchains/compression.png', - [9] = 'skillchains/fusion.png', - [10] = 'skillchains/gravitation.png', - [11] = 'skillchains/distortion.png', - [12] = 'skillchains/fragmentation.png', - [13] = 'skillchains/light.png', - [14] = 'skillchains/darkness.png', - [15] = 'skillchains/light.png', - [16] = 'skillchains/darkness.png', - [17] = 'skillchains/radiance.png', - [18] = 'skillchains/umbra.png', - }; - for i = 1,18 do - self.ResonanceToFile[i] = GetImagePath(self.ResonanceToFile[i], self.DefaultIcon); - end - +function Updater:Initialize(element, binding) + self.State = element.State; + self.Resource = AshitaCore:GetResourceManager():GetAbilityById(binding.Id); + --Custom - if (self.Binding.CostOverride) then - self.CostFunction = ItemCost:bind2(self.Binding.CostOverride); + if (binding.CostOverride) then + self.CostFunction = ItemCost:bind2(binding.CostOverride); else self.CostFunction = function() return '', true; @@ -100,76 +67,11 @@ function Updater:Tick() local known = gPlayer:KnowsAbility(self.Resource.Id); local activeSkillchain = self:UpdateSkillchain(); - if (gSettings.ShowHotkey) and (self.Binding.ShowHotkey) then - self.StructPointer.Hotkey = self.Square.Hotkey; - else - self.StructPointer.Hotkey = ''; - end - - self.StructPointer.Recast = ''; - - if (self.IconImage == nil) then - self.StructPointer.IconImage = ''; - else - self.StructPointer.IconImage = self.IconImage; - end - - if (gSettings.ShowName) and (self.Binding.ShowName) then - self.StructPointer.Name = self.Binding.Label; - else - self.StructPointer.Name = ''; - end - - if (gSettings.ShowCost) and (self.Binding.ShowCost) then - self.StructPointer.Cost = self:CostFunction(); - else - self.StructPointer.Cost = ''; - end - - if (gSettings.ShowSkillchainIcon) and (self.Binding.ShowSkillchainIcon) then - if (activeSkillchain) then - self.StructPointer.IconImage = self.SkillchainIcon; - end - end - - if (gSettings.ShowSkillchainAnimation) and (self.Binding.ShowSkillchainAnimation) then - if (activeSkillchain) then - if (self.NextSkillchainImage == nil) or (os.clock() > self.NextSkillchainImage) then - self.AnimationIndex = self.AnimationIndex + 1; - if (self.AnimationIndex > #self.SkillchainAnimationImages) then - self.AnimationIndex = 1; - end - self.NextSkillchainImage = os.clock() + self.SkillchainAnimationTime; - end - self.StructPointer.OverlayImage1 = self.SkillchainAnimationImages[self.AnimationIndex]; - else - self.StructPointer.OverlayImage1 = ''; - end - else - self.StructPointer.OverlayImage1 = ''; - end - - if (gSettings.ShowCross) and (self.Binding.ShowCross) then - if known == false then - self.StructPointer.OverlayImage2 = self.CrossImage; - else - self.StructPointer.OverlayImage2 = ''; - end - end - - if (gSettings.ShowTrigger) and (self.Binding.ShowTrigger) then - if (self.Square.Activation > os.clock()) then - self.StructPointer.OverlayImage3 = self.TriggerImage; - else - self.StructPointer.OverlayImage3 = ''; - end - end - - if (gSettings.ShowFade) and (self.Binding.ShowFade) and ((not known) or (AshitaCore:GetMemoryManager():GetParty():GetMemberTP(0) < 1000)) then - self.StructPointer.Fade = 1; - else - self.StructPointer.Fade = 0; - end + self.State.Available = known; + self.State.Cost = self:CostFunction(); + self.State.Ready = (AshitaCore:GetMemoryManager():GetParty():GetMemberTP(0) >= 1000); + self.State.Recast = ''; + self.State.Skillchain = self:UpdateSkillchain(); end function Updater:UpdateSkillchain() @@ -178,27 +80,25 @@ function Updater:UpdateSkillchain() --Skip if no target.. if (target == 0) then - return false; + return; end --Skip if target is a player.. if (target >= 0x400) and (target < 0x700) then - return false; + return; end --Skip if target is a pet.. if (target >= 0x700) and (AshitaCore:GetMemoryManager():GetEntity():GetTrustOwnerTargetIndex(target) ~= 0) then - return false; + return; end local resonation, skillchain = gSkillchain:GetSkillchain(target, self.Resource.Id); - if (resonation == nil) or (resonation.WindowOpen > os.clock()) or (resonation.WindowClose < os.clock()) then - return false; + if (resonation == nil) or (resonation.WindowClose < os.clock()) then + return; end - - self.SkillchainIcon = self.ResonanceToFile[skillchain]; - return true; + return { Skillchain=skillchain, Open=(os.clock() > resonation.WindowOpen) }; end return Updater; \ No newline at end of file From 16104e46c4134c63f96b4b717c8b0fe011e28bd7 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 10 Nov 2023 10:20:22 -0500 Subject: [PATCH 03/25] Add submodule --- .gitmodules | 3 +++ element.lua | 8 ++++---- gdifonts | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 .gitmodules create mode 160000 gdifonts diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..755e0ed --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "gdifonts"] + path = gdifonts + url = https://github.com/ThornyFFXI/gdifonts diff --git a/element.lua b/element.lua index 5ee317f..8cb0f10 100644 --- a/element.lua +++ b/element.lua @@ -47,8 +47,8 @@ function Element:New(hotkey) o.State = { Available = false, Ready = false, - Cost = nil, - Recast = nil, + Cost = '', + Recast = '', Skillchain = nil, }; local updater = updaters.Empty; @@ -80,8 +80,8 @@ end function Element:Render() self.Updater:Tick(); - --Ugh.. - + + end function Element:UpdateBinding(binding) diff --git a/gdifonts b/gdifonts new file mode 160000 index 0000000..f3112bf --- /dev/null +++ b/gdifonts @@ -0,0 +1 @@ +Subproject commit f3112bf77be7be8e7701d33b3a8616d9826199b3 From 9281e0975c9d554de985688586f3d1b5ab9f7e26 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 10 Nov 2023 12:38:28 -0500 Subject: [PATCH 04/25] first draft of element render function --- element.lua | 150 ++++++++++++++++++++++++++++++++++++--- initializer.lua | 2 + tCrossBar.lua | 26 +------ updaters/spell.lua | 2 +- updaters/weaponskill.lua | 2 +- 5 files changed, 147 insertions(+), 35 deletions(-) diff --git a/element.lua b/element.lua index 8cb0f10..55ba03e 100644 --- a/element.lua +++ b/element.lua @@ -1,3 +1,6 @@ +local d3d = require('d3d8'); +local ffi = require('ffi'); +local gdi = require('gdifonts.include'); local updaters = { ['Ability'] = require('updaters.ability'), ['Command'] = require('updaters.command'), @@ -40,7 +43,7 @@ end local Element = {}; -function Element:New(hotkey) +function Element:New(hotkey, layout) local o = {}; setmetatable(o, self); self.__index = self; @@ -48,12 +51,15 @@ function Element:New(hotkey) Available = false, Ready = false, Cost = '', + Hotkey = hotkey, + Label = '', Recast = '', Skillchain = nil, }; local updater = updaters.Empty; o.Activation = 0; - o.Hotkey = hotkey; + o.Layout = layout; + o:Initialize(); o.Updater = updater:New(); o.Updater:Initialize(o); return o; @@ -78,10 +84,22 @@ function Element:Destroy() self.Updater:Destroy(); end -function Element:Render() - self.Updater:Tick(); - - +local textOrder = T { 'Hotkey', 'Cost', 'Recast', 'Name' }; +local d3dwhite = d3d.D3DCOLOR_ARGB(255, 255, 255, 255); +local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); +local vec_font_scale = ffi.new('D3DXVECTOR2', { 1.0, 1.0, }); +function Element:Initialize() + self.FontObjects = T{}; + for _,entry in ipairs(textOrder) do + local data = self.Layout.Element[entry]; + if data then + local obj = gdi:create_object(data, true); + obj:set_font_height(math.floor(data.font_height * gSettings.Scale)); + obj.OffsetX = data.OffsetX * gSettings.Scale; + obj.OffsetY = data.OffsetY * gSettings.Scale; + self.FontObjects[entry] = obj; + end + end end function Element:UpdateBinding(binding) @@ -95,10 +113,16 @@ function Element:UpdateBinding(binding) self.Binding = binding; local updater = updaters.Empty; - if (type(self.Binding) == 'table') and (self.Binding.ActionType ~= nil) then - local newUpdater = updaters[self.Binding.ActionType]; - if (newUpdater ~= nil) then - updater = newUpdater; + self.State.Label = ''; + if (type(self.Binding) == 'table') then + if (self.Binding.ActionType ~= nil) then + local newUpdater = updaters[self.Binding.ActionType]; + if (newUpdater ~= nil) then + updater = newUpdater; + end + end + if (type(self.Binding.Label) == 'string') then + self.State.Label = self.Binding.Label; end end @@ -106,4 +130,110 @@ function Element:UpdateBinding(binding) self.Updater:Initialize(self, self.Binding); end +function Element:Render(sprite) + if (self.Binding == nil) and (gSettings.ShowEmpty == false) then + return; + end + + self.Updater:Tick(); + + local positionX = self.PositionX; + local positionY = self.PositionY; + local layout = self.Layout; + + --Draw frame first.. + if (gSettings.ShowFrame) then + local component = layout.Frame; + if component then + vec_position.x = positionX + component.OffsetX; + vec_position.y = positionY + component.OffsetY; + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); + end + end + + --Evaluate skillchain state.. + local icon = self.Icon; + vec_position.x = positionX + layout.Icon.OffsetX; + vec_position.y = positionY + layout.Icon.OffsetY; + if (self.Skillchain ~= nil) then + if (self.SkillchainAnimation == nil) then + self.SkillchainAnimation = + { + Frame = 1, + Time = os.clock(); + }; + elseif (os.clock() > (self.SkillchainAnimation.Time + layout.Skillchain.FrameDelay)) then + self.SkillchainAnimation.Frame = self.SkillchainAnimation.Frame + 1; + if (self.SkillchainAnimation.Frame > #layout.Skillchain.Frames) then + self.SkillchainAnimation.Frame = 1; + end + self.SkillchainAnimation.Time = os.clock(); + end + + if (gSettings.ShowSkillchainIcon) and (self.Binding.ShowSkillchainIcon) then + icon = layout.SkillchainIcons[self.Skillchain.Name]; + end + else + self.SkillchainAnimation = nil; + end + + --Draw icon over frame.. + if icon then + vec_position.x = positionX + layout.Icon.OffsetX; + vec_position.y = positionY + layout.Icon.OffsetY; + local opacity = d3dwhite; + if (gSettings.ShowFade) and (self.Binding.ShowFade) and (not self.State.Ready) then + opacity = layout.Icon.FadeOpacity; + end + sprite:Draw(icon.Texture, icon.Rect, icon.Scale, nil, 0.0, vec_position, opacity); + end + + --Draw skillchain animation if applicable.. + if (self.SkillchainAnimation) and (gSettings.ShowSkillchainAnimation) and (self.Binding.ShowSkillchainAnimation) then + local component = layout.Skillchain.Frames[self.SkillchainAnimation.Frame]; + if component then + vec_position.x = positionX + layout.Skillchain.OffsetX; + vec_position.y = positionY + layout.Skillchain.OffsetY; + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); + end + end + + --Draw crossout if applicable.. + if (gSettings.ShowCross) and (self.Binding.ShowCross) and (not self.State.Available) then + local component = layout.Cross; + if component then + vec_position.x = positionX + component.OffsetX; + vec_position.y = positionY + component.OffsetY; + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); + end + end + + --Draw text elements.. + for _,entry in ipairs(textOrder) do + local setting = 'Show' .. entry; + if (gSettings[setting]) and (self.Binding[setting]) then + local obj = self.FontObjects[entry]; + if obj then + local text = self.State[entry]; + if (type(text) == 'string') and (text ~= '') then + obj:set_text(text); + local texture, rect = obj:get_texture(); + if (texture ~= nil) then + local posX = obj.OffsetX + positionX; + if (obj.settings.font_alignment == 1) then + vec_position.x = posX - (rect.right / 2); + elseif (obj.settings.font_alignment == 2) then + vec_position.x = posX - rect.right; + else + vec_position.x = posX;; + end + vec_position.y = obj.OffsetY + positionY; + sprite:Draw(texture, rect, vec_font_scale, nil, 0.0, vec_position, d3dwhite); + end + end + end + end + end +end + return Element; \ No newline at end of file diff --git a/initializer.lua b/initializer.lua index 32eea24..0f1018f 100644 --- a/initializer.lua +++ b/initializer.lua @@ -83,6 +83,8 @@ local defaultSettings = T{ AllowInventoryPassthrough = true, Position = T{}, ClickToActivate = true, + ShowEmpty = true, + ShowFrame = true, ShowCost = true, ShowCross = true, ShowFade = true, diff --git a/tCrossBar.lua b/tCrossBar.lua index 1a945d5..c033382 100644 --- a/tCrossBar.lua +++ b/tCrossBar.lua @@ -26,18 +26,10 @@ addon.desc = 'Creates a controller scheme for activating macros, and provid addon.link = 'https://ashitaxi.com/'; require('common'); -chat = require('chat'); - -local isInitialized = false; -local isUnloading = false; +local gdi = require('gdifonts.include'); ashita.events.register('load', 'load_cb', function () - if (AshitaCore:GetPluginManager():IsLoaded('tRenderer') == true) then - isInitialized = require('initializer'); - else - print(chat.header(addon.name) .. chat.color1(2, 'tRenderer') .. chat.error(' plugin must be loaded to use this addon!')); - isInitialized = false; - end + gdi:set_auto_render(false); end); --[[ @@ -45,11 +37,7 @@ end); * desc : Event called when the addon is being unloaded. --]] ashita.events.register('unload', 'unload_cb', function () - if (isInitialized) then - if (gInterface ~= nil) then - gInterface:Destroy(); - end - end + gdi:destroy_interface(); end); ashita.events.register('command', 'command_cb', function (e) @@ -79,14 +67,6 @@ ashita.events.register('command', 'command_cb', function (e) end); ashita.events.register('d3d_present', 'd3d_present_cb', function () - -- Destroy addon if renderer isn't present or initialization failed. - if (not isInitialized) or (isUnloading) or (AshitaCore:GetPluginManager():IsLoaded('tRenderer') == false) then - if (not isUnloading) then - AshitaCore:GetChatManager():QueueCommand(-1, string.format('/addon unload %s', addon.name)); - isUnloading = true; - end - return; - end gController:Tick(); diff --git a/updaters/spell.lua b/updaters/spell.lua index 416e1b6..1b280f7 100644 --- a/updaters/spell.lua +++ b/updaters/spell.lua @@ -410,7 +410,7 @@ function Updater:UpdateSkillchain() return; end - return { Skillchain=skillchain, Open=(os.clock() > resonation.WindowOpen) }; + return { Name=skillchain, Open=(os.clock() > resonation.WindowOpen) }; end return Updater; \ No newline at end of file diff --git a/updaters/weaponskill.lua b/updaters/weaponskill.lua index 5e1a426..0d829fa 100644 --- a/updaters/weaponskill.lua +++ b/updaters/weaponskill.lua @@ -98,7 +98,7 @@ function Updater:UpdateSkillchain() return; end - return { Skillchain=skillchain, Open=(os.clock() > resonation.WindowOpen) }; + return { Name=skillchain, Open=(os.clock() > resonation.WindowOpen) }; end return Updater; \ No newline at end of file From c16432ddfed778da9faf0ae4e00e0601feef09bc Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 10 Nov 2023 14:33:50 -0500 Subject: [PATCH 05/25] add texturecache start overhauling dependencies not in functional state --- configgui.lua | 47 +++++ controller.lua | 1 - initializer.lua => initialize.lua | 52 ++--- mousehandler.lua | 51 ----- singledisplay.lua | 309 ++++++++++++++++++++++++++++++ tCrossBar.lua | 42 +++- texturecache.lua | 122 ++++++++++++ updaters/ability.lua | 10 +- updaters/command.lua | 6 +- updaters/item.lua | 11 +- updaters/spell.lua | 27 +-- updaters/weaponskill.lua | 14 +- 12 files changed, 567 insertions(+), 125 deletions(-) rename initializer.lua => initialize.lua (65%) delete mode 100644 mousehandler.lua create mode 100644 singledisplay.lua create mode 100644 texturecache.lua diff --git a/configgui.lua b/configgui.lua index e5750b7..2e63c91 100644 --- a/configgui.lua +++ b/configgui.lua @@ -1,5 +1,8 @@ local header = { 1.0, 0.75, 0.55, 1.0 }; +local lastPositionX, lastPositionY; local state = { + DragMode = 'Disabled', + DragTarget = '', IsOpen = { false } }; local validControls = T{ @@ -103,8 +106,47 @@ local function ControllerBindingCombo(member, helpText) imgui.ShowHelp(helpText); end +local function HitTest(layout, e) + local minX = gSettings.Position[gSettings.Layout][state.DragTarget] + +end + local exposed = {}; +function exposed:HandleMouse(e) + if (state.IsOpen[1] == false) or (state.DragMode == 'Disabled') then + return false; + end + + if state.DragMode == 'Active' then + local pos = state.DragTarget:GetPosition(); + local newX = pos[1] + (e.x - lastPositionX); + local newY = pos[2] + (e.y - lastPositionY); + state.DragTarget:SetPosition(newX, newY); + lastPositionX = e.x; + lastPositionY = e.y; + if (e.message == 514) or (bit.band(ffi.C.GetKeyState(0x10), 0x8000) == 0) then + state.DragMode = 'Disabled'; + e.blocked = true; + end + return true; + end + + if (state.DragMode == 'Pending') then + if e.message == 513 then + if state.DragTarget:HitTest(e.x, e.y) then + state.DragMode = 'Active'; + lastPositionX = e.x; + lastPositionY = e.y; + e.blocked = true; + end + end + return true; + end + + return false; +end + function exposed:Render() if (state.IsOpen[1]) then if (imgui.Begin(string.format('%s v%s Configuration', addon.name, addon.version), state.IsOpen, ImGuiWindowFlags_AlwaysAutoResize)) then @@ -223,6 +265,10 @@ function exposed:Render() end imgui.End(); end + + if (state.DragMode ~= 'Disabled') then + return state.DragTarget; + end end end @@ -231,6 +277,7 @@ function exposed:Show() GetLayouts(); state.ForceTab = true; state.IsOpen = { true }; + state.DragMode = 'Disabled'; end return exposed; \ No newline at end of file diff --git a/controller.lua b/controller.lua index b4012b1..ab6a565 100644 --- a/controller.lua +++ b/controller.lua @@ -59,7 +59,6 @@ local function GetMenuName() return string.gsub(menuName, '\x00', ''); end - function controller:GetMacroState() return self.ComboState.CurrentMode; end diff --git a/initializer.lua b/initialize.lua similarity index 65% rename from initializer.lua rename to initialize.lua index 0f1018f..c01e8bb 100644 --- a/initializer.lua +++ b/initialize.lua @@ -5,6 +5,7 @@ function Error(text) print(chat.header(addon.name) .. highlighted .. '\30\01'); end + function Message(text) local color = ('\30%c'):format(106); local highlighted = color .. string.gsub(text, '$H', '\30\01\30\02'); @@ -12,29 +13,6 @@ function Message(text) print(chat.header(addon.name) .. highlighted .. '\30\01'); end -function GetImagePath(image, default) - if (string.sub(image, 1, 5) == 'ITEM:') then - return image; - end - - local potentialPaths = T{ - image, - string.format('%sconfig/addons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), - string.format('%saddons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), - default or '', - string.format('%sconfig/addons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), - string.format('%saddons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), - }; - - for _,path in ipairs(potentialPaths) do - if (path ~= '') and (ashita.fs.exists(path)) then - return path; - end - end - - return nil; -end - function LoadFile_s(filePath) if not ashita.fs.exists(filePath) then return nil; @@ -57,22 +35,23 @@ function LoadFile_s(filePath) return output; end ---Set up globals.. order matters here, don't mess with it. -ffi = require('ffi'); -imgui = require('imgui'); -settings = require('settings'); -gController = require('controller'); -gInterface = require('interface'); -gBindings = require('bindings'); -gInventory = require('state.inventory'); -gPlayer = require('state.player'); -gSkillchain = require('state.skillchain'); -gMouseHandler = require('mousehandler'); -gBindingGUI = require('bindinggui'); -gConfigGUI = require('configgui'); +--Initialize Classes.. +require('state.inventory'); +require('state.player'); +require('state.skillchain'); + +--Initialize Globals.. +gTextureCache = require('texturecache'); +gBindingGUI = require('bindinggui'); +gConfigGUI = require('configgui'); +gController = require('controller'); +gSingleDisplay = require('singledisplay'); +gDoubleDisplay = require('doubledisplay'); +settings = require('settings'); local defaultSettings = T{ Layout = 'classic', + Scale = 1.0, Controller = 'dualsense', BindMenuTimer = 1, TapTimer = 0.4, @@ -117,7 +96,6 @@ gInterface:Initialize(gSettings.Layout); settings.register('settings', 'settings_update', function(newSettings) gSettings = newSettings; gController:SetLayout(gSettings.Controller); - gInterface:Initialize(gSettings.Layout); end); return true; \ No newline at end of file diff --git a/mousehandler.lua b/mousehandler.lua deleted file mode 100644 index c3e1eed..0000000 --- a/mousehandler.lua +++ /dev/null @@ -1,51 +0,0 @@ -local lastPositionX, lastPositionY; -local dragActive = false; -local blockLeftClick = false; -local hitType; - -ffi.cdef[[ - int16_t GetKeyState(int32_t vkey); -]] - -ashita.events.register('mouse', 'mouse_cb', function (e) - if (e.blocked) then - return; - end - - local manager = gInterface:GetSquareManager(); - - if dragActive then - local pos = gSettings.Position[gSettings.Layout][hitType]; - pos[1] = pos[1] + (e.x - lastPositionX); - pos[2] = pos[2] + (e.y - lastPositionY); - lastPositionX = e.x; - lastPositionY = e.y; - if (e.message == 514) or (bit.band(ffi.C.GetKeyState(0x10), 0x8000) == 0) or (manager == nil) or (manager:GetHidden() == true) then - dragActive = false; - e.blocked = true; - blockLeftClick = false; - settings.save(); - return; - end - end - - if (manager ~= nil) and (e.message == 513) and (manager:GetHidden() == false) then - local hitFrame, type = manager:HitTest(e.x, e.y); - if (hitFrame) then - if (bit.band(ffi.C.GetKeyState(0x10), 0x8000) ~= 0) then - e.blocked = true; - hitType = type; - blockLeftClick = true; - dragActive = true; - lastPositionX = e.x; - lastPositionY = e.y; - return; - end - end - end - - if (blockLeftClick) and (e.message == 514) then - e.blocked = true; - blockLeftClick = false; - end -end); \ No newline at end of file diff --git a/singledisplay.lua b/singledisplay.lua new file mode 100644 index 0000000..5fbed9c --- /dev/null +++ b/singledisplay.lua @@ -0,0 +1,309 @@ +local element = require('element'); +--Thanks to Velyn for the event system and interface hidden signatures! +local pGameMenu = ashita.memory.find('FFXiMain.dll', 0, "8B480C85C974??8B510885D274??3B05", 16, 0); +local pEventSystem = ashita.memory.find('FFXiMain.dll', 0, "A0????????84C0741AA1????????85C0741166A1????????663B05????????0F94C0C3", 0, 0); +local pInterfaceHidden = ashita.memory.find('FFXiMain.dll', 0, "8B4424046A016A0050B9????????E8????????F6D81BC040C3", 0, 0); + +local function GetMenuName() + local subPointer = ashita.memory.read_uint32(pGameMenu); + local subValue = ashita.memory.read_uint32(subPointer); + if (subValue == 0) then + return ''; + end + local menuHeader = ashita.memory.read_uint32(subValue + 4); + local menuName = ashita.memory.read_string(menuHeader + 0x46, 16); + return string.gsub(menuName, '\x00', ''); +end + +local function GetEventSystemActive() + if (pEventSystem == 0) then + return false; + end + local ptr = ashita.memory.read_uint32(pEventSystem + 1); + if (ptr == 0) then + return false; + end + + return (ashita.memory.read_uint8(ptr) == 1); + +end + +local function GetInterfaceHidden() + if (pEventSystem == 0) then + return false; + end + local ptr = ashita.memory.read_uint32(pInterfaceHidden + 10); + if (ptr == 0) then + return false; + end + + return (ashita.memory.read_uint8(ptr + 0xB4) == 1); +end + +local function GetButtonAlias(comboIndex, buttonIndex) + local macroComboBinds = { + [1] = 'LT', + [2] = 'RT', + [3] = 'LTRT', + [4] = 'RTLT', + [5] = 'LT2', + [6] = 'RT2' + }; + return string.format('%s:%d', macroComboBinds[comboIndex], buttonIndex); +end + +local SingleDisplay = {}; +SingleDisplay.Elements = T{}; + +function SingleDisplay:Initialize(layout) + self.Layout = layout; + self.Hidden = false; + + self.SinglePrimitives = T{}; + for _,primitiveInfo in ipairs(layout.SingleDisplay.Primitives) do + local prim = { + Object = primitives.new(primitiveInfo), + OffsetX = primitiveInfo.OffsetX, + OffsetY = primitiveInfo.OffsetY, + }; + self.SinglePrimitives:append(prim); + end + + self.DoublePrimitives = T{}; + for _,primitiveInfo in ipairs(layout.DoubleDisplay.Primitives) do + local prim = { + Object = primitives.new(primitiveInfo), + OffsetX = primitiveInfo.OffsetX, + OffsetY = primitiveInfo.OffsetY, + }; + self.DoublePrimitives:append(prim); + end + + self.Squares = T{ + [1] = {}, + [2] = {}, + }; + + + local count = 0; + self.DefaultSquares = T{}; + for _,squareInfo in ipairs(layout.DoubleDisplay.Squares) do + local buttonIndex = (count < 8) and (count + 1) or (count - 7); + local tableIndex = (count < 8) and 1 or 2; + + local singlePointer = ffi.cast('AbilitySquareState_t*', singleStruct + structOffset + (structWidth * (buttonIndex - 1))); + local doublePointer = ffi.cast('AbilitySquareState_t*', doubleStruct + structOffset + (structWidth * count)); + + local newSquare = square:New(doublePointer, GetButtonAlias(tableIndex, buttonIndex)); + newSquare.SinglePointer = singlePointer; + newSquare.DoublePointer = doublePointer; + + count = count + 1; + newSquare.MinX = squareInfo.OffsetX + layout.DoubleDisplay.ImageObjects.Frame.OffsetX; + newSquare.MaxX = newSquare.MinX + layout.DoubleDisplay.ImageObjects.Frame.Width; + newSquare.MinY = squareInfo.OffsetY + layout.DoubleDisplay.ImageObjects.Frame.OffsetY; + newSquare.MaxY = newSquare.MinY + layout.DoubleDisplay.ImageObjects.Frame.Height; + self.Squares[tableIndex][buttonIndex] = newSquare; + end + for i = 3,6 do + self.Squares[i] = T{}; + count = 0; + for _,squareInfo in ipairs(layout.SingleDisplay.Squares) do + local buttonIndex = count + 1; + local singlePointer = ffi.cast('AbilitySquareState_t*', singleStruct + structOffset + (structWidth * count)); + local newSquare = square:New(singlePointer, GetButtonAlias(i, buttonIndex)); + newSquare.MinX = squareInfo.OffsetX + layout.SingleDisplay.ImageObjects.Frame.OffsetX; + newSquare.MaxX = newSquare.MinX + layout.SingleDisplay.ImageObjects.Frame.Width; + newSquare.MinY = squareInfo.OffsetY + layout.SingleDisplay.ImageObjects.Frame.OffsetY; + newSquare.MaxY = newSquare.MinY + layout.SingleDisplay.ImageObjects.Frame.Height; + self.Squares[i][buttonIndex] = newSquare; + count = count + 1; + end + end +end + +function SquareManager:GetSquareByButton(macroState, macroIndex) + local squareSet = self.Squares[macroState]; + if (squareSet ~= nil) then + local square = squareSet[macroIndex]; + if (square ~= nil) then + return square; + end + end +end + +function SquareManager:Activate(macroState, button) + local square = self:GetSquareByButton(macroState, button); + if square then + square:Activate(); + end +end + +function SquareManager:Destroy() + for _,squareSet in ipairs(self.Squares) do + for _,square in ipairs(squareSet) do + square:Destroy(); + end + end + + if (type(self.SinglePrimitives) == 'table') then + for _,primitive in ipairs(self.SinglePrimitives) do + primitive.Object:destroy(); + end + self.SinglePrimitives = nil; + end + if (type(self.DoublePrimitives) == 'table') then + for _,primitive in ipairs(self.DoublePrimitives) do + primitive.Object:destroy(); + end + self.DoublePrimitives = nil; + end + + self.SingleStruct = nil; + self.DoubleStruct = nil; +end + +function SquareManager:GetHidden() + if (self.SingleStruct == nil) or (self.DoubleStruct == nil) then + return true; + end + + if (gSettings.HideWhileZoning) then + if (gPlayer:GetLoggedIn() == false) then + return true; + end + end + + if (gSettings.HideWhileCutscene) then + if (GetEventSystemActive()) then + return true; + end + end + + if (gSettings.HideWhileMap) then + if (string.match(GetMenuName(), 'map')) then + return true; + end + end + + if (GetInterfaceHidden()) then + return true; + end + + return false; +end + +function SquareManager:HidePrimitives(primitives) + for _,primitive in ipairs(primitives) do + primitive.Object.visible = false; + end +end + +function SquareManager:HitTest(x, y) + local pos, width, height, type; + if (self.DoubleDisplay == true) then + pos = gSettings.Position[gSettings.Layout].DoubleDisplay; + width = self.Layout.DoubleDisplay.PanelWidth; + height = self.Layout.DoubleDisplay.PanelHeight; + type = 'DoubleDisplay'; + elseif (self.SingleDisplay == true) then + pos = gSettings.Position[gSettings.Layout].SingleDisplay; + width = self.Layout.SingleDisplay.PanelWidth; + height = self.Layout.SingleDisplay.PanelHeight; + type = 'SingleDisplay'; + end + + if (pos ~= nil) then + if (x >= pos[1]) and (y >= pos[2]) then + local offsetX = x - pos[1]; + local offsetY = y - pos[2]; + if (offsetX < width) and (offsetY < height) then + return true, type; + end + end + end + + return false; +end + +function SquareManager:Tick() + self.SingleDisplay = false; + self.DoubleDisplay = false; + + if (self:GetHidden()) then + self:HidePrimitives(self.SinglePrimitives); + self:HidePrimitives(self.DoublePrimitives); + return; + end + + + local macroState = gController:GetMacroState(); + if (gBindingGUI:GetActive()) then + macroState = gBindingGUI:GetMacroState(); + end + + if (macroState == 0) then + if (gSettings.ShowDoubleDisplay) then + self.DoubleDisplay = true; + end + elseif (macroState < 3) then + if (gSettings.SwapToSingleDisplay) then + self.SingleDisplay = true; + else + self.DoubleDisplay = true; + end + else + self.SingleDisplay = true; + end + + if (self.SingleDisplay) then + for _,squareClass in ipairs(self.Squares[macroState]) do + if (macroState < 3) then + squareClass.StructPointer = squareClass.SinglePointer; + squareClass.Updater.StructPointer = squareClass.SinglePointer; + end + squareClass:Update(); + end + local pos = gSettings.Position[gSettings.Layout].SingleDisplay; + self.SingleStruct.PositionX = pos[1]; + self.SingleStruct.PositionY = pos[2]; + self.SingleStruct.Render = 1; + self:HidePrimitives(self.DoublePrimitives); + self:UpdatePrimitives(self.SinglePrimitives, pos); + elseif (self.DoubleDisplay) then + for _,tableIndex in ipairs(T{1, 2}) do + for _,squareClass in ipairs(self.Squares[tableIndex]) do + squareClass.StructPointer = squareClass.DoublePointer; + squareClass.Updater.StructPointer = squareClass.DoublePointer; + squareClass:Update(); + end + end + local pos = gSettings.Position[gSettings.Layout].DoubleDisplay; + self.DoubleStruct.PositionX = pos[1]; + self.DoubleStruct.PositionY = pos[2]; + self.DoubleStruct.Render = 1; + self:HidePrimitives(self.SinglePrimitives); + self:UpdatePrimitives(self.DoublePrimitives, pos); + else + self:HidePrimitives(self.SinglePrimitives); + self:HidePrimitives(self.DoublePrimitives); + end +end + +function SquareManager:UpdateBindings(bindings) + for comboKey,squareSet in ipairs(self.Squares) do + for buttonKey,square in ipairs(squareSet) do + square:UpdateBinding(bindings[GetButtonAlias(comboKey, buttonKey)]); + end + end +end + +function SquareManager:UpdatePrimitives(primitives, position) + for _,primitive in ipairs(primitives) do + primitive.Object.position_x = position[1] + primitive.OffsetX; + primitive.Object.position_y = position[2] + primitive.OffsetY; + primitive.Object.visible = true; + end +end + +return SquareManager; \ No newline at end of file diff --git a/tCrossBar.lua b/tCrossBar.lua index c033382..42b34fb 100644 --- a/tCrossBar.lua +++ b/tCrossBar.lua @@ -26,10 +26,12 @@ addon.desc = 'Creates a controller scheme for activating macros, and provid addon.link = 'https://ashitaxi.com/'; require('common'); -local gdi = require('gdifonts.include'); +local gdi = require('gdifonts.include'); +local clickTarget; ashita.events.register('load', 'load_cb', function () gdi:set_auto_render(false); + require('initialize'); end); --[[ @@ -67,14 +69,38 @@ ashita.events.register('command', 'command_cb', function (e) end); ashita.events.register('d3d_present', 'd3d_present_cb', function () - gController:Tick(); - - gBindingGUI:Render(); - - gConfigGUI:Render(); - if (gInterface ~= nil) then - gInterface:Tick(); + --Returns a display type if in drag mode. + local renderTarget = gConfigGUI:Render(); + + --Returns a macro type if in binding mode. + local macroState = gBindingGUI:Render(); + + if (renderTarget == nil) then + renderTarget = gSingleDisplay; + macroState = macroState or gController:GetMacroState(); + if (macroState == 0) then + if (gSettings.ShowDoubleDisplay) then + renderTarget = gDoubleDisplay; + end + elseif (macroState < 3) then + if (gSettings.SwapToSingleDisplay == false) then + renderTarget = gDoubleDisplay; + end + end + clickTarget = renderTarget; + else + clickTarget = nil; end + + renderTarget:Render(); +end); + +ashita.events.register('mouse', 'mouse_cb', function (e) + if gConfigGUI:HandleMouse(e) then + return; + end + + clickTarget:HandleMouse(e); end); \ No newline at end of file diff --git a/texturecache.lua b/texturecache.lua new file mode 100644 index 0000000..5e727bc --- /dev/null +++ b/texturecache.lua @@ -0,0 +1,122 @@ +local d3d8 = require('d3d8'); +local d3d8_device = d3d8.get_device(); +local ffi = require('ffi'); +local TextureCache = {}; +TextureCache.ItemCache = {}; +TextureCache.ImageCache = {}; +TextureCache.StatusCache = {}; + +local function GetImagePath(image, default) + if (string.sub(image, 1, 5) == 'ITEM:') then + return image; + end + + local potentialPaths = T{ + image, + string.format('%sconfig/addons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), + string.format('%saddons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), + default or '', + string.format('%sconfig/addons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), + string.format('%saddons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), + }; + + for _,path in ipairs(potentialPaths) do + if (path ~= '') and (ashita.fs.exists(path)) then + return path; + end + end + + return nil; +end + +function TextureCache:GetTexture(file) + if (string.sub(file, 1, 5) == 'ITEM:') then + local itemId = tonumber(string.sub(file, 6)); + if type(itemId) ~= 'number' then + return; + end + + local tx = self.ItemCache[itemId] + if tx then + return tx; + end + + local item = AshitaCore:GetResourceManager():GetItemById(itemId); + if (item == nil) then + return; + end + + local dx_texture_ptr = ffi.new('IDirect3DTexture8*[1]'); + if (ffi.C.D3DXCreateTextureFromFileInMemoryEx(d3d8_device, item.Bitmap, item.ImageSize, 0xFFFFFFFF, 0xFFFFFFFF, 1, 0, ffi.C.D3DFMT_A8R8G8B8, ffi.C.D3DPOOL_MANAGED, ffi.C.D3DX_DEFAULT, ffi.C.D3DX_DEFAULT, 0xFF000000, nil, nil, dx_texture_ptr) == ffi.C.S_OK) then + local texture = d3d8.gc_safe_release(ffi.cast('IDirect3DTexture8*', dx_texture_ptr[0])); + local result, desc = texture:GetLevelDesc(0); + if result == 0 then + tx = {}; + tx.Texture = texture; + tx.Width = desc.Width; + tx.Height = desc.Height; + self.ItemCache[itemId] = tx; + return tx; + end + return; + end + end + + if (string.sub(file, 1, 7) == 'STATUS:') then + local statusId = tonumber(string.sub(file, 8)); + if type(statusId) ~= 'number' then + return; + end + + local tx = self.StatusCache[statusId] + if tx then + return tx; + end + + local status = AshitaCore:GetResourceManager():GetStatusIconByIndex(statusId); + if (status == nil) then + return; + end + + + local dx_texture_ptr = ffi.new('IDirect3DTexture8*[1]'); + if (ffi.C.D3DXCreateTextureFromFileInMemoryEx(d3d8_device, status.Bitmap, status.ImageSize, 0xFFFFFFFF, 0xFFFFFFFF, 1, 0, ffi.C.D3DFMT_A8R8G8B8, ffi.C.D3DPOOL_MANAGED, ffi.C.D3DX_DEFAULT, ffi.C.D3DX_DEFAULT, 0xFF000000, nil, nil, dx_texture_ptr) == ffi.C.S_OK) then + local texture = d3d8.gc_safe_release(ffi.cast('IDirect3DTexture8*', dx_texture_ptr[0])); + local result, desc = texture:GetLevelDesc(0); + if result == 0 then + tx = {}; + tx.Texture = texture; + tx.Width = desc.Width; + tx.Height = desc.Height; + self.StatusCache[statusId] = tx; + return tx; + end + return; + end + end + + local tx = self.ImageCache[file]; + if tx then + return tx; + end + + local path = GetImagePath(file); + if (path ~= nil) then + local dx_texture_ptr = ffi.new('IDirect3DTexture8*[1]'); + if (ffi.C.D3DXCreateTextureFromFileA(d3d8_device, path, dx_texture_ptr) == ffi.C.S_OK) then + local texture = d3d8.gc_safe_release(ffi.cast('IDirect3DTexture8*', dx_texture_ptr[0])); + local result, desc = texture:GetLevelDesc(0); + if result == 0 then + tx = {}; + tx.Texture = texture; + tx.Width = desc.Width; + tx.Height = desc.Height; + self.ImageCache[file] = tx; + return tx; + end + return; + end + end +end + +return TextureCache; \ No newline at end of file diff --git a/updaters/ability.lua b/updaters/ability.lua index 348e7cf..df0703f 100644 --- a/updaters/ability.lua +++ b/updaters/ability.lua @@ -1,7 +1,9 @@ local Updater = {}; +local inventory = require('state.inventory'); +local player = require('state.player'); local AbilityRecastPointer = ashita.memory.find('FFXiMain.dll', 0, '894124E9????????8B46??6A006A00508BCEE8', 0x19, 0); -AbilityRecastPointer = ashita.memory.read_uint32(AbilityRecastPointer); +AbilityRecastPointer = ashita.memory.read_uint32(AbilityRecastPointer); local function ItemCost(updater, items) local containers = updater.Containers; @@ -28,11 +30,11 @@ local function ItemCost(updater, items) local itemCount = 0; for _,item in ipairs(items) do - local itemData = gInventory:GetItemData(item); + local itemData = inventory:GetItemData(item); if (itemData ~= nil) then for _,itemEntry in ipairs(itemData.Locations) do if (updater.Containers:contains(itemEntry.Container)) then - itemCount = itemCount + gInventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; + itemCount = itemCount + inventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; end end end @@ -294,7 +296,7 @@ end function Updater:Tick() --RecastReady will hold number of charges for charged abilities. local recastReady, recastDisplay = self.RecastFunction(self.Resource); - local abilityAvailable = gPlayer:KnowsAbility(self.Resource.Id); + local abilityAvailable = player:KnowsAbility(self.Resource.Id); local abilityCostDisplay, costMet = self:CostFunction(recastReady); self.State.Available = abilityAvailable; diff --git a/updaters/command.lua b/updaters/command.lua index af3374e..c05b86c 100644 --- a/updaters/command.lua +++ b/updaters/command.lua @@ -1,5 +1,7 @@ local Updater = {}; +local inventory = require('state.inventory'); + local function ItemCost(updater, items) local containers = updater.Containers; if (updater.Containers == nil) then @@ -25,11 +27,11 @@ local function ItemCost(updater, items) local itemCount = 0; for _,item in ipairs(items) do - local itemData = gInventory:GetItemData(item); + local itemData = inventory:GetItemData(item); if (itemData ~= nil) then for _,itemEntry in ipairs(itemData.Locations) do if (updater.Containers:contains(itemEntry.Container)) then - itemCount = itemCount + gInventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; + itemCount = itemCount + inventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; end end end diff --git a/updaters/item.lua b/updaters/item.lua index 466610f..79445a8 100644 --- a/updaters/item.lua +++ b/updaters/item.lua @@ -1,6 +1,7 @@ local Updater = {}; -local vanaOffset = 0x3C307D70; +local inventory = require('state.inventory'); +local vanaOffset = 0x3C307D70; local timePointer = ashita.memory.find('FFXiMain.dll', 0, '8B0D????????8B410C8B49108D04808D04808D04808D04C1C3', 2, 0); local function GetTimeUTC() @@ -31,11 +32,11 @@ end local function GetItemRecast(itemId) local containers = T{ 0, 3 }; local itemCount = 0; - local itemData = gInventory:GetItemData(itemId); + local itemData = inventory:GetItemData(itemId); if (itemData ~= nil) then for _,itemEntry in ipairs(itemData.Locations) do if (containers:contains(itemEntry.Container)) then - itemCount = itemCount + gInventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; + itemCount = itemCount + inventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; end end end @@ -46,13 +47,13 @@ end local function GetEquipmentRecast(itemResource) local containers = T{ 0, 8, 10, 11, 12, 13, 14, 15, 16 }; local itemCount = 0; - local itemData = gInventory:GetItemData(itemResource.Id); + local itemData = inventory:GetItemData(itemResource.Id); local lowestRecast = -1; if (itemData ~= nil) then local currentTime = GetTimeUTC(); for _,itemEntry in ipairs(itemData.Locations) do if (containers:contains(itemEntry.Container)) then - local item = gInventory:GetItemTable(itemEntry.Container, itemEntry.Index); + local item = inventory:GetItemTable(itemEntry.Container, itemEntry.Index); local useTime = (struct.unpack('L', item.Extra, 5) + vanaOffset) - currentTime; if (useTime < 0) then useTime = 0; diff --git a/updaters/spell.lua b/updaters/spell.lua index 1b280f7..ca7980d 100644 --- a/updaters/spell.lua +++ b/updaters/spell.lua @@ -1,5 +1,8 @@ local Updater = {}; +local inventory = require('state.inventory'); +local player = require('state.player'); +local skillchain = require('state.skillchain'); local ninjutsuCost = T{ [318] = T{ 2553, 2972 }, --Monomi: Ichi [319] = T{ 2555, 2973 }, --Aisha: Ichi @@ -71,11 +74,11 @@ local function ItemCost(updater, items) local itemCount = 0; for _,item in ipairs(items) do - local itemData = gInventory:GetItemData(item); + local itemData = inventory:GetItemData(item); if (itemData ~= nil) then for _,itemEntry in ipairs(itemData.Locations) do if (updater.Containers:contains(itemEntry.Container)) then - itemCount = itemCount + gInventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; + itemCount = itemCount + inventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; end end end @@ -87,11 +90,11 @@ end local function NinjutsuCost(updater, items) local itemCount = 0; for _,item in ipairs(items) do - local itemData = gInventory:GetItemData(item); + local itemData = inventory:GetItemData(item); if (itemData ~= nil) then for _,itemEntry in ipairs(itemData.Locations) do if (itemEntry.Container == 0) then - itemCount = itemCount + gInventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; + itemCount = itemCount + inventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; end end end @@ -222,11 +225,11 @@ local function CheckUnbridled(updater) end local function GetSpellAvailableGeneric(updater) - if not gPlayer:KnowsSpell(updater.Resource.Index) then + if not player:KnowsSpell(updater.Resource.Index) then return false, false; end - local jobData = gPlayer:GetJobData(); + local jobData = player:GetJobData(); if (jobData.MainJobLevel < updater.MainRequirement) and (jobData.SubJobLevel < updater.SubRequirement) then return false, false; end @@ -266,15 +269,15 @@ local function SubJobCheck(updater, jobData) end local function JobPointCheck(updater, jobData) - return (gPlayer:GetJobPointTotal(jobData.MainJob) >= updater.MainRequirement), true; + return (player:GetJobPointTotal(jobData.MainJob) >= updater.MainRequirement), true; end local function GetSpellAvailable(updater) - if not gPlayer:KnowsSpell(updater.Resource.Index) then + if not player:KnowsSpell(updater.Resource.Index) then return false, false; end - local jobData = gPlayer:GetJobData(); + local jobData = player:GetJobData(); local mainAvailable, mainAddendum = updater.MainJobCheck(updater, jobData); local subAvailable, subAddendum = SubJobCheck(updater, jobData); @@ -318,7 +321,7 @@ function Updater:Initialize(element, binding) self.CostFunction = ManaCost:bind1(self.Resource); end - local jobData = gPlayer:GetJobData(); + local jobData = player:GetJobData(); --Set impossible requirement.. self.MainRequirement = 999; @@ -405,12 +408,12 @@ function Updater:UpdateSkillchain() return; end - local resonation, skillchain = gSkillchain:GetSkillchainBySpell(target, self.Resource.Id); + local resonation, result = skillchain:GetSkillchainBySpell(target, self.Resource.Id); if (resonation == nil) or (resonation.WindowClose < os.clock()) then return; end - return { Name=skillchain, Open=(os.clock() > resonation.WindowOpen) }; + return { Name=result, Open=(os.clock() > resonation.WindowOpen) }; end return Updater; \ No newline at end of file diff --git a/updaters/weaponskill.lua b/updaters/weaponskill.lua index 0d829fa..f04c17f 100644 --- a/updaters/weaponskill.lua +++ b/updaters/weaponskill.lua @@ -1,5 +1,9 @@ local Updater = {}; +local inventory = require('state.inventory'); +local player = require('state.player'); +local skillchain = require('state.skillchain'); + local function ItemCost(updater, items) local containers = updater.Containers; if (updater.Containers == nil) then @@ -25,11 +29,11 @@ local function ItemCost(updater, items) local itemCount = 0; for _,item in ipairs(items) do - local itemData = gInventory:GetItemData(item); + local itemData = inventory:GetItemData(item); if (itemData ~= nil) then for _,itemEntry in ipairs(itemData.Locations) do if (updater.Containers:contains(itemEntry.Container)) then - itemCount = itemCount + gInventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; + itemCount = itemCount + inventory:GetItemTable(itemEntry.Container, itemEntry.Index).Count; end end end @@ -64,7 +68,7 @@ function Updater:Destroy() end function Updater:Tick() - local known = gPlayer:KnowsAbility(self.Resource.Id); + local known = player:KnowsAbility(self.Resource.Id); local activeSkillchain = self:UpdateSkillchain(); self.State.Available = known; @@ -93,12 +97,12 @@ function Updater:UpdateSkillchain() return; end - local resonation, skillchain = gSkillchain:GetSkillchain(target, self.Resource.Id); + local resonation, result = skillchain:GetSkillchain(target, self.Resource.Id); if (resonation == nil) or (resonation.WindowClose < os.clock()) then return; end - return { Name=skillchain, Open=(os.clock() > resonation.WindowOpen) }; + return { Name=result, Open=(os.clock() > resonation.WindowOpen) }; end return Updater; \ No newline at end of file From 29664a02cff4bb21c24f65bce596107b75993221 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:57:39 -0500 Subject: [PATCH 06/25] rework classic layout to suit new rendering --- element.lua | 20 +- resources/layouts/classicv2.lua | 399 ++++++++++++++++++++++++++++++++ 2 files changed, 409 insertions(+), 10 deletions(-) create mode 100644 resources/layouts/classicv2.lua diff --git a/element.lua b/element.lua index 55ba03e..d98a359 100644 --- a/element.lua +++ b/element.lua @@ -91,7 +91,7 @@ local vec_font_scale = ffi.new('D3DXVECTOR2', { 1.0, 1.0, }); function Element:Initialize() self.FontObjects = T{}; for _,entry in ipairs(textOrder) do - local data = self.Layout.Element[entry]; + local data = self.Layout[entry]; if data then local obj = gdi:create_object(data, true); obj:set_font_height(math.floor(data.font_height * gSettings.Scale)); @@ -162,16 +162,16 @@ function Element:Render(sprite) Frame = 1, Time = os.clock(); }; - elseif (os.clock() > (self.SkillchainAnimation.Time + layout.Skillchain.FrameDelay)) then + elseif (os.clock() > (self.SkillchainAnimation.Time + layout.SkillchainFrameLength)) then self.SkillchainAnimation.Frame = self.SkillchainAnimation.Frame + 1; - if (self.SkillchainAnimation.Frame > #layout.Skillchain.Frames) then + if (self.SkillchainAnimation.Frame > #layout.SkillchainFrames) then self.SkillchainAnimation.Frame = 1; end self.SkillchainAnimation.Time = os.clock(); end if (gSettings.ShowSkillchainIcon) and (self.Binding.ShowSkillchainIcon) then - icon = layout.SkillchainIcons[self.Skillchain.Name]; + icon = layout.Textures[self.Skillchain.Name]; end else self.SkillchainAnimation = nil; @@ -190,20 +190,20 @@ function Element:Render(sprite) --Draw skillchain animation if applicable.. if (self.SkillchainAnimation) and (gSettings.ShowSkillchainAnimation) and (self.Binding.ShowSkillchainAnimation) then - local component = layout.Skillchain.Frames[self.SkillchainAnimation.Frame]; + local component = layout.SkillchainFrames[self.SkillchainAnimation.Frame]; if component then - vec_position.x = positionX + layout.Skillchain.OffsetX; - vec_position.y = positionY + layout.Skillchain.OffsetY; + vec_position.x = positionX + layout.Icon.OffsetX; + vec_position.y = positionY + layout.Icon.OffsetY; sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); end end --Draw crossout if applicable.. if (gSettings.ShowCross) and (self.Binding.ShowCross) and (not self.State.Available) then - local component = layout.Cross; + local component = layout.Textures.Cross; if component then - vec_position.x = positionX + component.OffsetX; - vec_position.y = positionY + component.OffsetY; + vec_position.x = positionX + layout.Icon.OffsetX; + vec_position.y = positionY + layout.Icon.OffsetY; sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); end end diff --git a/resources/layouts/classicv2.lua b/resources/layouts/classicv2.lua new file mode 100644 index 0000000..af49df5 --- /dev/null +++ b/resources/layouts/classicv2.lua @@ -0,0 +1,399 @@ +local layout = { + --Single display, shows 8 macros when a trigger combination is pressed. + SingleDisplay = { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' + }, + + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, + + --Textures to be used by individual macro elements. + Textures = T{ + Cross = 'misc/cross.png', + Frame = 'misc/frame.png', + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + Buttons = 'misc/buttons.png', + Dpad = 'misc/dpad.png', + }, + + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, + Width = 44, + Height = 44, + File = 'misc/frame.png', + }, + + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + }, + + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, + + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, + + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, + + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + T{ + OffsetX = 69, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'Buttons', + }, + T{ + OffsetX = 243, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'Dpad', + }, + }, + + --Size of hitbox for entire element. + PanelWidth = 358, + PanelHeight = 168, + + --Default location, set later by scaling lib in this profile + DefaultX = 0, + DefaultY = 0, + + --[[ + Table of element positions. SingleDisplay has 8 elements. + Objects are ordered(according to default controller layout): + 1. Dpad Up + 2. Dpad Right + 3. Dpad Down + 4. Dpad Left + 5. Button Up + 6. Button Right + 7. Button Down + 8. Button Left + Must remain 8 objects. + ]]-- + Elements = T{ + { OffsetX = 58, OffsetY = 0 }, + { OffsetX = 116, OffsetY = 55 }, + { OffsetX = 58, OffsetY = 110 }, + { OffsetX = 0, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 0 }, + { OffsetX = 290, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 110 }, + { OffsetX = 174, OffsetY = 55 }, + }, + }, + + --Double display, for 16 macros simultaneously visible in default view. + DoubleDisplay = { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' + }, + + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, + + --Textures to be used by individual macro elements. + Textures = T{ + Cross = 'misc/cross.png', + Frame = 'misc/frame.png', + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + LeftButtons = 'misc/buttons.png', + LeftDpad = 'misc/dpad.png', + RightButtons = 'misc/buttons.png', + RightDpad = 'misc/dpad.png', + }, + + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, + Width = 44, + Height = 44, + File = 'misc/frame.png', + }, + + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + }, + + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, + + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, + + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, + + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + T{ + OffsetX = 69, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'LeftButtons', + }, + T{ + OffsetX = 243, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'LeftDpad', + }, + T{ + OffsetX = 457, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'RightButtons', + }, + T{ + OffsetX = 631, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'RightDpad', + }, + }, + + --Size of hitbox for entire element. + PanelWidth = 746, + PanelHeight = 168, + + --Default location, set later by scaling lib in this profile + DefaultX = 0, + DefaultY = 0, + + --[[ + Table of element positions. DoubleDisplay has 16 elements. + Objects are ordered(according to default controller layout): + 1. Dpad Up(L2) + 2. Dpad Right(L2) + 3. Dpad Down(L2) + 4. Dpad Left(L2) + 5. Button Up(L2) + 6. Button Right(L2) + 7. Button Down(L2) + 8. Button Left(L2) + 9. Dpad Up(R2) + 10. Dpad Right(R2) + 11. Dpad Down(R2) + 12. Dpad Left(R2) + 13. Button Up(R2) + 14. Button Right(R2) + 15. Button Down(R2) + 16. Button Left(R2) + ]]-- + Elements = T{ + { OffsetX = 58, OffsetY = 0 }, + { OffsetX = 116, OffsetY = 55 }, + { OffsetX = 58, OffsetY = 110 }, + { OffsetX = 0, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 0 }, + { OffsetX = 290, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 110 }, + { OffsetX = 174, OffsetY = 55 }, + { OffsetX = 446, OffsetY = 0 }, + { OffsetX = 504, OffsetY = 55 }, + { OffsetX = 446, OffsetY = 110 }, + { OffsetX = 388, OffsetY = 55 }, + { OffsetX = 620, OffsetY = 0 }, + { OffsetX = 678, OffsetY = 55 }, + { OffsetX = 620, OffsetY = 110 }, + { OffsetX = 562, OffsetY = 55 }, + }, + }, +}; + +local scaling = require('scaling'); +if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then + layout.SingleDisplay.DefaultX = 0; + layout.SingleDisplay.DefaultY = 0; + layout.DoubleDisplay.DefaultX = 0; + layout.DoubleDisplay.DefaultY = 0; +else + layout.SingleDisplay.DefaultX = (scaling.window.w - layout.SingleDisplay.PanelWidth) / 2; + layout.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + layout.SingleDisplay.PanelHeight); + layout.DoubleDisplay.DefaultX = (scaling.window.w - layout.DoubleDisplay.PanelWidth) / 2; + layout.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + layout.DoubleDisplay.PanelHeight); +end + +return layout; \ No newline at end of file From 03adf039dde31d8439d6763102e439dfb18cfa76 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 10 Nov 2023 17:59:32 -0500 Subject: [PATCH 07/25] draft of singledisplay --- controller.lua | 18 +- element.lua | 47 ++++- helpers.lua | 64 ++++++ initialize.lua => initializer.lua | 87 ++++----- resources/layouts/classicv2.lua | 24 ++- singledisplay.lua | 308 ++++++++++++----------------- square_manager.lua | 315 ------------------------------ tCrossBar.lua | 16 ++ texturecache.lua | 23 --- 9 files changed, 293 insertions(+), 609 deletions(-) create mode 100644 helpers.lua rename initialize.lua => initializer.lua (59%) delete mode 100644 square_manager.lua diff --git a/controller.lua b/controller.lua index ab6a565..f6fde1c 100644 --- a/controller.lua +++ b/controller.lua @@ -70,22 +70,6 @@ function controller:HandleInput(e) end end -local function LoadLayout(layoutName) - --Attempt to load layout file. - local layoutPaths = T{ - string.format('%sconfig/addons/%s/resources/controllers/%s.lua', AshitaCore:GetInstallPath(), addon.name, layoutName), - string.format('%saddons/%s/resources/controllers/%s.lua', AshitaCore:GetInstallPath(), addon.name, layoutName), - }; - - for _,path in ipairs(layoutPaths) do - local layout = LoadFile_s(path); - if (layout ~= nil) then - layout.Name = layoutName; - return layout; - end - end -end - local function InitializeControls() --Initialize any blank controls.. local changed = false; @@ -124,7 +108,7 @@ function controller:SetLayout(layout) self.XinputCB = false; end - self.Layout = LoadLayout(layout); + self.Layout = layout; if (self.Layout ~= nil) then InitializeControls(); diff --git a/element.lua b/element.lua index d98a359..fc80c1e 100644 --- a/element.lua +++ b/element.lua @@ -1,7 +1,7 @@ -local d3d = require('d3d8'); -local ffi = require('ffi'); -local gdi = require('gdifonts.include'); -local updaters = { +local d3d8 = require('d3d8'); +local ffi = require('ffi'); +local gdi = require('gdifonts.include'); +local updaters = { ['Ability'] = require('updaters.ability'), ['Command'] = require('updaters.command'), ['Empty'] = require('updaters.empty'), @@ -84,8 +84,17 @@ function Element:Destroy() self.Updater:Destroy(); end +function Element:HitTest(x, y) + local hitbox = self.HitBox; + if (x < hitbox.MinX) or (x > hitbox.MaxX) then + return false; + end + + return (y >= hitbox.MinY) and (y <= hitbox.MaxY); +end + local textOrder = T { 'Hotkey', 'Cost', 'Recast', 'Name' }; -local d3dwhite = d3d.D3DCOLOR_ARGB(255, 255, 255, 255); +local d3dwhite = d3d8.D3DCOLOR_ARGB(255, 255, 255, 255); local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); local vec_font_scale = ffi.new('D3DXVECTOR2', { 1.0, 1.0, }); function Element:Initialize() @@ -94,14 +103,24 @@ function Element:Initialize() local data = self.Layout[entry]; if data then local obj = gdi:create_object(data, true); - obj:set_font_height(math.floor(data.font_height * gSettings.Scale)); - obj.OffsetX = data.OffsetX * gSettings.Scale; - obj.OffsetY = data.OffsetY * gSettings.Scale; + obj.OffsetX = data.OffsetX; + obj.OffsetY = data.OffsetY; self.FontObjects[entry] = obj; end end end +function Element:SetPosition(position) + self.PositionX = position[1] + self.OffsetX; + self.PositionY = position[2] + self.OffsetY; + self.HitBox = { + MinX = self.PositionX + self.Layout.Icon.OffsetX, + MaxX = self.PositionX + self.Layout.Icon.OffsetX + self.Layout.Icon.Width, + MinY = self.PositionY + self.Layout.Icon.OffsetY, + MaxY = self.PositionY + self.Layout.Icon.OffsetY + self.Layout.Icon.Height, + }; +end + function Element:UpdateBinding(binding) if (binding == self.Binding) then return; @@ -183,7 +202,7 @@ function Element:Render(sprite) vec_position.y = positionY + layout.Icon.OffsetY; local opacity = d3dwhite; if (gSettings.ShowFade) and (self.Binding.ShowFade) and (not self.State.Ready) then - opacity = layout.Icon.FadeOpacity; + opacity = layout.FadeOpacity; end sprite:Draw(icon.Texture, icon.Rect, icon.Scale, nil, 0.0, vec_position, opacity); end @@ -208,6 +227,16 @@ function Element:Render(sprite) end end + --Draw trigger if applicable.. + if (gSettings.ShowTrigger) and (self.Binding.ShowTrigger) and (os.clock() < (self.Activation + gSettings.TriggerDuration)) then + local component = layout.Textures.Trigger; + if component then + vec_position.x = positionX + layout.Icon.OffsetX; + vec_position.y = positionY + layout.Icon.OffsetY; + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, layout.TriggerOpacity); + end + end + --Draw text elements.. for _,entry in ipairs(textOrder) do local setting = 'Show' .. entry; diff --git a/helpers.lua b/helpers.lua new file mode 100644 index 0000000..ee0598f --- /dev/null +++ b/helpers.lua @@ -0,0 +1,64 @@ +function GetImagePath(image, default) + if (string.sub(image, 1, 5) == 'ITEM:') then + return image; + end + + if (string.sub(image, 1, 7) == 'STATUS:') then + return image; + end + + local potentialPaths = T{ + image, + string.format('%sconfig/addons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), + string.format('%saddons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), + default or '', + string.format('%sconfig/addons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), + string.format('%saddons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), + }; + + for _,path in ipairs(potentialPaths) do + if (path ~= '') and (ashita.fs.exists(path)) then + return path; + end + end + + return nil; +end + +function GetResourcePath(resource) + local potentialPaths = T{ + resource, + string.format('%sconfig/addons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, resource), + string.format('%sconfig/addons/%s/resources/%s.lua', AshitaCore:GetInstallPath(), addon.name, resource), + string.format('%saddons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, resource), + string.format('%saddons/%s/resources/%s.lua', AshitaCore:GetInstallPath(), addon.name, resource) + }; + + for _,path in ipairs(potentialPaths) do + if (path ~= '') and (ashita.fs.exists(path)) then + return path; + end + end +end + +function LoadFile_s(filePath) + if not ashita.fs.exists(filePath) then + return nil; + end + + local success, loadError = loadfile(filePath); + if not success then + Error(string.format('Failed to load resource file: $H%s', filePath)); + Error(loadError); + return nil; + end + + local result, output = pcall(success); + if not result then + Error(string.format('Failed to execute resource file: $H%s', filePath)); + Error(loadError); + return nil; + end + + return output; +end \ No newline at end of file diff --git a/initialize.lua b/initializer.lua similarity index 59% rename from initialize.lua rename to initializer.lua index c01e8bb..4ed1655 100644 --- a/initialize.lua +++ b/initializer.lua @@ -1,57 +1,33 @@ -function Error(text) - local color = ('\30%c'):format(68); - local highlighted = color .. string.gsub(text, '$H', '\30\01\30\02'); - highlighted = string.gsub(highlighted, '$R', '\30\01' .. color); - print(chat.header(addon.name) .. highlighted .. '\30\01'); -end - - -function Message(text) - local color = ('\30%c'):format(106); - local highlighted = color .. string.gsub(text, '$H', '\30\01\30\02'); - highlighted = string.gsub(highlighted, '$R', '\30\01' .. color); - print(chat.header(addon.name) .. highlighted .. '\30\01'); -end - -function LoadFile_s(filePath) - if not ashita.fs.exists(filePath) then - return nil; - end - - local success, loadError = loadfile(filePath); - if not success then - Error(string.format('Failed to load resource file: $H%s', filePath)); - Error(loadError); - return nil; - end - - local result, output = pcall(success); - if not result then - Error(string.format('Failed to execute resource file: $H%s', filePath)); - Error(loadError); - return nil; - end - - return output; -end - --Initialize Classes.. require('state.inventory'); require('state.player'); require('state.skillchain'); --Initialize Globals.. +require('helpers'); gTextureCache = require('texturecache'); gBindingGUI = require('bindinggui'); gConfigGUI = require('configgui'); gController = require('controller'); gSingleDisplay = require('singledisplay'); gDoubleDisplay = require('doubledisplay'); - settings = require('settings'); + +--Create directories.. +local controllerConfigFolder = string.format('%sconfig/addons/%s/resources/controllers', AshitaCore:GetInstallPath(), addon.name); +if not ashita.fs.exists(controllerConfigFolder) then + ashita.fs.create_directory(controllerConfigFolder); +end +local layoutConfigFolder = string.format('%sconfig/addons/%s/resources/layouts', AshitaCore:GetInstallPath(), addon.name); +if not ashita.fs.exists(layoutConfigFolder) then + ashita.fs.create_directory(layoutConfigFolder); +end + +--Initialize settings.. local defaultSettings = T{ Layout = 'classic', - Scale = 1.0, + SingleScale = 1.0, + DoubleScale = 1.0, Controller = 'dualsense', BindMenuTimer = 1, TapTimer = 0.4, @@ -78,24 +54,33 @@ local defaultSettings = T{ HideWhileMap = true, DefaultSelectTarget = false, }; +gSettings = settings.load(defaultSettings); -local controllerConfigFolder = string.format('%sconfig/addons/%s/resources/controllers', AshitaCore:GetInstallPath(), addon.name); -if not ashita.fs.exists(controllerConfigFolder) then - ashita.fs.create_directory(controllerConfigFolder); -end +--Create exports.. +local Initializer = {}; -local layoutConfigFolder = string.format('%sconfig/addons/%s/resources/layouts', AshitaCore:GetInstallPath(), addon.name); -if not ashita.fs.exists(layoutConfigFolder) then - ashita.fs.create_directory(layoutConfigFolder); +function Initializer:ApplyController() + local controllerLayout = LoadFile_s(GetResourcePath('controllers/' .. gSettings.Controller)); + gController:SetLayout(controllerLayout); end -gSettings = settings.load(defaultSettings); -gController:SetLayout(gSettings.Controller); -gInterface:Initialize(gSettings.Layout); +function Initializer:ApplyLayout() + gSingleDisplay:Destroy(); + gDoubleDisplay:Destroy(); + local graphicsLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.Layout)); + if graphicsLayout then + gSingleDisplay:Initialize(graphicsLayout.SingleDisplay, gSettings.SingleScale); + gDoubleDisplay:Initialize(graphicsLayout.DoubleDisplay, gSettings.DoubleScale); + end +end settings.register('settings', 'settings_update', function(newSettings) gSettings = newSettings; - gController:SetLayout(gSettings.Controller); + Initializer:ApplyController(); + Initializer:ApplyLayout(); end); -return true; \ No newline at end of file +Initializer:ApplyController(); +Initializer:ApplyLayout(); + +return Initializer; \ No newline at end of file diff --git a/resources/layouts/classicv2.lua b/resources/layouts/classicv2.lua index af49df5..a25dbe9 100644 --- a/resources/layouts/classicv2.lua +++ b/resources/layouts/classicv2.lua @@ -38,13 +38,18 @@ local layout = { Dpad = 'misc/dpad.png', }, + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + + --Opacity of the overlay shown when a macro is activated. [0-255] + TriggerOpacity = 128, + --The border of each macro element. Offsets are relative to the macro element's placement. Frame = { OffsetX = 0, OffsetY = 0, Width = 44, Height = 44, - File = 'misc/frame.png', }, --The inner icon for each macro element. Offsets are relative to the macro element's placement. @@ -53,8 +58,6 @@ local layout = { OffsetY = 2, Width = 40, Height = 40, - --Transparency to be used when bound macro's action is not known. [0-255] - FadeOpacity = 128, }, --The text object to display macro or hotkey activation. @@ -126,7 +129,7 @@ local layout = { --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. FixedObjects = T{ - T{ + T{ OffsetX = 69, OffsetY = 57, Width = 40, @@ -143,8 +146,10 @@ local layout = { }, --Size of hitbox for entire element. - PanelWidth = 358, - PanelHeight = 168, + Panel = { + Width = 358, + Height = 168, + }, --Default location, set later by scaling lib in this profile DefaultX = 0, @@ -222,7 +227,6 @@ local layout = { OffsetY = 0, Width = 44, Height = 44, - File = 'misc/frame.png', }, --The inner icon for each macro element. Offsets are relative to the macro element's placement. @@ -335,8 +339,10 @@ local layout = { }, --Size of hitbox for entire element. - PanelWidth = 746, - PanelHeight = 168, + Panel = { + Width = 746, + Height = 168, + }, --Default location, set later by scaling lib in this profile DefaultX = 0, diff --git a/singledisplay.lua b/singledisplay.lua index 5fbed9c..96b6379 100644 --- a/singledisplay.lua +++ b/singledisplay.lua @@ -1,4 +1,7 @@ +local d3d8 = require('d3d8'); local element = require('element'); +local ffi = require('ffi'); +local player = require('state.player'); --Thanks to Velyn for the event system and interface hidden signatures! local pGameMenu = ashita.memory.find('FFXiMain.dll', 0, "8B480C85C974??8B510885D274??3B05", 16, 0); local pEventSystem = ashita.memory.find('FFXiMain.dll', 0, "A0????????84C0741AA1????????85C0741166A1????????663B05????????0F94C0C3", 0, 0); @@ -52,124 +55,110 @@ local function GetButtonAlias(comboIndex, buttonIndex) return string.format('%s:%d', macroComboBinds[comboIndex], buttonIndex); end +local function GetDimensions(layout, key) + for _,entry in ipairs(layout.FixedObjects) do + if (key == entry.Texture) then + return { Width=entry.Width, Height=entry.Height }; + end + end + + if (key == 'Frame') then + return { Width=layout.Frame.Width, Height=layout.Frame.Height }; + end + + return { Width=layout.Icon.Width, Height=layout.Icon.Height }; +end + local SingleDisplay = {}; -SingleDisplay.Elements = T{}; -function SingleDisplay:Initialize(layout) +function SingleDisplay:Initialize(layout, scale) self.Layout = layout; - self.Hidden = false; - - self.SinglePrimitives = T{}; - for _,primitiveInfo in ipairs(layout.SingleDisplay.Primitives) do - local prim = { - Object = primitives.new(primitiveInfo), - OffsetX = primitiveInfo.OffsetX, - OffsetY = primitiveInfo.OffsetY, - }; - self.SinglePrimitives:append(prim); - end - self.DoublePrimitives = T{}; - for _,primitiveInfo in ipairs(layout.DoubleDisplay.Primitives) do - local prim = { - Object = primitives.new(primitiveInfo), - OffsetX = primitiveInfo.OffsetX, - OffsetY = primitiveInfo.OffsetY, - }; - self.DoublePrimitives:append(prim); + --Prescale offsets and hitboxes.. + for _,singleTable in ipairs(T{layout, layout.FixedObjects, layout.Elements}) do + for _,tableEntry in pairs(singleTable) do + if (type(tableEntry) == 'table') then + if (tableEntry.OffsetX ~= nil) then + tableEntry.OffsetX = tableEntry.OffsetX * scale; + tableEntry.OffsetY = tableEntry.OffsetY * scale; + end + if (tableEntry.Width ~= nil) then + tableEntry.Width = tableEntry.Width * scale; + tableEntry.Height = tableEntry.Height * scale; + end + end + end + end + + --Prepare textures for efficient rendering.. + for _,singleTable in ipairs(T{layout.SkillchainFrames, layout.Textures}) do + for key,path in pairs(singleTable) do + local tx = gTextureCache:GetTexture(path); + if tx then + local dimensions = GetDimensions(key); + + local preparedTexture = {}; + preparedTexture.Texture = tx.Texture; + preparedTexture.Rect = ffi.new('RECT', { 0, 0, tx.Width, tx.Height }); + preparedTexture.Scale = ffi.new('D3DXVECTOR2', { dimensions.Width / tx.Width, dimensions.Height / tx.Height }); + singleTable[key] = preparedTexture; + else + singleTable[key] = nil; + end + end end - self.Squares = T{ - [1] = {}, - [2] = {}, - }; + layout.FadeOpacity = d3d8.D3DCOLOR_ARGB(layout.FadeOpacity, 255, 255, 255); + layout.TriggerOpacity = d3d8.D3DCOLOR_ARGB(layout.TriggerOpacity, 255, 255, 255); + self.ElementGroups = T{}; - local count = 0; - self.DefaultSquares = T{}; - for _,squareInfo in ipairs(layout.DoubleDisplay.Squares) do - local buttonIndex = (count < 8) and (count + 1) or (count - 7); - local tableIndex = (count < 8) and 1 or 2; - - local singlePointer = ffi.cast('AbilitySquareState_t*', singleStruct + structOffset + (structWidth * (buttonIndex - 1))); - local doublePointer = ffi.cast('AbilitySquareState_t*', doubleStruct + structOffset + (structWidth * count)); - - local newSquare = square:New(doublePointer, GetButtonAlias(tableIndex, buttonIndex)); - newSquare.SinglePointer = singlePointer; - newSquare.DoublePointer = doublePointer; - - count = count + 1; - newSquare.MinX = squareInfo.OffsetX + layout.DoubleDisplay.ImageObjects.Frame.OffsetX; - newSquare.MaxX = newSquare.MinX + layout.DoubleDisplay.ImageObjects.Frame.Width; - newSquare.MinY = squareInfo.OffsetY + layout.DoubleDisplay.ImageObjects.Frame.OffsetY; - newSquare.MaxY = newSquare.MinY + layout.DoubleDisplay.ImageObjects.Frame.Height; - self.Squares[tableIndex][buttonIndex] = newSquare; - end - for i = 3,6 do - self.Squares[i] = T{}; - count = 0; - for _,squareInfo in ipairs(layout.SingleDisplay.Squares) do - local buttonIndex = count + 1; - local singlePointer = ffi.cast('AbilitySquareState_t*', singleStruct + structOffset + (structWidth * count)); - local newSquare = square:New(singlePointer, GetButtonAlias(i, buttonIndex)); - newSquare.MinX = squareInfo.OffsetX + layout.SingleDisplay.ImageObjects.Frame.OffsetX; - newSquare.MaxX = newSquare.MinX + layout.SingleDisplay.ImageObjects.Frame.Width; - newSquare.MinY = squareInfo.OffsetY + layout.SingleDisplay.ImageObjects.Frame.OffsetY; - newSquare.MaxY = newSquare.MinY + layout.SingleDisplay.ImageObjects.Frame.Height; - self.Squares[i][buttonIndex] = newSquare; - count = count + 1; + for group = 1,6 do + self.ElementGroups[group] = T{}; + for macro = 1,8 do + local newElement = element:New(GetButtonAlias(group, macro), layout); + newElement.OffsetX = layout.Elements[macro].OffsetX; + newElement.OffsetY = layout.Elements[macro].OffsetY; + newElement:SetPosition(gSettings.Position[gSettings.Layout].SingleDisplay); + self.ElementGroups[group]:append(newElement); end end -end -function SquareManager:GetSquareByButton(macroState, macroIndex) - local squareSet = self.Squares[macroState]; - if (squareSet ~= nil) then - local square = squareSet[macroIndex]; - if (square ~= nil) then - return square; + if (self.Sprite == nil) then + local sprite = ffi.new('ID3DXSprite*[1]'); + if (ffi.C.D3DXCreateSprite(d3d8.get_device(), self.Sprite) == ffi.C.S_OK) then + self.Sprite = d3d8.gc_safe_release(ffi.cast('ID3DXSprite*', sprite[0])); + else + Error('Failed to create Sprite in SingleDisplay:Initialize.'); end end end -function SquareManager:Activate(macroState, button) - local square = self:GetSquareByButton(macroState, button); - if square then - square:Activate(); - end +function SingleDisplay:Destroy() + self.Layout = nil; + self.ElementGroups = T{}; end -function SquareManager:Destroy() - for _,squareSet in ipairs(self.Squares) do - for _,square in ipairs(squareSet) do - square:Destroy(); +function SingleDisplay:GetElementByMacro(macroState, macroIndex) + local group = self.ElementGroups[macroState]; + if (group ~= nil) then + local element = group[macroIndex]; + if (element ~= nil) then + return element; end end - - if (type(self.SinglePrimitives) == 'table') then - for _,primitive in ipairs(self.SinglePrimitives) do - primitive.Object:destroy(); - end - self.SinglePrimitives = nil; - end - if (type(self.DoublePrimitives) == 'table') then - for _,primitive in ipairs(self.DoublePrimitives) do - primitive.Object:destroy(); - end - self.DoublePrimitives = nil; - end - - self.SingleStruct = nil; - self.DoubleStruct = nil; end -function SquareManager:GetHidden() - if (self.SingleStruct == nil) or (self.DoubleStruct == nil) then - return true; +function SingleDisplay:Activate(macroState, macroIndex) + local element = self:GetElementByMacro(macroState, macroIndex); + if element then + element:Activate(); end +end +local function GetHidden() if (gSettings.HideWhileZoning) then - if (gPlayer:GetLoggedIn() == false) then + if (player:GetLoggedIn() == false) then return true; end end @@ -193,117 +182,66 @@ function SquareManager:GetHidden() return false; end -function SquareManager:HidePrimitives(primitives) - for _,primitive in ipairs(primitives) do - primitive.Object.visible = false; +local d3dwhite = d3d8.D3DCOLOR_ARGB(255, 255, 255, 255); +local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); +function SingleDisplay:Render(macroState) + if GetHidden() or (self.Sprite == nil) or (macroState == 0) then + return; end -end -function SquareManager:HitTest(x, y) - local pos, width, height, type; - if (self.DoubleDisplay == true) then - pos = gSettings.Position[gSettings.Layout].DoubleDisplay; - width = self.Layout.DoubleDisplay.PanelWidth; - height = self.Layout.DoubleDisplay.PanelHeight; - type = 'DoubleDisplay'; - elseif (self.SingleDisplay == true) then - pos = gSettings.Position[gSettings.Layout].SingleDisplay; - width = self.Layout.SingleDisplay.PanelWidth; - height = self.Layout.SingleDisplay.PanelHeight; - type = 'SingleDisplay'; + local pos = gSettings.Position[gSettings.Layout].SingleDisplay; + local sprite = self.Sprite; + sprite:Begin(); + + for _,object in ipairs(self.Layout.FixedObjects) do + local component = self.Layout.Textures[object.Texture]; + vec_position.x = pos[1] + object.OffsetX; + vec_position.y = pos[2] + object.OffsetY; + sprite:Draw(object.Texture, object.Rect, object.Scale, nil, 0.0, vec_position, d3dwhite); end - if (pos ~= nil) then - if (x >= pos[1]) and (y >= pos[2]) then - local offsetX = x - pos[1]; - local offsetY = y - pos[2]; - if (offsetX < width) and (offsetY < height) then - return true, type; - end + local group = self.ElementGroups[macroState]; + if group then + for _,element in ipairs(group) do + element:Render(sprite); end end - - return false; + sprite:End(); end -function SquareManager:Tick() - self.SingleDisplay = false; - self.DoubleDisplay = false; - - if (self:GetHidden()) then - self:HidePrimitives(self.SinglePrimitives); - self:HidePrimitives(self.DoublePrimitives); - return; +function SingleDisplay:HitTest(x, y) + local pos = gSettings.Position[gSettings.Layout].SingleDisplay; + if (x < pos[1]) or (y < pos[2]) then + return false; end - - local macroState = gController:GetMacroState(); - if (gBindingGUI:GetActive()) then - macroState = gBindingGUI:GetMacroState(); + if (x > (pos[1] + self.Layout.Panel.Width)) then + return false; end - if (macroState == 0) then - if (gSettings.ShowDoubleDisplay) then - self.DoubleDisplay = true; - end - elseif (macroState < 3) then - if (gSettings.SwapToSingleDisplay) then - self.SingleDisplay = true; - else - self.DoubleDisplay = true; - end - else - self.SingleDisplay = true; + if (y > (pos[2] + self.Layout.Panel.Height)) then + return false; end - if (self.SingleDisplay) then - for _,squareClass in ipairs(self.Squares[macroState]) do - if (macroState < 3) then - squareClass.StructPointer = squareClass.SinglePointer; - squareClass.Updater.StructPointer = squareClass.SinglePointer; + local selectedElement = 0; + local group = self.ElementGroups[1]; + if group then + for index,element in ipairs(group) do + if (element:HitTest(x, y)) then + selectedElement = index; end - squareClass:Update(); end - local pos = gSettings.Position[gSettings.Layout].SingleDisplay; - self.SingleStruct.PositionX = pos[1]; - self.SingleStruct.PositionY = pos[2]; - self.SingleStruct.Render = 1; - self:HidePrimitives(self.DoublePrimitives); - self:UpdatePrimitives(self.SinglePrimitives, pos); - elseif (self.DoubleDisplay) then - for _,tableIndex in ipairs(T{1, 2}) do - for _,squareClass in ipairs(self.Squares[tableIndex]) do - squareClass.StructPointer = squareClass.DoublePointer; - squareClass.Updater.StructPointer = squareClass.DoublePointer; - squareClass:Update(); - end - end - local pos = gSettings.Position[gSettings.Layout].DoubleDisplay; - self.DoubleStruct.PositionX = pos[1]; - self.DoubleStruct.PositionY = pos[2]; - self.DoubleStruct.Render = 1; - self:HidePrimitives(self.SinglePrimitives); - self:UpdatePrimitives(self.DoublePrimitives, pos); - else - self:HidePrimitives(self.SinglePrimitives); - self:HidePrimitives(self.DoublePrimitives); end -end -function SquareManager:UpdateBindings(bindings) - for comboKey,squareSet in ipairs(self.Squares) do - for buttonKey,square in ipairs(squareSet) do - square:UpdateBinding(bindings[GetButtonAlias(comboKey, buttonKey)]); - end - end + return true, selectedElement; end -function SquareManager:UpdatePrimitives(primitives, position) - for _,primitive in ipairs(primitives) do - primitive.Object.position_x = position[1] + primitive.OffsetX; - primitive.Object.position_y = position[2] + primitive.OffsetY; - primitive.Object.visible = true; +function SingleDisplay:UpdateBindings(bindings) + for macroState,group in ipairs(self.ElementGroups) do + for macroIndex,element in ipairs(group) do + element:UpdateBinding(bindings[GetButtonAlias(macroState, macroIndex)]); + end end end -return SquareManager; \ No newline at end of file +return SingleDisplay; \ No newline at end of file diff --git a/square_manager.lua b/square_manager.lua deleted file mode 100644 index d06bae9..0000000 --- a/square_manager.lua +++ /dev/null @@ -1,315 +0,0 @@ -local square = require('square'); -local primitives = require('primitives'); -local structOffset = 12; -local structWidth = 1156; - ---Thanks to Velyn for the event system and interface hidden signatures! -local pGameMenu = ashita.memory.find('FFXiMain.dll', 0, "8B480C85C974??8B510885D274??3B05", 16, 0); -local pEventSystem = ashita.memory.find('FFXiMain.dll', 0, "A0????????84C0741AA1????????85C0741166A1????????663B05????????0F94C0C3", 0, 0); -local pInterfaceHidden = ashita.memory.find('FFXiMain.dll', 0, "8B4424046A016A0050B9????????E8????????F6D81BC040C3", 0, 0); - -local function GetMenuName() - local subPointer = ashita.memory.read_uint32(pGameMenu); - local subValue = ashita.memory.read_uint32(subPointer); - if (subValue == 0) then - return ''; - end - local menuHeader = ashita.memory.read_uint32(subValue + 4); - local menuName = ashita.memory.read_string(menuHeader + 0x46, 16); - return string.gsub(menuName, '\x00', ''); -end - -local function GetEventSystemActive() - if (pEventSystem == 0) then - return false; - end - local ptr = ashita.memory.read_uint32(pEventSystem + 1); - if (ptr == 0) then - return false; - end - - return (ashita.memory.read_uint8(ptr) == 1); - -end - -local function GetInterfaceHidden() - if (pEventSystem == 0) then - return false; - end - local ptr = ashita.memory.read_uint32(pInterfaceHidden + 10); - if (ptr == 0) then - return false; - end - - return (ashita.memory.read_uint8(ptr + 0xB4) == 1); -end - -local function GetButtonAlias(comboIndex, buttonIndex) - local macroComboBinds = { - [1] = 'LT', - [2] = 'RT', - [3] = 'LTRT', - [4] = 'RTLT', - [5] = 'LT2', - [6] = 'RT2' - }; - return string.format('%s:%d', macroComboBinds[comboIndex], buttonIndex); -end - -local SquareManager = {}; -SquareManager.Squares = T{}; - -function SquareManager:Initialize(layout, singleStruct, doubleStruct) - self.SingleStruct = ffi.cast('AbilitySquarePanelState_t*', singleStruct); - self.DoubleStruct = ffi.cast('AbilitySquarePanelState_t*', doubleStruct); - self.Layout = layout; - self.Hidden = false; - - self.SinglePrimitives = T{}; - for _,primitiveInfo in ipairs(layout.SingleDisplay.Primitives) do - local prim = { - Object = primitives.new(primitiveInfo), - OffsetX = primitiveInfo.OffsetX, - OffsetY = primitiveInfo.OffsetY, - }; - self.SinglePrimitives:append(prim); - end - - self.DoublePrimitives = T{}; - for _,primitiveInfo in ipairs(layout.DoubleDisplay.Primitives) do - local prim = { - Object = primitives.new(primitiveInfo), - OffsetX = primitiveInfo.OffsetX, - OffsetY = primitiveInfo.OffsetY, - }; - self.DoublePrimitives:append(prim); - end - - self.Squares = T{ - [1] = {}, - [2] = {}, - }; - - - local count = 0; - self.DefaultSquares = T{}; - for _,squareInfo in ipairs(layout.DoubleDisplay.Squares) do - local buttonIndex = (count < 8) and (count + 1) or (count - 7); - local tableIndex = (count < 8) and 1 or 2; - - local singlePointer = ffi.cast('AbilitySquareState_t*', singleStruct + structOffset + (structWidth * (buttonIndex - 1))); - local doublePointer = ffi.cast('AbilitySquareState_t*', doubleStruct + structOffset + (structWidth * count)); - - local newSquare = square:New(doublePointer, GetButtonAlias(tableIndex, buttonIndex)); - newSquare.SinglePointer = singlePointer; - newSquare.DoublePointer = doublePointer; - - count = count + 1; - newSquare.MinX = squareInfo.OffsetX + layout.DoubleDisplay.ImageObjects.Frame.OffsetX; - newSquare.MaxX = newSquare.MinX + layout.DoubleDisplay.ImageObjects.Frame.Width; - newSquare.MinY = squareInfo.OffsetY + layout.DoubleDisplay.ImageObjects.Frame.OffsetY; - newSquare.MaxY = newSquare.MinY + layout.DoubleDisplay.ImageObjects.Frame.Height; - self.Squares[tableIndex][buttonIndex] = newSquare; - end - for i = 3,6 do - self.Squares[i] = T{}; - count = 0; - for _,squareInfo in ipairs(layout.SingleDisplay.Squares) do - local buttonIndex = count + 1; - local singlePointer = ffi.cast('AbilitySquareState_t*', singleStruct + structOffset + (structWidth * count)); - local newSquare = square:New(singlePointer, GetButtonAlias(i, buttonIndex)); - newSquare.MinX = squareInfo.OffsetX + layout.SingleDisplay.ImageObjects.Frame.OffsetX; - newSquare.MaxX = newSquare.MinX + layout.SingleDisplay.ImageObjects.Frame.Width; - newSquare.MinY = squareInfo.OffsetY + layout.SingleDisplay.ImageObjects.Frame.OffsetY; - newSquare.MaxY = newSquare.MinY + layout.SingleDisplay.ImageObjects.Frame.Height; - self.Squares[i][buttonIndex] = newSquare; - count = count + 1; - end - end -end - -function SquareManager:GetSquareByButton(macroState, macroIndex) - local squareSet = self.Squares[macroState]; - if (squareSet ~= nil) then - local square = squareSet[macroIndex]; - if (square ~= nil) then - return square; - end - end -end - -function SquareManager:Activate(macroState, button) - local square = self:GetSquareByButton(macroState, button); - if square then - square:Activate(); - end -end - -function SquareManager:Destroy() - for _,squareSet in ipairs(self.Squares) do - for _,square in ipairs(squareSet) do - square:Destroy(); - end - end - - if (type(self.SinglePrimitives) == 'table') then - for _,primitive in ipairs(self.SinglePrimitives) do - primitive.Object:destroy(); - end - self.SinglePrimitives = nil; - end - if (type(self.DoublePrimitives) == 'table') then - for _,primitive in ipairs(self.DoublePrimitives) do - primitive.Object:destroy(); - end - self.DoublePrimitives = nil; - end - - self.SingleStruct = nil; - self.DoubleStruct = nil; -end - -function SquareManager:GetHidden() - if (self.SingleStruct == nil) or (self.DoubleStruct == nil) then - return true; - end - - if (gSettings.HideWhileZoning) then - if (gPlayer:GetLoggedIn() == false) then - return true; - end - end - - if (gSettings.HideWhileCutscene) then - if (GetEventSystemActive()) then - return true; - end - end - - if (gSettings.HideWhileMap) then - if (string.match(GetMenuName(), 'map')) then - return true; - end - end - - if (GetInterfaceHidden()) then - return true; - end - - return false; -end - -function SquareManager:HidePrimitives(primitives) - for _,primitive in ipairs(primitives) do - primitive.Object.visible = false; - end -end - -function SquareManager:HitTest(x, y) - local pos, width, height, type; - if (self.DoubleDisplay == true) then - pos = gSettings.Position[gSettings.Layout].DoubleDisplay; - width = self.Layout.DoubleDisplay.PanelWidth; - height = self.Layout.DoubleDisplay.PanelHeight; - type = 'DoubleDisplay'; - elseif (self.SingleDisplay == true) then - pos = gSettings.Position[gSettings.Layout].SingleDisplay; - width = self.Layout.SingleDisplay.PanelWidth; - height = self.Layout.SingleDisplay.PanelHeight; - type = 'SingleDisplay'; - end - - if (pos ~= nil) then - if (x >= pos[1]) and (y >= pos[2]) then - local offsetX = x - pos[1]; - local offsetY = y - pos[2]; - if (offsetX < width) and (offsetY < height) then - return true, type; - end - end - end - - return false; -end - -function SquareManager:Tick() - self.SingleDisplay = false; - self.DoubleDisplay = false; - - if (self:GetHidden()) then - self:HidePrimitives(self.SinglePrimitives); - self:HidePrimitives(self.DoublePrimitives); - return; - end - - - local macroState = gController:GetMacroState(); - if (gBindingGUI:GetActive()) then - macroState = gBindingGUI:GetMacroState(); - end - - if (macroState == 0) then - if (gSettings.ShowDoubleDisplay) then - self.DoubleDisplay = true; - end - elseif (macroState < 3) then - if (gSettings.SwapToSingleDisplay) then - self.SingleDisplay = true; - else - self.DoubleDisplay = true; - end - else - self.SingleDisplay = true; - end - - if (self.SingleDisplay) then - for _,squareClass in ipairs(self.Squares[macroState]) do - if (macroState < 3) then - squareClass.StructPointer = squareClass.SinglePointer; - squareClass.Updater.StructPointer = squareClass.SinglePointer; - end - squareClass:Update(); - end - local pos = gSettings.Position[gSettings.Layout].SingleDisplay; - self.SingleStruct.PositionX = pos[1]; - self.SingleStruct.PositionY = pos[2]; - self.SingleStruct.Render = 1; - self:HidePrimitives(self.DoublePrimitives); - self:UpdatePrimitives(self.SinglePrimitives, pos); - elseif (self.DoubleDisplay) then - for _,tableIndex in ipairs(T{1, 2}) do - for _,squareClass in ipairs(self.Squares[tableIndex]) do - squareClass.StructPointer = squareClass.DoublePointer; - squareClass.Updater.StructPointer = squareClass.DoublePointer; - squareClass:Update(); - end - end - local pos = gSettings.Position[gSettings.Layout].DoubleDisplay; - self.DoubleStruct.PositionX = pos[1]; - self.DoubleStruct.PositionY = pos[2]; - self.DoubleStruct.Render = 1; - self:HidePrimitives(self.SinglePrimitives); - self:UpdatePrimitives(self.DoublePrimitives, pos); - else - self:HidePrimitives(self.SinglePrimitives); - self:HidePrimitives(self.DoublePrimitives); - end -end - -function SquareManager:UpdateBindings(bindings) - for comboKey,squareSet in ipairs(self.Squares) do - for buttonKey,square in ipairs(squareSet) do - square:UpdateBinding(bindings[GetButtonAlias(comboKey, buttonKey)]); - end - end -end - -function SquareManager:UpdatePrimitives(primitives, position) - for _,primitive in ipairs(primitives) do - primitive.Object.position_x = position[1] + primitive.OffsetX; - primitive.Object.position_y = position[2] + primitive.OffsetY; - primitive.Object.visible = true; - end -end - -return SquareManager; \ No newline at end of file diff --git a/tCrossBar.lua b/tCrossBar.lua index 42b34fb..3f71d1c 100644 --- a/tCrossBar.lua +++ b/tCrossBar.lua @@ -27,8 +27,24 @@ addon.link = 'https://ashitaxi.com/'; require('common'); local gdi = require('gdifonts.include'); +gInitializer = require('initializer'); local clickTarget; +function Error(text) + local color = ('\30%c'):format(68); + local highlighted = color .. string.gsub(text, '$H', '\30\01\30\02'); + highlighted = string.gsub(highlighted, '$R', '\30\01' .. color); + print(chat.header(addon.name) .. highlighted .. '\30\01'); +end + + +function Message(text) + local color = ('\30%c'):format(106); + local highlighted = color .. string.gsub(text, '$H', '\30\01\30\02'); + highlighted = string.gsub(highlighted, '$R', '\30\01' .. color); + print(chat.header(addon.name) .. highlighted .. '\30\01'); +end + ashita.events.register('load', 'load_cb', function () gdi:set_auto_render(false); require('initialize'); diff --git a/texturecache.lua b/texturecache.lua index 5e727bc..2692e56 100644 --- a/texturecache.lua +++ b/texturecache.lua @@ -6,29 +6,6 @@ TextureCache.ItemCache = {}; TextureCache.ImageCache = {}; TextureCache.StatusCache = {}; -local function GetImagePath(image, default) - if (string.sub(image, 1, 5) == 'ITEM:') then - return image; - end - - local potentialPaths = T{ - image, - string.format('%sconfig/addons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), - string.format('%saddons/%s/resources/%s', AshitaCore:GetInstallPath(), addon.name, image), - default or '', - string.format('%sconfig/addons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), - string.format('%saddons/%s/resources/misc/unknown.png', AshitaCore:GetInstallPath(), addon.name), - }; - - for _,path in ipairs(potentialPaths) do - if (path ~= '') and (ashita.fs.exists(path)) then - return path; - end - end - - return nil; -end - function TextureCache:GetTexture(file) if (string.sub(file, 1, 5) == 'ITEM:') then local itemId = tonumber(string.sub(file, 6)); From 1cbf1d52ada846c3a069dc594f035d8f33feaf1d Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Sat, 11 Nov 2023 11:57:48 -0500 Subject: [PATCH 08/25] more progress on new renderer --- bindinggui.lua | 45 +++--- bindings.lua | 7 +- callbacks.lua | 112 +++++++++++++++ commands.lua | 17 +++ configgui.lua | 158 ++++++++++++++++----- controller.lua | 37 ++--- doubledisplay.lua | 146 ++++++++++++++++++++ element.lua | 18 +-- initializer.lua | 148 +++++++++++++++++--- resources/layouts/classicdouble.lua | 206 ++++++++++++++++++++++++++++ resources/layouts/classicsingle.lua | 175 +++++++++++++++++++++++ singledisplay.lua | 175 ++++++----------------- state/player.lua | 1 + tCrossBar.lua | 72 +--------- texturecache.lua | 6 + updaters/ability.lua | 5 +- 16 files changed, 1017 insertions(+), 311 deletions(-) create mode 100644 callbacks.lua create mode 100644 commands.lua create mode 100644 doubledisplay.lua create mode 100644 resources/layouts/classicdouble.lua create mode 100644 resources/layouts/classicsingle.lua diff --git a/bindinggui.lua b/bindinggui.lua index 5ca1b22..feb1eac 100644 --- a/bindinggui.lua +++ b/bindinggui.lua @@ -1,5 +1,9 @@ local d3d8 = require('d3d8'); local d3d8_device = d3d8.get_device(); +local ffi = require('ffi'); +local imgui = require('imgui'); +local inventory = require('state.inventory'); +local player = require('state.player'); local header = { 1.0, 0.75, 0.55, 1.0 }; local activeHeader = { 0.5, 1.0, 0.5, 1.0 }; local state = { IsOpen={ false } }; @@ -110,25 +114,6 @@ local function DecrementCombo(varName) end end -local function DrawMacroImage() - local posY = imgui.GetCursorPosY(); - local layout = gInterface:GetLayout(); - local width = 32; - local height = 32; - if layout then - width = layout.ImageObjects.Icon.Width; - height = layout.ImageObjects.Icon.Height; - end - if (state.Texture ~= nil) then - local posX = (253 - width) / 2; - imgui.SetCursorPos({ posX, posY }); - imgui.Image(tonumber(ffi.cast("uint32_t", state.Texture)), - { width, height }, - { 0, 0 }, { 1, 1 }, { 1, 1, 1, 1 }, { 0, 0, 0, 0 }); - end - imgui.SetCursorPos({imgui.GetCursorPosX(), posY + height}); -end - local function UpdateMacroImage() state.Texture = nil; if (state.MacroImage == nil) then @@ -202,7 +187,7 @@ Setup.Item = function(skipUpdate) local bags = T{0, 3}; for _,bag in ipairs(bags) do for i = 1,80 do - local item = gInventory:GetItemTable(bag, i); + local item = inventory:GetItemTable(bag, i); if (item ~= nil) then local res = resMgr:GetItemById(item.Id); if (res ~= nil) and (bit.band(res.Flags, 0x200) == 0x200) then @@ -217,7 +202,7 @@ Setup.Item = function(skipUpdate) bags = T{ 0, 8, 10, 11, 12, 13, 14, 15, 16 }; for _,bag in ipairs(bags) do for i = 1,80 do - local item = gInventory:GetItemTable(bag, i); + local item = inventory:GetItemTable(bag, i); if (item ~= nil) then local res = resMgr:GetItemById(item.Id); if (res ~= nil) and (bit.band(res.Flags, 0x400) == 0x400) then @@ -272,7 +257,7 @@ Setup.Spell = function(skipUpdate) local hasSpell = false; local jpMask = res.JobPointMask; if (bit.band(bit.rshift(jpMask, mainJob), 1) == 1) then - if (mainJobLevel == 99) and (gPlayer:GetJobPointTotal(mainJob) >= levelRequired[mainJob + 1]) then + if (mainJobLevel == 99) and (player:GetJobPointTotal(mainJob) >= levelRequired[mainJob + 1]) then hasSpell = true; end elseif (levelRequired[mainJob + 1] ~= -1) and (mainJobLevel >= levelRequired[mainJob + 1]) then @@ -326,7 +311,7 @@ Setup.Trust = function(skipUpdate) local hasSpell = false; local jpMask = res.JobPointMask; if (bit.band(bit.rshift(jpMask, mainJob), 1) == 1) then - if (mainJobLevel == 99) and (gPlayer:GetJobPointTotal(mainJob) >= levelRequired[mainJob + 1]) then + if (mainJobLevel == 99) and (player:GetJobPointTotal(mainJob) >= levelRequired[mainJob + 1]) then hasSpell = true; end elseif (levelRequired[mainJob + 1] ~= -1) and (mainJobLevel >= levelRequired[mainJob + 1]) then @@ -735,7 +720,7 @@ function exposed:Render() if (state.ForceTab == 2) then state.ForceTab = nil; end - local layout = gInterface:GetLayout(); + local layout = gSingleDisplay.Layout; local width = 32; local height = 32; if layout then @@ -818,14 +803,16 @@ function exposed:Render() imgui.End(); end end + if (state.IsOpen[1] == false) then + self.ForceDisplay = nil; + else + self.ForceDisplay = gSingleDisplay; + self.ForceState = state.MacroState; + end end function exposed:Show(macroState, macroButton) - local square; - local squareMgr = gInterface:GetSquareManager(); - if (squareMgr ~= nil) then - square = squareMgr:GetSquareByButton(macroState, macroButton); - end + local square = gSingleDisplay:GetElementByMacro(macroState, macroButton); if square == nil then state = { IsOpen = { false } }; return; diff --git a/bindings.lua b/bindings.lua index 1c5a00c..0bb5fb2 100644 --- a/bindings.lua +++ b/bindings.lua @@ -81,8 +81,7 @@ local function WriteJob(jobBindings) end local function ApplyBindings() - local squareManager = gInterface:GetSquareManager(); - if (squareManager == nil) then + if (gSingleDisplay == nil) then return; end @@ -106,7 +105,9 @@ local function ApplyBindings() end end - squareManager:UpdateBindings(output); + print('Updating bindings..'); + gSingleDisplay:UpdateBindings(output); + gDoubleDisplay:UpdateBindings(output); end local exposed = {}; diff --git a/callbacks.lua b/callbacks.lua new file mode 100644 index 0000000..bbf866b --- /dev/null +++ b/callbacks.lua @@ -0,0 +1,112 @@ +local renderTarget; +local player = require('state.player'); +local pGameMenu = ashita.memory.find('FFXiMain.dll', 0, "8B480C85C974??8B510885D274??3B05", 16, 0); +local pEventSystem = ashita.memory.find('FFXiMain.dll', 0, "A0????????84C0741AA1????????85C0741166A1????????663B05????????0F94C0C3", 0, 0); +local pInterfaceHidden = ashita.memory.find('FFXiMain.dll', 0, "8B4424046A016A0050B9????????E8????????F6D81BC040C3", 0, 0); + +local function GetMenuName() + local subPointer = ashita.memory.read_uint32(pGameMenu); + local subValue = ashita.memory.read_uint32(subPointer); + if (subValue == 0) then + return ''; + end + local menuHeader = ashita.memory.read_uint32(subValue + 4); + local menuName = ashita.memory.read_string(menuHeader + 0x46, 16); + return string.gsub(menuName, '\x00', ''); +end + +local function GetEventSystemActive() + if (pEventSystem == 0) then + return false; + end + local ptr = ashita.memory.read_uint32(pEventSystem + 1); + if (ptr == 0) then + return false; + end + + return (ashita.memory.read_uint8(ptr) == 1); + +end + +local function GetInterfaceHidden() + if (pEventSystem == 0) then + return false; + end + local ptr = ashita.memory.read_uint32(pInterfaceHidden + 10); + if (ptr == 0) then + return false; + end + + return (ashita.memory.read_uint8(ptr + 0xB4) == 1); +end + +local function ShouldHide() + if (gSettings.HideWhileZoning) then + if (player:GetLoggedIn() == false) then + return true; + end + end + + if (gSettings.HideWhileCutscene) then + if (GetEventSystemActive()) then + return true; + end + end + + if (gSettings.HideWhileMap) then + if (string.match(GetMenuName(), 'map')) then + return true; + end + end + + if (GetInterfaceHidden()) then + return true; + end + + return false; +end + +ashita.events.register('d3d_present', 'd3d_present_cb', function () + gController:Tick(); + gConfigGUI:Render(); + gBindingGUI:Render(); + + renderTarget = nil; + if (gConfigGUI.ForceDisplay) then + gConfigGUI.ForceDisplay:Render(1); + return; + end + + if (gBindingGUI.ForceDisplay) then + gBindingGUI.ForceDisplay:Render(gBindingGUI.ForceState); + return; + end + + if (ShouldHide()) then + return; + end + + renderTarget = gSingleDisplay; + local macroState = gController:GetMacroState(); + if (macroState == 0) then + if (gSettings.ShowDoubleDisplay) then + renderTarget = gDoubleDisplay; + end + elseif (macroState < 3) then + if (gSettings.SwapToSingleDisplay == false) then + renderTarget = gDoubleDisplay; + end + end + + renderTarget:Render(macroState); +end); + +ashita.events.register('mouse', 'mouse_cb', function (e) + if gConfigGUI:HandleMouse(e) then + return; + end + + if (renderTarget ~= nil) and (gSettings.ClickToActivate) then + renderTarget:HandleMouse(e); + end +end); \ No newline at end of file diff --git a/commands.lua b/commands.lua new file mode 100644 index 0000000..b762428 --- /dev/null +++ b/commands.lua @@ -0,0 +1,17 @@ +ashita.events.register('command', 'command_cb', function (e) + local args = e.command:args(); + if (#args == 0 or string.lower(args[1]) ~= '/tc') then + return; + end + e.blocked = true; + + if (#args == 1) then + gConfigGUI:Show(); + return; + end + + if (#args > 1) and (string.lower(args[2]) == 'palette') then + gBindings:HandleCommand(args); + return; + end +end); \ No newline at end of file diff --git a/configgui.lua b/configgui.lua index 2e63c91..577f7da 100644 --- a/configgui.lua +++ b/configgui.lua @@ -1,5 +1,7 @@ local header = { 1.0, 0.75, 0.55, 1.0 }; +local imgui = require('imgui'); local lastPositionX, lastPositionY; +local scaling = require('scaling'); local state = { DragMode = 'Disabled', DragTarget = '', @@ -27,6 +29,18 @@ local validControls = T{ { Name='BindingTab', Description='Changes tab in binding menu.' }, }; +local function GetDefaultPosition(layout) + if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then + return { 0, 0 }; + else + --Centered horizontally, vertically just above chat log. + return { + (scaling.window.w - layout.Panel.Width) / 2, + scaling.window.h - (scaling.scale_height(136) + layout.Panel.Height) + }; + end +end + local function GetLayouts() local layouts = T{}; local layoutPaths = T{ @@ -48,10 +62,16 @@ local function GetLayouts() end state.Layouts = layouts; - state.SelectedLayout = 1; + state.SingleLayout = 1; + state.SingleScale = { gSettings.SingleScale }; + state.DoubleLayout = 1; + state.DoubleScale = { gSettings.DoubleScale }; for index,layout in ipairs(state.Layouts) do - if (gSettings.Layout == layout) then - state.SelectedLayout = index; + if (gSettings.SingleLayout == layout) then + state.SingleLayout = index; + end + if (gSettings.DoubleLayout == layout) then + state.DoubleLayout = index; end end end @@ -106,11 +126,6 @@ local function ControllerBindingCombo(member, helpText) imgui.ShowHelp(helpText); end -local function HitTest(layout, e) - local minX = gSettings.Position[gSettings.Layout][state.DragTarget] - -end - local exposed = {}; function exposed:HandleMouse(e) @@ -119,13 +134,14 @@ function exposed:HandleMouse(e) end if state.DragMode == 'Active' then - local pos = state.DragTarget:GetPosition(); - local newX = pos[1] + (e.x - lastPositionX); - local newY = pos[2] + (e.y - lastPositionY); - state.DragTarget:SetPosition(newX, newY); + local pos = state.DragBuffer; + pos[1] = pos[1] + (e.x - lastPositionX); + pos[2] = pos[2] + (e.y - lastPositionY); + state.DragTarget:UpdatePosition(); + settings.save(); lastPositionX = e.x; lastPositionY = e.y; - if (e.message == 514) or (bit.band(ffi.C.GetKeyState(0x10), 0x8000) == 0) then + if (e.message == 514) then state.DragMode = 'Disabled'; e.blocked = true; end @@ -152,34 +168,102 @@ function exposed:Render() if (imgui.Begin(string.format('%s v%s Configuration', addon.name, addon.version), state.IsOpen, ImGuiWindowFlags_AlwaysAutoResize)) then imgui.BeginGroup(); if imgui.BeginTabBar('##tCrossBarConfigTabBar', ImGuiTabBarFlags_NoCloseWithMiddleMouseButton) then - if imgui.BeginTabItem('Appearance##tCrossbarConfigAppearanceTab', 0, state.ForceTab and 6 or 4) then + if imgui.BeginTabItem('Layouts##tCrossbarConfigLayoutsTab', 0, state.ForceTab and 6 or 4) then state.ForceTab = nil; - imgui.TextColored(header, 'Layout'); - if (imgui.BeginCombo('##tCrossBarLayoutSelectConfig', state.Layouts[state.SelectedLayout], ImGuiComboFlags_None)) then + imgui.TextColored(header, 'Single Layout'); + if (imgui.BeginCombo('##tCrossBarSingleLayoutSelectConfig', state.Layouts[state.SingleLayout], ImGuiComboFlags_None)) then for index,layout in ipairs(state.Layouts) do - if (imgui.Selectable(layout, index == state.SelectedLayout)) then - state.SelectedLayout = index; + if (imgui.Selectable(layout, index == state.SingleLayout)) then + state.SingleLayout = index; end end imgui.EndCombo(); end - if (imgui.Button('Refresh')) then - GetLayouts(); + imgui.SliderFloat('##SingleScale', state.SingleScale, 0.5, 3, '%.2f', ImGuiSliderFlags_AlwaysClamp); + if (state.DragMode == 'Disabled') then + if (imgui.Button('Move##MoveSingle')) then + state.DragBuffer = gSettings.Position[gSettings.SingleLayout]; + state.DragMode = 'Pending'; + state.DragTarget = gSingleDisplay; + end + imgui.ShowHelp('Allows you to drag the single display.', true); + imgui.SameLine(); end - imgui.ShowHelp('Reloads available layouts from disk.', true); + if (imgui.Button('Reset##ResetSingle')) then + gSettings.Position[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); + gSingleDisplay:UpdatePosition(); + end + imgui.ShowHelp('Resets single display to default position.', true); imgui.SameLine(); - if (imgui.Button('Apply')) then - local layout = state.Layouts[state.SelectedLayout]; + if (imgui.Button('Apply##ApplySingle')) then + local layout = state.Layouts[state.SingleLayout]; if (layout == nil) then - print(chat.header(addon.name) .. chat.error('You must select a valid layout to apply it.')); + Error('You must select a valid layout to apply it.'); else - gInterface:Initialize(layout); + gSettings.SingleLayout = layout; + local updatePosition = (gSettings.SingleScale ~= state.SingleScale[1]); + gSettings.SingleScale = state.SingleScale[1]; + gInitializer:ApplyLayout(); + if updatePosition then + gSettings.Position[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); + gSingleDisplay:UpdatePosition(); + end + gBindings:Update(); end end - imgui.ShowHelp('Applies the selected layout to your display.', true); - CheckBox('Clickable', 'ClickToActivate'); - imgui.ShowHelp('Makes macros activate when their icon is left clicked.'); - imgui.TextColored(header, 'Components'); + imgui.ShowHelp('Applies the selected layout to your single display.', true); + + imgui.TextColored(header, 'Double Layout'); + if (imgui.BeginCombo('##tCrossBarDoubleLayoutSelectConfig', state.Layouts[state.DoubleLayout], ImGuiComboFlags_None)) then + for index,layout in ipairs(state.Layouts) do + if (imgui.Selectable(layout, index == state.DoubleLayout)) then + state.DoubleLayout = index; + end + end + imgui.EndCombo(); + end + imgui.SliderFloat('##DoubleScale', state.DoubleScale, 0.5, 3, '%.2f', ImGuiSliderFlags_AlwaysClamp); + if (state.DragMode == 'Disabled') then + if (imgui.Button('Move##MoveDouble')) then + state.DragBuffer = gSettings.Position[gSettings.DoubleLayout]; + state.DragMode = 'Pending'; + state.DragTarget = gDoubleDisplay; + end + imgui.ShowHelp('Allows you to drag the double display.', true); + imgui.SameLine(); + end + if (imgui.Button('Reset##ResetDouble')) then + gSettings.Position[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); + gDoubleDisplay:UpdatePosition(); + end + imgui.ShowHelp('Resets double display to default position.', true); + imgui.SameLine(); + if (imgui.Button('Apply##ApplyDouble')) then + local layout = state.Layouts[state.DoubleLayout]; + if (layout == nil) then + Error('You must select a valid layout to apply it.'); + else + gSettings.DoubleLayout = layout; + local updatePosition = (gSettings.DoubleScale ~= state.DoubleScale[1]); + gSettings.DoubleScale = state.DoubleScale[1]; + gInitializer:ApplyLayout(); + if updatePosition then + gSettings.Position[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); + gDoubleDisplay:UpdatePosition(); + end + gBindings:Update(); + end + end + imgui.ShowHelp('Applies the selected layout to your double display.', true); + imgui.TextColored(header, 'Layout Files'); + if (imgui.Button('Refresh')) then + GetLayouts(); + end + imgui.ShowHelp('Reloads available layouts from disk.', true); + imgui.EndTabItem(); + end + + if imgui.BeginTabItem('Components##tCrossbarConfigComponentsTab') then imgui.BeginGroup(); CheckBox('Cost', 'ShowCost'); imgui.ShowHelp('Display action cost indicators.'); @@ -203,6 +287,13 @@ function exposed:Render() CheckBox('SC Animation', 'ShowSkillchainAnimation'); imgui.ShowHelp('Animates a border around weaponskill icons when a skillchain would be formed.'); imgui.EndGroup(); + end + + if imgui.BeginTabItem('Behavior##tCrossbarConfigBehaviorTab') then + imgui.BeginGroup(); + imgui.TextColored(header, 'Macro Elements'); + CheckBox('Clickable', 'ClickToActivate'); + imgui.ShowHelp('Makes macros activate when their icon is left clicked.'); imgui.TextColored(header, 'Hide UI'); CheckBox('While Zoning', 'HideWhileZoning'); imgui.ShowHelp('Hides UI while you are zoning or on title screen.'); @@ -212,6 +303,7 @@ function exposed:Render() imgui.ShowHelp('Hides UI while the map is the topmost menu.'); imgui.EndTabItem(); end + if imgui.BeginTabItem('Controller##tCrossbarControlsAppearanceTab') then imgui.TextColored(header, 'Device Mapping'); if (imgui.BeginCombo('##tCrossBarControllerSelectConfig', state.Controllers[state.SelectedController], ImGuiComboFlags_None)) then @@ -265,10 +357,12 @@ function exposed:Render() end imgui.End(); end + end - if (state.DragMode ~= 'Disabled') then - return state.DragTarget; - end + if state.IsOpen[1] and (state.DragMode ~= 'Disabled') then + self.ForceDisplay = state.DragTarget; + else + self.ForceDisplay = nil; end end diff --git a/controller.lua b/controller.lua index f6fde1c..c84fd23 100644 --- a/controller.lua +++ b/controller.lua @@ -1,3 +1,4 @@ +local imgui = require('imgui'); local controller = { dInputCB = false, xInputCB = false, @@ -70,7 +71,7 @@ function controller:HandleInput(e) end end -local function InitializeControls() +function controller:InitializeControls() --Initialize any blank controls.. local changed = false; if (type(gSettings.Controls) ~= 'table') then @@ -82,8 +83,8 @@ local function InitializeControls() changed = true; end - local controls = gSettings.Controls[controller.Layout.Name]; - for binding,button in pairs(controller.Layout.Defaults) do + local controls = gSettings.Controls[self.Layout.Name]; + for binding,button in pairs(self.Layout.Defaults) do if (controls[binding] == nil) then controls[binding] = button; changed = true; @@ -95,7 +96,7 @@ local function InitializeControls() end end -function controller:SetLayout(layout) +function controller:SetLayout(layoutName) gBindingGUI:Close(); self.BindMenuState.Active = false; if self.dInputCB == true then @@ -108,18 +109,22 @@ function controller:SetLayout(layout) self.XinputCB = false; end - self.Layout = layout; - - if (self.Layout ~= nil) then - InitializeControls(); + local controllerLayout = LoadFile_s(GetResourcePath('controllers/' .. layoutName)); + if (controllerLayout ~= nil) then + controllerLayout.Name = layoutName; + self.Layout = controllerLayout; + + if (self.Layout ~= nil) then + self:InitializeControls(); - if (self.Layout.DirectInput == true) then - ashita.events.register('dinput_button', 'dinput_button_cb', self.HandleInput:bind1(self)); - self.dInputCB = true; - end - if (self.Layout.XInput == true) then - ashita.events.register('xinput_button', 'xinput_button_cb', self.HandleInput:bind1(self)); - self.xInputCB = true; + if (self.Layout.DirectInput == true) then + ashita.events.register('dinput_button', 'dinput_button_cb', self.HandleInput:bind1(self)); + self.dInputCB = true; + end + if (self.Layout.XInput == true) then + ashita.events.register('xinput_button', 'xinput_button_cb', self.HandleInput:bind1(self)); + self.xInputCB = true; + end end end end @@ -247,7 +252,7 @@ function controller:Trigger(button, pressed) gBindingGUI:Show(self:GetMacroState(), i); return true; else - gInterface:GetSquareManager():Activate(self:GetMacroState(), i); + gSingleDisplay:Activate(self:GetMacroState(), i); return true; end end diff --git a/doubledisplay.lua b/doubledisplay.lua new file mode 100644 index 0000000..d886f86 --- /dev/null +++ b/doubledisplay.lua @@ -0,0 +1,146 @@ +local d3d8 = require('d3d8'); +local Element = require('element'); +local ffi = require('ffi'); + +local function GetButtonAlias(comboIndex, buttonIndex) + local macroComboBinds = { + [1] = 'LT', + [2] = 'RT', + [3] = 'LTRT', + [4] = 'RTLT', + [5] = 'LT2', + [6] = 'RT2' + }; + return string.format('%s:%d', macroComboBinds[comboIndex], buttonIndex); +end + +local DoubleDisplay = {}; + +function DoubleDisplay:Destroy() + self.Layout = nil; + self.Elements = T{}; +end + +function DoubleDisplay:Initialize(layout) + self.Layout = layout; + self.Elements = T{}; + + local position = gSettings.Position[gSettings.DoubleLayout]; + for group = 0,1 do + for macro = 1,8 do + local index = (group * 8) + macro; + local newElement = Element:New(GetButtonAlias(group + 1, macro), layout); + newElement.OffsetX = layout.Elements[index].OffsetX; + newElement.OffsetY = layout.Elements[index].OffsetY; + newElement:SetPosition(position); + self.Elements:append(newElement); + end + end + + if (self.Sprite == nil) then + local sprite = ffi.new('ID3DXSprite*[1]'); + if (ffi.C.D3DXCreateSprite(d3d8.get_device(), sprite) == ffi.C.S_OK) then + self.Sprite = d3d8.gc_safe_release(ffi.cast('ID3DXSprite*', sprite[0])); + else + Error('Failed to create Sprite in DoubleDisplay:Initialize.'); + end + end +end + +function DoubleDisplay:SetActivationTimer(macroState, macroIndex) + local element; + if (macroState == 1) then + element = self.Elements[macroIndex]; + elseif (macroState == 2) then + element = self.Elements[macroIndex + 8]; + end + if (element ~= nil) then + element.Activation = os.clock(); + end +end + +local d3dwhite = d3d8.D3DCOLOR_ARGB(255, 255, 255, 255); +local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); +function DoubleDisplay:Render(macroState) + if (self.Sprite == nil) then + return; + end + + local pos = gSettings.Position[gSettings.DoubleLayout]; + local sprite = self.Sprite; + sprite:Begin(); + + for _,object in ipairs(self.Layout.FixedObjects) do + local component = self.Layout.Textures[object.Texture]; + vec_position.x = pos[1] + object.OffsetX; + vec_position.y = pos[2] + object.OffsetY; + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); + end + + for _,element in ipairs(self.Elements) do + element:Render(sprite); + end + + sprite:End(); +end + +function DoubleDisplay:HandleMouse(e) + local macroState = gController:GetMacroState(); + if (macroState > 2) then + return; + end + + --Direct back to single display for activation.. + if (e.message == 513) then + local hit, element = self:HitTest(e.x, e.y); + if element ~= nil then + if (element > 8) then + gSingleDisplay:Activate(2, element - 8); + else + gSingleDisplay:Activate(1, element); + end + e.blocked = true; + end + end +end + +function DoubleDisplay:HitTest(x, y) + local pos = gSettings.Position[gSettings.DoubleLayout]; + if (x < pos[1]) or (y < pos[2]) then + return false; + end + + if (x > (pos[1] + self.Layout.Panel.Width)) then + return false; + end + + if (y > (pos[2] + self.Layout.Panel.Height)) then + return false; + end + + local selectedElement = 0; + for index,element in ipairs(self.Elements) do + if (element:HitTest(x, y)) then + selectedElement = index; + end + end + + return true, selectedElement; +end + +function DoubleDisplay:UpdateBindings(bindings) + for i = 1,8 do + self.Elements[i]:UpdateBinding(bindings[GetButtonAlias(1, i)]); + self.Elements[i + 8]:UpdateBinding(bindings[GetButtonAlias(2, i)]); + end +end + +function DoubleDisplay:UpdatePosition() + local position = gSettings.Position[gSettings.DoubleLayout]; + + for _,element in ipairs(self.Elements) do + element:SetPosition(position); + end +end + +return DoubleDisplay; \ No newline at end of file diff --git a/element.lua b/element.lua index fc80c1e..6e6f73a 100644 --- a/element.lua +++ b/element.lua @@ -66,7 +66,7 @@ function Element:New(hotkey, layout) end function Element:Activate() - self.Activation = os.clock() + 0.25; + self.Activation = os.clock(); if (self.Binding ~= nil) then local macroContainer = T{}; for _,entry in ipairs(self.Binding.Macro) do @@ -150,10 +150,6 @@ function Element:UpdateBinding(binding) end function Element:Render(sprite) - if (self.Binding == nil) and (gSettings.ShowEmpty == false) then - return; - end - self.Updater:Tick(); local positionX = self.PositionX; @@ -161,15 +157,19 @@ function Element:Render(sprite) local layout = self.Layout; --Draw frame first.. - if (gSettings.ShowFrame) then - local component = layout.Frame; + if ((self.Binding) or (gSettings.ShowEmpty)) and (gSettings.ShowFrame) then + local component = layout.Textures.Frame; if component then - vec_position.x = positionX + component.OffsetX; - vec_position.y = positionY + component.OffsetY; + vec_position.x = positionX + layout.Frame.OffsetX; + vec_position.y = positionY + layout.Frame.OffsetY; sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); end end + if (self.Binding == nil) then + return; + end + --Evaluate skillchain state.. local icon = self.Icon; vec_position.x = positionX + layout.Icon.OffsetX; diff --git a/initializer.lua b/initializer.lua index 4ed1655..7dfb2c3 100644 --- a/initializer.lua +++ b/initializer.lua @@ -1,11 +1,7 @@ ---Initialize Classes.. -require('state.inventory'); -require('state.player'); -require('state.skillchain'); - --Initialize Globals.. require('helpers'); gTextureCache = require('texturecache'); +gBindings = require('bindings'); gBindingGUI = require('bindinggui'); gConfigGUI = require('configgui'); gController = require('controller'); @@ -13,6 +9,10 @@ gSingleDisplay = require('singledisplay'); gDoubleDisplay = require('doubledisplay'); settings = require('settings'); +local d3d8 = require('d3d8'); +local ffi = require('ffi'); +local scaling = require('scaling'); + --Create directories.. local controllerConfigFolder = string.format('%sconfig/addons/%s/resources/controllers', AshitaCore:GetInstallPath(), addon.name); if not ashita.fs.exists(controllerConfigFolder) then @@ -25,19 +25,12 @@ end --Initialize settings.. local defaultSettings = T{ - Layout = 'classic', + --Layouts tab.. + SingleLayout = 'classicsingle', SingleScale = 1.0, + DoubleLayout = 'classicdouble', DoubleScale = 1.0, - Controller = 'dualsense', - BindMenuTimer = 1, - TapTimer = 0.4, - EnableDoubleTap = true, - EnablePriority = true, - ShowDoubleDisplay = true, - SwapToSingleDisplay = false, - AllowInventoryPassthrough = true, - Position = T{}, - ClickToActivate = true, + TriggerDuration = 0.25, ShowEmpty = true, ShowFrame = true, ShowCost = true, @@ -49,29 +42,140 @@ local defaultSettings = T{ ShowSkillchainIcon = true, ShowSkillchainAnimation = true, ShowTrigger = true, + + --Behavior tab.. + ClickToActivate = true, HideWhileZoning = true, HideWhileCutscene = true, HideWhileMap = true, DefaultSelectTarget = false, + EnableDoubleTap = true, + EnablePriority = true, + ShowDoubleDisplay = true, + SwapToSingleDisplay = false, + AllowInventoryPassthrough = true, + + --Controller Tab.. + Controller = 'dualsense', + BindMenuTimer = 1, + TapTimer = 0.4, + + --No Tab.. + Position = T{}, }; gSettings = settings.load(defaultSettings); +--Gets target dimensions of texture from layout table.. +local function GetDimensions(layout, key) + for _,entry in ipairs(layout.FixedObjects) do + if (key == entry.Texture) then + return { Width=entry.Width, Height=entry.Height }; + end + end + + if (key == 'Frame') then + return { Width=layout.Frame.Width, Height=layout.Frame.Height }; + end + + return { Width=layout.Icon.Width, Height=layout.Icon.Height }; +end + +--Creates textures, assigns +local function PrepareLayout(layout, scale) + for _,singleTable in ipairs(T{layout, layout.FixedObjects, layout.Elements}) do + for _,tableEntry in pairs(singleTable) do + if (type(tableEntry) == 'table') then + if (tableEntry.OffsetX ~= nil) then + tableEntry.OffsetX = tableEntry.OffsetX * scale; + tableEntry.OffsetY = tableEntry.OffsetY * scale; + end + if (tableEntry.Width ~= nil) then + tableEntry.Width = tableEntry.Width * scale; + tableEntry.Height = tableEntry.Height * scale; + end + if (tableEntry.font_height ~= nil) then + tableEntry.font_height = math.max(5, math.floor(tableEntry.font_height * scale)); + end + if (tableEntry.outline_width ~= nil) then + tableEntry.outline_width = math.min(3, math.max(1, math.floor(tableEntry.outline_width * scale))); + end + end + end + end + + --Prepare textures for efficient rendering.. + for _,singleTable in ipairs(T{layout.SkillchainFrames, layout.Textures}) do + for key,path in pairs(singleTable) do + local tx = gTextureCache:GetTexture(path); + if tx then + --Get target dimensions and prepare a RECT and scale vector for rendering at that size.. + local dimensions = GetDimensions(layout, key); + + local preparedTexture = {}; + preparedTexture.Texture = tx.Texture; + preparedTexture.Rect = ffi.new('RECT', { 0, 0, tx.Width, tx.Height }); + preparedTexture.Scale = ffi.new('D3DXVECTOR2', { dimensions.Width / tx.Width, dimensions.Height / tx.Height }); + singleTable[key] = preparedTexture; + else + singleTable[key] = nil; + end + end + end + + layout.FadeOpacity = d3d8.D3DCOLOR_ARGB(layout.FadeOpacity, 255, 255, 255); + layout.TriggerOpacity = d3d8.D3DCOLOR_ARGB(layout.TriggerOpacity, 255, 255, 255); +end + +local function GetDefaultPosition(layout) + if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then + return { 0, 0 }; + else + --Centered horizontally, vertically just above chat log. + return { + (scaling.window.w - layout.Panel.Width) / 2, + scaling.window.h - (scaling.scale_height(136) + layout.Panel.Height) + }; + end +end + --Create exports.. local Initializer = {}; function Initializer:ApplyController() - local controllerLayout = LoadFile_s(GetResourcePath('controllers/' .. gSettings.Controller)); - gController:SetLayout(controllerLayout); + gController:SetLayout(gSettings.Controller); end function Initializer:ApplyLayout() gSingleDisplay:Destroy(); gDoubleDisplay:Destroy(); - local graphicsLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.Layout)); - if graphicsLayout then - gSingleDisplay:Initialize(graphicsLayout.SingleDisplay, gSettings.SingleScale); - gDoubleDisplay:Initialize(graphicsLayout.DoubleDisplay, gSettings.DoubleScale); + + local singleLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.SingleLayout)); + if singleLayout then + PrepareLayout(singleLayout, gSettings.SingleScale); + local position = gSettings.Position[gSettings.SingleLayout]; + if position == nil then + gSettings.Position[gSettings.SingleLayout] = GetDefaultPosition(singleLayout); + settings.save(); + end + gSingleDisplay:Initialize(singleLayout); + else + Error('Failed to load single layout.'); + end + + local doubleLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.DoubleLayout)); + if doubleLayout then + PrepareLayout(doubleLayout, gSettings.DoubleScale); + local position = gSettings.Position[gSettings.DoubleLayout]; + if position == nil then + gSettings.Position[gSettings.DoubleLayout] = GetDefaultPosition(doubleLayout); + settings.save(); + end + gDoubleDisplay:Initialize(doubleLayout); + else + Error('Failed to load double layout.'); end + + gTextureCache:Clear(); end settings.register('settings', 'settings_update', function(newSettings) diff --git a/resources/layouts/classicdouble.lua b/resources/layouts/classicdouble.lua new file mode 100644 index 0000000..20f2972 --- /dev/null +++ b/resources/layouts/classicdouble.lua @@ -0,0 +1,206 @@ +return { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' + }, + + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, + + --Textures to be used by individual macro elements. + Textures = T{ + Cross = 'misc/cross.png', + Frame = 'misc/frame.png', + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + LeftButtons = 'misc/buttons.png', + LeftDpad = 'misc/dpad.png', + RightButtons = 'misc/buttons.png', + RightDpad = 'misc/dpad.png', + }, + + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + + --Opacity of the overlay shown when a macro is activated. [0-255] + TriggerOpacity = 128, + + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, + Width = 44, + Height = 44, + }, + + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + }, + + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, + + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, + + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, + + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + T{ + OffsetX = 60, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'LeftButtons', + }, + T{ + OffsetX = 234, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'LeftDpad', + }, + T{ + OffsetX = 448, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'RightButtons', + }, + T{ + OffsetX = 622, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'RightDpad', + }, + }, + + --Size of hitbox for entire element. + Panel = { + Width = 746, + Height = 168, + }, + + --[[ + Table of element positions. DoubleDisplay has 16 elements. + Objects are ordered(according to default controller layout): + 1. Dpad Up(L2) + 2. Dpad Right(L2) + 3. Dpad Down(L2) + 4. Dpad Left(L2) + 5. Button Up(L2) + 6. Button Right(L2) + 7. Button Down(L2) + 8. Button Left(L2) + 9. Dpad Up(R2) + 10. Dpad Right(R2) + 11. Dpad Down(R2) + 12. Dpad Left(R2) + 13. Button Up(R2) + 14. Button Right(R2) + 15. Button Down(R2) + 16. Button Left(R2) + ]]-- + Elements = T{ + { OffsetX = 58, OffsetY = 0 }, + { OffsetX = 116, OffsetY = 55 }, + { OffsetX = 58, OffsetY = 110 }, + { OffsetX = 0, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 0 }, + { OffsetX = 290, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 110 }, + { OffsetX = 174, OffsetY = 55 }, + { OffsetX = 446, OffsetY = 0 }, + { OffsetX = 504, OffsetY = 55 }, + { OffsetX = 446, OffsetY = 110 }, + { OffsetX = 388, OffsetY = 55 }, + { OffsetX = 620, OffsetY = 0 }, + { OffsetX = 678, OffsetY = 55 }, + { OffsetX = 620, OffsetY = 110 }, + { OffsetX = 562, OffsetY = 55 }, + }, +}; \ No newline at end of file diff --git a/resources/layouts/classicsingle.lua b/resources/layouts/classicsingle.lua new file mode 100644 index 0000000..9fff257 --- /dev/null +++ b/resources/layouts/classicsingle.lua @@ -0,0 +1,175 @@ +return { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' + }, + + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, + + --Textures to be used by individual macro elements. + Textures = T{ + Cross = 'misc/cross.png', + Frame = 'misc/frame.png', + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + Buttons = 'misc/buttons.png', + Dpad = 'misc/dpad.png', + }, + + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + + --Opacity of the overlay shown when a macro is activated. [0-255] + TriggerOpacity = 128, + + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, + Width = 44, + Height = 44, + }, + + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + }, + + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, + + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, + + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, + + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + T{ + OffsetX = 60, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'Buttons', + }, + T{ + OffsetX = 234, + OffsetY = 57, + Width = 40, + Height = 40, + Texture = 'Dpad', + }, + }, + + --Size of hitbox for entire element. + Panel = { + Width = 358, + Height = 168, + }, + + --[[ + Table of element positions. SingleDisplay has 8 elements. + Objects are ordered(according to default controller layout): + 1. Dpad Up + 2. Dpad Right + 3. Dpad Down + 4. Dpad Left + 5. Button Up + 6. Button Right + 7. Button Down + 8. Button Left + Must remain 8 objects. + ]]-- + Elements = T{ + { OffsetX = 58, OffsetY = 0 }, + { OffsetX = 116, OffsetY = 55 }, + { OffsetX = 58, OffsetY = 110 }, + { OffsetX = 0, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 0 }, + { OffsetX = 290, OffsetY = 55 }, + { OffsetX = 232, OffsetY = 110 }, + { OffsetX = 174, OffsetY = 55 }, + }, +}; \ No newline at end of file diff --git a/singledisplay.lua b/singledisplay.lua index 96b6379..5989ade 100644 --- a/singledisplay.lua +++ b/singledisplay.lua @@ -1,47 +1,6 @@ local d3d8 = require('d3d8'); -local element = require('element'); +local Element = require('element'); local ffi = require('ffi'); -local player = require('state.player'); ---Thanks to Velyn for the event system and interface hidden signatures! -local pGameMenu = ashita.memory.find('FFXiMain.dll', 0, "8B480C85C974??8B510885D274??3B05", 16, 0); -local pEventSystem = ashita.memory.find('FFXiMain.dll', 0, "A0????????84C0741AA1????????85C0741166A1????????663B05????????0F94C0C3", 0, 0); -local pInterfaceHidden = ashita.memory.find('FFXiMain.dll', 0, "8B4424046A016A0050B9????????E8????????F6D81BC040C3", 0, 0); - -local function GetMenuName() - local subPointer = ashita.memory.read_uint32(pGameMenu); - local subValue = ashita.memory.read_uint32(subPointer); - if (subValue == 0) then - return ''; - end - local menuHeader = ashita.memory.read_uint32(subValue + 4); - local menuName = ashita.memory.read_string(menuHeader + 0x46, 16); - return string.gsub(menuName, '\x00', ''); -end - -local function GetEventSystemActive() - if (pEventSystem == 0) then - return false; - end - local ptr = ashita.memory.read_uint32(pEventSystem + 1); - if (ptr == 0) then - return false; - end - - return (ashita.memory.read_uint8(ptr) == 1); - -end - -local function GetInterfaceHidden() - if (pEventSystem == 0) then - return false; - end - local ptr = ashita.memory.read_uint32(pInterfaceHidden + 10); - if (ptr == 0) then - return false; - end - - return (ashita.memory.read_uint8(ptr + 0xB4) == 1); -end local function GetButtonAlias(comboIndex, buttonIndex) local macroComboBinds = { @@ -55,78 +14,33 @@ local function GetButtonAlias(comboIndex, buttonIndex) return string.format('%s:%d', macroComboBinds[comboIndex], buttonIndex); end -local function GetDimensions(layout, key) - for _,entry in ipairs(layout.FixedObjects) do - if (key == entry.Texture) then - return { Width=entry.Width, Height=entry.Height }; - end - end +local SingleDisplay = {}; - if (key == 'Frame') then - return { Width=layout.Frame.Width, Height=layout.Frame.Height }; - end - - return { Width=layout.Icon.Width, Height=layout.Icon.Height }; +function SingleDisplay:Destroy() + self.Layout = nil; + self.ElementGroups = T{}; end -local SingleDisplay = {}; - -function SingleDisplay:Initialize(layout, scale) +function SingleDisplay:Initialize(layout) self.Layout = layout; - - --Prescale offsets and hitboxes.. - for _,singleTable in ipairs(T{layout, layout.FixedObjects, layout.Elements}) do - for _,tableEntry in pairs(singleTable) do - if (type(tableEntry) == 'table') then - if (tableEntry.OffsetX ~= nil) then - tableEntry.OffsetX = tableEntry.OffsetX * scale; - tableEntry.OffsetY = tableEntry.OffsetY * scale; - end - if (tableEntry.Width ~= nil) then - tableEntry.Width = tableEntry.Width * scale; - tableEntry.Height = tableEntry.Height * scale; - end - end - end - end - - --Prepare textures for efficient rendering.. - for _,singleTable in ipairs(T{layout.SkillchainFrames, layout.Textures}) do - for key,path in pairs(singleTable) do - local tx = gTextureCache:GetTexture(path); - if tx then - local dimensions = GetDimensions(key); - - local preparedTexture = {}; - preparedTexture.Texture = tx.Texture; - preparedTexture.Rect = ffi.new('RECT', { 0, 0, tx.Width, tx.Height }); - preparedTexture.Scale = ffi.new('D3DXVECTOR2', { dimensions.Width / tx.Width, dimensions.Height / tx.Height }); - singleTable[key] = preparedTexture; - else - singleTable[key] = nil; - end - end - end - - layout.FadeOpacity = d3d8.D3DCOLOR_ARGB(layout.FadeOpacity, 255, 255, 255); - layout.TriggerOpacity = d3d8.D3DCOLOR_ARGB(layout.TriggerOpacity, 255, 255, 255); - self.ElementGroups = T{}; + local position = gSettings.Position[gSettings.SingleLayout]; + for group = 1,6 do self.ElementGroups[group] = T{}; for macro = 1,8 do - local newElement = element:New(GetButtonAlias(group, macro), layout); + local newElement = Element:New(GetButtonAlias(group, macro), layout); newElement.OffsetX = layout.Elements[macro].OffsetX; newElement.OffsetY = layout.Elements[macro].OffsetY; - newElement:SetPosition(gSettings.Position[gSettings.Layout].SingleDisplay); + newElement:SetPosition(position); self.ElementGroups[group]:append(newElement); end end if (self.Sprite == nil) then local sprite = ffi.new('ID3DXSprite*[1]'); - if (ffi.C.D3DXCreateSprite(d3d8.get_device(), self.Sprite) == ffi.C.S_OK) then + if (ffi.C.D3DXCreateSprite(d3d8.get_device(), sprite) == ffi.C.S_OK) then self.Sprite = d3d8.gc_safe_release(ffi.cast('ID3DXSprite*', sprite[0])); else Error('Failed to create Sprite in SingleDisplay:Initialize.'); @@ -134,11 +48,6 @@ function SingleDisplay:Initialize(layout, scale) end end -function SingleDisplay:Destroy() - self.Layout = nil; - self.ElementGroups = T{}; -end - function SingleDisplay:GetElementByMacro(macroState, macroIndex) local group = self.ElementGroups[macroState]; if (group ~= nil) then @@ -153,43 +62,18 @@ function SingleDisplay:Activate(macroState, macroIndex) local element = self:GetElementByMacro(macroState, macroIndex); if element then element:Activate(); + gDoubleDisplay:SetActivationTimer(macroState, macroIndex); end end -local function GetHidden() - if (gSettings.HideWhileZoning) then - if (player:GetLoggedIn() == false) then - return true; - end - end - - if (gSettings.HideWhileCutscene) then - if (GetEventSystemActive()) then - return true; - end - end - - if (gSettings.HideWhileMap) then - if (string.match(GetMenuName(), 'map')) then - return true; - end - end - - if (GetInterfaceHidden()) then - return true; - end - - return false; -end - local d3dwhite = d3d8.D3DCOLOR_ARGB(255, 255, 255, 255); local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); function SingleDisplay:Render(macroState) - if GetHidden() or (self.Sprite == nil) or (macroState == 0) then + if (self.Sprite == nil) or (macroState == 0) then return; end - local pos = gSettings.Position[gSettings.Layout].SingleDisplay; + local pos = gSettings.Position[gSettings.SingleLayout]; local sprite = self.Sprite; sprite:Begin(); @@ -197,7 +81,7 @@ function SingleDisplay:Render(macroState) local component = self.Layout.Textures[object.Texture]; vec_position.x = pos[1] + object.OffsetX; vec_position.y = pos[2] + object.OffsetY; - sprite:Draw(object.Texture, object.Rect, object.Scale, nil, 0.0, vec_position, d3dwhite); + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); end local group = self.ElementGroups[macroState]; @@ -209,8 +93,25 @@ function SingleDisplay:Render(macroState) sprite:End(); end +function SingleDisplay:HandleMouse(e) + if (e.message == 513) then + local hit, element = self:HitTest(e.x, e.y); + if element ~= nil then + local macroState = gController:GetMacroState(); + local group = self.ElementGroups[macroState]; + if group then + element = group[element]; + if element then + element:Activate(); + e.blocked = true; + end + end + end + end +end + function SingleDisplay:HitTest(x, y) - local pos = gSettings.Position[gSettings.Layout].SingleDisplay; + local pos = gSettings.Position[gSettings.SingleLayout]; if (x < pos[1]) or (y < pos[2]) then return false; end @@ -244,4 +145,14 @@ function SingleDisplay:UpdateBindings(bindings) end end +function SingleDisplay:UpdatePosition() + local position = gSettings.Position[gSettings.SingleLayout]; + + for _,group in ipairs(self.ElementGroups) do + for _,element in ipairs(group) do + element:SetPosition(position); + end + end +end + return SingleDisplay; \ No newline at end of file diff --git a/state/player.lua b/state/player.lua index ec25dc6..356122e 100644 --- a/state/player.lua +++ b/state/player.lua @@ -1,3 +1,4 @@ +local chat = require('chat'); local playerData = { Abilities = T{}, Spells = T{}, diff --git a/tCrossBar.lua b/tCrossBar.lua index 3f71d1c..9a98a1f 100644 --- a/tCrossBar.lua +++ b/tCrossBar.lua @@ -26,9 +26,8 @@ addon.desc = 'Creates a controller scheme for activating macros, and provid addon.link = 'https://ashitaxi.com/'; require('common'); -local gdi = require('gdifonts.include'); -gInitializer = require('initializer'); -local clickTarget; +local chat = require('chat'); +local gdi = require('gdifonts.include'); function Error(text) local color = ('\30%c'):format(68); @@ -47,7 +46,9 @@ end ashita.events.register('load', 'load_cb', function () gdi:set_auto_render(false); - require('initialize'); + gInitializer = require('initializer'); + require('callbacks'); + require('commands'); end); --[[ @@ -56,67 +57,4 @@ end); --]] ashita.events.register('unload', 'unload_cb', function () gdi:destroy_interface(); -end); - -ashita.events.register('command', 'command_cb', function (e) - local args = e.command:args(); - if (#args == 0 or string.lower(args[1]) ~= '/tc') then - return; - end - e.blocked = true; - - if (#args == 1) then - gConfigGUI:Show(); - return; - end - - if (#args > 1) and (string.lower(args[2]) == 'activate') then - if (#args > 2) then - local macroIndex = tonumber(args[3]); - gInterface:GetSquareManager():Activate(macroIndex); - end - return; - end - - if (#args > 1) and (string.lower(args[2]) == 'palette') then - gBindings:HandleCommand(args); - return; - end -end); - -ashita.events.register('d3d_present', 'd3d_present_cb', function () - gController:Tick(); - - --Returns a display type if in drag mode. - local renderTarget = gConfigGUI:Render(); - - --Returns a macro type if in binding mode. - local macroState = gBindingGUI:Render(); - - if (renderTarget == nil) then - renderTarget = gSingleDisplay; - macroState = macroState or gController:GetMacroState(); - if (macroState == 0) then - if (gSettings.ShowDoubleDisplay) then - renderTarget = gDoubleDisplay; - end - elseif (macroState < 3) then - if (gSettings.SwapToSingleDisplay == false) then - renderTarget = gDoubleDisplay; - end - end - clickTarget = renderTarget; - else - clickTarget = nil; - end - - renderTarget:Render(); -end); - -ashita.events.register('mouse', 'mouse_cb', function (e) - if gConfigGUI:HandleMouse(e) then - return; - end - - clickTarget:HandleMouse(e); end); \ No newline at end of file diff --git a/texturecache.lua b/texturecache.lua index 2692e56..cab44ff 100644 --- a/texturecache.lua +++ b/texturecache.lua @@ -6,6 +6,12 @@ TextureCache.ItemCache = {}; TextureCache.ImageCache = {}; TextureCache.StatusCache = {}; +function TextureCache:Clear() + self.ItemCache = {}; + self.ImageCache = {}; + self.StatusCache = {}; +end + function TextureCache:GetTexture(file) if (string.sub(file, 1, 5) == 'ITEM:') then local itemId = tonumber(string.sub(file, 6)); diff --git a/updaters/ability.lua b/updaters/ability.lua index df0703f..296ffbf 100644 --- a/updaters/ability.lua +++ b/updaters/ability.lua @@ -298,10 +298,13 @@ function Updater:Tick() local recastReady, recastDisplay = self.RecastFunction(self.Resource); local abilityAvailable = player:KnowsAbility(self.Resource.Id); local abilityCostDisplay, costMet = self:CostFunction(recastReady); + if (type(recastReady) == 'number') then + recastReady = (recastReady > 0); + end self.State.Available = abilityAvailable; self.State.Cost = abilityCostDisplay; - self.State.Ready = ((costMet == true) and ((recastReady > 0) or (recastReady == true))); + self.State.Ready = (costMet == true) and (recastReady == true); self.State.Recast = recastDisplay; self.State.Skillchain = nil; end From 5c85e3f7b895d1a53e70520eb7bb1ce688d80f6b Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:48:23 -0500 Subject: [PATCH 09/25] 2.00 - Seemingly functional with new renderer --- bindinggui.lua | 4 +- bindings.lua | 1 - callbacks.lua | 4 +- configgui.lua | 88 +++-- controller.lua | 8 +- doubledisplay.lua | 37 +- element.lua | 64 ++- helpers.lua | 4 + initializer.lua | 58 ++- resources/layouts/classic.lua | 725 ++++++++++++++-------------------- singledisplay.lua | 44 ++- state/skillchain.lua | 32 +- tCrossBar.lua | 2 +- updaters/ability.lua | 2 +- updaters/spell.lua | 2 +- updaters/weaponskill.lua | 1 - 16 files changed, 543 insertions(+), 533 deletions(-) diff --git a/bindinggui.lua b/bindinggui.lua index feb1eac..b7ee34b 100644 --- a/bindinggui.lua +++ b/bindinggui.lua @@ -724,8 +724,8 @@ function exposed:Render() local width = 32; local height = 32; if layout then - width = layout.SingleDisplay.ImageObjects.Icon.Width; - height = layout.SingleDisplay.ImageObjects.Icon.Height; + width = layout.Icon.Width; + height = layout.Icon.Height; end imgui.BeginChild('AppearanceChild', { 253, 235 + height }, true); imgui.TextColored(header, 'Image'); diff --git a/bindings.lua b/bindings.lua index 0bb5fb2..69afe3d 100644 --- a/bindings.lua +++ b/bindings.lua @@ -105,7 +105,6 @@ local function ApplyBindings() end end - print('Updating bindings..'); gSingleDisplay:UpdateBindings(output); gDoubleDisplay:UpdateBindings(output); end diff --git a/callbacks.lua b/callbacks.lua index bbf866b..d75633f 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -98,7 +98,9 @@ ashita.events.register('d3d_present', 'd3d_present_cb', function () end end - renderTarget:Render(macroState); + if renderTarget then + renderTarget:Render(macroState); + end end); ashita.events.register('mouse', 'mouse_cb', function (e) diff --git a/configgui.lua b/configgui.lua index 577f7da..ac816bf 100644 --- a/configgui.lua +++ b/configgui.lua @@ -182,7 +182,7 @@ function exposed:Render() imgui.SliderFloat('##SingleScale', state.SingleScale, 0.5, 3, '%.2f', ImGuiSliderFlags_AlwaysClamp); if (state.DragMode == 'Disabled') then if (imgui.Button('Move##MoveSingle')) then - state.DragBuffer = gSettings.Position[gSettings.SingleLayout]; + state.DragBuffer = gSettings.SinglePosition[gSettings.SingleLayout]; state.DragMode = 'Pending'; state.DragTarget = gSingleDisplay; end @@ -190,8 +190,9 @@ function exposed:Render() imgui.SameLine(); end if (imgui.Button('Reset##ResetSingle')) then - gSettings.Position[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); + gSettings.SinglePosition[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); gSingleDisplay:UpdatePosition(); + settings.save(); end imgui.ShowHelp('Resets single display to default position.', true); imgui.SameLine(); @@ -205,10 +206,11 @@ function exposed:Render() gSettings.SingleScale = state.SingleScale[1]; gInitializer:ApplyLayout(); if updatePosition then - gSettings.Position[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); + gSettings.SinglePosition[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); gSingleDisplay:UpdatePosition(); end gBindings:Update(); + settings.save(); end end imgui.ShowHelp('Applies the selected layout to your single display.', true); @@ -225,7 +227,7 @@ function exposed:Render() imgui.SliderFloat('##DoubleScale', state.DoubleScale, 0.5, 3, '%.2f', ImGuiSliderFlags_AlwaysClamp); if (state.DragMode == 'Disabled') then if (imgui.Button('Move##MoveDouble')) then - state.DragBuffer = gSettings.Position[gSettings.DoubleLayout]; + state.DragBuffer = gSettings.DoublePosition[gSettings.DoubleLayout]; state.DragMode = 'Pending'; state.DragTarget = gDoubleDisplay; end @@ -233,8 +235,9 @@ function exposed:Render() imgui.SameLine(); end if (imgui.Button('Reset##ResetDouble')) then - gSettings.Position[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); - gDoubleDisplay:UpdatePosition(); + gSettings.DoublePosition[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); + gDoubleDisplay:UpdatePosition(); + settings.save(); end imgui.ShowHelp('Resets double display to default position.', true); imgui.SameLine(); @@ -248,10 +251,11 @@ function exposed:Render() gSettings.DoubleScale = state.DoubleScale[1]; gInitializer:ApplyLayout(); if updatePosition then - gSettings.Position[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); + gSettings.DoublePosition[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); gDoubleDisplay:UpdatePosition(); end gBindings:Update(); + settings.save(); end end imgui.ShowHelp('Applies the selected layout to your double display.', true); @@ -265,8 +269,21 @@ function exposed:Render() if imgui.BeginTabItem('Components##tCrossbarConfigComponentsTab') then imgui.BeginGroup(); + CheckBox('Empty', 'ShowEmpty'); + imgui.ShowHelp('Display empty macro elements.'); + CheckBox('Frame', 'ShowFrame'); + imgui.ShowHelp('Display frame for macro elements.'); CheckBox('Cost', 'ShowCost'); imgui.ShowHelp('Display action cost indicators.'); + CheckBox('Trigger', 'ShowTrigger'); + imgui.ShowHelp('Shows an overlay when you activate an action.'); + CheckBox('SC Icon', 'ShowSkillchainIcon'); + imgui.ShowHelp('Overrides weaponskill icons when a skillchain would be formed.'); + CheckBox('SC Animation', 'ShowSkillchainAnimation'); + imgui.ShowHelp('Animates a border around weaponskill icons when a skillchain would be formed.'); + imgui.EndGroup(); + imgui.SameLine(); + imgui.BeginGroup(); CheckBox('Cross', 'ShowCross'); imgui.ShowHelp('Displays a X over actions you don\'t currently know.'); CheckBox('Fade', 'ShowFade'); @@ -275,18 +292,10 @@ function exposed:Render() imgui.ShowHelp('Shows action recast timers.'); CheckBox('Hotkey', 'ShowHotkey'); imgui.ShowHelp('Shows hotkey labels.'); - imgui.EndGroup(); - imgui.SameLine(); - imgui.BeginGroup(); CheckBox('Name', 'ShowName'); imgui.ShowHelp('Shows action names.'); - CheckBox('Trigger', 'ShowTrigger'); - imgui.ShowHelp('Shows an overlay when you activate an action.'); - CheckBox('SC Icon', 'ShowSkillchainIcon'); - imgui.ShowHelp('Overrides weaponskill icons when a skillchain would be formed.'); - CheckBox('SC Animation', 'ShowSkillchainAnimation'); - imgui.ShowHelp('Animates a border around weaponskill icons when a skillchain would be formed.'); imgui.EndGroup(); + imgui.EndTabItem(); end if imgui.BeginTabItem('Behavior##tCrossbarConfigBehaviorTab') then @@ -294,17 +303,36 @@ function exposed:Render() imgui.TextColored(header, 'Macro Elements'); CheckBox('Clickable', 'ClickToActivate'); imgui.ShowHelp('Makes macros activate when their icon is left clicked.'); + imgui.TextColored(header, 'Trigger Duration'); + local buff = { gSettings.TriggerDuration }; + if imgui.SliderFloat('##TriggerDurationSlider', buff, 0.01, 1.5, '%.2f', ImGuiSliderFlags_AlwaysClamp) then + gSettings.TriggerDuration = buff[1]; + settings.save(); + end + imgui.ShowHelp('Determines how long the activation flash occurs for when ShowTrigger is enabled.') imgui.TextColored(header, 'Hide UI'); CheckBox('While Zoning', 'HideWhileZoning'); imgui.ShowHelp('Hides UI while you are zoning or on title screen.'); CheckBox('During Cutscenes', 'HideWhileCutscene'); imgui.ShowHelp('Hides UI while the game event system is active.'); CheckBox('While Map Open', 'HideWhileMap'); - imgui.ShowHelp('Hides UI while the map is the topmost menu.'); + imgui.ShowHelp('Hides UI while the map is the topmost menu.'); + imgui.TextColored(header, 'Combo Behavior'); + CheckBox('Combo Priority', 'EnablePriority'); + imgui.ShowHelp('When enabled, pressing LR then R2 will be a seperate set from pressing R2 then L2. When disabled, order won\'t matter.'); + CheckBox('Double Tap', 'EnableDoubleTap'); + imgui.ShowHelp('When enabled, a quick double tap then hold of L2 or R2 will produce a seperate macro set from single taps.'); + CheckBox('Always Show Double', 'ShowDoubleDisplay'); + imgui.ShowHelp('When enabled, your L2 and R2 macros will be shown together while no combo keys are pressed.'); + CheckBox('Condense To Single', 'SwapToSingleDisplay'); + imgui.ShowHelp('When enabled, pressing L2 or R2 will show only the relevant set instead of both sets.'); + imgui.TextColored(header, 'Binding Menu'); + CheckBox('Default To ', 'DefaultSelectTarget'); + imgui.ShowHelp('When enabled, new bindings that can target anything besides yourself will default to .'); imgui.EndTabItem(); end - if imgui.BeginTabItem('Controller##tCrossbarControlsAppearanceTab') then + if imgui.BeginTabItem('Controller##tCrossbarControlseTab') then imgui.TextColored(header, 'Device Mapping'); if (imgui.BeginCombo('##tCrossBarControllerSelectConfig', state.Controllers[state.SelectedController], ImGuiComboFlags_None)) then for index,controller in ipairs(state.Controllers) do @@ -330,18 +358,22 @@ function exposed:Render() end end imgui.ShowHelp('Loads the selected device mapping.', true); - CheckBox('Combo Priority', 'EnablePriority'); - imgui.ShowHelp('When enabled, pressing LR then R2 will be a seperate set from pressing R2 then L2. When disabled, order won\'t matter.'); - CheckBox('Double Tap', 'EnableDoubleTap'); - imgui.ShowHelp('When enabled, a quick double tap then hold of L2 or R2 will produce a seperate macro set from single taps.'); - CheckBox('Always Show Double', 'ShowDoubleDisplay'); - imgui.ShowHelp('When enabled, your L2 and R2 macros will be shown together while no combo keys are pressed.'); - CheckBox('Condense To Single', 'SwapToSingleDisplay'); - imgui.ShowHelp('When enabled, pressing L2 or R2 will show only the relevant set instead of both sets.'); CheckBox('Inventory Passthrough', 'AllowInventoryPassthrough'); imgui.ShowHelp('When enabled, L2/R2/ZL/ZR will be passed to the game when inventory is the topmost menu.'); - CheckBox('Default To ', 'DefaultSelectTarget'); - imgui.ShowHelp('When enabled, new bindings that can target anything besides yourself will default to .'); + imgui.TextColored(header, 'Bind Menu Timer'); + local buff = { gSettings.BindMenuTimer }; + if imgui.SliderFloat('##BindMenuDurationSlider', buff, 0.1, 1.5, '%.2f', ImGuiSliderFlags_AlwaysClamp) then + gSettings.BindMenuTimer = buff[1]; + settings.save(); + end + imgui.ShowHelp('Determines how long the activation combo must be pressed to open or close binding menu.') + imgui.TextColored(header, 'Double Tap Timer'); + local buff = { gSettings.TapTimer }; + if imgui.SliderFloat('##TapTimerSlider', buff, 0.1, 1.5, '%.2f', ImGuiSliderFlags_AlwaysClamp) then + gSettings.TapTimer = buff[1]; + settings.save(); + end + imgui.ShowHelp('Determines how long you have to double tap L2 or R2 when double tap mode is enabled.') imgui.EndTabItem(); end if imgui.BeginTabItem('Binding##tCrossbarControlsBindingTab') then diff --git a/controller.lua b/controller.lua index c84fd23..6140b5e 100644 --- a/controller.lua +++ b/controller.lua @@ -140,8 +140,14 @@ function controller:Tick() if (gBindingGUI:GetActive()) then gBindingGUI:Close(); self.BindMenuState.Active = false; + elseif (not self.BindMenuState.Active) then + if (gSingleDisplay) then + self.BindMenuState.Active = true; + else + Error('Cannot open bind menu without a valid single display. Please enter "/tc" to open the menu and select a valid layout.') + end else - self.BindMenuState.Active = not self.BindMenuState.Active; + self.BindMenuState.Active = false; end self.BindMenuState.Timer = nil; end diff --git a/doubledisplay.lua b/doubledisplay.lua index d886f86..2632817 100644 --- a/doubledisplay.lua +++ b/doubledisplay.lua @@ -14,18 +14,19 @@ local function GetButtonAlias(comboIndex, buttonIndex) return string.format('%s:%d', macroComboBinds[comboIndex], buttonIndex); end -local DoubleDisplay = {}; +local DoubleDisplay = { Valid = false }; function DoubleDisplay:Destroy() self.Layout = nil; self.Elements = T{}; + self.Valid = false; end function DoubleDisplay:Initialize(layout) self.Layout = layout; self.Elements = T{}; - local position = gSettings.Position[gSettings.DoubleLayout]; + local position = gSettings.DoublePosition[gSettings.DoubleLayout]; for group = 0,1 do for macro = 1,8 do local index = (group * 8) + macro; @@ -45,6 +46,8 @@ function DoubleDisplay:Initialize(layout) Error('Failed to create Sprite in DoubleDisplay:Initialize.'); end end + + self.Valid = (self.Sprite ~= nil); end function DoubleDisplay:SetActivationTimer(macroState, macroIndex) @@ -62,11 +65,11 @@ end local d3dwhite = d3d8.D3DCOLOR_ARGB(255, 255, 255, 255); local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); function DoubleDisplay:Render(macroState) - if (self.Sprite == nil) then + if (self.Valid == false) then return; end - local pos = gSettings.Position[gSettings.DoubleLayout]; + local pos = gSettings.DoublePosition[gSettings.DoubleLayout]; local sprite = self.Sprite; sprite:Begin(); @@ -78,13 +81,21 @@ function DoubleDisplay:Render(macroState) end for _,element in ipairs(self.Elements) do - element:Render(sprite); + element:RenderIcon(sprite); + end + + for _,element in ipairs(self.Elements) do + element:RenderText(sprite); end sprite:End(); end function DoubleDisplay:HandleMouse(e) + if (self.Valid == false) then + return; + end + local macroState = gController:GetMacroState(); if (macroState > 2) then return; @@ -105,7 +116,11 @@ function DoubleDisplay:HandleMouse(e) end function DoubleDisplay:HitTest(x, y) - local pos = gSettings.Position[gSettings.DoubleLayout]; + if (self.Valid == false) then + return; + end + + local pos = gSettings.DoublePosition[gSettings.DoubleLayout]; if (x < pos[1]) or (y < pos[2]) then return false; end @@ -129,6 +144,10 @@ function DoubleDisplay:HitTest(x, y) end function DoubleDisplay:UpdateBindings(bindings) + if (self.Valid == false) then + return; + end + for i = 1,8 do self.Elements[i]:UpdateBinding(bindings[GetButtonAlias(1, i)]); self.Elements[i + 8]:UpdateBinding(bindings[GetButtonAlias(2, i)]); @@ -136,7 +155,11 @@ function DoubleDisplay:UpdateBindings(bindings) end function DoubleDisplay:UpdatePosition() - local position = gSettings.Position[gSettings.DoubleLayout]; + if (self.Valid == false) then + return; + end + + local position = gSettings.DoublePosition[gSettings.DoubleLayout]; for _,element in ipairs(self.Elements) do element:SetPosition(position); diff --git a/element.lua b/element.lua index 6e6f73a..196e141 100644 --- a/element.lua +++ b/element.lua @@ -52,7 +52,7 @@ function Element:New(hotkey, layout) Ready = false, Cost = '', Hotkey = hotkey, - Label = '', + Name = '', Recast = '', Skillchain = nil, }; @@ -122,17 +122,14 @@ function Element:SetPosition(position) end function Element:UpdateBinding(binding) - if (binding == self.Binding) then - return; - end - if (self.Updater ~= nil) then self.Updater:Destroy(); end + self.Icon = nil; self.Binding = binding; local updater = updaters.Empty; - self.State.Label = ''; + self.State.Name = ''; if (type(self.Binding) == 'table') then if (self.Binding.ActionType ~= nil) then local newUpdater = updaters[self.Binding.ActionType]; @@ -141,15 +138,27 @@ function Element:UpdateBinding(binding) end end if (type(self.Binding.Label) == 'string') then - self.State.Label = self.Binding.Label; + self.State.Name = self.Binding.Label; end end self.Updater = updater:New(); self.Updater:Initialize(self, self.Binding); + + if (self.Binding ~= nil) then + local tx = gTextureCache:GetTexture(self.Binding.Image); + local dimensions = { Width = self.Layout.Icon.Width, Height=self.Layout.Icon.Height }; + if tx and dimensions then + local preparedTexture = {}; + preparedTexture.Texture = tx.Texture; + preparedTexture.Rect = ffi.new('RECT', { 0, 0, tx.Width, tx.Height }); + preparedTexture.Scale = ffi.new('D3DXVECTOR2', { dimensions.Width / tx.Width, dimensions.Height / tx.Height }); + self.Icon = preparedTexture; + end + end end -function Element:Render(sprite) +function Element:RenderIcon(sprite) self.Updater:Tick(); local positionX = self.PositionX; @@ -174,23 +183,27 @@ function Element:Render(sprite) local icon = self.Icon; vec_position.x = positionX + layout.Icon.OffsetX; vec_position.y = positionY + layout.Icon.OffsetY; - if (self.Skillchain ~= nil) then - if (self.SkillchainAnimation == nil) then - self.SkillchainAnimation = - { - Frame = 1, - Time = os.clock(); - }; - elseif (os.clock() > (self.SkillchainAnimation.Time + layout.SkillchainFrameLength)) then - self.SkillchainAnimation.Frame = self.SkillchainAnimation.Frame + 1; - if (self.SkillchainAnimation.Frame > #layout.SkillchainFrames) then - self.SkillchainAnimation.Frame = 1; + if (self.State.Skillchain ~= nil) then + if (self.State.Skillchain.Open) then + if (self.SkillchainAnimation == nil) then + self.SkillchainAnimation = + { + Frame = 1, + Time = os.clock(); + }; + elseif (os.clock() > (self.SkillchainAnimation.Time + layout.SkillchainFrameLength)) then + self.SkillchainAnimation.Frame = self.SkillchainAnimation.Frame + 1; + if (self.SkillchainAnimation.Frame > #layout.SkillchainFrames) then + self.SkillchainAnimation.Frame = 1; + end + self.SkillchainAnimation.Time = os.clock(); end - self.SkillchainAnimation.Time = os.clock(); + else + self.SkillchainAnimation = nil; end if (gSettings.ShowSkillchainIcon) and (self.Binding.ShowSkillchainIcon) then - icon = layout.Textures[self.Skillchain.Name]; + icon = layout.Textures[self.State.Skillchain.Name]; end else self.SkillchainAnimation = nil; @@ -236,7 +249,16 @@ function Element:Render(sprite) sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, layout.TriggerOpacity); end end +end + +function Element:RenderText(sprite) + if (self.Binding == nil) then + return; + end + local positionX = self.PositionX; + local positionY = self.PositionY; + --Draw text elements.. for _,entry in ipairs(textOrder) do local setting = 'Show' .. entry; diff --git a/helpers.lua b/helpers.lua index ee0598f..1bddf47 100644 --- a/helpers.lua +++ b/helpers.lua @@ -42,6 +42,10 @@ function GetResourcePath(resource) end function LoadFile_s(filePath) + if (filePath == nil) then + return nil; + end + if not ashita.fs.exists(filePath) then return nil; end diff --git a/initializer.lua b/initializer.lua index 7dfb2c3..8077292 100644 --- a/initializer.lua +++ b/initializer.lua @@ -61,28 +61,14 @@ local defaultSettings = T{ TapTimer = 0.4, --No Tab.. - Position = T{}, + SinglePosition = T{}, + DoublePosition = T{}, }; gSettings = settings.load(defaultSettings); ---Gets target dimensions of texture from layout table.. -local function GetDimensions(layout, key) - for _,entry in ipairs(layout.FixedObjects) do - if (key == entry.Texture) then - return { Width=entry.Width, Height=entry.Height }; - end - end - - if (key == 'Frame') then - return { Width=layout.Frame.Width, Height=layout.Frame.Height }; - end - - return { Width=layout.Icon.Width, Height=layout.Icon.Height }; -end - --Creates textures, assigns local function PrepareLayout(layout, scale) - for _,singleTable in ipairs(T{layout, layout.FixedObjects, layout.Elements}) do + for _,singleTable in ipairs(T{layout, layout.FixedObjects, layout.Elements, layout.Textures}) do for _,tableEntry in pairs(singleTable) do if (type(tableEntry) == 'table') then if (tableEntry.OffsetX ~= nil) then @@ -105,12 +91,17 @@ local function PrepareLayout(layout, scale) --Prepare textures for efficient rendering.. for _,singleTable in ipairs(T{layout.SkillchainFrames, layout.Textures}) do - for key,path in pairs(singleTable) do - local tx = gTextureCache:GetTexture(path); - if tx then - --Get target dimensions and prepare a RECT and scale vector for rendering at that size.. - local dimensions = GetDimensions(layout, key); + for key,entry in pairs(singleTable) do + local tx,dimensions; + if type(entry) == 'table' then + tx = gTextureCache:GetTexture(entry.Path) + dimensions = { Width=entry.Width, Height=entry.Height }; + else + tx = gTextureCache:GetTexture(entry) + dimensions = { Width=layout.Icon.Width, Height=layout.Icon.Height }; + end + if tx and dimensions then local preparedTexture = {}; preparedTexture.Texture = tx.Texture; preparedTexture.Rect = ffi.new('RECT', { 0, 0, tx.Width, tx.Height }); @@ -151,28 +142,28 @@ function Initializer:ApplyLayout() local singleLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.SingleLayout)); if singleLayout then - PrepareLayout(singleLayout, gSettings.SingleScale); - local position = gSettings.Position[gSettings.SingleLayout]; + PrepareLayout(singleLayout.Single, gSettings.SingleScale); + local position = gSettings.SinglePosition[gSettings.SingleLayout]; if position == nil then - gSettings.Position[gSettings.SingleLayout] = GetDefaultPosition(singleLayout); + gSettings.SinglePosition[gSettings.SingleLayout] = GetDefaultPosition(singleLayout.Single); settings.save(); end - gSingleDisplay:Initialize(singleLayout); + gSingleDisplay:Initialize(singleLayout.Single); else - Error('Failed to load single layout.'); + Error('Failed to load single layout. Please enter "/tc" to open the menu and select a valid layout.'); end local doubleLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.DoubleLayout)); if doubleLayout then - PrepareLayout(doubleLayout, gSettings.DoubleScale); - local position = gSettings.Position[gSettings.DoubleLayout]; + PrepareLayout(doubleLayout.Double, gSettings.DoubleScale); + local position = gSettings.DoublePosition[gSettings.DoubleLayout]; if position == nil then - gSettings.Position[gSettings.DoubleLayout] = GetDefaultPosition(doubleLayout); + gSettings.DoublePosition[gSettings.DoubleLayout] = GetDefaultPosition(doubleLayout.Double); settings.save(); end - gDoubleDisplay:Initialize(doubleLayout); + gDoubleDisplay:Initialize(doubleLayout.Double); else - Error('Failed to load double layout.'); + Error('Failed to load double layout. Please enter "/tc" to open the menu and select a valid layout.'); end gTextureCache:Clear(); @@ -186,5 +177,8 @@ end); Initializer:ApplyController(); Initializer:ApplyLayout(); +if (gSingleDisplay) and (gDoubleDisplay) then + gBindings:Update(); +end return Initializer; \ No newline at end of file diff --git a/resources/layouts/classic.lua b/resources/layouts/classic.lua index c612f5e..04cfc16 100644 --- a/resources/layouts/classic.lua +++ b/resources/layouts/classic.lua @@ -1,204 +1,156 @@ -local theme = { - --[[ - Path to images.. - First checks absolute path. - Next checks: ashita/config/addons/addonname/resources/ - Finally checks: ashita/addons/addonname/resources/ - ]]-- - CrossPath = 'misc/cross.png', - TriggerPath = 'misc/trigger.png', +return { + Single = { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' + }, - --How transparent icons should become when on cooldown (0 = fully transparent, 1 = opaque) - IconFadeAlpha = 0.5, - - --Time, in seconds, to wait between advancing frames of skillchain animation. - SkillchainAnimationTime = 0.08, + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, - --This is checked the same way, and can contain any amount of frames. Frames cycle back to first after last is completed. - SkillchainAnimationPaths = T{ - 'misc/crawl1.png', - 'misc/crawl2.png', - 'misc/crawl3.png', - 'misc/crawl4.png', - 'misc/crawl5.png', - 'misc/crawl6.png', - 'misc/crawl7.png' - }, - - --Display used when showing a specific macro combination, 8 button squares total. - SingleDisplay = { - FontObjects = { - --[[ - OffsetX: Distance from the top left of individual square object. - OffsetY: Distance from the top right of individual square object. - BoxWidth: Width of the box for text to be drawn into. - BoxHeight: Height of the box for text to be drawn into. - OutlineWidth: Width of the text outline. - FontHeight: Height of the font. - FontFamily: Font Family. - FontFlags: bitflags for font modifiers - 0x01 - Bold - 0x02 - Italic - 0x04 - Underline - 0x08 - Strikeout - FontAlignment: Font alignment within the box - 0x00 - Left Aligned - 0x01 - Center Aligned - 0x02 - Right Aligned - FontColor - Hex ARGB value, highest significance byte is alpha. - OutlineColor - Hex ARGB value, highest significance byte is alpha. - ]]-- - Cost = { - OffsetX = 11, - OffsetY = 31, - BoxWidth = 40, - BoxHeight = 9, - OutlineWidth = 2, - FontHeight = 9, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 2, - FontColor = 0xFF389609, - OutlineColor = 0xFF000000, - }, - Macro = { - OffsetX = 11, - OffsetY = 2, - BoxWidth = 40, - BoxHeight = 13, - OutlineWidth = 1, - FontHeight = 12, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 0, - FontColor = 0xFFFFFFFF, - OutlineColor = 0xFF000000, - }, - Name = { - OffsetX = 0, - OffsetY = 44, - BoxWidth = 58, - BoxHeight = 12, - OutlineWidth = 2, - FontHeight = 9, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 1, - FontColor = 0xFFFFFFFF, - OutlineColor = 0xFF000000, - }, - Recast = { - OffsetX = 11, - OffsetY = 31, - BoxWidth = 40, - BoxHeight = 9, - OutlineWidth = 2, - FontHeight = 9, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 0, - FontColor = 0xFFBFCC04, - OutlineColor = 0xFF000000, - }, + --[[ + Textures to be preloaded and sized. + Can be a string, or a table with Path, Width, and Height entries. + If using a string, will be sized to match the Width and Height specified for Icon. + ]]-- + Textures = T{ + Cross = 'misc/cross.png', + Frame = { Path='misc/frame.png', Width=44, Height=44 }, + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + Buttons = { Path='misc/buttons.png', Width=40, Height=40 }, + Dpad = { Path='misc/dpad.png', Width=40, Height=40 }, + DragHandle = { Path='misc/drag.png', Width=25, Height=25 }, }, - ImageObjects = { - --[[ - OffsetX: Distance from the top left of individual square object. - OffsetY: Distance from the top right of individual square object. - Width: Width of image to be drawn. - Height: Height of image to be drawn. - ]]-- - Frame = { - OffsetX = 9, - OffsetY = 0, - Width = 44, - Height = 44 - }, - Icon = { - OffsetX = 11, - OffsetY = 2, - Width = 40, - Height = 40 - }, - Overlay = { - OffsetX = 11, - OffsetY = 2, - Width = 40, - Height = 40 - }, - }, + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + + --Opacity of the overlay shown when a macro is activated. [0-255] + TriggerOpacity = 128, - Primitives = { - { - File = 'misc/dpad.png', - OffsetX = 69, - OffsetY = 57, - texture = nil, - texture_offset_x= 0.0, - texture_offset_y= 0.0, - border_visible = false, - border_color = 0x00000000, - border_flags = FontBorderFlags.None, - border_sizes = '0,0,0,0', - visible = true, - position_x = 0, - position_y = 0, - can_focus = false, - locked = false, - lockedz = false, - scale_x = 1.0, - scale_y = 1.0, - width = 40, - height = 40, - color = 0xFFFFFFFF, - }, - { - File = 'misc/buttons.png', - OffsetX = 243, - OffsetY = 57, - texture = nil, - texture_offset_x= 0.0, - texture_offset_y= 0.0, - border_visible = false, - border_color = 0x00000000, - border_flags = FontBorderFlags.None, - border_sizes = '0,0,0,0', - visible = true, - position_x = 0, - position_y = 0, - can_focus = false, - locked = false, - lockedz = false, - scale_x = 1.0, - scale_y = 1.0, - width = 40, - height = 40, - color = 0xFFFFFFFF, - }, + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, }, - --Path to frame image - FramePath = 'misc/frame.png', + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + }, - --Height of the full graphics object used to render all squares. All squares *MUST* fully fit within this panel. - PanelHeight = 168, + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, - --Width of the full graphics object used to render all squares. All squares *MUST* fully fit within this panel. - PanelWidth = 358, + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, - --Default position for object. Set later in this theme using scaling lib. - DefaultX = 0, - DefaultY = 0, + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, - --Height of an individual square object. - SquareHeight = 58, + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + T{ + OffsetX = 60, + OffsetY = 57, + Texture = 'Buttons', + }, + T{ + OffsetX = 234, + OffsetY = 57, + Texture = 'Dpad', + }, + }, - --Width of an individual square object. - SquareWidth = 58, + --Size of hitbox for entire element. + Panel = { + Width = 358, + Height = 168, + }, --[[ - Table of square objects, where each entry must be a table with attributes PositionX, PositionY. + Table of element positions. SingleDisplay has 8 elements. Objects are ordered(according to default controller layout): 1. Dpad Up 2. Dpad Right @@ -210,8 +162,7 @@ local theme = { 8. Button Left Must remain 8 objects. ]]-- - - Squares = T{ + Elements = T{ { OffsetX = 58, OffsetY = 0 }, { OffsetX = 116, OffsetY = 55 }, { OffsetX = 58, OffsetY = 110 }, @@ -222,233 +173,171 @@ local theme = { { OffsetX = 174, OffsetY = 55 }, }, }, - --Display used when showing default display, 16 button squares total. - DoubleDisplay = { - FontObjects = { - --[[ - OffsetX: Distance from the top left of individual square object. - OffsetY: Distance from the top right of individual square object. - BoxWidth: Width of the box for text to be drawn into. - BoxHeight: Height of the box for text to be drawn into. - OutlineWidth: Width of the text outline. - FontHeight: Height of the font. - FontFamily: Font Family. - FontFlags: bitflags for font modifiers - 0x01 - Bold - 0x02 - Italic - 0x04 - Underline - 0x08 - Strikeout - FontAlignment: Font alignment within the box - 0x00 - Left Aligned - 0x01 - Center Aligned - 0x02 - Right Aligned - FontColor - Hex ARGB value, highest significance byte is alpha. - OutlineColor - Hex ARGB value, highest significance byte is alpha. - ]]-- - Cost = { - OffsetX = 11, - OffsetY = 31, - BoxWidth = 40, - BoxHeight = 9, - OutlineWidth = 2, - FontHeight = 9, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 2, - FontColor = 0xFF389609, - OutlineColor = 0xFF000000, - }, - Macro = { - OffsetX = 11, - OffsetY = 2, - BoxWidth = 40, - BoxHeight = 13, - OutlineWidth = 1, - FontHeight = 12, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 0, - FontColor = 0xFFFFFFFF, - OutlineColor = 0xFF000000, - }, - Name = { - OffsetX = 0, - OffsetY = 44, - BoxWidth = 58, - BoxHeight = 12, - OutlineWidth = 2, - FontHeight = 9, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 1, - FontColor = 0xFFFFFFFF, - OutlineColor = 0xFF000000, - }, - Recast = { - OffsetX = 11, - OffsetY = 31, - BoxWidth = 40, - BoxHeight = 9, - OutlineWidth = 2, - FontHeight = 9, - FontFamily = 'Arial', - FontFlags = 0, - FontAlignment = 0, - FontColor = 0xFFBFCC04, - OutlineColor = 0xFF000000, - }, - }, - ImageObjects = { - --[[ - OffsetX: Distance from the top left of individual square object. - OffsetY: Distance from the top right of individual square object. - Width: Width of image to be drawn. - Height: Height of image to be drawn. - ]]-- - Frame = { - OffsetX = 9, - OffsetY = 0, - Width = 44, - Height = 44 - }, - Icon = { - OffsetX = 11, - OffsetY = 2, - Width = 40, - Height = 40 - }, - Overlay = { - OffsetX = 11, - OffsetY = 2, - Width = 40, - Height = 40 - }, + Double = { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' }, - + + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, + --[[ - Primitive objects to be drawn after drawing squares. - File will be resolved to resources directory(config then addon). - OffsetX and OffsetY are used for positioning. - All other fields are carried over to ashita's primitive library. + Textures to be preloaded and sized. + Can be a string, or a table with Path, Width, and Height entries. + If using a string, will be sized to match the Width and Height specified for Icon. ]]-- - Primitives = { - { - File = 'misc/dpad.png', - OffsetX = 69, - OffsetY = 57, - texture = nil, - texture_offset_x= 0.0, - texture_offset_y= 0.0, - border_visible = false, - border_color = 0x00000000, - border_flags = FontBorderFlags.None, - border_sizes = '0,0,0,0', - visible = true, - position_x = 0, - position_y = 0, - can_focus = false, - locked = false, - lockedz = false, - scale_x = 1.0, - scale_y = 1.0, - width = 40, - height = 40, - color = 0xFFFFFFFF, + Textures = T{ + Cross = 'misc/cross.png', + Frame = { Path='misc/frame.png', Width=44, Height=44 }, + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + Buttons = { Path='misc/buttons.png', Width=40, Height=40 }, + Dpad = { Path='misc/dpad.png', Width=40, Height=40 }, + DragHandle = { Path='misc/drag.png', Width=25, Height=25 }, + }, + + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + + --Opacity of the overlay shown when a macro is activated. [0-255] + TriggerOpacity = 128, + + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, + Width = 44, + Height = 44, + }, + + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + }, + + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, + + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, + + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, + + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + T{ + OffsetX = 60, + OffsetY = 57, + Texture = 'Buttons', }, - { - File = 'misc/buttons.png', - OffsetX = 243, - OffsetY = 57, - texture = nil, - texture_offset_x= 0.0, - texture_offset_y= 0.0, - border_visible = false, - border_color = 0x00000000, - border_flags = FontBorderFlags.None, - border_sizes = '0,0,0,0', - visible = true, - position_x = 0, - position_y = 0, - can_focus = false, - locked = false, - lockedz = false, - scale_x = 1.0, - scale_y = 1.0, - width = 40, - height = 40, - color = 0xFFFFFFFF, + T{ + OffsetX = 234, + OffsetY = 57, + Texture = 'Dpad', }, - { - File = 'misc/dpad.png', - OffsetX = 457, - OffsetY = 57, - texture = nil, - texture_offset_x= 0.0, - texture_offset_y= 0.0, - border_visible = false, - border_color = 0x00000000, - border_flags = FontBorderFlags.None, - border_sizes = '0,0,0,0', - visible = true, - position_x = 0, - position_y = 0, - can_focus = false, - locked = false, - lockedz = false, - scale_x = 1.0, - scale_y = 1.0, - width = 40, - height = 40, - color = 0xFFFFFFFF, + T{ + OffsetX = 448, + OffsetY = 57, + Texture = 'Buttons', }, - { - File = 'misc/buttons.png', - OffsetX = 631, - OffsetY = 57, - texture = nil, - texture_offset_x= 0.0, - texture_offset_y= 0.0, - border_visible = false, - border_color = 0x00000000, - border_flags = FontBorderFlags.None, - border_sizes = '0,0,0,0', - visible = true, - position_x = 0, - position_y = 0, - can_focus = false, - locked = false, - lockedz = false, - scale_x = 1.0, - scale_y = 1.0, - width = 40, - height = 40, - color = 0xFFFFFFFF, + T{ + OffsetX = 622, + OffsetY = 57, + Texture = 'Dpad', }, }, - - --Path to frame image - FramePath = 'misc/frame.png', - - --Height of the full graphics object used to render all squares. All squares *MUST* fully fit within this panel. - PanelHeight = 168, - - --Width of the full graphics object used to render all squares. All squares *MUST* fully fit within this panel. - PanelWidth = 746, - - --Default position for object. Set later in this theme using scaling lib. - DefaultX = 0, - DefaultY = 0, - - --Height of an individual square object. - SquareHeight = 58, - - --Width of an individual square object. - SquareWidth = 58, - - + + --Size of hitbox for entire element. + Panel = { + Width = 746, + Height = 168, + }, + --[[ - Table of square objects, where each entry must be a table with attributes PositionX, PositionY. + Table of element positions. DoubleDisplay has 16 elements. Objects are ordered(according to default controller layout): 1. Dpad Up(L2) 2. Dpad Right(L2) @@ -466,10 +355,8 @@ local theme = { 14. Button Right(R2) 15. Button Down(R2) 16. Button Left(R2) - Must remain 16 objects. ]]-- - - Squares = T{ + Elements = T{ { OffsetX = 58, OffsetY = 0 }, { OffsetX = 116, OffsetY = 55 }, { OffsetX = 58, OffsetY = 110 }, @@ -487,21 +374,5 @@ local theme = { { OffsetX = 620, OffsetY = 110 }, { OffsetX = 562, OffsetY = 55 }, }, - }, - -}; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file + } +}; \ No newline at end of file diff --git a/singledisplay.lua b/singledisplay.lua index 5989ade..05f0933 100644 --- a/singledisplay.lua +++ b/singledisplay.lua @@ -14,18 +14,19 @@ local function GetButtonAlias(comboIndex, buttonIndex) return string.format('%s:%d', macroComboBinds[comboIndex], buttonIndex); end -local SingleDisplay = {}; +local SingleDisplay = { Valid = false }; function SingleDisplay:Destroy() self.Layout = nil; self.ElementGroups = T{}; + self.Valid = false; end function SingleDisplay:Initialize(layout) self.Layout = layout; self.ElementGroups = T{}; - local position = gSettings.Position[gSettings.SingleLayout]; + local position = gSettings.SinglePosition[gSettings.SingleLayout]; for group = 1,6 do self.ElementGroups[group] = T{}; @@ -46,9 +47,15 @@ function SingleDisplay:Initialize(layout) Error('Failed to create Sprite in SingleDisplay:Initialize.'); end end + + self.Valid = (self.Sprite ~= nil); end function SingleDisplay:GetElementByMacro(macroState, macroIndex) + if (self.Valid == false) then + return; + end + local group = self.ElementGroups[macroState]; if (group ~= nil) then local element = group[macroIndex]; @@ -59,6 +66,10 @@ function SingleDisplay:GetElementByMacro(macroState, macroIndex) end function SingleDisplay:Activate(macroState, macroIndex) + if (self.Valid == false) then + return; + end + local element = self:GetElementByMacro(macroState, macroIndex); if element then element:Activate(); @@ -69,11 +80,11 @@ end local d3dwhite = d3d8.D3DCOLOR_ARGB(255, 255, 255, 255); local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); function SingleDisplay:Render(macroState) - if (self.Sprite == nil) or (macroState == 0) then + if (self.Valid == false) or (macroState == 0) then return; end - local pos = gSettings.Position[gSettings.SingleLayout]; + local pos = gSettings.SinglePosition[gSettings.SingleLayout]; local sprite = self.Sprite; sprite:Begin(); @@ -87,13 +98,20 @@ function SingleDisplay:Render(macroState) local group = self.ElementGroups[macroState]; if group then for _,element in ipairs(group) do - element:Render(sprite); + element:RenderIcon(sprite); + end + for _,element in ipairs(group) do + element:RenderText(sprite); end end sprite:End(); end function SingleDisplay:HandleMouse(e) + if (self.Valid == false) then + return; + end + if (e.message == 513) then local hit, element = self:HitTest(e.x, e.y); if element ~= nil then @@ -111,7 +129,11 @@ function SingleDisplay:HandleMouse(e) end function SingleDisplay:HitTest(x, y) - local pos = gSettings.Position[gSettings.SingleLayout]; + if (self.Valid == false) then + return; + end + + local pos = gSettings.SinglePosition[gSettings.SingleLayout]; if (x < pos[1]) or (y < pos[2]) then return false; end @@ -138,6 +160,10 @@ function SingleDisplay:HitTest(x, y) end function SingleDisplay:UpdateBindings(bindings) + if (self.Valid == false) then + return; + end + for macroState,group in ipairs(self.ElementGroups) do for macroIndex,element in ipairs(group) do element:UpdateBinding(bindings[GetButtonAlias(macroState, macroIndex)]); @@ -146,7 +172,11 @@ function SingleDisplay:UpdateBindings(bindings) end function SingleDisplay:UpdatePosition() - local position = gSettings.Position[gSettings.SingleLayout]; + if (self.Valid == false) then + return; + end + + local position = gSettings.SinglePosition[gSettings.SingleLayout]; for _,group in ipairs(self.ElementGroups) do for _,element in ipairs(group) do diff --git a/state/skillchain.lua b/state/skillchain.lua index d2038b7..a751156 100644 --- a/state/skillchain.lua +++ b/state/skillchain.lua @@ -19,6 +19,26 @@ local Resonation = { Radiance = 17, Umbra = 18 }; +local names = { + 'Liquefaction', + 'Induration', + 'Detonation', + 'Scission', + 'Impaction', + 'Reverberation', + 'Transfixion', + 'Compression', + 'Fusion', + 'Gravitation', + 'Distortion', + 'Fragmentation', + 'Light', + 'Darkness', + 'Light', + 'Darkness', + 'Light', + 'Darkness', +}; local possibleSkillchains = { { Resonation.Light, Resonation.Light, Resonation.Light }, @@ -633,6 +653,10 @@ function exposed:GetSkillchain(targetIndex, weaponskillId) if not resonation then return; end + if (os.clock() > resonation.WindowClose) then + resonationMap[targetIndex] = nil; + return; + end local wsAttributes = weaponskillResonationMap[weaponskillId]; if not wsAttributes then @@ -642,7 +666,7 @@ function exposed:GetSkillchain(targetIndex, weaponskillId) for _,sc in ipairs(possibleSkillchains) do if (resonation.Attributes:contains(sc[2])) then if wsAttributes:contains(sc[3]) then - return resonation, sc[1]; + return resonation, names[sc[1]]; end end end @@ -682,11 +706,15 @@ function exposed:GetSkillchainBySpell(targetIndex, spellId) if not resonation then return; end + if (os.clock() > resonation.WindowClose) then + resonationMap[targetIndex] = nil; + return; + end for _,sc in ipairs(possibleSkillchains) do if (resonation.Attributes:contains(sc[2])) then if spellAttributes:contains(sc[3]) then - return resonation, sc[1]; + return resonation, names[sc[1]]; end end end diff --git a/tCrossBar.lua b/tCrossBar.lua index 9a98a1f..1375460 100644 --- a/tCrossBar.lua +++ b/tCrossBar.lua @@ -21,7 +21,7 @@ addon.name = 'tCrossBar'; addon.author = 'Thorny'; -addon.version = '1.09'; +addon.version = '2.00'; addon.desc = 'Creates a controller scheme for activating macros, and provides visual aids for your macroed abilities.'; addon.link = 'https://ashitaxi.com/'; diff --git a/updaters/ability.lua b/updaters/ability.lua index 296ffbf..cce44d1 100644 --- a/updaters/ability.lua +++ b/updaters/ability.lua @@ -299,7 +299,7 @@ function Updater:Tick() local abilityAvailable = player:KnowsAbility(self.Resource.Id); local abilityCostDisplay, costMet = self:CostFunction(recastReady); if (type(recastReady) == 'number') then - recastReady = (recastReady > 0); + recastReady = (recastReady == 0); end self.State.Available = abilityAvailable; diff --git a/updaters/spell.lua b/updaters/spell.lua index ca7980d..7f75c4c 100644 --- a/updaters/spell.lua +++ b/updaters/spell.lua @@ -408,7 +408,7 @@ function Updater:UpdateSkillchain() return; end - local resonation, result = skillchain:GetSkillchainBySpell(target, self.Resource.Id); + local resonation, result = skillchain:GetSkillchainBySpell(target, self.Resource.Index); if (resonation == nil) or (resonation.WindowClose < os.clock()) then return; end diff --git a/updaters/weaponskill.lua b/updaters/weaponskill.lua index f04c17f..78a0822 100644 --- a/updaters/weaponskill.lua +++ b/updaters/weaponskill.lua @@ -69,7 +69,6 @@ end function Updater:Tick() local known = player:KnowsAbility(self.Resource.Id); - local activeSkillchain = self:UpdateSkillchain(); self.State.Available = known; self.State.Cost = self:CostFunction(); From fa171af31c818b24fc4af669b9ba342aa05921e8 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:32:29 -0500 Subject: [PATCH 10/25] add drag indicator and improve drag config --- callbacks.lua | 24 +++++--- configgui.lua | 125 ++++++++++++++++------------------------ doubledisplay.lua | 53 ++++++++++++++--- initializer.lua | 36 ++++++++---- resources/misc/drag.png | Bin 0 -> 1751 bytes singledisplay.lua | 59 ++++++++++++++++--- 6 files changed, 191 insertions(+), 106 deletions(-) create mode 100644 resources/misc/drag.png diff --git a/callbacks.lua b/callbacks.lua index d75633f..f093a44 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -74,11 +74,13 @@ ashita.events.register('d3d_present', 'd3d_present_cb', function () renderTarget = nil; if (gConfigGUI.ForceDisplay) then gConfigGUI.ForceDisplay:Render(1); + renderTarget = gConfigGUI.ForceDisplay; return; end if (gBindingGUI.ForceDisplay) then gBindingGUI.ForceDisplay:Render(gBindingGUI.ForceState); + renderTarget = gBindingGUI.ForceDisplay; return; end @@ -98,17 +100,25 @@ ashita.events.register('d3d_present', 'd3d_present_cb', function () end end - if renderTarget then - renderTarget:Render(macroState); - end + renderTarget:Render(macroState); end); +local mouseDown; ashita.events.register('mouse', 'mouse_cb', function (e) - if gConfigGUI:HandleMouse(e) then - return; + if (renderTarget ~= nil) then + renderTarget:HandleMouse(e); end - if (renderTarget ~= nil) and (gSettings.ClickToActivate) then - renderTarget:HandleMouse(e); + if (e.message == 513) then + if (e.blocked == true) then + mouseDown = true; + end + end + + if (e.message == 514) then + if mouseDown then + e.blocked = true; + mouseDown = false; + end end end); \ No newline at end of file diff --git a/configgui.lua b/configgui.lua index ac816bf..fa4ce8d 100644 --- a/configgui.lua +++ b/configgui.lua @@ -3,8 +3,6 @@ local imgui = require('imgui'); local lastPositionX, lastPositionY; local scaling = require('scaling'); local state = { - DragMode = 'Disabled', - DragTarget = '', IsOpen = { false } }; local validControls = T{ @@ -128,41 +126,6 @@ end local exposed = {}; -function exposed:HandleMouse(e) - if (state.IsOpen[1] == false) or (state.DragMode == 'Disabled') then - return false; - end - - if state.DragMode == 'Active' then - local pos = state.DragBuffer; - pos[1] = pos[1] + (e.x - lastPositionX); - pos[2] = pos[2] + (e.y - lastPositionY); - state.DragTarget:UpdatePosition(); - settings.save(); - lastPositionX = e.x; - lastPositionY = e.y; - if (e.message == 514) then - state.DragMode = 'Disabled'; - e.blocked = true; - end - return true; - end - - if (state.DragMode == 'Pending') then - if e.message == 513 then - if state.DragTarget:HitTest(e.x, e.y) then - state.DragMode = 'Active'; - lastPositionX = e.x; - lastPositionY = e.y; - e.blocked = true; - end - end - return true; - end - - return false; -end - function exposed:Render() if (state.IsOpen[1]) then if (imgui.Begin(string.format('%s v%s Configuration', addon.name, addon.version), state.IsOpen, ImGuiWindowFlags_AlwaysAutoResize)) then @@ -180,35 +143,40 @@ function exposed:Render() imgui.EndCombo(); end imgui.SliderFloat('##SingleScale', state.SingleScale, 0.5, 3, '%.2f', ImGuiSliderFlags_AlwaysClamp); - if (state.DragMode == 'Disabled') then - if (imgui.Button('Move##MoveSingle')) then - state.DragBuffer = gSettings.SinglePosition[gSettings.SingleLayout]; - state.DragMode = 'Pending'; - state.DragTarget = gSingleDisplay; + if (gSingleDisplay.Valid) then + local button = string.format('%s##MoveToggleSingle', (state.DragTarget == gSingleDisplay) and 'End Drag' or 'Allow Drag'); + if (imgui.Button(button)) then + if (state.DragTarget == gSingleDisplay) then + state.DragTarget.AllowDrag = false; + state.DragTarget = nil; + else + if (state.DragTarget ~= nil) then + state.DragTarget.AllowDrag = false; + end + state.DragTarget = gSingleDisplay; + state.DragTarget.AllowDrag = true; + end end imgui.ShowHelp('Allows you to drag the single display.', true); imgui.SameLine(); + if (imgui.Button('Reset##ResetSingle')) then + gSettings.SinglePosition = GetDefaultPosition(gSingleDisplay.Layout); + gSingleDisplay:UpdatePosition(); + settings.save(); + end + imgui.ShowHelp('Resets single display to default position.', true); + imgui.SameLine(); end - if (imgui.Button('Reset##ResetSingle')) then - gSettings.SinglePosition[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); - gSingleDisplay:UpdatePosition(); - settings.save(); - end - imgui.ShowHelp('Resets single display to default position.', true); - imgui.SameLine(); if (imgui.Button('Apply##ApplySingle')) then local layout = state.Layouts[state.SingleLayout]; if (layout == nil) then Error('You must select a valid layout to apply it.'); else gSettings.SingleLayout = layout; - local updatePosition = (gSettings.SingleScale ~= state.SingleScale[1]); gSettings.SingleScale = state.SingleScale[1]; gInitializer:ApplyLayout(); - if updatePosition then - gSettings.SinglePosition[gSettings.SingleLayout] = GetDefaultPosition(gSingleDisplay.Layout); - gSingleDisplay:UpdatePosition(); - end + gSettings.SinglePosition = GetDefaultPosition(gSingleDisplay.Layout); + gSingleDisplay:UpdatePosition(); gBindings:Update(); settings.save(); end @@ -225,35 +193,40 @@ function exposed:Render() imgui.EndCombo(); end imgui.SliderFloat('##DoubleScale', state.DoubleScale, 0.5, 3, '%.2f', ImGuiSliderFlags_AlwaysClamp); - if (state.DragMode == 'Disabled') then - if (imgui.Button('Move##MoveDouble')) then - state.DragBuffer = gSettings.DoublePosition[gSettings.DoubleLayout]; - state.DragMode = 'Pending'; - state.DragTarget = gDoubleDisplay; + if (gDoubleDisplay.Valid) then + local button = string.format('%s##MoveToggleDouble', (state.DragTarget == gDoubleDisplay) and 'End Drag' or 'Allow Drag'); + if (imgui.Button(button)) then + if (state.DragTarget == gDoubleDisplay) then + state.DragTarget.AllowDrag = false; + state.DragTarget = nil; + else + if (state.DragTarget ~= nil) then + state.DragTarget.AllowDrag = false; + end + state.DragTarget = gDoubleDisplay; + state.DragTarget.AllowDrag = true; + end end - imgui.ShowHelp('Allows you to drag the double display.', true); + imgui.ShowHelp('Allows you to drag the single display.', true); + imgui.SameLine(); + if (imgui.Button('Reset##ResetDouble')) then + gSettings.DoublePosition = GetDefaultPosition(gDoubleDisplay.Layout); + gDoubleDisplay:UpdatePosition(); + settings.save(); + end + imgui.ShowHelp('Resets single display to default position.', true); imgui.SameLine(); end - if (imgui.Button('Reset##ResetDouble')) then - gSettings.DoublePosition[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); - gDoubleDisplay:UpdatePosition(); - settings.save(); - end - imgui.ShowHelp('Resets double display to default position.', true); - imgui.SameLine(); if (imgui.Button('Apply##ApplyDouble')) then local layout = state.Layouts[state.DoubleLayout]; if (layout == nil) then Error('You must select a valid layout to apply it.'); else gSettings.DoubleLayout = layout; - local updatePosition = (gSettings.DoubleScale ~= state.DoubleScale[1]); gSettings.DoubleScale = state.DoubleScale[1]; gInitializer:ApplyLayout(); - if updatePosition then - gSettings.DoublePosition[gSettings.DoubleLayout] = GetDefaultPosition(gDoubleDisplay.Layout); - gDoubleDisplay:UpdatePosition(); - end + gSettings.DoublePosition = GetDefaultPosition(gDoubleDisplay.Layout); + gDoubleDisplay:UpdatePosition(); gBindings:Update(); settings.save(); end @@ -391,10 +364,14 @@ function exposed:Render() end end - if state.IsOpen[1] and (state.DragMode ~= 'Disabled') then + if state.IsOpen[1] then self.ForceDisplay = state.DragTarget; else self.ForceDisplay = nil; + if (state.DragTarget ~= nil) then + state.DragTarget.AllowDrag = false; + state.DragTarget = nil; + end end end @@ -403,7 +380,7 @@ function exposed:Show() GetLayouts(); state.ForceTab = true; state.IsOpen = { true }; - state.DragMode = 'Disabled'; + state.DragTarget = nil; end return exposed; \ No newline at end of file diff --git a/doubledisplay.lua b/doubledisplay.lua index 2632817..6dfe548 100644 --- a/doubledisplay.lua +++ b/doubledisplay.lua @@ -26,7 +26,7 @@ function DoubleDisplay:Initialize(layout) self.Layout = layout; self.Elements = T{}; - local position = gSettings.DoublePosition[gSettings.DoubleLayout]; + local position = gSettings.DoublePosition; for group = 0,1 do for macro = 1,8 do local index = (group * 8) + macro; @@ -69,7 +69,7 @@ function DoubleDisplay:Render(macroState) return; end - local pos = gSettings.DoublePosition[gSettings.DoubleLayout]; + local pos = gSettings.DoublePosition; local sprite = self.Sprite; sprite:Begin(); @@ -88,17 +88,56 @@ function DoubleDisplay:Render(macroState) element:RenderText(sprite); end + if (self.AllowDrag) then + local component = self.Layout.Textures[self.Layout.DragHandle.Texture]; + vec_position.x = pos[1] + self.Layout.DragHandle.OffsetX; + vec_position.y = pos[2] + self.Layout.DragHandle.OffsetY; + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); + end + sprite:End(); end +local dragPosition = { 0, 0 }; +local dragActive = false; +function DoubleDisplay:DragTest(e) + local handle = self.Layout.DragHandle; + local pos = gSettings.DoublePosition; + local minX = pos[1] + handle.OffsetX; + local maxX = minX + handle.Width; + if (e.x < minX) or (e.x > maxX) then + return false; + end + + local minY = pos[2] + handle.OffsetY; + local maxY = minY + handle.Height; + return (e.y >= minY) and (e.y <= maxY); +end + function DoubleDisplay:HandleMouse(e) if (self.Valid == false) then return; end - local macroState = gController:GetMacroState(); - if (macroState > 2) then - return; + if (self.AllowDrag) then + if dragActive then + local pos = gSettings.DoublePosition; + pos[1] = pos[1] + (e.x - dragPosition[1]); + pos[2] = pos[2] + (e.y - dragPosition[2]); + dragPosition[1] = e.x; + dragPosition[2] = e.y; + self:UpdatePosition(); + if (e.message == 514) then + dragActive = false; + settings.save(); + end + elseif (e.message == 513) and self:DragTest(e) then + dragActive = true; + dragPosition[1] = e.x; + dragPosition[2] = e.y; + e.blocked = true; + return; + end end --Direct back to single display for activation.. @@ -120,7 +159,7 @@ function DoubleDisplay:HitTest(x, y) return; end - local pos = gSettings.DoublePosition[gSettings.DoubleLayout]; + local pos = gSettings.DoublePosition; if (x < pos[1]) or (y < pos[2]) then return false; end @@ -159,7 +198,7 @@ function DoubleDisplay:UpdatePosition() return; end - local position = gSettings.DoublePosition[gSettings.DoubleLayout]; + local position = gSettings.DoublePosition; for _,element in ipairs(self.Elements) do element:SetPosition(position); diff --git a/initializer.lua b/initializer.lua index 8077292..48f200f 100644 --- a/initializer.lua +++ b/initializer.lua @@ -26,9 +26,9 @@ end --Initialize settings.. local defaultSettings = T{ --Layouts tab.. - SingleLayout = 'classicsingle', + SingleLayout = 'classic', SingleScale = 1.0, - DoubleLayout = 'classicdouble', + DoubleLayout = 'classic', DoubleScale = 1.0, TriggerDuration = 0.25, ShowEmpty = true, @@ -59,15 +59,29 @@ local defaultSettings = T{ Controller = 'dualsense', BindMenuTimer = 1, TapTimer = 0.4, - - --No Tab.. - SinglePosition = T{}, - DoublePosition = T{}, }; gSettings = settings.load(defaultSettings); +if (gSettings.Version ~= addon.version) then + if (gSettings.Version == nil) or (gSettings.Version < 2.0) then + for key,val in pairs(gSettings) do + local newVal = defaultSettings[key]; + if newVal then + gSettings[key] = newVal; + else + gSettings[key] = nil; + end + end + Message('Settings from a prior incompatible version detected. Updating settings.') + end + gSettings.Version = addon.version; + settings.save(); +end ---Creates textures, assigns local function PrepareLayout(layout, scale) + local tx = layout.Textures[layout.DragHandle.Texture] + layout.DragHandle.Width = tx.Width; + layout.DragHandle.Height = tx.Height; + for _,singleTable in ipairs(T{layout, layout.FixedObjects, layout.Elements, layout.Textures}) do for _,tableEntry in pairs(singleTable) do if (type(tableEntry) == 'table') then @@ -143,9 +157,9 @@ function Initializer:ApplyLayout() local singleLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.SingleLayout)); if singleLayout then PrepareLayout(singleLayout.Single, gSettings.SingleScale); - local position = gSettings.SinglePosition[gSettings.SingleLayout]; + local position = gSettings.SinglePosition; if position == nil then - gSettings.SinglePosition[gSettings.SingleLayout] = GetDefaultPosition(singleLayout.Single); + gSettings.SinglePosition = GetDefaultPosition(singleLayout.Single); settings.save(); end gSingleDisplay:Initialize(singleLayout.Single); @@ -156,9 +170,9 @@ function Initializer:ApplyLayout() local doubleLayout = LoadFile_s(GetResourcePath('layouts/' .. gSettings.DoubleLayout)); if doubleLayout then PrepareLayout(doubleLayout.Double, gSettings.DoubleScale); - local position = gSettings.DoublePosition[gSettings.DoubleLayout]; + local position = gSettings.DoublePosition; if position == nil then - gSettings.DoublePosition[gSettings.DoubleLayout] = GetDefaultPosition(doubleLayout.Double); + gSettings.DoublePosition = GetDefaultPosition(doubleLayout.Double); settings.save(); end gDoubleDisplay:Initialize(doubleLayout.Double); diff --git a/resources/misc/drag.png b/resources/misc/drag.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b38e478a0ad02e54d3d509a325ad7b534abf04 GIT binary patch literal 1751 zcmV;|1}OQ7P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D25d=0K~zXfwUy^n zR96^>_aDh*l9(~-Xw(o3!Nh{1V#6Syf(C<-7>&k=E%w;Ekq&kRad5DV8Ko_-yR@aV zYy$-Sl={iN{oXad_gwD60#0-sXU;H}FTC?S&v_3f(|eJo4`bi$`5?w*`Xt%(=?>F` z?R18G1b!X-{YD@9_xMzkX$*~t++UoWYx&=^KG%|zV_BDDNzAsc&9)|FS>v;;t1_)C zGp(^1))nd2=ydDyG~2Q?+tQ1+hzqu`!)5&=b(*~oItuz;6h7zhGw>1k73cPIF2C=^ z&0gR2UhZ;_FR#a!)5B+UacN%eH?MHk&7F4fCtbqPPX2Hwf2dR3-yv*m789TRVbHwZ znEYqljb7i?r@qTi`P^<_Ru`Ai#b5Mt=RMq6k8sMxA9wOco#L+!{y>MYuS49^F8tUe zu6fMHOfaPFedxd+9ex0D`x$qukGs*wUG3#AVMY(1)y=2V4B@;-IO7&hxrO5{;Rt4Q ziU%Cx-VSkhyR@@S+R!Age*C8~=G8P908u)`m3|0cW_LftIRoNYKLo$uK@hvzgdJ_t zwiYqPF2()+8e<^pdM^g}F7@~Tk=ezidpSUyb8~0h93YN4`6Hb?AW&joyYLGjT7~Vc z!q2VJmS*wWdMWx*V9YRS5LLiLp*A2O3bg?NQK$_Fh(c{ZKor$BL;)hTRodDjZElt~ zHOp)3m8eI5y^`h@ZWKxkstt&=E*_!)aT+BU#9@?R5PLc#hyuj6R_Ui^5#={F$=}(}u2Ej!AjQ?l3m*i=7}6jL5Z9QfydFNgn?wQP0uu#@6HF8!4mwEGo(^#r6GaeA z6hSn~DUEWHT~2IJqHSu#gTI4lcHi&NAy7L9qEKQ`?UT4sxU$$g20^tM1l4XK2#ETD zK_oXwDF02pvZhX2W>LcL1=H-j?|7TqSP?+1x6A7q6qHY>Q&!a~i!AD_;(vl@QtvrX z8=@El2T_A-V=W*`hkz&@0-|&Xh|(b-3J@s2vQ~+)$qTBK8Fz!FZ7p`tTA&2>jzkHA zYhx`40-{<4f6j)wWAX4HDI^lj3V- z)Q+{u(N=l6OS88pew8-2l0?lkYcneRUzGc&mH8)?yc~NwSXz96lWH>vh@vYyxV8a-wa_837COX2 z17fxTf$~$!{2?XU#2^|rW@Wxp|97OnyGof?sQ?0^ zzARS(F}+lqQlfoU@^aFXA!C@dn0yzm?3R}P2Z~;D_CP_D{y@dmsE4esx<;jW>7>8%H|_uc literal 0 HcmV?d00001 diff --git a/singledisplay.lua b/singledisplay.lua index 05f0933..2b89621 100644 --- a/singledisplay.lua +++ b/singledisplay.lua @@ -26,7 +26,7 @@ function SingleDisplay:Initialize(layout) self.Layout = layout; self.ElementGroups = T{}; - local position = gSettings.SinglePosition[gSettings.SingleLayout]; + local position = gSettings.SinglePosition; for group = 1,6 do self.ElementGroups[group] = T{}; @@ -83,8 +83,9 @@ function SingleDisplay:Render(macroState) if (self.Valid == false) or (macroState == 0) then return; end + self.LastRenderState = macroState; - local pos = gSettings.SinglePosition[gSettings.SingleLayout]; + local pos = gSettings.SinglePosition; local sprite = self.Sprite; sprite:Begin(); @@ -104,20 +105,64 @@ function SingleDisplay:Render(macroState) element:RenderText(sprite); end end + + if (self.AllowDrag) then + local component = self.Layout.Textures[self.Layout.DragHandle.Texture]; + vec_position.x = pos[1] + self.Layout.DragHandle.OffsetX; + vec_position.y = pos[2] + self.Layout.DragHandle.OffsetY; + sprite:Draw(component.Texture, component.Rect, component.Scale, nil, 0.0, vec_position, d3dwhite); + end + sprite:End(); end +local dragPosition = { 0, 0 }; +local dragActive = false; +function SingleDisplay:DragTest(e) + local handle = self.Layout.DragHandle; + local pos = gSettings.SinglePosition; + local minX = pos[1] + handle.OffsetX; + local maxX = minX + handle.Width; + if (e.x < minX) or (e.x > maxX) then + return false; + end + + local minY = pos[2] + handle.OffsetY; + local maxY = minY + handle.Height; + return (e.y >= minY) and (e.y <= maxY); +end + function SingleDisplay:HandleMouse(e) if (self.Valid == false) then return; end + if (self.AllowDrag) then + if dragActive then + local pos = gSettings.SinglePosition; + pos[1] = pos[1] + (e.x - dragPosition[1]); + pos[2] = pos[2] + (e.y - dragPosition[2]); + dragPosition[1] = e.x; + dragPosition[2] = e.y; + self:UpdatePosition(); + if (e.message == 514) then + dragActive = false; + settings.save(); + end + elseif (e.message == 513) and self:DragTest(e) then + dragActive = true; + dragPosition[1] = e.x; + dragPosition[2] = e.y; + e.blocked = true; + return; + end + end + if (e.message == 513) then local hit, element = self:HitTest(e.x, e.y); if element ~= nil then - local macroState = gController:GetMacroState(); - local group = self.ElementGroups[macroState]; - if group then + local group = self.ElementGroups[self.LastRenderState]; + if group ~= nil then element = group[element]; if element then element:Activate(); @@ -133,7 +178,7 @@ function SingleDisplay:HitTest(x, y) return; end - local pos = gSettings.SinglePosition[gSettings.SingleLayout]; + local pos = gSettings.SinglePosition; if (x < pos[1]) or (y < pos[2]) then return false; end @@ -176,7 +221,7 @@ function SingleDisplay:UpdatePosition() return; end - local position = gSettings.SinglePosition[gSettings.SingleLayout]; + local position = gSettings.SinglePosition; for _,group in ipairs(self.ElementGroups) do for _,element in ipairs(group) do From f8af07f5e772cee70d8ad9b9eaf4a7edf8488d81 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:33:23 -0500 Subject: [PATCH 11/25] Update submodule to get encoding file --- gdifonts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdifonts b/gdifonts index f3112bf..43cabe7 160000 --- a/gdifonts +++ b/gdifonts @@ -1 +1 @@ -Subproject commit f3112bf77be7be8e7701d33b3a8616d9826199b3 +Subproject commit 43cabe759c0d6ae7b680174ebcf8d26f197ccad5 From 39797282f89d871202f8d4f7050b29e90cac2138 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:36:26 -0500 Subject: [PATCH 12/25] submodule update --- gdifonts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdifonts b/gdifonts index 43cabe7..2327a2d 160000 --- a/gdifonts +++ b/gdifonts @@ -1 +1 @@ -Subproject commit 43cabe759c0d6ae7b680174ebcf8d26f197ccad5 +Subproject commit 2327a2d4dcc05426715eefdfeead85537f2bd626 From 301b46575466f7787a8125aefa7266fb82f2e044 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:48:06 -0500 Subject: [PATCH 13/25] Add encoding functions for jp compatibility --- bindinggui.lua | 76 ++++++++++++++++++++++++++++---------------------- element.lua | 3 +- 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/bindinggui.lua b/bindinggui.lua index b7ee34b..63ac756 100644 --- a/bindinggui.lua +++ b/bindinggui.lua @@ -1,5 +1,6 @@ local d3d8 = require('d3d8'); local d3d8_device = d3d8.get_device(); +local encoding = require('gdifonts.encoding'); local ffi = require('ffi'); local imgui = require('imgui'); local inventory = require('state.inventory'); @@ -157,7 +158,7 @@ Setup.Ability = function(skipUpdate) state.Combos.Action = T{}; for _,res in ipairs(state.ActionResources) do - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(encoding:ShiftJIS_To_UTF8(res.Name[1])); end state.Indices.Action = 1; @@ -224,12 +225,13 @@ Setup.Item = function(skipUpdate) local next = state.ActionResources[index + 1]; --Show item id if multiple matching items.. - if (prev) and (prev.Name[1] == res.Name[1]) then - state.Combos.Action:append(string.format('%s[%u]', res.Name[1], res.Id)); - elseif (next) and (next.Name[1] == res.Name[1]) then - state.Combos.Action:append(string.format('%s[%u]', res.Name[1], res.Id)); + local name = encoding:ShiftJIS_To_UTF8(res.Name[1]); + if (prev) and (prev.Name[1] == name) then + state.Combos.Action:append(string.format('%s[%u]', name, res.Id)); + elseif (next) and (next.Name[1] == name) then + state.Combos.Action:append(string.format('%s[%u]', name, res.Id)); else - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(name); end end @@ -283,7 +285,7 @@ Setup.Spell = function(skipUpdate) state.Combos.Action = T{}; for _,res in ipairs(state.ActionResources) do - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(encoding:ShiftJIS_To_UTF8(res.Name[1])); end if (not skipUpdate) then @@ -337,7 +339,7 @@ Setup.Trust = function(skipUpdate) state.Combos.Action = T{}; for _,res in ipairs(state.ActionResources) do - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(encoding:ShiftJIS_To_UTF8(res.Name[1])); end if (not skipUpdate) then @@ -363,7 +365,7 @@ Setup.Weaponskill = function(skipUpdate) state.Combos.Action = T{}; for _,res in ipairs(state.ActionResources) do - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(encoding:ShiftJIS_To_UTF8(res.Name[1])); end if (not skipUpdate) then @@ -387,16 +389,17 @@ end Update.Ability = function(index) local res = state.ActionResources[index]; + local name = encoding:ShiftJIS_To_UTF8(res.Name[1]); if (bit.band(res.Targets, 0xFC) ~= 0) then if (gSettings.DefaultSelectTarget) then - state.MacroText = { string.format('/ja \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ja \"%s\" ', name) }; else - state.MacroText = { string.format('/ja \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ja \"%s\" ', name) }; end else - state.MacroText = { string.format('/ja \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ja \"%s\" ', name) }; end - state.MacroLabel = { res.Name[1] }; + state.MacroLabel = { name }; if ((res.RecastTimerId == 0) or (res.RecastTimerId == 254)) then state.MacroImage = { 'abilities/1hr.png' }; else @@ -428,16 +431,17 @@ end Update.Item = function(index) local res = state.ActionResources[index]; + local name = encoding:ShiftJIS_To_UTF8(res.Name[1]); if (bit.band(res.Targets, 0xFC) ~= 0) then if (gSettings.DefaultSelectTarget) then - state.MacroText = { string.format('/item \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/item \"%s\" ', name) }; else - state.MacroText = { string.format('/item \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/item \"%s\" ', name) }; end else - state.MacroText = { string.format('/item \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/item \"%s\" ', name) }; end - state.MacroLabel = { res.Name[1] }; + state.MacroLabel = { name }; state.MacroImage = { string.format('ITEM:%u', res.Id) }; state.CostOverride = nil; UpdateMacroImage(); @@ -445,16 +449,17 @@ end Update.Spell = function(index) local res = state.ActionResources[index]; + local name = encoding:ShiftJIS_To_UTF8(res.Name[1]); if (bit.band(res.Targets, 0xFC) ~= 0) then if (gSettings.DefaultSelectTarget) then - state.MacroText = { string.format('/ma \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ma \"%s\" ', name) }; else - state.MacroText = { string.format('/ma \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ma \"%s\" ', name) }; end else - state.MacroText = { string.format('/ma \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ma \"%s\" ', name) }; end - state.MacroLabel = { res.Name[1] }; + state.MacroLabel = { name }; state.MacroImage = { string.format('spells/%u.png', res.Index) }; state.CostOverride = { '' }; UpdateMacroImage(); @@ -462,8 +467,9 @@ end Update.Trust = function(index) local res = state.ActionResources[index]; - state.MacroText = { string.format('/ma \"%s\" ', res.Name[1]) }; - state.MacroLabel = { res.Name[1] }; + local name = encoding:ShiftJIS_To_UTF8(res.Name[1]); + state.MacroText = { string.format('/ma \"%s\" ', name) }; + state.MacroLabel = { name }; state.MacroImage = { string.format('spells/%u.png', res.Index) }; state.CostOverride = { '' }; UpdateMacroImage(); @@ -471,16 +477,17 @@ end Update.Weaponskill = function(index) local res = state.ActionResources[index]; + local name = encoding:ShiftJIS_To_UTF8(res.Name[1]); if (bit.band(res.Targets, 0xFC) ~= 0) then if (gSettings.DefaultSelectTarget) then - state.MacroText = { string.format('/ws \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ws \"%s\" ', name) }; else - state.MacroText = { string.format('/ws \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ws \"%s\" ', name) }; end else - state.MacroText = { string.format('/ws \"%s\" ', res.Name[1]) }; + state.MacroText = { string.format('/ws \"%s\" ', name) }; end - state.MacroLabel = { res.Name[1] }; + state.MacroLabel = { name }; state.MacroImage = { wsmap[res.Id] or '' }; state.CostOverride = { '' }; UpdateMacroImage(); @@ -912,7 +919,7 @@ function exposed:Show(macroState, macroButton) state.Combos.Action = T{}; for _,res in ipairs(state.ActionResources) do - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(encoding:ShiftJIS_To_UTF8(res.Name[1])); end end @@ -934,7 +941,7 @@ function exposed:Show(macroState, macroButton) state.Combos.Action = T{}; for _,res in ipairs(state.ActionResources) do - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(encoding:ShiftJIS_To_UTF8(res.Name[1])); end end @@ -959,13 +966,14 @@ function exposed:Show(macroState, macroButton) local prev = state.ActionResources[index - 1]; local next = state.ActionResources[index + 1]; + local name = encoding:ShiftJIS_To_UTF8(res.Name[1]); --Show item id if multiple matching items.. - if (prev) and (prev.Name[1] == res.Name[1]) then - state.Combos.Action:append(string.format('%s[%u]', res.Name[1], res.Id)); - elseif (next) and (next.Name[1] == res.Name[1]) then - state.Combos.Action:append(string.format('%s[%u]', res.Name[1], res.Id)); + if (prev) and (prev.Name[1] == name) then + state.Combos.Action:append(string.format('%s[%u]', name, res.Id)); + elseif (next) and (next.Name[1] == name) then + state.Combos.Action:append(string.format('%s[%u]', name, res.Id)); else - state.Combos.Action:append(res.Name[1]); + state.Combos.Action:append(name); end end end diff --git a/element.lua b/element.lua index 196e141..a1b08d0 100644 --- a/element.lua +++ b/element.lua @@ -1,4 +1,5 @@ local d3d8 = require('d3d8'); +local encoding = require('gdifonts.encoding'); local ffi = require('ffi'); local gdi = require('gdifonts.include'); local updaters = { @@ -28,7 +29,7 @@ local function DoMacro(macro) end if command then - AshitaCore:GetChatManager():QueueCommand(-1, command); + AshitaCore:GetChatManager():QueueCommand(-1, encoding:UTF8_To_ShiftJIS(command)); end if type(waitTime) == 'number' then From fa8f25c98b0d2d87b525617b64874badac5af054 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 10:34:22 -0500 Subject: [PATCH 14/25] update profiles --- resources/controllers/xbox.lua | 49 +--- resources/layouts/classic.lua | 23 +- resources/layouts/classicdouble.lua | 206 -------------- resources/layouts/classicsingle.lua | 175 ------------ resources/layouts/classicv2.lua | 405 ---------------------------- resources/layouts/scalable_0.8.lua | 230 ---------------- resources/layouts/scalable_1.0.lua | 230 ---------------- resources/layouts/scalable_1.2.lua | 230 ---------------- resources/layouts/scalable_1.4.lua | 230 ---------------- resources/layouts/scalable_1.6.lua | 230 ---------------- resources/layouts/scalable_1.8.lua | 230 ---------------- resources/layouts/scalable_2.0.lua | 230 ---------------- 12 files changed, 20 insertions(+), 2448 deletions(-) delete mode 100644 resources/layouts/classicdouble.lua delete mode 100644 resources/layouts/classicsingle.lua delete mode 100644 resources/layouts/classicv2.lua delete mode 100644 resources/layouts/scalable_0.8.lua delete mode 100644 resources/layouts/scalable_1.0.lua delete mode 100644 resources/layouts/scalable_1.2.lua delete mode 100644 resources/layouts/scalable_1.4.lua delete mode 100644 resources/layouts/scalable_1.6.lua delete mode 100644 resources/layouts/scalable_1.8.lua delete mode 100644 resources/layouts/scalable_2.0.lua diff --git a/resources/controllers/xbox.lua b/resources/controllers/xbox.lua index 3102886..6f10808 100644 --- a/resources/controllers/xbox.lua +++ b/resources/controllers/xbox.lua @@ -249,10 +249,7 @@ local layout = { e.blocked = true; end end, - - --[[ - For after ashita version update.. - + --L2 [16] = function(e) if HandleButton('L2', e.state > 0) then @@ -294,50 +291,6 @@ local layout = { e.blocked = true; end end, - - ]]-- - - --L2 - [32] = function(e) - if HandleButton('L2', e.state > 0) then - e.blocked = true; - end - end, - - --R2 - [33] = function(e) - if HandleButton('R2', e.state > 0) then - e.blocked = true; - end - end, - - --Horizontal L-Stick Movement - [34] = function(e) - if HandleStick('LStick', e.state, state.LStick.Vertical) then - e.blocked = true; - end - end, - - --Vertical L-Stick Movement - [35] = function(e) - if HandleStick('LStick', state.LStick.Horizontal, e.state) then - e.blocked = true; - end - end, - - --Horizontal R-Stick Movement - [36] = function(e) - if HandleStick('RStick', e.state, state.RStick.Vertical) then - e.blocked = true; - end - end, - - --Vertical R-Stick Movement - [37] = function(e) - if HandleStick('RStick', state.RStick.Horizontal, e.state) then - e.blocked = true; - end - end, }, }; diff --git a/resources/layouts/classic.lua b/resources/layouts/classic.lua index 04cfc16..1feb924 100644 --- a/resources/layouts/classic.lua +++ b/resources/layouts/classic.lua @@ -39,7 +39,7 @@ return { Darkness = 'skillchains/Darkness.png', Buttons = { Path='misc/buttons.png', Width=40, Height=40 }, Dpad = { Path='misc/dpad.png', Width=40, Height=40 }, - DragHandle = { Path='misc/drag.png', Width=25, Height=25 }, + DragHandle = { Path='misc/drag.png', Width=26, Height=26 }, }, --Transparency to be used when bound macro's action is not known. [0-255] @@ -47,6 +47,14 @@ return { --Opacity of the overlay shown when a macro is activated. [0-255] TriggerOpacity = 128, + + --Icon to be displayed when draggability is enabled. + --Must have a valid texture with specified width/height. + DragHandle = { + OffsetX = 0, + OffsetY = 0, + Texture = 'DragHandle', + }, --The border of each macro element. Offsets are relative to the macro element's placement. Frame = { @@ -214,15 +222,22 @@ return { Darkness = 'skillchains/Darkness.png', Buttons = { Path='misc/buttons.png', Width=40, Height=40 }, Dpad = { Path='misc/dpad.png', Width=40, Height=40 }, - DragHandle = { Path='misc/drag.png', Width=25, Height=25 }, + DragHandle = { Path='misc/drag.png', Width=26, Height=26 }, }, --Transparency to be used when bound macro's action is not known. [0-255] FadeOpacity = 128, --Opacity of the overlay shown when a macro is activated. [0-255] - TriggerOpacity = 128, - + TriggerOpacity = 128, + + --Icon to be displayed when draggability is enabled. + DragHandle = { + OffsetX = 0, + OffsetY = 0, + Texture = 'DragHandle', + }, + --The border of each macro element. Offsets are relative to the macro element's placement. Frame = { OffsetX = 0, diff --git a/resources/layouts/classicdouble.lua b/resources/layouts/classicdouble.lua deleted file mode 100644 index 20f2972..0000000 --- a/resources/layouts/classicdouble.lua +++ /dev/null @@ -1,206 +0,0 @@ -return { - --Amount is not fixed, you can adjust as desired. - SkillchainFrames = T{ - 'misc/crawl1.png', - 'misc/crawl2.png', - 'misc/crawl3.png', - 'misc/crawl4.png', - 'misc/crawl5.png', - 'misc/crawl6.png', - 'misc/crawl7.png' - }, - - --Time, in seconds, between frame changes for skillchain animation. - SkillchainFrameLength = 0.08, - - --Textures to be used by individual macro elements. - Textures = T{ - Cross = 'misc/cross.png', - Frame = 'misc/frame.png', - Trigger = 'misc/trigger.png', - Liquefaction = 'skillchains/Liquefaction.png', - Scission = 'skillchains/Scission.png', - Reverberation = 'skillchains/Reverberation.png', - Detonation = 'skillchains/Detonation.png', - Induration = 'skillchains/Induration.png', - Impaction = 'skillchains/Impaction.png', - Transfixion = 'skillchains/Transfixion.png', - Compression = 'skillchains/Compression.png', - Fusion = 'skillchains/Fusion.png', - Gravitation = 'skillchains/Gravitation.png', - Distortion = 'skillchains/Distortion.png', - Fragmentation = 'skillchains/Fragmentation.png', - Light = 'skillchains/Light.png', - Darkness = 'skillchains/Darkness.png', - LeftButtons = 'misc/buttons.png', - LeftDpad = 'misc/dpad.png', - RightButtons = 'misc/buttons.png', - RightDpad = 'misc/dpad.png', - }, - - --Transparency to be used when bound macro's action is not known. [0-255] - FadeOpacity = 128, - - --Opacity of the overlay shown when a macro is activated. [0-255] - TriggerOpacity = 128, - - --The border of each macro element. Offsets are relative to the macro element's placement. - Frame = { - OffsetX = 0, - OffsetY = 0, - Width = 44, - Height = 44, - }, - - --The inner icon for each macro element. Offsets are relative to the macro element's placement. - Icon = { - OffsetX = 2, - OffsetY = 2, - Width = 40, - Height = 40, - }, - - --The text object to display macro or hotkey activation. - Hotkey = { - --If box height/width are specified, text object will not go past those bounds. - --Otherwise, text object will be as large as necessary. - box_height = 0, - box_width = 0, - - --See gdifonts/include for flags and usage.. - font_alignment = 0, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 12, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 1, - - OffsetX = 2, - OffsetY = 2, - }, - Cost = { - box_height = 0, - box_width = 0, - font_alignment = 2, - font_color = 0xFF389609, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 42, - OffsetY = 31, - }, - Recast = { - box_height = 0, - box_width = 0, - font_alignment = 0, - font_color = 0xFFBFCC04, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 2, - OffsetY = 31, - }, - Name = { - box_height = 0, - box_width = 0, - font_alignment = 1, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 22, - OffsetY = 44, - }, - - --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. - FixedObjects = T{ - T{ - OffsetX = 60, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'LeftButtons', - }, - T{ - OffsetX = 234, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'LeftDpad', - }, - T{ - OffsetX = 448, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'RightButtons', - }, - T{ - OffsetX = 622, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'RightDpad', - }, - }, - - --Size of hitbox for entire element. - Panel = { - Width = 746, - Height = 168, - }, - - --[[ - Table of element positions. DoubleDisplay has 16 elements. - Objects are ordered(according to default controller layout): - 1. Dpad Up(L2) - 2. Dpad Right(L2) - 3. Dpad Down(L2) - 4. Dpad Left(L2) - 5. Button Up(L2) - 6. Button Right(L2) - 7. Button Down(L2) - 8. Button Left(L2) - 9. Dpad Up(R2) - 10. Dpad Right(R2) - 11. Dpad Down(R2) - 12. Dpad Left(R2) - 13. Button Up(R2) - 14. Button Right(R2) - 15. Button Down(R2) - 16. Button Left(R2) - ]]-- - Elements = T{ - { OffsetX = 58, OffsetY = 0 }, - { OffsetX = 116, OffsetY = 55 }, - { OffsetX = 58, OffsetY = 110 }, - { OffsetX = 0, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 0 }, - { OffsetX = 290, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 110 }, - { OffsetX = 174, OffsetY = 55 }, - { OffsetX = 446, OffsetY = 0 }, - { OffsetX = 504, OffsetY = 55 }, - { OffsetX = 446, OffsetY = 110 }, - { OffsetX = 388, OffsetY = 55 }, - { OffsetX = 620, OffsetY = 0 }, - { OffsetX = 678, OffsetY = 55 }, - { OffsetX = 620, OffsetY = 110 }, - { OffsetX = 562, OffsetY = 55 }, - }, -}; \ No newline at end of file diff --git a/resources/layouts/classicsingle.lua b/resources/layouts/classicsingle.lua deleted file mode 100644 index 9fff257..0000000 --- a/resources/layouts/classicsingle.lua +++ /dev/null @@ -1,175 +0,0 @@ -return { - --Amount is not fixed, you can adjust as desired. - SkillchainFrames = T{ - 'misc/crawl1.png', - 'misc/crawl2.png', - 'misc/crawl3.png', - 'misc/crawl4.png', - 'misc/crawl5.png', - 'misc/crawl6.png', - 'misc/crawl7.png' - }, - - --Time, in seconds, between frame changes for skillchain animation. - SkillchainFrameLength = 0.08, - - --Textures to be used by individual macro elements. - Textures = T{ - Cross = 'misc/cross.png', - Frame = 'misc/frame.png', - Trigger = 'misc/trigger.png', - Liquefaction = 'skillchains/Liquefaction.png', - Scission = 'skillchains/Scission.png', - Reverberation = 'skillchains/Reverberation.png', - Detonation = 'skillchains/Detonation.png', - Induration = 'skillchains/Induration.png', - Impaction = 'skillchains/Impaction.png', - Transfixion = 'skillchains/Transfixion.png', - Compression = 'skillchains/Compression.png', - Fusion = 'skillchains/Fusion.png', - Gravitation = 'skillchains/Gravitation.png', - Distortion = 'skillchains/Distortion.png', - Fragmentation = 'skillchains/Fragmentation.png', - Light = 'skillchains/Light.png', - Darkness = 'skillchains/Darkness.png', - Buttons = 'misc/buttons.png', - Dpad = 'misc/dpad.png', - }, - - --Transparency to be used when bound macro's action is not known. [0-255] - FadeOpacity = 128, - - --Opacity of the overlay shown when a macro is activated. [0-255] - TriggerOpacity = 128, - - --The border of each macro element. Offsets are relative to the macro element's placement. - Frame = { - OffsetX = 0, - OffsetY = 0, - Width = 44, - Height = 44, - }, - - --The inner icon for each macro element. Offsets are relative to the macro element's placement. - Icon = { - OffsetX = 2, - OffsetY = 2, - Width = 40, - Height = 40, - }, - - --The text object to display macro or hotkey activation. - Hotkey = { - --If box height/width are specified, text object will not go past those bounds. - --Otherwise, text object will be as large as necessary. - box_height = 0, - box_width = 0, - - --See gdifonts/include for flags and usage.. - font_alignment = 0, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 12, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 1, - - OffsetX = 2, - OffsetY = 2, - }, - Cost = { - box_height = 0, - box_width = 0, - font_alignment = 2, - font_color = 0xFF389609, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 42, - OffsetY = 31, - }, - Recast = { - box_height = 0, - box_width = 0, - font_alignment = 0, - font_color = 0xFFBFCC04, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 2, - OffsetY = 31, - }, - Name = { - box_height = 0, - box_width = 0, - font_alignment = 1, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 22, - OffsetY = 44, - }, - - --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. - FixedObjects = T{ - T{ - OffsetX = 60, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'Buttons', - }, - T{ - OffsetX = 234, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'Dpad', - }, - }, - - --Size of hitbox for entire element. - Panel = { - Width = 358, - Height = 168, - }, - - --[[ - Table of element positions. SingleDisplay has 8 elements. - Objects are ordered(according to default controller layout): - 1. Dpad Up - 2. Dpad Right - 3. Dpad Down - 4. Dpad Left - 5. Button Up - 6. Button Right - 7. Button Down - 8. Button Left - Must remain 8 objects. - ]]-- - Elements = T{ - { OffsetX = 58, OffsetY = 0 }, - { OffsetX = 116, OffsetY = 55 }, - { OffsetX = 58, OffsetY = 110 }, - { OffsetX = 0, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 0 }, - { OffsetX = 290, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 110 }, - { OffsetX = 174, OffsetY = 55 }, - }, -}; \ No newline at end of file diff --git a/resources/layouts/classicv2.lua b/resources/layouts/classicv2.lua deleted file mode 100644 index a25dbe9..0000000 --- a/resources/layouts/classicv2.lua +++ /dev/null @@ -1,405 +0,0 @@ -local layout = { - --Single display, shows 8 macros when a trigger combination is pressed. - SingleDisplay = { - --Amount is not fixed, you can adjust as desired. - SkillchainFrames = T{ - 'misc/crawl1.png', - 'misc/crawl2.png', - 'misc/crawl3.png', - 'misc/crawl4.png', - 'misc/crawl5.png', - 'misc/crawl6.png', - 'misc/crawl7.png' - }, - - --Time, in seconds, between frame changes for skillchain animation. - SkillchainFrameLength = 0.08, - - --Textures to be used by individual macro elements. - Textures = T{ - Cross = 'misc/cross.png', - Frame = 'misc/frame.png', - Trigger = 'misc/trigger.png', - Liquefaction = 'skillchains/Liquefaction.png', - Scission = 'skillchains/Scission.png', - Reverberation = 'skillchains/Reverberation.png', - Detonation = 'skillchains/Detonation.png', - Induration = 'skillchains/Induration.png', - Impaction = 'skillchains/Impaction.png', - Transfixion = 'skillchains/Transfixion.png', - Compression = 'skillchains/Compression.png', - Fusion = 'skillchains/Fusion.png', - Gravitation = 'skillchains/Gravitation.png', - Distortion = 'skillchains/Distortion.png', - Fragmentation = 'skillchains/Fragmentation.png', - Light = 'skillchains/Light.png', - Darkness = 'skillchains/Darkness.png', - Buttons = 'misc/buttons.png', - Dpad = 'misc/dpad.png', - }, - - --Transparency to be used when bound macro's action is not known. [0-255] - FadeOpacity = 128, - - --Opacity of the overlay shown when a macro is activated. [0-255] - TriggerOpacity = 128, - - --The border of each macro element. Offsets are relative to the macro element's placement. - Frame = { - OffsetX = 0, - OffsetY = 0, - Width = 44, - Height = 44, - }, - - --The inner icon for each macro element. Offsets are relative to the macro element's placement. - Icon = { - OffsetX = 2, - OffsetY = 2, - Width = 40, - Height = 40, - }, - - --The text object to display macro or hotkey activation. - Hotkey = { - --If box height/width are specified, text object will not go past those bounds. - --Otherwise, text object will be as large as necessary. - box_height = 0, - box_width = 0, - - --See gdifonts/include for flags and usage.. - font_alignment = 0, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 12, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 1, - - OffsetX = 2, - OffsetY = 2, - }, - Cost = { - box_height = 0, - box_width = 0, - font_alignment = 2, - font_color = 0xFF389609, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 42, - OffsetY = 31, - }, - Recast = { - box_height = 0, - box_width = 0, - font_alignment = 0, - font_color = 0xFFBFCC04, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 2, - OffsetY = 31, - }, - Name = { - box_height = 0, - box_width = 0, - font_alignment = 1, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 22, - OffsetY = 44, - }, - - --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. - FixedObjects = T{ - T{ - OffsetX = 69, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'Buttons', - }, - T{ - OffsetX = 243, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'Dpad', - }, - }, - - --Size of hitbox for entire element. - Panel = { - Width = 358, - Height = 168, - }, - - --Default location, set later by scaling lib in this profile - DefaultX = 0, - DefaultY = 0, - - --[[ - Table of element positions. SingleDisplay has 8 elements. - Objects are ordered(according to default controller layout): - 1. Dpad Up - 2. Dpad Right - 3. Dpad Down - 4. Dpad Left - 5. Button Up - 6. Button Right - 7. Button Down - 8. Button Left - Must remain 8 objects. - ]]-- - Elements = T{ - { OffsetX = 58, OffsetY = 0 }, - { OffsetX = 116, OffsetY = 55 }, - { OffsetX = 58, OffsetY = 110 }, - { OffsetX = 0, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 0 }, - { OffsetX = 290, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 110 }, - { OffsetX = 174, OffsetY = 55 }, - }, - }, - - --Double display, for 16 macros simultaneously visible in default view. - DoubleDisplay = { - --Amount is not fixed, you can adjust as desired. - SkillchainFrames = T{ - 'misc/crawl1.png', - 'misc/crawl2.png', - 'misc/crawl3.png', - 'misc/crawl4.png', - 'misc/crawl5.png', - 'misc/crawl6.png', - 'misc/crawl7.png' - }, - - --Time, in seconds, between frame changes for skillchain animation. - SkillchainFrameLength = 0.08, - - --Textures to be used by individual macro elements. - Textures = T{ - Cross = 'misc/cross.png', - Frame = 'misc/frame.png', - Trigger = 'misc/trigger.png', - Liquefaction = 'skillchains/Liquefaction.png', - Scission = 'skillchains/Scission.png', - Reverberation = 'skillchains/Reverberation.png', - Detonation = 'skillchains/Detonation.png', - Induration = 'skillchains/Induration.png', - Impaction = 'skillchains/Impaction.png', - Transfixion = 'skillchains/Transfixion.png', - Compression = 'skillchains/Compression.png', - Fusion = 'skillchains/Fusion.png', - Gravitation = 'skillchains/Gravitation.png', - Distortion = 'skillchains/Distortion.png', - Fragmentation = 'skillchains/Fragmentation.png', - Light = 'skillchains/Light.png', - Darkness = 'skillchains/Darkness.png', - LeftButtons = 'misc/buttons.png', - LeftDpad = 'misc/dpad.png', - RightButtons = 'misc/buttons.png', - RightDpad = 'misc/dpad.png', - }, - - --The border of each macro element. Offsets are relative to the macro element's placement. - Frame = { - OffsetX = 0, - OffsetY = 0, - Width = 44, - Height = 44, - }, - - --The inner icon for each macro element. Offsets are relative to the macro element's placement. - Icon = { - OffsetX = 2, - OffsetY = 2, - Width = 40, - Height = 40, - --Transparency to be used when bound macro's action is not known. [0-255] - FadeOpacity = 128, - }, - - --The text object to display macro or hotkey activation. - Hotkey = { - --If box height/width are specified, text object will not go past those bounds. - --Otherwise, text object will be as large as necessary. - box_height = 0, - box_width = 0, - - --See gdifonts/include for flags and usage.. - font_alignment = 0, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 12, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 1, - - OffsetX = 2, - OffsetY = 2, - }, - Cost = { - box_height = 0, - box_width = 0, - font_alignment = 2, - font_color = 0xFF389609, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 42, - OffsetY = 31, - }, - Recast = { - box_height = 0, - box_width = 0, - font_alignment = 0, - font_color = 0xFFBFCC04, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 2, - OffsetY = 31, - }, - Name = { - box_height = 0, - box_width = 0, - font_alignment = 1, - font_color = 0xFFFFFFFF, - font_family = 'Arial', - font_flags = 0, - font_height = 9, - gradient_color = 0x00000000, - gradient_style = 0, - outline_color = 0xFF000000, - outline_width = 2, - OffsetX = 22, - OffsetY = 44, - }, - - --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. - FixedObjects = T{ - T{ - OffsetX = 69, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'LeftButtons', - }, - T{ - OffsetX = 243, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'LeftDpad', - }, - T{ - OffsetX = 457, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'RightButtons', - }, - T{ - OffsetX = 631, - OffsetY = 57, - Width = 40, - Height = 40, - Texture = 'RightDpad', - }, - }, - - --Size of hitbox for entire element. - Panel = { - Width = 746, - Height = 168, - }, - - --Default location, set later by scaling lib in this profile - DefaultX = 0, - DefaultY = 0, - - --[[ - Table of element positions. DoubleDisplay has 16 elements. - Objects are ordered(according to default controller layout): - 1. Dpad Up(L2) - 2. Dpad Right(L2) - 3. Dpad Down(L2) - 4. Dpad Left(L2) - 5. Button Up(L2) - 6. Button Right(L2) - 7. Button Down(L2) - 8. Button Left(L2) - 9. Dpad Up(R2) - 10. Dpad Right(R2) - 11. Dpad Down(R2) - 12. Dpad Left(R2) - 13. Button Up(R2) - 14. Button Right(R2) - 15. Button Down(R2) - 16. Button Left(R2) - ]]-- - Elements = T{ - { OffsetX = 58, OffsetY = 0 }, - { OffsetX = 116, OffsetY = 55 }, - { OffsetX = 58, OffsetY = 110 }, - { OffsetX = 0, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 0 }, - { OffsetX = 290, OffsetY = 55 }, - { OffsetX = 232, OffsetY = 110 }, - { OffsetX = 174, OffsetY = 55 }, - { OffsetX = 446, OffsetY = 0 }, - { OffsetX = 504, OffsetY = 55 }, - { OffsetX = 446, OffsetY = 110 }, - { OffsetX = 388, OffsetY = 55 }, - { OffsetX = 620, OffsetY = 0 }, - { OffsetX = 678, OffsetY = 55 }, - { OffsetX = 620, OffsetY = 110 }, - { OffsetX = 562, OffsetY = 55 }, - }, - }, -}; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - layout.SingleDisplay.DefaultX = 0; - layout.SingleDisplay.DefaultY = 0; - layout.DoubleDisplay.DefaultX = 0; - layout.DoubleDisplay.DefaultY = 0; -else - layout.SingleDisplay.DefaultX = (scaling.window.w - layout.SingleDisplay.PanelWidth) / 2; - layout.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + layout.SingleDisplay.PanelHeight); - layout.DoubleDisplay.DefaultX = (scaling.window.w - layout.DoubleDisplay.PanelWidth) / 2; - layout.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + layout.DoubleDisplay.PanelHeight); -end - -return layout; \ No newline at end of file diff --git a/resources/layouts/scalable_0.8.lua b/resources/layouts/scalable_0.8.lua deleted file mode 100644 index e828431..0000000 --- a/resources/layouts/scalable_0.8.lua +++ /dev/null @@ -1,230 +0,0 @@ -local scale = 0.8; - -local fontHeight = math.floor(11 * scale); -local fontOutline, fontSize; -if (fontHeight < 10) then - fontOutline = 1; - fontSize = (fontHeight - 1); -else - fontOutline = 2; - fontSize = (fontHeight - 2); -end - -local padding = math.floor(5 * scale); -local frame = math.floor(2 * scale); -local square = math.floor(40 * scale); -local spacing = math.floor(12 * scale); - -local objWidth = square + (2 * (padding + frame)); -local objHeight = square + (2 * frame) + fontHeight; - -local verticalOffset1 = square; -local verticalOffset2 = verticalOffset1 + square + (2 * frame); -local panelHeight = verticalOffset2 + objHeight; - -local theme = {}; -theme.CrossPath = 'misc/cross.png'; -theme.TriggerPath = 'misc/trigger.png'; -theme.SkillchainAnimationPaths = T{}; -theme.SkillchainAnimationPaths[1] = 'misc/crawl1.png'; -theme.SkillchainAnimationPaths[2] = 'misc/crawl2.png'; -theme.SkillchainAnimationPaths[3] = 'misc/crawl3.png'; -theme.SkillchainAnimationPaths[4] = 'misc/crawl4.png'; -theme.SkillchainAnimationPaths[5] = 'misc/crawl5.png'; -theme.SkillchainAnimationPaths[6] = 'misc/crawl6.png'; -theme.SkillchainAnimationPaths[7] = 'misc/crawl7.png'; -theme.SkillchainAnimationTime = 0.08; -theme.IconFadeAlpha = 0.5; -theme.SingleDisplay = {}; -theme.SingleDisplay.FontObjects = {}; -theme.SingleDisplay.FontObjects.Cost = {}; -theme.SingleDisplay.FontObjects.Cost.BoxWidth = square; -theme.SingleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Cost.FontFlags = 0; -theme.SingleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.SingleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Macro = {}; -theme.SingleDisplay.FontObjects.Macro.BoxWidth = square; -theme.SingleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Macro.OffsetY = frame; -theme.SingleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Macro.FontFlags = 0; -theme.SingleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Name = {}; -theme.SingleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.SingleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Name.OffsetX = 0; -theme.SingleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.SingleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Name.FontFlags = 0; -theme.SingleDisplay.FontObjects.Name.FontAlignment = 1; -theme.SingleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Recast = {}; -theme.SingleDisplay.FontObjects.Recast.BoxWidth = square; -theme.SingleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Recast.FontFlags = 0; -theme.SingleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.SingleDisplay.ImageObjects = {}; -theme.SingleDisplay.ImageObjects.Frame = {}; -theme.SingleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.SingleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.SingleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Icon = {}; -theme.SingleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Icon.Width = square; -theme.SingleDisplay.ImageObjects.Icon.Height = square; -theme.SingleDisplay.ImageObjects.Overlay = {}; -theme.SingleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Overlay.Width = square; -theme.SingleDisplay.ImageObjects.Overlay.Height = square; -theme.SingleDisplay.Primitives = T{}; -theme.SingleDisplay.FramePath = 'misc/frame.png'; -theme.SingleDisplay.PanelHeight = panelHeight; -theme.SingleDisplay.PanelWidth = (6 * objWidth) + 8 + spacing; -theme.SingleDisplay.DefaultX = 0; -theme.SingleDisplay.DefaultY = 0; -theme.SingleDisplay.SquareHeight = objHeight; -theme.SingleDisplay.SquareWidth = objWidth; -theme.SingleDisplay.Squares = T{}; -theme.SingleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -local offset = (objWidth * 3) + 4 + spacing; -theme.SingleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -theme.DoubleDisplay = {}; -theme.DoubleDisplay.FontObjects = {}; -theme.DoubleDisplay.FontObjects.Cost = {}; -theme.DoubleDisplay.FontObjects.Cost.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Cost.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.DoubleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Macro = {}; -theme.DoubleDisplay.FontObjects.Macro.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Macro.OffsetY = frame; -theme.DoubleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Macro.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Name = {}; -theme.DoubleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.DoubleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Name.OffsetX = 0; -theme.DoubleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.DoubleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Name.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Name.FontAlignment = 1; -theme.DoubleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Recast = {}; -theme.DoubleDisplay.FontObjects.Recast.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Recast.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.DoubleDisplay.ImageObjects = {}; -theme.DoubleDisplay.ImageObjects.Frame = {}; -theme.DoubleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.DoubleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.DoubleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Icon = {}; -theme.DoubleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Icon.Width = square; -theme.DoubleDisplay.ImageObjects.Icon.Height = square; -theme.DoubleDisplay.ImageObjects.Overlay = {}; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Overlay.Width = square; -theme.DoubleDisplay.ImageObjects.Overlay.Height = square; -theme.DoubleDisplay.Primitives = T{}; -theme.DoubleDisplay.FramePath = 'misc/frame.png'; -theme.DoubleDisplay.PanelHeight = panelHeight; -theme.DoubleDisplay.PanelWidth = (12 * objWidth) + (5 * spacing) + 16; -theme.DoubleDisplay.DefaultX = 0; -theme.DoubleDisplay.DefaultY = 0; -theme.DoubleDisplay.SquareHeight = objHeight; -theme.DoubleDisplay.SquareWidth = objWidth; -theme.DoubleDisplay.Squares = T{}; -theme.DoubleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -offset = (objWidth * 3) + 4 + spacing; -theme.DoubleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + (3 * spacing); -theme.DoubleDisplay.Squares[9] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[10] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[11] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[12] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + spacing; -theme.DoubleDisplay.Squares[13] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[14] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[15] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[16] = { OffsetX = offset, OffsetY = verticalOffset1 }; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file diff --git a/resources/layouts/scalable_1.0.lua b/resources/layouts/scalable_1.0.lua deleted file mode 100644 index eb87975..0000000 --- a/resources/layouts/scalable_1.0.lua +++ /dev/null @@ -1,230 +0,0 @@ -local scale = 1.0; - -local fontHeight = math.floor(11 * scale); -local fontOutline, fontSize; -if (fontHeight < 10) then - fontOutline = 1; - fontSize = (fontHeight - 1); -else - fontOutline = 2; - fontSize = (fontHeight - 2); -end - -local padding = math.floor(5 * scale); -local frame = math.floor(2 * scale); -local square = math.floor(40 * scale); -local spacing = math.floor(12 * scale); - -local objWidth = square + (2 * (padding + frame)); -local objHeight = square + (2 * frame) + fontHeight; - -local verticalOffset1 = square; -local verticalOffset2 = verticalOffset1 + square + (2 * frame); -local panelHeight = verticalOffset2 + objHeight; - -local theme = {}; -theme.CrossPath = 'misc/cross.png'; -theme.TriggerPath = 'misc/trigger.png'; -theme.SkillchainAnimationPaths = T{}; -theme.SkillchainAnimationPaths[1] = 'misc/crawl1.png'; -theme.SkillchainAnimationPaths[2] = 'misc/crawl2.png'; -theme.SkillchainAnimationPaths[3] = 'misc/crawl3.png'; -theme.SkillchainAnimationPaths[4] = 'misc/crawl4.png'; -theme.SkillchainAnimationPaths[5] = 'misc/crawl5.png'; -theme.SkillchainAnimationPaths[6] = 'misc/crawl6.png'; -theme.SkillchainAnimationPaths[7] = 'misc/crawl7.png'; -theme.SkillchainAnimationTime = 0.08; -theme.IconFadeAlpha = 0.5; -theme.SingleDisplay = {}; -theme.SingleDisplay.FontObjects = {}; -theme.SingleDisplay.FontObjects.Cost = {}; -theme.SingleDisplay.FontObjects.Cost.BoxWidth = square; -theme.SingleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Cost.FontFlags = 0; -theme.SingleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.SingleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Macro = {}; -theme.SingleDisplay.FontObjects.Macro.BoxWidth = square; -theme.SingleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Macro.OffsetY = frame; -theme.SingleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Macro.FontFlags = 0; -theme.SingleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Name = {}; -theme.SingleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.SingleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Name.OffsetX = 0; -theme.SingleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.SingleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Name.FontFlags = 0; -theme.SingleDisplay.FontObjects.Name.FontAlignment = 1; -theme.SingleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Recast = {}; -theme.SingleDisplay.FontObjects.Recast.BoxWidth = square; -theme.SingleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Recast.FontFlags = 0; -theme.SingleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.SingleDisplay.ImageObjects = {}; -theme.SingleDisplay.ImageObjects.Frame = {}; -theme.SingleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.SingleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.SingleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Icon = {}; -theme.SingleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Icon.Width = square; -theme.SingleDisplay.ImageObjects.Icon.Height = square; -theme.SingleDisplay.ImageObjects.Overlay = {}; -theme.SingleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Overlay.Width = square; -theme.SingleDisplay.ImageObjects.Overlay.Height = square; -theme.SingleDisplay.Primitives = T{}; -theme.SingleDisplay.FramePath = 'misc/frame.png'; -theme.SingleDisplay.PanelHeight = panelHeight; -theme.SingleDisplay.PanelWidth = (6 * objWidth) + 8 + spacing; -theme.SingleDisplay.DefaultX = 0; -theme.SingleDisplay.DefaultY = 0; -theme.SingleDisplay.SquareHeight = objHeight; -theme.SingleDisplay.SquareWidth = objWidth; -theme.SingleDisplay.Squares = T{}; -theme.SingleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -local offset = (objWidth * 3) + 4 + spacing; -theme.SingleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -theme.DoubleDisplay = {}; -theme.DoubleDisplay.FontObjects = {}; -theme.DoubleDisplay.FontObjects.Cost = {}; -theme.DoubleDisplay.FontObjects.Cost.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Cost.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.DoubleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Macro = {}; -theme.DoubleDisplay.FontObjects.Macro.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Macro.OffsetY = frame; -theme.DoubleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Macro.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Name = {}; -theme.DoubleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.DoubleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Name.OffsetX = 0; -theme.DoubleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.DoubleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Name.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Name.FontAlignment = 1; -theme.DoubleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Recast = {}; -theme.DoubleDisplay.FontObjects.Recast.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Recast.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.DoubleDisplay.ImageObjects = {}; -theme.DoubleDisplay.ImageObjects.Frame = {}; -theme.DoubleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.DoubleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.DoubleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Icon = {}; -theme.DoubleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Icon.Width = square; -theme.DoubleDisplay.ImageObjects.Icon.Height = square; -theme.DoubleDisplay.ImageObjects.Overlay = {}; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Overlay.Width = square; -theme.DoubleDisplay.ImageObjects.Overlay.Height = square; -theme.DoubleDisplay.Primitives = T{}; -theme.DoubleDisplay.FramePath = 'misc/frame.png'; -theme.DoubleDisplay.PanelHeight = panelHeight; -theme.DoubleDisplay.PanelWidth = (12 * objWidth) + (5 * spacing) + 16; -theme.DoubleDisplay.DefaultX = 0; -theme.DoubleDisplay.DefaultY = 0; -theme.DoubleDisplay.SquareHeight = objHeight; -theme.DoubleDisplay.SquareWidth = objWidth; -theme.DoubleDisplay.Squares = T{}; -theme.DoubleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -offset = (objWidth * 3) + 4 + spacing; -theme.DoubleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + (3 * spacing); -theme.DoubleDisplay.Squares[9] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[10] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[11] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[12] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + spacing; -theme.DoubleDisplay.Squares[13] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[14] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[15] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[16] = { OffsetX = offset, OffsetY = verticalOffset1 }; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file diff --git a/resources/layouts/scalable_1.2.lua b/resources/layouts/scalable_1.2.lua deleted file mode 100644 index a7b7faf..0000000 --- a/resources/layouts/scalable_1.2.lua +++ /dev/null @@ -1,230 +0,0 @@ -local scale = 1.2; - -local fontHeight = math.floor(11 * scale); -local fontOutline, fontSize; -if (fontHeight < 10) then - fontOutline = 1; - fontSize = (fontHeight - 1); -else - fontOutline = 2; - fontSize = (fontHeight - 2); -end - -local padding = math.floor(5 * scale); -local frame = math.floor(2 * scale); -local square = math.floor(40 * scale); -local spacing = math.floor(12 * scale); - -local objWidth = square + (2 * (padding + frame)); -local objHeight = square + (2 * frame) + fontHeight; - -local verticalOffset1 = square; -local verticalOffset2 = verticalOffset1 + square + (2 * frame); -local panelHeight = verticalOffset2 + objHeight; - -local theme = {}; -theme.CrossPath = 'misc/cross.png'; -theme.TriggerPath = 'misc/trigger.png'; -theme.SkillchainAnimationPaths = T{}; -theme.SkillchainAnimationPaths[1] = 'misc/crawl1.png'; -theme.SkillchainAnimationPaths[2] = 'misc/crawl2.png'; -theme.SkillchainAnimationPaths[3] = 'misc/crawl3.png'; -theme.SkillchainAnimationPaths[4] = 'misc/crawl4.png'; -theme.SkillchainAnimationPaths[5] = 'misc/crawl5.png'; -theme.SkillchainAnimationPaths[6] = 'misc/crawl6.png'; -theme.SkillchainAnimationPaths[7] = 'misc/crawl7.png'; -theme.SkillchainAnimationTime = 0.08; -theme.IconFadeAlpha = 0.5; -theme.SingleDisplay = {}; -theme.SingleDisplay.FontObjects = {}; -theme.SingleDisplay.FontObjects.Cost = {}; -theme.SingleDisplay.FontObjects.Cost.BoxWidth = square; -theme.SingleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Cost.FontFlags = 0; -theme.SingleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.SingleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Macro = {}; -theme.SingleDisplay.FontObjects.Macro.BoxWidth = square; -theme.SingleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Macro.OffsetY = frame; -theme.SingleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Macro.FontFlags = 0; -theme.SingleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Name = {}; -theme.SingleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.SingleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Name.OffsetX = 0; -theme.SingleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.SingleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Name.FontFlags = 0; -theme.SingleDisplay.FontObjects.Name.FontAlignment = 1; -theme.SingleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Recast = {}; -theme.SingleDisplay.FontObjects.Recast.BoxWidth = square; -theme.SingleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Recast.FontFlags = 0; -theme.SingleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.SingleDisplay.ImageObjects = {}; -theme.SingleDisplay.ImageObjects.Frame = {}; -theme.SingleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.SingleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.SingleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Icon = {}; -theme.SingleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Icon.Width = square; -theme.SingleDisplay.ImageObjects.Icon.Height = square; -theme.SingleDisplay.ImageObjects.Overlay = {}; -theme.SingleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Overlay.Width = square; -theme.SingleDisplay.ImageObjects.Overlay.Height = square; -theme.SingleDisplay.Primitives = T{}; -theme.SingleDisplay.FramePath = 'misc/frame.png'; -theme.SingleDisplay.PanelHeight = panelHeight; -theme.SingleDisplay.PanelWidth = (6 * objWidth) + 8 + spacing; -theme.SingleDisplay.DefaultX = 0; -theme.SingleDisplay.DefaultY = 0; -theme.SingleDisplay.SquareHeight = objHeight; -theme.SingleDisplay.SquareWidth = objWidth; -theme.SingleDisplay.Squares = T{}; -theme.SingleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -local offset = (objWidth * 3) + 4 + spacing; -theme.SingleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -theme.DoubleDisplay = {}; -theme.DoubleDisplay.FontObjects = {}; -theme.DoubleDisplay.FontObjects.Cost = {}; -theme.DoubleDisplay.FontObjects.Cost.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Cost.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.DoubleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Macro = {}; -theme.DoubleDisplay.FontObjects.Macro.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Macro.OffsetY = frame; -theme.DoubleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Macro.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Name = {}; -theme.DoubleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.DoubleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Name.OffsetX = 0; -theme.DoubleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.DoubleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Name.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Name.FontAlignment = 1; -theme.DoubleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Recast = {}; -theme.DoubleDisplay.FontObjects.Recast.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Recast.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.DoubleDisplay.ImageObjects = {}; -theme.DoubleDisplay.ImageObjects.Frame = {}; -theme.DoubleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.DoubleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.DoubleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Icon = {}; -theme.DoubleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Icon.Width = square; -theme.DoubleDisplay.ImageObjects.Icon.Height = square; -theme.DoubleDisplay.ImageObjects.Overlay = {}; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Overlay.Width = square; -theme.DoubleDisplay.ImageObjects.Overlay.Height = square; -theme.DoubleDisplay.Primitives = T{}; -theme.DoubleDisplay.FramePath = 'misc/frame.png'; -theme.DoubleDisplay.PanelHeight = panelHeight; -theme.DoubleDisplay.PanelWidth = (12 * objWidth) + (5 * spacing) + 16; -theme.DoubleDisplay.DefaultX = 0; -theme.DoubleDisplay.DefaultY = 0; -theme.DoubleDisplay.SquareHeight = objHeight; -theme.DoubleDisplay.SquareWidth = objWidth; -theme.DoubleDisplay.Squares = T{}; -theme.DoubleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -offset = (objWidth * 3) + 4 + spacing; -theme.DoubleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + (3 * spacing); -theme.DoubleDisplay.Squares[9] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[10] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[11] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[12] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + spacing; -theme.DoubleDisplay.Squares[13] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[14] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[15] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[16] = { OffsetX = offset, OffsetY = verticalOffset1 }; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file diff --git a/resources/layouts/scalable_1.4.lua b/resources/layouts/scalable_1.4.lua deleted file mode 100644 index 8cc1b5d..0000000 --- a/resources/layouts/scalable_1.4.lua +++ /dev/null @@ -1,230 +0,0 @@ -local scale = 1.4; - -local fontHeight = math.floor(11 * scale); -local fontOutline, fontSize; -if (fontHeight < 10) then - fontOutline = 1; - fontSize = (fontHeight - 1); -else - fontOutline = 2; - fontSize = (fontHeight - 2); -end - -local padding = math.floor(5 * scale); -local frame = math.floor(2 * scale); -local square = math.floor(40 * scale); -local spacing = math.floor(12 * scale); - -local objWidth = square + (2 * (padding + frame)); -local objHeight = square + (2 * frame) + fontHeight; - -local verticalOffset1 = square; -local verticalOffset2 = verticalOffset1 + square + (2 * frame); -local panelHeight = verticalOffset2 + objHeight; - -local theme = {}; -theme.CrossPath = 'misc/cross.png'; -theme.TriggerPath = 'misc/trigger.png'; -theme.SkillchainAnimationPaths = T{}; -theme.SkillchainAnimationPaths[1] = 'misc/crawl1.png'; -theme.SkillchainAnimationPaths[2] = 'misc/crawl2.png'; -theme.SkillchainAnimationPaths[3] = 'misc/crawl3.png'; -theme.SkillchainAnimationPaths[4] = 'misc/crawl4.png'; -theme.SkillchainAnimationPaths[5] = 'misc/crawl5.png'; -theme.SkillchainAnimationPaths[6] = 'misc/crawl6.png'; -theme.SkillchainAnimationPaths[7] = 'misc/crawl7.png'; -theme.SkillchainAnimationTime = 0.08; -theme.IconFadeAlpha = 0.5; -theme.SingleDisplay = {}; -theme.SingleDisplay.FontObjects = {}; -theme.SingleDisplay.FontObjects.Cost = {}; -theme.SingleDisplay.FontObjects.Cost.BoxWidth = square; -theme.SingleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Cost.FontFlags = 0; -theme.SingleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.SingleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Macro = {}; -theme.SingleDisplay.FontObjects.Macro.BoxWidth = square; -theme.SingleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Macro.OffsetY = frame; -theme.SingleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Macro.FontFlags = 0; -theme.SingleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Name = {}; -theme.SingleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.SingleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Name.OffsetX = 0; -theme.SingleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.SingleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Name.FontFlags = 0; -theme.SingleDisplay.FontObjects.Name.FontAlignment = 1; -theme.SingleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Recast = {}; -theme.SingleDisplay.FontObjects.Recast.BoxWidth = square; -theme.SingleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Recast.FontFlags = 0; -theme.SingleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.SingleDisplay.ImageObjects = {}; -theme.SingleDisplay.ImageObjects.Frame = {}; -theme.SingleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.SingleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.SingleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Icon = {}; -theme.SingleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Icon.Width = square; -theme.SingleDisplay.ImageObjects.Icon.Height = square; -theme.SingleDisplay.ImageObjects.Overlay = {}; -theme.SingleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Overlay.Width = square; -theme.SingleDisplay.ImageObjects.Overlay.Height = square; -theme.SingleDisplay.Primitives = T{}; -theme.SingleDisplay.FramePath = 'misc/frame.png'; -theme.SingleDisplay.PanelHeight = panelHeight; -theme.SingleDisplay.PanelWidth = (6 * objWidth) + 8 + spacing; -theme.SingleDisplay.DefaultX = 0; -theme.SingleDisplay.DefaultY = 0; -theme.SingleDisplay.SquareHeight = objHeight; -theme.SingleDisplay.SquareWidth = objWidth; -theme.SingleDisplay.Squares = T{}; -theme.SingleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -local offset = (objWidth * 3) + 4 + spacing; -theme.SingleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -theme.DoubleDisplay = {}; -theme.DoubleDisplay.FontObjects = {}; -theme.DoubleDisplay.FontObjects.Cost = {}; -theme.DoubleDisplay.FontObjects.Cost.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Cost.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.DoubleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Macro = {}; -theme.DoubleDisplay.FontObjects.Macro.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Macro.OffsetY = frame; -theme.DoubleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Macro.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Name = {}; -theme.DoubleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.DoubleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Name.OffsetX = 0; -theme.DoubleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.DoubleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Name.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Name.FontAlignment = 1; -theme.DoubleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Recast = {}; -theme.DoubleDisplay.FontObjects.Recast.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Recast.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.DoubleDisplay.ImageObjects = {}; -theme.DoubleDisplay.ImageObjects.Frame = {}; -theme.DoubleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.DoubleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.DoubleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Icon = {}; -theme.DoubleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Icon.Width = square; -theme.DoubleDisplay.ImageObjects.Icon.Height = square; -theme.DoubleDisplay.ImageObjects.Overlay = {}; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Overlay.Width = square; -theme.DoubleDisplay.ImageObjects.Overlay.Height = square; -theme.DoubleDisplay.Primitives = T{}; -theme.DoubleDisplay.FramePath = 'misc/frame.png'; -theme.DoubleDisplay.PanelHeight = panelHeight; -theme.DoubleDisplay.PanelWidth = (12 * objWidth) + (5 * spacing) + 16; -theme.DoubleDisplay.DefaultX = 0; -theme.DoubleDisplay.DefaultY = 0; -theme.DoubleDisplay.SquareHeight = objHeight; -theme.DoubleDisplay.SquareWidth = objWidth; -theme.DoubleDisplay.Squares = T{}; -theme.DoubleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -offset = (objWidth * 3) + 4 + spacing; -theme.DoubleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + (3 * spacing); -theme.DoubleDisplay.Squares[9] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[10] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[11] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[12] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + spacing; -theme.DoubleDisplay.Squares[13] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[14] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[15] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[16] = { OffsetX = offset, OffsetY = verticalOffset1 }; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file diff --git a/resources/layouts/scalable_1.6.lua b/resources/layouts/scalable_1.6.lua deleted file mode 100644 index 9e9576a..0000000 --- a/resources/layouts/scalable_1.6.lua +++ /dev/null @@ -1,230 +0,0 @@ -local scale = 1.6; - -local fontHeight = math.floor(11 * scale); -local fontOutline, fontSize; -if (fontHeight < 10) then - fontOutline = 1; - fontSize = (fontHeight - 1); -else - fontOutline = 2; - fontSize = (fontHeight - 2); -end - -local padding = math.floor(5 * scale); -local frame = math.floor(2 * scale); -local square = math.floor(40 * scale); -local spacing = math.floor(12 * scale); - -local objWidth = square + (2 * (padding + frame)); -local objHeight = square + (2 * frame) + fontHeight; - -local verticalOffset1 = square; -local verticalOffset2 = verticalOffset1 + square + (2 * frame); -local panelHeight = verticalOffset2 + objHeight; - -local theme = {}; -theme.CrossPath = 'misc/cross.png'; -theme.TriggerPath = 'misc/trigger.png'; -theme.SkillchainAnimationPaths = T{}; -theme.SkillchainAnimationPaths[1] = 'misc/crawl1.png'; -theme.SkillchainAnimationPaths[2] = 'misc/crawl2.png'; -theme.SkillchainAnimationPaths[3] = 'misc/crawl3.png'; -theme.SkillchainAnimationPaths[4] = 'misc/crawl4.png'; -theme.SkillchainAnimationPaths[5] = 'misc/crawl5.png'; -theme.SkillchainAnimationPaths[6] = 'misc/crawl6.png'; -theme.SkillchainAnimationPaths[7] = 'misc/crawl7.png'; -theme.SkillchainAnimationTime = 0.08; -theme.IconFadeAlpha = 0.5; -theme.SingleDisplay = {}; -theme.SingleDisplay.FontObjects = {}; -theme.SingleDisplay.FontObjects.Cost = {}; -theme.SingleDisplay.FontObjects.Cost.BoxWidth = square; -theme.SingleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Cost.FontFlags = 0; -theme.SingleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.SingleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Macro = {}; -theme.SingleDisplay.FontObjects.Macro.BoxWidth = square; -theme.SingleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Macro.OffsetY = frame; -theme.SingleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Macro.FontFlags = 0; -theme.SingleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Name = {}; -theme.SingleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.SingleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Name.OffsetX = 0; -theme.SingleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.SingleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Name.FontFlags = 0; -theme.SingleDisplay.FontObjects.Name.FontAlignment = 1; -theme.SingleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Recast = {}; -theme.SingleDisplay.FontObjects.Recast.BoxWidth = square; -theme.SingleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Recast.FontFlags = 0; -theme.SingleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.SingleDisplay.ImageObjects = {}; -theme.SingleDisplay.ImageObjects.Frame = {}; -theme.SingleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.SingleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.SingleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Icon = {}; -theme.SingleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Icon.Width = square; -theme.SingleDisplay.ImageObjects.Icon.Height = square; -theme.SingleDisplay.ImageObjects.Overlay = {}; -theme.SingleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Overlay.Width = square; -theme.SingleDisplay.ImageObjects.Overlay.Height = square; -theme.SingleDisplay.Primitives = T{}; -theme.SingleDisplay.FramePath = 'misc/frame.png'; -theme.SingleDisplay.PanelHeight = panelHeight; -theme.SingleDisplay.PanelWidth = (6 * objWidth) + 8 + spacing; -theme.SingleDisplay.DefaultX = 0; -theme.SingleDisplay.DefaultY = 0; -theme.SingleDisplay.SquareHeight = objHeight; -theme.SingleDisplay.SquareWidth = objWidth; -theme.SingleDisplay.Squares = T{}; -theme.SingleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -local offset = (objWidth * 3) + 4 + spacing; -theme.SingleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -theme.DoubleDisplay = {}; -theme.DoubleDisplay.FontObjects = {}; -theme.DoubleDisplay.FontObjects.Cost = {}; -theme.DoubleDisplay.FontObjects.Cost.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Cost.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.DoubleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Macro = {}; -theme.DoubleDisplay.FontObjects.Macro.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Macro.OffsetY = frame; -theme.DoubleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Macro.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Name = {}; -theme.DoubleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.DoubleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Name.OffsetX = 0; -theme.DoubleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.DoubleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Name.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Name.FontAlignment = 1; -theme.DoubleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Recast = {}; -theme.DoubleDisplay.FontObjects.Recast.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Recast.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.DoubleDisplay.ImageObjects = {}; -theme.DoubleDisplay.ImageObjects.Frame = {}; -theme.DoubleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.DoubleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.DoubleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Icon = {}; -theme.DoubleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Icon.Width = square; -theme.DoubleDisplay.ImageObjects.Icon.Height = square; -theme.DoubleDisplay.ImageObjects.Overlay = {}; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Overlay.Width = square; -theme.DoubleDisplay.ImageObjects.Overlay.Height = square; -theme.DoubleDisplay.Primitives = T{}; -theme.DoubleDisplay.FramePath = 'misc/frame.png'; -theme.DoubleDisplay.PanelHeight = panelHeight; -theme.DoubleDisplay.PanelWidth = (12 * objWidth) + (5 * spacing) + 16; -theme.DoubleDisplay.DefaultX = 0; -theme.DoubleDisplay.DefaultY = 0; -theme.DoubleDisplay.SquareHeight = objHeight; -theme.DoubleDisplay.SquareWidth = objWidth; -theme.DoubleDisplay.Squares = T{}; -theme.DoubleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -offset = (objWidth * 3) + 4 + spacing; -theme.DoubleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + (3 * spacing); -theme.DoubleDisplay.Squares[9] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[10] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[11] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[12] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + spacing; -theme.DoubleDisplay.Squares[13] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[14] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[15] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[16] = { OffsetX = offset, OffsetY = verticalOffset1 }; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file diff --git a/resources/layouts/scalable_1.8.lua b/resources/layouts/scalable_1.8.lua deleted file mode 100644 index 67a9580..0000000 --- a/resources/layouts/scalable_1.8.lua +++ /dev/null @@ -1,230 +0,0 @@ -local scale = 1.8; - -local fontHeight = math.floor(11 * scale); -local fontOutline, fontSize; -if (fontHeight < 10) then - fontOutline = 1; - fontSize = (fontHeight - 1); -else - fontOutline = 2; - fontSize = (fontHeight - 2); -end - -local padding = math.floor(5 * scale); -local frame = math.floor(2 * scale); -local square = math.floor(40 * scale); -local spacing = math.floor(12 * scale); - -local objWidth = square + (2 * (padding + frame)); -local objHeight = square + (2 * frame) + fontHeight; - -local verticalOffset1 = square; -local verticalOffset2 = verticalOffset1 + square + (2 * frame); -local panelHeight = verticalOffset2 + objHeight; - -local theme = {}; -theme.CrossPath = 'misc/cross.png'; -theme.TriggerPath = 'misc/trigger.png'; -theme.SkillchainAnimationPaths = T{}; -theme.SkillchainAnimationPaths[1] = 'misc/crawl1.png'; -theme.SkillchainAnimationPaths[2] = 'misc/crawl2.png'; -theme.SkillchainAnimationPaths[3] = 'misc/crawl3.png'; -theme.SkillchainAnimationPaths[4] = 'misc/crawl4.png'; -theme.SkillchainAnimationPaths[5] = 'misc/crawl5.png'; -theme.SkillchainAnimationPaths[6] = 'misc/crawl6.png'; -theme.SkillchainAnimationPaths[7] = 'misc/crawl7.png'; -theme.SkillchainAnimationTime = 0.08; -theme.IconFadeAlpha = 0.5; -theme.SingleDisplay = {}; -theme.SingleDisplay.FontObjects = {}; -theme.SingleDisplay.FontObjects.Cost = {}; -theme.SingleDisplay.FontObjects.Cost.BoxWidth = square; -theme.SingleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Cost.FontFlags = 0; -theme.SingleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.SingleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Macro = {}; -theme.SingleDisplay.FontObjects.Macro.BoxWidth = square; -theme.SingleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Macro.OffsetY = frame; -theme.SingleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Macro.FontFlags = 0; -theme.SingleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Name = {}; -theme.SingleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.SingleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Name.OffsetX = 0; -theme.SingleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.SingleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Name.FontFlags = 0; -theme.SingleDisplay.FontObjects.Name.FontAlignment = 1; -theme.SingleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Recast = {}; -theme.SingleDisplay.FontObjects.Recast.BoxWidth = square; -theme.SingleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Recast.FontFlags = 0; -theme.SingleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.SingleDisplay.ImageObjects = {}; -theme.SingleDisplay.ImageObjects.Frame = {}; -theme.SingleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.SingleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.SingleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Icon = {}; -theme.SingleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Icon.Width = square; -theme.SingleDisplay.ImageObjects.Icon.Height = square; -theme.SingleDisplay.ImageObjects.Overlay = {}; -theme.SingleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Overlay.Width = square; -theme.SingleDisplay.ImageObjects.Overlay.Height = square; -theme.SingleDisplay.Primitives = T{}; -theme.SingleDisplay.FramePath = 'misc/frame.png'; -theme.SingleDisplay.PanelHeight = panelHeight; -theme.SingleDisplay.PanelWidth = (6 * objWidth) + 8 + spacing; -theme.SingleDisplay.DefaultX = 0; -theme.SingleDisplay.DefaultY = 0; -theme.SingleDisplay.SquareHeight = objHeight; -theme.SingleDisplay.SquareWidth = objWidth; -theme.SingleDisplay.Squares = T{}; -theme.SingleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -local offset = (objWidth * 3) + 4 + spacing; -theme.SingleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -theme.DoubleDisplay = {}; -theme.DoubleDisplay.FontObjects = {}; -theme.DoubleDisplay.FontObjects.Cost = {}; -theme.DoubleDisplay.FontObjects.Cost.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Cost.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.DoubleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Macro = {}; -theme.DoubleDisplay.FontObjects.Macro.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Macro.OffsetY = frame; -theme.DoubleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Macro.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Name = {}; -theme.DoubleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.DoubleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Name.OffsetX = 0; -theme.DoubleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.DoubleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Name.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Name.FontAlignment = 1; -theme.DoubleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Recast = {}; -theme.DoubleDisplay.FontObjects.Recast.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Recast.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.DoubleDisplay.ImageObjects = {}; -theme.DoubleDisplay.ImageObjects.Frame = {}; -theme.DoubleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.DoubleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.DoubleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Icon = {}; -theme.DoubleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Icon.Width = square; -theme.DoubleDisplay.ImageObjects.Icon.Height = square; -theme.DoubleDisplay.ImageObjects.Overlay = {}; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Overlay.Width = square; -theme.DoubleDisplay.ImageObjects.Overlay.Height = square; -theme.DoubleDisplay.Primitives = T{}; -theme.DoubleDisplay.FramePath = 'misc/frame.png'; -theme.DoubleDisplay.PanelHeight = panelHeight; -theme.DoubleDisplay.PanelWidth = (12 * objWidth) + (5 * spacing) + 16; -theme.DoubleDisplay.DefaultX = 0; -theme.DoubleDisplay.DefaultY = 0; -theme.DoubleDisplay.SquareHeight = objHeight; -theme.DoubleDisplay.SquareWidth = objWidth; -theme.DoubleDisplay.Squares = T{}; -theme.DoubleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -offset = (objWidth * 3) + 4 + spacing; -theme.DoubleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + (3 * spacing); -theme.DoubleDisplay.Squares[9] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[10] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[11] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[12] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + spacing; -theme.DoubleDisplay.Squares[13] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[14] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[15] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[16] = { OffsetX = offset, OffsetY = verticalOffset1 }; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file diff --git a/resources/layouts/scalable_2.0.lua b/resources/layouts/scalable_2.0.lua deleted file mode 100644 index c976c87..0000000 --- a/resources/layouts/scalable_2.0.lua +++ /dev/null @@ -1,230 +0,0 @@ -local scale = 2.0; - -local fontHeight = math.floor(11 * scale); -local fontOutline, fontSize; -if (fontHeight < 10) then - fontOutline = 1; - fontSize = (fontHeight - 1); -else - fontOutline = 2; - fontSize = (fontHeight - 2); -end - -local padding = math.floor(5 * scale); -local frame = math.floor(2 * scale); -local square = math.floor(40 * scale); -local spacing = math.floor(12 * scale); - -local objWidth = square + (2 * (padding + frame)); -local objHeight = square + (2 * frame) + fontHeight; - -local verticalOffset1 = square; -local verticalOffset2 = verticalOffset1 + square + (2 * frame); -local panelHeight = verticalOffset2 + objHeight; - -local theme = {}; -theme.CrossPath = 'misc/cross.png'; -theme.TriggerPath = 'misc/trigger.png'; -theme.SkillchainAnimationPaths = T{}; -theme.SkillchainAnimationPaths[1] = 'misc/crawl1.png'; -theme.SkillchainAnimationPaths[2] = 'misc/crawl2.png'; -theme.SkillchainAnimationPaths[3] = 'misc/crawl3.png'; -theme.SkillchainAnimationPaths[4] = 'misc/crawl4.png'; -theme.SkillchainAnimationPaths[5] = 'misc/crawl5.png'; -theme.SkillchainAnimationPaths[6] = 'misc/crawl6.png'; -theme.SkillchainAnimationPaths[7] = 'misc/crawl7.png'; -theme.SkillchainAnimationTime = 0.08; -theme.IconFadeAlpha = 0.5; -theme.SingleDisplay = {}; -theme.SingleDisplay.FontObjects = {}; -theme.SingleDisplay.FontObjects.Cost = {}; -theme.SingleDisplay.FontObjects.Cost.BoxWidth = square; -theme.SingleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Cost.FontFlags = 0; -theme.SingleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.SingleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Macro = {}; -theme.SingleDisplay.FontObjects.Macro.BoxWidth = square; -theme.SingleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Macro.OffsetY = frame; -theme.SingleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Macro.FontFlags = 0; -theme.SingleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Name = {}; -theme.SingleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.SingleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Name.OffsetX = 0; -theme.SingleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.SingleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Name.FontFlags = 0; -theme.SingleDisplay.FontObjects.Name.FontAlignment = 1; -theme.SingleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.SingleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.SingleDisplay.FontObjects.Recast = {}; -theme.SingleDisplay.FontObjects.Recast.BoxWidth = square; -theme.SingleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.SingleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.SingleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.SingleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.SingleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.SingleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.SingleDisplay.FontObjects.Recast.FontFlags = 0; -theme.SingleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.SingleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.SingleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.SingleDisplay.ImageObjects = {}; -theme.SingleDisplay.ImageObjects.Frame = {}; -theme.SingleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.SingleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.SingleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.SingleDisplay.ImageObjects.Icon = {}; -theme.SingleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Icon.Width = square; -theme.SingleDisplay.ImageObjects.Icon.Height = square; -theme.SingleDisplay.ImageObjects.Overlay = {}; -theme.SingleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.SingleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.SingleDisplay.ImageObjects.Overlay.Width = square; -theme.SingleDisplay.ImageObjects.Overlay.Height = square; -theme.SingleDisplay.Primitives = T{}; -theme.SingleDisplay.FramePath = 'misc/frame.png'; -theme.SingleDisplay.PanelHeight = panelHeight; -theme.SingleDisplay.PanelWidth = (6 * objWidth) + 8 + spacing; -theme.SingleDisplay.DefaultX = 0; -theme.SingleDisplay.DefaultY = 0; -theme.SingleDisplay.SquareHeight = objHeight; -theme.SingleDisplay.SquareWidth = objWidth; -theme.SingleDisplay.Squares = T{}; -theme.SingleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -local offset = (objWidth * 3) + 4 + spacing; -theme.SingleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.SingleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.SingleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.SingleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -theme.DoubleDisplay = {}; -theme.DoubleDisplay.FontObjects = {}; -theme.DoubleDisplay.FontObjects.Cost = {}; -theme.DoubleDisplay.FontObjects.Cost.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Cost.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Cost.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Cost.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Cost.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Cost.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Cost.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Cost.FontAlignment = 2; -theme.DoubleDisplay.FontObjects.Cost.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Cost.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Macro = {}; -theme.DoubleDisplay.FontObjects.Macro.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Macro.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Macro.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Macro.OffsetY = frame; -theme.DoubleDisplay.FontObjects.Macro.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Macro.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Macro.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Macro.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Macro.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Macro.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Macro.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Name = {}; -theme.DoubleDisplay.FontObjects.Name.BoxWidth = square + ((padding + frame) * 2); -theme.DoubleDisplay.FontObjects.Name.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Name.OffsetX = 0; -theme.DoubleDisplay.FontObjects.Name.OffsetY = (2 * frame) + square; -theme.DoubleDisplay.FontObjects.Name.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Name.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Name.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Name.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Name.FontAlignment = 1; -theme.DoubleDisplay.FontObjects.Name.FontColor = 0xFFFFFFFF; -theme.DoubleDisplay.FontObjects.Name.OutlineColor = 0xFF000000; -theme.DoubleDisplay.FontObjects.Recast = {}; -theme.DoubleDisplay.FontObjects.Recast.BoxWidth = square; -theme.DoubleDisplay.FontObjects.Recast.BoxHeight = fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OffsetX = padding + frame; -theme.DoubleDisplay.FontObjects.Recast.OffsetY = (frame + square) - fontHeight; -theme.DoubleDisplay.FontObjects.Recast.OutlineWidth = fontOutline; -theme.DoubleDisplay.FontObjects.Recast.FontHeight = fontSize; -theme.DoubleDisplay.FontObjects.Recast.FontFamily = 'Arial'; -theme.DoubleDisplay.FontObjects.Recast.FontFlags = 0; -theme.DoubleDisplay.FontObjects.Recast.FontAlignment = 0; -theme.DoubleDisplay.FontObjects.Recast.FontColor = 0xFF389609; -theme.DoubleDisplay.FontObjects.Recast.OutlineColor = 0xFF000000; -theme.DoubleDisplay.ImageObjects = {}; -theme.DoubleDisplay.ImageObjects.Frame = {}; -theme.DoubleDisplay.ImageObjects.Frame.OffsetX = padding; -theme.DoubleDisplay.ImageObjects.Frame.OffsetY = 0; -theme.DoubleDisplay.ImageObjects.Frame.Width = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Frame.Height = square + (2 * frame); -theme.DoubleDisplay.ImageObjects.Icon = {}; -theme.DoubleDisplay.ImageObjects.Icon.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Icon.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Icon.Width = square; -theme.DoubleDisplay.ImageObjects.Icon.Height = square; -theme.DoubleDisplay.ImageObjects.Overlay = {}; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetX = padding + frame; -theme.DoubleDisplay.ImageObjects.Overlay.OffsetY = frame; -theme.DoubleDisplay.ImageObjects.Overlay.Width = square; -theme.DoubleDisplay.ImageObjects.Overlay.Height = square; -theme.DoubleDisplay.Primitives = T{}; -theme.DoubleDisplay.FramePath = 'misc/frame.png'; -theme.DoubleDisplay.PanelHeight = panelHeight; -theme.DoubleDisplay.PanelWidth = (12 * objWidth) + (5 * spacing) + 16; -theme.DoubleDisplay.DefaultX = 0; -theme.DoubleDisplay.DefaultY = 0; -theme.DoubleDisplay.SquareHeight = objHeight; -theme.DoubleDisplay.SquareWidth = objWidth; -theme.DoubleDisplay.Squares = T{}; -theme.DoubleDisplay.Squares[1] = { OffsetX = objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[2] = { OffsetX = (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[3] = { OffsetX = objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[4] = { OffsetX = 0, OffsetY = verticalOffset1 }; -offset = (objWidth * 3) + 4 + spacing; -theme.DoubleDisplay.Squares[5] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[6] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[7] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[8] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + (3 * spacing); -theme.DoubleDisplay.Squares[9] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[10] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[11] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[12] = { OffsetX = offset, OffsetY = verticalOffset1 }; -offset = offset + (3 * objWidth) + 4 + spacing; -theme.DoubleDisplay.Squares[13] = { OffsetX = offset + objWidth + 2, OffsetY = 0 }; -theme.DoubleDisplay.Squares[14] = { OffsetX = offset + (2 * objWidth) + 4, OffsetY = verticalOffset1 }; -theme.DoubleDisplay.Squares[15] = { OffsetX = offset + objWidth + 2, OffsetY = verticalOffset2 }; -theme.DoubleDisplay.Squares[16] = { OffsetX = offset, OffsetY = verticalOffset1 }; - -local scaling = require('scaling'); -if ((scaling.window.w == -1) or (scaling.window.h == -1) or (scaling.menu.w == -1) or (scaling.menu.h == -1)) then - theme.SingleDisplay.DefaultX = 0; - theme.SingleDisplay.DefaultY = 0; - theme.DoubleDisplay.DefaultX = 0; - theme.DoubleDisplay.DefaultY = 0; -else - theme.SingleDisplay.DefaultX = (scaling.window.w - theme.SingleDisplay.PanelWidth) / 2; - theme.SingleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.SingleDisplay.PanelHeight); - theme.DoubleDisplay.DefaultX = (scaling.window.w - theme.DoubleDisplay.PanelWidth) / 2; - theme.DoubleDisplay.DefaultY = scaling.window.h - (scaling.scale_height(136) + theme.DoubleDisplay.PanelHeight); -end - -return theme; \ No newline at end of file From 89d8552cdb4e3e6d07d51a53738c0a998c6fd375 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 10:42:17 -0500 Subject: [PATCH 15/25] Disable jit to avoid bugs --- tCrossBar.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tCrossBar.lua b/tCrossBar.lua index 1375460..f4859f3 100644 --- a/tCrossBar.lua +++ b/tCrossBar.lua @@ -26,6 +26,8 @@ addon.desc = 'Creates a controller scheme for activating macros, and provid addon.link = 'https://ashitaxi.com/'; require('common'); +local jit = require('jit'); +jit.off(); local chat = require('chat'); local gdi = require('gdifonts.include'); From 1e531ef6d3f2bfb34e93c92e64f584a351e4f25d Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 10:54:18 -0500 Subject: [PATCH 16/25] Add support for status icons in binding menu, fix layout error --- bindinggui.lua | 23 ++++------------------- resources/layouts/classic.lua | 12 ++++++------ 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/bindinggui.lua b/bindinggui.lua index 63ac756..a560230 100644 --- a/bindinggui.lua +++ b/bindinggui.lua @@ -120,24 +120,9 @@ local function UpdateMacroImage() if (state.MacroImage == nil) then return; end - - if (string.sub(state.MacroImage[1], 1, 5) == 'ITEM:') then - local item = AshitaCore:GetResourceManager():GetItemById(tonumber(string.sub(state.MacroImage[1], 6))); - if (item ~= nil) then - local dx_texture_ptr = ffi.new('IDirect3DTexture8*[1]'); - if (ffi.C.D3DXCreateTextureFromFileInMemoryEx(d3d8_device, item.Bitmap, item.ImageSize, 0xFFFFFFFF, 0xFFFFFFFF, 1, 0, ffi.C.D3DFMT_A8R8G8B8, ffi.C.D3DPOOL_MANAGED, ffi.C.D3DX_DEFAULT, ffi.C.D3DX_DEFAULT, 0xFF000000, nil, nil, dx_texture_ptr) == ffi.C.S_OK) then - state.Texture = d3d8.gc_safe_release(ffi.cast('IDirect3DTexture8*', dx_texture_ptr[0])); - end - end - return; - end - - local path = GetImagePath(state.MacroImage[1]); - if (path ~= nil) then - local dx_texture_ptr = ffi.new('IDirect3DTexture8*[1]'); - if (ffi.C.D3DXCreateTextureFromFileA(d3d8_device, path, dx_texture_ptr) == ffi.C.S_OK) then - state.Texture = d3d8.gc_safe_release(ffi.cast('IDirect3DTexture8*', dx_texture_ptr[0])); - end + local tx = gTextureCache:GetTexture(state.MacroImage[1]); + if tx then + state.Texture = tx.Texture; end end @@ -747,7 +732,7 @@ function exposed:Render() if (state.Combos.Type[state.Indices.Type] ~= 'Empty') then imgui.InputText('##MacroImage', state.MacroImage, 256); imgui.SameLine(); - if (imgui.Button('Update', { 60, 0 })) then + if (imgui.Button('Preview', { 60, 0 })) then UpdateMacroImage(); end end diff --git a/resources/layouts/classic.lua b/resources/layouts/classic.lua index 1feb924..8a0e197 100644 --- a/resources/layouts/classic.lua +++ b/resources/layouts/classic.lua @@ -142,12 +142,12 @@ return { T{ OffsetX = 60, OffsetY = 57, - Texture = 'Buttons', + Texture = 'Dpad', }, T{ OffsetX = 234, OffsetY = 57, - Texture = 'Dpad', + Texture = 'Buttons', }, }, @@ -326,22 +326,22 @@ return { T{ OffsetX = 60, OffsetY = 57, - Texture = 'Buttons', + Texture = 'Dpad', }, T{ OffsetX = 234, OffsetY = 57, - Texture = 'Dpad', + Texture = 'Buttons', }, T{ OffsetX = 448, OffsetY = 57, - Texture = 'Buttons', + Texture = 'Dpad', }, T{ OffsetX = 622, OffsetY = 57, - Texture = 'Dpad', + Texture = 'Buttons', }, }, From c2b29756a73781203c63b1138f5e7c3b209a1588 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 11:39:44 -0500 Subject: [PATCH 17/25] add palette name display and setting to show it --- bindings.lua | 13 +++++++++++++ configgui.lua | 2 ++ doubledisplay.lua | 24 ++++++++++++++++++++++++ initializer.lua | 1 + resources/layouts/classic.lua | 22 ++++++++++++++++++++-- 5 files changed, 60 insertions(+), 2 deletions(-) diff --git a/bindings.lua b/bindings.lua index 69afe3d..6542ab2 100644 --- a/bindings.lua +++ b/bindings.lua @@ -192,6 +192,19 @@ function exposed:BindPalette(hotkey, binding) ApplyBindings(); end +function exposed:GetDisplayText() + if (bindings.ActivePalette == nil) then + return; + end + + local paletteCount = #bindings.JobBindings.Palettes; + if (paletteCount == 1) then + return bindings.ActivePalette.Name; + else + return string.format ('%s (%u/%u)', bindings.ActivePalette.Name, bindings.ActivePaletteIndex, paletteCount); + end +end + function exposed:PreviousPalette() local paletteCount = #bindings.JobBindings.Palettes; if (paletteCount == 1) then diff --git a/configgui.lua b/configgui.lua index fa4ce8d..e64d032 100644 --- a/configgui.lua +++ b/configgui.lua @@ -267,6 +267,8 @@ function exposed:Render() imgui.ShowHelp('Shows hotkey labels.'); CheckBox('Name', 'ShowName'); imgui.ShowHelp('Shows action names.'); + CheckBox('Palette', 'ShowPalette'); + imgui.ShowHelp('Shows selected palette.'); imgui.EndGroup(); imgui.EndTabItem(); end diff --git a/doubledisplay.lua b/doubledisplay.lua index 6dfe548..215c07e 100644 --- a/doubledisplay.lua +++ b/doubledisplay.lua @@ -1,6 +1,7 @@ local d3d8 = require('d3d8'); local Element = require('element'); local ffi = require('ffi'); +local gdi = require('gdifonts.include'); local function GetButtonAlias(comboIndex, buttonIndex) local macroComboBinds = { @@ -24,6 +25,7 @@ end function DoubleDisplay:Initialize(layout) self.Layout = layout; + self.PaletteDisplay = nil; self.Elements = T{}; local position = gSettings.DoublePosition; @@ -48,6 +50,10 @@ function DoubleDisplay:Initialize(layout) end self.Valid = (self.Sprite ~= nil); + local obj = gdi:create_object(self.Layout.Palette, true); + obj.OffsetX = self.Layout.Palette.OffsetX; + obj.OffsetY = self.Layout.Palette.OffsetY; + self.PaletteDisplay = obj; end function DoubleDisplay:SetActivationTimer(macroState, macroIndex) @@ -63,6 +69,7 @@ function DoubleDisplay:SetActivationTimer(macroState, macroIndex) end local d3dwhite = d3d8.D3DCOLOR_ARGB(255, 255, 255, 255); +local vec_font_scale = ffi.new('D3DXVECTOR2', { 1.0, 1.0, }); local vec_position = ffi.new('D3DXVECTOR2', { 0, 0, }); function DoubleDisplay:Render(macroState) if (self.Valid == false) then @@ -83,6 +90,23 @@ function DoubleDisplay:Render(macroState) for _,element in ipairs(self.Elements) do element:RenderIcon(sprite); end + + local paletteText = gBindings:GetDisplayText(); + if (gSettings.ShowPalette) and (paletteText) then + local obj = self.PaletteDisplay; + obj:set_text(paletteText); + local texture, rect = obj:get_texture(); + local posX = obj.OffsetX + pos[1]; + if (obj.settings.font_alignment == 1) then + vec_position.x = posX - (rect.right / 2); + elseif (obj.settings.font_alignment == 2) then + vec_position.x = posX - rect.right; + else + vec_position.x = posX;; + end + vec_position.y = obj.OffsetY + pos[2]; + sprite:Draw(texture, rect, vec_font_scale, nil, 0.0, vec_position, d3dwhite); + end for _,element in ipairs(self.Elements) do element:RenderText(sprite); diff --git a/initializer.lua b/initializer.lua index 48f200f..acdc6cc 100644 --- a/initializer.lua +++ b/initializer.lua @@ -42,6 +42,7 @@ local defaultSettings = T{ ShowSkillchainIcon = true, ShowSkillchainAnimation = true, ShowTrigger = true, + ShowPalette = true, --Behavior tab.. ClickToActivate = true, diff --git a/resources/layouts/classic.lua b/resources/layouts/classic.lua index 8a0e197..e08b048 100644 --- a/resources/layouts/classic.lua +++ b/resources/layouts/classic.lua @@ -88,6 +88,7 @@ return { outline_color = 0xFF000000, outline_width = 1, + --Offsets are relative to individual element, not entire panel. OffsetX = 2, OffsetY = 2, }, @@ -151,7 +152,7 @@ return { }, }, - --Size of hitbox for entire element. + --Size of entire panel. Used for prescreening element clicks and automatic positioning. Not enforced for rendering. Panel = { Width = 358, Height = 168, @@ -320,6 +321,23 @@ return { OffsetX = 22, OffsetY = 44, }, + + --Text object to display palette name. Offsets are relative to entire panel. Only present in double display. + Palette = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFF0000, + font_family = 'Arial', + font_flags = 0, + font_height = 15, + gradient_color = 0xFFFC0384, + gradient_style = 3, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 361, + OffsetY = 0, + }, --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. FixedObjects = T{ @@ -345,7 +363,7 @@ return { }, }, - --Size of hitbox for entire element. + --Size of entire panel. Used for prescreening element clicks and automatic positioning. Not enforced for rendering. Panel = { Width = 746, Height = 168, From fd87d310e64c6b9456ce7ab06050526ed615aab4 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:04:59 -0500 Subject: [PATCH 18/25] add check if blu spells are set for binding menu and crossout --- bindinggui.lua | 30 ++++++++++++------------- callbacks.lua | 1 + state/player.lua | 56 +++++++++++++++++++++++++++++++++++++--------- updaters/spell.lua | 4 ++-- updaters/trust.lua | 2 +- 5 files changed, 64 insertions(+), 29 deletions(-) diff --git a/bindinggui.lua b/bindinggui.lua index a560230..90ca0cb 100644 --- a/bindinggui.lua +++ b/bindinggui.lua @@ -129,10 +129,9 @@ end Setup.Ability = function(skipUpdate) state.ActionResources = T{}; local resMgr = AshitaCore:GetResourceManager(); - local playMgr = AshitaCore:GetMemoryManager():GetPlayer(); for i = 0x200,0x600 do local res = resMgr:GetAbilityById(i); - if (res) and (playMgr:HasAbility(res.Id)) then + if (res) and (player:KnowsAbility(res.Id)) then state.ActionResources:append(res); end end @@ -229,15 +228,15 @@ end Setup.Spell = function(skipUpdate) state.ActionResources = T{}; local resMgr = AshitaCore:GetResourceManager(); - local playMgr = AshitaCore:GetMemoryManager():GetPlayer(); - local mainJob = playMgr:GetMainJob(); - local mainJobLevel = playMgr:GetMainJobLevel(); - local subJob = playMgr:GetSubJob(); - local subJobLevel = playMgr:GetSubJobLevel(); + local jobData = player:GetJobData(); + local mainJob = jobData.MainJob; + local mainJobLevel = jobData.MainJobLevel; + local subJob = jobData.SubJob; + local subJobLevel = jobData.SubJobLevel; for i = 1,0x400 do local res = resMgr:GetSpellById(i); - if (res) and (playMgr:HasSpell(res.Index)) then + if (res) and (player:HasSpell(res)) then local levelRequired = res.LevelRequired; --Maybe not best workaround, but trust are all usable at WAR1. if (levelRequired[2] ~= 1) then @@ -282,15 +281,15 @@ end Setup.Trust = function(skipUpdate) state.ActionResources = T{}; local resMgr = AshitaCore:GetResourceManager(); - local playMgr = AshitaCore:GetMemoryManager():GetPlayer(); - local mainJob = playMgr:GetMainJob(); - local mainJobLevel = playMgr:GetMainJobLevel(); - local subJob = playMgr:GetSubJob(); - local subJobLevel = playMgr:GetSubJobLevel(); + local jobData = player:GetJobData(); + local mainJob = jobData.MainJob; + local mainJobLevel = jobData.MainJobLevel; + local subJob = jobData.SubJob; + local subJobLevel = jobData.SubJobLevel; for i = 1,0x400 do local res = resMgr:GetSpellById(i); - if (res) and (playMgr:HasSpell(res.Index)) then + if (res) and (player:HasSpell(res)) then local levelRequired = res.LevelRequired; --Maybe not best workaround, but trust are all usable at WAR1. @@ -336,10 +335,9 @@ end Setup.Weaponskill = function(skipUpdate) state.ActionResources = T{}; local resMgr = AshitaCore:GetResourceManager(); - local playMgr = AshitaCore:GetMemoryManager():GetPlayer(); for i = 1,0x200 do local res = resMgr:GetAbilityById(i); - if (res) and (playMgr:HasAbility(res.Id)) then + if (res) and (player:KnowsAbility(res.Id)) then state.ActionResources:append(res); end end diff --git a/callbacks.lua b/callbacks.lua index f093a44..89a14e2 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -67,6 +67,7 @@ local function ShouldHide() end ashita.events.register('d3d_present', 'd3d_present_cb', function () + player:UpdateBLUSpells(); gController:Tick(); gConfigGUI:Render(); gBindingGUI:Render(); diff --git a/state/player.lua b/state/player.lua index 356122e..0411a9c 100644 --- a/state/player.lua +++ b/state/player.lua @@ -60,6 +60,29 @@ if playerIndex ~= 0 then end end + +local knownSpells = T{}; +local unbridledSpells = T{ 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753 }; +local bluOffset = ashita.memory.read_uint32(ashita.memory.find('FFXiMain.dll', 0, 'C1E1032BC8B0018D????????????B9????????F3A55F5E5B', 10, 0)); +local function UpdateBLUSpells() + knownSpells = T{}; + local ptr = ashita.memory.read_uint32(AshitaCore:GetPointerManager():Get('inventory')); + if (ptr == 0) then + return T{ }; + end + ptr = ashita.memory.read_uint32(ptr); + if (ptr == 0) then + return T{ }; + end + local spells = T(ashita.memory.read_array((ptr + bluOffset) + ((playerData.Job.MainJob == 16) and 0x04 or 0xA0), 0x14)); + for _,entry in pairs(spells) do + local spell = AshitaCore:GetResourceManager():GetSpellById(entry + 512); + if (spell ~= nil) then + knownSpells:append(spell.Index); + end + end +end + ashita.events.register('packet_in', 'player_tracker_handleincomingpacket', function (e) if (e.id == 0x00A) then local id = struct.unpack('L', e.data, 0x04 + 1); @@ -182,9 +205,9 @@ ashita.events.register('packet_out', 'player_tracker_handleoutgoingpacket', func end end); -local accessor = {}; +local exports = {}; -function accessor:GetMeritCount(meritId) +function exports:GetMeritCount(meritId) local count = playerData.MeritCount[meritId]; if not count then return 0; @@ -193,11 +216,11 @@ function accessor:GetMeritCount(meritId) end end -function accessor:GetJobData() +function exports:GetJobData() return playerData.Job; end -function accessor:GetJobPointCount(job, category) +function exports:GetJobPointCount(job, category) local jobTable = playerData.JobPoints[job]; if not jobTable then return 0; @@ -216,7 +239,7 @@ function accessor:GetJobPointCount(job, category) end end -function accessor:GetJobPointTotal(job) +function exports:GetJobPointTotal(job) local jobTable = playerData.JobPoints[job]; if not jobTable then return 0; @@ -230,16 +253,29 @@ function accessor:GetJobPointTotal(job) end end -function accessor:GetLoggedIn() +function exports:GetLoggedIn() return (playerData.LoggedIn == true); end -function accessor:KnowsAbility(index) +function exports:KnowsAbility(index) return (playerData.Abilities[index] == true); end -function accessor:KnowsSpell(index) - return (playerData.Spells[index] == true); +function exports:HasSpell(spell) + if (spell.Skill == 43) then + if (not unbridledSpells:contains(spell.Index)) then + return knownSpells:contains(spell.Index); + end + end + return AshitaCore:GetMemoryManager():GetPlayer():HasSpell(spell.Index); +end + +function exports:KnowsSpell(spell) + return (playerData.Spells[spell.Index] == true); +end + +function exports:UpdateBLUSpells() + UpdateBLUSpells(); end -return accessor; \ No newline at end of file +return exports; \ No newline at end of file diff --git a/updaters/spell.lua b/updaters/spell.lua index 7f75c4c..f31632f 100644 --- a/updaters/spell.lua +++ b/updaters/spell.lua @@ -225,7 +225,7 @@ local function CheckUnbridled(updater) end local function GetSpellAvailableGeneric(updater) - if not player:KnowsSpell(updater.Resource.Index) then + if not player:HasSpell(updater.Resource) then return false, false; end @@ -273,7 +273,7 @@ local function JobPointCheck(updater, jobData) end local function GetSpellAvailable(updater) - if not player:KnowsSpell(updater.Resource.Index) then + if not player:HasSpell(updater.Resource) then return false, false; end diff --git a/updaters/trust.lua b/updaters/trust.lua index a91f156..40cc639 100644 --- a/updaters/trust.lua +++ b/updaters/trust.lua @@ -91,7 +91,7 @@ end function Updater:Tick() --RecastReady will hold number of charges for charged abilities. local recastReady, recastDisplay = GetSpellRecast(self.Resource); - local spellKnown = gPlayer:KnowsSpell(self.Resource.Index) + local spellKnown = gPlayer:HasSpell(self.Resource) local spellCostDisplay, costMet = self:CostFunction(); self.State.Available = spellKnown; From 5852039cd66afeaf204190cd57bfee0e2ad9ac5c Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:19:13 -0500 Subject: [PATCH 19/25] add compact layout --- resources/layouts/compact.lua | 381 ++++++++++++++++++++++++++++++++++ 1 file changed, 381 insertions(+) create mode 100644 resources/layouts/compact.lua diff --git a/resources/layouts/compact.lua b/resources/layouts/compact.lua new file mode 100644 index 0000000..bed84b9 --- /dev/null +++ b/resources/layouts/compact.lua @@ -0,0 +1,381 @@ +return { + Single = { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' + }, + + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, + + --[[ + Textures to be preloaded and sized. + Can be a string, or a table with Path, Width, and Height entries. + If using a string, will be sized to match the Width and Height specified for Icon. + ]]-- + Textures = T{ + Cross = 'misc/cross.png', + Frame = { Path='misc/frame.png', Width=44, Height=44 }, + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + Buttons = { Path='misc/buttons.png', Width=40, Height=40 }, + Dpad = { Path='misc/dpad.png', Width=40, Height=40 }, + DragHandle = { Path='misc/drag.png', Width=26, Height=26 }, + }, + + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + + --Opacity of the overlay shown when a macro is activated. [0-255] + TriggerOpacity = 128, + + --Icon to be displayed when draggability is enabled. + --Must have a valid texture with specified width/height. + DragHandle = { + OffsetX = 0, + OffsetY = 0, + Texture = 'DragHandle', + }, + + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, + }, + + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + }, + + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, + + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, + + --Offsets are relative to individual element, not entire panel. + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, + + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + }, + + --Size of entire panel. Used for prescreening element clicks and automatic positioning. Not enforced for rendering. + Panel = { + Width = 239, + Height = 168, + }, + + --[[ + Table of element positions. SingleDisplay has 8 elements. + Objects are ordered(according to default controller layout): + 1. Dpad Up + 2. Dpad Right + 3. Dpad Down + 4. Dpad Left + 5. Button Up + 6. Button Right + 7. Button Down + 8. Button Left + Must remain 8 objects. + ]]-- + Elements = T{ + { OffsetX = 29, OffsetY = 0 }, + { OffsetX = 65, OffsetY = 55 }, + { OffsetX = 29, OffsetY = 110 }, + { OffsetX = 0, OffsetY = 55 }, + { OffsetX = 152, OffsetY = 0 }, + { OffsetX = 188, OffsetY = 55 }, + { OffsetX = 152, OffsetY = 110 }, + { OffsetX = 123, OffsetY = 55 }, + }, + }, + + Double = { + --Amount is not fixed, you can adjust as desired. + SkillchainFrames = T{ + 'misc/crawl1.png', + 'misc/crawl2.png', + 'misc/crawl3.png', + 'misc/crawl4.png', + 'misc/crawl5.png', + 'misc/crawl6.png', + 'misc/crawl7.png' + }, + + --Time, in seconds, between frame changes for skillchain animation. + SkillchainFrameLength = 0.08, + + --[[ + Textures to be preloaded and sized. + Can be a string, or a table with Path, Width, and Height entries. + If using a string, will be sized to match the Width and Height specified for Icon. + ]]-- + Textures = T{ + Cross = 'misc/cross.png', + Frame = { Path='misc/frame.png', Width=44, Height=44 }, + Trigger = 'misc/trigger.png', + Liquefaction = 'skillchains/Liquefaction.png', + Scission = 'skillchains/Scission.png', + Reverberation = 'skillchains/Reverberation.png', + Detonation = 'skillchains/Detonation.png', + Induration = 'skillchains/Induration.png', + Impaction = 'skillchains/Impaction.png', + Transfixion = 'skillchains/Transfixion.png', + Compression = 'skillchains/Compression.png', + Fusion = 'skillchains/Fusion.png', + Gravitation = 'skillchains/Gravitation.png', + Distortion = 'skillchains/Distortion.png', + Fragmentation = 'skillchains/Fragmentation.png', + Light = 'skillchains/Light.png', + Darkness = 'skillchains/Darkness.png', + Buttons = { Path='misc/buttons.png', Width=40, Height=40 }, + Dpad = { Path='misc/dpad.png', Width=40, Height=40 }, + DragHandle = { Path='misc/drag.png', Width=26, Height=26 }, + }, + + --Transparency to be used when bound macro's action is not known. [0-255] + FadeOpacity = 128, + + --Opacity of the overlay shown when a macro is activated. [0-255] + TriggerOpacity = 128, + + --Icon to be displayed when draggability is enabled. + DragHandle = { + OffsetX = 0, + OffsetY = 0, + Texture = 'DragHandle', + }, + + --The border of each macro element. Offsets are relative to the macro element's placement. + Frame = { + OffsetX = 0, + OffsetY = 0, + Width = 44, + Height = 44, + }, + + --The inner icon for each macro element. Offsets are relative to the macro element's placement. + Icon = { + OffsetX = 2, + OffsetY = 2, + Width = 40, + Height = 40, + }, + + --The text object to display macro or hotkey activation. + Hotkey = { + --If box height/width are specified, text object will not go past those bounds. + --Otherwise, text object will be as large as necessary. + box_height = 0, + box_width = 0, + + --See gdifonts/include for flags and usage.. + font_alignment = 0, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 12, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 1, + + OffsetX = 2, + OffsetY = 2, + }, + Cost = { + box_height = 0, + box_width = 0, + font_alignment = 2, + font_color = 0xFF389609, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 42, + OffsetY = 31, + }, + Recast = { + box_height = 0, + box_width = 0, + font_alignment = 0, + font_color = 0xFFBFCC04, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 2, + OffsetY = 31, + }, + Name = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFFFFFF, + font_family = 'Arial', + font_flags = 0, + font_height = 9, + gradient_color = 0x00000000, + gradient_style = 0, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 22, + OffsetY = 44, + }, + + --Text object to display palette name. Offsets are relative to entire panel. Only present in double display. + Palette = { + box_height = 0, + box_width = 0, + font_alignment = 1, + font_color = 0xFFFF0000, + font_family = 'Arial', + font_flags = 0, + font_height = 11, + gradient_color = 0xFFFC0384, + gradient_style = 3, + outline_color = 0xFF000000, + outline_width = 2, + OffsetX = 239, + OffsetY = 0, + }, + + --Texture must be defined in textures table. Objects are rendered in order, prior to square elements. + FixedObjects = T{ + }, + + --Size of entire panel. Used for prescreening element clicks and automatic positioning. Not enforced for rendering. + Panel = { + Width = 485; + Height = 168, + }, + + --[[ + Table of element positions. DoubleDisplay has 16 elements. + Objects are ordered(according to default controller layout): + 1. Dpad Up(L2) + 2. Dpad Right(L2) + 3. Dpad Down(L2) + 4. Dpad Left(L2) + 5. Button Up(L2) + 6. Button Right(L2) + 7. Button Down(L2) + 8. Button Left(L2) + 9. Dpad Up(R2) + 10. Dpad Right(R2) + 11. Dpad Down(R2) + 12. Dpad Left(R2) + 13. Button Up(R2) + 14. Button Right(R2) + 15. Button Down(R2) + 16. Button Left(R2) + ]]-- + Elements = T{ + { OffsetX = 29, OffsetY = 0 }, + { OffsetX = 65, OffsetY = 55 }, + { OffsetX = 29, OffsetY = 110 }, + { OffsetX = 0, OffsetY = 55 }, + { OffsetX = 152, OffsetY = 0 }, + { OffsetX = 188, OffsetY = 55 }, + { OffsetX = 152, OffsetY = 110 }, + { OffsetX = 123, OffsetY = 55 }, + { OffsetX = 275, OffsetY = 0 }, + { OffsetX = 311, OffsetY = 55 }, + { OffsetX = 275, OffsetY = 110 }, + { OffsetX = 246, OffsetY = 55 }, + { OffsetX = 398, OffsetY = 0 }, + { OffsetX = 434, OffsetY = 55 }, + { OffsetX = 398, OffsetY = 110 }, + { OffsetX = 369, OffsetY = 55 }, + }, + } +}; \ No newline at end of file From 1d0a8f342f71b63fd8be9188a4c78d94f90489cb Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:28:08 -0500 Subject: [PATCH 20/25] fix help text tooltip error --- configgui.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configgui.lua b/configgui.lua index e64d032..77b0c4e 100644 --- a/configgui.lua +++ b/configgui.lua @@ -207,14 +207,14 @@ function exposed:Render() state.DragTarget.AllowDrag = true; end end - imgui.ShowHelp('Allows you to drag the single display.', true); + imgui.ShowHelp('Allows you to drag the double display.', true); imgui.SameLine(); if (imgui.Button('Reset##ResetDouble')) then gSettings.DoublePosition = GetDefaultPosition(gDoubleDisplay.Layout); gDoubleDisplay:UpdatePosition(); settings.save(); end - imgui.ShowHelp('Resets single display to default position.', true); + imgui.ShowHelp('Resets double display to default position.', true); imgui.SameLine(); end if (imgui.Button('Apply##ApplyDouble')) then From 21c04b9be074f6aab0997d5e5404bf514ed0d3ef Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 15:15:42 -0500 Subject: [PATCH 21/25] fix trust crash, small cleanup --- configgui.lua | 1 - state/player.lua | 6 +++--- updaters/trust.lua | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configgui.lua b/configgui.lua index 77b0c4e..4a01698 100644 --- a/configgui.lua +++ b/configgui.lua @@ -1,6 +1,5 @@ local header = { 1.0, 0.75, 0.55, 1.0 }; local imgui = require('imgui'); -local lastPositionX, lastPositionY; local scaling = require('scaling'); local state = { IsOpen = { false } diff --git a/state/player.lua b/state/player.lua index 0411a9c..6c7bbee 100644 --- a/state/player.lua +++ b/state/player.lua @@ -193,13 +193,13 @@ ashita.events.register('packet_out', 'player_tracker_handleoutgoingpacket', func if (e.id == 0x15) and (os.clock() > playerData.JobPointInit.Timer) and (AshitaCore:GetMemoryManager():GetPlayer():GetMainJobLevel() == 99) then if (playerData.JobPointInit.Totals == false) then local packet = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - AshitaCore:GetPacketManager():AddOutgoingPacket(0x61, packet); - print(chat.header(addon.name) .. chat.message('Sending main menu packet to initialize job point totals.')); + AshitaCore:GetPacketManager():AddOutgoingPacket(0x61, packet); + Message('Sending main menu packet to initialize job point totals.'); end if (playerData.JobPointInit.Categories == false) then local packet = { 0x00, 0x00, 0x00, 0x00 }; AshitaCore:GetPacketManager():AddOutgoingPacket(0xC0, packet); - print(chat.header(addon.name) .. chat.message('Sending job point menu packet to initialize job point categories.')); + Message('Sending job point menu packet to initialize job point categories.'); end playerData.JobPointInit.Timer = os.clock() + 15; end diff --git a/updaters/trust.lua b/updaters/trust.lua index 40cc639..7d3b3ab 100644 --- a/updaters/trust.lua +++ b/updaters/trust.lua @@ -1,3 +1,4 @@ +local player = require('state.player'); local Updater = {}; local function ItemCost(updater, items) @@ -91,7 +92,7 @@ end function Updater:Tick() --RecastReady will hold number of charges for charged abilities. local recastReady, recastDisplay = GetSpellRecast(self.Resource); - local spellKnown = gPlayer:HasSpell(self.Resource) + local spellKnown = player:HasSpell(self.Resource) local spellCostDisplay, costMet = self:CostFunction(); self.State.Available = spellKnown; From 6e06cd7e4475b459a3f8964db62bfc05d124d88f Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Tue, 14 Nov 2023 17:07:10 -0500 Subject: [PATCH 22/25] change version to store as number --- initializer.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/initializer.lua b/initializer.lua index acdc6cc..cca14a8 100644 --- a/initializer.lua +++ b/initializer.lua @@ -63,7 +63,7 @@ local defaultSettings = T{ }; gSettings = settings.load(defaultSettings); if (gSettings.Version ~= addon.version) then - if (gSettings.Version == nil) or (gSettings.Version < 2.0) then + if (type(gSettings.Version) ~= 'number') or (gSettings.Version < 2.0) then for key,val in pairs(gSettings) do local newVal = defaultSettings[key]; if newVal then @@ -74,7 +74,7 @@ if (gSettings.Version ~= addon.version) then end Message('Settings from a prior incompatible version detected. Updating settings.') end - gSettings.Version = addon.version; + gSettings.Version = tonumber(addon.version); settings.save(); end From 33403d073a0472e8a4c3232e9e31fd4dd2370827 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 17 Nov 2023 08:51:44 -0500 Subject: [PATCH 23/25] Rearrange layout, hide palette display when only one palette --- .gitmodules | 2 +- bindinggui.lua => addons/tCrossBar/bindinggui.lua | 0 bindings.lua => addons/tCrossBar/bindings.lua | 2 +- callbacks.lua => addons/tCrossBar/callbacks.lua | 0 commands.lua => addons/tCrossBar/commands.lua | 0 configgui.lua => addons/tCrossBar/configgui.lua | 0 controller.lua => addons/tCrossBar/controller.lua | 0 .../tCrossBar/doubledisplay.lua | 0 element.lua => addons/tCrossBar/element.lua | 0 gdifonts => addons/tCrossBar/gdifonts | 0 helpers.lua => addons/tCrossBar/helpers.lua | 0 initializer.lua => addons/tCrossBar/initializer.lua | 0 interface.lua => addons/tCrossBar/interface.lua | 0 {resources => addons/tCrossBar/resources}/135.png | Bin {resources => addons/tCrossBar/resources}/16.png | Bin {resources => addons/tCrossBar/resources}/17.png | Bin {resources => addons/tCrossBar/resources}/18.png | Bin {resources => addons/tCrossBar/resources}/181.png | Bin {resources => addons/tCrossBar/resources}/19.png | Bin {resources => addons/tCrossBar/resources}/20.png | Bin {resources => addons/tCrossBar/resources}/21.png | Bin {resources => addons/tCrossBar/resources}/22.png | Bin {resources => addons/tCrossBar/resources}/23.png | Bin {resources => addons/tCrossBar/resources}/24.png | Bin {resources => addons/tCrossBar/resources}/25.png | Bin {resources => addons/tCrossBar/resources}/26.png | Bin {resources => addons/tCrossBar/resources}/27.png | Bin {resources => addons/tCrossBar/resources}/28.png | Bin {resources => addons/tCrossBar/resources}/29.png | Bin {resources => addons/tCrossBar/resources}/30.png | Bin {resources => addons/tCrossBar/resources}/93.png | Bin {resources => addons/tCrossBar/resources}/96.png | Bin .../tCrossBar/resources}/abilities/100.png | Bin .../tCrossBar/resources}/abilities/101.png | Bin .../tCrossBar/resources}/abilities/102.png | Bin .../tCrossBar/resources}/abilities/103.png | Bin .../tCrossBar/resources}/abilities/104.png | Bin .../tCrossBar/resources}/abilities/105.png | Bin .../tCrossBar/resources}/abilities/106.png | Bin .../tCrossBar/resources}/abilities/107.png | Bin .../tCrossBar/resources}/abilities/108.png | Bin .../tCrossBar/resources}/abilities/109.png | Bin .../tCrossBar/resources}/abilities/110.png | Bin .../tCrossBar/resources}/abilities/111.png | Bin .../tCrossBar/resources}/abilities/112.png | Bin .../tCrossBar/resources}/abilities/113.png | Bin .../tCrossBar/resources}/abilities/114.png | Bin .../tCrossBar/resources}/abilities/115.png | Bin .../tCrossBar/resources}/abilities/116.png | Bin .../tCrossBar/resources}/abilities/117.png | Bin .../tCrossBar/resources}/abilities/118.png | Bin .../tCrossBar/resources}/abilities/119.png | Bin .../tCrossBar/resources}/abilities/120.png | Bin .../tCrossBar/resources}/abilities/121.png | Bin .../tCrossBar/resources}/abilities/122.png | Bin .../tCrossBar/resources}/abilities/123.png | Bin .../tCrossBar/resources}/abilities/124.png | Bin .../tCrossBar/resources}/abilities/125.png | Bin .../tCrossBar/resources}/abilities/126.png | Bin .../tCrossBar/resources}/abilities/127.png | Bin .../tCrossBar/resources}/abilities/128.png | Bin .../tCrossBar/resources}/abilities/129.png | Bin .../tCrossBar/resources}/abilities/130.png | Bin .../tCrossBar/resources}/abilities/131.png | Bin .../tCrossBar/resources}/abilities/132.png | Bin .../tCrossBar/resources}/abilities/133.png | Bin .../tCrossBar/resources}/abilities/136.png | Bin .../tCrossBar/resources}/abilities/137.png | Bin .../tCrossBar/resources}/abilities/138.png | Bin .../tCrossBar/resources}/abilities/139.png | Bin .../tCrossBar/resources}/abilities/140.png | Bin .../tCrossBar/resources}/abilities/141.png | Bin .../tCrossBar/resources}/abilities/142.png | Bin .../tCrossBar/resources}/abilities/143.png | Bin .../tCrossBar/resources}/abilities/144.png | Bin .../tCrossBar/resources}/abilities/145.png | Bin .../tCrossBar/resources}/abilities/146.png | Bin .../tCrossBar/resources}/abilities/147.png | Bin .../tCrossBar/resources}/abilities/148.png | Bin .../tCrossBar/resources}/abilities/149.png | Bin .../tCrossBar/resources}/abilities/150.png | Bin .../tCrossBar/resources}/abilities/151.png | Bin .../tCrossBar/resources}/abilities/152.png | Bin .../tCrossBar/resources}/abilities/153.png | Bin .../tCrossBar/resources}/abilities/154.png | Bin .../tCrossBar/resources}/abilities/155.png | Bin .../tCrossBar/resources}/abilities/156.png | Bin .../tCrossBar/resources}/abilities/157.png | Bin .../tCrossBar/resources}/abilities/158.png | Bin .../tCrossBar/resources}/abilities/159.png | Bin .../tCrossBar/resources}/abilities/160.png | Bin .../tCrossBar/resources}/abilities/161.png | Bin .../tCrossBar/resources}/abilities/162.png | Bin .../tCrossBar/resources}/abilities/163.png | Bin .../tCrossBar/resources}/abilities/164.png | Bin .../tCrossBar/resources}/abilities/165.png | Bin .../tCrossBar/resources}/abilities/166.png | Bin .../tCrossBar/resources}/abilities/167.png | Bin .../tCrossBar/resources}/abilities/168.png | Bin .../tCrossBar/resources}/abilities/169.png | Bin .../tCrossBar/resources}/abilities/170.png | Bin .../tCrossBar/resources}/abilities/171.png | Bin .../tCrossBar/resources}/abilities/172.png | Bin .../tCrossBar/resources}/abilities/173.png | Bin .../tCrossBar/resources}/abilities/174.png | Bin .../tCrossBar/resources}/abilities/175.png | Bin .../tCrossBar/resources}/abilities/176.png | Bin .../tCrossBar/resources}/abilities/177.png | Bin .../tCrossBar/resources}/abilities/178.png | Bin .../tCrossBar/resources}/abilities/179.png | Bin .../tCrossBar/resources}/abilities/180.png | Bin .../tCrossBar/resources}/abilities/182.png | Bin .../tCrossBar/resources}/abilities/184.png | Bin .../tCrossBar/resources}/abilities/185.png | Bin .../tCrossBar/resources}/abilities/186.png | Bin .../tCrossBar/resources}/abilities/187.png | Bin .../tCrossBar/resources}/abilities/188.png | Bin .../tCrossBar/resources}/abilities/189.png | Bin .../tCrossBar/resources}/abilities/190.png | Bin .../tCrossBar/resources}/abilities/194.png | Bin .../tCrossBar/resources}/abilities/195.png | Bin .../tCrossBar/resources}/abilities/196.png | Bin .../tCrossBar/resources}/abilities/197.png | Bin .../tCrossBar/resources}/abilities/198.png | Bin .../tCrossBar/resources}/abilities/199.png | Bin .../tCrossBar/resources}/abilities/1hr.png | Bin .../tCrossBar/resources}/abilities/200.png | Bin .../tCrossBar/resources}/abilities/201.png | Bin .../tCrossBar/resources}/abilities/202.png | Bin .../tCrossBar/resources}/abilities/203.png | Bin .../tCrossBar/resources}/abilities/204.png | Bin .../tCrossBar/resources}/abilities/205.png | Bin .../tCrossBar/resources}/abilities/206.png | Bin .../tCrossBar/resources}/abilities/207.png | Bin .../tCrossBar/resources}/abilities/208.png | Bin .../tCrossBar/resources}/abilities/209.png | Bin .../tCrossBar/resources}/abilities/211.png | Bin .../tCrossBar/resources}/abilities/212.png | Bin .../tCrossBar/resources}/abilities/213.png | Bin .../tCrossBar/resources}/abilities/214.png | Bin .../tCrossBar/resources}/abilities/215.png | Bin .../tCrossBar/resources}/abilities/216.png | Bin .../tCrossBar/resources}/abilities/217.png | Bin .../tCrossBar/resources}/abilities/218.png | Bin .../tCrossBar/resources}/abilities/219.png | Bin .../tCrossBar/resources}/abilities/220.png | Bin .../tCrossBar/resources}/abilities/221.png | Bin .../tCrossBar/resources}/abilities/222.png | Bin .../tCrossBar/resources}/abilities/223.png | Bin .../tCrossBar/resources}/abilities/224.png | Bin .../tCrossBar/resources}/abilities/225.png | Bin .../tCrossBar/resources}/abilities/226.png | Bin .../tCrossBar/resources}/abilities/227.png | Bin .../tCrossBar/resources}/abilities/228.png | Bin .../tCrossBar/resources}/abilities/229.png | Bin .../tCrossBar/resources}/abilities/230.png | Bin .../tCrossBar/resources}/abilities/232.png | Bin .../tCrossBar/resources}/abilities/233.png | Bin .../tCrossBar/resources}/abilities/234.png | Bin .../tCrossBar/resources}/abilities/235.png | Bin .../tCrossBar/resources}/abilities/236.png | Bin .../tCrossBar/resources}/abilities/237.png | Bin .../tCrossBar/resources}/abilities/238.png | Bin .../tCrossBar/resources}/abilities/239.png | Bin .../tCrossBar/resources}/abilities/240.png | Bin .../tCrossBar/resources}/abilities/241.png | Bin .../tCrossBar/resources}/abilities/242.png | Bin .../tCrossBar/resources}/abilities/243.png | Bin .../tCrossBar/resources}/abilities/244.png | Bin .../tCrossBar/resources}/abilities/245.png | Bin .../tCrossBar/resources}/abilities/246.png | Bin .../tCrossBar/resources}/abilities/247.png | Bin .../tCrossBar/resources}/abilities/248.png | Bin .../tCrossBar/resources}/abilities/249.png | Bin .../tCrossBar/resources}/abilities/250.png | Bin .../tCrossBar/resources}/abilities/251.png | Bin .../tCrossBar/resources}/abilities/252.png | Bin .../tCrossBar/resources}/abilities/253.png | Bin .../tCrossBar/resources}/abilities/254.png | Bin .../tCrossBar/resources}/abilities/255.png | Bin .../tCrossBar/resources}/abilities/256.png | Bin .../tCrossBar/resources}/abilities/257.png | Bin .../tCrossBar/resources}/abilities/258.png | Bin .../tCrossBar/resources}/abilities/259.png | Bin .../tCrossBar/resources}/abilities/260.png | Bin .../tCrossBar/resources}/abilities/261.png | Bin .../tCrossBar/resources}/abilities/263.png | Bin .../tCrossBar/resources}/abilities/264.png | Bin .../tCrossBar/resources}/abilities/265.png | Bin .../tCrossBar/resources}/abilities/266.png | Bin .../tCrossBar/resources}/abilities/267.png | Bin .../tCrossBar/resources}/abilities/269.png | Bin .../tCrossBar/resources}/abilities/270.png | Bin .../tCrossBar/resources}/abilities/271.png | Bin .../tCrossBar/resources}/abilities/272.png | Bin .../tCrossBar/resources}/abilities/273.png | Bin .../tCrossBar/resources}/abilities/274.png | Bin .../tCrossBar/resources}/abilities/275.png | Bin .../tCrossBar/resources}/abilities/276.png | Bin .../tCrossBar/resources}/abilities/277.png | Bin .../tCrossBar/resources}/abilities/278.png | Bin .../tCrossBar/resources}/abilities/279.png | Bin .../tCrossBar/resources}/abilities/280.png | Bin .../tCrossBar/resources}/abilities/281.png | Bin .../tCrossBar/resources}/abilities/282.png | Bin .../tCrossBar/resources}/abilities/283.png | Bin .../tCrossBar/resources}/abilities/284.png | Bin .../tCrossBar/resources}/abilities/285.png | Bin .../tCrossBar/resources}/abilities/286.png | Bin .../tCrossBar/resources}/abilities/287.png | Bin .../tCrossBar/resources}/abilities/288.png | Bin .../tCrossBar/resources}/abilities/291.png | Bin .../tCrossBar/resources}/abilities/292.png | Bin .../tCrossBar/resources}/abilities/293.png | Bin .../tCrossBar/resources}/abilities/295.png | Bin .../tCrossBar/resources}/abilities/296.png | Bin .../tCrossBar/resources}/abilities/297.png | Bin .../tCrossBar/resources}/abilities/298.png | Bin .../tCrossBar/resources}/abilities/301.png | Bin .../tCrossBar/resources}/abilities/302.png | Bin .../tCrossBar/resources}/abilities/303.png | Bin .../tCrossBar/resources}/abilities/304.png | Bin .../tCrossBar/resources}/abilities/305.png | Bin .../tCrossBar/resources}/abilities/309.png | Bin .../tCrossBar/resources}/abilities/31.png | Bin .../tCrossBar/resources}/abilities/310.png | Bin .../tCrossBar/resources}/abilities/312.png | Bin .../tCrossBar/resources}/abilities/313.png | Bin .../tCrossBar/resources}/abilities/314.png | Bin .../tCrossBar/resources}/abilities/316.png | Bin .../tCrossBar/resources}/abilities/317.png | Bin .../tCrossBar/resources}/abilities/318.png | Bin .../tCrossBar/resources}/abilities/319.png | Bin .../tCrossBar/resources}/abilities/32.png | Bin .../tCrossBar/resources}/abilities/320.png | Bin .../tCrossBar/resources}/abilities/321.png | Bin .../tCrossBar/resources}/abilities/322.png | Bin .../tCrossBar/resources}/abilities/33.png | Bin .../tCrossBar/resources}/abilities/34.png | Bin .../tCrossBar/resources}/abilities/35.png | Bin .../tCrossBar/resources}/abilities/358.png | Bin .../tCrossBar/resources}/abilities/359.png | Bin .../tCrossBar/resources}/abilities/36.png | Bin .../tCrossBar/resources}/abilities/360.png | Bin .../tCrossBar/resources}/abilities/361.png | Bin .../tCrossBar/resources}/abilities/362.png | Bin .../tCrossBar/resources}/abilities/363.png | Bin .../tCrossBar/resources}/abilities/364.png | Bin .../tCrossBar/resources}/abilities/365.png | Bin .../tCrossBar/resources}/abilities/37.png | Bin .../tCrossBar/resources}/abilities/38.png | Bin .../tCrossBar/resources}/abilities/381.png | Bin .../tCrossBar/resources}/abilities/388.png | Bin .../tCrossBar/resources}/abilities/389.png | Bin .../tCrossBar/resources}/abilities/39.png | Bin .../tCrossBar/resources}/abilities/390.png | Bin .../tCrossBar/resources}/abilities/391.png | Bin .../tCrossBar/resources}/abilities/392.png | Bin .../tCrossBar/resources}/abilities/40.png | Bin .../tCrossBar/resources}/abilities/42.png | Bin .../tCrossBar/resources}/abilities/43.png | Bin .../tCrossBar/resources}/abilities/44.png | Bin .../tCrossBar/resources}/abilities/45.png | Bin .../tCrossBar/resources}/abilities/46.png | Bin .../tCrossBar/resources}/abilities/47.png | Bin .../tCrossBar/resources}/abilities/48.png | Bin .../tCrossBar/resources}/abilities/49.png | Bin .../tCrossBar/resources}/abilities/50.png | Bin .../tCrossBar/resources}/abilities/51.png | Bin .../tCrossBar/resources}/abilities/512.png | Bin .../tCrossBar/resources}/abilities/513.png | Bin .../tCrossBar/resources}/abilities/514.png | Bin .../tCrossBar/resources}/abilities/515.png | Bin .../tCrossBar/resources}/abilities/516.png | Bin .../tCrossBar/resources}/abilities/517.png | Bin .../tCrossBar/resources}/abilities/518.png | Bin .../tCrossBar/resources}/abilities/519.png | Bin .../tCrossBar/resources}/abilities/52.png | Bin .../tCrossBar/resources}/abilities/520.png | Bin .../tCrossBar/resources}/abilities/521.png | Bin .../tCrossBar/resources}/abilities/522.png | Bin .../tCrossBar/resources}/abilities/523.png | Bin .../tCrossBar/resources}/abilities/524.png | Bin .../tCrossBar/resources}/abilities/525.png | Bin .../tCrossBar/resources}/abilities/526.png | Bin .../tCrossBar/resources}/abilities/527.png | Bin .../tCrossBar/resources}/abilities/528.png | Bin .../tCrossBar/resources}/abilities/529.png | Bin .../tCrossBar/resources}/abilities/53.png | Bin .../tCrossBar/resources}/abilities/530.png | Bin .../tCrossBar/resources}/abilities/531.png | Bin .../tCrossBar/resources}/abilities/532.png | Bin .../tCrossBar/resources}/abilities/533.png | Bin .../tCrossBar/resources}/abilities/534.png | Bin .../tCrossBar/resources}/abilities/536.png | Bin .../tCrossBar/resources}/abilities/537.png | Bin .../tCrossBar/resources}/abilities/538.png | Bin .../tCrossBar/resources}/abilities/539.png | Bin .../tCrossBar/resources}/abilities/54.png | Bin .../tCrossBar/resources}/abilities/544.png | Bin .../tCrossBar/resources}/abilities/545.png | Bin .../tCrossBar/resources}/abilities/546.png | Bin .../tCrossBar/resources}/abilities/547.png | Bin .../tCrossBar/resources}/abilities/548.png | Bin .../tCrossBar/resources}/abilities/549.png | Bin .../tCrossBar/resources}/abilities/55.png | Bin .../tCrossBar/resources}/abilities/550.png | Bin .../tCrossBar/resources}/abilities/551.png | Bin .../tCrossBar/resources}/abilities/552.png | Bin .../tCrossBar/resources}/abilities/553.png | Bin .../tCrossBar/resources}/abilities/554.png | Bin .../tCrossBar/resources}/abilities/56.png | Bin .../tCrossBar/resources}/abilities/560.png | Bin .../tCrossBar/resources}/abilities/561.png | Bin .../tCrossBar/resources}/abilities/562.png | Bin .../tCrossBar/resources}/abilities/563.png | Bin .../tCrossBar/resources}/abilities/564.png | Bin .../tCrossBar/resources}/abilities/565.png | Bin .../tCrossBar/resources}/abilities/566.png | Bin .../tCrossBar/resources}/abilities/567.png | Bin .../tCrossBar/resources}/abilities/568.png | Bin .../tCrossBar/resources}/abilities/569.png | Bin .../tCrossBar/resources}/abilities/57.png | Bin .../tCrossBar/resources}/abilities/570.png | Bin .../tCrossBar/resources}/abilities/576.png | Bin .../tCrossBar/resources}/abilities/577.png | Bin .../tCrossBar/resources}/abilities/578.png | Bin .../tCrossBar/resources}/abilities/579.png | Bin .../tCrossBar/resources}/abilities/58.png | Bin .../tCrossBar/resources}/abilities/580.png | Bin .../tCrossBar/resources}/abilities/581.png | Bin .../tCrossBar/resources}/abilities/582.png | Bin .../tCrossBar/resources}/abilities/583.png | Bin .../tCrossBar/resources}/abilities/584.png | Bin .../tCrossBar/resources}/abilities/585.png | Bin .../tCrossBar/resources}/abilities/586.png | Bin .../tCrossBar/resources}/abilities/59.png | Bin .../tCrossBar/resources}/abilities/592.png | Bin .../tCrossBar/resources}/abilities/593.png | Bin .../tCrossBar/resources}/abilities/594.png | Bin .../tCrossBar/resources}/abilities/595.png | Bin .../tCrossBar/resources}/abilities/596.png | Bin .../tCrossBar/resources}/abilities/597.png | Bin .../tCrossBar/resources}/abilities/598.png | Bin .../tCrossBar/resources}/abilities/599.png | Bin .../tCrossBar/resources}/abilities/60.png | Bin .../tCrossBar/resources}/abilities/600.png | Bin .../tCrossBar/resources}/abilities/601.png | Bin .../tCrossBar/resources}/abilities/602.png | Bin .../tCrossBar/resources}/abilities/608.png | Bin .../tCrossBar/resources}/abilities/609.png | Bin .../tCrossBar/resources}/abilities/61.png | Bin .../tCrossBar/resources}/abilities/610.png | Bin .../tCrossBar/resources}/abilities/611.png | Bin .../tCrossBar/resources}/abilities/612.png | Bin .../tCrossBar/resources}/abilities/613.png | Bin .../tCrossBar/resources}/abilities/614.png | Bin .../tCrossBar/resources}/abilities/615.png | Bin .../tCrossBar/resources}/abilities/616.png | Bin .../tCrossBar/resources}/abilities/617.png | Bin .../tCrossBar/resources}/abilities/618.png | Bin .../tCrossBar/resources}/abilities/62.png | Bin .../tCrossBar/resources}/abilities/624.png | Bin .../tCrossBar/resources}/abilities/625.png | Bin .../tCrossBar/resources}/abilities/626.png | Bin .../tCrossBar/resources}/abilities/627.png | Bin .../tCrossBar/resources}/abilities/628.png | Bin .../tCrossBar/resources}/abilities/629.png | Bin .../tCrossBar/resources}/abilities/63.png | Bin .../tCrossBar/resources}/abilities/630.png | Bin .../tCrossBar/resources}/abilities/631.png | Bin .../tCrossBar/resources}/abilities/632.png | Bin .../tCrossBar/resources}/abilities/633.png | Bin .../tCrossBar/resources}/abilities/634.png | Bin .../tCrossBar/resources}/abilities/64.png | Bin .../tCrossBar/resources}/abilities/65.png | Bin .../tCrossBar/resources}/abilities/656.png | Bin .../tCrossBar/resources}/abilities/657.png | Bin .../tCrossBar/resources}/abilities/658.png | Bin .../tCrossBar/resources}/abilities/659.png | Bin .../tCrossBar/resources}/abilities/66.png | Bin .../tCrossBar/resources}/abilities/660.png | Bin .../tCrossBar/resources}/abilities/661.png | Bin .../tCrossBar/resources}/abilities/662.png | Bin .../tCrossBar/resources}/abilities/663.png | Bin .../tCrossBar/resources}/abilities/664.png | Bin .../tCrossBar/resources}/abilities/665.png | Bin .../tCrossBar/resources}/abilities/666.png | Bin .../tCrossBar/resources}/abilities/667.png | Bin .../tCrossBar/resources}/abilities/67.png | Bin .../tCrossBar/resources}/abilities/672.png | Bin .../tCrossBar/resources}/abilities/673.png | Bin .../tCrossBar/resources}/abilities/674.png | Bin .../tCrossBar/resources}/abilities/675.png | Bin .../tCrossBar/resources}/abilities/676.png | Bin .../tCrossBar/resources}/abilities/677.png | Bin .../tCrossBar/resources}/abilities/678.png | Bin .../tCrossBar/resources}/abilities/679.png | Bin .../tCrossBar/resources}/abilities/68.png | Bin .../tCrossBar/resources}/abilities/680.png | Bin .../tCrossBar/resources}/abilities/681.png | Bin .../tCrossBar/resources}/abilities/682.png | Bin .../tCrossBar/resources}/abilities/683.png | Bin .../tCrossBar/resources}/abilities/684.png | Bin .../tCrossBar/resources}/abilities/685.png | Bin .../tCrossBar/resources}/abilities/686.png | Bin .../tCrossBar/resources}/abilities/687.png | Bin .../tCrossBar/resources}/abilities/688.png | Bin .../tCrossBar/resources}/abilities/689.png | Bin .../tCrossBar/resources}/abilities/69.png | Bin .../tCrossBar/resources}/abilities/690.png | Bin .../tCrossBar/resources}/abilities/691.png | Bin .../tCrossBar/resources}/abilities/692.png | Bin .../tCrossBar/resources}/abilities/693.png | Bin .../tCrossBar/resources}/abilities/694.png | Bin .../tCrossBar/resources}/abilities/695.png | Bin .../tCrossBar/resources}/abilities/696.png | Bin .../tCrossBar/resources}/abilities/697.png | Bin .../tCrossBar/resources}/abilities/698.png | Bin .../tCrossBar/resources}/abilities/699.png | Bin .../tCrossBar/resources}/abilities/70.png | Bin .../tCrossBar/resources}/abilities/700.png | Bin .../tCrossBar/resources}/abilities/701.png | Bin .../tCrossBar/resources}/abilities/702.png | Bin .../tCrossBar/resources}/abilities/703.png | Bin .../tCrossBar/resources}/abilities/704.png | Bin .../tCrossBar/resources}/abilities/705.png | Bin .../tCrossBar/resources}/abilities/706.png | Bin .../tCrossBar/resources}/abilities/707.png | Bin .../tCrossBar/resources}/abilities/708.png | Bin .../tCrossBar/resources}/abilities/709.png | Bin .../tCrossBar/resources}/abilities/71.png | Bin .../tCrossBar/resources}/abilities/710.png | Bin .../tCrossBar/resources}/abilities/711.png | Bin .../tCrossBar/resources}/abilities/712.png | Bin .../tCrossBar/resources}/abilities/713.png | Bin .../tCrossBar/resources}/abilities/714.png | Bin .../tCrossBar/resources}/abilities/715.png | Bin .../tCrossBar/resources}/abilities/716.png | Bin .../tCrossBar/resources}/abilities/717.png | Bin .../tCrossBar/resources}/abilities/718.png | Bin .../tCrossBar/resources}/abilities/719.png | Bin .../tCrossBar/resources}/abilities/72.png | Bin .../tCrossBar/resources}/abilities/720.png | Bin .../tCrossBar/resources}/abilities/721.png | Bin .../tCrossBar/resources}/abilities/722.png | Bin .../tCrossBar/resources}/abilities/723.png | Bin .../tCrossBar/resources}/abilities/724.png | Bin .../tCrossBar/resources}/abilities/725.png | Bin .../tCrossBar/resources}/abilities/726.png | Bin .../tCrossBar/resources}/abilities/727.png | Bin .../tCrossBar/resources}/abilities/728.png | Bin .../tCrossBar/resources}/abilities/729.png | Bin .../tCrossBar/resources}/abilities/73.png | Bin .../tCrossBar/resources}/abilities/730.png | Bin .../tCrossBar/resources}/abilities/731.png | Bin .../tCrossBar/resources}/abilities/732.png | Bin .../tCrossBar/resources}/abilities/733.png | Bin .../tCrossBar/resources}/abilities/734.png | Bin .../tCrossBar/resources}/abilities/735.png | Bin .../tCrossBar/resources}/abilities/736.png | Bin .../tCrossBar/resources}/abilities/737.png | Bin .../tCrossBar/resources}/abilities/738.png | Bin .../tCrossBar/resources}/abilities/74.png | Bin .../tCrossBar/resources}/abilities/740.png | Bin .../tCrossBar/resources}/abilities/741.png | Bin .../tCrossBar/resources}/abilities/743.png | Bin .../tCrossBar/resources}/abilities/744.png | Bin .../tCrossBar/resources}/abilities/745.png | Bin .../tCrossBar/resources}/abilities/746.png | Bin .../tCrossBar/resources}/abilities/747.png | Bin .../tCrossBar/resources}/abilities/748.png | Bin .../tCrossBar/resources}/abilities/749.png | Bin .../tCrossBar/resources}/abilities/75.png | Bin .../tCrossBar/resources}/abilities/750.png | Bin .../tCrossBar/resources}/abilities/751.png | Bin .../tCrossBar/resources}/abilities/752.png | Bin .../tCrossBar/resources}/abilities/753.png | Bin .../tCrossBar/resources}/abilities/754.png | Bin .../tCrossBar/resources}/abilities/755.png | Bin .../tCrossBar/resources}/abilities/756.png | Bin .../tCrossBar/resources}/abilities/757.png | Bin .../tCrossBar/resources}/abilities/758.png | Bin .../tCrossBar/resources}/abilities/759.png | Bin .../tCrossBar/resources}/abilities/76.png | Bin .../tCrossBar/resources}/abilities/760.png | Bin .../tCrossBar/resources}/abilities/761.png | Bin .../tCrossBar/resources}/abilities/762.png | Bin .../tCrossBar/resources}/abilities/763.png | Bin .../tCrossBar/resources}/abilities/764.png | Bin .../tCrossBar/resources}/abilities/765.png | Bin .../tCrossBar/resources}/abilities/766.png | Bin .../tCrossBar/resources}/abilities/767.png | Bin .../tCrossBar/resources}/abilities/768.png | Bin .../tCrossBar/resources}/abilities/769.png | Bin .../tCrossBar/resources}/abilities/77.png | Bin .../tCrossBar/resources}/abilities/770.png | Bin .../tCrossBar/resources}/abilities/771.png | Bin .../tCrossBar/resources}/abilities/772.png | Bin .../tCrossBar/resources}/abilities/773.png | Bin .../tCrossBar/resources}/abilities/774.png | Bin .../tCrossBar/resources}/abilities/775.png | Bin .../tCrossBar/resources}/abilities/776.png | Bin .../tCrossBar/resources}/abilities/777.png | Bin .../tCrossBar/resources}/abilities/778.png | Bin .../tCrossBar/resources}/abilities/779.png | Bin .../tCrossBar/resources}/abilities/78.png | Bin .../tCrossBar/resources}/abilities/780.png | Bin .../tCrossBar/resources}/abilities/781.png | Bin .../tCrossBar/resources}/abilities/782.png | Bin .../tCrossBar/resources}/abilities/786.png | Bin .../tCrossBar/resources}/abilities/787.png | Bin .../tCrossBar/resources}/abilities/788.png | Bin .../tCrossBar/resources}/abilities/789.png | Bin .../tCrossBar/resources}/abilities/79.png | Bin .../tCrossBar/resources}/abilities/790.png | Bin .../tCrossBar/resources}/abilities/791.png | Bin .../tCrossBar/resources}/abilities/792.png | Bin .../tCrossBar/resources}/abilities/793.png | Bin .../tCrossBar/resources}/abilities/794.png | Bin .../tCrossBar/resources}/abilities/795.png | Bin .../tCrossBar/resources}/abilities/796.png | Bin .../tCrossBar/resources}/abilities/797.png | Bin .../tCrossBar/resources}/abilities/798.png | Bin .../tCrossBar/resources}/abilities/80.png | Bin .../tCrossBar/resources}/abilities/81.png | Bin .../tCrossBar/resources}/abilities/82.png | Bin .../tCrossBar/resources}/abilities/83.png | Bin .../tCrossBar/resources}/abilities/84.png | Bin .../tCrossBar/resources}/abilities/85.png | Bin .../tCrossBar/resources}/abilities/86.png | Bin .../tCrossBar/resources}/abilities/87.png | Bin .../tCrossBar/resources}/abilities/88.png | Bin .../tCrossBar/resources}/abilities/89.png | Bin .../tCrossBar/resources}/abilities/90.png | Bin .../tCrossBar/resources}/abilities/91.png | Bin .../tCrossBar/resources}/abilities/92.png | Bin .../tCrossBar/resources}/abilities/94.png | Bin .../tCrossBar/resources}/abilities/95.png | Bin .../tCrossBar/resources}/abilities/960.png | Bin .../tCrossBar/resources}/abilities/961.png | Bin .../tCrossBar/resources}/abilities/962.png | Bin .../tCrossBar/resources}/abilities/963.png | Bin .../tCrossBar/resources}/abilities/964.png | Bin .../tCrossBar/resources}/abilities/965.png | Bin .../tCrossBar/resources}/abilities/966.png | Bin .../tCrossBar/resources}/abilities/967.png | Bin .../tCrossBar/resources}/abilities/968.png | Bin .../tCrossBar/resources}/abilities/969.png | Bin .../tCrossBar/resources}/abilities/97.png | Bin .../tCrossBar/resources}/abilities/970.png | Bin .../tCrossBar/resources}/abilities/98.png | Bin .../tCrossBar/resources}/abilities/99.png | Bin .../tCrossBar/resources}/abilities/default.png | Bin .../tCrossBar/resources}/controllers/dualsense.lua | 0 .../tCrossBar/resources}/controllers/switchpro.lua | 0 .../tCrossBar/resources}/controllers/xbox.lua | 0 .../tCrossBar/resources}/layouts/classic.lua | 0 .../tCrossBar/resources}/layouts/compact.lua | 0 .../tCrossBar/resources}/misc/buttons.png | Bin .../tCrossBar/resources}/misc/command.png | Bin .../tCrossBar/resources}/misc/crawl1.png | Bin .../tCrossBar/resources}/misc/crawl2.png | Bin .../tCrossBar/resources}/misc/crawl3.png | Bin .../tCrossBar/resources}/misc/crawl4.png | Bin .../tCrossBar/resources}/misc/crawl5.png | Bin .../tCrossBar/resources}/misc/crawl6.png | Bin .../tCrossBar/resources}/misc/crawl7.png | Bin .../tCrossBar/resources}/misc/cross.png | Bin .../tCrossBar/resources}/misc/dpad.png | Bin .../tCrossBar/resources}/misc/drag.png | Bin .../tCrossBar/resources}/misc/frame.png | Bin .../tCrossBar/resources}/misc/trigger.png | Bin .../tCrossBar/resources}/misc/unknown.png | Bin .../resources}/skillchains/Compression.png | Bin .../tCrossBar/resources}/skillchains/Darkness.png | Bin .../tCrossBar/resources}/skillchains/Detonation.png | Bin .../tCrossBar/resources}/skillchains/Distortion.png | Bin .../resources}/skillchains/Fragmentation.png | Bin .../tCrossBar/resources}/skillchains/Fusion.png | Bin .../resources}/skillchains/Gravitation.png | Bin .../tCrossBar/resources}/skillchains/Impaction.png | Bin .../tCrossBar/resources}/skillchains/Induration.png | Bin .../tCrossBar/resources}/skillchains/Light.png | Bin .../resources}/skillchains/Liquefaction.png | Bin .../resources}/skillchains/Reverberation.png | Bin .../tCrossBar/resources}/skillchains/Scission.png | Bin .../resources}/skillchains/Transfixion.png | Bin .../tCrossBar/resources}/spells/1.png | Bin .../tCrossBar/resources}/spells/10.png | Bin .../tCrossBar/resources}/spells/100.png | Bin .../tCrossBar/resources}/spells/1004.png | Bin .../tCrossBar/resources}/spells/1005.png | Bin .../tCrossBar/resources}/spells/1006.png | Bin .../tCrossBar/resources}/spells/1007.png | Bin .../tCrossBar/resources}/spells/1008.png | Bin .../tCrossBar/resources}/spells/1009.png | Bin .../tCrossBar/resources}/spells/101.png | Bin .../tCrossBar/resources}/spells/1010.png | Bin .../tCrossBar/resources}/spells/1011.png | Bin .../tCrossBar/resources}/spells/1012.png | Bin .../tCrossBar/resources}/spells/1013.png | Bin .../tCrossBar/resources}/spells/1014.png | Bin .../tCrossBar/resources}/spells/1015.png | Bin .../tCrossBar/resources}/spells/1016.png | Bin .../tCrossBar/resources}/spells/102.png | Bin .../tCrossBar/resources}/spells/103.png | Bin .../tCrossBar/resources}/spells/104.png | Bin .../tCrossBar/resources}/spells/105.png | Bin .../tCrossBar/resources}/spells/106.png | Bin .../tCrossBar/resources}/spells/107.png | Bin .../tCrossBar/resources}/spells/108.png | Bin .../tCrossBar/resources}/spells/109.png | Bin .../tCrossBar/resources}/spells/11.png | Bin .../tCrossBar/resources}/spells/110.png | Bin .../tCrossBar/resources}/spells/111.png | Bin .../tCrossBar/resources}/spells/112.png | Bin .../tCrossBar/resources}/spells/113.png | Bin .../tCrossBar/resources}/spells/114.png | Bin .../tCrossBar/resources}/spells/115.png | Bin .../tCrossBar/resources}/spells/116.png | Bin .../tCrossBar/resources}/spells/117.png | Bin .../tCrossBar/resources}/spells/118.png | Bin .../tCrossBar/resources}/spells/119.png | Bin .../tCrossBar/resources}/spells/12.png | Bin .../tCrossBar/resources}/spells/120.png | Bin .../tCrossBar/resources}/spells/121.png | Bin .../tCrossBar/resources}/spells/122.png | Bin .../tCrossBar/resources}/spells/123.png | Bin .../tCrossBar/resources}/spells/124.png | Bin .../tCrossBar/resources}/spells/125.png | Bin .../tCrossBar/resources}/spells/126.png | Bin .../tCrossBar/resources}/spells/127.png | Bin .../tCrossBar/resources}/spells/128.png | Bin .../tCrossBar/resources}/spells/129.png | Bin .../tCrossBar/resources}/spells/13.png | Bin .../tCrossBar/resources}/spells/130.png | Bin .../tCrossBar/resources}/spells/131.png | Bin .../tCrossBar/resources}/spells/132.png | Bin .../tCrossBar/resources}/spells/133.png | Bin .../tCrossBar/resources}/spells/134.png | Bin .../tCrossBar/resources}/spells/135.png | Bin .../tCrossBar/resources}/spells/136.png | Bin .../tCrossBar/resources}/spells/137.png | Bin .../tCrossBar/resources}/spells/138.png | Bin .../tCrossBar/resources}/spells/139.png | Bin .../tCrossBar/resources}/spells/14.png | Bin .../tCrossBar/resources}/spells/140.png | Bin .../tCrossBar/resources}/spells/141.png | Bin .../tCrossBar/resources}/spells/142.png | Bin .../tCrossBar/resources}/spells/143.png | Bin .../tCrossBar/resources}/spells/144.png | Bin .../tCrossBar/resources}/spells/145.png | Bin .../tCrossBar/resources}/spells/146.png | Bin .../tCrossBar/resources}/spells/147.png | Bin .../tCrossBar/resources}/spells/148.png | Bin .../tCrossBar/resources}/spells/149.png | Bin .../tCrossBar/resources}/spells/15.png | Bin .../tCrossBar/resources}/spells/150.png | Bin .../tCrossBar/resources}/spells/151.png | Bin .../tCrossBar/resources}/spells/152.png | Bin .../tCrossBar/resources}/spells/153.png | Bin .../tCrossBar/resources}/spells/154.png | Bin .../tCrossBar/resources}/spells/155.png | Bin .../tCrossBar/resources}/spells/156.png | Bin .../tCrossBar/resources}/spells/157.png | Bin .../tCrossBar/resources}/spells/158.png | Bin .../tCrossBar/resources}/spells/159.png | Bin .../tCrossBar/resources}/spells/16.png | Bin .../tCrossBar/resources}/spells/160.png | Bin .../tCrossBar/resources}/spells/161.png | Bin .../tCrossBar/resources}/spells/162.png | Bin .../tCrossBar/resources}/spells/163.png | Bin .../tCrossBar/resources}/spells/164.png | Bin .../tCrossBar/resources}/spells/165.png | Bin .../tCrossBar/resources}/spells/166.png | Bin .../tCrossBar/resources}/spells/167.png | Bin .../tCrossBar/resources}/spells/168.png | Bin .../tCrossBar/resources}/spells/169.png | Bin .../tCrossBar/resources}/spells/17.png | Bin .../tCrossBar/resources}/spells/170.png | Bin .../tCrossBar/resources}/spells/171.png | Bin .../tCrossBar/resources}/spells/172.png | Bin .../tCrossBar/resources}/spells/173.png | Bin .../tCrossBar/resources}/spells/174.png | Bin .../tCrossBar/resources}/spells/175.png | Bin .../tCrossBar/resources}/spells/176.png | Bin .../tCrossBar/resources}/spells/177.png | Bin .../tCrossBar/resources}/spells/178.png | Bin .../tCrossBar/resources}/spells/179.png | Bin .../tCrossBar/resources}/spells/18.png | Bin .../tCrossBar/resources}/spells/180.png | Bin .../tCrossBar/resources}/spells/181.png | Bin .../tCrossBar/resources}/spells/182.png | Bin .../tCrossBar/resources}/spells/183.png | Bin .../tCrossBar/resources}/spells/184.png | Bin .../tCrossBar/resources}/spells/185.png | Bin .../tCrossBar/resources}/spells/186.png | Bin .../tCrossBar/resources}/spells/187.png | Bin .../tCrossBar/resources}/spells/188.png | Bin .../tCrossBar/resources}/spells/189.png | Bin .../tCrossBar/resources}/spells/19.png | Bin .../tCrossBar/resources}/spells/190.png | Bin .../tCrossBar/resources}/spells/191.png | Bin .../tCrossBar/resources}/spells/192.png | Bin .../tCrossBar/resources}/spells/193.png | Bin .../tCrossBar/resources}/spells/194.png | Bin .../tCrossBar/resources}/spells/195.png | Bin .../tCrossBar/resources}/spells/196.png | Bin .../tCrossBar/resources}/spells/197.png | Bin .../tCrossBar/resources}/spells/198.png | Bin .../tCrossBar/resources}/spells/199.png | Bin .../tCrossBar/resources}/spells/2.png | Bin .../tCrossBar/resources}/spells/20.png | Bin .../tCrossBar/resources}/spells/200.png | Bin .../tCrossBar/resources}/spells/201.png | Bin .../tCrossBar/resources}/spells/202.png | Bin .../tCrossBar/resources}/spells/203.png | Bin .../tCrossBar/resources}/spells/204.png | Bin .../tCrossBar/resources}/spells/205.png | Bin .../tCrossBar/resources}/spells/206.png | Bin .../tCrossBar/resources}/spells/207.png | Bin .../tCrossBar/resources}/spells/208.png | Bin .../tCrossBar/resources}/spells/209.png | Bin .../tCrossBar/resources}/spells/21.png | Bin .../tCrossBar/resources}/spells/210.png | Bin .../tCrossBar/resources}/spells/211.png | Bin .../tCrossBar/resources}/spells/212.png | Bin .../tCrossBar/resources}/spells/213.png | Bin .../tCrossBar/resources}/spells/214.png | Bin .../tCrossBar/resources}/spells/215.png | Bin .../tCrossBar/resources}/spells/216.png | Bin .../tCrossBar/resources}/spells/217.png | Bin .../tCrossBar/resources}/spells/218.png | Bin .../tCrossBar/resources}/spells/219.png | Bin .../tCrossBar/resources}/spells/22.png | Bin .../tCrossBar/resources}/spells/220.png | Bin .../tCrossBar/resources}/spells/221.png | Bin .../tCrossBar/resources}/spells/222.png | Bin .../tCrossBar/resources}/spells/223.png | Bin .../tCrossBar/resources}/spells/224.png | Bin .../tCrossBar/resources}/spells/225.png | Bin .../tCrossBar/resources}/spells/226.png | Bin .../tCrossBar/resources}/spells/227.png | Bin .../tCrossBar/resources}/spells/228.png | Bin .../tCrossBar/resources}/spells/229.png | Bin .../tCrossBar/resources}/spells/23.png | Bin .../tCrossBar/resources}/spells/230.png | Bin .../tCrossBar/resources}/spells/231.png | Bin .../tCrossBar/resources}/spells/232.png | Bin .../tCrossBar/resources}/spells/233.png | Bin .../tCrossBar/resources}/spells/234.png | Bin .../tCrossBar/resources}/spells/235.png | Bin .../tCrossBar/resources}/spells/236.png | Bin .../tCrossBar/resources}/spells/237.png | Bin .../tCrossBar/resources}/spells/238.png | Bin .../tCrossBar/resources}/spells/239.png | Bin .../tCrossBar/resources}/spells/24.png | Bin .../tCrossBar/resources}/spells/240.png | Bin .../tCrossBar/resources}/spells/241.png | Bin .../tCrossBar/resources}/spells/242.png | Bin .../tCrossBar/resources}/spells/243.png | Bin .../tCrossBar/resources}/spells/244.png | Bin .../tCrossBar/resources}/spells/245.png | Bin .../tCrossBar/resources}/spells/246.png | Bin .../tCrossBar/resources}/spells/247.png | Bin .../tCrossBar/resources}/spells/248.png | Bin .../tCrossBar/resources}/spells/249.png | Bin .../tCrossBar/resources}/spells/25.png | Bin .../tCrossBar/resources}/spells/250.png | Bin .../tCrossBar/resources}/spells/251.png | Bin .../tCrossBar/resources}/spells/252.png | Bin .../tCrossBar/resources}/spells/253.png | Bin .../tCrossBar/resources}/spells/254.png | Bin .../tCrossBar/resources}/spells/255.png | Bin .../tCrossBar/resources}/spells/258.png | Bin .../tCrossBar/resources}/spells/259.png | Bin .../tCrossBar/resources}/spells/26.png | Bin .../tCrossBar/resources}/spells/260.png | Bin .../tCrossBar/resources}/spells/261.png | Bin .../tCrossBar/resources}/spells/262.png | Bin .../tCrossBar/resources}/spells/263.png | Bin .../tCrossBar/resources}/spells/264.png | Bin .../tCrossBar/resources}/spells/265.png | Bin .../tCrossBar/resources}/spells/266.png | Bin .../tCrossBar/resources}/spells/267.png | Bin .../tCrossBar/resources}/spells/268.png | Bin .../tCrossBar/resources}/spells/269.png | Bin .../tCrossBar/resources}/spells/27.png | Bin .../tCrossBar/resources}/spells/270.png | Bin .../tCrossBar/resources}/spells/271.png | Bin .../tCrossBar/resources}/spells/272.png | Bin .../tCrossBar/resources}/spells/273.png | Bin .../tCrossBar/resources}/spells/274.png | Bin .../tCrossBar/resources}/spells/275.png | Bin .../tCrossBar/resources}/spells/276.png | Bin .../tCrossBar/resources}/spells/277.png | Bin .../tCrossBar/resources}/spells/278.png | Bin .../tCrossBar/resources}/spells/279.png | Bin .../tCrossBar/resources}/spells/28.png | Bin .../tCrossBar/resources}/spells/280.png | Bin .../tCrossBar/resources}/spells/281.png | Bin .../tCrossBar/resources}/spells/282.png | Bin .../tCrossBar/resources}/spells/283.png | Bin .../tCrossBar/resources}/spells/284.png | Bin .../tCrossBar/resources}/spells/285.png | Bin .../tCrossBar/resources}/spells/286.png | Bin .../tCrossBar/resources}/spells/287.png | Bin .../tCrossBar/resources}/spells/288.png | Bin .../tCrossBar/resources}/spells/289.png | Bin .../tCrossBar/resources}/spells/29.png | Bin .../tCrossBar/resources}/spells/290.png | Bin .../tCrossBar/resources}/spells/291.png | Bin .../tCrossBar/resources}/spells/292.png | Bin .../tCrossBar/resources}/spells/293.png | Bin .../tCrossBar/resources}/spells/294.png | Bin .../tCrossBar/resources}/spells/295.png | Bin .../tCrossBar/resources}/spells/296.png | Bin .../tCrossBar/resources}/spells/297.png | Bin .../tCrossBar/resources}/spells/298.png | Bin .../tCrossBar/resources}/spells/299.png | Bin .../tCrossBar/resources}/spells/3.png | Bin .../tCrossBar/resources}/spells/30.png | Bin .../tCrossBar/resources}/spells/300.png | Bin .../tCrossBar/resources}/spells/301.png | Bin .../tCrossBar/resources}/spells/302.png | Bin .../tCrossBar/resources}/spells/303.png | Bin .../tCrossBar/resources}/spells/304.png | Bin .../tCrossBar/resources}/spells/305.png | Bin .../tCrossBar/resources}/spells/306.png | Bin .../tCrossBar/resources}/spells/307.png | Bin .../tCrossBar/resources}/spells/308.png | Bin .../tCrossBar/resources}/spells/309.png | Bin .../tCrossBar/resources}/spells/31.png | Bin .../tCrossBar/resources}/spells/310.png | Bin .../tCrossBar/resources}/spells/311.png | Bin .../tCrossBar/resources}/spells/312.png | Bin .../tCrossBar/resources}/spells/313.png | Bin .../tCrossBar/resources}/spells/314.png | Bin .../tCrossBar/resources}/spells/315.png | Bin .../tCrossBar/resources}/spells/316.png | Bin .../tCrossBar/resources}/spells/317.png | Bin .../tCrossBar/resources}/spells/318.png | Bin .../tCrossBar/resources}/spells/319.png | Bin .../tCrossBar/resources}/spells/32.png | Bin .../tCrossBar/resources}/spells/320.png | Bin .../tCrossBar/resources}/spells/321.png | Bin .../tCrossBar/resources}/spells/322.png | Bin .../tCrossBar/resources}/spells/323.png | Bin .../tCrossBar/resources}/spells/324.png | Bin .../tCrossBar/resources}/spells/325.png | Bin .../tCrossBar/resources}/spells/326.png | Bin .../tCrossBar/resources}/spells/327.png | Bin .../tCrossBar/resources}/spells/328.png | Bin .../tCrossBar/resources}/spells/329.png | Bin .../tCrossBar/resources}/spells/33.png | Bin .../tCrossBar/resources}/spells/330.png | Bin .../tCrossBar/resources}/spells/331.png | Bin .../tCrossBar/resources}/spells/332.png | Bin .../tCrossBar/resources}/spells/333.png | Bin .../tCrossBar/resources}/spells/334.png | Bin .../tCrossBar/resources}/spells/335.png | Bin .../tCrossBar/resources}/spells/336.png | Bin .../tCrossBar/resources}/spells/337.png | Bin .../tCrossBar/resources}/spells/338.png | Bin .../tCrossBar/resources}/spells/339.png | Bin .../tCrossBar/resources}/spells/34.png | Bin .../tCrossBar/resources}/spells/340.png | Bin .../tCrossBar/resources}/spells/341.png | Bin .../tCrossBar/resources}/spells/342.png | Bin .../tCrossBar/resources}/spells/343.png | Bin .../tCrossBar/resources}/spells/344.png | Bin .../tCrossBar/resources}/spells/345.png | Bin .../tCrossBar/resources}/spells/346.png | Bin .../tCrossBar/resources}/spells/347.png | Bin .../tCrossBar/resources}/spells/348.png | Bin .../tCrossBar/resources}/spells/349.png | Bin .../tCrossBar/resources}/spells/35.png | Bin .../tCrossBar/resources}/spells/350.png | Bin .../tCrossBar/resources}/spells/351.png | Bin .../tCrossBar/resources}/spells/352.png | Bin .../tCrossBar/resources}/spells/353.png | Bin .../tCrossBar/resources}/spells/354.png | Bin .../tCrossBar/resources}/spells/355.png | Bin .../tCrossBar/resources}/spells/356.png | Bin .../tCrossBar/resources}/spells/357.png | Bin .../tCrossBar/resources}/spells/358.png | Bin .../tCrossBar/resources}/spells/359.png | Bin .../tCrossBar/resources}/spells/36.png | Bin .../tCrossBar/resources}/spells/360.png | Bin .../tCrossBar/resources}/spells/361.png | Bin .../tCrossBar/resources}/spells/362.png | Bin .../tCrossBar/resources}/spells/363.png | Bin .../tCrossBar/resources}/spells/364.png | Bin .../tCrossBar/resources}/spells/365.png | Bin .../tCrossBar/resources}/spells/366.png | Bin .../tCrossBar/resources}/spells/368.png | Bin .../tCrossBar/resources}/spells/369.png | Bin .../tCrossBar/resources}/spells/37.png | Bin .../tCrossBar/resources}/spells/370.png | Bin .../tCrossBar/resources}/spells/371.png | Bin .../tCrossBar/resources}/spells/372.png | Bin .../tCrossBar/resources}/spells/373.png | Bin .../tCrossBar/resources}/spells/374.png | Bin .../tCrossBar/resources}/spells/375.png | Bin .../tCrossBar/resources}/spells/376.png | Bin .../tCrossBar/resources}/spells/377.png | Bin .../tCrossBar/resources}/spells/378.png | Bin .../tCrossBar/resources}/spells/379.png | Bin .../tCrossBar/resources}/spells/38.png | Bin .../tCrossBar/resources}/spells/380.png | Bin .../tCrossBar/resources}/spells/381.png | Bin .../tCrossBar/resources}/spells/382.png | Bin .../tCrossBar/resources}/spells/383.png | Bin .../tCrossBar/resources}/spells/384.png | Bin .../tCrossBar/resources}/spells/385.png | Bin .../tCrossBar/resources}/spells/386.png | Bin .../tCrossBar/resources}/spells/387.png | Bin .../tCrossBar/resources}/spells/388.png | Bin .../tCrossBar/resources}/spells/389.png | Bin .../tCrossBar/resources}/spells/39.png | Bin .../tCrossBar/resources}/spells/390.png | Bin .../tCrossBar/resources}/spells/391.png | Bin .../tCrossBar/resources}/spells/392.png | Bin .../tCrossBar/resources}/spells/393.png | Bin .../tCrossBar/resources}/spells/394.png | Bin .../tCrossBar/resources}/spells/395.png | Bin .../tCrossBar/resources}/spells/396.png | Bin .../tCrossBar/resources}/spells/397.png | Bin .../tCrossBar/resources}/spells/398.png | Bin .../tCrossBar/resources}/spells/399.png | Bin .../tCrossBar/resources}/spells/4.png | Bin .../tCrossBar/resources}/spells/40.png | Bin .../tCrossBar/resources}/spells/400.png | Bin .../tCrossBar/resources}/spells/401.png | Bin .../tCrossBar/resources}/spells/402.png | Bin .../tCrossBar/resources}/spells/403.png | Bin .../tCrossBar/resources}/spells/404.png | Bin .../tCrossBar/resources}/spells/405.png | Bin .../tCrossBar/resources}/spells/406.png | Bin .../tCrossBar/resources}/spells/407.png | Bin .../tCrossBar/resources}/spells/408.png | Bin .../tCrossBar/resources}/spells/409.png | Bin .../tCrossBar/resources}/spells/41.png | Bin .../tCrossBar/resources}/spells/410.png | Bin .../tCrossBar/resources}/spells/411.png | Bin .../tCrossBar/resources}/spells/412.png | Bin .../tCrossBar/resources}/spells/413.png | Bin .../tCrossBar/resources}/spells/414.png | Bin .../tCrossBar/resources}/spells/415.png | Bin .../tCrossBar/resources}/spells/416.png | Bin .../tCrossBar/resources}/spells/417.png | Bin .../tCrossBar/resources}/spells/418.png | Bin .../tCrossBar/resources}/spells/419.png | Bin .../tCrossBar/resources}/spells/42.png | Bin .../tCrossBar/resources}/spells/420.png | Bin .../tCrossBar/resources}/spells/421.png | Bin .../tCrossBar/resources}/spells/422.png | Bin .../tCrossBar/resources}/spells/423.png | Bin .../tCrossBar/resources}/spells/424.png | Bin .../tCrossBar/resources}/spells/425.png | Bin .../tCrossBar/resources}/spells/426.png | Bin .../tCrossBar/resources}/spells/427.png | Bin .../tCrossBar/resources}/spells/428.png | Bin .../tCrossBar/resources}/spells/429.png | Bin .../tCrossBar/resources}/spells/43.png | Bin .../tCrossBar/resources}/spells/430.png | Bin .../tCrossBar/resources}/spells/431.png | Bin .../tCrossBar/resources}/spells/432.png | Bin .../tCrossBar/resources}/spells/433.png | Bin .../tCrossBar/resources}/spells/434.png | Bin .../tCrossBar/resources}/spells/435.png | Bin .../tCrossBar/resources}/spells/436.png | Bin .../tCrossBar/resources}/spells/437.png | Bin .../tCrossBar/resources}/spells/438.png | Bin .../tCrossBar/resources}/spells/439.png | Bin .../tCrossBar/resources}/spells/44.png | Bin .../tCrossBar/resources}/spells/440.png | Bin .../tCrossBar/resources}/spells/441.png | Bin .../tCrossBar/resources}/spells/442.png | Bin .../tCrossBar/resources}/spells/443.png | Bin .../tCrossBar/resources}/spells/444.png | Bin .../tCrossBar/resources}/spells/445.png | Bin .../tCrossBar/resources}/spells/446.png | Bin .../tCrossBar/resources}/spells/447.png | Bin .../tCrossBar/resources}/spells/448.png | Bin .../tCrossBar/resources}/spells/449.png | Bin .../tCrossBar/resources}/spells/45.png | Bin .../tCrossBar/resources}/spells/450.png | Bin .../tCrossBar/resources}/spells/451.png | Bin .../tCrossBar/resources}/spells/452.png | Bin .../tCrossBar/resources}/spells/453.png | Bin .../tCrossBar/resources}/spells/454.png | Bin .../tCrossBar/resources}/spells/455.png | Bin .../tCrossBar/resources}/spells/456.png | Bin .../tCrossBar/resources}/spells/457.png | Bin .../tCrossBar/resources}/spells/458.png | Bin .../tCrossBar/resources}/spells/459.png | Bin .../tCrossBar/resources}/spells/46.png | Bin .../tCrossBar/resources}/spells/460.png | Bin .../tCrossBar/resources}/spells/461.png | Bin .../tCrossBar/resources}/spells/462.png | Bin .../tCrossBar/resources}/spells/463.png | Bin .../tCrossBar/resources}/spells/464.png | Bin .../tCrossBar/resources}/spells/465.png | Bin .../tCrossBar/resources}/spells/466.png | Bin .../tCrossBar/resources}/spells/467.png | Bin .../tCrossBar/resources}/spells/468.png | Bin .../tCrossBar/resources}/spells/469.png | Bin .../tCrossBar/resources}/spells/47.png | Bin .../tCrossBar/resources}/spells/470.png | Bin .../tCrossBar/resources}/spells/471.png | Bin .../tCrossBar/resources}/spells/472.png | Bin .../tCrossBar/resources}/spells/473.png | Bin .../tCrossBar/resources}/spells/474.png | Bin .../tCrossBar/resources}/spells/475.png | Bin .../tCrossBar/resources}/spells/476.png | Bin .../tCrossBar/resources}/spells/477.png | Bin .../tCrossBar/resources}/spells/478.png | Bin .../tCrossBar/resources}/spells/479.png | Bin .../tCrossBar/resources}/spells/48.png | Bin .../tCrossBar/resources}/spells/480.png | Bin .../tCrossBar/resources}/spells/481.png | Bin .../tCrossBar/resources}/spells/482.png | Bin .../tCrossBar/resources}/spells/483.png | Bin .../tCrossBar/resources}/spells/484.png | Bin .../tCrossBar/resources}/spells/485.png | Bin .../tCrossBar/resources}/spells/486.png | Bin .../tCrossBar/resources}/spells/487.png | Bin .../tCrossBar/resources}/spells/488.png | Bin .../tCrossBar/resources}/spells/489.png | Bin .../tCrossBar/resources}/spells/49.png | Bin .../tCrossBar/resources}/spells/490.png | Bin .../tCrossBar/resources}/spells/491.png | Bin .../tCrossBar/resources}/spells/492.png | Bin .../tCrossBar/resources}/spells/493.png | Bin .../tCrossBar/resources}/spells/494.png | Bin .../tCrossBar/resources}/spells/495.png | Bin .../tCrossBar/resources}/spells/496.png | Bin .../tCrossBar/resources}/spells/497.png | Bin .../tCrossBar/resources}/spells/498.png | Bin .../tCrossBar/resources}/spells/499.png | Bin .../tCrossBar/resources}/spells/5.png | Bin .../tCrossBar/resources}/spells/50.png | Bin .../tCrossBar/resources}/spells/500.png | Bin .../tCrossBar/resources}/spells/501.png | Bin .../tCrossBar/resources}/spells/502.png | Bin .../tCrossBar/resources}/spells/503.png | Bin .../tCrossBar/resources}/spells/504.png | Bin .../tCrossBar/resources}/spells/505.png | Bin .../tCrossBar/resources}/spells/506.png | Bin .../tCrossBar/resources}/spells/507.png | Bin .../tCrossBar/resources}/spells/508.png | Bin .../tCrossBar/resources}/spells/509.png | Bin .../tCrossBar/resources}/spells/51.png | Bin .../tCrossBar/resources}/spells/510.png | Bin .../tCrossBar/resources}/spells/511.png | Bin .../tCrossBar/resources}/spells/513.png | Bin .../tCrossBar/resources}/spells/515.png | Bin .../tCrossBar/resources}/spells/517.png | Bin .../tCrossBar/resources}/spells/519.png | Bin .../tCrossBar/resources}/spells/52.png | Bin .../tCrossBar/resources}/spells/521.png | Bin .../tCrossBar/resources}/spells/522.png | Bin .../tCrossBar/resources}/spells/524.png | Bin .../tCrossBar/resources}/spells/527.png | Bin .../tCrossBar/resources}/spells/529.png | Bin .../tCrossBar/resources}/spells/53.png | Bin .../tCrossBar/resources}/spells/530.png | Bin .../tCrossBar/resources}/spells/531.png | Bin .../tCrossBar/resources}/spells/532.png | Bin .../tCrossBar/resources}/spells/533.png | Bin .../tCrossBar/resources}/spells/534.png | Bin .../tCrossBar/resources}/spells/535.png | Bin .../tCrossBar/resources}/spells/536.png | Bin .../tCrossBar/resources}/spells/537.png | Bin .../tCrossBar/resources}/spells/538.png | Bin .../tCrossBar/resources}/spells/539.png | Bin .../tCrossBar/resources}/spells/54.png | Bin .../tCrossBar/resources}/spells/540.png | Bin .../tCrossBar/resources}/spells/541.png | Bin .../tCrossBar/resources}/spells/542.png | Bin .../tCrossBar/resources}/spells/543.png | Bin .../tCrossBar/resources}/spells/544.png | Bin .../tCrossBar/resources}/spells/545.png | Bin .../tCrossBar/resources}/spells/547.png | Bin .../tCrossBar/resources}/spells/548.png | Bin .../tCrossBar/resources}/spells/549.png | Bin .../tCrossBar/resources}/spells/55.png | Bin .../tCrossBar/resources}/spells/551.png | Bin .../tCrossBar/resources}/spells/554.png | Bin .../tCrossBar/resources}/spells/555.png | Bin .../tCrossBar/resources}/spells/557.png | Bin .../tCrossBar/resources}/spells/56.png | Bin .../tCrossBar/resources}/spells/560.png | Bin .../tCrossBar/resources}/spells/561.png | Bin .../tCrossBar/resources}/spells/563.png | Bin .../tCrossBar/resources}/spells/564.png | Bin .../tCrossBar/resources}/spells/565.png | Bin .../tCrossBar/resources}/spells/567.png | Bin .../tCrossBar/resources}/spells/569.png | Bin .../tCrossBar/resources}/spells/57.png | Bin .../tCrossBar/resources}/spells/570.png | Bin .../tCrossBar/resources}/spells/572.png | Bin .../tCrossBar/resources}/spells/573.png | Bin .../tCrossBar/resources}/spells/574.png | Bin .../tCrossBar/resources}/spells/575.png | Bin .../tCrossBar/resources}/spells/576.png | Bin .../tCrossBar/resources}/spells/577.png | Bin .../tCrossBar/resources}/spells/578.png | Bin .../tCrossBar/resources}/spells/579.png | Bin .../tCrossBar/resources}/spells/58.png | Bin .../tCrossBar/resources}/spells/581.png | Bin .../tCrossBar/resources}/spells/582.png | Bin .../tCrossBar/resources}/spells/584.png | Bin .../tCrossBar/resources}/spells/585.png | Bin .../tCrossBar/resources}/spells/587.png | Bin .../tCrossBar/resources}/spells/588.png | Bin .../tCrossBar/resources}/spells/589.png | Bin .../tCrossBar/resources}/spells/59.png | Bin .../tCrossBar/resources}/spells/591.png | Bin .../tCrossBar/resources}/spells/592.png | Bin .../tCrossBar/resources}/spells/593.png | Bin .../tCrossBar/resources}/spells/594.png | Bin .../tCrossBar/resources}/spells/595.png | Bin .../tCrossBar/resources}/spells/596.png | Bin .../tCrossBar/resources}/spells/597.png | Bin .../tCrossBar/resources}/spells/598.png | Bin .../tCrossBar/resources}/spells/599.png | Bin .../tCrossBar/resources}/spells/6.png | Bin .../tCrossBar/resources}/spells/60.png | Bin .../tCrossBar/resources}/spells/603.png | Bin .../tCrossBar/resources}/spells/604.png | Bin .../tCrossBar/resources}/spells/605.png | Bin .../tCrossBar/resources}/spells/606.png | Bin .../tCrossBar/resources}/spells/608.png | Bin .../tCrossBar/resources}/spells/61.png | Bin .../tCrossBar/resources}/spells/610.png | Bin .../tCrossBar/resources}/spells/611.png | Bin .../tCrossBar/resources}/spells/612.png | Bin .../tCrossBar/resources}/spells/613.png | Bin .../tCrossBar/resources}/spells/614.png | Bin .../tCrossBar/resources}/spells/615.png | Bin .../tCrossBar/resources}/spells/616.png | Bin .../tCrossBar/resources}/spells/617.png | Bin .../tCrossBar/resources}/spells/618.png | Bin .../tCrossBar/resources}/spells/62.png | Bin .../tCrossBar/resources}/spells/620.png | Bin .../tCrossBar/resources}/spells/621.png | Bin .../tCrossBar/resources}/spells/622.png | Bin .../tCrossBar/resources}/spells/623.png | Bin .../tCrossBar/resources}/spells/626.png | Bin .../tCrossBar/resources}/spells/628.png | Bin .../tCrossBar/resources}/spells/629.png | Bin .../tCrossBar/resources}/spells/63.png | Bin .../tCrossBar/resources}/spells/631.png | Bin .../tCrossBar/resources}/spells/632.png | Bin .../tCrossBar/resources}/spells/633.png | Bin .../tCrossBar/resources}/spells/634.png | Bin .../tCrossBar/resources}/spells/636.png | Bin .../tCrossBar/resources}/spells/637.png | Bin .../tCrossBar/resources}/spells/638.png | Bin .../tCrossBar/resources}/spells/64.png | Bin .../tCrossBar/resources}/spells/640.png | Bin .../tCrossBar/resources}/spells/641.png | Bin .../tCrossBar/resources}/spells/642.png | Bin .../tCrossBar/resources}/spells/643.png | Bin .../tCrossBar/resources}/spells/644.png | Bin .../tCrossBar/resources}/spells/645.png | Bin .../tCrossBar/resources}/spells/646.png | Bin .../tCrossBar/resources}/spells/647.png | Bin .../tCrossBar/resources}/spells/648.png | Bin .../tCrossBar/resources}/spells/65.png | Bin .../tCrossBar/resources}/spells/650.png | Bin .../tCrossBar/resources}/spells/651.png | Bin .../tCrossBar/resources}/spells/652.png | Bin .../tCrossBar/resources}/spells/653.png | Bin .../tCrossBar/resources}/spells/654.png | Bin .../tCrossBar/resources}/spells/655.png | Bin .../tCrossBar/resources}/spells/656.png | Bin .../tCrossBar/resources}/spells/657.png | Bin .../tCrossBar/resources}/spells/658.png | Bin .../tCrossBar/resources}/spells/659.png | Bin .../tCrossBar/resources}/spells/66.png | Bin .../tCrossBar/resources}/spells/660.png | Bin .../tCrossBar/resources}/spells/661.png | Bin .../tCrossBar/resources}/spells/662.png | Bin .../tCrossBar/resources}/spells/663.png | Bin .../tCrossBar/resources}/spells/664.png | Bin .../tCrossBar/resources}/spells/665.png | Bin .../tCrossBar/resources}/spells/666.png | Bin .../tCrossBar/resources}/spells/667.png | Bin .../tCrossBar/resources}/spells/668.png | Bin .../tCrossBar/resources}/spells/669.png | Bin .../tCrossBar/resources}/spells/67.png | Bin .../tCrossBar/resources}/spells/670.png | Bin .../tCrossBar/resources}/spells/671.png | Bin .../tCrossBar/resources}/spells/672.png | Bin .../tCrossBar/resources}/spells/673.png | Bin .../tCrossBar/resources}/spells/674.png | Bin .../tCrossBar/resources}/spells/675.png | Bin .../tCrossBar/resources}/spells/677.png | Bin .../tCrossBar/resources}/spells/678.png | Bin .../tCrossBar/resources}/spells/679.png | Bin .../tCrossBar/resources}/spells/68.png | Bin .../tCrossBar/resources}/spells/680.png | Bin .../tCrossBar/resources}/spells/681.png | Bin .../tCrossBar/resources}/spells/682.png | Bin .../tCrossBar/resources}/spells/683.png | Bin .../tCrossBar/resources}/spells/684.png | Bin .../tCrossBar/resources}/spells/685.png | Bin .../tCrossBar/resources}/spells/686.png | Bin .../tCrossBar/resources}/spells/687.png | Bin .../tCrossBar/resources}/spells/688.png | Bin .../tCrossBar/resources}/spells/689.png | Bin .../tCrossBar/resources}/spells/69.png | Bin .../tCrossBar/resources}/spells/690.png | Bin .../tCrossBar/resources}/spells/692.png | Bin .../tCrossBar/resources}/spells/693.png | Bin .../tCrossBar/resources}/spells/694.png | Bin .../tCrossBar/resources}/spells/695.png | Bin .../tCrossBar/resources}/spells/696.png | Bin .../tCrossBar/resources}/spells/697.png | Bin .../tCrossBar/resources}/spells/698.png | Bin .../tCrossBar/resources}/spells/699.png | Bin .../tCrossBar/resources}/spells/7.png | Bin .../tCrossBar/resources}/spells/70.png | Bin .../tCrossBar/resources}/spells/700.png | Bin .../tCrossBar/resources}/spells/701.png | Bin .../tCrossBar/resources}/spells/702.png | Bin .../tCrossBar/resources}/spells/703.png | Bin .../tCrossBar/resources}/spells/704.png | Bin .../tCrossBar/resources}/spells/705.png | Bin .../tCrossBar/resources}/spells/706.png | Bin .../tCrossBar/resources}/spells/707.png | Bin .../tCrossBar/resources}/spells/708.png | Bin .../tCrossBar/resources}/spells/709.png | Bin .../tCrossBar/resources}/spells/71.png | Bin .../tCrossBar/resources}/spells/710.png | Bin .../tCrossBar/resources}/spells/711.png | Bin .../tCrossBar/resources}/spells/712.png | Bin .../tCrossBar/resources}/spells/713.png | Bin .../tCrossBar/resources}/spells/714.png | Bin .../tCrossBar/resources}/spells/715.png | Bin .../tCrossBar/resources}/spells/716.png | Bin .../tCrossBar/resources}/spells/717.png | Bin .../tCrossBar/resources}/spells/718.png | Bin .../tCrossBar/resources}/spells/719.png | Bin .../tCrossBar/resources}/spells/72.png | Bin .../tCrossBar/resources}/spells/720.png | Bin .../tCrossBar/resources}/spells/721.png | Bin .../tCrossBar/resources}/spells/722.png | Bin .../tCrossBar/resources}/spells/723.png | Bin .../tCrossBar/resources}/spells/724.png | Bin .../tCrossBar/resources}/spells/725.png | Bin .../tCrossBar/resources}/spells/726.png | Bin .../tCrossBar/resources}/spells/727.png | Bin .../tCrossBar/resources}/spells/728.png | Bin .../tCrossBar/resources}/spells/73.png | Bin .../tCrossBar/resources}/spells/736.png | Bin .../tCrossBar/resources}/spells/737.png | Bin .../tCrossBar/resources}/spells/738.png | Bin .../tCrossBar/resources}/spells/739.png | Bin .../tCrossBar/resources}/spells/74.png | Bin .../tCrossBar/resources}/spells/740.png | Bin .../tCrossBar/resources}/spells/741.png | Bin .../tCrossBar/resources}/spells/742.png | Bin .../tCrossBar/resources}/spells/743.png | Bin .../tCrossBar/resources}/spells/744.png | Bin .../tCrossBar/resources}/spells/745.png | Bin .../tCrossBar/resources}/spells/746.png | Bin .../tCrossBar/resources}/spells/747.png | Bin .../tCrossBar/resources}/spells/748.png | Bin .../tCrossBar/resources}/spells/749.png | Bin .../tCrossBar/resources}/spells/75.png | Bin .../tCrossBar/resources}/spells/76.png | Bin .../tCrossBar/resources}/spells/77.png | Bin .../tCrossBar/resources}/spells/78.png | Bin .../tCrossBar/resources}/spells/79.png | Bin .../tCrossBar/resources}/spells/8.png | Bin .../tCrossBar/resources}/spells/80.png | Bin .../tCrossBar/resources}/spells/81.png | Bin .../tCrossBar/resources}/spells/82.png | Bin .../tCrossBar/resources}/spells/828.png | Bin .../tCrossBar/resources}/spells/829.png | Bin .../tCrossBar/resources}/spells/83.png | Bin .../tCrossBar/resources}/spells/830.png | Bin .../tCrossBar/resources}/spells/831.png | Bin .../tCrossBar/resources}/spells/832.png | Bin .../tCrossBar/resources}/spells/833.png | Bin .../tCrossBar/resources}/spells/834.png | Bin .../tCrossBar/resources}/spells/835.png | Bin .../tCrossBar/resources}/spells/836.png | Bin .../tCrossBar/resources}/spells/837.png | Bin .../tCrossBar/resources}/spells/838.png | Bin .../tCrossBar/resources}/spells/839.png | Bin .../tCrossBar/resources}/spells/84.png | Bin .../tCrossBar/resources}/spells/841.png | Bin .../tCrossBar/resources}/spells/842.png | Bin .../tCrossBar/resources}/spells/843.png | Bin .../tCrossBar/resources}/spells/844.png | Bin .../tCrossBar/resources}/spells/845.png | Bin .../tCrossBar/resources}/spells/846.png | Bin .../tCrossBar/resources}/spells/848.png | Bin .../tCrossBar/resources}/spells/849.png | Bin .../tCrossBar/resources}/spells/85.png | Bin .../tCrossBar/resources}/spells/850.png | Bin .../tCrossBar/resources}/spells/851.png | Bin .../tCrossBar/resources}/spells/852.png | Bin .../tCrossBar/resources}/spells/853.png | Bin .../tCrossBar/resources}/spells/854.png | Bin .../tCrossBar/resources}/spells/855.png | Bin .../tCrossBar/resources}/spells/856.png | Bin .../tCrossBar/resources}/spells/857.png | Bin .../tCrossBar/resources}/spells/858.png | Bin .../tCrossBar/resources}/spells/859.png | Bin .../tCrossBar/resources}/spells/86.png | Bin .../tCrossBar/resources}/spells/860.png | Bin .../tCrossBar/resources}/spells/861.png | Bin .../tCrossBar/resources}/spells/862.png | Bin .../tCrossBar/resources}/spells/863.png | Bin .../tCrossBar/resources}/spells/864.png | Bin .../tCrossBar/resources}/spells/865.png | Bin .../tCrossBar/resources}/spells/866.png | Bin .../tCrossBar/resources}/spells/867.png | Bin .../tCrossBar/resources}/spells/868.png | Bin .../tCrossBar/resources}/spells/869.png | Bin .../tCrossBar/resources}/spells/87.png | Bin .../tCrossBar/resources}/spells/870.png | Bin .../tCrossBar/resources}/spells/871.png | Bin .../tCrossBar/resources}/spells/872.png | Bin .../tCrossBar/resources}/spells/873.png | Bin .../tCrossBar/resources}/spells/874.png | Bin .../tCrossBar/resources}/spells/875.png | Bin .../tCrossBar/resources}/spells/876.png | Bin .../tCrossBar/resources}/spells/877.png | Bin .../tCrossBar/resources}/spells/878.png | Bin .../tCrossBar/resources}/spells/879.png | Bin .../tCrossBar/resources}/spells/88.png | Bin .../tCrossBar/resources}/spells/880.png | Bin .../tCrossBar/resources}/spells/881.png | Bin .../tCrossBar/resources}/spells/882.png | Bin .../tCrossBar/resources}/spells/883.png | Bin .../tCrossBar/resources}/spells/884.png | Bin .../tCrossBar/resources}/spells/885.png | Bin .../tCrossBar/resources}/spells/886.png | Bin .../tCrossBar/resources}/spells/887.png | Bin .../tCrossBar/resources}/spells/888.png | Bin .../tCrossBar/resources}/spells/889.png | Bin .../tCrossBar/resources}/spells/89.png | Bin .../tCrossBar/resources}/spells/890.png | Bin .../tCrossBar/resources}/spells/891.png | Bin .../tCrossBar/resources}/spells/892.png | Bin .../tCrossBar/resources}/spells/894.png | Bin .../tCrossBar/resources}/spells/895.png | Bin .../tCrossBar/resources}/spells/896.png | Bin .../tCrossBar/resources}/spells/897.png | Bin .../tCrossBar/resources}/spells/898.png | Bin .../tCrossBar/resources}/spells/899.png | Bin .../tCrossBar/resources}/spells/9.png | Bin .../tCrossBar/resources}/spells/90.png | Bin .../tCrossBar/resources}/spells/900.png | Bin .../tCrossBar/resources}/spells/901.png | Bin .../tCrossBar/resources}/spells/902.png | Bin .../tCrossBar/resources}/spells/903.png | Bin .../tCrossBar/resources}/spells/904.png | Bin .../tCrossBar/resources}/spells/905.png | Bin .../tCrossBar/resources}/spells/906.png | Bin .../tCrossBar/resources}/spells/907.png | Bin .../tCrossBar/resources}/spells/908.png | Bin .../tCrossBar/resources}/spells/909.png | Bin .../tCrossBar/resources}/spells/91.png | Bin .../tCrossBar/resources}/spells/910.png | Bin .../tCrossBar/resources}/spells/911.png | Bin .../tCrossBar/resources}/spells/912.png | Bin .../tCrossBar/resources}/spells/913.png | Bin .../tCrossBar/resources}/spells/914.png | Bin .../tCrossBar/resources}/spells/915.png | Bin .../tCrossBar/resources}/spells/916.png | Bin .../tCrossBar/resources}/spells/917.png | Bin .../tCrossBar/resources}/spells/918.png | Bin .../tCrossBar/resources}/spells/919.png | Bin .../tCrossBar/resources}/spells/92.png | Bin .../tCrossBar/resources}/spells/920.png | Bin .../tCrossBar/resources}/spells/921.png | Bin .../tCrossBar/resources}/spells/922.png | Bin .../tCrossBar/resources}/spells/923.png | Bin .../tCrossBar/resources}/spells/924.png | Bin .../tCrossBar/resources}/spells/925.png | Bin .../tCrossBar/resources}/spells/926.png | Bin .../tCrossBar/resources}/spells/927.png | Bin .../tCrossBar/resources}/spells/928.png | Bin .../tCrossBar/resources}/spells/929.png | Bin .../tCrossBar/resources}/spells/93.png | Bin .../tCrossBar/resources}/spells/930.png | Bin .../tCrossBar/resources}/spells/931.png | Bin .../tCrossBar/resources}/spells/932.png | Bin .../tCrossBar/resources}/spells/933.png | Bin .../tCrossBar/resources}/spells/934.png | Bin .../tCrossBar/resources}/spells/935.png | Bin .../tCrossBar/resources}/spells/936.png | Bin .../tCrossBar/resources}/spells/937.png | Bin .../tCrossBar/resources}/spells/938.png | Bin .../tCrossBar/resources}/spells/939.png | Bin .../tCrossBar/resources}/spells/94.png | Bin .../tCrossBar/resources}/spells/940.png | Bin .../tCrossBar/resources}/spells/941.png | Bin .../tCrossBar/resources}/spells/942.png | Bin .../tCrossBar/resources}/spells/943.png | Bin .../tCrossBar/resources}/spells/944.png | Bin .../tCrossBar/resources}/spells/945.png | Bin .../tCrossBar/resources}/spells/946.png | Bin .../tCrossBar/resources}/spells/947.png | Bin .../tCrossBar/resources}/spells/948.png | Bin .../tCrossBar/resources}/spells/949.png | Bin .../tCrossBar/resources}/spells/95.png | Bin .../tCrossBar/resources}/spells/950.png | Bin .../tCrossBar/resources}/spells/951.png | Bin .../tCrossBar/resources}/spells/952.png | Bin .../tCrossBar/resources}/spells/953.png | Bin .../tCrossBar/resources}/spells/954.png | Bin .../tCrossBar/resources}/spells/955.png | Bin .../tCrossBar/resources}/spells/956.png | Bin .../tCrossBar/resources}/spells/957.png | Bin .../tCrossBar/resources}/spells/958.png | Bin .../tCrossBar/resources}/spells/959.png | Bin .../tCrossBar/resources}/spells/96.png | Bin .../tCrossBar/resources}/spells/960.png | Bin .../tCrossBar/resources}/spells/961.png | Bin .../tCrossBar/resources}/spells/962.png | Bin .../tCrossBar/resources}/spells/963.png | Bin .../tCrossBar/resources}/spells/964.png | Bin .../tCrossBar/resources}/spells/965.png | Bin .../tCrossBar/resources}/spells/966.png | Bin .../tCrossBar/resources}/spells/967.png | Bin .../tCrossBar/resources}/spells/968.png | Bin .../tCrossBar/resources}/spells/969.png | Bin .../tCrossBar/resources}/spells/97.png | Bin .../tCrossBar/resources}/spells/970.png | Bin .../tCrossBar/resources}/spells/971.png | Bin .../tCrossBar/resources}/spells/972.png | Bin .../tCrossBar/resources}/spells/973.png | Bin .../tCrossBar/resources}/spells/974.png | Bin .../tCrossBar/resources}/spells/975.png | Bin .../tCrossBar/resources}/spells/976.png | Bin .../tCrossBar/resources}/spells/977.png | Bin .../tCrossBar/resources}/spells/978.png | Bin .../tCrossBar/resources}/spells/979.png | Bin .../tCrossBar/resources}/spells/98.png | Bin .../tCrossBar/resources}/spells/980.png | Bin .../tCrossBar/resources}/spells/981.png | Bin .../tCrossBar/resources}/spells/982.png | Bin .../tCrossBar/resources}/spells/983.png | Bin .../tCrossBar/resources}/spells/984.png | Bin .../tCrossBar/resources}/spells/985.png | Bin .../tCrossBar/resources}/spells/986.png | Bin .../tCrossBar/resources}/spells/987.png | Bin .../tCrossBar/resources}/spells/99.png | Bin .../tCrossBar/resources}/spells/default.png | Bin .../tCrossBar/resources}/weaponskills/default.png | Bin {resources => addons/tCrossBar/resources}/wsmap.lua | 0 .../tCrossBar/singledisplay.lua | 0 {state => addons/tCrossBar/state}/inventory.lua | 0 {state => addons/tCrossBar/state}/player.lua | 0 {state => addons/tCrossBar/state}/skillchain.lua | 0 tCrossBar.lua => addons/tCrossBar/tCrossBar.lua | 0 .../tCrossBar/texturecache.lua | 0 {updaters => addons/tCrossBar/updaters}/ability.lua | 0 {updaters => addons/tCrossBar/updaters}/command.lua | 0 {updaters => addons/tCrossBar/updaters}/empty.lua | 0 {updaters => addons/tCrossBar/updaters}/item.lua | 0 {updaters => addons/tCrossBar/updaters}/spell.lua | 0 {updaters => addons/tCrossBar/updaters}/trust.lua | 0 .../tCrossBar/updaters}/weaponskill.lua | 0 1474 files changed, 2 insertions(+), 2 deletions(-) rename bindinggui.lua => addons/tCrossBar/bindinggui.lua (100%) rename bindings.lua => addons/tCrossBar/bindings.lua (99%) rename callbacks.lua => addons/tCrossBar/callbacks.lua (100%) rename commands.lua => addons/tCrossBar/commands.lua (100%) rename configgui.lua => addons/tCrossBar/configgui.lua (100%) rename controller.lua => addons/tCrossBar/controller.lua (100%) rename doubledisplay.lua => addons/tCrossBar/doubledisplay.lua (100%) rename element.lua => addons/tCrossBar/element.lua (100%) rename gdifonts => addons/tCrossBar/gdifonts (100%) rename helpers.lua => addons/tCrossBar/helpers.lua (100%) rename initializer.lua => addons/tCrossBar/initializer.lua (100%) rename interface.lua => addons/tCrossBar/interface.lua (100%) rename {resources => addons/tCrossBar/resources}/135.png (100%) rename {resources => addons/tCrossBar/resources}/16.png (100%) rename {resources => addons/tCrossBar/resources}/17.png (100%) rename {resources => addons/tCrossBar/resources}/18.png (100%) rename {resources => addons/tCrossBar/resources}/181.png (100%) rename {resources => addons/tCrossBar/resources}/19.png (100%) rename {resources => addons/tCrossBar/resources}/20.png (100%) rename {resources => addons/tCrossBar/resources}/21.png (100%) rename {resources => addons/tCrossBar/resources}/22.png (100%) rename {resources => addons/tCrossBar/resources}/23.png (100%) rename {resources => addons/tCrossBar/resources}/24.png (100%) rename {resources => addons/tCrossBar/resources}/25.png (100%) rename {resources => addons/tCrossBar/resources}/26.png (100%) rename {resources => addons/tCrossBar/resources}/27.png (100%) rename {resources => addons/tCrossBar/resources}/28.png (100%) rename {resources => addons/tCrossBar/resources}/29.png (100%) rename {resources => addons/tCrossBar/resources}/30.png (100%) rename {resources => addons/tCrossBar/resources}/93.png (100%) rename {resources => addons/tCrossBar/resources}/96.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/100.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/101.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/102.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/103.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/104.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/105.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/106.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/107.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/108.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/109.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/110.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/111.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/112.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/113.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/114.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/115.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/116.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/117.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/118.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/119.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/120.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/121.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/122.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/123.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/124.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/125.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/126.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/127.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/128.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/129.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/130.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/131.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/132.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/133.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/136.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/137.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/138.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/139.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/140.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/141.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/142.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/143.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/144.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/145.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/146.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/147.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/148.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/149.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/150.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/151.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/152.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/153.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/154.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/155.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/156.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/157.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/158.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/159.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/160.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/161.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/162.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/163.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/164.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/165.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/166.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/167.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/168.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/169.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/170.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/171.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/172.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/173.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/174.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/175.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/176.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/177.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/178.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/179.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/180.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/182.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/184.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/185.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/186.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/187.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/188.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/189.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/190.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/194.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/195.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/196.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/197.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/198.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/199.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/1hr.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/200.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/201.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/202.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/203.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/204.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/205.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/206.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/207.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/208.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/209.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/211.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/212.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/213.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/214.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/215.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/216.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/217.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/218.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/219.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/220.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/221.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/222.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/223.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/224.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/225.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/226.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/227.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/228.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/229.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/230.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/232.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/233.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/234.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/235.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/236.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/237.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/238.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/239.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/240.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/241.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/242.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/243.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/244.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/245.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/246.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/247.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/248.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/249.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/250.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/251.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/252.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/253.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/254.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/255.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/256.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/257.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/258.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/259.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/260.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/261.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/263.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/264.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/265.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/266.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/267.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/269.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/270.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/271.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/272.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/273.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/274.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/275.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/276.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/277.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/278.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/279.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/280.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/281.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/282.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/283.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/284.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/285.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/286.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/287.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/288.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/291.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/292.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/293.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/295.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/296.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/297.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/298.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/301.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/302.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/303.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/304.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/305.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/309.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/31.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/310.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/312.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/313.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/314.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/316.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/317.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/318.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/319.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/32.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/320.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/321.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/322.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/33.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/34.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/35.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/358.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/359.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/36.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/360.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/361.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/362.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/363.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/364.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/365.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/37.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/38.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/381.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/388.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/389.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/39.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/390.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/391.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/392.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/40.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/42.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/43.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/44.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/45.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/46.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/47.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/48.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/49.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/50.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/51.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/512.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/513.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/514.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/515.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/516.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/517.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/518.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/519.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/52.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/520.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/521.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/522.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/523.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/524.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/525.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/526.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/527.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/528.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/529.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/53.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/530.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/531.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/532.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/533.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/534.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/536.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/537.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/538.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/539.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/54.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/544.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/545.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/546.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/547.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/548.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/549.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/55.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/550.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/551.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/552.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/553.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/554.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/56.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/560.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/561.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/562.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/563.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/564.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/565.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/566.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/567.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/568.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/569.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/57.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/570.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/576.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/577.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/578.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/579.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/58.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/580.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/581.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/582.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/583.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/584.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/585.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/586.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/59.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/592.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/593.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/594.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/595.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/596.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/597.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/598.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/599.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/60.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/600.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/601.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/602.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/608.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/609.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/61.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/610.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/611.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/612.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/613.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/614.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/615.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/616.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/617.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/618.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/62.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/624.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/625.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/626.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/627.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/628.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/629.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/63.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/630.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/631.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/632.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/633.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/634.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/64.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/65.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/656.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/657.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/658.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/659.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/66.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/660.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/661.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/662.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/663.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/664.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/665.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/666.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/667.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/67.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/672.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/673.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/674.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/675.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/676.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/677.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/678.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/679.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/68.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/680.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/681.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/682.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/683.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/684.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/685.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/686.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/687.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/688.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/689.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/69.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/690.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/691.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/692.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/693.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/694.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/695.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/696.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/697.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/698.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/699.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/70.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/700.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/701.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/702.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/703.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/704.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/705.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/706.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/707.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/708.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/709.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/71.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/710.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/711.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/712.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/713.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/714.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/715.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/716.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/717.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/718.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/719.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/72.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/720.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/721.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/722.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/723.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/724.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/725.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/726.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/727.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/728.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/729.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/73.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/730.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/731.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/732.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/733.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/734.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/735.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/736.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/737.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/738.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/74.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/740.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/741.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/743.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/744.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/745.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/746.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/747.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/748.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/749.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/75.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/750.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/751.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/752.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/753.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/754.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/755.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/756.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/757.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/758.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/759.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/76.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/760.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/761.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/762.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/763.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/764.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/765.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/766.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/767.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/768.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/769.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/77.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/770.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/771.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/772.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/773.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/774.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/775.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/776.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/777.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/778.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/779.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/78.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/780.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/781.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/782.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/786.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/787.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/788.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/789.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/79.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/790.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/791.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/792.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/793.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/794.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/795.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/796.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/797.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/798.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/80.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/81.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/82.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/83.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/84.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/85.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/86.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/87.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/88.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/89.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/90.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/91.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/92.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/94.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/95.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/960.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/961.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/962.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/963.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/964.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/965.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/966.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/967.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/968.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/969.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/97.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/970.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/98.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/99.png (100%) rename {resources => addons/tCrossBar/resources}/abilities/default.png (100%) rename {resources => addons/tCrossBar/resources}/controllers/dualsense.lua (100%) rename {resources => addons/tCrossBar/resources}/controllers/switchpro.lua (100%) rename {resources => addons/tCrossBar/resources}/controllers/xbox.lua (100%) rename {resources => addons/tCrossBar/resources}/layouts/classic.lua (100%) rename {resources => addons/tCrossBar/resources}/layouts/compact.lua (100%) rename {resources => addons/tCrossBar/resources}/misc/buttons.png (100%) rename {resources => addons/tCrossBar/resources}/misc/command.png (100%) rename {resources => addons/tCrossBar/resources}/misc/crawl1.png (100%) rename {resources => addons/tCrossBar/resources}/misc/crawl2.png (100%) rename {resources => addons/tCrossBar/resources}/misc/crawl3.png (100%) rename {resources => addons/tCrossBar/resources}/misc/crawl4.png (100%) rename {resources => addons/tCrossBar/resources}/misc/crawl5.png (100%) rename {resources => addons/tCrossBar/resources}/misc/crawl6.png (100%) rename {resources => addons/tCrossBar/resources}/misc/crawl7.png (100%) rename {resources => addons/tCrossBar/resources}/misc/cross.png (100%) rename {resources => addons/tCrossBar/resources}/misc/dpad.png (100%) rename {resources => addons/tCrossBar/resources}/misc/drag.png (100%) rename {resources => addons/tCrossBar/resources}/misc/frame.png (100%) rename {resources => addons/tCrossBar/resources}/misc/trigger.png (100%) rename {resources => addons/tCrossBar/resources}/misc/unknown.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Compression.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Darkness.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Detonation.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Distortion.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Fragmentation.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Fusion.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Gravitation.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Impaction.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Induration.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Light.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Liquefaction.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Reverberation.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Scission.png (100%) rename {resources => addons/tCrossBar/resources}/skillchains/Transfixion.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1.png (100%) rename {resources => addons/tCrossBar/resources}/spells/10.png (100%) rename {resources => addons/tCrossBar/resources}/spells/100.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1004.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1005.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1006.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1007.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1008.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1009.png (100%) rename {resources => addons/tCrossBar/resources}/spells/101.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1010.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1011.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1012.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1013.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1014.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1015.png (100%) rename {resources => addons/tCrossBar/resources}/spells/1016.png (100%) rename {resources => addons/tCrossBar/resources}/spells/102.png (100%) rename {resources => addons/tCrossBar/resources}/spells/103.png (100%) rename {resources => addons/tCrossBar/resources}/spells/104.png (100%) rename {resources => addons/tCrossBar/resources}/spells/105.png (100%) rename {resources => addons/tCrossBar/resources}/spells/106.png (100%) rename {resources => addons/tCrossBar/resources}/spells/107.png (100%) rename {resources => addons/tCrossBar/resources}/spells/108.png (100%) rename {resources => addons/tCrossBar/resources}/spells/109.png (100%) rename {resources => addons/tCrossBar/resources}/spells/11.png (100%) rename {resources => addons/tCrossBar/resources}/spells/110.png (100%) rename {resources => addons/tCrossBar/resources}/spells/111.png (100%) rename {resources => addons/tCrossBar/resources}/spells/112.png (100%) rename {resources => addons/tCrossBar/resources}/spells/113.png (100%) rename {resources => addons/tCrossBar/resources}/spells/114.png (100%) rename {resources => addons/tCrossBar/resources}/spells/115.png (100%) rename {resources => addons/tCrossBar/resources}/spells/116.png (100%) rename {resources => addons/tCrossBar/resources}/spells/117.png (100%) rename {resources => addons/tCrossBar/resources}/spells/118.png (100%) rename {resources => addons/tCrossBar/resources}/spells/119.png (100%) rename {resources => addons/tCrossBar/resources}/spells/12.png (100%) rename {resources => addons/tCrossBar/resources}/spells/120.png (100%) rename {resources => addons/tCrossBar/resources}/spells/121.png (100%) rename {resources => addons/tCrossBar/resources}/spells/122.png (100%) rename {resources => addons/tCrossBar/resources}/spells/123.png (100%) rename {resources => addons/tCrossBar/resources}/spells/124.png (100%) rename {resources => addons/tCrossBar/resources}/spells/125.png (100%) rename {resources => addons/tCrossBar/resources}/spells/126.png (100%) rename {resources => addons/tCrossBar/resources}/spells/127.png (100%) rename {resources => addons/tCrossBar/resources}/spells/128.png (100%) rename {resources => addons/tCrossBar/resources}/spells/129.png (100%) rename {resources => addons/tCrossBar/resources}/spells/13.png (100%) rename {resources => addons/tCrossBar/resources}/spells/130.png (100%) rename {resources => addons/tCrossBar/resources}/spells/131.png (100%) rename {resources => addons/tCrossBar/resources}/spells/132.png (100%) rename {resources => addons/tCrossBar/resources}/spells/133.png (100%) rename {resources => addons/tCrossBar/resources}/spells/134.png (100%) rename {resources => addons/tCrossBar/resources}/spells/135.png (100%) rename {resources => addons/tCrossBar/resources}/spells/136.png (100%) rename {resources => addons/tCrossBar/resources}/spells/137.png (100%) rename {resources => addons/tCrossBar/resources}/spells/138.png (100%) rename {resources => addons/tCrossBar/resources}/spells/139.png (100%) rename {resources => addons/tCrossBar/resources}/spells/14.png (100%) rename {resources => addons/tCrossBar/resources}/spells/140.png (100%) rename {resources => addons/tCrossBar/resources}/spells/141.png (100%) rename {resources => addons/tCrossBar/resources}/spells/142.png (100%) rename {resources => addons/tCrossBar/resources}/spells/143.png (100%) rename {resources => addons/tCrossBar/resources}/spells/144.png (100%) rename {resources => addons/tCrossBar/resources}/spells/145.png (100%) rename {resources => addons/tCrossBar/resources}/spells/146.png (100%) rename {resources => addons/tCrossBar/resources}/spells/147.png (100%) rename {resources => addons/tCrossBar/resources}/spells/148.png (100%) rename {resources => addons/tCrossBar/resources}/spells/149.png (100%) rename {resources => addons/tCrossBar/resources}/spells/15.png (100%) rename {resources => addons/tCrossBar/resources}/spells/150.png (100%) rename {resources => addons/tCrossBar/resources}/spells/151.png (100%) rename {resources => addons/tCrossBar/resources}/spells/152.png (100%) rename {resources => addons/tCrossBar/resources}/spells/153.png (100%) rename {resources => addons/tCrossBar/resources}/spells/154.png (100%) rename {resources => addons/tCrossBar/resources}/spells/155.png (100%) rename {resources => addons/tCrossBar/resources}/spells/156.png (100%) rename {resources => addons/tCrossBar/resources}/spells/157.png (100%) rename {resources => addons/tCrossBar/resources}/spells/158.png (100%) rename {resources => addons/tCrossBar/resources}/spells/159.png (100%) rename {resources => addons/tCrossBar/resources}/spells/16.png (100%) rename {resources => addons/tCrossBar/resources}/spells/160.png (100%) rename {resources => addons/tCrossBar/resources}/spells/161.png (100%) rename {resources => addons/tCrossBar/resources}/spells/162.png (100%) rename {resources => addons/tCrossBar/resources}/spells/163.png (100%) rename {resources => addons/tCrossBar/resources}/spells/164.png (100%) rename {resources => addons/tCrossBar/resources}/spells/165.png (100%) rename {resources => addons/tCrossBar/resources}/spells/166.png (100%) rename {resources => addons/tCrossBar/resources}/spells/167.png (100%) rename {resources => addons/tCrossBar/resources}/spells/168.png (100%) rename {resources => addons/tCrossBar/resources}/spells/169.png (100%) rename {resources => addons/tCrossBar/resources}/spells/17.png (100%) rename {resources => addons/tCrossBar/resources}/spells/170.png (100%) rename {resources => addons/tCrossBar/resources}/spells/171.png (100%) rename {resources => addons/tCrossBar/resources}/spells/172.png (100%) rename {resources => addons/tCrossBar/resources}/spells/173.png (100%) rename {resources => addons/tCrossBar/resources}/spells/174.png (100%) rename {resources => addons/tCrossBar/resources}/spells/175.png (100%) rename {resources => addons/tCrossBar/resources}/spells/176.png (100%) rename {resources => addons/tCrossBar/resources}/spells/177.png (100%) rename {resources => addons/tCrossBar/resources}/spells/178.png (100%) rename {resources => addons/tCrossBar/resources}/spells/179.png (100%) rename {resources => addons/tCrossBar/resources}/spells/18.png (100%) rename {resources => addons/tCrossBar/resources}/spells/180.png (100%) rename {resources => addons/tCrossBar/resources}/spells/181.png (100%) rename {resources => addons/tCrossBar/resources}/spells/182.png (100%) rename {resources => addons/tCrossBar/resources}/spells/183.png (100%) rename {resources => addons/tCrossBar/resources}/spells/184.png (100%) rename {resources => addons/tCrossBar/resources}/spells/185.png (100%) rename {resources => addons/tCrossBar/resources}/spells/186.png (100%) rename {resources => addons/tCrossBar/resources}/spells/187.png (100%) rename {resources => addons/tCrossBar/resources}/spells/188.png (100%) rename {resources => addons/tCrossBar/resources}/spells/189.png (100%) rename {resources => addons/tCrossBar/resources}/spells/19.png (100%) rename {resources => addons/tCrossBar/resources}/spells/190.png (100%) rename {resources => addons/tCrossBar/resources}/spells/191.png (100%) rename {resources => addons/tCrossBar/resources}/spells/192.png (100%) rename {resources => addons/tCrossBar/resources}/spells/193.png (100%) rename {resources => addons/tCrossBar/resources}/spells/194.png (100%) rename {resources => addons/tCrossBar/resources}/spells/195.png (100%) rename {resources => addons/tCrossBar/resources}/spells/196.png (100%) rename {resources => addons/tCrossBar/resources}/spells/197.png (100%) rename {resources => addons/tCrossBar/resources}/spells/198.png (100%) rename {resources => addons/tCrossBar/resources}/spells/199.png (100%) rename {resources => addons/tCrossBar/resources}/spells/2.png (100%) rename {resources => addons/tCrossBar/resources}/spells/20.png (100%) rename {resources => addons/tCrossBar/resources}/spells/200.png (100%) rename {resources => addons/tCrossBar/resources}/spells/201.png (100%) rename {resources => addons/tCrossBar/resources}/spells/202.png (100%) rename {resources => addons/tCrossBar/resources}/spells/203.png (100%) rename {resources => addons/tCrossBar/resources}/spells/204.png (100%) rename {resources => addons/tCrossBar/resources}/spells/205.png (100%) rename {resources => addons/tCrossBar/resources}/spells/206.png (100%) rename {resources => addons/tCrossBar/resources}/spells/207.png (100%) rename {resources => addons/tCrossBar/resources}/spells/208.png (100%) rename {resources => addons/tCrossBar/resources}/spells/209.png (100%) rename {resources => addons/tCrossBar/resources}/spells/21.png (100%) rename {resources => addons/tCrossBar/resources}/spells/210.png (100%) rename {resources => addons/tCrossBar/resources}/spells/211.png (100%) rename {resources => addons/tCrossBar/resources}/spells/212.png (100%) rename {resources => addons/tCrossBar/resources}/spells/213.png (100%) rename {resources => addons/tCrossBar/resources}/spells/214.png (100%) rename {resources => addons/tCrossBar/resources}/spells/215.png (100%) rename {resources => addons/tCrossBar/resources}/spells/216.png (100%) rename {resources => addons/tCrossBar/resources}/spells/217.png (100%) rename {resources => addons/tCrossBar/resources}/spells/218.png (100%) rename {resources => addons/tCrossBar/resources}/spells/219.png (100%) rename {resources => addons/tCrossBar/resources}/spells/22.png (100%) rename {resources => addons/tCrossBar/resources}/spells/220.png (100%) rename {resources => addons/tCrossBar/resources}/spells/221.png (100%) rename {resources => addons/tCrossBar/resources}/spells/222.png (100%) rename {resources => addons/tCrossBar/resources}/spells/223.png (100%) rename {resources => addons/tCrossBar/resources}/spells/224.png (100%) rename {resources => addons/tCrossBar/resources}/spells/225.png (100%) rename {resources => addons/tCrossBar/resources}/spells/226.png (100%) rename {resources => addons/tCrossBar/resources}/spells/227.png (100%) rename {resources => addons/tCrossBar/resources}/spells/228.png (100%) rename {resources => addons/tCrossBar/resources}/spells/229.png (100%) rename {resources => addons/tCrossBar/resources}/spells/23.png (100%) rename {resources => addons/tCrossBar/resources}/spells/230.png (100%) rename {resources => addons/tCrossBar/resources}/spells/231.png (100%) rename {resources => addons/tCrossBar/resources}/spells/232.png (100%) rename {resources => addons/tCrossBar/resources}/spells/233.png (100%) rename {resources => addons/tCrossBar/resources}/spells/234.png (100%) rename {resources => addons/tCrossBar/resources}/spells/235.png (100%) rename {resources => addons/tCrossBar/resources}/spells/236.png (100%) rename {resources => addons/tCrossBar/resources}/spells/237.png (100%) rename {resources => addons/tCrossBar/resources}/spells/238.png (100%) rename {resources => addons/tCrossBar/resources}/spells/239.png (100%) rename {resources => addons/tCrossBar/resources}/spells/24.png (100%) rename {resources => addons/tCrossBar/resources}/spells/240.png (100%) rename {resources => addons/tCrossBar/resources}/spells/241.png (100%) rename {resources => addons/tCrossBar/resources}/spells/242.png (100%) rename {resources => addons/tCrossBar/resources}/spells/243.png (100%) rename {resources => addons/tCrossBar/resources}/spells/244.png (100%) rename {resources => addons/tCrossBar/resources}/spells/245.png (100%) rename {resources => addons/tCrossBar/resources}/spells/246.png (100%) rename {resources => addons/tCrossBar/resources}/spells/247.png (100%) rename {resources => addons/tCrossBar/resources}/spells/248.png (100%) rename {resources => addons/tCrossBar/resources}/spells/249.png (100%) rename {resources => addons/tCrossBar/resources}/spells/25.png (100%) rename {resources => addons/tCrossBar/resources}/spells/250.png (100%) rename {resources => addons/tCrossBar/resources}/spells/251.png (100%) rename {resources => addons/tCrossBar/resources}/spells/252.png (100%) rename {resources => addons/tCrossBar/resources}/spells/253.png (100%) rename {resources => addons/tCrossBar/resources}/spells/254.png (100%) rename {resources => addons/tCrossBar/resources}/spells/255.png (100%) rename {resources => addons/tCrossBar/resources}/spells/258.png (100%) rename {resources => addons/tCrossBar/resources}/spells/259.png (100%) rename {resources => addons/tCrossBar/resources}/spells/26.png (100%) rename {resources => addons/tCrossBar/resources}/spells/260.png (100%) rename {resources => addons/tCrossBar/resources}/spells/261.png (100%) rename {resources => addons/tCrossBar/resources}/spells/262.png (100%) rename {resources => addons/tCrossBar/resources}/spells/263.png (100%) rename {resources => addons/tCrossBar/resources}/spells/264.png (100%) rename {resources => addons/tCrossBar/resources}/spells/265.png (100%) rename {resources => addons/tCrossBar/resources}/spells/266.png (100%) rename {resources => addons/tCrossBar/resources}/spells/267.png (100%) rename {resources => addons/tCrossBar/resources}/spells/268.png (100%) rename {resources => addons/tCrossBar/resources}/spells/269.png (100%) rename {resources => addons/tCrossBar/resources}/spells/27.png (100%) rename {resources => addons/tCrossBar/resources}/spells/270.png (100%) rename {resources => addons/tCrossBar/resources}/spells/271.png (100%) rename {resources => addons/tCrossBar/resources}/spells/272.png (100%) rename {resources => addons/tCrossBar/resources}/spells/273.png (100%) rename {resources => addons/tCrossBar/resources}/spells/274.png (100%) rename {resources => addons/tCrossBar/resources}/spells/275.png (100%) rename {resources => addons/tCrossBar/resources}/spells/276.png (100%) rename {resources => addons/tCrossBar/resources}/spells/277.png (100%) rename {resources => addons/tCrossBar/resources}/spells/278.png (100%) rename {resources => addons/tCrossBar/resources}/spells/279.png (100%) rename {resources => addons/tCrossBar/resources}/spells/28.png (100%) rename {resources => addons/tCrossBar/resources}/spells/280.png (100%) rename {resources => addons/tCrossBar/resources}/spells/281.png (100%) rename {resources => addons/tCrossBar/resources}/spells/282.png (100%) rename {resources => addons/tCrossBar/resources}/spells/283.png (100%) rename {resources => addons/tCrossBar/resources}/spells/284.png (100%) rename {resources => addons/tCrossBar/resources}/spells/285.png (100%) rename {resources => addons/tCrossBar/resources}/spells/286.png (100%) rename {resources => addons/tCrossBar/resources}/spells/287.png (100%) rename {resources => addons/tCrossBar/resources}/spells/288.png (100%) rename {resources => addons/tCrossBar/resources}/spells/289.png (100%) rename {resources => addons/tCrossBar/resources}/spells/29.png (100%) rename {resources => addons/tCrossBar/resources}/spells/290.png (100%) rename {resources => addons/tCrossBar/resources}/spells/291.png (100%) rename {resources => addons/tCrossBar/resources}/spells/292.png (100%) rename {resources => addons/tCrossBar/resources}/spells/293.png (100%) rename {resources => addons/tCrossBar/resources}/spells/294.png (100%) rename {resources => addons/tCrossBar/resources}/spells/295.png (100%) rename {resources => addons/tCrossBar/resources}/spells/296.png (100%) rename {resources => addons/tCrossBar/resources}/spells/297.png (100%) rename {resources => addons/tCrossBar/resources}/spells/298.png (100%) rename {resources => addons/tCrossBar/resources}/spells/299.png (100%) rename {resources => addons/tCrossBar/resources}/spells/3.png (100%) rename {resources => addons/tCrossBar/resources}/spells/30.png (100%) rename {resources => addons/tCrossBar/resources}/spells/300.png (100%) rename {resources => addons/tCrossBar/resources}/spells/301.png (100%) rename {resources => addons/tCrossBar/resources}/spells/302.png (100%) rename {resources => addons/tCrossBar/resources}/spells/303.png (100%) rename {resources => addons/tCrossBar/resources}/spells/304.png (100%) rename {resources => addons/tCrossBar/resources}/spells/305.png (100%) rename {resources => addons/tCrossBar/resources}/spells/306.png (100%) rename {resources => addons/tCrossBar/resources}/spells/307.png (100%) rename {resources => addons/tCrossBar/resources}/spells/308.png (100%) rename {resources => addons/tCrossBar/resources}/spells/309.png (100%) rename {resources => addons/tCrossBar/resources}/spells/31.png (100%) rename {resources => addons/tCrossBar/resources}/spells/310.png (100%) rename {resources => addons/tCrossBar/resources}/spells/311.png (100%) rename {resources => addons/tCrossBar/resources}/spells/312.png (100%) rename {resources => addons/tCrossBar/resources}/spells/313.png (100%) rename {resources => addons/tCrossBar/resources}/spells/314.png (100%) rename {resources => addons/tCrossBar/resources}/spells/315.png (100%) rename {resources => addons/tCrossBar/resources}/spells/316.png (100%) rename {resources => addons/tCrossBar/resources}/spells/317.png (100%) rename {resources => addons/tCrossBar/resources}/spells/318.png (100%) rename {resources => addons/tCrossBar/resources}/spells/319.png (100%) rename {resources => addons/tCrossBar/resources}/spells/32.png (100%) rename {resources => addons/tCrossBar/resources}/spells/320.png (100%) rename {resources => addons/tCrossBar/resources}/spells/321.png (100%) rename {resources => addons/tCrossBar/resources}/spells/322.png (100%) rename {resources => addons/tCrossBar/resources}/spells/323.png (100%) rename {resources => addons/tCrossBar/resources}/spells/324.png (100%) rename {resources => addons/tCrossBar/resources}/spells/325.png (100%) rename {resources => addons/tCrossBar/resources}/spells/326.png (100%) rename {resources => addons/tCrossBar/resources}/spells/327.png (100%) rename {resources => addons/tCrossBar/resources}/spells/328.png (100%) rename {resources => addons/tCrossBar/resources}/spells/329.png (100%) rename {resources => addons/tCrossBar/resources}/spells/33.png (100%) rename {resources => addons/tCrossBar/resources}/spells/330.png (100%) rename {resources => addons/tCrossBar/resources}/spells/331.png (100%) rename {resources => addons/tCrossBar/resources}/spells/332.png (100%) rename {resources => addons/tCrossBar/resources}/spells/333.png (100%) rename {resources => addons/tCrossBar/resources}/spells/334.png (100%) rename {resources => addons/tCrossBar/resources}/spells/335.png (100%) rename {resources => addons/tCrossBar/resources}/spells/336.png (100%) rename {resources => addons/tCrossBar/resources}/spells/337.png (100%) rename {resources => addons/tCrossBar/resources}/spells/338.png (100%) rename {resources => addons/tCrossBar/resources}/spells/339.png (100%) rename {resources => addons/tCrossBar/resources}/spells/34.png (100%) rename {resources => addons/tCrossBar/resources}/spells/340.png (100%) rename {resources => addons/tCrossBar/resources}/spells/341.png (100%) rename {resources => addons/tCrossBar/resources}/spells/342.png (100%) rename {resources => addons/tCrossBar/resources}/spells/343.png (100%) rename {resources => addons/tCrossBar/resources}/spells/344.png (100%) rename {resources => addons/tCrossBar/resources}/spells/345.png (100%) rename {resources => addons/tCrossBar/resources}/spells/346.png (100%) rename {resources => addons/tCrossBar/resources}/spells/347.png (100%) rename {resources => addons/tCrossBar/resources}/spells/348.png (100%) rename {resources => addons/tCrossBar/resources}/spells/349.png (100%) rename {resources => addons/tCrossBar/resources}/spells/35.png (100%) rename {resources => addons/tCrossBar/resources}/spells/350.png (100%) rename {resources => addons/tCrossBar/resources}/spells/351.png (100%) rename {resources => addons/tCrossBar/resources}/spells/352.png (100%) rename {resources => addons/tCrossBar/resources}/spells/353.png (100%) rename {resources => addons/tCrossBar/resources}/spells/354.png (100%) rename {resources => addons/tCrossBar/resources}/spells/355.png (100%) rename {resources => addons/tCrossBar/resources}/spells/356.png (100%) rename {resources => addons/tCrossBar/resources}/spells/357.png (100%) rename {resources => addons/tCrossBar/resources}/spells/358.png (100%) rename {resources => addons/tCrossBar/resources}/spells/359.png (100%) rename {resources => addons/tCrossBar/resources}/spells/36.png (100%) rename {resources => addons/tCrossBar/resources}/spells/360.png (100%) rename {resources => addons/tCrossBar/resources}/spells/361.png (100%) rename {resources => addons/tCrossBar/resources}/spells/362.png (100%) rename {resources => addons/tCrossBar/resources}/spells/363.png (100%) rename {resources => addons/tCrossBar/resources}/spells/364.png (100%) rename {resources => addons/tCrossBar/resources}/spells/365.png (100%) rename {resources => addons/tCrossBar/resources}/spells/366.png (100%) rename {resources => addons/tCrossBar/resources}/spells/368.png (100%) rename {resources => addons/tCrossBar/resources}/spells/369.png (100%) rename {resources => addons/tCrossBar/resources}/spells/37.png (100%) rename {resources => addons/tCrossBar/resources}/spells/370.png (100%) rename {resources => addons/tCrossBar/resources}/spells/371.png (100%) rename {resources => addons/tCrossBar/resources}/spells/372.png (100%) rename {resources => addons/tCrossBar/resources}/spells/373.png (100%) rename {resources => addons/tCrossBar/resources}/spells/374.png (100%) rename {resources => addons/tCrossBar/resources}/spells/375.png (100%) rename {resources => addons/tCrossBar/resources}/spells/376.png (100%) rename {resources => addons/tCrossBar/resources}/spells/377.png (100%) rename {resources => addons/tCrossBar/resources}/spells/378.png (100%) rename {resources => addons/tCrossBar/resources}/spells/379.png (100%) rename {resources => addons/tCrossBar/resources}/spells/38.png (100%) rename {resources => addons/tCrossBar/resources}/spells/380.png (100%) rename {resources => addons/tCrossBar/resources}/spells/381.png (100%) rename {resources => addons/tCrossBar/resources}/spells/382.png (100%) rename {resources => addons/tCrossBar/resources}/spells/383.png (100%) rename {resources => addons/tCrossBar/resources}/spells/384.png (100%) rename {resources => addons/tCrossBar/resources}/spells/385.png (100%) rename {resources => addons/tCrossBar/resources}/spells/386.png (100%) rename {resources => addons/tCrossBar/resources}/spells/387.png (100%) rename {resources => addons/tCrossBar/resources}/spells/388.png (100%) rename {resources => addons/tCrossBar/resources}/spells/389.png (100%) rename {resources => addons/tCrossBar/resources}/spells/39.png (100%) rename {resources => addons/tCrossBar/resources}/spells/390.png (100%) rename {resources => addons/tCrossBar/resources}/spells/391.png (100%) rename {resources => addons/tCrossBar/resources}/spells/392.png (100%) rename {resources => addons/tCrossBar/resources}/spells/393.png (100%) rename {resources => addons/tCrossBar/resources}/spells/394.png (100%) rename {resources => addons/tCrossBar/resources}/spells/395.png (100%) rename {resources => addons/tCrossBar/resources}/spells/396.png (100%) rename {resources => addons/tCrossBar/resources}/spells/397.png (100%) rename {resources => addons/tCrossBar/resources}/spells/398.png (100%) rename {resources => addons/tCrossBar/resources}/spells/399.png (100%) rename {resources => addons/tCrossBar/resources}/spells/4.png (100%) rename {resources => addons/tCrossBar/resources}/spells/40.png (100%) rename {resources => addons/tCrossBar/resources}/spells/400.png (100%) rename {resources => addons/tCrossBar/resources}/spells/401.png (100%) rename {resources => addons/tCrossBar/resources}/spells/402.png (100%) rename {resources => addons/tCrossBar/resources}/spells/403.png (100%) rename {resources => addons/tCrossBar/resources}/spells/404.png (100%) rename {resources => addons/tCrossBar/resources}/spells/405.png (100%) rename {resources => addons/tCrossBar/resources}/spells/406.png (100%) rename {resources => addons/tCrossBar/resources}/spells/407.png (100%) rename {resources => addons/tCrossBar/resources}/spells/408.png (100%) rename {resources => addons/tCrossBar/resources}/spells/409.png (100%) rename {resources => addons/tCrossBar/resources}/spells/41.png (100%) rename {resources => addons/tCrossBar/resources}/spells/410.png (100%) rename {resources => addons/tCrossBar/resources}/spells/411.png (100%) rename {resources => addons/tCrossBar/resources}/spells/412.png (100%) rename {resources => addons/tCrossBar/resources}/spells/413.png (100%) rename {resources => addons/tCrossBar/resources}/spells/414.png (100%) rename {resources => addons/tCrossBar/resources}/spells/415.png (100%) rename {resources => addons/tCrossBar/resources}/spells/416.png (100%) rename {resources => addons/tCrossBar/resources}/spells/417.png (100%) rename {resources => addons/tCrossBar/resources}/spells/418.png (100%) rename {resources => addons/tCrossBar/resources}/spells/419.png (100%) rename {resources => addons/tCrossBar/resources}/spells/42.png (100%) rename {resources => addons/tCrossBar/resources}/spells/420.png (100%) rename {resources => addons/tCrossBar/resources}/spells/421.png (100%) rename {resources => addons/tCrossBar/resources}/spells/422.png (100%) rename {resources => addons/tCrossBar/resources}/spells/423.png (100%) rename {resources => addons/tCrossBar/resources}/spells/424.png (100%) rename {resources => addons/tCrossBar/resources}/spells/425.png (100%) rename {resources => addons/tCrossBar/resources}/spells/426.png (100%) rename {resources => addons/tCrossBar/resources}/spells/427.png (100%) rename {resources => addons/tCrossBar/resources}/spells/428.png (100%) rename {resources => addons/tCrossBar/resources}/spells/429.png (100%) rename {resources => addons/tCrossBar/resources}/spells/43.png (100%) rename {resources => addons/tCrossBar/resources}/spells/430.png (100%) rename {resources => addons/tCrossBar/resources}/spells/431.png (100%) rename {resources => addons/tCrossBar/resources}/spells/432.png (100%) rename {resources => addons/tCrossBar/resources}/spells/433.png (100%) rename {resources => addons/tCrossBar/resources}/spells/434.png (100%) rename {resources => addons/tCrossBar/resources}/spells/435.png (100%) rename {resources => addons/tCrossBar/resources}/spells/436.png (100%) rename {resources => addons/tCrossBar/resources}/spells/437.png (100%) rename {resources => addons/tCrossBar/resources}/spells/438.png (100%) rename {resources => addons/tCrossBar/resources}/spells/439.png (100%) rename {resources => addons/tCrossBar/resources}/spells/44.png (100%) rename {resources => addons/tCrossBar/resources}/spells/440.png (100%) rename {resources => addons/tCrossBar/resources}/spells/441.png (100%) rename {resources => addons/tCrossBar/resources}/spells/442.png (100%) rename {resources => addons/tCrossBar/resources}/spells/443.png (100%) rename {resources => addons/tCrossBar/resources}/spells/444.png (100%) rename {resources => addons/tCrossBar/resources}/spells/445.png (100%) rename {resources => addons/tCrossBar/resources}/spells/446.png (100%) rename {resources => addons/tCrossBar/resources}/spells/447.png (100%) rename {resources => addons/tCrossBar/resources}/spells/448.png (100%) rename {resources => addons/tCrossBar/resources}/spells/449.png (100%) rename {resources => addons/tCrossBar/resources}/spells/45.png (100%) rename {resources => addons/tCrossBar/resources}/spells/450.png (100%) rename {resources => addons/tCrossBar/resources}/spells/451.png (100%) rename {resources => addons/tCrossBar/resources}/spells/452.png (100%) rename {resources => addons/tCrossBar/resources}/spells/453.png (100%) rename {resources => addons/tCrossBar/resources}/spells/454.png (100%) rename {resources => addons/tCrossBar/resources}/spells/455.png (100%) rename {resources => addons/tCrossBar/resources}/spells/456.png (100%) rename {resources => addons/tCrossBar/resources}/spells/457.png (100%) rename {resources => addons/tCrossBar/resources}/spells/458.png (100%) rename {resources => addons/tCrossBar/resources}/spells/459.png (100%) rename {resources => addons/tCrossBar/resources}/spells/46.png (100%) rename {resources => addons/tCrossBar/resources}/spells/460.png (100%) rename {resources => addons/tCrossBar/resources}/spells/461.png (100%) rename {resources => addons/tCrossBar/resources}/spells/462.png (100%) rename {resources => addons/tCrossBar/resources}/spells/463.png (100%) rename {resources => addons/tCrossBar/resources}/spells/464.png (100%) rename {resources => addons/tCrossBar/resources}/spells/465.png (100%) rename {resources => addons/tCrossBar/resources}/spells/466.png (100%) rename {resources => addons/tCrossBar/resources}/spells/467.png (100%) rename {resources => addons/tCrossBar/resources}/spells/468.png (100%) rename {resources => addons/tCrossBar/resources}/spells/469.png (100%) rename {resources => addons/tCrossBar/resources}/spells/47.png (100%) rename {resources => addons/tCrossBar/resources}/spells/470.png (100%) rename {resources => addons/tCrossBar/resources}/spells/471.png (100%) rename {resources => addons/tCrossBar/resources}/spells/472.png (100%) rename {resources => addons/tCrossBar/resources}/spells/473.png (100%) rename {resources => addons/tCrossBar/resources}/spells/474.png (100%) rename {resources => addons/tCrossBar/resources}/spells/475.png (100%) rename {resources => addons/tCrossBar/resources}/spells/476.png (100%) rename {resources => addons/tCrossBar/resources}/spells/477.png (100%) rename {resources => addons/tCrossBar/resources}/spells/478.png (100%) rename {resources => addons/tCrossBar/resources}/spells/479.png (100%) rename {resources => addons/tCrossBar/resources}/spells/48.png (100%) rename {resources => addons/tCrossBar/resources}/spells/480.png (100%) rename {resources => addons/tCrossBar/resources}/spells/481.png (100%) rename {resources => addons/tCrossBar/resources}/spells/482.png (100%) rename {resources => addons/tCrossBar/resources}/spells/483.png (100%) rename {resources => addons/tCrossBar/resources}/spells/484.png (100%) rename {resources => addons/tCrossBar/resources}/spells/485.png (100%) rename {resources => addons/tCrossBar/resources}/spells/486.png (100%) rename {resources => addons/tCrossBar/resources}/spells/487.png (100%) rename {resources => addons/tCrossBar/resources}/spells/488.png (100%) rename {resources => addons/tCrossBar/resources}/spells/489.png (100%) rename {resources => addons/tCrossBar/resources}/spells/49.png (100%) rename {resources => addons/tCrossBar/resources}/spells/490.png (100%) rename {resources => addons/tCrossBar/resources}/spells/491.png (100%) rename {resources => addons/tCrossBar/resources}/spells/492.png (100%) rename {resources => addons/tCrossBar/resources}/spells/493.png (100%) rename {resources => addons/tCrossBar/resources}/spells/494.png (100%) rename {resources => addons/tCrossBar/resources}/spells/495.png (100%) rename {resources => addons/tCrossBar/resources}/spells/496.png (100%) rename {resources => addons/tCrossBar/resources}/spells/497.png (100%) rename {resources => addons/tCrossBar/resources}/spells/498.png (100%) rename {resources => addons/tCrossBar/resources}/spells/499.png (100%) rename {resources => addons/tCrossBar/resources}/spells/5.png (100%) rename {resources => addons/tCrossBar/resources}/spells/50.png (100%) rename {resources => addons/tCrossBar/resources}/spells/500.png (100%) rename {resources => addons/tCrossBar/resources}/spells/501.png (100%) rename {resources => addons/tCrossBar/resources}/spells/502.png (100%) rename {resources => addons/tCrossBar/resources}/spells/503.png (100%) rename {resources => addons/tCrossBar/resources}/spells/504.png (100%) rename {resources => addons/tCrossBar/resources}/spells/505.png (100%) rename {resources => addons/tCrossBar/resources}/spells/506.png (100%) rename {resources => addons/tCrossBar/resources}/spells/507.png (100%) rename {resources => addons/tCrossBar/resources}/spells/508.png (100%) rename {resources => addons/tCrossBar/resources}/spells/509.png (100%) rename {resources => addons/tCrossBar/resources}/spells/51.png (100%) rename {resources => addons/tCrossBar/resources}/spells/510.png (100%) rename {resources => addons/tCrossBar/resources}/spells/511.png (100%) rename {resources => addons/tCrossBar/resources}/spells/513.png (100%) rename {resources => addons/tCrossBar/resources}/spells/515.png (100%) rename {resources => addons/tCrossBar/resources}/spells/517.png (100%) rename {resources => addons/tCrossBar/resources}/spells/519.png (100%) rename {resources => addons/tCrossBar/resources}/spells/52.png (100%) rename {resources => addons/tCrossBar/resources}/spells/521.png (100%) rename {resources => addons/tCrossBar/resources}/spells/522.png (100%) rename {resources => addons/tCrossBar/resources}/spells/524.png (100%) rename {resources => addons/tCrossBar/resources}/spells/527.png (100%) rename {resources => addons/tCrossBar/resources}/spells/529.png (100%) rename {resources => addons/tCrossBar/resources}/spells/53.png (100%) rename {resources => addons/tCrossBar/resources}/spells/530.png (100%) rename {resources => addons/tCrossBar/resources}/spells/531.png (100%) rename {resources => addons/tCrossBar/resources}/spells/532.png (100%) rename {resources => addons/tCrossBar/resources}/spells/533.png (100%) rename {resources => addons/tCrossBar/resources}/spells/534.png (100%) rename {resources => addons/tCrossBar/resources}/spells/535.png (100%) rename {resources => addons/tCrossBar/resources}/spells/536.png (100%) rename {resources => addons/tCrossBar/resources}/spells/537.png (100%) rename {resources => addons/tCrossBar/resources}/spells/538.png (100%) rename {resources => addons/tCrossBar/resources}/spells/539.png (100%) rename {resources => addons/tCrossBar/resources}/spells/54.png (100%) rename {resources => addons/tCrossBar/resources}/spells/540.png (100%) rename {resources => addons/tCrossBar/resources}/spells/541.png (100%) rename {resources => addons/tCrossBar/resources}/spells/542.png (100%) rename {resources => addons/tCrossBar/resources}/spells/543.png (100%) rename {resources => addons/tCrossBar/resources}/spells/544.png (100%) rename {resources => addons/tCrossBar/resources}/spells/545.png (100%) rename {resources => addons/tCrossBar/resources}/spells/547.png (100%) rename {resources => addons/tCrossBar/resources}/spells/548.png (100%) rename {resources => addons/tCrossBar/resources}/spells/549.png (100%) rename {resources => addons/tCrossBar/resources}/spells/55.png (100%) rename {resources => addons/tCrossBar/resources}/spells/551.png (100%) rename {resources => addons/tCrossBar/resources}/spells/554.png (100%) rename {resources => addons/tCrossBar/resources}/spells/555.png (100%) rename {resources => addons/tCrossBar/resources}/spells/557.png (100%) rename {resources => addons/tCrossBar/resources}/spells/56.png (100%) rename {resources => addons/tCrossBar/resources}/spells/560.png (100%) rename {resources => addons/tCrossBar/resources}/spells/561.png (100%) rename {resources => addons/tCrossBar/resources}/spells/563.png (100%) rename {resources => addons/tCrossBar/resources}/spells/564.png (100%) rename {resources => addons/tCrossBar/resources}/spells/565.png (100%) rename {resources => addons/tCrossBar/resources}/spells/567.png (100%) rename {resources => addons/tCrossBar/resources}/spells/569.png (100%) rename {resources => addons/tCrossBar/resources}/spells/57.png (100%) rename {resources => addons/tCrossBar/resources}/spells/570.png (100%) rename {resources => addons/tCrossBar/resources}/spells/572.png (100%) rename {resources => addons/tCrossBar/resources}/spells/573.png (100%) rename {resources => addons/tCrossBar/resources}/spells/574.png (100%) rename {resources => addons/tCrossBar/resources}/spells/575.png (100%) rename {resources => addons/tCrossBar/resources}/spells/576.png (100%) rename {resources => addons/tCrossBar/resources}/spells/577.png (100%) rename {resources => addons/tCrossBar/resources}/spells/578.png (100%) rename {resources => addons/tCrossBar/resources}/spells/579.png (100%) rename {resources => addons/tCrossBar/resources}/spells/58.png (100%) rename {resources => addons/tCrossBar/resources}/spells/581.png (100%) rename {resources => addons/tCrossBar/resources}/spells/582.png (100%) rename {resources => addons/tCrossBar/resources}/spells/584.png (100%) rename {resources => addons/tCrossBar/resources}/spells/585.png (100%) rename {resources => addons/tCrossBar/resources}/spells/587.png (100%) rename {resources => addons/tCrossBar/resources}/spells/588.png (100%) rename {resources => addons/tCrossBar/resources}/spells/589.png (100%) rename {resources => addons/tCrossBar/resources}/spells/59.png (100%) rename {resources => addons/tCrossBar/resources}/spells/591.png (100%) rename {resources => addons/tCrossBar/resources}/spells/592.png (100%) rename {resources => addons/tCrossBar/resources}/spells/593.png (100%) rename {resources => addons/tCrossBar/resources}/spells/594.png (100%) rename {resources => addons/tCrossBar/resources}/spells/595.png (100%) rename {resources => addons/tCrossBar/resources}/spells/596.png (100%) rename {resources => addons/tCrossBar/resources}/spells/597.png (100%) rename {resources => addons/tCrossBar/resources}/spells/598.png (100%) rename {resources => addons/tCrossBar/resources}/spells/599.png (100%) rename {resources => addons/tCrossBar/resources}/spells/6.png (100%) rename {resources => addons/tCrossBar/resources}/spells/60.png (100%) rename {resources => addons/tCrossBar/resources}/spells/603.png (100%) rename {resources => addons/tCrossBar/resources}/spells/604.png (100%) rename {resources => addons/tCrossBar/resources}/spells/605.png (100%) rename {resources => addons/tCrossBar/resources}/spells/606.png (100%) rename {resources => addons/tCrossBar/resources}/spells/608.png (100%) rename {resources => addons/tCrossBar/resources}/spells/61.png (100%) rename {resources => addons/tCrossBar/resources}/spells/610.png (100%) rename {resources => addons/tCrossBar/resources}/spells/611.png (100%) rename {resources => addons/tCrossBar/resources}/spells/612.png (100%) rename {resources => addons/tCrossBar/resources}/spells/613.png (100%) rename {resources => addons/tCrossBar/resources}/spells/614.png (100%) rename {resources => addons/tCrossBar/resources}/spells/615.png (100%) rename {resources => addons/tCrossBar/resources}/spells/616.png (100%) rename {resources => addons/tCrossBar/resources}/spells/617.png (100%) rename {resources => addons/tCrossBar/resources}/spells/618.png (100%) rename {resources => addons/tCrossBar/resources}/spells/62.png (100%) rename {resources => addons/tCrossBar/resources}/spells/620.png (100%) rename {resources => addons/tCrossBar/resources}/spells/621.png (100%) rename {resources => addons/tCrossBar/resources}/spells/622.png (100%) rename {resources => addons/tCrossBar/resources}/spells/623.png (100%) rename {resources => addons/tCrossBar/resources}/spells/626.png (100%) rename {resources => addons/tCrossBar/resources}/spells/628.png (100%) rename {resources => addons/tCrossBar/resources}/spells/629.png (100%) rename {resources => addons/tCrossBar/resources}/spells/63.png (100%) rename {resources => addons/tCrossBar/resources}/spells/631.png (100%) rename {resources => addons/tCrossBar/resources}/spells/632.png (100%) rename {resources => addons/tCrossBar/resources}/spells/633.png (100%) rename {resources => addons/tCrossBar/resources}/spells/634.png (100%) rename {resources => addons/tCrossBar/resources}/spells/636.png (100%) rename {resources => addons/tCrossBar/resources}/spells/637.png (100%) rename {resources => addons/tCrossBar/resources}/spells/638.png (100%) rename {resources => addons/tCrossBar/resources}/spells/64.png (100%) rename {resources => addons/tCrossBar/resources}/spells/640.png (100%) rename {resources => addons/tCrossBar/resources}/spells/641.png (100%) rename {resources => addons/tCrossBar/resources}/spells/642.png (100%) rename {resources => addons/tCrossBar/resources}/spells/643.png (100%) rename {resources => addons/tCrossBar/resources}/spells/644.png (100%) rename {resources => addons/tCrossBar/resources}/spells/645.png (100%) rename {resources => addons/tCrossBar/resources}/spells/646.png (100%) rename {resources => addons/tCrossBar/resources}/spells/647.png (100%) rename {resources => addons/tCrossBar/resources}/spells/648.png (100%) rename {resources => addons/tCrossBar/resources}/spells/65.png (100%) rename {resources => addons/tCrossBar/resources}/spells/650.png (100%) rename {resources => addons/tCrossBar/resources}/spells/651.png (100%) rename {resources => addons/tCrossBar/resources}/spells/652.png (100%) rename {resources => addons/tCrossBar/resources}/spells/653.png (100%) rename {resources => addons/tCrossBar/resources}/spells/654.png (100%) rename {resources => addons/tCrossBar/resources}/spells/655.png (100%) rename {resources => addons/tCrossBar/resources}/spells/656.png (100%) rename {resources => addons/tCrossBar/resources}/spells/657.png (100%) rename {resources => addons/tCrossBar/resources}/spells/658.png (100%) rename {resources => addons/tCrossBar/resources}/spells/659.png (100%) rename {resources => addons/tCrossBar/resources}/spells/66.png (100%) rename {resources => addons/tCrossBar/resources}/spells/660.png (100%) rename {resources => addons/tCrossBar/resources}/spells/661.png (100%) rename {resources => addons/tCrossBar/resources}/spells/662.png (100%) rename {resources => addons/tCrossBar/resources}/spells/663.png (100%) rename {resources => addons/tCrossBar/resources}/spells/664.png (100%) rename {resources => addons/tCrossBar/resources}/spells/665.png (100%) rename {resources => addons/tCrossBar/resources}/spells/666.png (100%) rename {resources => addons/tCrossBar/resources}/spells/667.png (100%) rename {resources => addons/tCrossBar/resources}/spells/668.png (100%) rename {resources => addons/tCrossBar/resources}/spells/669.png (100%) rename {resources => addons/tCrossBar/resources}/spells/67.png (100%) rename {resources => addons/tCrossBar/resources}/spells/670.png (100%) rename {resources => addons/tCrossBar/resources}/spells/671.png (100%) rename {resources => addons/tCrossBar/resources}/spells/672.png (100%) rename {resources => addons/tCrossBar/resources}/spells/673.png (100%) rename {resources => addons/tCrossBar/resources}/spells/674.png (100%) rename {resources => addons/tCrossBar/resources}/spells/675.png (100%) rename {resources => addons/tCrossBar/resources}/spells/677.png (100%) rename {resources => addons/tCrossBar/resources}/spells/678.png (100%) rename {resources => addons/tCrossBar/resources}/spells/679.png (100%) rename {resources => addons/tCrossBar/resources}/spells/68.png (100%) rename {resources => addons/tCrossBar/resources}/spells/680.png (100%) rename {resources => addons/tCrossBar/resources}/spells/681.png (100%) rename {resources => addons/tCrossBar/resources}/spells/682.png (100%) rename {resources => addons/tCrossBar/resources}/spells/683.png (100%) rename {resources => addons/tCrossBar/resources}/spells/684.png (100%) rename {resources => addons/tCrossBar/resources}/spells/685.png (100%) rename {resources => addons/tCrossBar/resources}/spells/686.png (100%) rename {resources => addons/tCrossBar/resources}/spells/687.png (100%) rename {resources => addons/tCrossBar/resources}/spells/688.png (100%) rename {resources => addons/tCrossBar/resources}/spells/689.png (100%) rename {resources => addons/tCrossBar/resources}/spells/69.png (100%) rename {resources => addons/tCrossBar/resources}/spells/690.png (100%) rename {resources => addons/tCrossBar/resources}/spells/692.png (100%) rename {resources => addons/tCrossBar/resources}/spells/693.png (100%) rename {resources => addons/tCrossBar/resources}/spells/694.png (100%) rename {resources => addons/tCrossBar/resources}/spells/695.png (100%) rename {resources => addons/tCrossBar/resources}/spells/696.png (100%) rename {resources => addons/tCrossBar/resources}/spells/697.png (100%) rename {resources => addons/tCrossBar/resources}/spells/698.png (100%) rename {resources => addons/tCrossBar/resources}/spells/699.png (100%) rename {resources => addons/tCrossBar/resources}/spells/7.png (100%) rename {resources => addons/tCrossBar/resources}/spells/70.png (100%) rename {resources => addons/tCrossBar/resources}/spells/700.png (100%) rename {resources => addons/tCrossBar/resources}/spells/701.png (100%) rename {resources => addons/tCrossBar/resources}/spells/702.png (100%) rename {resources => addons/tCrossBar/resources}/spells/703.png (100%) rename {resources => addons/tCrossBar/resources}/spells/704.png (100%) rename {resources => addons/tCrossBar/resources}/spells/705.png (100%) rename {resources => addons/tCrossBar/resources}/spells/706.png (100%) rename {resources => addons/tCrossBar/resources}/spells/707.png (100%) rename {resources => addons/tCrossBar/resources}/spells/708.png (100%) rename {resources => addons/tCrossBar/resources}/spells/709.png (100%) rename {resources => addons/tCrossBar/resources}/spells/71.png (100%) rename {resources => addons/tCrossBar/resources}/spells/710.png (100%) rename {resources => addons/tCrossBar/resources}/spells/711.png (100%) rename {resources => addons/tCrossBar/resources}/spells/712.png (100%) rename {resources => addons/tCrossBar/resources}/spells/713.png (100%) rename {resources => addons/tCrossBar/resources}/spells/714.png (100%) rename {resources => addons/tCrossBar/resources}/spells/715.png (100%) rename {resources => addons/tCrossBar/resources}/spells/716.png (100%) rename {resources => addons/tCrossBar/resources}/spells/717.png (100%) rename {resources => addons/tCrossBar/resources}/spells/718.png (100%) rename {resources => addons/tCrossBar/resources}/spells/719.png (100%) rename {resources => addons/tCrossBar/resources}/spells/72.png (100%) rename {resources => addons/tCrossBar/resources}/spells/720.png (100%) rename {resources => addons/tCrossBar/resources}/spells/721.png (100%) rename {resources => addons/tCrossBar/resources}/spells/722.png (100%) rename {resources => addons/tCrossBar/resources}/spells/723.png (100%) rename {resources => addons/tCrossBar/resources}/spells/724.png (100%) rename {resources => addons/tCrossBar/resources}/spells/725.png (100%) rename {resources => addons/tCrossBar/resources}/spells/726.png (100%) rename {resources => addons/tCrossBar/resources}/spells/727.png (100%) rename {resources => addons/tCrossBar/resources}/spells/728.png (100%) rename {resources => addons/tCrossBar/resources}/spells/73.png (100%) rename {resources => addons/tCrossBar/resources}/spells/736.png (100%) rename {resources => addons/tCrossBar/resources}/spells/737.png (100%) rename {resources => addons/tCrossBar/resources}/spells/738.png (100%) rename {resources => addons/tCrossBar/resources}/spells/739.png (100%) rename {resources => addons/tCrossBar/resources}/spells/74.png (100%) rename {resources => addons/tCrossBar/resources}/spells/740.png (100%) rename {resources => addons/tCrossBar/resources}/spells/741.png (100%) rename {resources => addons/tCrossBar/resources}/spells/742.png (100%) rename {resources => addons/tCrossBar/resources}/spells/743.png (100%) rename {resources => addons/tCrossBar/resources}/spells/744.png (100%) rename {resources => addons/tCrossBar/resources}/spells/745.png (100%) rename {resources => addons/tCrossBar/resources}/spells/746.png (100%) rename {resources => addons/tCrossBar/resources}/spells/747.png (100%) rename {resources => addons/tCrossBar/resources}/spells/748.png (100%) rename {resources => addons/tCrossBar/resources}/spells/749.png (100%) rename {resources => addons/tCrossBar/resources}/spells/75.png (100%) rename {resources => addons/tCrossBar/resources}/spells/76.png (100%) rename {resources => addons/tCrossBar/resources}/spells/77.png (100%) rename {resources => addons/tCrossBar/resources}/spells/78.png (100%) rename {resources => addons/tCrossBar/resources}/spells/79.png (100%) rename {resources => addons/tCrossBar/resources}/spells/8.png (100%) rename {resources => addons/tCrossBar/resources}/spells/80.png (100%) rename {resources => addons/tCrossBar/resources}/spells/81.png (100%) rename {resources => addons/tCrossBar/resources}/spells/82.png (100%) rename {resources => addons/tCrossBar/resources}/spells/828.png (100%) rename {resources => addons/tCrossBar/resources}/spells/829.png (100%) rename {resources => addons/tCrossBar/resources}/spells/83.png (100%) rename {resources => addons/tCrossBar/resources}/spells/830.png (100%) rename {resources => addons/tCrossBar/resources}/spells/831.png (100%) rename {resources => addons/tCrossBar/resources}/spells/832.png (100%) rename {resources => addons/tCrossBar/resources}/spells/833.png (100%) rename {resources => addons/tCrossBar/resources}/spells/834.png (100%) rename {resources => addons/tCrossBar/resources}/spells/835.png (100%) rename {resources => addons/tCrossBar/resources}/spells/836.png (100%) rename {resources => addons/tCrossBar/resources}/spells/837.png (100%) rename {resources => addons/tCrossBar/resources}/spells/838.png (100%) rename {resources => addons/tCrossBar/resources}/spells/839.png (100%) rename {resources => addons/tCrossBar/resources}/spells/84.png (100%) rename {resources => addons/tCrossBar/resources}/spells/841.png (100%) rename {resources => addons/tCrossBar/resources}/spells/842.png (100%) rename {resources => addons/tCrossBar/resources}/spells/843.png (100%) rename {resources => addons/tCrossBar/resources}/spells/844.png (100%) rename {resources => addons/tCrossBar/resources}/spells/845.png (100%) rename {resources => addons/tCrossBar/resources}/spells/846.png (100%) rename {resources => addons/tCrossBar/resources}/spells/848.png (100%) rename {resources => addons/tCrossBar/resources}/spells/849.png (100%) rename {resources => addons/tCrossBar/resources}/spells/85.png (100%) rename {resources => addons/tCrossBar/resources}/spells/850.png (100%) rename {resources => addons/tCrossBar/resources}/spells/851.png (100%) rename {resources => addons/tCrossBar/resources}/spells/852.png (100%) rename {resources => addons/tCrossBar/resources}/spells/853.png (100%) rename {resources => addons/tCrossBar/resources}/spells/854.png (100%) rename {resources => addons/tCrossBar/resources}/spells/855.png (100%) rename {resources => addons/tCrossBar/resources}/spells/856.png (100%) rename {resources => addons/tCrossBar/resources}/spells/857.png (100%) rename {resources => addons/tCrossBar/resources}/spells/858.png (100%) rename {resources => addons/tCrossBar/resources}/spells/859.png (100%) rename {resources => addons/tCrossBar/resources}/spells/86.png (100%) rename {resources => addons/tCrossBar/resources}/spells/860.png (100%) rename {resources => addons/tCrossBar/resources}/spells/861.png (100%) rename {resources => addons/tCrossBar/resources}/spells/862.png (100%) rename {resources => addons/tCrossBar/resources}/spells/863.png (100%) rename {resources => addons/tCrossBar/resources}/spells/864.png (100%) rename {resources => addons/tCrossBar/resources}/spells/865.png (100%) rename {resources => addons/tCrossBar/resources}/spells/866.png (100%) rename {resources => addons/tCrossBar/resources}/spells/867.png (100%) rename {resources => addons/tCrossBar/resources}/spells/868.png (100%) rename {resources => addons/tCrossBar/resources}/spells/869.png (100%) rename {resources => addons/tCrossBar/resources}/spells/87.png (100%) rename {resources => addons/tCrossBar/resources}/spells/870.png (100%) rename {resources => addons/tCrossBar/resources}/spells/871.png (100%) rename {resources => addons/tCrossBar/resources}/spells/872.png (100%) rename {resources => addons/tCrossBar/resources}/spells/873.png (100%) rename {resources => addons/tCrossBar/resources}/spells/874.png (100%) rename {resources => addons/tCrossBar/resources}/spells/875.png (100%) rename {resources => addons/tCrossBar/resources}/spells/876.png (100%) rename {resources => addons/tCrossBar/resources}/spells/877.png (100%) rename {resources => addons/tCrossBar/resources}/spells/878.png (100%) rename {resources => addons/tCrossBar/resources}/spells/879.png (100%) rename {resources => addons/tCrossBar/resources}/spells/88.png (100%) rename {resources => addons/tCrossBar/resources}/spells/880.png (100%) rename {resources => addons/tCrossBar/resources}/spells/881.png (100%) rename {resources => addons/tCrossBar/resources}/spells/882.png (100%) rename {resources => addons/tCrossBar/resources}/spells/883.png (100%) rename {resources => addons/tCrossBar/resources}/spells/884.png (100%) rename {resources => addons/tCrossBar/resources}/spells/885.png (100%) rename {resources => addons/tCrossBar/resources}/spells/886.png (100%) rename {resources => addons/tCrossBar/resources}/spells/887.png (100%) rename {resources => addons/tCrossBar/resources}/spells/888.png (100%) rename {resources => addons/tCrossBar/resources}/spells/889.png (100%) rename {resources => addons/tCrossBar/resources}/spells/89.png (100%) rename {resources => addons/tCrossBar/resources}/spells/890.png (100%) rename {resources => addons/tCrossBar/resources}/spells/891.png (100%) rename {resources => addons/tCrossBar/resources}/spells/892.png (100%) rename {resources => addons/tCrossBar/resources}/spells/894.png (100%) rename {resources => addons/tCrossBar/resources}/spells/895.png (100%) rename {resources => addons/tCrossBar/resources}/spells/896.png (100%) rename {resources => addons/tCrossBar/resources}/spells/897.png (100%) rename {resources => addons/tCrossBar/resources}/spells/898.png (100%) rename {resources => addons/tCrossBar/resources}/spells/899.png (100%) rename {resources => addons/tCrossBar/resources}/spells/9.png (100%) rename {resources => addons/tCrossBar/resources}/spells/90.png (100%) rename {resources => addons/tCrossBar/resources}/spells/900.png (100%) rename {resources => addons/tCrossBar/resources}/spells/901.png (100%) rename {resources => addons/tCrossBar/resources}/spells/902.png (100%) rename {resources => addons/tCrossBar/resources}/spells/903.png (100%) rename {resources => addons/tCrossBar/resources}/spells/904.png (100%) rename {resources => addons/tCrossBar/resources}/spells/905.png (100%) rename {resources => addons/tCrossBar/resources}/spells/906.png (100%) rename {resources => addons/tCrossBar/resources}/spells/907.png (100%) rename {resources => addons/tCrossBar/resources}/spells/908.png (100%) rename {resources => addons/tCrossBar/resources}/spells/909.png (100%) rename {resources => addons/tCrossBar/resources}/spells/91.png (100%) rename {resources => addons/tCrossBar/resources}/spells/910.png (100%) rename {resources => addons/tCrossBar/resources}/spells/911.png (100%) rename {resources => addons/tCrossBar/resources}/spells/912.png (100%) rename {resources => addons/tCrossBar/resources}/spells/913.png (100%) rename {resources => addons/tCrossBar/resources}/spells/914.png (100%) rename {resources => addons/tCrossBar/resources}/spells/915.png (100%) rename {resources => addons/tCrossBar/resources}/spells/916.png (100%) rename {resources => addons/tCrossBar/resources}/spells/917.png (100%) rename {resources => addons/tCrossBar/resources}/spells/918.png (100%) rename {resources => addons/tCrossBar/resources}/spells/919.png (100%) rename {resources => addons/tCrossBar/resources}/spells/92.png (100%) rename {resources => addons/tCrossBar/resources}/spells/920.png (100%) rename {resources => addons/tCrossBar/resources}/spells/921.png (100%) rename {resources => addons/tCrossBar/resources}/spells/922.png (100%) rename {resources => addons/tCrossBar/resources}/spells/923.png (100%) rename {resources => addons/tCrossBar/resources}/spells/924.png (100%) rename {resources => addons/tCrossBar/resources}/spells/925.png (100%) rename {resources => addons/tCrossBar/resources}/spells/926.png (100%) rename {resources => addons/tCrossBar/resources}/spells/927.png (100%) rename {resources => addons/tCrossBar/resources}/spells/928.png (100%) rename {resources => addons/tCrossBar/resources}/spells/929.png (100%) rename {resources => addons/tCrossBar/resources}/spells/93.png (100%) rename {resources => addons/tCrossBar/resources}/spells/930.png (100%) rename {resources => addons/tCrossBar/resources}/spells/931.png (100%) rename {resources => addons/tCrossBar/resources}/spells/932.png (100%) rename {resources => addons/tCrossBar/resources}/spells/933.png (100%) rename {resources => addons/tCrossBar/resources}/spells/934.png (100%) rename {resources => addons/tCrossBar/resources}/spells/935.png (100%) rename {resources => addons/tCrossBar/resources}/spells/936.png (100%) rename {resources => addons/tCrossBar/resources}/spells/937.png (100%) rename {resources => addons/tCrossBar/resources}/spells/938.png (100%) rename {resources => addons/tCrossBar/resources}/spells/939.png (100%) rename {resources => addons/tCrossBar/resources}/spells/94.png (100%) rename {resources => addons/tCrossBar/resources}/spells/940.png (100%) rename {resources => addons/tCrossBar/resources}/spells/941.png (100%) rename {resources => addons/tCrossBar/resources}/spells/942.png (100%) rename {resources => addons/tCrossBar/resources}/spells/943.png (100%) rename {resources => addons/tCrossBar/resources}/spells/944.png (100%) rename {resources => addons/tCrossBar/resources}/spells/945.png (100%) rename {resources => addons/tCrossBar/resources}/spells/946.png (100%) rename {resources => addons/tCrossBar/resources}/spells/947.png (100%) rename {resources => addons/tCrossBar/resources}/spells/948.png (100%) rename {resources => addons/tCrossBar/resources}/spells/949.png (100%) rename {resources => addons/tCrossBar/resources}/spells/95.png (100%) rename {resources => addons/tCrossBar/resources}/spells/950.png (100%) rename {resources => addons/tCrossBar/resources}/spells/951.png (100%) rename {resources => addons/tCrossBar/resources}/spells/952.png (100%) rename {resources => addons/tCrossBar/resources}/spells/953.png (100%) rename {resources => addons/tCrossBar/resources}/spells/954.png (100%) rename {resources => addons/tCrossBar/resources}/spells/955.png (100%) rename {resources => addons/tCrossBar/resources}/spells/956.png (100%) rename {resources => addons/tCrossBar/resources}/spells/957.png (100%) rename {resources => addons/tCrossBar/resources}/spells/958.png (100%) rename {resources => addons/tCrossBar/resources}/spells/959.png (100%) rename {resources => addons/tCrossBar/resources}/spells/96.png (100%) rename {resources => addons/tCrossBar/resources}/spells/960.png (100%) rename {resources => addons/tCrossBar/resources}/spells/961.png (100%) rename {resources => addons/tCrossBar/resources}/spells/962.png (100%) rename {resources => addons/tCrossBar/resources}/spells/963.png (100%) rename {resources => addons/tCrossBar/resources}/spells/964.png (100%) rename {resources => addons/tCrossBar/resources}/spells/965.png (100%) rename {resources => addons/tCrossBar/resources}/spells/966.png (100%) rename {resources => addons/tCrossBar/resources}/spells/967.png (100%) rename {resources => addons/tCrossBar/resources}/spells/968.png (100%) rename {resources => addons/tCrossBar/resources}/spells/969.png (100%) rename {resources => addons/tCrossBar/resources}/spells/97.png (100%) rename {resources => addons/tCrossBar/resources}/spells/970.png (100%) rename {resources => addons/tCrossBar/resources}/spells/971.png (100%) rename {resources => addons/tCrossBar/resources}/spells/972.png (100%) rename {resources => addons/tCrossBar/resources}/spells/973.png (100%) rename {resources => addons/tCrossBar/resources}/spells/974.png (100%) rename {resources => addons/tCrossBar/resources}/spells/975.png (100%) rename {resources => addons/tCrossBar/resources}/spells/976.png (100%) rename {resources => addons/tCrossBar/resources}/spells/977.png (100%) rename {resources => addons/tCrossBar/resources}/spells/978.png (100%) rename {resources => addons/tCrossBar/resources}/spells/979.png (100%) rename {resources => addons/tCrossBar/resources}/spells/98.png (100%) rename {resources => addons/tCrossBar/resources}/spells/980.png (100%) rename {resources => addons/tCrossBar/resources}/spells/981.png (100%) rename {resources => addons/tCrossBar/resources}/spells/982.png (100%) rename {resources => addons/tCrossBar/resources}/spells/983.png (100%) rename {resources => addons/tCrossBar/resources}/spells/984.png (100%) rename {resources => addons/tCrossBar/resources}/spells/985.png (100%) rename {resources => addons/tCrossBar/resources}/spells/986.png (100%) rename {resources => addons/tCrossBar/resources}/spells/987.png (100%) rename {resources => addons/tCrossBar/resources}/spells/99.png (100%) rename {resources => addons/tCrossBar/resources}/spells/default.png (100%) rename {resources => addons/tCrossBar/resources}/weaponskills/default.png (100%) rename {resources => addons/tCrossBar/resources}/wsmap.lua (100%) rename singledisplay.lua => addons/tCrossBar/singledisplay.lua (100%) rename {state => addons/tCrossBar/state}/inventory.lua (100%) rename {state => addons/tCrossBar/state}/player.lua (100%) rename {state => addons/tCrossBar/state}/skillchain.lua (100%) rename tCrossBar.lua => addons/tCrossBar/tCrossBar.lua (100%) rename texturecache.lua => addons/tCrossBar/texturecache.lua (100%) rename {updaters => addons/tCrossBar/updaters}/ability.lua (100%) rename {updaters => addons/tCrossBar/updaters}/command.lua (100%) rename {updaters => addons/tCrossBar/updaters}/empty.lua (100%) rename {updaters => addons/tCrossBar/updaters}/item.lua (100%) rename {updaters => addons/tCrossBar/updaters}/spell.lua (100%) rename {updaters => addons/tCrossBar/updaters}/trust.lua (100%) rename {updaters => addons/tCrossBar/updaters}/weaponskill.lua (100%) diff --git a/.gitmodules b/.gitmodules index 755e0ed..904546b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "gdifonts"] - path = gdifonts + path = addons/tCrossBar/gdifonts url = https://github.com/ThornyFFXI/gdifonts diff --git a/bindinggui.lua b/addons/tCrossBar/bindinggui.lua similarity index 100% rename from bindinggui.lua rename to addons/tCrossBar/bindinggui.lua diff --git a/bindings.lua b/addons/tCrossBar/bindings.lua similarity index 99% rename from bindings.lua rename to addons/tCrossBar/bindings.lua index 6542ab2..cfb2837 100644 --- a/bindings.lua +++ b/addons/tCrossBar/bindings.lua @@ -199,7 +199,7 @@ function exposed:GetDisplayText() local paletteCount = #bindings.JobBindings.Palettes; if (paletteCount == 1) then - return bindings.ActivePalette.Name; + return; else return string.format ('%s (%u/%u)', bindings.ActivePalette.Name, bindings.ActivePaletteIndex, paletteCount); end diff --git a/callbacks.lua b/addons/tCrossBar/callbacks.lua similarity index 100% rename from callbacks.lua rename to addons/tCrossBar/callbacks.lua diff --git a/commands.lua b/addons/tCrossBar/commands.lua similarity index 100% rename from commands.lua rename to addons/tCrossBar/commands.lua diff --git a/configgui.lua b/addons/tCrossBar/configgui.lua similarity index 100% rename from configgui.lua rename to addons/tCrossBar/configgui.lua diff --git a/controller.lua b/addons/tCrossBar/controller.lua similarity index 100% rename from controller.lua rename to addons/tCrossBar/controller.lua diff --git a/doubledisplay.lua b/addons/tCrossBar/doubledisplay.lua similarity index 100% rename from doubledisplay.lua rename to addons/tCrossBar/doubledisplay.lua diff --git a/element.lua b/addons/tCrossBar/element.lua similarity index 100% rename from element.lua rename to addons/tCrossBar/element.lua diff --git a/gdifonts b/addons/tCrossBar/gdifonts similarity index 100% rename from gdifonts rename to addons/tCrossBar/gdifonts diff --git a/helpers.lua b/addons/tCrossBar/helpers.lua similarity index 100% rename from helpers.lua rename to addons/tCrossBar/helpers.lua diff --git a/initializer.lua b/addons/tCrossBar/initializer.lua similarity index 100% rename from initializer.lua rename to addons/tCrossBar/initializer.lua diff --git a/interface.lua b/addons/tCrossBar/interface.lua similarity index 100% rename from interface.lua rename to addons/tCrossBar/interface.lua diff --git a/resources/135.png b/addons/tCrossBar/resources/135.png similarity index 100% rename from resources/135.png rename to addons/tCrossBar/resources/135.png diff --git a/resources/16.png b/addons/tCrossBar/resources/16.png similarity index 100% rename from resources/16.png rename to addons/tCrossBar/resources/16.png diff --git a/resources/17.png b/addons/tCrossBar/resources/17.png similarity index 100% rename from resources/17.png rename to addons/tCrossBar/resources/17.png diff --git a/resources/18.png b/addons/tCrossBar/resources/18.png similarity index 100% rename from resources/18.png rename to addons/tCrossBar/resources/18.png diff --git a/resources/181.png b/addons/tCrossBar/resources/181.png similarity index 100% rename from resources/181.png rename to addons/tCrossBar/resources/181.png diff --git a/resources/19.png b/addons/tCrossBar/resources/19.png similarity index 100% rename from resources/19.png rename to addons/tCrossBar/resources/19.png diff --git a/resources/20.png b/addons/tCrossBar/resources/20.png similarity index 100% rename from resources/20.png rename to addons/tCrossBar/resources/20.png diff --git a/resources/21.png b/addons/tCrossBar/resources/21.png similarity index 100% rename from resources/21.png rename to addons/tCrossBar/resources/21.png diff --git a/resources/22.png b/addons/tCrossBar/resources/22.png similarity index 100% rename from resources/22.png rename to addons/tCrossBar/resources/22.png diff --git a/resources/23.png b/addons/tCrossBar/resources/23.png similarity index 100% rename from resources/23.png rename to addons/tCrossBar/resources/23.png diff --git a/resources/24.png b/addons/tCrossBar/resources/24.png similarity index 100% rename from resources/24.png rename to addons/tCrossBar/resources/24.png diff --git a/resources/25.png b/addons/tCrossBar/resources/25.png similarity index 100% rename from resources/25.png rename to addons/tCrossBar/resources/25.png diff --git a/resources/26.png b/addons/tCrossBar/resources/26.png similarity index 100% rename from resources/26.png rename to addons/tCrossBar/resources/26.png diff --git a/resources/27.png b/addons/tCrossBar/resources/27.png similarity index 100% rename from resources/27.png rename to addons/tCrossBar/resources/27.png diff --git a/resources/28.png b/addons/tCrossBar/resources/28.png similarity index 100% rename from resources/28.png rename to addons/tCrossBar/resources/28.png diff --git a/resources/29.png b/addons/tCrossBar/resources/29.png similarity index 100% rename from resources/29.png rename to addons/tCrossBar/resources/29.png diff --git a/resources/30.png b/addons/tCrossBar/resources/30.png similarity index 100% rename from resources/30.png rename to addons/tCrossBar/resources/30.png diff --git a/resources/93.png b/addons/tCrossBar/resources/93.png similarity index 100% rename from resources/93.png rename to addons/tCrossBar/resources/93.png diff --git a/resources/96.png b/addons/tCrossBar/resources/96.png similarity index 100% rename from resources/96.png rename to addons/tCrossBar/resources/96.png diff --git a/resources/abilities/100.png b/addons/tCrossBar/resources/abilities/100.png similarity index 100% rename from resources/abilities/100.png rename to addons/tCrossBar/resources/abilities/100.png diff --git a/resources/abilities/101.png b/addons/tCrossBar/resources/abilities/101.png similarity index 100% rename from resources/abilities/101.png rename to addons/tCrossBar/resources/abilities/101.png diff --git a/resources/abilities/102.png b/addons/tCrossBar/resources/abilities/102.png similarity index 100% rename from resources/abilities/102.png rename to addons/tCrossBar/resources/abilities/102.png diff --git a/resources/abilities/103.png b/addons/tCrossBar/resources/abilities/103.png similarity index 100% rename from resources/abilities/103.png rename to addons/tCrossBar/resources/abilities/103.png diff --git a/resources/abilities/104.png b/addons/tCrossBar/resources/abilities/104.png similarity index 100% rename from resources/abilities/104.png rename to addons/tCrossBar/resources/abilities/104.png diff --git a/resources/abilities/105.png b/addons/tCrossBar/resources/abilities/105.png similarity index 100% rename from resources/abilities/105.png rename to addons/tCrossBar/resources/abilities/105.png diff --git a/resources/abilities/106.png b/addons/tCrossBar/resources/abilities/106.png similarity index 100% rename from resources/abilities/106.png rename to addons/tCrossBar/resources/abilities/106.png diff --git a/resources/abilities/107.png b/addons/tCrossBar/resources/abilities/107.png similarity index 100% rename from resources/abilities/107.png rename to addons/tCrossBar/resources/abilities/107.png diff --git a/resources/abilities/108.png b/addons/tCrossBar/resources/abilities/108.png similarity index 100% rename from resources/abilities/108.png rename to addons/tCrossBar/resources/abilities/108.png diff --git a/resources/abilities/109.png b/addons/tCrossBar/resources/abilities/109.png similarity index 100% rename from resources/abilities/109.png rename to addons/tCrossBar/resources/abilities/109.png diff --git a/resources/abilities/110.png b/addons/tCrossBar/resources/abilities/110.png similarity index 100% rename from resources/abilities/110.png rename to addons/tCrossBar/resources/abilities/110.png diff --git a/resources/abilities/111.png b/addons/tCrossBar/resources/abilities/111.png similarity index 100% rename from resources/abilities/111.png rename to addons/tCrossBar/resources/abilities/111.png diff --git a/resources/abilities/112.png b/addons/tCrossBar/resources/abilities/112.png similarity index 100% rename from resources/abilities/112.png rename to addons/tCrossBar/resources/abilities/112.png diff --git a/resources/abilities/113.png b/addons/tCrossBar/resources/abilities/113.png similarity index 100% rename from resources/abilities/113.png rename to addons/tCrossBar/resources/abilities/113.png diff --git a/resources/abilities/114.png b/addons/tCrossBar/resources/abilities/114.png similarity index 100% rename from resources/abilities/114.png rename to addons/tCrossBar/resources/abilities/114.png diff --git a/resources/abilities/115.png b/addons/tCrossBar/resources/abilities/115.png similarity index 100% rename from resources/abilities/115.png rename to addons/tCrossBar/resources/abilities/115.png diff --git a/resources/abilities/116.png b/addons/tCrossBar/resources/abilities/116.png similarity index 100% rename from resources/abilities/116.png rename to addons/tCrossBar/resources/abilities/116.png diff --git a/resources/abilities/117.png b/addons/tCrossBar/resources/abilities/117.png similarity index 100% rename from resources/abilities/117.png rename to addons/tCrossBar/resources/abilities/117.png diff --git a/resources/abilities/118.png b/addons/tCrossBar/resources/abilities/118.png similarity index 100% rename from resources/abilities/118.png rename to addons/tCrossBar/resources/abilities/118.png diff --git a/resources/abilities/119.png b/addons/tCrossBar/resources/abilities/119.png similarity index 100% rename from resources/abilities/119.png rename to addons/tCrossBar/resources/abilities/119.png diff --git a/resources/abilities/120.png b/addons/tCrossBar/resources/abilities/120.png similarity index 100% rename from resources/abilities/120.png rename to addons/tCrossBar/resources/abilities/120.png diff --git a/resources/abilities/121.png b/addons/tCrossBar/resources/abilities/121.png similarity index 100% rename from resources/abilities/121.png rename to addons/tCrossBar/resources/abilities/121.png diff --git a/resources/abilities/122.png b/addons/tCrossBar/resources/abilities/122.png similarity index 100% rename from resources/abilities/122.png rename to addons/tCrossBar/resources/abilities/122.png diff --git a/resources/abilities/123.png b/addons/tCrossBar/resources/abilities/123.png similarity index 100% rename from resources/abilities/123.png rename to addons/tCrossBar/resources/abilities/123.png diff --git a/resources/abilities/124.png b/addons/tCrossBar/resources/abilities/124.png similarity index 100% rename from resources/abilities/124.png rename to addons/tCrossBar/resources/abilities/124.png diff --git a/resources/abilities/125.png b/addons/tCrossBar/resources/abilities/125.png similarity index 100% rename from resources/abilities/125.png rename to addons/tCrossBar/resources/abilities/125.png diff --git a/resources/abilities/126.png b/addons/tCrossBar/resources/abilities/126.png similarity index 100% rename from resources/abilities/126.png rename to addons/tCrossBar/resources/abilities/126.png diff --git a/resources/abilities/127.png b/addons/tCrossBar/resources/abilities/127.png similarity index 100% rename from resources/abilities/127.png rename to addons/tCrossBar/resources/abilities/127.png diff --git a/resources/abilities/128.png b/addons/tCrossBar/resources/abilities/128.png similarity index 100% rename from resources/abilities/128.png rename to addons/tCrossBar/resources/abilities/128.png diff --git a/resources/abilities/129.png b/addons/tCrossBar/resources/abilities/129.png similarity index 100% rename from resources/abilities/129.png rename to addons/tCrossBar/resources/abilities/129.png diff --git a/resources/abilities/130.png b/addons/tCrossBar/resources/abilities/130.png similarity index 100% rename from resources/abilities/130.png rename to addons/tCrossBar/resources/abilities/130.png diff --git a/resources/abilities/131.png b/addons/tCrossBar/resources/abilities/131.png similarity index 100% rename from resources/abilities/131.png rename to addons/tCrossBar/resources/abilities/131.png diff --git a/resources/abilities/132.png b/addons/tCrossBar/resources/abilities/132.png similarity index 100% rename from resources/abilities/132.png rename to addons/tCrossBar/resources/abilities/132.png diff --git a/resources/abilities/133.png b/addons/tCrossBar/resources/abilities/133.png similarity index 100% rename from resources/abilities/133.png rename to addons/tCrossBar/resources/abilities/133.png diff --git a/resources/abilities/136.png b/addons/tCrossBar/resources/abilities/136.png similarity index 100% rename from resources/abilities/136.png rename to addons/tCrossBar/resources/abilities/136.png diff --git a/resources/abilities/137.png b/addons/tCrossBar/resources/abilities/137.png similarity index 100% rename from resources/abilities/137.png rename to addons/tCrossBar/resources/abilities/137.png diff --git a/resources/abilities/138.png b/addons/tCrossBar/resources/abilities/138.png similarity index 100% rename from resources/abilities/138.png rename to addons/tCrossBar/resources/abilities/138.png diff --git a/resources/abilities/139.png b/addons/tCrossBar/resources/abilities/139.png similarity index 100% rename from resources/abilities/139.png rename to addons/tCrossBar/resources/abilities/139.png diff --git a/resources/abilities/140.png b/addons/tCrossBar/resources/abilities/140.png similarity index 100% rename from resources/abilities/140.png rename to addons/tCrossBar/resources/abilities/140.png diff --git a/resources/abilities/141.png b/addons/tCrossBar/resources/abilities/141.png similarity index 100% rename from resources/abilities/141.png rename to addons/tCrossBar/resources/abilities/141.png diff --git a/resources/abilities/142.png b/addons/tCrossBar/resources/abilities/142.png similarity index 100% rename from resources/abilities/142.png rename to addons/tCrossBar/resources/abilities/142.png diff --git a/resources/abilities/143.png b/addons/tCrossBar/resources/abilities/143.png similarity index 100% rename from resources/abilities/143.png rename to addons/tCrossBar/resources/abilities/143.png diff --git a/resources/abilities/144.png b/addons/tCrossBar/resources/abilities/144.png similarity index 100% rename from resources/abilities/144.png rename to addons/tCrossBar/resources/abilities/144.png diff --git a/resources/abilities/145.png b/addons/tCrossBar/resources/abilities/145.png similarity index 100% rename from resources/abilities/145.png rename to addons/tCrossBar/resources/abilities/145.png diff --git a/resources/abilities/146.png b/addons/tCrossBar/resources/abilities/146.png similarity index 100% rename from resources/abilities/146.png rename to addons/tCrossBar/resources/abilities/146.png diff --git a/resources/abilities/147.png b/addons/tCrossBar/resources/abilities/147.png similarity index 100% rename from resources/abilities/147.png rename to addons/tCrossBar/resources/abilities/147.png diff --git a/resources/abilities/148.png b/addons/tCrossBar/resources/abilities/148.png similarity index 100% rename from resources/abilities/148.png rename to addons/tCrossBar/resources/abilities/148.png diff --git a/resources/abilities/149.png b/addons/tCrossBar/resources/abilities/149.png similarity index 100% rename from resources/abilities/149.png rename to addons/tCrossBar/resources/abilities/149.png diff --git a/resources/abilities/150.png b/addons/tCrossBar/resources/abilities/150.png similarity index 100% rename from resources/abilities/150.png rename to addons/tCrossBar/resources/abilities/150.png diff --git a/resources/abilities/151.png b/addons/tCrossBar/resources/abilities/151.png similarity index 100% rename from resources/abilities/151.png rename to addons/tCrossBar/resources/abilities/151.png diff --git a/resources/abilities/152.png b/addons/tCrossBar/resources/abilities/152.png similarity index 100% rename from resources/abilities/152.png rename to addons/tCrossBar/resources/abilities/152.png diff --git a/resources/abilities/153.png b/addons/tCrossBar/resources/abilities/153.png similarity index 100% rename from resources/abilities/153.png rename to addons/tCrossBar/resources/abilities/153.png diff --git a/resources/abilities/154.png b/addons/tCrossBar/resources/abilities/154.png similarity index 100% rename from resources/abilities/154.png rename to addons/tCrossBar/resources/abilities/154.png diff --git a/resources/abilities/155.png b/addons/tCrossBar/resources/abilities/155.png similarity index 100% rename from resources/abilities/155.png rename to addons/tCrossBar/resources/abilities/155.png diff --git a/resources/abilities/156.png b/addons/tCrossBar/resources/abilities/156.png similarity index 100% rename from resources/abilities/156.png rename to addons/tCrossBar/resources/abilities/156.png diff --git a/resources/abilities/157.png b/addons/tCrossBar/resources/abilities/157.png similarity index 100% rename from resources/abilities/157.png rename to addons/tCrossBar/resources/abilities/157.png diff --git a/resources/abilities/158.png b/addons/tCrossBar/resources/abilities/158.png similarity index 100% rename from resources/abilities/158.png rename to addons/tCrossBar/resources/abilities/158.png diff --git a/resources/abilities/159.png b/addons/tCrossBar/resources/abilities/159.png similarity index 100% rename from resources/abilities/159.png rename to addons/tCrossBar/resources/abilities/159.png diff --git a/resources/abilities/160.png b/addons/tCrossBar/resources/abilities/160.png similarity index 100% rename from resources/abilities/160.png rename to addons/tCrossBar/resources/abilities/160.png diff --git a/resources/abilities/161.png b/addons/tCrossBar/resources/abilities/161.png similarity index 100% rename from resources/abilities/161.png rename to addons/tCrossBar/resources/abilities/161.png diff --git a/resources/abilities/162.png b/addons/tCrossBar/resources/abilities/162.png similarity index 100% rename from resources/abilities/162.png rename to addons/tCrossBar/resources/abilities/162.png diff --git a/resources/abilities/163.png b/addons/tCrossBar/resources/abilities/163.png similarity index 100% rename from resources/abilities/163.png rename to addons/tCrossBar/resources/abilities/163.png diff --git a/resources/abilities/164.png b/addons/tCrossBar/resources/abilities/164.png similarity index 100% rename from resources/abilities/164.png rename to addons/tCrossBar/resources/abilities/164.png diff --git a/resources/abilities/165.png b/addons/tCrossBar/resources/abilities/165.png similarity index 100% rename from resources/abilities/165.png rename to addons/tCrossBar/resources/abilities/165.png diff --git a/resources/abilities/166.png b/addons/tCrossBar/resources/abilities/166.png similarity index 100% rename from resources/abilities/166.png rename to addons/tCrossBar/resources/abilities/166.png diff --git a/resources/abilities/167.png b/addons/tCrossBar/resources/abilities/167.png similarity index 100% rename from resources/abilities/167.png rename to addons/tCrossBar/resources/abilities/167.png diff --git a/resources/abilities/168.png b/addons/tCrossBar/resources/abilities/168.png similarity index 100% rename from resources/abilities/168.png rename to addons/tCrossBar/resources/abilities/168.png diff --git a/resources/abilities/169.png b/addons/tCrossBar/resources/abilities/169.png similarity index 100% rename from resources/abilities/169.png rename to addons/tCrossBar/resources/abilities/169.png diff --git a/resources/abilities/170.png b/addons/tCrossBar/resources/abilities/170.png similarity index 100% rename from resources/abilities/170.png rename to addons/tCrossBar/resources/abilities/170.png diff --git a/resources/abilities/171.png b/addons/tCrossBar/resources/abilities/171.png similarity index 100% rename from resources/abilities/171.png rename to addons/tCrossBar/resources/abilities/171.png diff --git a/resources/abilities/172.png b/addons/tCrossBar/resources/abilities/172.png similarity index 100% rename from resources/abilities/172.png rename to addons/tCrossBar/resources/abilities/172.png diff --git a/resources/abilities/173.png b/addons/tCrossBar/resources/abilities/173.png similarity index 100% rename from resources/abilities/173.png rename to addons/tCrossBar/resources/abilities/173.png diff --git a/resources/abilities/174.png b/addons/tCrossBar/resources/abilities/174.png similarity index 100% rename from resources/abilities/174.png rename to addons/tCrossBar/resources/abilities/174.png diff --git a/resources/abilities/175.png b/addons/tCrossBar/resources/abilities/175.png similarity index 100% rename from resources/abilities/175.png rename to addons/tCrossBar/resources/abilities/175.png diff --git a/resources/abilities/176.png b/addons/tCrossBar/resources/abilities/176.png similarity index 100% rename from resources/abilities/176.png rename to addons/tCrossBar/resources/abilities/176.png diff --git a/resources/abilities/177.png b/addons/tCrossBar/resources/abilities/177.png similarity index 100% rename from resources/abilities/177.png rename to addons/tCrossBar/resources/abilities/177.png diff --git a/resources/abilities/178.png b/addons/tCrossBar/resources/abilities/178.png similarity index 100% rename from resources/abilities/178.png rename to addons/tCrossBar/resources/abilities/178.png diff --git a/resources/abilities/179.png b/addons/tCrossBar/resources/abilities/179.png similarity index 100% rename from resources/abilities/179.png rename to addons/tCrossBar/resources/abilities/179.png diff --git a/resources/abilities/180.png b/addons/tCrossBar/resources/abilities/180.png similarity index 100% rename from resources/abilities/180.png rename to addons/tCrossBar/resources/abilities/180.png diff --git a/resources/abilities/182.png b/addons/tCrossBar/resources/abilities/182.png similarity index 100% rename from resources/abilities/182.png rename to addons/tCrossBar/resources/abilities/182.png diff --git a/resources/abilities/184.png b/addons/tCrossBar/resources/abilities/184.png similarity index 100% rename from resources/abilities/184.png rename to addons/tCrossBar/resources/abilities/184.png diff --git a/resources/abilities/185.png b/addons/tCrossBar/resources/abilities/185.png similarity index 100% rename from resources/abilities/185.png rename to addons/tCrossBar/resources/abilities/185.png diff --git a/resources/abilities/186.png b/addons/tCrossBar/resources/abilities/186.png similarity index 100% rename from resources/abilities/186.png rename to addons/tCrossBar/resources/abilities/186.png diff --git a/resources/abilities/187.png b/addons/tCrossBar/resources/abilities/187.png similarity index 100% rename from resources/abilities/187.png rename to addons/tCrossBar/resources/abilities/187.png diff --git a/resources/abilities/188.png b/addons/tCrossBar/resources/abilities/188.png similarity index 100% rename from resources/abilities/188.png rename to addons/tCrossBar/resources/abilities/188.png diff --git a/resources/abilities/189.png b/addons/tCrossBar/resources/abilities/189.png similarity index 100% rename from resources/abilities/189.png rename to addons/tCrossBar/resources/abilities/189.png diff --git a/resources/abilities/190.png b/addons/tCrossBar/resources/abilities/190.png similarity index 100% rename from resources/abilities/190.png rename to addons/tCrossBar/resources/abilities/190.png diff --git a/resources/abilities/194.png b/addons/tCrossBar/resources/abilities/194.png similarity index 100% rename from resources/abilities/194.png rename to addons/tCrossBar/resources/abilities/194.png diff --git a/resources/abilities/195.png b/addons/tCrossBar/resources/abilities/195.png similarity index 100% rename from resources/abilities/195.png rename to addons/tCrossBar/resources/abilities/195.png diff --git a/resources/abilities/196.png b/addons/tCrossBar/resources/abilities/196.png similarity index 100% rename from resources/abilities/196.png rename to addons/tCrossBar/resources/abilities/196.png diff --git a/resources/abilities/197.png b/addons/tCrossBar/resources/abilities/197.png similarity index 100% rename from resources/abilities/197.png rename to addons/tCrossBar/resources/abilities/197.png diff --git a/resources/abilities/198.png b/addons/tCrossBar/resources/abilities/198.png similarity index 100% rename from resources/abilities/198.png rename to addons/tCrossBar/resources/abilities/198.png diff --git a/resources/abilities/199.png b/addons/tCrossBar/resources/abilities/199.png similarity index 100% rename from resources/abilities/199.png rename to addons/tCrossBar/resources/abilities/199.png diff --git a/resources/abilities/1hr.png b/addons/tCrossBar/resources/abilities/1hr.png similarity index 100% rename from resources/abilities/1hr.png rename to addons/tCrossBar/resources/abilities/1hr.png diff --git a/resources/abilities/200.png b/addons/tCrossBar/resources/abilities/200.png similarity index 100% rename from resources/abilities/200.png rename to addons/tCrossBar/resources/abilities/200.png diff --git a/resources/abilities/201.png b/addons/tCrossBar/resources/abilities/201.png similarity index 100% rename from resources/abilities/201.png rename to addons/tCrossBar/resources/abilities/201.png diff --git a/resources/abilities/202.png b/addons/tCrossBar/resources/abilities/202.png similarity index 100% rename from resources/abilities/202.png rename to addons/tCrossBar/resources/abilities/202.png diff --git a/resources/abilities/203.png b/addons/tCrossBar/resources/abilities/203.png similarity index 100% rename from resources/abilities/203.png rename to addons/tCrossBar/resources/abilities/203.png diff --git a/resources/abilities/204.png b/addons/tCrossBar/resources/abilities/204.png similarity index 100% rename from resources/abilities/204.png rename to addons/tCrossBar/resources/abilities/204.png diff --git a/resources/abilities/205.png b/addons/tCrossBar/resources/abilities/205.png similarity index 100% rename from resources/abilities/205.png rename to addons/tCrossBar/resources/abilities/205.png diff --git a/resources/abilities/206.png b/addons/tCrossBar/resources/abilities/206.png similarity index 100% rename from resources/abilities/206.png rename to addons/tCrossBar/resources/abilities/206.png diff --git a/resources/abilities/207.png b/addons/tCrossBar/resources/abilities/207.png similarity index 100% rename from resources/abilities/207.png rename to addons/tCrossBar/resources/abilities/207.png diff --git a/resources/abilities/208.png b/addons/tCrossBar/resources/abilities/208.png similarity index 100% rename from resources/abilities/208.png rename to addons/tCrossBar/resources/abilities/208.png diff --git a/resources/abilities/209.png b/addons/tCrossBar/resources/abilities/209.png similarity index 100% rename from resources/abilities/209.png rename to addons/tCrossBar/resources/abilities/209.png diff --git a/resources/abilities/211.png b/addons/tCrossBar/resources/abilities/211.png similarity index 100% rename from resources/abilities/211.png rename to addons/tCrossBar/resources/abilities/211.png diff --git a/resources/abilities/212.png b/addons/tCrossBar/resources/abilities/212.png similarity index 100% rename from resources/abilities/212.png rename to addons/tCrossBar/resources/abilities/212.png diff --git a/resources/abilities/213.png b/addons/tCrossBar/resources/abilities/213.png similarity index 100% rename from resources/abilities/213.png rename to addons/tCrossBar/resources/abilities/213.png diff --git a/resources/abilities/214.png b/addons/tCrossBar/resources/abilities/214.png similarity index 100% rename from resources/abilities/214.png rename to addons/tCrossBar/resources/abilities/214.png diff --git a/resources/abilities/215.png b/addons/tCrossBar/resources/abilities/215.png similarity index 100% rename from resources/abilities/215.png rename to addons/tCrossBar/resources/abilities/215.png diff --git a/resources/abilities/216.png b/addons/tCrossBar/resources/abilities/216.png similarity index 100% rename from resources/abilities/216.png rename to addons/tCrossBar/resources/abilities/216.png diff --git a/resources/abilities/217.png b/addons/tCrossBar/resources/abilities/217.png similarity index 100% rename from resources/abilities/217.png rename to addons/tCrossBar/resources/abilities/217.png diff --git a/resources/abilities/218.png b/addons/tCrossBar/resources/abilities/218.png similarity index 100% rename from resources/abilities/218.png rename to addons/tCrossBar/resources/abilities/218.png diff --git a/resources/abilities/219.png b/addons/tCrossBar/resources/abilities/219.png similarity index 100% rename from resources/abilities/219.png rename to addons/tCrossBar/resources/abilities/219.png diff --git a/resources/abilities/220.png b/addons/tCrossBar/resources/abilities/220.png similarity index 100% rename from resources/abilities/220.png rename to addons/tCrossBar/resources/abilities/220.png diff --git a/resources/abilities/221.png b/addons/tCrossBar/resources/abilities/221.png similarity index 100% rename from resources/abilities/221.png rename to addons/tCrossBar/resources/abilities/221.png diff --git a/resources/abilities/222.png b/addons/tCrossBar/resources/abilities/222.png similarity index 100% rename from resources/abilities/222.png rename to addons/tCrossBar/resources/abilities/222.png diff --git a/resources/abilities/223.png b/addons/tCrossBar/resources/abilities/223.png similarity index 100% rename from resources/abilities/223.png rename to addons/tCrossBar/resources/abilities/223.png diff --git a/resources/abilities/224.png b/addons/tCrossBar/resources/abilities/224.png similarity index 100% rename from resources/abilities/224.png rename to addons/tCrossBar/resources/abilities/224.png diff --git a/resources/abilities/225.png b/addons/tCrossBar/resources/abilities/225.png similarity index 100% rename from resources/abilities/225.png rename to addons/tCrossBar/resources/abilities/225.png diff --git a/resources/abilities/226.png b/addons/tCrossBar/resources/abilities/226.png similarity index 100% rename from resources/abilities/226.png rename to addons/tCrossBar/resources/abilities/226.png diff --git a/resources/abilities/227.png b/addons/tCrossBar/resources/abilities/227.png similarity index 100% rename from resources/abilities/227.png rename to addons/tCrossBar/resources/abilities/227.png diff --git a/resources/abilities/228.png b/addons/tCrossBar/resources/abilities/228.png similarity index 100% rename from resources/abilities/228.png rename to addons/tCrossBar/resources/abilities/228.png diff --git a/resources/abilities/229.png b/addons/tCrossBar/resources/abilities/229.png similarity index 100% rename from resources/abilities/229.png rename to addons/tCrossBar/resources/abilities/229.png diff --git a/resources/abilities/230.png b/addons/tCrossBar/resources/abilities/230.png similarity index 100% rename from resources/abilities/230.png rename to addons/tCrossBar/resources/abilities/230.png diff --git a/resources/abilities/232.png b/addons/tCrossBar/resources/abilities/232.png similarity index 100% rename from resources/abilities/232.png rename to addons/tCrossBar/resources/abilities/232.png diff --git a/resources/abilities/233.png b/addons/tCrossBar/resources/abilities/233.png similarity index 100% rename from resources/abilities/233.png rename to addons/tCrossBar/resources/abilities/233.png diff --git a/resources/abilities/234.png b/addons/tCrossBar/resources/abilities/234.png similarity index 100% rename from resources/abilities/234.png rename to addons/tCrossBar/resources/abilities/234.png diff --git a/resources/abilities/235.png b/addons/tCrossBar/resources/abilities/235.png similarity index 100% rename from resources/abilities/235.png rename to addons/tCrossBar/resources/abilities/235.png diff --git a/resources/abilities/236.png b/addons/tCrossBar/resources/abilities/236.png similarity index 100% rename from resources/abilities/236.png rename to addons/tCrossBar/resources/abilities/236.png diff --git a/resources/abilities/237.png b/addons/tCrossBar/resources/abilities/237.png similarity index 100% rename from resources/abilities/237.png rename to addons/tCrossBar/resources/abilities/237.png diff --git a/resources/abilities/238.png b/addons/tCrossBar/resources/abilities/238.png similarity index 100% rename from resources/abilities/238.png rename to addons/tCrossBar/resources/abilities/238.png diff --git a/resources/abilities/239.png b/addons/tCrossBar/resources/abilities/239.png similarity index 100% rename from resources/abilities/239.png rename to addons/tCrossBar/resources/abilities/239.png diff --git a/resources/abilities/240.png b/addons/tCrossBar/resources/abilities/240.png similarity index 100% rename from resources/abilities/240.png rename to addons/tCrossBar/resources/abilities/240.png diff --git a/resources/abilities/241.png b/addons/tCrossBar/resources/abilities/241.png similarity index 100% rename from resources/abilities/241.png rename to addons/tCrossBar/resources/abilities/241.png diff --git a/resources/abilities/242.png b/addons/tCrossBar/resources/abilities/242.png similarity index 100% rename from resources/abilities/242.png rename to addons/tCrossBar/resources/abilities/242.png diff --git a/resources/abilities/243.png b/addons/tCrossBar/resources/abilities/243.png similarity index 100% rename from resources/abilities/243.png rename to addons/tCrossBar/resources/abilities/243.png diff --git a/resources/abilities/244.png b/addons/tCrossBar/resources/abilities/244.png similarity index 100% rename from resources/abilities/244.png rename to addons/tCrossBar/resources/abilities/244.png diff --git a/resources/abilities/245.png b/addons/tCrossBar/resources/abilities/245.png similarity index 100% rename from resources/abilities/245.png rename to addons/tCrossBar/resources/abilities/245.png diff --git a/resources/abilities/246.png b/addons/tCrossBar/resources/abilities/246.png similarity index 100% rename from resources/abilities/246.png rename to addons/tCrossBar/resources/abilities/246.png diff --git a/resources/abilities/247.png b/addons/tCrossBar/resources/abilities/247.png similarity index 100% rename from resources/abilities/247.png rename to addons/tCrossBar/resources/abilities/247.png diff --git a/resources/abilities/248.png b/addons/tCrossBar/resources/abilities/248.png similarity index 100% rename from resources/abilities/248.png rename to addons/tCrossBar/resources/abilities/248.png diff --git a/resources/abilities/249.png b/addons/tCrossBar/resources/abilities/249.png similarity index 100% rename from resources/abilities/249.png rename to addons/tCrossBar/resources/abilities/249.png diff --git a/resources/abilities/250.png b/addons/tCrossBar/resources/abilities/250.png similarity index 100% rename from resources/abilities/250.png rename to addons/tCrossBar/resources/abilities/250.png diff --git a/resources/abilities/251.png b/addons/tCrossBar/resources/abilities/251.png similarity index 100% rename from resources/abilities/251.png rename to addons/tCrossBar/resources/abilities/251.png diff --git a/resources/abilities/252.png b/addons/tCrossBar/resources/abilities/252.png similarity index 100% rename from resources/abilities/252.png rename to addons/tCrossBar/resources/abilities/252.png diff --git a/resources/abilities/253.png b/addons/tCrossBar/resources/abilities/253.png similarity index 100% rename from resources/abilities/253.png rename to addons/tCrossBar/resources/abilities/253.png diff --git a/resources/abilities/254.png b/addons/tCrossBar/resources/abilities/254.png similarity index 100% rename from resources/abilities/254.png rename to addons/tCrossBar/resources/abilities/254.png diff --git a/resources/abilities/255.png b/addons/tCrossBar/resources/abilities/255.png similarity index 100% rename from resources/abilities/255.png rename to addons/tCrossBar/resources/abilities/255.png diff --git a/resources/abilities/256.png b/addons/tCrossBar/resources/abilities/256.png similarity index 100% rename from resources/abilities/256.png rename to addons/tCrossBar/resources/abilities/256.png diff --git a/resources/abilities/257.png b/addons/tCrossBar/resources/abilities/257.png similarity index 100% rename from resources/abilities/257.png rename to addons/tCrossBar/resources/abilities/257.png diff --git a/resources/abilities/258.png b/addons/tCrossBar/resources/abilities/258.png similarity index 100% rename from resources/abilities/258.png rename to addons/tCrossBar/resources/abilities/258.png diff --git a/resources/abilities/259.png b/addons/tCrossBar/resources/abilities/259.png similarity index 100% rename from resources/abilities/259.png rename to addons/tCrossBar/resources/abilities/259.png diff --git a/resources/abilities/260.png b/addons/tCrossBar/resources/abilities/260.png similarity index 100% rename from resources/abilities/260.png rename to addons/tCrossBar/resources/abilities/260.png diff --git a/resources/abilities/261.png b/addons/tCrossBar/resources/abilities/261.png similarity index 100% rename from resources/abilities/261.png rename to addons/tCrossBar/resources/abilities/261.png diff --git a/resources/abilities/263.png b/addons/tCrossBar/resources/abilities/263.png similarity index 100% rename from resources/abilities/263.png rename to addons/tCrossBar/resources/abilities/263.png diff --git a/resources/abilities/264.png b/addons/tCrossBar/resources/abilities/264.png similarity index 100% rename from resources/abilities/264.png rename to addons/tCrossBar/resources/abilities/264.png diff --git a/resources/abilities/265.png b/addons/tCrossBar/resources/abilities/265.png similarity index 100% rename from resources/abilities/265.png rename to addons/tCrossBar/resources/abilities/265.png diff --git a/resources/abilities/266.png b/addons/tCrossBar/resources/abilities/266.png similarity index 100% rename from resources/abilities/266.png rename to addons/tCrossBar/resources/abilities/266.png diff --git a/resources/abilities/267.png b/addons/tCrossBar/resources/abilities/267.png similarity index 100% rename from resources/abilities/267.png rename to addons/tCrossBar/resources/abilities/267.png diff --git a/resources/abilities/269.png b/addons/tCrossBar/resources/abilities/269.png similarity index 100% rename from resources/abilities/269.png rename to addons/tCrossBar/resources/abilities/269.png diff --git a/resources/abilities/270.png b/addons/tCrossBar/resources/abilities/270.png similarity index 100% rename from resources/abilities/270.png rename to addons/tCrossBar/resources/abilities/270.png diff --git a/resources/abilities/271.png b/addons/tCrossBar/resources/abilities/271.png similarity index 100% rename from resources/abilities/271.png rename to addons/tCrossBar/resources/abilities/271.png diff --git a/resources/abilities/272.png b/addons/tCrossBar/resources/abilities/272.png similarity index 100% rename from resources/abilities/272.png rename to addons/tCrossBar/resources/abilities/272.png diff --git a/resources/abilities/273.png b/addons/tCrossBar/resources/abilities/273.png similarity index 100% rename from resources/abilities/273.png rename to addons/tCrossBar/resources/abilities/273.png diff --git a/resources/abilities/274.png b/addons/tCrossBar/resources/abilities/274.png similarity index 100% rename from resources/abilities/274.png rename to addons/tCrossBar/resources/abilities/274.png diff --git a/resources/abilities/275.png b/addons/tCrossBar/resources/abilities/275.png similarity index 100% rename from resources/abilities/275.png rename to addons/tCrossBar/resources/abilities/275.png diff --git a/resources/abilities/276.png b/addons/tCrossBar/resources/abilities/276.png similarity index 100% rename from resources/abilities/276.png rename to addons/tCrossBar/resources/abilities/276.png diff --git a/resources/abilities/277.png b/addons/tCrossBar/resources/abilities/277.png similarity index 100% rename from resources/abilities/277.png rename to addons/tCrossBar/resources/abilities/277.png diff --git a/resources/abilities/278.png b/addons/tCrossBar/resources/abilities/278.png similarity index 100% rename from resources/abilities/278.png rename to addons/tCrossBar/resources/abilities/278.png diff --git a/resources/abilities/279.png b/addons/tCrossBar/resources/abilities/279.png similarity index 100% rename from resources/abilities/279.png rename to addons/tCrossBar/resources/abilities/279.png diff --git a/resources/abilities/280.png b/addons/tCrossBar/resources/abilities/280.png similarity index 100% rename from resources/abilities/280.png rename to addons/tCrossBar/resources/abilities/280.png diff --git a/resources/abilities/281.png b/addons/tCrossBar/resources/abilities/281.png similarity index 100% rename from resources/abilities/281.png rename to addons/tCrossBar/resources/abilities/281.png diff --git a/resources/abilities/282.png b/addons/tCrossBar/resources/abilities/282.png similarity index 100% rename from resources/abilities/282.png rename to addons/tCrossBar/resources/abilities/282.png diff --git a/resources/abilities/283.png b/addons/tCrossBar/resources/abilities/283.png similarity index 100% rename from resources/abilities/283.png rename to addons/tCrossBar/resources/abilities/283.png diff --git a/resources/abilities/284.png b/addons/tCrossBar/resources/abilities/284.png similarity index 100% rename from resources/abilities/284.png rename to addons/tCrossBar/resources/abilities/284.png diff --git a/resources/abilities/285.png b/addons/tCrossBar/resources/abilities/285.png similarity index 100% rename from resources/abilities/285.png rename to addons/tCrossBar/resources/abilities/285.png diff --git a/resources/abilities/286.png b/addons/tCrossBar/resources/abilities/286.png similarity index 100% rename from resources/abilities/286.png rename to addons/tCrossBar/resources/abilities/286.png diff --git a/resources/abilities/287.png b/addons/tCrossBar/resources/abilities/287.png similarity index 100% rename from resources/abilities/287.png rename to addons/tCrossBar/resources/abilities/287.png diff --git a/resources/abilities/288.png b/addons/tCrossBar/resources/abilities/288.png similarity index 100% rename from resources/abilities/288.png rename to addons/tCrossBar/resources/abilities/288.png diff --git a/resources/abilities/291.png b/addons/tCrossBar/resources/abilities/291.png similarity index 100% rename from resources/abilities/291.png rename to addons/tCrossBar/resources/abilities/291.png diff --git a/resources/abilities/292.png b/addons/tCrossBar/resources/abilities/292.png similarity index 100% rename from resources/abilities/292.png rename to addons/tCrossBar/resources/abilities/292.png diff --git a/resources/abilities/293.png b/addons/tCrossBar/resources/abilities/293.png similarity index 100% rename from resources/abilities/293.png rename to addons/tCrossBar/resources/abilities/293.png diff --git a/resources/abilities/295.png b/addons/tCrossBar/resources/abilities/295.png similarity index 100% rename from resources/abilities/295.png rename to addons/tCrossBar/resources/abilities/295.png diff --git a/resources/abilities/296.png b/addons/tCrossBar/resources/abilities/296.png similarity index 100% rename from resources/abilities/296.png rename to addons/tCrossBar/resources/abilities/296.png diff --git a/resources/abilities/297.png b/addons/tCrossBar/resources/abilities/297.png similarity index 100% rename from resources/abilities/297.png rename to addons/tCrossBar/resources/abilities/297.png diff --git a/resources/abilities/298.png b/addons/tCrossBar/resources/abilities/298.png similarity index 100% rename from resources/abilities/298.png rename to addons/tCrossBar/resources/abilities/298.png diff --git a/resources/abilities/301.png b/addons/tCrossBar/resources/abilities/301.png similarity index 100% rename from resources/abilities/301.png rename to addons/tCrossBar/resources/abilities/301.png diff --git a/resources/abilities/302.png b/addons/tCrossBar/resources/abilities/302.png similarity index 100% rename from resources/abilities/302.png rename to addons/tCrossBar/resources/abilities/302.png diff --git a/resources/abilities/303.png b/addons/tCrossBar/resources/abilities/303.png similarity index 100% rename from resources/abilities/303.png rename to addons/tCrossBar/resources/abilities/303.png diff --git a/resources/abilities/304.png b/addons/tCrossBar/resources/abilities/304.png similarity index 100% rename from resources/abilities/304.png rename to addons/tCrossBar/resources/abilities/304.png diff --git a/resources/abilities/305.png b/addons/tCrossBar/resources/abilities/305.png similarity index 100% rename from resources/abilities/305.png rename to addons/tCrossBar/resources/abilities/305.png diff --git a/resources/abilities/309.png b/addons/tCrossBar/resources/abilities/309.png similarity index 100% rename from resources/abilities/309.png rename to addons/tCrossBar/resources/abilities/309.png diff --git a/resources/abilities/31.png b/addons/tCrossBar/resources/abilities/31.png similarity index 100% rename from resources/abilities/31.png rename to addons/tCrossBar/resources/abilities/31.png diff --git a/resources/abilities/310.png b/addons/tCrossBar/resources/abilities/310.png similarity index 100% rename from resources/abilities/310.png rename to addons/tCrossBar/resources/abilities/310.png diff --git a/resources/abilities/312.png b/addons/tCrossBar/resources/abilities/312.png similarity index 100% rename from resources/abilities/312.png rename to addons/tCrossBar/resources/abilities/312.png diff --git a/resources/abilities/313.png b/addons/tCrossBar/resources/abilities/313.png similarity index 100% rename from resources/abilities/313.png rename to addons/tCrossBar/resources/abilities/313.png diff --git a/resources/abilities/314.png b/addons/tCrossBar/resources/abilities/314.png similarity index 100% rename from resources/abilities/314.png rename to addons/tCrossBar/resources/abilities/314.png diff --git a/resources/abilities/316.png b/addons/tCrossBar/resources/abilities/316.png similarity index 100% rename from resources/abilities/316.png rename to addons/tCrossBar/resources/abilities/316.png diff --git a/resources/abilities/317.png b/addons/tCrossBar/resources/abilities/317.png similarity index 100% rename from resources/abilities/317.png rename to addons/tCrossBar/resources/abilities/317.png diff --git a/resources/abilities/318.png b/addons/tCrossBar/resources/abilities/318.png similarity index 100% rename from resources/abilities/318.png rename to addons/tCrossBar/resources/abilities/318.png diff --git a/resources/abilities/319.png b/addons/tCrossBar/resources/abilities/319.png similarity index 100% rename from resources/abilities/319.png rename to addons/tCrossBar/resources/abilities/319.png diff --git a/resources/abilities/32.png b/addons/tCrossBar/resources/abilities/32.png similarity index 100% rename from resources/abilities/32.png rename to addons/tCrossBar/resources/abilities/32.png diff --git a/resources/abilities/320.png b/addons/tCrossBar/resources/abilities/320.png similarity index 100% rename from resources/abilities/320.png rename to addons/tCrossBar/resources/abilities/320.png diff --git a/resources/abilities/321.png b/addons/tCrossBar/resources/abilities/321.png similarity index 100% rename from resources/abilities/321.png rename to addons/tCrossBar/resources/abilities/321.png diff --git a/resources/abilities/322.png b/addons/tCrossBar/resources/abilities/322.png similarity index 100% rename from resources/abilities/322.png rename to addons/tCrossBar/resources/abilities/322.png diff --git a/resources/abilities/33.png b/addons/tCrossBar/resources/abilities/33.png similarity index 100% rename from resources/abilities/33.png rename to addons/tCrossBar/resources/abilities/33.png diff --git a/resources/abilities/34.png b/addons/tCrossBar/resources/abilities/34.png similarity index 100% rename from resources/abilities/34.png rename to addons/tCrossBar/resources/abilities/34.png diff --git a/resources/abilities/35.png b/addons/tCrossBar/resources/abilities/35.png similarity index 100% rename from resources/abilities/35.png rename to addons/tCrossBar/resources/abilities/35.png diff --git a/resources/abilities/358.png b/addons/tCrossBar/resources/abilities/358.png similarity index 100% rename from resources/abilities/358.png rename to addons/tCrossBar/resources/abilities/358.png diff --git a/resources/abilities/359.png b/addons/tCrossBar/resources/abilities/359.png similarity index 100% rename from resources/abilities/359.png rename to addons/tCrossBar/resources/abilities/359.png diff --git a/resources/abilities/36.png b/addons/tCrossBar/resources/abilities/36.png similarity index 100% rename from resources/abilities/36.png rename to addons/tCrossBar/resources/abilities/36.png diff --git a/resources/abilities/360.png b/addons/tCrossBar/resources/abilities/360.png similarity index 100% rename from resources/abilities/360.png rename to addons/tCrossBar/resources/abilities/360.png diff --git a/resources/abilities/361.png b/addons/tCrossBar/resources/abilities/361.png similarity index 100% rename from resources/abilities/361.png rename to addons/tCrossBar/resources/abilities/361.png diff --git a/resources/abilities/362.png b/addons/tCrossBar/resources/abilities/362.png similarity index 100% rename from resources/abilities/362.png rename to addons/tCrossBar/resources/abilities/362.png diff --git a/resources/abilities/363.png b/addons/tCrossBar/resources/abilities/363.png similarity index 100% rename from resources/abilities/363.png rename to addons/tCrossBar/resources/abilities/363.png diff --git a/resources/abilities/364.png b/addons/tCrossBar/resources/abilities/364.png similarity index 100% rename from resources/abilities/364.png rename to addons/tCrossBar/resources/abilities/364.png diff --git a/resources/abilities/365.png b/addons/tCrossBar/resources/abilities/365.png similarity index 100% rename from resources/abilities/365.png rename to addons/tCrossBar/resources/abilities/365.png diff --git a/resources/abilities/37.png b/addons/tCrossBar/resources/abilities/37.png similarity index 100% rename from resources/abilities/37.png rename to addons/tCrossBar/resources/abilities/37.png diff --git a/resources/abilities/38.png b/addons/tCrossBar/resources/abilities/38.png similarity index 100% rename from resources/abilities/38.png rename to addons/tCrossBar/resources/abilities/38.png diff --git a/resources/abilities/381.png b/addons/tCrossBar/resources/abilities/381.png similarity index 100% rename from resources/abilities/381.png rename to addons/tCrossBar/resources/abilities/381.png diff --git a/resources/abilities/388.png b/addons/tCrossBar/resources/abilities/388.png similarity index 100% rename from resources/abilities/388.png rename to addons/tCrossBar/resources/abilities/388.png diff --git a/resources/abilities/389.png b/addons/tCrossBar/resources/abilities/389.png similarity index 100% rename from resources/abilities/389.png rename to addons/tCrossBar/resources/abilities/389.png diff --git a/resources/abilities/39.png b/addons/tCrossBar/resources/abilities/39.png similarity index 100% rename from resources/abilities/39.png rename to addons/tCrossBar/resources/abilities/39.png diff --git a/resources/abilities/390.png b/addons/tCrossBar/resources/abilities/390.png similarity index 100% rename from resources/abilities/390.png rename to addons/tCrossBar/resources/abilities/390.png diff --git a/resources/abilities/391.png b/addons/tCrossBar/resources/abilities/391.png similarity index 100% rename from resources/abilities/391.png rename to addons/tCrossBar/resources/abilities/391.png diff --git a/resources/abilities/392.png b/addons/tCrossBar/resources/abilities/392.png similarity index 100% rename from resources/abilities/392.png rename to addons/tCrossBar/resources/abilities/392.png diff --git a/resources/abilities/40.png b/addons/tCrossBar/resources/abilities/40.png similarity index 100% rename from resources/abilities/40.png rename to addons/tCrossBar/resources/abilities/40.png diff --git a/resources/abilities/42.png b/addons/tCrossBar/resources/abilities/42.png similarity index 100% rename from resources/abilities/42.png rename to addons/tCrossBar/resources/abilities/42.png diff --git a/resources/abilities/43.png b/addons/tCrossBar/resources/abilities/43.png similarity index 100% rename from resources/abilities/43.png rename to addons/tCrossBar/resources/abilities/43.png diff --git a/resources/abilities/44.png b/addons/tCrossBar/resources/abilities/44.png similarity index 100% rename from resources/abilities/44.png rename to addons/tCrossBar/resources/abilities/44.png diff --git a/resources/abilities/45.png b/addons/tCrossBar/resources/abilities/45.png similarity index 100% rename from resources/abilities/45.png rename to addons/tCrossBar/resources/abilities/45.png diff --git a/resources/abilities/46.png b/addons/tCrossBar/resources/abilities/46.png similarity index 100% rename from resources/abilities/46.png rename to addons/tCrossBar/resources/abilities/46.png diff --git a/resources/abilities/47.png b/addons/tCrossBar/resources/abilities/47.png similarity index 100% rename from resources/abilities/47.png rename to addons/tCrossBar/resources/abilities/47.png diff --git a/resources/abilities/48.png b/addons/tCrossBar/resources/abilities/48.png similarity index 100% rename from resources/abilities/48.png rename to addons/tCrossBar/resources/abilities/48.png diff --git a/resources/abilities/49.png b/addons/tCrossBar/resources/abilities/49.png similarity index 100% rename from resources/abilities/49.png rename to addons/tCrossBar/resources/abilities/49.png diff --git a/resources/abilities/50.png b/addons/tCrossBar/resources/abilities/50.png similarity index 100% rename from resources/abilities/50.png rename to addons/tCrossBar/resources/abilities/50.png diff --git a/resources/abilities/51.png b/addons/tCrossBar/resources/abilities/51.png similarity index 100% rename from resources/abilities/51.png rename to addons/tCrossBar/resources/abilities/51.png diff --git a/resources/abilities/512.png b/addons/tCrossBar/resources/abilities/512.png similarity index 100% rename from resources/abilities/512.png rename to addons/tCrossBar/resources/abilities/512.png diff --git a/resources/abilities/513.png b/addons/tCrossBar/resources/abilities/513.png similarity index 100% rename from resources/abilities/513.png rename to addons/tCrossBar/resources/abilities/513.png diff --git a/resources/abilities/514.png b/addons/tCrossBar/resources/abilities/514.png similarity index 100% rename from resources/abilities/514.png rename to addons/tCrossBar/resources/abilities/514.png diff --git a/resources/abilities/515.png b/addons/tCrossBar/resources/abilities/515.png similarity index 100% rename from resources/abilities/515.png rename to addons/tCrossBar/resources/abilities/515.png diff --git a/resources/abilities/516.png b/addons/tCrossBar/resources/abilities/516.png similarity index 100% rename from resources/abilities/516.png rename to addons/tCrossBar/resources/abilities/516.png diff --git a/resources/abilities/517.png b/addons/tCrossBar/resources/abilities/517.png similarity index 100% rename from resources/abilities/517.png rename to addons/tCrossBar/resources/abilities/517.png diff --git a/resources/abilities/518.png b/addons/tCrossBar/resources/abilities/518.png similarity index 100% rename from resources/abilities/518.png rename to addons/tCrossBar/resources/abilities/518.png diff --git a/resources/abilities/519.png b/addons/tCrossBar/resources/abilities/519.png similarity index 100% rename from resources/abilities/519.png rename to addons/tCrossBar/resources/abilities/519.png diff --git a/resources/abilities/52.png b/addons/tCrossBar/resources/abilities/52.png similarity index 100% rename from resources/abilities/52.png rename to addons/tCrossBar/resources/abilities/52.png diff --git a/resources/abilities/520.png b/addons/tCrossBar/resources/abilities/520.png similarity index 100% rename from resources/abilities/520.png rename to addons/tCrossBar/resources/abilities/520.png diff --git a/resources/abilities/521.png b/addons/tCrossBar/resources/abilities/521.png similarity index 100% rename from resources/abilities/521.png rename to addons/tCrossBar/resources/abilities/521.png diff --git a/resources/abilities/522.png b/addons/tCrossBar/resources/abilities/522.png similarity index 100% rename from resources/abilities/522.png rename to addons/tCrossBar/resources/abilities/522.png diff --git a/resources/abilities/523.png b/addons/tCrossBar/resources/abilities/523.png similarity index 100% rename from resources/abilities/523.png rename to addons/tCrossBar/resources/abilities/523.png diff --git a/resources/abilities/524.png b/addons/tCrossBar/resources/abilities/524.png similarity index 100% rename from resources/abilities/524.png rename to addons/tCrossBar/resources/abilities/524.png diff --git a/resources/abilities/525.png b/addons/tCrossBar/resources/abilities/525.png similarity index 100% rename from resources/abilities/525.png rename to addons/tCrossBar/resources/abilities/525.png diff --git a/resources/abilities/526.png b/addons/tCrossBar/resources/abilities/526.png similarity index 100% rename from resources/abilities/526.png rename to addons/tCrossBar/resources/abilities/526.png diff --git a/resources/abilities/527.png b/addons/tCrossBar/resources/abilities/527.png similarity index 100% rename from resources/abilities/527.png rename to addons/tCrossBar/resources/abilities/527.png diff --git a/resources/abilities/528.png b/addons/tCrossBar/resources/abilities/528.png similarity index 100% rename from resources/abilities/528.png rename to addons/tCrossBar/resources/abilities/528.png diff --git a/resources/abilities/529.png b/addons/tCrossBar/resources/abilities/529.png similarity index 100% rename from resources/abilities/529.png rename to addons/tCrossBar/resources/abilities/529.png diff --git a/resources/abilities/53.png b/addons/tCrossBar/resources/abilities/53.png similarity index 100% rename from resources/abilities/53.png rename to addons/tCrossBar/resources/abilities/53.png diff --git a/resources/abilities/530.png b/addons/tCrossBar/resources/abilities/530.png similarity index 100% rename from resources/abilities/530.png rename to addons/tCrossBar/resources/abilities/530.png diff --git a/resources/abilities/531.png b/addons/tCrossBar/resources/abilities/531.png similarity index 100% rename from resources/abilities/531.png rename to addons/tCrossBar/resources/abilities/531.png diff --git a/resources/abilities/532.png b/addons/tCrossBar/resources/abilities/532.png similarity index 100% rename from resources/abilities/532.png rename to addons/tCrossBar/resources/abilities/532.png diff --git a/resources/abilities/533.png b/addons/tCrossBar/resources/abilities/533.png similarity index 100% rename from resources/abilities/533.png rename to addons/tCrossBar/resources/abilities/533.png diff --git a/resources/abilities/534.png b/addons/tCrossBar/resources/abilities/534.png similarity index 100% rename from resources/abilities/534.png rename to addons/tCrossBar/resources/abilities/534.png diff --git a/resources/abilities/536.png b/addons/tCrossBar/resources/abilities/536.png similarity index 100% rename from resources/abilities/536.png rename to addons/tCrossBar/resources/abilities/536.png diff --git a/resources/abilities/537.png b/addons/tCrossBar/resources/abilities/537.png similarity index 100% rename from resources/abilities/537.png rename to addons/tCrossBar/resources/abilities/537.png diff --git a/resources/abilities/538.png b/addons/tCrossBar/resources/abilities/538.png similarity index 100% rename from resources/abilities/538.png rename to addons/tCrossBar/resources/abilities/538.png diff --git a/resources/abilities/539.png b/addons/tCrossBar/resources/abilities/539.png similarity index 100% rename from resources/abilities/539.png rename to addons/tCrossBar/resources/abilities/539.png diff --git a/resources/abilities/54.png b/addons/tCrossBar/resources/abilities/54.png similarity index 100% rename from resources/abilities/54.png rename to addons/tCrossBar/resources/abilities/54.png diff --git a/resources/abilities/544.png b/addons/tCrossBar/resources/abilities/544.png similarity index 100% rename from resources/abilities/544.png rename to addons/tCrossBar/resources/abilities/544.png diff --git a/resources/abilities/545.png b/addons/tCrossBar/resources/abilities/545.png similarity index 100% rename from resources/abilities/545.png rename to addons/tCrossBar/resources/abilities/545.png diff --git a/resources/abilities/546.png b/addons/tCrossBar/resources/abilities/546.png similarity index 100% rename from resources/abilities/546.png rename to addons/tCrossBar/resources/abilities/546.png diff --git a/resources/abilities/547.png b/addons/tCrossBar/resources/abilities/547.png similarity index 100% rename from resources/abilities/547.png rename to addons/tCrossBar/resources/abilities/547.png diff --git a/resources/abilities/548.png b/addons/tCrossBar/resources/abilities/548.png similarity index 100% rename from resources/abilities/548.png rename to addons/tCrossBar/resources/abilities/548.png diff --git a/resources/abilities/549.png b/addons/tCrossBar/resources/abilities/549.png similarity index 100% rename from resources/abilities/549.png rename to addons/tCrossBar/resources/abilities/549.png diff --git a/resources/abilities/55.png b/addons/tCrossBar/resources/abilities/55.png similarity index 100% rename from resources/abilities/55.png rename to addons/tCrossBar/resources/abilities/55.png diff --git a/resources/abilities/550.png b/addons/tCrossBar/resources/abilities/550.png similarity index 100% rename from resources/abilities/550.png rename to addons/tCrossBar/resources/abilities/550.png diff --git a/resources/abilities/551.png b/addons/tCrossBar/resources/abilities/551.png similarity index 100% rename from resources/abilities/551.png rename to addons/tCrossBar/resources/abilities/551.png diff --git a/resources/abilities/552.png b/addons/tCrossBar/resources/abilities/552.png similarity index 100% rename from resources/abilities/552.png rename to addons/tCrossBar/resources/abilities/552.png diff --git a/resources/abilities/553.png b/addons/tCrossBar/resources/abilities/553.png similarity index 100% rename from resources/abilities/553.png rename to addons/tCrossBar/resources/abilities/553.png diff --git a/resources/abilities/554.png b/addons/tCrossBar/resources/abilities/554.png similarity index 100% rename from resources/abilities/554.png rename to addons/tCrossBar/resources/abilities/554.png diff --git a/resources/abilities/56.png b/addons/tCrossBar/resources/abilities/56.png similarity index 100% rename from resources/abilities/56.png rename to addons/tCrossBar/resources/abilities/56.png diff --git a/resources/abilities/560.png b/addons/tCrossBar/resources/abilities/560.png similarity index 100% rename from resources/abilities/560.png rename to addons/tCrossBar/resources/abilities/560.png diff --git a/resources/abilities/561.png b/addons/tCrossBar/resources/abilities/561.png similarity index 100% rename from resources/abilities/561.png rename to addons/tCrossBar/resources/abilities/561.png diff --git a/resources/abilities/562.png b/addons/tCrossBar/resources/abilities/562.png similarity index 100% rename from resources/abilities/562.png rename to addons/tCrossBar/resources/abilities/562.png diff --git a/resources/abilities/563.png b/addons/tCrossBar/resources/abilities/563.png similarity index 100% rename from resources/abilities/563.png rename to addons/tCrossBar/resources/abilities/563.png diff --git a/resources/abilities/564.png b/addons/tCrossBar/resources/abilities/564.png similarity index 100% rename from resources/abilities/564.png rename to addons/tCrossBar/resources/abilities/564.png diff --git a/resources/abilities/565.png b/addons/tCrossBar/resources/abilities/565.png similarity index 100% rename from resources/abilities/565.png rename to addons/tCrossBar/resources/abilities/565.png diff --git a/resources/abilities/566.png b/addons/tCrossBar/resources/abilities/566.png similarity index 100% rename from resources/abilities/566.png rename to addons/tCrossBar/resources/abilities/566.png diff --git a/resources/abilities/567.png b/addons/tCrossBar/resources/abilities/567.png similarity index 100% rename from resources/abilities/567.png rename to addons/tCrossBar/resources/abilities/567.png diff --git a/resources/abilities/568.png b/addons/tCrossBar/resources/abilities/568.png similarity index 100% rename from resources/abilities/568.png rename to addons/tCrossBar/resources/abilities/568.png diff --git a/resources/abilities/569.png b/addons/tCrossBar/resources/abilities/569.png similarity index 100% rename from resources/abilities/569.png rename to addons/tCrossBar/resources/abilities/569.png diff --git a/resources/abilities/57.png b/addons/tCrossBar/resources/abilities/57.png similarity index 100% rename from resources/abilities/57.png rename to addons/tCrossBar/resources/abilities/57.png diff --git a/resources/abilities/570.png b/addons/tCrossBar/resources/abilities/570.png similarity index 100% rename from resources/abilities/570.png rename to addons/tCrossBar/resources/abilities/570.png diff --git a/resources/abilities/576.png b/addons/tCrossBar/resources/abilities/576.png similarity index 100% rename from resources/abilities/576.png rename to addons/tCrossBar/resources/abilities/576.png diff --git a/resources/abilities/577.png b/addons/tCrossBar/resources/abilities/577.png similarity index 100% rename from resources/abilities/577.png rename to addons/tCrossBar/resources/abilities/577.png diff --git a/resources/abilities/578.png b/addons/tCrossBar/resources/abilities/578.png similarity index 100% rename from resources/abilities/578.png rename to addons/tCrossBar/resources/abilities/578.png diff --git a/resources/abilities/579.png b/addons/tCrossBar/resources/abilities/579.png similarity index 100% rename from resources/abilities/579.png rename to addons/tCrossBar/resources/abilities/579.png diff --git a/resources/abilities/58.png b/addons/tCrossBar/resources/abilities/58.png similarity index 100% rename from resources/abilities/58.png rename to addons/tCrossBar/resources/abilities/58.png diff --git a/resources/abilities/580.png b/addons/tCrossBar/resources/abilities/580.png similarity index 100% rename from resources/abilities/580.png rename to addons/tCrossBar/resources/abilities/580.png diff --git a/resources/abilities/581.png b/addons/tCrossBar/resources/abilities/581.png similarity index 100% rename from resources/abilities/581.png rename to addons/tCrossBar/resources/abilities/581.png diff --git a/resources/abilities/582.png b/addons/tCrossBar/resources/abilities/582.png similarity index 100% rename from resources/abilities/582.png rename to addons/tCrossBar/resources/abilities/582.png diff --git a/resources/abilities/583.png b/addons/tCrossBar/resources/abilities/583.png similarity index 100% rename from resources/abilities/583.png rename to addons/tCrossBar/resources/abilities/583.png diff --git a/resources/abilities/584.png b/addons/tCrossBar/resources/abilities/584.png similarity index 100% rename from resources/abilities/584.png rename to addons/tCrossBar/resources/abilities/584.png diff --git a/resources/abilities/585.png b/addons/tCrossBar/resources/abilities/585.png similarity index 100% rename from resources/abilities/585.png rename to addons/tCrossBar/resources/abilities/585.png diff --git a/resources/abilities/586.png b/addons/tCrossBar/resources/abilities/586.png similarity index 100% rename from resources/abilities/586.png rename to addons/tCrossBar/resources/abilities/586.png diff --git a/resources/abilities/59.png b/addons/tCrossBar/resources/abilities/59.png similarity index 100% rename from resources/abilities/59.png rename to addons/tCrossBar/resources/abilities/59.png diff --git a/resources/abilities/592.png b/addons/tCrossBar/resources/abilities/592.png similarity index 100% rename from resources/abilities/592.png rename to addons/tCrossBar/resources/abilities/592.png diff --git a/resources/abilities/593.png b/addons/tCrossBar/resources/abilities/593.png similarity index 100% rename from resources/abilities/593.png rename to addons/tCrossBar/resources/abilities/593.png diff --git a/resources/abilities/594.png b/addons/tCrossBar/resources/abilities/594.png similarity index 100% rename from resources/abilities/594.png rename to addons/tCrossBar/resources/abilities/594.png diff --git a/resources/abilities/595.png b/addons/tCrossBar/resources/abilities/595.png similarity index 100% rename from resources/abilities/595.png rename to addons/tCrossBar/resources/abilities/595.png diff --git a/resources/abilities/596.png b/addons/tCrossBar/resources/abilities/596.png similarity index 100% rename from resources/abilities/596.png rename to addons/tCrossBar/resources/abilities/596.png diff --git a/resources/abilities/597.png b/addons/tCrossBar/resources/abilities/597.png similarity index 100% rename from resources/abilities/597.png rename to addons/tCrossBar/resources/abilities/597.png diff --git a/resources/abilities/598.png b/addons/tCrossBar/resources/abilities/598.png similarity index 100% rename from resources/abilities/598.png rename to addons/tCrossBar/resources/abilities/598.png diff --git a/resources/abilities/599.png b/addons/tCrossBar/resources/abilities/599.png similarity index 100% rename from resources/abilities/599.png rename to addons/tCrossBar/resources/abilities/599.png diff --git a/resources/abilities/60.png b/addons/tCrossBar/resources/abilities/60.png similarity index 100% rename from resources/abilities/60.png rename to addons/tCrossBar/resources/abilities/60.png diff --git a/resources/abilities/600.png b/addons/tCrossBar/resources/abilities/600.png similarity index 100% rename from resources/abilities/600.png rename to addons/tCrossBar/resources/abilities/600.png diff --git a/resources/abilities/601.png b/addons/tCrossBar/resources/abilities/601.png similarity index 100% rename from resources/abilities/601.png rename to addons/tCrossBar/resources/abilities/601.png diff --git a/resources/abilities/602.png b/addons/tCrossBar/resources/abilities/602.png similarity index 100% rename from resources/abilities/602.png rename to addons/tCrossBar/resources/abilities/602.png diff --git a/resources/abilities/608.png b/addons/tCrossBar/resources/abilities/608.png similarity index 100% rename from resources/abilities/608.png rename to addons/tCrossBar/resources/abilities/608.png diff --git a/resources/abilities/609.png b/addons/tCrossBar/resources/abilities/609.png similarity index 100% rename from resources/abilities/609.png rename to addons/tCrossBar/resources/abilities/609.png diff --git a/resources/abilities/61.png b/addons/tCrossBar/resources/abilities/61.png similarity index 100% rename from resources/abilities/61.png rename to addons/tCrossBar/resources/abilities/61.png diff --git a/resources/abilities/610.png b/addons/tCrossBar/resources/abilities/610.png similarity index 100% rename from resources/abilities/610.png rename to addons/tCrossBar/resources/abilities/610.png diff --git a/resources/abilities/611.png b/addons/tCrossBar/resources/abilities/611.png similarity index 100% rename from resources/abilities/611.png rename to addons/tCrossBar/resources/abilities/611.png diff --git a/resources/abilities/612.png b/addons/tCrossBar/resources/abilities/612.png similarity index 100% rename from resources/abilities/612.png rename to addons/tCrossBar/resources/abilities/612.png diff --git a/resources/abilities/613.png b/addons/tCrossBar/resources/abilities/613.png similarity index 100% rename from resources/abilities/613.png rename to addons/tCrossBar/resources/abilities/613.png diff --git a/resources/abilities/614.png b/addons/tCrossBar/resources/abilities/614.png similarity index 100% rename from resources/abilities/614.png rename to addons/tCrossBar/resources/abilities/614.png diff --git a/resources/abilities/615.png b/addons/tCrossBar/resources/abilities/615.png similarity index 100% rename from resources/abilities/615.png rename to addons/tCrossBar/resources/abilities/615.png diff --git a/resources/abilities/616.png b/addons/tCrossBar/resources/abilities/616.png similarity index 100% rename from resources/abilities/616.png rename to addons/tCrossBar/resources/abilities/616.png diff --git a/resources/abilities/617.png b/addons/tCrossBar/resources/abilities/617.png similarity index 100% rename from resources/abilities/617.png rename to addons/tCrossBar/resources/abilities/617.png diff --git a/resources/abilities/618.png b/addons/tCrossBar/resources/abilities/618.png similarity index 100% rename from resources/abilities/618.png rename to addons/tCrossBar/resources/abilities/618.png diff --git a/resources/abilities/62.png b/addons/tCrossBar/resources/abilities/62.png similarity index 100% rename from resources/abilities/62.png rename to addons/tCrossBar/resources/abilities/62.png diff --git a/resources/abilities/624.png b/addons/tCrossBar/resources/abilities/624.png similarity index 100% rename from resources/abilities/624.png rename to addons/tCrossBar/resources/abilities/624.png diff --git a/resources/abilities/625.png b/addons/tCrossBar/resources/abilities/625.png similarity index 100% rename from resources/abilities/625.png rename to addons/tCrossBar/resources/abilities/625.png diff --git a/resources/abilities/626.png b/addons/tCrossBar/resources/abilities/626.png similarity index 100% rename from resources/abilities/626.png rename to addons/tCrossBar/resources/abilities/626.png diff --git a/resources/abilities/627.png b/addons/tCrossBar/resources/abilities/627.png similarity index 100% rename from resources/abilities/627.png rename to addons/tCrossBar/resources/abilities/627.png diff --git a/resources/abilities/628.png b/addons/tCrossBar/resources/abilities/628.png similarity index 100% rename from resources/abilities/628.png rename to addons/tCrossBar/resources/abilities/628.png diff --git a/resources/abilities/629.png b/addons/tCrossBar/resources/abilities/629.png similarity index 100% rename from resources/abilities/629.png rename to addons/tCrossBar/resources/abilities/629.png diff --git a/resources/abilities/63.png b/addons/tCrossBar/resources/abilities/63.png similarity index 100% rename from resources/abilities/63.png rename to addons/tCrossBar/resources/abilities/63.png diff --git a/resources/abilities/630.png b/addons/tCrossBar/resources/abilities/630.png similarity index 100% rename from resources/abilities/630.png rename to addons/tCrossBar/resources/abilities/630.png diff --git a/resources/abilities/631.png b/addons/tCrossBar/resources/abilities/631.png similarity index 100% rename from resources/abilities/631.png rename to addons/tCrossBar/resources/abilities/631.png diff --git a/resources/abilities/632.png b/addons/tCrossBar/resources/abilities/632.png similarity index 100% rename from resources/abilities/632.png rename to addons/tCrossBar/resources/abilities/632.png diff --git a/resources/abilities/633.png b/addons/tCrossBar/resources/abilities/633.png similarity index 100% rename from resources/abilities/633.png rename to addons/tCrossBar/resources/abilities/633.png diff --git a/resources/abilities/634.png b/addons/tCrossBar/resources/abilities/634.png similarity index 100% rename from resources/abilities/634.png rename to addons/tCrossBar/resources/abilities/634.png diff --git a/resources/abilities/64.png b/addons/tCrossBar/resources/abilities/64.png similarity index 100% rename from resources/abilities/64.png rename to addons/tCrossBar/resources/abilities/64.png diff --git a/resources/abilities/65.png b/addons/tCrossBar/resources/abilities/65.png similarity index 100% rename from resources/abilities/65.png rename to addons/tCrossBar/resources/abilities/65.png diff --git a/resources/abilities/656.png b/addons/tCrossBar/resources/abilities/656.png similarity index 100% rename from resources/abilities/656.png rename to addons/tCrossBar/resources/abilities/656.png diff --git a/resources/abilities/657.png b/addons/tCrossBar/resources/abilities/657.png similarity index 100% rename from resources/abilities/657.png rename to addons/tCrossBar/resources/abilities/657.png diff --git a/resources/abilities/658.png b/addons/tCrossBar/resources/abilities/658.png similarity index 100% rename from resources/abilities/658.png rename to addons/tCrossBar/resources/abilities/658.png diff --git a/resources/abilities/659.png b/addons/tCrossBar/resources/abilities/659.png similarity index 100% rename from resources/abilities/659.png rename to addons/tCrossBar/resources/abilities/659.png diff --git a/resources/abilities/66.png b/addons/tCrossBar/resources/abilities/66.png similarity index 100% rename from resources/abilities/66.png rename to addons/tCrossBar/resources/abilities/66.png diff --git a/resources/abilities/660.png b/addons/tCrossBar/resources/abilities/660.png similarity index 100% rename from resources/abilities/660.png rename to addons/tCrossBar/resources/abilities/660.png diff --git a/resources/abilities/661.png b/addons/tCrossBar/resources/abilities/661.png similarity index 100% rename from resources/abilities/661.png rename to addons/tCrossBar/resources/abilities/661.png diff --git a/resources/abilities/662.png b/addons/tCrossBar/resources/abilities/662.png similarity index 100% rename from resources/abilities/662.png rename to addons/tCrossBar/resources/abilities/662.png diff --git a/resources/abilities/663.png b/addons/tCrossBar/resources/abilities/663.png similarity index 100% rename from resources/abilities/663.png rename to addons/tCrossBar/resources/abilities/663.png diff --git a/resources/abilities/664.png b/addons/tCrossBar/resources/abilities/664.png similarity index 100% rename from resources/abilities/664.png rename to addons/tCrossBar/resources/abilities/664.png diff --git a/resources/abilities/665.png b/addons/tCrossBar/resources/abilities/665.png similarity index 100% rename from resources/abilities/665.png rename to addons/tCrossBar/resources/abilities/665.png diff --git a/resources/abilities/666.png b/addons/tCrossBar/resources/abilities/666.png similarity index 100% rename from resources/abilities/666.png rename to addons/tCrossBar/resources/abilities/666.png diff --git a/resources/abilities/667.png b/addons/tCrossBar/resources/abilities/667.png similarity index 100% rename from resources/abilities/667.png rename to addons/tCrossBar/resources/abilities/667.png diff --git a/resources/abilities/67.png b/addons/tCrossBar/resources/abilities/67.png similarity index 100% rename from resources/abilities/67.png rename to addons/tCrossBar/resources/abilities/67.png diff --git a/resources/abilities/672.png b/addons/tCrossBar/resources/abilities/672.png similarity index 100% rename from resources/abilities/672.png rename to addons/tCrossBar/resources/abilities/672.png diff --git a/resources/abilities/673.png b/addons/tCrossBar/resources/abilities/673.png similarity index 100% rename from resources/abilities/673.png rename to addons/tCrossBar/resources/abilities/673.png diff --git a/resources/abilities/674.png b/addons/tCrossBar/resources/abilities/674.png similarity index 100% rename from resources/abilities/674.png rename to addons/tCrossBar/resources/abilities/674.png diff --git a/resources/abilities/675.png b/addons/tCrossBar/resources/abilities/675.png similarity index 100% rename from resources/abilities/675.png rename to addons/tCrossBar/resources/abilities/675.png diff --git a/resources/abilities/676.png b/addons/tCrossBar/resources/abilities/676.png similarity index 100% rename from resources/abilities/676.png rename to addons/tCrossBar/resources/abilities/676.png diff --git a/resources/abilities/677.png b/addons/tCrossBar/resources/abilities/677.png similarity index 100% rename from resources/abilities/677.png rename to addons/tCrossBar/resources/abilities/677.png diff --git a/resources/abilities/678.png b/addons/tCrossBar/resources/abilities/678.png similarity index 100% rename from resources/abilities/678.png rename to addons/tCrossBar/resources/abilities/678.png diff --git a/resources/abilities/679.png b/addons/tCrossBar/resources/abilities/679.png similarity index 100% rename from resources/abilities/679.png rename to addons/tCrossBar/resources/abilities/679.png diff --git a/resources/abilities/68.png b/addons/tCrossBar/resources/abilities/68.png similarity index 100% rename from resources/abilities/68.png rename to addons/tCrossBar/resources/abilities/68.png diff --git a/resources/abilities/680.png b/addons/tCrossBar/resources/abilities/680.png similarity index 100% rename from resources/abilities/680.png rename to addons/tCrossBar/resources/abilities/680.png diff --git a/resources/abilities/681.png b/addons/tCrossBar/resources/abilities/681.png similarity index 100% rename from resources/abilities/681.png rename to addons/tCrossBar/resources/abilities/681.png diff --git a/resources/abilities/682.png b/addons/tCrossBar/resources/abilities/682.png similarity index 100% rename from resources/abilities/682.png rename to addons/tCrossBar/resources/abilities/682.png diff --git a/resources/abilities/683.png b/addons/tCrossBar/resources/abilities/683.png similarity index 100% rename from resources/abilities/683.png rename to addons/tCrossBar/resources/abilities/683.png diff --git a/resources/abilities/684.png b/addons/tCrossBar/resources/abilities/684.png similarity index 100% rename from resources/abilities/684.png rename to addons/tCrossBar/resources/abilities/684.png diff --git a/resources/abilities/685.png b/addons/tCrossBar/resources/abilities/685.png similarity index 100% rename from resources/abilities/685.png rename to addons/tCrossBar/resources/abilities/685.png diff --git a/resources/abilities/686.png b/addons/tCrossBar/resources/abilities/686.png similarity index 100% rename from resources/abilities/686.png rename to addons/tCrossBar/resources/abilities/686.png diff --git a/resources/abilities/687.png b/addons/tCrossBar/resources/abilities/687.png similarity index 100% rename from resources/abilities/687.png rename to addons/tCrossBar/resources/abilities/687.png diff --git a/resources/abilities/688.png b/addons/tCrossBar/resources/abilities/688.png similarity index 100% rename from resources/abilities/688.png rename to addons/tCrossBar/resources/abilities/688.png diff --git a/resources/abilities/689.png b/addons/tCrossBar/resources/abilities/689.png similarity index 100% rename from resources/abilities/689.png rename to addons/tCrossBar/resources/abilities/689.png diff --git a/resources/abilities/69.png b/addons/tCrossBar/resources/abilities/69.png similarity index 100% rename from resources/abilities/69.png rename to addons/tCrossBar/resources/abilities/69.png diff --git a/resources/abilities/690.png b/addons/tCrossBar/resources/abilities/690.png similarity index 100% rename from resources/abilities/690.png rename to addons/tCrossBar/resources/abilities/690.png diff --git a/resources/abilities/691.png b/addons/tCrossBar/resources/abilities/691.png similarity index 100% rename from resources/abilities/691.png rename to addons/tCrossBar/resources/abilities/691.png diff --git a/resources/abilities/692.png b/addons/tCrossBar/resources/abilities/692.png similarity index 100% rename from resources/abilities/692.png rename to addons/tCrossBar/resources/abilities/692.png diff --git a/resources/abilities/693.png b/addons/tCrossBar/resources/abilities/693.png similarity index 100% rename from resources/abilities/693.png rename to addons/tCrossBar/resources/abilities/693.png diff --git a/resources/abilities/694.png b/addons/tCrossBar/resources/abilities/694.png similarity index 100% rename from resources/abilities/694.png rename to addons/tCrossBar/resources/abilities/694.png diff --git a/resources/abilities/695.png b/addons/tCrossBar/resources/abilities/695.png similarity index 100% rename from resources/abilities/695.png rename to addons/tCrossBar/resources/abilities/695.png diff --git a/resources/abilities/696.png b/addons/tCrossBar/resources/abilities/696.png similarity index 100% rename from resources/abilities/696.png rename to addons/tCrossBar/resources/abilities/696.png diff --git a/resources/abilities/697.png b/addons/tCrossBar/resources/abilities/697.png similarity index 100% rename from resources/abilities/697.png rename to addons/tCrossBar/resources/abilities/697.png diff --git a/resources/abilities/698.png b/addons/tCrossBar/resources/abilities/698.png similarity index 100% rename from resources/abilities/698.png rename to addons/tCrossBar/resources/abilities/698.png diff --git a/resources/abilities/699.png b/addons/tCrossBar/resources/abilities/699.png similarity index 100% rename from resources/abilities/699.png rename to addons/tCrossBar/resources/abilities/699.png diff --git a/resources/abilities/70.png b/addons/tCrossBar/resources/abilities/70.png similarity index 100% rename from resources/abilities/70.png rename to addons/tCrossBar/resources/abilities/70.png diff --git a/resources/abilities/700.png b/addons/tCrossBar/resources/abilities/700.png similarity index 100% rename from resources/abilities/700.png rename to addons/tCrossBar/resources/abilities/700.png diff --git a/resources/abilities/701.png b/addons/tCrossBar/resources/abilities/701.png similarity index 100% rename from resources/abilities/701.png rename to addons/tCrossBar/resources/abilities/701.png diff --git a/resources/abilities/702.png b/addons/tCrossBar/resources/abilities/702.png similarity index 100% rename from resources/abilities/702.png rename to addons/tCrossBar/resources/abilities/702.png diff --git a/resources/abilities/703.png b/addons/tCrossBar/resources/abilities/703.png similarity index 100% rename from resources/abilities/703.png rename to addons/tCrossBar/resources/abilities/703.png diff --git a/resources/abilities/704.png b/addons/tCrossBar/resources/abilities/704.png similarity index 100% rename from resources/abilities/704.png rename to addons/tCrossBar/resources/abilities/704.png diff --git a/resources/abilities/705.png b/addons/tCrossBar/resources/abilities/705.png similarity index 100% rename from resources/abilities/705.png rename to addons/tCrossBar/resources/abilities/705.png diff --git a/resources/abilities/706.png b/addons/tCrossBar/resources/abilities/706.png similarity index 100% rename from resources/abilities/706.png rename to addons/tCrossBar/resources/abilities/706.png diff --git a/resources/abilities/707.png b/addons/tCrossBar/resources/abilities/707.png similarity index 100% rename from resources/abilities/707.png rename to addons/tCrossBar/resources/abilities/707.png diff --git a/resources/abilities/708.png b/addons/tCrossBar/resources/abilities/708.png similarity index 100% rename from resources/abilities/708.png rename to addons/tCrossBar/resources/abilities/708.png diff --git a/resources/abilities/709.png b/addons/tCrossBar/resources/abilities/709.png similarity index 100% rename from resources/abilities/709.png rename to addons/tCrossBar/resources/abilities/709.png diff --git a/resources/abilities/71.png b/addons/tCrossBar/resources/abilities/71.png similarity index 100% rename from resources/abilities/71.png rename to addons/tCrossBar/resources/abilities/71.png diff --git a/resources/abilities/710.png b/addons/tCrossBar/resources/abilities/710.png similarity index 100% rename from resources/abilities/710.png rename to addons/tCrossBar/resources/abilities/710.png diff --git a/resources/abilities/711.png b/addons/tCrossBar/resources/abilities/711.png similarity index 100% rename from resources/abilities/711.png rename to addons/tCrossBar/resources/abilities/711.png diff --git a/resources/abilities/712.png b/addons/tCrossBar/resources/abilities/712.png similarity index 100% rename from resources/abilities/712.png rename to addons/tCrossBar/resources/abilities/712.png diff --git a/resources/abilities/713.png b/addons/tCrossBar/resources/abilities/713.png similarity index 100% rename from resources/abilities/713.png rename to addons/tCrossBar/resources/abilities/713.png diff --git a/resources/abilities/714.png b/addons/tCrossBar/resources/abilities/714.png similarity index 100% rename from resources/abilities/714.png rename to addons/tCrossBar/resources/abilities/714.png diff --git a/resources/abilities/715.png b/addons/tCrossBar/resources/abilities/715.png similarity index 100% rename from resources/abilities/715.png rename to addons/tCrossBar/resources/abilities/715.png diff --git a/resources/abilities/716.png b/addons/tCrossBar/resources/abilities/716.png similarity index 100% rename from resources/abilities/716.png rename to addons/tCrossBar/resources/abilities/716.png diff --git a/resources/abilities/717.png b/addons/tCrossBar/resources/abilities/717.png similarity index 100% rename from resources/abilities/717.png rename to addons/tCrossBar/resources/abilities/717.png diff --git a/resources/abilities/718.png b/addons/tCrossBar/resources/abilities/718.png similarity index 100% rename from resources/abilities/718.png rename to addons/tCrossBar/resources/abilities/718.png diff --git a/resources/abilities/719.png b/addons/tCrossBar/resources/abilities/719.png similarity index 100% rename from resources/abilities/719.png rename to addons/tCrossBar/resources/abilities/719.png diff --git a/resources/abilities/72.png b/addons/tCrossBar/resources/abilities/72.png similarity index 100% rename from resources/abilities/72.png rename to addons/tCrossBar/resources/abilities/72.png diff --git a/resources/abilities/720.png b/addons/tCrossBar/resources/abilities/720.png similarity index 100% rename from resources/abilities/720.png rename to addons/tCrossBar/resources/abilities/720.png diff --git a/resources/abilities/721.png b/addons/tCrossBar/resources/abilities/721.png similarity index 100% rename from resources/abilities/721.png rename to addons/tCrossBar/resources/abilities/721.png diff --git a/resources/abilities/722.png b/addons/tCrossBar/resources/abilities/722.png similarity index 100% rename from resources/abilities/722.png rename to addons/tCrossBar/resources/abilities/722.png diff --git a/resources/abilities/723.png b/addons/tCrossBar/resources/abilities/723.png similarity index 100% rename from resources/abilities/723.png rename to addons/tCrossBar/resources/abilities/723.png diff --git a/resources/abilities/724.png b/addons/tCrossBar/resources/abilities/724.png similarity index 100% rename from resources/abilities/724.png rename to addons/tCrossBar/resources/abilities/724.png diff --git a/resources/abilities/725.png b/addons/tCrossBar/resources/abilities/725.png similarity index 100% rename from resources/abilities/725.png rename to addons/tCrossBar/resources/abilities/725.png diff --git a/resources/abilities/726.png b/addons/tCrossBar/resources/abilities/726.png similarity index 100% rename from resources/abilities/726.png rename to addons/tCrossBar/resources/abilities/726.png diff --git a/resources/abilities/727.png b/addons/tCrossBar/resources/abilities/727.png similarity index 100% rename from resources/abilities/727.png rename to addons/tCrossBar/resources/abilities/727.png diff --git a/resources/abilities/728.png b/addons/tCrossBar/resources/abilities/728.png similarity index 100% rename from resources/abilities/728.png rename to addons/tCrossBar/resources/abilities/728.png diff --git a/resources/abilities/729.png b/addons/tCrossBar/resources/abilities/729.png similarity index 100% rename from resources/abilities/729.png rename to addons/tCrossBar/resources/abilities/729.png diff --git a/resources/abilities/73.png b/addons/tCrossBar/resources/abilities/73.png similarity index 100% rename from resources/abilities/73.png rename to addons/tCrossBar/resources/abilities/73.png diff --git a/resources/abilities/730.png b/addons/tCrossBar/resources/abilities/730.png similarity index 100% rename from resources/abilities/730.png rename to addons/tCrossBar/resources/abilities/730.png diff --git a/resources/abilities/731.png b/addons/tCrossBar/resources/abilities/731.png similarity index 100% rename from resources/abilities/731.png rename to addons/tCrossBar/resources/abilities/731.png diff --git a/resources/abilities/732.png b/addons/tCrossBar/resources/abilities/732.png similarity index 100% rename from resources/abilities/732.png rename to addons/tCrossBar/resources/abilities/732.png diff --git a/resources/abilities/733.png b/addons/tCrossBar/resources/abilities/733.png similarity index 100% rename from resources/abilities/733.png rename to addons/tCrossBar/resources/abilities/733.png diff --git a/resources/abilities/734.png b/addons/tCrossBar/resources/abilities/734.png similarity index 100% rename from resources/abilities/734.png rename to addons/tCrossBar/resources/abilities/734.png diff --git a/resources/abilities/735.png b/addons/tCrossBar/resources/abilities/735.png similarity index 100% rename from resources/abilities/735.png rename to addons/tCrossBar/resources/abilities/735.png diff --git a/resources/abilities/736.png b/addons/tCrossBar/resources/abilities/736.png similarity index 100% rename from resources/abilities/736.png rename to addons/tCrossBar/resources/abilities/736.png diff --git a/resources/abilities/737.png b/addons/tCrossBar/resources/abilities/737.png similarity index 100% rename from resources/abilities/737.png rename to addons/tCrossBar/resources/abilities/737.png diff --git a/resources/abilities/738.png b/addons/tCrossBar/resources/abilities/738.png similarity index 100% rename from resources/abilities/738.png rename to addons/tCrossBar/resources/abilities/738.png diff --git a/resources/abilities/74.png b/addons/tCrossBar/resources/abilities/74.png similarity index 100% rename from resources/abilities/74.png rename to addons/tCrossBar/resources/abilities/74.png diff --git a/resources/abilities/740.png b/addons/tCrossBar/resources/abilities/740.png similarity index 100% rename from resources/abilities/740.png rename to addons/tCrossBar/resources/abilities/740.png diff --git a/resources/abilities/741.png b/addons/tCrossBar/resources/abilities/741.png similarity index 100% rename from resources/abilities/741.png rename to addons/tCrossBar/resources/abilities/741.png diff --git a/resources/abilities/743.png b/addons/tCrossBar/resources/abilities/743.png similarity index 100% rename from resources/abilities/743.png rename to addons/tCrossBar/resources/abilities/743.png diff --git a/resources/abilities/744.png b/addons/tCrossBar/resources/abilities/744.png similarity index 100% rename from resources/abilities/744.png rename to addons/tCrossBar/resources/abilities/744.png diff --git a/resources/abilities/745.png b/addons/tCrossBar/resources/abilities/745.png similarity index 100% rename from resources/abilities/745.png rename to addons/tCrossBar/resources/abilities/745.png diff --git a/resources/abilities/746.png b/addons/tCrossBar/resources/abilities/746.png similarity index 100% rename from resources/abilities/746.png rename to addons/tCrossBar/resources/abilities/746.png diff --git a/resources/abilities/747.png b/addons/tCrossBar/resources/abilities/747.png similarity index 100% rename from resources/abilities/747.png rename to addons/tCrossBar/resources/abilities/747.png diff --git a/resources/abilities/748.png b/addons/tCrossBar/resources/abilities/748.png similarity index 100% rename from resources/abilities/748.png rename to addons/tCrossBar/resources/abilities/748.png diff --git a/resources/abilities/749.png b/addons/tCrossBar/resources/abilities/749.png similarity index 100% rename from resources/abilities/749.png rename to addons/tCrossBar/resources/abilities/749.png diff --git a/resources/abilities/75.png b/addons/tCrossBar/resources/abilities/75.png similarity index 100% rename from resources/abilities/75.png rename to addons/tCrossBar/resources/abilities/75.png diff --git a/resources/abilities/750.png b/addons/tCrossBar/resources/abilities/750.png similarity index 100% rename from resources/abilities/750.png rename to addons/tCrossBar/resources/abilities/750.png diff --git a/resources/abilities/751.png b/addons/tCrossBar/resources/abilities/751.png similarity index 100% rename from resources/abilities/751.png rename to addons/tCrossBar/resources/abilities/751.png diff --git a/resources/abilities/752.png b/addons/tCrossBar/resources/abilities/752.png similarity index 100% rename from resources/abilities/752.png rename to addons/tCrossBar/resources/abilities/752.png diff --git a/resources/abilities/753.png b/addons/tCrossBar/resources/abilities/753.png similarity index 100% rename from resources/abilities/753.png rename to addons/tCrossBar/resources/abilities/753.png diff --git a/resources/abilities/754.png b/addons/tCrossBar/resources/abilities/754.png similarity index 100% rename from resources/abilities/754.png rename to addons/tCrossBar/resources/abilities/754.png diff --git a/resources/abilities/755.png b/addons/tCrossBar/resources/abilities/755.png similarity index 100% rename from resources/abilities/755.png rename to addons/tCrossBar/resources/abilities/755.png diff --git a/resources/abilities/756.png b/addons/tCrossBar/resources/abilities/756.png similarity index 100% rename from resources/abilities/756.png rename to addons/tCrossBar/resources/abilities/756.png diff --git a/resources/abilities/757.png b/addons/tCrossBar/resources/abilities/757.png similarity index 100% rename from resources/abilities/757.png rename to addons/tCrossBar/resources/abilities/757.png diff --git a/resources/abilities/758.png b/addons/tCrossBar/resources/abilities/758.png similarity index 100% rename from resources/abilities/758.png rename to addons/tCrossBar/resources/abilities/758.png diff --git a/resources/abilities/759.png b/addons/tCrossBar/resources/abilities/759.png similarity index 100% rename from resources/abilities/759.png rename to addons/tCrossBar/resources/abilities/759.png diff --git a/resources/abilities/76.png b/addons/tCrossBar/resources/abilities/76.png similarity index 100% rename from resources/abilities/76.png rename to addons/tCrossBar/resources/abilities/76.png diff --git a/resources/abilities/760.png b/addons/tCrossBar/resources/abilities/760.png similarity index 100% rename from resources/abilities/760.png rename to addons/tCrossBar/resources/abilities/760.png diff --git a/resources/abilities/761.png b/addons/tCrossBar/resources/abilities/761.png similarity index 100% rename from resources/abilities/761.png rename to addons/tCrossBar/resources/abilities/761.png diff --git a/resources/abilities/762.png b/addons/tCrossBar/resources/abilities/762.png similarity index 100% rename from resources/abilities/762.png rename to addons/tCrossBar/resources/abilities/762.png diff --git a/resources/abilities/763.png b/addons/tCrossBar/resources/abilities/763.png similarity index 100% rename from resources/abilities/763.png rename to addons/tCrossBar/resources/abilities/763.png diff --git a/resources/abilities/764.png b/addons/tCrossBar/resources/abilities/764.png similarity index 100% rename from resources/abilities/764.png rename to addons/tCrossBar/resources/abilities/764.png diff --git a/resources/abilities/765.png b/addons/tCrossBar/resources/abilities/765.png similarity index 100% rename from resources/abilities/765.png rename to addons/tCrossBar/resources/abilities/765.png diff --git a/resources/abilities/766.png b/addons/tCrossBar/resources/abilities/766.png similarity index 100% rename from resources/abilities/766.png rename to addons/tCrossBar/resources/abilities/766.png diff --git a/resources/abilities/767.png b/addons/tCrossBar/resources/abilities/767.png similarity index 100% rename from resources/abilities/767.png rename to addons/tCrossBar/resources/abilities/767.png diff --git a/resources/abilities/768.png b/addons/tCrossBar/resources/abilities/768.png similarity index 100% rename from resources/abilities/768.png rename to addons/tCrossBar/resources/abilities/768.png diff --git a/resources/abilities/769.png b/addons/tCrossBar/resources/abilities/769.png similarity index 100% rename from resources/abilities/769.png rename to addons/tCrossBar/resources/abilities/769.png diff --git a/resources/abilities/77.png b/addons/tCrossBar/resources/abilities/77.png similarity index 100% rename from resources/abilities/77.png rename to addons/tCrossBar/resources/abilities/77.png diff --git a/resources/abilities/770.png b/addons/tCrossBar/resources/abilities/770.png similarity index 100% rename from resources/abilities/770.png rename to addons/tCrossBar/resources/abilities/770.png diff --git a/resources/abilities/771.png b/addons/tCrossBar/resources/abilities/771.png similarity index 100% rename from resources/abilities/771.png rename to addons/tCrossBar/resources/abilities/771.png diff --git a/resources/abilities/772.png b/addons/tCrossBar/resources/abilities/772.png similarity index 100% rename from resources/abilities/772.png rename to addons/tCrossBar/resources/abilities/772.png diff --git a/resources/abilities/773.png b/addons/tCrossBar/resources/abilities/773.png similarity index 100% rename from resources/abilities/773.png rename to addons/tCrossBar/resources/abilities/773.png diff --git a/resources/abilities/774.png b/addons/tCrossBar/resources/abilities/774.png similarity index 100% rename from resources/abilities/774.png rename to addons/tCrossBar/resources/abilities/774.png diff --git a/resources/abilities/775.png b/addons/tCrossBar/resources/abilities/775.png similarity index 100% rename from resources/abilities/775.png rename to addons/tCrossBar/resources/abilities/775.png diff --git a/resources/abilities/776.png b/addons/tCrossBar/resources/abilities/776.png similarity index 100% rename from resources/abilities/776.png rename to addons/tCrossBar/resources/abilities/776.png diff --git a/resources/abilities/777.png b/addons/tCrossBar/resources/abilities/777.png similarity index 100% rename from resources/abilities/777.png rename to addons/tCrossBar/resources/abilities/777.png diff --git a/resources/abilities/778.png b/addons/tCrossBar/resources/abilities/778.png similarity index 100% rename from resources/abilities/778.png rename to addons/tCrossBar/resources/abilities/778.png diff --git a/resources/abilities/779.png b/addons/tCrossBar/resources/abilities/779.png similarity index 100% rename from resources/abilities/779.png rename to addons/tCrossBar/resources/abilities/779.png diff --git a/resources/abilities/78.png b/addons/tCrossBar/resources/abilities/78.png similarity index 100% rename from resources/abilities/78.png rename to addons/tCrossBar/resources/abilities/78.png diff --git a/resources/abilities/780.png b/addons/tCrossBar/resources/abilities/780.png similarity index 100% rename from resources/abilities/780.png rename to addons/tCrossBar/resources/abilities/780.png diff --git a/resources/abilities/781.png b/addons/tCrossBar/resources/abilities/781.png similarity index 100% rename from resources/abilities/781.png rename to addons/tCrossBar/resources/abilities/781.png diff --git a/resources/abilities/782.png b/addons/tCrossBar/resources/abilities/782.png similarity index 100% rename from resources/abilities/782.png rename to addons/tCrossBar/resources/abilities/782.png diff --git a/resources/abilities/786.png b/addons/tCrossBar/resources/abilities/786.png similarity index 100% rename from resources/abilities/786.png rename to addons/tCrossBar/resources/abilities/786.png diff --git a/resources/abilities/787.png b/addons/tCrossBar/resources/abilities/787.png similarity index 100% rename from resources/abilities/787.png rename to addons/tCrossBar/resources/abilities/787.png diff --git a/resources/abilities/788.png b/addons/tCrossBar/resources/abilities/788.png similarity index 100% rename from resources/abilities/788.png rename to addons/tCrossBar/resources/abilities/788.png diff --git a/resources/abilities/789.png b/addons/tCrossBar/resources/abilities/789.png similarity index 100% rename from resources/abilities/789.png rename to addons/tCrossBar/resources/abilities/789.png diff --git a/resources/abilities/79.png b/addons/tCrossBar/resources/abilities/79.png similarity index 100% rename from resources/abilities/79.png rename to addons/tCrossBar/resources/abilities/79.png diff --git a/resources/abilities/790.png b/addons/tCrossBar/resources/abilities/790.png similarity index 100% rename from resources/abilities/790.png rename to addons/tCrossBar/resources/abilities/790.png diff --git a/resources/abilities/791.png b/addons/tCrossBar/resources/abilities/791.png similarity index 100% rename from resources/abilities/791.png rename to addons/tCrossBar/resources/abilities/791.png diff --git a/resources/abilities/792.png b/addons/tCrossBar/resources/abilities/792.png similarity index 100% rename from resources/abilities/792.png rename to addons/tCrossBar/resources/abilities/792.png diff --git a/resources/abilities/793.png b/addons/tCrossBar/resources/abilities/793.png similarity index 100% rename from resources/abilities/793.png rename to addons/tCrossBar/resources/abilities/793.png diff --git a/resources/abilities/794.png b/addons/tCrossBar/resources/abilities/794.png similarity index 100% rename from resources/abilities/794.png rename to addons/tCrossBar/resources/abilities/794.png diff --git a/resources/abilities/795.png b/addons/tCrossBar/resources/abilities/795.png similarity index 100% rename from resources/abilities/795.png rename to addons/tCrossBar/resources/abilities/795.png diff --git a/resources/abilities/796.png b/addons/tCrossBar/resources/abilities/796.png similarity index 100% rename from resources/abilities/796.png rename to addons/tCrossBar/resources/abilities/796.png diff --git a/resources/abilities/797.png b/addons/tCrossBar/resources/abilities/797.png similarity index 100% rename from resources/abilities/797.png rename to addons/tCrossBar/resources/abilities/797.png diff --git a/resources/abilities/798.png b/addons/tCrossBar/resources/abilities/798.png similarity index 100% rename from resources/abilities/798.png rename to addons/tCrossBar/resources/abilities/798.png diff --git a/resources/abilities/80.png b/addons/tCrossBar/resources/abilities/80.png similarity index 100% rename from resources/abilities/80.png rename to addons/tCrossBar/resources/abilities/80.png diff --git a/resources/abilities/81.png b/addons/tCrossBar/resources/abilities/81.png similarity index 100% rename from resources/abilities/81.png rename to addons/tCrossBar/resources/abilities/81.png diff --git a/resources/abilities/82.png b/addons/tCrossBar/resources/abilities/82.png similarity index 100% rename from resources/abilities/82.png rename to addons/tCrossBar/resources/abilities/82.png diff --git a/resources/abilities/83.png b/addons/tCrossBar/resources/abilities/83.png similarity index 100% rename from resources/abilities/83.png rename to addons/tCrossBar/resources/abilities/83.png diff --git a/resources/abilities/84.png b/addons/tCrossBar/resources/abilities/84.png similarity index 100% rename from resources/abilities/84.png rename to addons/tCrossBar/resources/abilities/84.png diff --git a/resources/abilities/85.png b/addons/tCrossBar/resources/abilities/85.png similarity index 100% rename from resources/abilities/85.png rename to addons/tCrossBar/resources/abilities/85.png diff --git a/resources/abilities/86.png b/addons/tCrossBar/resources/abilities/86.png similarity index 100% rename from resources/abilities/86.png rename to addons/tCrossBar/resources/abilities/86.png diff --git a/resources/abilities/87.png b/addons/tCrossBar/resources/abilities/87.png similarity index 100% rename from resources/abilities/87.png rename to addons/tCrossBar/resources/abilities/87.png diff --git a/resources/abilities/88.png b/addons/tCrossBar/resources/abilities/88.png similarity index 100% rename from resources/abilities/88.png rename to addons/tCrossBar/resources/abilities/88.png diff --git a/resources/abilities/89.png b/addons/tCrossBar/resources/abilities/89.png similarity index 100% rename from resources/abilities/89.png rename to addons/tCrossBar/resources/abilities/89.png diff --git a/resources/abilities/90.png b/addons/tCrossBar/resources/abilities/90.png similarity index 100% rename from resources/abilities/90.png rename to addons/tCrossBar/resources/abilities/90.png diff --git a/resources/abilities/91.png b/addons/tCrossBar/resources/abilities/91.png similarity index 100% rename from resources/abilities/91.png rename to addons/tCrossBar/resources/abilities/91.png diff --git a/resources/abilities/92.png b/addons/tCrossBar/resources/abilities/92.png similarity index 100% rename from resources/abilities/92.png rename to addons/tCrossBar/resources/abilities/92.png diff --git a/resources/abilities/94.png b/addons/tCrossBar/resources/abilities/94.png similarity index 100% rename from resources/abilities/94.png rename to addons/tCrossBar/resources/abilities/94.png diff --git a/resources/abilities/95.png b/addons/tCrossBar/resources/abilities/95.png similarity index 100% rename from resources/abilities/95.png rename to addons/tCrossBar/resources/abilities/95.png diff --git a/resources/abilities/960.png b/addons/tCrossBar/resources/abilities/960.png similarity index 100% rename from resources/abilities/960.png rename to addons/tCrossBar/resources/abilities/960.png diff --git a/resources/abilities/961.png b/addons/tCrossBar/resources/abilities/961.png similarity index 100% rename from resources/abilities/961.png rename to addons/tCrossBar/resources/abilities/961.png diff --git a/resources/abilities/962.png b/addons/tCrossBar/resources/abilities/962.png similarity index 100% rename from resources/abilities/962.png rename to addons/tCrossBar/resources/abilities/962.png diff --git a/resources/abilities/963.png b/addons/tCrossBar/resources/abilities/963.png similarity index 100% rename from resources/abilities/963.png rename to addons/tCrossBar/resources/abilities/963.png diff --git a/resources/abilities/964.png b/addons/tCrossBar/resources/abilities/964.png similarity index 100% rename from resources/abilities/964.png rename to addons/tCrossBar/resources/abilities/964.png diff --git a/resources/abilities/965.png b/addons/tCrossBar/resources/abilities/965.png similarity index 100% rename from resources/abilities/965.png rename to addons/tCrossBar/resources/abilities/965.png diff --git a/resources/abilities/966.png b/addons/tCrossBar/resources/abilities/966.png similarity index 100% rename from resources/abilities/966.png rename to addons/tCrossBar/resources/abilities/966.png diff --git a/resources/abilities/967.png b/addons/tCrossBar/resources/abilities/967.png similarity index 100% rename from resources/abilities/967.png rename to addons/tCrossBar/resources/abilities/967.png diff --git a/resources/abilities/968.png b/addons/tCrossBar/resources/abilities/968.png similarity index 100% rename from resources/abilities/968.png rename to addons/tCrossBar/resources/abilities/968.png diff --git a/resources/abilities/969.png b/addons/tCrossBar/resources/abilities/969.png similarity index 100% rename from resources/abilities/969.png rename to addons/tCrossBar/resources/abilities/969.png diff --git a/resources/abilities/97.png b/addons/tCrossBar/resources/abilities/97.png similarity index 100% rename from resources/abilities/97.png rename to addons/tCrossBar/resources/abilities/97.png diff --git a/resources/abilities/970.png b/addons/tCrossBar/resources/abilities/970.png similarity index 100% rename from resources/abilities/970.png rename to addons/tCrossBar/resources/abilities/970.png diff --git a/resources/abilities/98.png b/addons/tCrossBar/resources/abilities/98.png similarity index 100% rename from resources/abilities/98.png rename to addons/tCrossBar/resources/abilities/98.png diff --git a/resources/abilities/99.png b/addons/tCrossBar/resources/abilities/99.png similarity index 100% rename from resources/abilities/99.png rename to addons/tCrossBar/resources/abilities/99.png diff --git a/resources/abilities/default.png b/addons/tCrossBar/resources/abilities/default.png similarity index 100% rename from resources/abilities/default.png rename to addons/tCrossBar/resources/abilities/default.png diff --git a/resources/controllers/dualsense.lua b/addons/tCrossBar/resources/controllers/dualsense.lua similarity index 100% rename from resources/controllers/dualsense.lua rename to addons/tCrossBar/resources/controllers/dualsense.lua diff --git a/resources/controllers/switchpro.lua b/addons/tCrossBar/resources/controllers/switchpro.lua similarity index 100% rename from resources/controllers/switchpro.lua rename to addons/tCrossBar/resources/controllers/switchpro.lua diff --git a/resources/controllers/xbox.lua b/addons/tCrossBar/resources/controllers/xbox.lua similarity index 100% rename from resources/controllers/xbox.lua rename to addons/tCrossBar/resources/controllers/xbox.lua diff --git a/resources/layouts/classic.lua b/addons/tCrossBar/resources/layouts/classic.lua similarity index 100% rename from resources/layouts/classic.lua rename to addons/tCrossBar/resources/layouts/classic.lua diff --git a/resources/layouts/compact.lua b/addons/tCrossBar/resources/layouts/compact.lua similarity index 100% rename from resources/layouts/compact.lua rename to addons/tCrossBar/resources/layouts/compact.lua diff --git a/resources/misc/buttons.png b/addons/tCrossBar/resources/misc/buttons.png similarity index 100% rename from resources/misc/buttons.png rename to addons/tCrossBar/resources/misc/buttons.png diff --git a/resources/misc/command.png b/addons/tCrossBar/resources/misc/command.png similarity index 100% rename from resources/misc/command.png rename to addons/tCrossBar/resources/misc/command.png diff --git a/resources/misc/crawl1.png b/addons/tCrossBar/resources/misc/crawl1.png similarity index 100% rename from resources/misc/crawl1.png rename to addons/tCrossBar/resources/misc/crawl1.png diff --git a/resources/misc/crawl2.png b/addons/tCrossBar/resources/misc/crawl2.png similarity index 100% rename from resources/misc/crawl2.png rename to addons/tCrossBar/resources/misc/crawl2.png diff --git a/resources/misc/crawl3.png b/addons/tCrossBar/resources/misc/crawl3.png similarity index 100% rename from resources/misc/crawl3.png rename to addons/tCrossBar/resources/misc/crawl3.png diff --git a/resources/misc/crawl4.png b/addons/tCrossBar/resources/misc/crawl4.png similarity index 100% rename from resources/misc/crawl4.png rename to addons/tCrossBar/resources/misc/crawl4.png diff --git a/resources/misc/crawl5.png b/addons/tCrossBar/resources/misc/crawl5.png similarity index 100% rename from resources/misc/crawl5.png rename to addons/tCrossBar/resources/misc/crawl5.png diff --git a/resources/misc/crawl6.png b/addons/tCrossBar/resources/misc/crawl6.png similarity index 100% rename from resources/misc/crawl6.png rename to addons/tCrossBar/resources/misc/crawl6.png diff --git a/resources/misc/crawl7.png b/addons/tCrossBar/resources/misc/crawl7.png similarity index 100% rename from resources/misc/crawl7.png rename to addons/tCrossBar/resources/misc/crawl7.png diff --git a/resources/misc/cross.png b/addons/tCrossBar/resources/misc/cross.png similarity index 100% rename from resources/misc/cross.png rename to addons/tCrossBar/resources/misc/cross.png diff --git a/resources/misc/dpad.png b/addons/tCrossBar/resources/misc/dpad.png similarity index 100% rename from resources/misc/dpad.png rename to addons/tCrossBar/resources/misc/dpad.png diff --git a/resources/misc/drag.png b/addons/tCrossBar/resources/misc/drag.png similarity index 100% rename from resources/misc/drag.png rename to addons/tCrossBar/resources/misc/drag.png diff --git a/resources/misc/frame.png b/addons/tCrossBar/resources/misc/frame.png similarity index 100% rename from resources/misc/frame.png rename to addons/tCrossBar/resources/misc/frame.png diff --git a/resources/misc/trigger.png b/addons/tCrossBar/resources/misc/trigger.png similarity index 100% rename from resources/misc/trigger.png rename to addons/tCrossBar/resources/misc/trigger.png diff --git a/resources/misc/unknown.png b/addons/tCrossBar/resources/misc/unknown.png similarity index 100% rename from resources/misc/unknown.png rename to addons/tCrossBar/resources/misc/unknown.png diff --git a/resources/skillchains/Compression.png b/addons/tCrossBar/resources/skillchains/Compression.png similarity index 100% rename from resources/skillchains/Compression.png rename to addons/tCrossBar/resources/skillchains/Compression.png diff --git a/resources/skillchains/Darkness.png b/addons/tCrossBar/resources/skillchains/Darkness.png similarity index 100% rename from resources/skillchains/Darkness.png rename to addons/tCrossBar/resources/skillchains/Darkness.png diff --git a/resources/skillchains/Detonation.png b/addons/tCrossBar/resources/skillchains/Detonation.png similarity index 100% rename from resources/skillchains/Detonation.png rename to addons/tCrossBar/resources/skillchains/Detonation.png diff --git a/resources/skillchains/Distortion.png b/addons/tCrossBar/resources/skillchains/Distortion.png similarity index 100% rename from resources/skillchains/Distortion.png rename to addons/tCrossBar/resources/skillchains/Distortion.png diff --git a/resources/skillchains/Fragmentation.png b/addons/tCrossBar/resources/skillchains/Fragmentation.png similarity index 100% rename from resources/skillchains/Fragmentation.png rename to addons/tCrossBar/resources/skillchains/Fragmentation.png diff --git a/resources/skillchains/Fusion.png b/addons/tCrossBar/resources/skillchains/Fusion.png similarity index 100% rename from resources/skillchains/Fusion.png rename to addons/tCrossBar/resources/skillchains/Fusion.png diff --git a/resources/skillchains/Gravitation.png b/addons/tCrossBar/resources/skillchains/Gravitation.png similarity index 100% rename from resources/skillchains/Gravitation.png rename to addons/tCrossBar/resources/skillchains/Gravitation.png diff --git a/resources/skillchains/Impaction.png b/addons/tCrossBar/resources/skillchains/Impaction.png similarity index 100% rename from resources/skillchains/Impaction.png rename to addons/tCrossBar/resources/skillchains/Impaction.png diff --git a/resources/skillchains/Induration.png b/addons/tCrossBar/resources/skillchains/Induration.png similarity index 100% rename from resources/skillchains/Induration.png rename to addons/tCrossBar/resources/skillchains/Induration.png diff --git a/resources/skillchains/Light.png b/addons/tCrossBar/resources/skillchains/Light.png similarity index 100% rename from resources/skillchains/Light.png rename to addons/tCrossBar/resources/skillchains/Light.png diff --git a/resources/skillchains/Liquefaction.png b/addons/tCrossBar/resources/skillchains/Liquefaction.png similarity index 100% rename from resources/skillchains/Liquefaction.png rename to addons/tCrossBar/resources/skillchains/Liquefaction.png diff --git a/resources/skillchains/Reverberation.png b/addons/tCrossBar/resources/skillchains/Reverberation.png similarity index 100% rename from resources/skillchains/Reverberation.png rename to addons/tCrossBar/resources/skillchains/Reverberation.png diff --git a/resources/skillchains/Scission.png b/addons/tCrossBar/resources/skillchains/Scission.png similarity index 100% rename from resources/skillchains/Scission.png rename to addons/tCrossBar/resources/skillchains/Scission.png diff --git a/resources/skillchains/Transfixion.png b/addons/tCrossBar/resources/skillchains/Transfixion.png similarity index 100% rename from resources/skillchains/Transfixion.png rename to addons/tCrossBar/resources/skillchains/Transfixion.png diff --git a/resources/spells/1.png b/addons/tCrossBar/resources/spells/1.png similarity index 100% rename from resources/spells/1.png rename to addons/tCrossBar/resources/spells/1.png diff --git a/resources/spells/10.png b/addons/tCrossBar/resources/spells/10.png similarity index 100% rename from resources/spells/10.png rename to addons/tCrossBar/resources/spells/10.png diff --git a/resources/spells/100.png b/addons/tCrossBar/resources/spells/100.png similarity index 100% rename from resources/spells/100.png rename to addons/tCrossBar/resources/spells/100.png diff --git a/resources/spells/1004.png b/addons/tCrossBar/resources/spells/1004.png similarity index 100% rename from resources/spells/1004.png rename to addons/tCrossBar/resources/spells/1004.png diff --git a/resources/spells/1005.png b/addons/tCrossBar/resources/spells/1005.png similarity index 100% rename from resources/spells/1005.png rename to addons/tCrossBar/resources/spells/1005.png diff --git a/resources/spells/1006.png b/addons/tCrossBar/resources/spells/1006.png similarity index 100% rename from resources/spells/1006.png rename to addons/tCrossBar/resources/spells/1006.png diff --git a/resources/spells/1007.png b/addons/tCrossBar/resources/spells/1007.png similarity index 100% rename from resources/spells/1007.png rename to addons/tCrossBar/resources/spells/1007.png diff --git a/resources/spells/1008.png b/addons/tCrossBar/resources/spells/1008.png similarity index 100% rename from resources/spells/1008.png rename to addons/tCrossBar/resources/spells/1008.png diff --git a/resources/spells/1009.png b/addons/tCrossBar/resources/spells/1009.png similarity index 100% rename from resources/spells/1009.png rename to addons/tCrossBar/resources/spells/1009.png diff --git a/resources/spells/101.png b/addons/tCrossBar/resources/spells/101.png similarity index 100% rename from resources/spells/101.png rename to addons/tCrossBar/resources/spells/101.png diff --git a/resources/spells/1010.png b/addons/tCrossBar/resources/spells/1010.png similarity index 100% rename from resources/spells/1010.png rename to addons/tCrossBar/resources/spells/1010.png diff --git a/resources/spells/1011.png b/addons/tCrossBar/resources/spells/1011.png similarity index 100% rename from resources/spells/1011.png rename to addons/tCrossBar/resources/spells/1011.png diff --git a/resources/spells/1012.png b/addons/tCrossBar/resources/spells/1012.png similarity index 100% rename from resources/spells/1012.png rename to addons/tCrossBar/resources/spells/1012.png diff --git a/resources/spells/1013.png b/addons/tCrossBar/resources/spells/1013.png similarity index 100% rename from resources/spells/1013.png rename to addons/tCrossBar/resources/spells/1013.png diff --git a/resources/spells/1014.png b/addons/tCrossBar/resources/spells/1014.png similarity index 100% rename from resources/spells/1014.png rename to addons/tCrossBar/resources/spells/1014.png diff --git a/resources/spells/1015.png b/addons/tCrossBar/resources/spells/1015.png similarity index 100% rename from resources/spells/1015.png rename to addons/tCrossBar/resources/spells/1015.png diff --git a/resources/spells/1016.png b/addons/tCrossBar/resources/spells/1016.png similarity index 100% rename from resources/spells/1016.png rename to addons/tCrossBar/resources/spells/1016.png diff --git a/resources/spells/102.png b/addons/tCrossBar/resources/spells/102.png similarity index 100% rename from resources/spells/102.png rename to addons/tCrossBar/resources/spells/102.png diff --git a/resources/spells/103.png b/addons/tCrossBar/resources/spells/103.png similarity index 100% rename from resources/spells/103.png rename to addons/tCrossBar/resources/spells/103.png diff --git a/resources/spells/104.png b/addons/tCrossBar/resources/spells/104.png similarity index 100% rename from resources/spells/104.png rename to addons/tCrossBar/resources/spells/104.png diff --git a/resources/spells/105.png b/addons/tCrossBar/resources/spells/105.png similarity index 100% rename from resources/spells/105.png rename to addons/tCrossBar/resources/spells/105.png diff --git a/resources/spells/106.png b/addons/tCrossBar/resources/spells/106.png similarity index 100% rename from resources/spells/106.png rename to addons/tCrossBar/resources/spells/106.png diff --git a/resources/spells/107.png b/addons/tCrossBar/resources/spells/107.png similarity index 100% rename from resources/spells/107.png rename to addons/tCrossBar/resources/spells/107.png diff --git a/resources/spells/108.png b/addons/tCrossBar/resources/spells/108.png similarity index 100% rename from resources/spells/108.png rename to addons/tCrossBar/resources/spells/108.png diff --git a/resources/spells/109.png b/addons/tCrossBar/resources/spells/109.png similarity index 100% rename from resources/spells/109.png rename to addons/tCrossBar/resources/spells/109.png diff --git a/resources/spells/11.png b/addons/tCrossBar/resources/spells/11.png similarity index 100% rename from resources/spells/11.png rename to addons/tCrossBar/resources/spells/11.png diff --git a/resources/spells/110.png b/addons/tCrossBar/resources/spells/110.png similarity index 100% rename from resources/spells/110.png rename to addons/tCrossBar/resources/spells/110.png diff --git a/resources/spells/111.png b/addons/tCrossBar/resources/spells/111.png similarity index 100% rename from resources/spells/111.png rename to addons/tCrossBar/resources/spells/111.png diff --git a/resources/spells/112.png b/addons/tCrossBar/resources/spells/112.png similarity index 100% rename from resources/spells/112.png rename to addons/tCrossBar/resources/spells/112.png diff --git a/resources/spells/113.png b/addons/tCrossBar/resources/spells/113.png similarity index 100% rename from resources/spells/113.png rename to addons/tCrossBar/resources/spells/113.png diff --git a/resources/spells/114.png b/addons/tCrossBar/resources/spells/114.png similarity index 100% rename from resources/spells/114.png rename to addons/tCrossBar/resources/spells/114.png diff --git a/resources/spells/115.png b/addons/tCrossBar/resources/spells/115.png similarity index 100% rename from resources/spells/115.png rename to addons/tCrossBar/resources/spells/115.png diff --git a/resources/spells/116.png b/addons/tCrossBar/resources/spells/116.png similarity index 100% rename from resources/spells/116.png rename to addons/tCrossBar/resources/spells/116.png diff --git a/resources/spells/117.png b/addons/tCrossBar/resources/spells/117.png similarity index 100% rename from resources/spells/117.png rename to addons/tCrossBar/resources/spells/117.png diff --git a/resources/spells/118.png b/addons/tCrossBar/resources/spells/118.png similarity index 100% rename from resources/spells/118.png rename to addons/tCrossBar/resources/spells/118.png diff --git a/resources/spells/119.png b/addons/tCrossBar/resources/spells/119.png similarity index 100% rename from resources/spells/119.png rename to addons/tCrossBar/resources/spells/119.png diff --git a/resources/spells/12.png b/addons/tCrossBar/resources/spells/12.png similarity index 100% rename from resources/spells/12.png rename to addons/tCrossBar/resources/spells/12.png diff --git a/resources/spells/120.png b/addons/tCrossBar/resources/spells/120.png similarity index 100% rename from resources/spells/120.png rename to addons/tCrossBar/resources/spells/120.png diff --git a/resources/spells/121.png b/addons/tCrossBar/resources/spells/121.png similarity index 100% rename from resources/spells/121.png rename to addons/tCrossBar/resources/spells/121.png diff --git a/resources/spells/122.png b/addons/tCrossBar/resources/spells/122.png similarity index 100% rename from resources/spells/122.png rename to addons/tCrossBar/resources/spells/122.png diff --git a/resources/spells/123.png b/addons/tCrossBar/resources/spells/123.png similarity index 100% rename from resources/spells/123.png rename to addons/tCrossBar/resources/spells/123.png diff --git a/resources/spells/124.png b/addons/tCrossBar/resources/spells/124.png similarity index 100% rename from resources/spells/124.png rename to addons/tCrossBar/resources/spells/124.png diff --git a/resources/spells/125.png b/addons/tCrossBar/resources/spells/125.png similarity index 100% rename from resources/spells/125.png rename to addons/tCrossBar/resources/spells/125.png diff --git a/resources/spells/126.png b/addons/tCrossBar/resources/spells/126.png similarity index 100% rename from resources/spells/126.png rename to addons/tCrossBar/resources/spells/126.png diff --git a/resources/spells/127.png b/addons/tCrossBar/resources/spells/127.png similarity index 100% rename from resources/spells/127.png rename to addons/tCrossBar/resources/spells/127.png diff --git a/resources/spells/128.png b/addons/tCrossBar/resources/spells/128.png similarity index 100% rename from resources/spells/128.png rename to addons/tCrossBar/resources/spells/128.png diff --git a/resources/spells/129.png b/addons/tCrossBar/resources/spells/129.png similarity index 100% rename from resources/spells/129.png rename to addons/tCrossBar/resources/spells/129.png diff --git a/resources/spells/13.png b/addons/tCrossBar/resources/spells/13.png similarity index 100% rename from resources/spells/13.png rename to addons/tCrossBar/resources/spells/13.png diff --git a/resources/spells/130.png b/addons/tCrossBar/resources/spells/130.png similarity index 100% rename from resources/spells/130.png rename to addons/tCrossBar/resources/spells/130.png diff --git a/resources/spells/131.png b/addons/tCrossBar/resources/spells/131.png similarity index 100% rename from resources/spells/131.png rename to addons/tCrossBar/resources/spells/131.png diff --git a/resources/spells/132.png b/addons/tCrossBar/resources/spells/132.png similarity index 100% rename from resources/spells/132.png rename to addons/tCrossBar/resources/spells/132.png diff --git a/resources/spells/133.png b/addons/tCrossBar/resources/spells/133.png similarity index 100% rename from resources/spells/133.png rename to addons/tCrossBar/resources/spells/133.png diff --git a/resources/spells/134.png b/addons/tCrossBar/resources/spells/134.png similarity index 100% rename from resources/spells/134.png rename to addons/tCrossBar/resources/spells/134.png diff --git a/resources/spells/135.png b/addons/tCrossBar/resources/spells/135.png similarity index 100% rename from resources/spells/135.png rename to addons/tCrossBar/resources/spells/135.png diff --git a/resources/spells/136.png b/addons/tCrossBar/resources/spells/136.png similarity index 100% rename from resources/spells/136.png rename to addons/tCrossBar/resources/spells/136.png diff --git a/resources/spells/137.png b/addons/tCrossBar/resources/spells/137.png similarity index 100% rename from resources/spells/137.png rename to addons/tCrossBar/resources/spells/137.png diff --git a/resources/spells/138.png b/addons/tCrossBar/resources/spells/138.png similarity index 100% rename from resources/spells/138.png rename to addons/tCrossBar/resources/spells/138.png diff --git a/resources/spells/139.png b/addons/tCrossBar/resources/spells/139.png similarity index 100% rename from resources/spells/139.png rename to addons/tCrossBar/resources/spells/139.png diff --git a/resources/spells/14.png b/addons/tCrossBar/resources/spells/14.png similarity index 100% rename from resources/spells/14.png rename to addons/tCrossBar/resources/spells/14.png diff --git a/resources/spells/140.png b/addons/tCrossBar/resources/spells/140.png similarity index 100% rename from resources/spells/140.png rename to addons/tCrossBar/resources/spells/140.png diff --git a/resources/spells/141.png b/addons/tCrossBar/resources/spells/141.png similarity index 100% rename from resources/spells/141.png rename to addons/tCrossBar/resources/spells/141.png diff --git a/resources/spells/142.png b/addons/tCrossBar/resources/spells/142.png similarity index 100% rename from resources/spells/142.png rename to addons/tCrossBar/resources/spells/142.png diff --git a/resources/spells/143.png b/addons/tCrossBar/resources/spells/143.png similarity index 100% rename from resources/spells/143.png rename to addons/tCrossBar/resources/spells/143.png diff --git a/resources/spells/144.png b/addons/tCrossBar/resources/spells/144.png similarity index 100% rename from resources/spells/144.png rename to addons/tCrossBar/resources/spells/144.png diff --git a/resources/spells/145.png b/addons/tCrossBar/resources/spells/145.png similarity index 100% rename from resources/spells/145.png rename to addons/tCrossBar/resources/spells/145.png diff --git a/resources/spells/146.png b/addons/tCrossBar/resources/spells/146.png similarity index 100% rename from resources/spells/146.png rename to addons/tCrossBar/resources/spells/146.png diff --git a/resources/spells/147.png b/addons/tCrossBar/resources/spells/147.png similarity index 100% rename from resources/spells/147.png rename to addons/tCrossBar/resources/spells/147.png diff --git a/resources/spells/148.png b/addons/tCrossBar/resources/spells/148.png similarity index 100% rename from resources/spells/148.png rename to addons/tCrossBar/resources/spells/148.png diff --git a/resources/spells/149.png b/addons/tCrossBar/resources/spells/149.png similarity index 100% rename from resources/spells/149.png rename to addons/tCrossBar/resources/spells/149.png diff --git a/resources/spells/15.png b/addons/tCrossBar/resources/spells/15.png similarity index 100% rename from resources/spells/15.png rename to addons/tCrossBar/resources/spells/15.png diff --git a/resources/spells/150.png b/addons/tCrossBar/resources/spells/150.png similarity index 100% rename from resources/spells/150.png rename to addons/tCrossBar/resources/spells/150.png diff --git a/resources/spells/151.png b/addons/tCrossBar/resources/spells/151.png similarity index 100% rename from resources/spells/151.png rename to addons/tCrossBar/resources/spells/151.png diff --git a/resources/spells/152.png b/addons/tCrossBar/resources/spells/152.png similarity index 100% rename from resources/spells/152.png rename to addons/tCrossBar/resources/spells/152.png diff --git a/resources/spells/153.png b/addons/tCrossBar/resources/spells/153.png similarity index 100% rename from resources/spells/153.png rename to addons/tCrossBar/resources/spells/153.png diff --git a/resources/spells/154.png b/addons/tCrossBar/resources/spells/154.png similarity index 100% rename from resources/spells/154.png rename to addons/tCrossBar/resources/spells/154.png diff --git a/resources/spells/155.png b/addons/tCrossBar/resources/spells/155.png similarity index 100% rename from resources/spells/155.png rename to addons/tCrossBar/resources/spells/155.png diff --git a/resources/spells/156.png b/addons/tCrossBar/resources/spells/156.png similarity index 100% rename from resources/spells/156.png rename to addons/tCrossBar/resources/spells/156.png diff --git a/resources/spells/157.png b/addons/tCrossBar/resources/spells/157.png similarity index 100% rename from resources/spells/157.png rename to addons/tCrossBar/resources/spells/157.png diff --git a/resources/spells/158.png b/addons/tCrossBar/resources/spells/158.png similarity index 100% rename from resources/spells/158.png rename to addons/tCrossBar/resources/spells/158.png diff --git a/resources/spells/159.png b/addons/tCrossBar/resources/spells/159.png similarity index 100% rename from resources/spells/159.png rename to addons/tCrossBar/resources/spells/159.png diff --git a/resources/spells/16.png b/addons/tCrossBar/resources/spells/16.png similarity index 100% rename from resources/spells/16.png rename to addons/tCrossBar/resources/spells/16.png diff --git a/resources/spells/160.png b/addons/tCrossBar/resources/spells/160.png similarity index 100% rename from resources/spells/160.png rename to addons/tCrossBar/resources/spells/160.png diff --git a/resources/spells/161.png b/addons/tCrossBar/resources/spells/161.png similarity index 100% rename from resources/spells/161.png rename to addons/tCrossBar/resources/spells/161.png diff --git a/resources/spells/162.png b/addons/tCrossBar/resources/spells/162.png similarity index 100% rename from resources/spells/162.png rename to addons/tCrossBar/resources/spells/162.png diff --git a/resources/spells/163.png b/addons/tCrossBar/resources/spells/163.png similarity index 100% rename from resources/spells/163.png rename to addons/tCrossBar/resources/spells/163.png diff --git a/resources/spells/164.png b/addons/tCrossBar/resources/spells/164.png similarity index 100% rename from resources/spells/164.png rename to addons/tCrossBar/resources/spells/164.png diff --git a/resources/spells/165.png b/addons/tCrossBar/resources/spells/165.png similarity index 100% rename from resources/spells/165.png rename to addons/tCrossBar/resources/spells/165.png diff --git a/resources/spells/166.png b/addons/tCrossBar/resources/spells/166.png similarity index 100% rename from resources/spells/166.png rename to addons/tCrossBar/resources/spells/166.png diff --git a/resources/spells/167.png b/addons/tCrossBar/resources/spells/167.png similarity index 100% rename from resources/spells/167.png rename to addons/tCrossBar/resources/spells/167.png diff --git a/resources/spells/168.png b/addons/tCrossBar/resources/spells/168.png similarity index 100% rename from resources/spells/168.png rename to addons/tCrossBar/resources/spells/168.png diff --git a/resources/spells/169.png b/addons/tCrossBar/resources/spells/169.png similarity index 100% rename from resources/spells/169.png rename to addons/tCrossBar/resources/spells/169.png diff --git a/resources/spells/17.png b/addons/tCrossBar/resources/spells/17.png similarity index 100% rename from resources/spells/17.png rename to addons/tCrossBar/resources/spells/17.png diff --git a/resources/spells/170.png b/addons/tCrossBar/resources/spells/170.png similarity index 100% rename from resources/spells/170.png rename to addons/tCrossBar/resources/spells/170.png diff --git a/resources/spells/171.png b/addons/tCrossBar/resources/spells/171.png similarity index 100% rename from resources/spells/171.png rename to addons/tCrossBar/resources/spells/171.png diff --git a/resources/spells/172.png b/addons/tCrossBar/resources/spells/172.png similarity index 100% rename from resources/spells/172.png rename to addons/tCrossBar/resources/spells/172.png diff --git a/resources/spells/173.png b/addons/tCrossBar/resources/spells/173.png similarity index 100% rename from resources/spells/173.png rename to addons/tCrossBar/resources/spells/173.png diff --git a/resources/spells/174.png b/addons/tCrossBar/resources/spells/174.png similarity index 100% rename from resources/spells/174.png rename to addons/tCrossBar/resources/spells/174.png diff --git a/resources/spells/175.png b/addons/tCrossBar/resources/spells/175.png similarity index 100% rename from resources/spells/175.png rename to addons/tCrossBar/resources/spells/175.png diff --git a/resources/spells/176.png b/addons/tCrossBar/resources/spells/176.png similarity index 100% rename from resources/spells/176.png rename to addons/tCrossBar/resources/spells/176.png diff --git a/resources/spells/177.png b/addons/tCrossBar/resources/spells/177.png similarity index 100% rename from resources/spells/177.png rename to addons/tCrossBar/resources/spells/177.png diff --git a/resources/spells/178.png b/addons/tCrossBar/resources/spells/178.png similarity index 100% rename from resources/spells/178.png rename to addons/tCrossBar/resources/spells/178.png diff --git a/resources/spells/179.png b/addons/tCrossBar/resources/spells/179.png similarity index 100% rename from resources/spells/179.png rename to addons/tCrossBar/resources/spells/179.png diff --git a/resources/spells/18.png b/addons/tCrossBar/resources/spells/18.png similarity index 100% rename from resources/spells/18.png rename to addons/tCrossBar/resources/spells/18.png diff --git a/resources/spells/180.png b/addons/tCrossBar/resources/spells/180.png similarity index 100% rename from resources/spells/180.png rename to addons/tCrossBar/resources/spells/180.png diff --git a/resources/spells/181.png b/addons/tCrossBar/resources/spells/181.png similarity index 100% rename from resources/spells/181.png rename to addons/tCrossBar/resources/spells/181.png diff --git a/resources/spells/182.png b/addons/tCrossBar/resources/spells/182.png similarity index 100% rename from resources/spells/182.png rename to addons/tCrossBar/resources/spells/182.png diff --git a/resources/spells/183.png b/addons/tCrossBar/resources/spells/183.png similarity index 100% rename from resources/spells/183.png rename to addons/tCrossBar/resources/spells/183.png diff --git a/resources/spells/184.png b/addons/tCrossBar/resources/spells/184.png similarity index 100% rename from resources/spells/184.png rename to addons/tCrossBar/resources/spells/184.png diff --git a/resources/spells/185.png b/addons/tCrossBar/resources/spells/185.png similarity index 100% rename from resources/spells/185.png rename to addons/tCrossBar/resources/spells/185.png diff --git a/resources/spells/186.png b/addons/tCrossBar/resources/spells/186.png similarity index 100% rename from resources/spells/186.png rename to addons/tCrossBar/resources/spells/186.png diff --git a/resources/spells/187.png b/addons/tCrossBar/resources/spells/187.png similarity index 100% rename from resources/spells/187.png rename to addons/tCrossBar/resources/spells/187.png diff --git a/resources/spells/188.png b/addons/tCrossBar/resources/spells/188.png similarity index 100% rename from resources/spells/188.png rename to addons/tCrossBar/resources/spells/188.png diff --git a/resources/spells/189.png b/addons/tCrossBar/resources/spells/189.png similarity index 100% rename from resources/spells/189.png rename to addons/tCrossBar/resources/spells/189.png diff --git a/resources/spells/19.png b/addons/tCrossBar/resources/spells/19.png similarity index 100% rename from resources/spells/19.png rename to addons/tCrossBar/resources/spells/19.png diff --git a/resources/spells/190.png b/addons/tCrossBar/resources/spells/190.png similarity index 100% rename from resources/spells/190.png rename to addons/tCrossBar/resources/spells/190.png diff --git a/resources/spells/191.png b/addons/tCrossBar/resources/spells/191.png similarity index 100% rename from resources/spells/191.png rename to addons/tCrossBar/resources/spells/191.png diff --git a/resources/spells/192.png b/addons/tCrossBar/resources/spells/192.png similarity index 100% rename from resources/spells/192.png rename to addons/tCrossBar/resources/spells/192.png diff --git a/resources/spells/193.png b/addons/tCrossBar/resources/spells/193.png similarity index 100% rename from resources/spells/193.png rename to addons/tCrossBar/resources/spells/193.png diff --git a/resources/spells/194.png b/addons/tCrossBar/resources/spells/194.png similarity index 100% rename from resources/spells/194.png rename to addons/tCrossBar/resources/spells/194.png diff --git a/resources/spells/195.png b/addons/tCrossBar/resources/spells/195.png similarity index 100% rename from resources/spells/195.png rename to addons/tCrossBar/resources/spells/195.png diff --git a/resources/spells/196.png b/addons/tCrossBar/resources/spells/196.png similarity index 100% rename from resources/spells/196.png rename to addons/tCrossBar/resources/spells/196.png diff --git a/resources/spells/197.png b/addons/tCrossBar/resources/spells/197.png similarity index 100% rename from resources/spells/197.png rename to addons/tCrossBar/resources/spells/197.png diff --git a/resources/spells/198.png b/addons/tCrossBar/resources/spells/198.png similarity index 100% rename from resources/spells/198.png rename to addons/tCrossBar/resources/spells/198.png diff --git a/resources/spells/199.png b/addons/tCrossBar/resources/spells/199.png similarity index 100% rename from resources/spells/199.png rename to addons/tCrossBar/resources/spells/199.png diff --git a/resources/spells/2.png b/addons/tCrossBar/resources/spells/2.png similarity index 100% rename from resources/spells/2.png rename to addons/tCrossBar/resources/spells/2.png diff --git a/resources/spells/20.png b/addons/tCrossBar/resources/spells/20.png similarity index 100% rename from resources/spells/20.png rename to addons/tCrossBar/resources/spells/20.png diff --git a/resources/spells/200.png b/addons/tCrossBar/resources/spells/200.png similarity index 100% rename from resources/spells/200.png rename to addons/tCrossBar/resources/spells/200.png diff --git a/resources/spells/201.png b/addons/tCrossBar/resources/spells/201.png similarity index 100% rename from resources/spells/201.png rename to addons/tCrossBar/resources/spells/201.png diff --git a/resources/spells/202.png b/addons/tCrossBar/resources/spells/202.png similarity index 100% rename from resources/spells/202.png rename to addons/tCrossBar/resources/spells/202.png diff --git a/resources/spells/203.png b/addons/tCrossBar/resources/spells/203.png similarity index 100% rename from resources/spells/203.png rename to addons/tCrossBar/resources/spells/203.png diff --git a/resources/spells/204.png b/addons/tCrossBar/resources/spells/204.png similarity index 100% rename from resources/spells/204.png rename to addons/tCrossBar/resources/spells/204.png diff --git a/resources/spells/205.png b/addons/tCrossBar/resources/spells/205.png similarity index 100% rename from resources/spells/205.png rename to addons/tCrossBar/resources/spells/205.png diff --git a/resources/spells/206.png b/addons/tCrossBar/resources/spells/206.png similarity index 100% rename from resources/spells/206.png rename to addons/tCrossBar/resources/spells/206.png diff --git a/resources/spells/207.png b/addons/tCrossBar/resources/spells/207.png similarity index 100% rename from resources/spells/207.png rename to addons/tCrossBar/resources/spells/207.png diff --git a/resources/spells/208.png b/addons/tCrossBar/resources/spells/208.png similarity index 100% rename from resources/spells/208.png rename to addons/tCrossBar/resources/spells/208.png diff --git a/resources/spells/209.png b/addons/tCrossBar/resources/spells/209.png similarity index 100% rename from resources/spells/209.png rename to addons/tCrossBar/resources/spells/209.png diff --git a/resources/spells/21.png b/addons/tCrossBar/resources/spells/21.png similarity index 100% rename from resources/spells/21.png rename to addons/tCrossBar/resources/spells/21.png diff --git a/resources/spells/210.png b/addons/tCrossBar/resources/spells/210.png similarity index 100% rename from resources/spells/210.png rename to addons/tCrossBar/resources/spells/210.png diff --git a/resources/spells/211.png b/addons/tCrossBar/resources/spells/211.png similarity index 100% rename from resources/spells/211.png rename to addons/tCrossBar/resources/spells/211.png diff --git a/resources/spells/212.png b/addons/tCrossBar/resources/spells/212.png similarity index 100% rename from resources/spells/212.png rename to addons/tCrossBar/resources/spells/212.png diff --git a/resources/spells/213.png b/addons/tCrossBar/resources/spells/213.png similarity index 100% rename from resources/spells/213.png rename to addons/tCrossBar/resources/spells/213.png diff --git a/resources/spells/214.png b/addons/tCrossBar/resources/spells/214.png similarity index 100% rename from resources/spells/214.png rename to addons/tCrossBar/resources/spells/214.png diff --git a/resources/spells/215.png b/addons/tCrossBar/resources/spells/215.png similarity index 100% rename from resources/spells/215.png rename to addons/tCrossBar/resources/spells/215.png diff --git a/resources/spells/216.png b/addons/tCrossBar/resources/spells/216.png similarity index 100% rename from resources/spells/216.png rename to addons/tCrossBar/resources/spells/216.png diff --git a/resources/spells/217.png b/addons/tCrossBar/resources/spells/217.png similarity index 100% rename from resources/spells/217.png rename to addons/tCrossBar/resources/spells/217.png diff --git a/resources/spells/218.png b/addons/tCrossBar/resources/spells/218.png similarity index 100% rename from resources/spells/218.png rename to addons/tCrossBar/resources/spells/218.png diff --git a/resources/spells/219.png b/addons/tCrossBar/resources/spells/219.png similarity index 100% rename from resources/spells/219.png rename to addons/tCrossBar/resources/spells/219.png diff --git a/resources/spells/22.png b/addons/tCrossBar/resources/spells/22.png similarity index 100% rename from resources/spells/22.png rename to addons/tCrossBar/resources/spells/22.png diff --git a/resources/spells/220.png b/addons/tCrossBar/resources/spells/220.png similarity index 100% rename from resources/spells/220.png rename to addons/tCrossBar/resources/spells/220.png diff --git a/resources/spells/221.png b/addons/tCrossBar/resources/spells/221.png similarity index 100% rename from resources/spells/221.png rename to addons/tCrossBar/resources/spells/221.png diff --git a/resources/spells/222.png b/addons/tCrossBar/resources/spells/222.png similarity index 100% rename from resources/spells/222.png rename to addons/tCrossBar/resources/spells/222.png diff --git a/resources/spells/223.png b/addons/tCrossBar/resources/spells/223.png similarity index 100% rename from resources/spells/223.png rename to addons/tCrossBar/resources/spells/223.png diff --git a/resources/spells/224.png b/addons/tCrossBar/resources/spells/224.png similarity index 100% rename from resources/spells/224.png rename to addons/tCrossBar/resources/spells/224.png diff --git a/resources/spells/225.png b/addons/tCrossBar/resources/spells/225.png similarity index 100% rename from resources/spells/225.png rename to addons/tCrossBar/resources/spells/225.png diff --git a/resources/spells/226.png b/addons/tCrossBar/resources/spells/226.png similarity index 100% rename from resources/spells/226.png rename to addons/tCrossBar/resources/spells/226.png diff --git a/resources/spells/227.png b/addons/tCrossBar/resources/spells/227.png similarity index 100% rename from resources/spells/227.png rename to addons/tCrossBar/resources/spells/227.png diff --git a/resources/spells/228.png b/addons/tCrossBar/resources/spells/228.png similarity index 100% rename from resources/spells/228.png rename to addons/tCrossBar/resources/spells/228.png diff --git a/resources/spells/229.png b/addons/tCrossBar/resources/spells/229.png similarity index 100% rename from resources/spells/229.png rename to addons/tCrossBar/resources/spells/229.png diff --git a/resources/spells/23.png b/addons/tCrossBar/resources/spells/23.png similarity index 100% rename from resources/spells/23.png rename to addons/tCrossBar/resources/spells/23.png diff --git a/resources/spells/230.png b/addons/tCrossBar/resources/spells/230.png similarity index 100% rename from resources/spells/230.png rename to addons/tCrossBar/resources/spells/230.png diff --git a/resources/spells/231.png b/addons/tCrossBar/resources/spells/231.png similarity index 100% rename from resources/spells/231.png rename to addons/tCrossBar/resources/spells/231.png diff --git a/resources/spells/232.png b/addons/tCrossBar/resources/spells/232.png similarity index 100% rename from resources/spells/232.png rename to addons/tCrossBar/resources/spells/232.png diff --git a/resources/spells/233.png b/addons/tCrossBar/resources/spells/233.png similarity index 100% rename from resources/spells/233.png rename to addons/tCrossBar/resources/spells/233.png diff --git a/resources/spells/234.png b/addons/tCrossBar/resources/spells/234.png similarity index 100% rename from resources/spells/234.png rename to addons/tCrossBar/resources/spells/234.png diff --git a/resources/spells/235.png b/addons/tCrossBar/resources/spells/235.png similarity index 100% rename from resources/spells/235.png rename to addons/tCrossBar/resources/spells/235.png diff --git a/resources/spells/236.png b/addons/tCrossBar/resources/spells/236.png similarity index 100% rename from resources/spells/236.png rename to addons/tCrossBar/resources/spells/236.png diff --git a/resources/spells/237.png b/addons/tCrossBar/resources/spells/237.png similarity index 100% rename from resources/spells/237.png rename to addons/tCrossBar/resources/spells/237.png diff --git a/resources/spells/238.png b/addons/tCrossBar/resources/spells/238.png similarity index 100% rename from resources/spells/238.png rename to addons/tCrossBar/resources/spells/238.png diff --git a/resources/spells/239.png b/addons/tCrossBar/resources/spells/239.png similarity index 100% rename from resources/spells/239.png rename to addons/tCrossBar/resources/spells/239.png diff --git a/resources/spells/24.png b/addons/tCrossBar/resources/spells/24.png similarity index 100% rename from resources/spells/24.png rename to addons/tCrossBar/resources/spells/24.png diff --git a/resources/spells/240.png b/addons/tCrossBar/resources/spells/240.png similarity index 100% rename from resources/spells/240.png rename to addons/tCrossBar/resources/spells/240.png diff --git a/resources/spells/241.png b/addons/tCrossBar/resources/spells/241.png similarity index 100% rename from resources/spells/241.png rename to addons/tCrossBar/resources/spells/241.png diff --git a/resources/spells/242.png b/addons/tCrossBar/resources/spells/242.png similarity index 100% rename from resources/spells/242.png rename to addons/tCrossBar/resources/spells/242.png diff --git a/resources/spells/243.png b/addons/tCrossBar/resources/spells/243.png similarity index 100% rename from resources/spells/243.png rename to addons/tCrossBar/resources/spells/243.png diff --git a/resources/spells/244.png b/addons/tCrossBar/resources/spells/244.png similarity index 100% rename from resources/spells/244.png rename to addons/tCrossBar/resources/spells/244.png diff --git a/resources/spells/245.png b/addons/tCrossBar/resources/spells/245.png similarity index 100% rename from resources/spells/245.png rename to addons/tCrossBar/resources/spells/245.png diff --git a/resources/spells/246.png b/addons/tCrossBar/resources/spells/246.png similarity index 100% rename from resources/spells/246.png rename to addons/tCrossBar/resources/spells/246.png diff --git a/resources/spells/247.png b/addons/tCrossBar/resources/spells/247.png similarity index 100% rename from resources/spells/247.png rename to addons/tCrossBar/resources/spells/247.png diff --git a/resources/spells/248.png b/addons/tCrossBar/resources/spells/248.png similarity index 100% rename from resources/spells/248.png rename to addons/tCrossBar/resources/spells/248.png diff --git a/resources/spells/249.png b/addons/tCrossBar/resources/spells/249.png similarity index 100% rename from resources/spells/249.png rename to addons/tCrossBar/resources/spells/249.png diff --git a/resources/spells/25.png b/addons/tCrossBar/resources/spells/25.png similarity index 100% rename from resources/spells/25.png rename to addons/tCrossBar/resources/spells/25.png diff --git a/resources/spells/250.png b/addons/tCrossBar/resources/spells/250.png similarity index 100% rename from resources/spells/250.png rename to addons/tCrossBar/resources/spells/250.png diff --git a/resources/spells/251.png b/addons/tCrossBar/resources/spells/251.png similarity index 100% rename from resources/spells/251.png rename to addons/tCrossBar/resources/spells/251.png diff --git a/resources/spells/252.png b/addons/tCrossBar/resources/spells/252.png similarity index 100% rename from resources/spells/252.png rename to addons/tCrossBar/resources/spells/252.png diff --git a/resources/spells/253.png b/addons/tCrossBar/resources/spells/253.png similarity index 100% rename from resources/spells/253.png rename to addons/tCrossBar/resources/spells/253.png diff --git a/resources/spells/254.png b/addons/tCrossBar/resources/spells/254.png similarity index 100% rename from resources/spells/254.png rename to addons/tCrossBar/resources/spells/254.png diff --git a/resources/spells/255.png b/addons/tCrossBar/resources/spells/255.png similarity index 100% rename from resources/spells/255.png rename to addons/tCrossBar/resources/spells/255.png diff --git a/resources/spells/258.png b/addons/tCrossBar/resources/spells/258.png similarity index 100% rename from resources/spells/258.png rename to addons/tCrossBar/resources/spells/258.png diff --git a/resources/spells/259.png b/addons/tCrossBar/resources/spells/259.png similarity index 100% rename from resources/spells/259.png rename to addons/tCrossBar/resources/spells/259.png diff --git a/resources/spells/26.png b/addons/tCrossBar/resources/spells/26.png similarity index 100% rename from resources/spells/26.png rename to addons/tCrossBar/resources/spells/26.png diff --git a/resources/spells/260.png b/addons/tCrossBar/resources/spells/260.png similarity index 100% rename from resources/spells/260.png rename to addons/tCrossBar/resources/spells/260.png diff --git a/resources/spells/261.png b/addons/tCrossBar/resources/spells/261.png similarity index 100% rename from resources/spells/261.png rename to addons/tCrossBar/resources/spells/261.png diff --git a/resources/spells/262.png b/addons/tCrossBar/resources/spells/262.png similarity index 100% rename from resources/spells/262.png rename to addons/tCrossBar/resources/spells/262.png diff --git a/resources/spells/263.png b/addons/tCrossBar/resources/spells/263.png similarity index 100% rename from resources/spells/263.png rename to addons/tCrossBar/resources/spells/263.png diff --git a/resources/spells/264.png b/addons/tCrossBar/resources/spells/264.png similarity index 100% rename from resources/spells/264.png rename to addons/tCrossBar/resources/spells/264.png diff --git a/resources/spells/265.png b/addons/tCrossBar/resources/spells/265.png similarity index 100% rename from resources/spells/265.png rename to addons/tCrossBar/resources/spells/265.png diff --git a/resources/spells/266.png b/addons/tCrossBar/resources/spells/266.png similarity index 100% rename from resources/spells/266.png rename to addons/tCrossBar/resources/spells/266.png diff --git a/resources/spells/267.png b/addons/tCrossBar/resources/spells/267.png similarity index 100% rename from resources/spells/267.png rename to addons/tCrossBar/resources/spells/267.png diff --git a/resources/spells/268.png b/addons/tCrossBar/resources/spells/268.png similarity index 100% rename from resources/spells/268.png rename to addons/tCrossBar/resources/spells/268.png diff --git a/resources/spells/269.png b/addons/tCrossBar/resources/spells/269.png similarity index 100% rename from resources/spells/269.png rename to addons/tCrossBar/resources/spells/269.png diff --git a/resources/spells/27.png b/addons/tCrossBar/resources/spells/27.png similarity index 100% rename from resources/spells/27.png rename to addons/tCrossBar/resources/spells/27.png diff --git a/resources/spells/270.png b/addons/tCrossBar/resources/spells/270.png similarity index 100% rename from resources/spells/270.png rename to addons/tCrossBar/resources/spells/270.png diff --git a/resources/spells/271.png b/addons/tCrossBar/resources/spells/271.png similarity index 100% rename from resources/spells/271.png rename to addons/tCrossBar/resources/spells/271.png diff --git a/resources/spells/272.png b/addons/tCrossBar/resources/spells/272.png similarity index 100% rename from resources/spells/272.png rename to addons/tCrossBar/resources/spells/272.png diff --git a/resources/spells/273.png b/addons/tCrossBar/resources/spells/273.png similarity index 100% rename from resources/spells/273.png rename to addons/tCrossBar/resources/spells/273.png diff --git a/resources/spells/274.png b/addons/tCrossBar/resources/spells/274.png similarity index 100% rename from resources/spells/274.png rename to addons/tCrossBar/resources/spells/274.png diff --git a/resources/spells/275.png b/addons/tCrossBar/resources/spells/275.png similarity index 100% rename from resources/spells/275.png rename to addons/tCrossBar/resources/spells/275.png diff --git a/resources/spells/276.png b/addons/tCrossBar/resources/spells/276.png similarity index 100% rename from resources/spells/276.png rename to addons/tCrossBar/resources/spells/276.png diff --git a/resources/spells/277.png b/addons/tCrossBar/resources/spells/277.png similarity index 100% rename from resources/spells/277.png rename to addons/tCrossBar/resources/spells/277.png diff --git a/resources/spells/278.png b/addons/tCrossBar/resources/spells/278.png similarity index 100% rename from resources/spells/278.png rename to addons/tCrossBar/resources/spells/278.png diff --git a/resources/spells/279.png b/addons/tCrossBar/resources/spells/279.png similarity index 100% rename from resources/spells/279.png rename to addons/tCrossBar/resources/spells/279.png diff --git a/resources/spells/28.png b/addons/tCrossBar/resources/spells/28.png similarity index 100% rename from resources/spells/28.png rename to addons/tCrossBar/resources/spells/28.png diff --git a/resources/spells/280.png b/addons/tCrossBar/resources/spells/280.png similarity index 100% rename from resources/spells/280.png rename to addons/tCrossBar/resources/spells/280.png diff --git a/resources/spells/281.png b/addons/tCrossBar/resources/spells/281.png similarity index 100% rename from resources/spells/281.png rename to addons/tCrossBar/resources/spells/281.png diff --git a/resources/spells/282.png b/addons/tCrossBar/resources/spells/282.png similarity index 100% rename from resources/spells/282.png rename to addons/tCrossBar/resources/spells/282.png diff --git a/resources/spells/283.png b/addons/tCrossBar/resources/spells/283.png similarity index 100% rename from resources/spells/283.png rename to addons/tCrossBar/resources/spells/283.png diff --git a/resources/spells/284.png b/addons/tCrossBar/resources/spells/284.png similarity index 100% rename from resources/spells/284.png rename to addons/tCrossBar/resources/spells/284.png diff --git a/resources/spells/285.png b/addons/tCrossBar/resources/spells/285.png similarity index 100% rename from resources/spells/285.png rename to addons/tCrossBar/resources/spells/285.png diff --git a/resources/spells/286.png b/addons/tCrossBar/resources/spells/286.png similarity index 100% rename from resources/spells/286.png rename to addons/tCrossBar/resources/spells/286.png diff --git a/resources/spells/287.png b/addons/tCrossBar/resources/spells/287.png similarity index 100% rename from resources/spells/287.png rename to addons/tCrossBar/resources/spells/287.png diff --git a/resources/spells/288.png b/addons/tCrossBar/resources/spells/288.png similarity index 100% rename from resources/spells/288.png rename to addons/tCrossBar/resources/spells/288.png diff --git a/resources/spells/289.png b/addons/tCrossBar/resources/spells/289.png similarity index 100% rename from resources/spells/289.png rename to addons/tCrossBar/resources/spells/289.png diff --git a/resources/spells/29.png b/addons/tCrossBar/resources/spells/29.png similarity index 100% rename from resources/spells/29.png rename to addons/tCrossBar/resources/spells/29.png diff --git a/resources/spells/290.png b/addons/tCrossBar/resources/spells/290.png similarity index 100% rename from resources/spells/290.png rename to addons/tCrossBar/resources/spells/290.png diff --git a/resources/spells/291.png b/addons/tCrossBar/resources/spells/291.png similarity index 100% rename from resources/spells/291.png rename to addons/tCrossBar/resources/spells/291.png diff --git a/resources/spells/292.png b/addons/tCrossBar/resources/spells/292.png similarity index 100% rename from resources/spells/292.png rename to addons/tCrossBar/resources/spells/292.png diff --git a/resources/spells/293.png b/addons/tCrossBar/resources/spells/293.png similarity index 100% rename from resources/spells/293.png rename to addons/tCrossBar/resources/spells/293.png diff --git a/resources/spells/294.png b/addons/tCrossBar/resources/spells/294.png similarity index 100% rename from resources/spells/294.png rename to addons/tCrossBar/resources/spells/294.png diff --git a/resources/spells/295.png b/addons/tCrossBar/resources/spells/295.png similarity index 100% rename from resources/spells/295.png rename to addons/tCrossBar/resources/spells/295.png diff --git a/resources/spells/296.png b/addons/tCrossBar/resources/spells/296.png similarity index 100% rename from resources/spells/296.png rename to addons/tCrossBar/resources/spells/296.png diff --git a/resources/spells/297.png b/addons/tCrossBar/resources/spells/297.png similarity index 100% rename from resources/spells/297.png rename to addons/tCrossBar/resources/spells/297.png diff --git a/resources/spells/298.png b/addons/tCrossBar/resources/spells/298.png similarity index 100% rename from resources/spells/298.png rename to addons/tCrossBar/resources/spells/298.png diff --git a/resources/spells/299.png b/addons/tCrossBar/resources/spells/299.png similarity index 100% rename from resources/spells/299.png rename to addons/tCrossBar/resources/spells/299.png diff --git a/resources/spells/3.png b/addons/tCrossBar/resources/spells/3.png similarity index 100% rename from resources/spells/3.png rename to addons/tCrossBar/resources/spells/3.png diff --git a/resources/spells/30.png b/addons/tCrossBar/resources/spells/30.png similarity index 100% rename from resources/spells/30.png rename to addons/tCrossBar/resources/spells/30.png diff --git a/resources/spells/300.png b/addons/tCrossBar/resources/spells/300.png similarity index 100% rename from resources/spells/300.png rename to addons/tCrossBar/resources/spells/300.png diff --git a/resources/spells/301.png b/addons/tCrossBar/resources/spells/301.png similarity index 100% rename from resources/spells/301.png rename to addons/tCrossBar/resources/spells/301.png diff --git a/resources/spells/302.png b/addons/tCrossBar/resources/spells/302.png similarity index 100% rename from resources/spells/302.png rename to addons/tCrossBar/resources/spells/302.png diff --git a/resources/spells/303.png b/addons/tCrossBar/resources/spells/303.png similarity index 100% rename from resources/spells/303.png rename to addons/tCrossBar/resources/spells/303.png diff --git a/resources/spells/304.png b/addons/tCrossBar/resources/spells/304.png similarity index 100% rename from resources/spells/304.png rename to addons/tCrossBar/resources/spells/304.png diff --git a/resources/spells/305.png b/addons/tCrossBar/resources/spells/305.png similarity index 100% rename from resources/spells/305.png rename to addons/tCrossBar/resources/spells/305.png diff --git a/resources/spells/306.png b/addons/tCrossBar/resources/spells/306.png similarity index 100% rename from resources/spells/306.png rename to addons/tCrossBar/resources/spells/306.png diff --git a/resources/spells/307.png b/addons/tCrossBar/resources/spells/307.png similarity index 100% rename from resources/spells/307.png rename to addons/tCrossBar/resources/spells/307.png diff --git a/resources/spells/308.png b/addons/tCrossBar/resources/spells/308.png similarity index 100% rename from resources/spells/308.png rename to addons/tCrossBar/resources/spells/308.png diff --git a/resources/spells/309.png b/addons/tCrossBar/resources/spells/309.png similarity index 100% rename from resources/spells/309.png rename to addons/tCrossBar/resources/spells/309.png diff --git a/resources/spells/31.png b/addons/tCrossBar/resources/spells/31.png similarity index 100% rename from resources/spells/31.png rename to addons/tCrossBar/resources/spells/31.png diff --git a/resources/spells/310.png b/addons/tCrossBar/resources/spells/310.png similarity index 100% rename from resources/spells/310.png rename to addons/tCrossBar/resources/spells/310.png diff --git a/resources/spells/311.png b/addons/tCrossBar/resources/spells/311.png similarity index 100% rename from resources/spells/311.png rename to addons/tCrossBar/resources/spells/311.png diff --git a/resources/spells/312.png b/addons/tCrossBar/resources/spells/312.png similarity index 100% rename from resources/spells/312.png rename to addons/tCrossBar/resources/spells/312.png diff --git a/resources/spells/313.png b/addons/tCrossBar/resources/spells/313.png similarity index 100% rename from resources/spells/313.png rename to addons/tCrossBar/resources/spells/313.png diff --git a/resources/spells/314.png b/addons/tCrossBar/resources/spells/314.png similarity index 100% rename from resources/spells/314.png rename to addons/tCrossBar/resources/spells/314.png diff --git a/resources/spells/315.png b/addons/tCrossBar/resources/spells/315.png similarity index 100% rename from resources/spells/315.png rename to addons/tCrossBar/resources/spells/315.png diff --git a/resources/spells/316.png b/addons/tCrossBar/resources/spells/316.png similarity index 100% rename from resources/spells/316.png rename to addons/tCrossBar/resources/spells/316.png diff --git a/resources/spells/317.png b/addons/tCrossBar/resources/spells/317.png similarity index 100% rename from resources/spells/317.png rename to addons/tCrossBar/resources/spells/317.png diff --git a/resources/spells/318.png b/addons/tCrossBar/resources/spells/318.png similarity index 100% rename from resources/spells/318.png rename to addons/tCrossBar/resources/spells/318.png diff --git a/resources/spells/319.png b/addons/tCrossBar/resources/spells/319.png similarity index 100% rename from resources/spells/319.png rename to addons/tCrossBar/resources/spells/319.png diff --git a/resources/spells/32.png b/addons/tCrossBar/resources/spells/32.png similarity index 100% rename from resources/spells/32.png rename to addons/tCrossBar/resources/spells/32.png diff --git a/resources/spells/320.png b/addons/tCrossBar/resources/spells/320.png similarity index 100% rename from resources/spells/320.png rename to addons/tCrossBar/resources/spells/320.png diff --git a/resources/spells/321.png b/addons/tCrossBar/resources/spells/321.png similarity index 100% rename from resources/spells/321.png rename to addons/tCrossBar/resources/spells/321.png diff --git a/resources/spells/322.png b/addons/tCrossBar/resources/spells/322.png similarity index 100% rename from resources/spells/322.png rename to addons/tCrossBar/resources/spells/322.png diff --git a/resources/spells/323.png b/addons/tCrossBar/resources/spells/323.png similarity index 100% rename from resources/spells/323.png rename to addons/tCrossBar/resources/spells/323.png diff --git a/resources/spells/324.png b/addons/tCrossBar/resources/spells/324.png similarity index 100% rename from resources/spells/324.png rename to addons/tCrossBar/resources/spells/324.png diff --git a/resources/spells/325.png b/addons/tCrossBar/resources/spells/325.png similarity index 100% rename from resources/spells/325.png rename to addons/tCrossBar/resources/spells/325.png diff --git a/resources/spells/326.png b/addons/tCrossBar/resources/spells/326.png similarity index 100% rename from resources/spells/326.png rename to addons/tCrossBar/resources/spells/326.png diff --git a/resources/spells/327.png b/addons/tCrossBar/resources/spells/327.png similarity index 100% rename from resources/spells/327.png rename to addons/tCrossBar/resources/spells/327.png diff --git a/resources/spells/328.png b/addons/tCrossBar/resources/spells/328.png similarity index 100% rename from resources/spells/328.png rename to addons/tCrossBar/resources/spells/328.png diff --git a/resources/spells/329.png b/addons/tCrossBar/resources/spells/329.png similarity index 100% rename from resources/spells/329.png rename to addons/tCrossBar/resources/spells/329.png diff --git a/resources/spells/33.png b/addons/tCrossBar/resources/spells/33.png similarity index 100% rename from resources/spells/33.png rename to addons/tCrossBar/resources/spells/33.png diff --git a/resources/spells/330.png b/addons/tCrossBar/resources/spells/330.png similarity index 100% rename from resources/spells/330.png rename to addons/tCrossBar/resources/spells/330.png diff --git a/resources/spells/331.png b/addons/tCrossBar/resources/spells/331.png similarity index 100% rename from resources/spells/331.png rename to addons/tCrossBar/resources/spells/331.png diff --git a/resources/spells/332.png b/addons/tCrossBar/resources/spells/332.png similarity index 100% rename from resources/spells/332.png rename to addons/tCrossBar/resources/spells/332.png diff --git a/resources/spells/333.png b/addons/tCrossBar/resources/spells/333.png similarity index 100% rename from resources/spells/333.png rename to addons/tCrossBar/resources/spells/333.png diff --git a/resources/spells/334.png b/addons/tCrossBar/resources/spells/334.png similarity index 100% rename from resources/spells/334.png rename to addons/tCrossBar/resources/spells/334.png diff --git a/resources/spells/335.png b/addons/tCrossBar/resources/spells/335.png similarity index 100% rename from resources/spells/335.png rename to addons/tCrossBar/resources/spells/335.png diff --git a/resources/spells/336.png b/addons/tCrossBar/resources/spells/336.png similarity index 100% rename from resources/spells/336.png rename to addons/tCrossBar/resources/spells/336.png diff --git a/resources/spells/337.png b/addons/tCrossBar/resources/spells/337.png similarity index 100% rename from resources/spells/337.png rename to addons/tCrossBar/resources/spells/337.png diff --git a/resources/spells/338.png b/addons/tCrossBar/resources/spells/338.png similarity index 100% rename from resources/spells/338.png rename to addons/tCrossBar/resources/spells/338.png diff --git a/resources/spells/339.png b/addons/tCrossBar/resources/spells/339.png similarity index 100% rename from resources/spells/339.png rename to addons/tCrossBar/resources/spells/339.png diff --git a/resources/spells/34.png b/addons/tCrossBar/resources/spells/34.png similarity index 100% rename from resources/spells/34.png rename to addons/tCrossBar/resources/spells/34.png diff --git a/resources/spells/340.png b/addons/tCrossBar/resources/spells/340.png similarity index 100% rename from resources/spells/340.png rename to addons/tCrossBar/resources/spells/340.png diff --git a/resources/spells/341.png b/addons/tCrossBar/resources/spells/341.png similarity index 100% rename from resources/spells/341.png rename to addons/tCrossBar/resources/spells/341.png diff --git a/resources/spells/342.png b/addons/tCrossBar/resources/spells/342.png similarity index 100% rename from resources/spells/342.png rename to addons/tCrossBar/resources/spells/342.png diff --git a/resources/spells/343.png b/addons/tCrossBar/resources/spells/343.png similarity index 100% rename from resources/spells/343.png rename to addons/tCrossBar/resources/spells/343.png diff --git a/resources/spells/344.png b/addons/tCrossBar/resources/spells/344.png similarity index 100% rename from resources/spells/344.png rename to addons/tCrossBar/resources/spells/344.png diff --git a/resources/spells/345.png b/addons/tCrossBar/resources/spells/345.png similarity index 100% rename from resources/spells/345.png rename to addons/tCrossBar/resources/spells/345.png diff --git a/resources/spells/346.png b/addons/tCrossBar/resources/spells/346.png similarity index 100% rename from resources/spells/346.png rename to addons/tCrossBar/resources/spells/346.png diff --git a/resources/spells/347.png b/addons/tCrossBar/resources/spells/347.png similarity index 100% rename from resources/spells/347.png rename to addons/tCrossBar/resources/spells/347.png diff --git a/resources/spells/348.png b/addons/tCrossBar/resources/spells/348.png similarity index 100% rename from resources/spells/348.png rename to addons/tCrossBar/resources/spells/348.png diff --git a/resources/spells/349.png b/addons/tCrossBar/resources/spells/349.png similarity index 100% rename from resources/spells/349.png rename to addons/tCrossBar/resources/spells/349.png diff --git a/resources/spells/35.png b/addons/tCrossBar/resources/spells/35.png similarity index 100% rename from resources/spells/35.png rename to addons/tCrossBar/resources/spells/35.png diff --git a/resources/spells/350.png b/addons/tCrossBar/resources/spells/350.png similarity index 100% rename from resources/spells/350.png rename to addons/tCrossBar/resources/spells/350.png diff --git a/resources/spells/351.png b/addons/tCrossBar/resources/spells/351.png similarity index 100% rename from resources/spells/351.png rename to addons/tCrossBar/resources/spells/351.png diff --git a/resources/spells/352.png b/addons/tCrossBar/resources/spells/352.png similarity index 100% rename from resources/spells/352.png rename to addons/tCrossBar/resources/spells/352.png diff --git a/resources/spells/353.png b/addons/tCrossBar/resources/spells/353.png similarity index 100% rename from resources/spells/353.png rename to addons/tCrossBar/resources/spells/353.png diff --git a/resources/spells/354.png b/addons/tCrossBar/resources/spells/354.png similarity index 100% rename from resources/spells/354.png rename to addons/tCrossBar/resources/spells/354.png diff --git a/resources/spells/355.png b/addons/tCrossBar/resources/spells/355.png similarity index 100% rename from resources/spells/355.png rename to addons/tCrossBar/resources/spells/355.png diff --git a/resources/spells/356.png b/addons/tCrossBar/resources/spells/356.png similarity index 100% rename from resources/spells/356.png rename to addons/tCrossBar/resources/spells/356.png diff --git a/resources/spells/357.png b/addons/tCrossBar/resources/spells/357.png similarity index 100% rename from resources/spells/357.png rename to addons/tCrossBar/resources/spells/357.png diff --git a/resources/spells/358.png b/addons/tCrossBar/resources/spells/358.png similarity index 100% rename from resources/spells/358.png rename to addons/tCrossBar/resources/spells/358.png diff --git a/resources/spells/359.png b/addons/tCrossBar/resources/spells/359.png similarity index 100% rename from resources/spells/359.png rename to addons/tCrossBar/resources/spells/359.png diff --git a/resources/spells/36.png b/addons/tCrossBar/resources/spells/36.png similarity index 100% rename from resources/spells/36.png rename to addons/tCrossBar/resources/spells/36.png diff --git a/resources/spells/360.png b/addons/tCrossBar/resources/spells/360.png similarity index 100% rename from resources/spells/360.png rename to addons/tCrossBar/resources/spells/360.png diff --git a/resources/spells/361.png b/addons/tCrossBar/resources/spells/361.png similarity index 100% rename from resources/spells/361.png rename to addons/tCrossBar/resources/spells/361.png diff --git a/resources/spells/362.png b/addons/tCrossBar/resources/spells/362.png similarity index 100% rename from resources/spells/362.png rename to addons/tCrossBar/resources/spells/362.png diff --git a/resources/spells/363.png b/addons/tCrossBar/resources/spells/363.png similarity index 100% rename from resources/spells/363.png rename to addons/tCrossBar/resources/spells/363.png diff --git a/resources/spells/364.png b/addons/tCrossBar/resources/spells/364.png similarity index 100% rename from resources/spells/364.png rename to addons/tCrossBar/resources/spells/364.png diff --git a/resources/spells/365.png b/addons/tCrossBar/resources/spells/365.png similarity index 100% rename from resources/spells/365.png rename to addons/tCrossBar/resources/spells/365.png diff --git a/resources/spells/366.png b/addons/tCrossBar/resources/spells/366.png similarity index 100% rename from resources/spells/366.png rename to addons/tCrossBar/resources/spells/366.png diff --git a/resources/spells/368.png b/addons/tCrossBar/resources/spells/368.png similarity index 100% rename from resources/spells/368.png rename to addons/tCrossBar/resources/spells/368.png diff --git a/resources/spells/369.png b/addons/tCrossBar/resources/spells/369.png similarity index 100% rename from resources/spells/369.png rename to addons/tCrossBar/resources/spells/369.png diff --git a/resources/spells/37.png b/addons/tCrossBar/resources/spells/37.png similarity index 100% rename from resources/spells/37.png rename to addons/tCrossBar/resources/spells/37.png diff --git a/resources/spells/370.png b/addons/tCrossBar/resources/spells/370.png similarity index 100% rename from resources/spells/370.png rename to addons/tCrossBar/resources/spells/370.png diff --git a/resources/spells/371.png b/addons/tCrossBar/resources/spells/371.png similarity index 100% rename from resources/spells/371.png rename to addons/tCrossBar/resources/spells/371.png diff --git a/resources/spells/372.png b/addons/tCrossBar/resources/spells/372.png similarity index 100% rename from resources/spells/372.png rename to addons/tCrossBar/resources/spells/372.png diff --git a/resources/spells/373.png b/addons/tCrossBar/resources/spells/373.png similarity index 100% rename from resources/spells/373.png rename to addons/tCrossBar/resources/spells/373.png diff --git a/resources/spells/374.png b/addons/tCrossBar/resources/spells/374.png similarity index 100% rename from resources/spells/374.png rename to addons/tCrossBar/resources/spells/374.png diff --git a/resources/spells/375.png b/addons/tCrossBar/resources/spells/375.png similarity index 100% rename from resources/spells/375.png rename to addons/tCrossBar/resources/spells/375.png diff --git a/resources/spells/376.png b/addons/tCrossBar/resources/spells/376.png similarity index 100% rename from resources/spells/376.png rename to addons/tCrossBar/resources/spells/376.png diff --git a/resources/spells/377.png b/addons/tCrossBar/resources/spells/377.png similarity index 100% rename from resources/spells/377.png rename to addons/tCrossBar/resources/spells/377.png diff --git a/resources/spells/378.png b/addons/tCrossBar/resources/spells/378.png similarity index 100% rename from resources/spells/378.png rename to addons/tCrossBar/resources/spells/378.png diff --git a/resources/spells/379.png b/addons/tCrossBar/resources/spells/379.png similarity index 100% rename from resources/spells/379.png rename to addons/tCrossBar/resources/spells/379.png diff --git a/resources/spells/38.png b/addons/tCrossBar/resources/spells/38.png similarity index 100% rename from resources/spells/38.png rename to addons/tCrossBar/resources/spells/38.png diff --git a/resources/spells/380.png b/addons/tCrossBar/resources/spells/380.png similarity index 100% rename from resources/spells/380.png rename to addons/tCrossBar/resources/spells/380.png diff --git a/resources/spells/381.png b/addons/tCrossBar/resources/spells/381.png similarity index 100% rename from resources/spells/381.png rename to addons/tCrossBar/resources/spells/381.png diff --git a/resources/spells/382.png b/addons/tCrossBar/resources/spells/382.png similarity index 100% rename from resources/spells/382.png rename to addons/tCrossBar/resources/spells/382.png diff --git a/resources/spells/383.png b/addons/tCrossBar/resources/spells/383.png similarity index 100% rename from resources/spells/383.png rename to addons/tCrossBar/resources/spells/383.png diff --git a/resources/spells/384.png b/addons/tCrossBar/resources/spells/384.png similarity index 100% rename from resources/spells/384.png rename to addons/tCrossBar/resources/spells/384.png diff --git a/resources/spells/385.png b/addons/tCrossBar/resources/spells/385.png similarity index 100% rename from resources/spells/385.png rename to addons/tCrossBar/resources/spells/385.png diff --git a/resources/spells/386.png b/addons/tCrossBar/resources/spells/386.png similarity index 100% rename from resources/spells/386.png rename to addons/tCrossBar/resources/spells/386.png diff --git a/resources/spells/387.png b/addons/tCrossBar/resources/spells/387.png similarity index 100% rename from resources/spells/387.png rename to addons/tCrossBar/resources/spells/387.png diff --git a/resources/spells/388.png b/addons/tCrossBar/resources/spells/388.png similarity index 100% rename from resources/spells/388.png rename to addons/tCrossBar/resources/spells/388.png diff --git a/resources/spells/389.png b/addons/tCrossBar/resources/spells/389.png similarity index 100% rename from resources/spells/389.png rename to addons/tCrossBar/resources/spells/389.png diff --git a/resources/spells/39.png b/addons/tCrossBar/resources/spells/39.png similarity index 100% rename from resources/spells/39.png rename to addons/tCrossBar/resources/spells/39.png diff --git a/resources/spells/390.png b/addons/tCrossBar/resources/spells/390.png similarity index 100% rename from resources/spells/390.png rename to addons/tCrossBar/resources/spells/390.png diff --git a/resources/spells/391.png b/addons/tCrossBar/resources/spells/391.png similarity index 100% rename from resources/spells/391.png rename to addons/tCrossBar/resources/spells/391.png diff --git a/resources/spells/392.png b/addons/tCrossBar/resources/spells/392.png similarity index 100% rename from resources/spells/392.png rename to addons/tCrossBar/resources/spells/392.png diff --git a/resources/spells/393.png b/addons/tCrossBar/resources/spells/393.png similarity index 100% rename from resources/spells/393.png rename to addons/tCrossBar/resources/spells/393.png diff --git a/resources/spells/394.png b/addons/tCrossBar/resources/spells/394.png similarity index 100% rename from resources/spells/394.png rename to addons/tCrossBar/resources/spells/394.png diff --git a/resources/spells/395.png b/addons/tCrossBar/resources/spells/395.png similarity index 100% rename from resources/spells/395.png rename to addons/tCrossBar/resources/spells/395.png diff --git a/resources/spells/396.png b/addons/tCrossBar/resources/spells/396.png similarity index 100% rename from resources/spells/396.png rename to addons/tCrossBar/resources/spells/396.png diff --git a/resources/spells/397.png b/addons/tCrossBar/resources/spells/397.png similarity index 100% rename from resources/spells/397.png rename to addons/tCrossBar/resources/spells/397.png diff --git a/resources/spells/398.png b/addons/tCrossBar/resources/spells/398.png similarity index 100% rename from resources/spells/398.png rename to addons/tCrossBar/resources/spells/398.png diff --git a/resources/spells/399.png b/addons/tCrossBar/resources/spells/399.png similarity index 100% rename from resources/spells/399.png rename to addons/tCrossBar/resources/spells/399.png diff --git a/resources/spells/4.png b/addons/tCrossBar/resources/spells/4.png similarity index 100% rename from resources/spells/4.png rename to addons/tCrossBar/resources/spells/4.png diff --git a/resources/spells/40.png b/addons/tCrossBar/resources/spells/40.png similarity index 100% rename from resources/spells/40.png rename to addons/tCrossBar/resources/spells/40.png diff --git a/resources/spells/400.png b/addons/tCrossBar/resources/spells/400.png similarity index 100% rename from resources/spells/400.png rename to addons/tCrossBar/resources/spells/400.png diff --git a/resources/spells/401.png b/addons/tCrossBar/resources/spells/401.png similarity index 100% rename from resources/spells/401.png rename to addons/tCrossBar/resources/spells/401.png diff --git a/resources/spells/402.png b/addons/tCrossBar/resources/spells/402.png similarity index 100% rename from resources/spells/402.png rename to addons/tCrossBar/resources/spells/402.png diff --git a/resources/spells/403.png b/addons/tCrossBar/resources/spells/403.png similarity index 100% rename from resources/spells/403.png rename to addons/tCrossBar/resources/spells/403.png diff --git a/resources/spells/404.png b/addons/tCrossBar/resources/spells/404.png similarity index 100% rename from resources/spells/404.png rename to addons/tCrossBar/resources/spells/404.png diff --git a/resources/spells/405.png b/addons/tCrossBar/resources/spells/405.png similarity index 100% rename from resources/spells/405.png rename to addons/tCrossBar/resources/spells/405.png diff --git a/resources/spells/406.png b/addons/tCrossBar/resources/spells/406.png similarity index 100% rename from resources/spells/406.png rename to addons/tCrossBar/resources/spells/406.png diff --git a/resources/spells/407.png b/addons/tCrossBar/resources/spells/407.png similarity index 100% rename from resources/spells/407.png rename to addons/tCrossBar/resources/spells/407.png diff --git a/resources/spells/408.png b/addons/tCrossBar/resources/spells/408.png similarity index 100% rename from resources/spells/408.png rename to addons/tCrossBar/resources/spells/408.png diff --git a/resources/spells/409.png b/addons/tCrossBar/resources/spells/409.png similarity index 100% rename from resources/spells/409.png rename to addons/tCrossBar/resources/spells/409.png diff --git a/resources/spells/41.png b/addons/tCrossBar/resources/spells/41.png similarity index 100% rename from resources/spells/41.png rename to addons/tCrossBar/resources/spells/41.png diff --git a/resources/spells/410.png b/addons/tCrossBar/resources/spells/410.png similarity index 100% rename from resources/spells/410.png rename to addons/tCrossBar/resources/spells/410.png diff --git a/resources/spells/411.png b/addons/tCrossBar/resources/spells/411.png similarity index 100% rename from resources/spells/411.png rename to addons/tCrossBar/resources/spells/411.png diff --git a/resources/spells/412.png b/addons/tCrossBar/resources/spells/412.png similarity index 100% rename from resources/spells/412.png rename to addons/tCrossBar/resources/spells/412.png diff --git a/resources/spells/413.png b/addons/tCrossBar/resources/spells/413.png similarity index 100% rename from resources/spells/413.png rename to addons/tCrossBar/resources/spells/413.png diff --git a/resources/spells/414.png b/addons/tCrossBar/resources/spells/414.png similarity index 100% rename from resources/spells/414.png rename to addons/tCrossBar/resources/spells/414.png diff --git a/resources/spells/415.png b/addons/tCrossBar/resources/spells/415.png similarity index 100% rename from resources/spells/415.png rename to addons/tCrossBar/resources/spells/415.png diff --git a/resources/spells/416.png b/addons/tCrossBar/resources/spells/416.png similarity index 100% rename from resources/spells/416.png rename to addons/tCrossBar/resources/spells/416.png diff --git a/resources/spells/417.png b/addons/tCrossBar/resources/spells/417.png similarity index 100% rename from resources/spells/417.png rename to addons/tCrossBar/resources/spells/417.png diff --git a/resources/spells/418.png b/addons/tCrossBar/resources/spells/418.png similarity index 100% rename from resources/spells/418.png rename to addons/tCrossBar/resources/spells/418.png diff --git a/resources/spells/419.png b/addons/tCrossBar/resources/spells/419.png similarity index 100% rename from resources/spells/419.png rename to addons/tCrossBar/resources/spells/419.png diff --git a/resources/spells/42.png b/addons/tCrossBar/resources/spells/42.png similarity index 100% rename from resources/spells/42.png rename to addons/tCrossBar/resources/spells/42.png diff --git a/resources/spells/420.png b/addons/tCrossBar/resources/spells/420.png similarity index 100% rename from resources/spells/420.png rename to addons/tCrossBar/resources/spells/420.png diff --git a/resources/spells/421.png b/addons/tCrossBar/resources/spells/421.png similarity index 100% rename from resources/spells/421.png rename to addons/tCrossBar/resources/spells/421.png diff --git a/resources/spells/422.png b/addons/tCrossBar/resources/spells/422.png similarity index 100% rename from resources/spells/422.png rename to addons/tCrossBar/resources/spells/422.png diff --git a/resources/spells/423.png b/addons/tCrossBar/resources/spells/423.png similarity index 100% rename from resources/spells/423.png rename to addons/tCrossBar/resources/spells/423.png diff --git a/resources/spells/424.png b/addons/tCrossBar/resources/spells/424.png similarity index 100% rename from resources/spells/424.png rename to addons/tCrossBar/resources/spells/424.png diff --git a/resources/spells/425.png b/addons/tCrossBar/resources/spells/425.png similarity index 100% rename from resources/spells/425.png rename to addons/tCrossBar/resources/spells/425.png diff --git a/resources/spells/426.png b/addons/tCrossBar/resources/spells/426.png similarity index 100% rename from resources/spells/426.png rename to addons/tCrossBar/resources/spells/426.png diff --git a/resources/spells/427.png b/addons/tCrossBar/resources/spells/427.png similarity index 100% rename from resources/spells/427.png rename to addons/tCrossBar/resources/spells/427.png diff --git a/resources/spells/428.png b/addons/tCrossBar/resources/spells/428.png similarity index 100% rename from resources/spells/428.png rename to addons/tCrossBar/resources/spells/428.png diff --git a/resources/spells/429.png b/addons/tCrossBar/resources/spells/429.png similarity index 100% rename from resources/spells/429.png rename to addons/tCrossBar/resources/spells/429.png diff --git a/resources/spells/43.png b/addons/tCrossBar/resources/spells/43.png similarity index 100% rename from resources/spells/43.png rename to addons/tCrossBar/resources/spells/43.png diff --git a/resources/spells/430.png b/addons/tCrossBar/resources/spells/430.png similarity index 100% rename from resources/spells/430.png rename to addons/tCrossBar/resources/spells/430.png diff --git a/resources/spells/431.png b/addons/tCrossBar/resources/spells/431.png similarity index 100% rename from resources/spells/431.png rename to addons/tCrossBar/resources/spells/431.png diff --git a/resources/spells/432.png b/addons/tCrossBar/resources/spells/432.png similarity index 100% rename from resources/spells/432.png rename to addons/tCrossBar/resources/spells/432.png diff --git a/resources/spells/433.png b/addons/tCrossBar/resources/spells/433.png similarity index 100% rename from resources/spells/433.png rename to addons/tCrossBar/resources/spells/433.png diff --git a/resources/spells/434.png b/addons/tCrossBar/resources/spells/434.png similarity index 100% rename from resources/spells/434.png rename to addons/tCrossBar/resources/spells/434.png diff --git a/resources/spells/435.png b/addons/tCrossBar/resources/spells/435.png similarity index 100% rename from resources/spells/435.png rename to addons/tCrossBar/resources/spells/435.png diff --git a/resources/spells/436.png b/addons/tCrossBar/resources/spells/436.png similarity index 100% rename from resources/spells/436.png rename to addons/tCrossBar/resources/spells/436.png diff --git a/resources/spells/437.png b/addons/tCrossBar/resources/spells/437.png similarity index 100% rename from resources/spells/437.png rename to addons/tCrossBar/resources/spells/437.png diff --git a/resources/spells/438.png b/addons/tCrossBar/resources/spells/438.png similarity index 100% rename from resources/spells/438.png rename to addons/tCrossBar/resources/spells/438.png diff --git a/resources/spells/439.png b/addons/tCrossBar/resources/spells/439.png similarity index 100% rename from resources/spells/439.png rename to addons/tCrossBar/resources/spells/439.png diff --git a/resources/spells/44.png b/addons/tCrossBar/resources/spells/44.png similarity index 100% rename from resources/spells/44.png rename to addons/tCrossBar/resources/spells/44.png diff --git a/resources/spells/440.png b/addons/tCrossBar/resources/spells/440.png similarity index 100% rename from resources/spells/440.png rename to addons/tCrossBar/resources/spells/440.png diff --git a/resources/spells/441.png b/addons/tCrossBar/resources/spells/441.png similarity index 100% rename from resources/spells/441.png rename to addons/tCrossBar/resources/spells/441.png diff --git a/resources/spells/442.png b/addons/tCrossBar/resources/spells/442.png similarity index 100% rename from resources/spells/442.png rename to addons/tCrossBar/resources/spells/442.png diff --git a/resources/spells/443.png b/addons/tCrossBar/resources/spells/443.png similarity index 100% rename from resources/spells/443.png rename to addons/tCrossBar/resources/spells/443.png diff --git a/resources/spells/444.png b/addons/tCrossBar/resources/spells/444.png similarity index 100% rename from resources/spells/444.png rename to addons/tCrossBar/resources/spells/444.png diff --git a/resources/spells/445.png b/addons/tCrossBar/resources/spells/445.png similarity index 100% rename from resources/spells/445.png rename to addons/tCrossBar/resources/spells/445.png diff --git a/resources/spells/446.png b/addons/tCrossBar/resources/spells/446.png similarity index 100% rename from resources/spells/446.png rename to addons/tCrossBar/resources/spells/446.png diff --git a/resources/spells/447.png b/addons/tCrossBar/resources/spells/447.png similarity index 100% rename from resources/spells/447.png rename to addons/tCrossBar/resources/spells/447.png diff --git a/resources/spells/448.png b/addons/tCrossBar/resources/spells/448.png similarity index 100% rename from resources/spells/448.png rename to addons/tCrossBar/resources/spells/448.png diff --git a/resources/spells/449.png b/addons/tCrossBar/resources/spells/449.png similarity index 100% rename from resources/spells/449.png rename to addons/tCrossBar/resources/spells/449.png diff --git a/resources/spells/45.png b/addons/tCrossBar/resources/spells/45.png similarity index 100% rename from resources/spells/45.png rename to addons/tCrossBar/resources/spells/45.png diff --git a/resources/spells/450.png b/addons/tCrossBar/resources/spells/450.png similarity index 100% rename from resources/spells/450.png rename to addons/tCrossBar/resources/spells/450.png diff --git a/resources/spells/451.png b/addons/tCrossBar/resources/spells/451.png similarity index 100% rename from resources/spells/451.png rename to addons/tCrossBar/resources/spells/451.png diff --git a/resources/spells/452.png b/addons/tCrossBar/resources/spells/452.png similarity index 100% rename from resources/spells/452.png rename to addons/tCrossBar/resources/spells/452.png diff --git a/resources/spells/453.png b/addons/tCrossBar/resources/spells/453.png similarity index 100% rename from resources/spells/453.png rename to addons/tCrossBar/resources/spells/453.png diff --git a/resources/spells/454.png b/addons/tCrossBar/resources/spells/454.png similarity index 100% rename from resources/spells/454.png rename to addons/tCrossBar/resources/spells/454.png diff --git a/resources/spells/455.png b/addons/tCrossBar/resources/spells/455.png similarity index 100% rename from resources/spells/455.png rename to addons/tCrossBar/resources/spells/455.png diff --git a/resources/spells/456.png b/addons/tCrossBar/resources/spells/456.png similarity index 100% rename from resources/spells/456.png rename to addons/tCrossBar/resources/spells/456.png diff --git a/resources/spells/457.png b/addons/tCrossBar/resources/spells/457.png similarity index 100% rename from resources/spells/457.png rename to addons/tCrossBar/resources/spells/457.png diff --git a/resources/spells/458.png b/addons/tCrossBar/resources/spells/458.png similarity index 100% rename from resources/spells/458.png rename to addons/tCrossBar/resources/spells/458.png diff --git a/resources/spells/459.png b/addons/tCrossBar/resources/spells/459.png similarity index 100% rename from resources/spells/459.png rename to addons/tCrossBar/resources/spells/459.png diff --git a/resources/spells/46.png b/addons/tCrossBar/resources/spells/46.png similarity index 100% rename from resources/spells/46.png rename to addons/tCrossBar/resources/spells/46.png diff --git a/resources/spells/460.png b/addons/tCrossBar/resources/spells/460.png similarity index 100% rename from resources/spells/460.png rename to addons/tCrossBar/resources/spells/460.png diff --git a/resources/spells/461.png b/addons/tCrossBar/resources/spells/461.png similarity index 100% rename from resources/spells/461.png rename to addons/tCrossBar/resources/spells/461.png diff --git a/resources/spells/462.png b/addons/tCrossBar/resources/spells/462.png similarity index 100% rename from resources/spells/462.png rename to addons/tCrossBar/resources/spells/462.png diff --git a/resources/spells/463.png b/addons/tCrossBar/resources/spells/463.png similarity index 100% rename from resources/spells/463.png rename to addons/tCrossBar/resources/spells/463.png diff --git a/resources/spells/464.png b/addons/tCrossBar/resources/spells/464.png similarity index 100% rename from resources/spells/464.png rename to addons/tCrossBar/resources/spells/464.png diff --git a/resources/spells/465.png b/addons/tCrossBar/resources/spells/465.png similarity index 100% rename from resources/spells/465.png rename to addons/tCrossBar/resources/spells/465.png diff --git a/resources/spells/466.png b/addons/tCrossBar/resources/spells/466.png similarity index 100% rename from resources/spells/466.png rename to addons/tCrossBar/resources/spells/466.png diff --git a/resources/spells/467.png b/addons/tCrossBar/resources/spells/467.png similarity index 100% rename from resources/spells/467.png rename to addons/tCrossBar/resources/spells/467.png diff --git a/resources/spells/468.png b/addons/tCrossBar/resources/spells/468.png similarity index 100% rename from resources/spells/468.png rename to addons/tCrossBar/resources/spells/468.png diff --git a/resources/spells/469.png b/addons/tCrossBar/resources/spells/469.png similarity index 100% rename from resources/spells/469.png rename to addons/tCrossBar/resources/spells/469.png diff --git a/resources/spells/47.png b/addons/tCrossBar/resources/spells/47.png similarity index 100% rename from resources/spells/47.png rename to addons/tCrossBar/resources/spells/47.png diff --git a/resources/spells/470.png b/addons/tCrossBar/resources/spells/470.png similarity index 100% rename from resources/spells/470.png rename to addons/tCrossBar/resources/spells/470.png diff --git a/resources/spells/471.png b/addons/tCrossBar/resources/spells/471.png similarity index 100% rename from resources/spells/471.png rename to addons/tCrossBar/resources/spells/471.png diff --git a/resources/spells/472.png b/addons/tCrossBar/resources/spells/472.png similarity index 100% rename from resources/spells/472.png rename to addons/tCrossBar/resources/spells/472.png diff --git a/resources/spells/473.png b/addons/tCrossBar/resources/spells/473.png similarity index 100% rename from resources/spells/473.png rename to addons/tCrossBar/resources/spells/473.png diff --git a/resources/spells/474.png b/addons/tCrossBar/resources/spells/474.png similarity index 100% rename from resources/spells/474.png rename to addons/tCrossBar/resources/spells/474.png diff --git a/resources/spells/475.png b/addons/tCrossBar/resources/spells/475.png similarity index 100% rename from resources/spells/475.png rename to addons/tCrossBar/resources/spells/475.png diff --git a/resources/spells/476.png b/addons/tCrossBar/resources/spells/476.png similarity index 100% rename from resources/spells/476.png rename to addons/tCrossBar/resources/spells/476.png diff --git a/resources/spells/477.png b/addons/tCrossBar/resources/spells/477.png similarity index 100% rename from resources/spells/477.png rename to addons/tCrossBar/resources/spells/477.png diff --git a/resources/spells/478.png b/addons/tCrossBar/resources/spells/478.png similarity index 100% rename from resources/spells/478.png rename to addons/tCrossBar/resources/spells/478.png diff --git a/resources/spells/479.png b/addons/tCrossBar/resources/spells/479.png similarity index 100% rename from resources/spells/479.png rename to addons/tCrossBar/resources/spells/479.png diff --git a/resources/spells/48.png b/addons/tCrossBar/resources/spells/48.png similarity index 100% rename from resources/spells/48.png rename to addons/tCrossBar/resources/spells/48.png diff --git a/resources/spells/480.png b/addons/tCrossBar/resources/spells/480.png similarity index 100% rename from resources/spells/480.png rename to addons/tCrossBar/resources/spells/480.png diff --git a/resources/spells/481.png b/addons/tCrossBar/resources/spells/481.png similarity index 100% rename from resources/spells/481.png rename to addons/tCrossBar/resources/spells/481.png diff --git a/resources/spells/482.png b/addons/tCrossBar/resources/spells/482.png similarity index 100% rename from resources/spells/482.png rename to addons/tCrossBar/resources/spells/482.png diff --git a/resources/spells/483.png b/addons/tCrossBar/resources/spells/483.png similarity index 100% rename from resources/spells/483.png rename to addons/tCrossBar/resources/spells/483.png diff --git a/resources/spells/484.png b/addons/tCrossBar/resources/spells/484.png similarity index 100% rename from resources/spells/484.png rename to addons/tCrossBar/resources/spells/484.png diff --git a/resources/spells/485.png b/addons/tCrossBar/resources/spells/485.png similarity index 100% rename from resources/spells/485.png rename to addons/tCrossBar/resources/spells/485.png diff --git a/resources/spells/486.png b/addons/tCrossBar/resources/spells/486.png similarity index 100% rename from resources/spells/486.png rename to addons/tCrossBar/resources/spells/486.png diff --git a/resources/spells/487.png b/addons/tCrossBar/resources/spells/487.png similarity index 100% rename from resources/spells/487.png rename to addons/tCrossBar/resources/spells/487.png diff --git a/resources/spells/488.png b/addons/tCrossBar/resources/spells/488.png similarity index 100% rename from resources/spells/488.png rename to addons/tCrossBar/resources/spells/488.png diff --git a/resources/spells/489.png b/addons/tCrossBar/resources/spells/489.png similarity index 100% rename from resources/spells/489.png rename to addons/tCrossBar/resources/spells/489.png diff --git a/resources/spells/49.png b/addons/tCrossBar/resources/spells/49.png similarity index 100% rename from resources/spells/49.png rename to addons/tCrossBar/resources/spells/49.png diff --git a/resources/spells/490.png b/addons/tCrossBar/resources/spells/490.png similarity index 100% rename from resources/spells/490.png rename to addons/tCrossBar/resources/spells/490.png diff --git a/resources/spells/491.png b/addons/tCrossBar/resources/spells/491.png similarity index 100% rename from resources/spells/491.png rename to addons/tCrossBar/resources/spells/491.png diff --git a/resources/spells/492.png b/addons/tCrossBar/resources/spells/492.png similarity index 100% rename from resources/spells/492.png rename to addons/tCrossBar/resources/spells/492.png diff --git a/resources/spells/493.png b/addons/tCrossBar/resources/spells/493.png similarity index 100% rename from resources/spells/493.png rename to addons/tCrossBar/resources/spells/493.png diff --git a/resources/spells/494.png b/addons/tCrossBar/resources/spells/494.png similarity index 100% rename from resources/spells/494.png rename to addons/tCrossBar/resources/spells/494.png diff --git a/resources/spells/495.png b/addons/tCrossBar/resources/spells/495.png similarity index 100% rename from resources/spells/495.png rename to addons/tCrossBar/resources/spells/495.png diff --git a/resources/spells/496.png b/addons/tCrossBar/resources/spells/496.png similarity index 100% rename from resources/spells/496.png rename to addons/tCrossBar/resources/spells/496.png diff --git a/resources/spells/497.png b/addons/tCrossBar/resources/spells/497.png similarity index 100% rename from resources/spells/497.png rename to addons/tCrossBar/resources/spells/497.png diff --git a/resources/spells/498.png b/addons/tCrossBar/resources/spells/498.png similarity index 100% rename from resources/spells/498.png rename to addons/tCrossBar/resources/spells/498.png diff --git a/resources/spells/499.png b/addons/tCrossBar/resources/spells/499.png similarity index 100% rename from resources/spells/499.png rename to addons/tCrossBar/resources/spells/499.png diff --git a/resources/spells/5.png b/addons/tCrossBar/resources/spells/5.png similarity index 100% rename from resources/spells/5.png rename to addons/tCrossBar/resources/spells/5.png diff --git a/resources/spells/50.png b/addons/tCrossBar/resources/spells/50.png similarity index 100% rename from resources/spells/50.png rename to addons/tCrossBar/resources/spells/50.png diff --git a/resources/spells/500.png b/addons/tCrossBar/resources/spells/500.png similarity index 100% rename from resources/spells/500.png rename to addons/tCrossBar/resources/spells/500.png diff --git a/resources/spells/501.png b/addons/tCrossBar/resources/spells/501.png similarity index 100% rename from resources/spells/501.png rename to addons/tCrossBar/resources/spells/501.png diff --git a/resources/spells/502.png b/addons/tCrossBar/resources/spells/502.png similarity index 100% rename from resources/spells/502.png rename to addons/tCrossBar/resources/spells/502.png diff --git a/resources/spells/503.png b/addons/tCrossBar/resources/spells/503.png similarity index 100% rename from resources/spells/503.png rename to addons/tCrossBar/resources/spells/503.png diff --git a/resources/spells/504.png b/addons/tCrossBar/resources/spells/504.png similarity index 100% rename from resources/spells/504.png rename to addons/tCrossBar/resources/spells/504.png diff --git a/resources/spells/505.png b/addons/tCrossBar/resources/spells/505.png similarity index 100% rename from resources/spells/505.png rename to addons/tCrossBar/resources/spells/505.png diff --git a/resources/spells/506.png b/addons/tCrossBar/resources/spells/506.png similarity index 100% rename from resources/spells/506.png rename to addons/tCrossBar/resources/spells/506.png diff --git a/resources/spells/507.png b/addons/tCrossBar/resources/spells/507.png similarity index 100% rename from resources/spells/507.png rename to addons/tCrossBar/resources/spells/507.png diff --git a/resources/spells/508.png b/addons/tCrossBar/resources/spells/508.png similarity index 100% rename from resources/spells/508.png rename to addons/tCrossBar/resources/spells/508.png diff --git a/resources/spells/509.png b/addons/tCrossBar/resources/spells/509.png similarity index 100% rename from resources/spells/509.png rename to addons/tCrossBar/resources/spells/509.png diff --git a/resources/spells/51.png b/addons/tCrossBar/resources/spells/51.png similarity index 100% rename from resources/spells/51.png rename to addons/tCrossBar/resources/spells/51.png diff --git a/resources/spells/510.png b/addons/tCrossBar/resources/spells/510.png similarity index 100% rename from resources/spells/510.png rename to addons/tCrossBar/resources/spells/510.png diff --git a/resources/spells/511.png b/addons/tCrossBar/resources/spells/511.png similarity index 100% rename from resources/spells/511.png rename to addons/tCrossBar/resources/spells/511.png diff --git a/resources/spells/513.png b/addons/tCrossBar/resources/spells/513.png similarity index 100% rename from resources/spells/513.png rename to addons/tCrossBar/resources/spells/513.png diff --git a/resources/spells/515.png b/addons/tCrossBar/resources/spells/515.png similarity index 100% rename from resources/spells/515.png rename to addons/tCrossBar/resources/spells/515.png diff --git a/resources/spells/517.png b/addons/tCrossBar/resources/spells/517.png similarity index 100% rename from resources/spells/517.png rename to addons/tCrossBar/resources/spells/517.png diff --git a/resources/spells/519.png b/addons/tCrossBar/resources/spells/519.png similarity index 100% rename from resources/spells/519.png rename to addons/tCrossBar/resources/spells/519.png diff --git a/resources/spells/52.png b/addons/tCrossBar/resources/spells/52.png similarity index 100% rename from resources/spells/52.png rename to addons/tCrossBar/resources/spells/52.png diff --git a/resources/spells/521.png b/addons/tCrossBar/resources/spells/521.png similarity index 100% rename from resources/spells/521.png rename to addons/tCrossBar/resources/spells/521.png diff --git a/resources/spells/522.png b/addons/tCrossBar/resources/spells/522.png similarity index 100% rename from resources/spells/522.png rename to addons/tCrossBar/resources/spells/522.png diff --git a/resources/spells/524.png b/addons/tCrossBar/resources/spells/524.png similarity index 100% rename from resources/spells/524.png rename to addons/tCrossBar/resources/spells/524.png diff --git a/resources/spells/527.png b/addons/tCrossBar/resources/spells/527.png similarity index 100% rename from resources/spells/527.png rename to addons/tCrossBar/resources/spells/527.png diff --git a/resources/spells/529.png b/addons/tCrossBar/resources/spells/529.png similarity index 100% rename from resources/spells/529.png rename to addons/tCrossBar/resources/spells/529.png diff --git a/resources/spells/53.png b/addons/tCrossBar/resources/spells/53.png similarity index 100% rename from resources/spells/53.png rename to addons/tCrossBar/resources/spells/53.png diff --git a/resources/spells/530.png b/addons/tCrossBar/resources/spells/530.png similarity index 100% rename from resources/spells/530.png rename to addons/tCrossBar/resources/spells/530.png diff --git a/resources/spells/531.png b/addons/tCrossBar/resources/spells/531.png similarity index 100% rename from resources/spells/531.png rename to addons/tCrossBar/resources/spells/531.png diff --git a/resources/spells/532.png b/addons/tCrossBar/resources/spells/532.png similarity index 100% rename from resources/spells/532.png rename to addons/tCrossBar/resources/spells/532.png diff --git a/resources/spells/533.png b/addons/tCrossBar/resources/spells/533.png similarity index 100% rename from resources/spells/533.png rename to addons/tCrossBar/resources/spells/533.png diff --git a/resources/spells/534.png b/addons/tCrossBar/resources/spells/534.png similarity index 100% rename from resources/spells/534.png rename to addons/tCrossBar/resources/spells/534.png diff --git a/resources/spells/535.png b/addons/tCrossBar/resources/spells/535.png similarity index 100% rename from resources/spells/535.png rename to addons/tCrossBar/resources/spells/535.png diff --git a/resources/spells/536.png b/addons/tCrossBar/resources/spells/536.png similarity index 100% rename from resources/spells/536.png rename to addons/tCrossBar/resources/spells/536.png diff --git a/resources/spells/537.png b/addons/tCrossBar/resources/spells/537.png similarity index 100% rename from resources/spells/537.png rename to addons/tCrossBar/resources/spells/537.png diff --git a/resources/spells/538.png b/addons/tCrossBar/resources/spells/538.png similarity index 100% rename from resources/spells/538.png rename to addons/tCrossBar/resources/spells/538.png diff --git a/resources/spells/539.png b/addons/tCrossBar/resources/spells/539.png similarity index 100% rename from resources/spells/539.png rename to addons/tCrossBar/resources/spells/539.png diff --git a/resources/spells/54.png b/addons/tCrossBar/resources/spells/54.png similarity index 100% rename from resources/spells/54.png rename to addons/tCrossBar/resources/spells/54.png diff --git a/resources/spells/540.png b/addons/tCrossBar/resources/spells/540.png similarity index 100% rename from resources/spells/540.png rename to addons/tCrossBar/resources/spells/540.png diff --git a/resources/spells/541.png b/addons/tCrossBar/resources/spells/541.png similarity index 100% rename from resources/spells/541.png rename to addons/tCrossBar/resources/spells/541.png diff --git a/resources/spells/542.png b/addons/tCrossBar/resources/spells/542.png similarity index 100% rename from resources/spells/542.png rename to addons/tCrossBar/resources/spells/542.png diff --git a/resources/spells/543.png b/addons/tCrossBar/resources/spells/543.png similarity index 100% rename from resources/spells/543.png rename to addons/tCrossBar/resources/spells/543.png diff --git a/resources/spells/544.png b/addons/tCrossBar/resources/spells/544.png similarity index 100% rename from resources/spells/544.png rename to addons/tCrossBar/resources/spells/544.png diff --git a/resources/spells/545.png b/addons/tCrossBar/resources/spells/545.png similarity index 100% rename from resources/spells/545.png rename to addons/tCrossBar/resources/spells/545.png diff --git a/resources/spells/547.png b/addons/tCrossBar/resources/spells/547.png similarity index 100% rename from resources/spells/547.png rename to addons/tCrossBar/resources/spells/547.png diff --git a/resources/spells/548.png b/addons/tCrossBar/resources/spells/548.png similarity index 100% rename from resources/spells/548.png rename to addons/tCrossBar/resources/spells/548.png diff --git a/resources/spells/549.png b/addons/tCrossBar/resources/spells/549.png similarity index 100% rename from resources/spells/549.png rename to addons/tCrossBar/resources/spells/549.png diff --git a/resources/spells/55.png b/addons/tCrossBar/resources/spells/55.png similarity index 100% rename from resources/spells/55.png rename to addons/tCrossBar/resources/spells/55.png diff --git a/resources/spells/551.png b/addons/tCrossBar/resources/spells/551.png similarity index 100% rename from resources/spells/551.png rename to addons/tCrossBar/resources/spells/551.png diff --git a/resources/spells/554.png b/addons/tCrossBar/resources/spells/554.png similarity index 100% rename from resources/spells/554.png rename to addons/tCrossBar/resources/spells/554.png diff --git a/resources/spells/555.png b/addons/tCrossBar/resources/spells/555.png similarity index 100% rename from resources/spells/555.png rename to addons/tCrossBar/resources/spells/555.png diff --git a/resources/spells/557.png b/addons/tCrossBar/resources/spells/557.png similarity index 100% rename from resources/spells/557.png rename to addons/tCrossBar/resources/spells/557.png diff --git a/resources/spells/56.png b/addons/tCrossBar/resources/spells/56.png similarity index 100% rename from resources/spells/56.png rename to addons/tCrossBar/resources/spells/56.png diff --git a/resources/spells/560.png b/addons/tCrossBar/resources/spells/560.png similarity index 100% rename from resources/spells/560.png rename to addons/tCrossBar/resources/spells/560.png diff --git a/resources/spells/561.png b/addons/tCrossBar/resources/spells/561.png similarity index 100% rename from resources/spells/561.png rename to addons/tCrossBar/resources/spells/561.png diff --git a/resources/spells/563.png b/addons/tCrossBar/resources/spells/563.png similarity index 100% rename from resources/spells/563.png rename to addons/tCrossBar/resources/spells/563.png diff --git a/resources/spells/564.png b/addons/tCrossBar/resources/spells/564.png similarity index 100% rename from resources/spells/564.png rename to addons/tCrossBar/resources/spells/564.png diff --git a/resources/spells/565.png b/addons/tCrossBar/resources/spells/565.png similarity index 100% rename from resources/spells/565.png rename to addons/tCrossBar/resources/spells/565.png diff --git a/resources/spells/567.png b/addons/tCrossBar/resources/spells/567.png similarity index 100% rename from resources/spells/567.png rename to addons/tCrossBar/resources/spells/567.png diff --git a/resources/spells/569.png b/addons/tCrossBar/resources/spells/569.png similarity index 100% rename from resources/spells/569.png rename to addons/tCrossBar/resources/spells/569.png diff --git a/resources/spells/57.png b/addons/tCrossBar/resources/spells/57.png similarity index 100% rename from resources/spells/57.png rename to addons/tCrossBar/resources/spells/57.png diff --git a/resources/spells/570.png b/addons/tCrossBar/resources/spells/570.png similarity index 100% rename from resources/spells/570.png rename to addons/tCrossBar/resources/spells/570.png diff --git a/resources/spells/572.png b/addons/tCrossBar/resources/spells/572.png similarity index 100% rename from resources/spells/572.png rename to addons/tCrossBar/resources/spells/572.png diff --git a/resources/spells/573.png b/addons/tCrossBar/resources/spells/573.png similarity index 100% rename from resources/spells/573.png rename to addons/tCrossBar/resources/spells/573.png diff --git a/resources/spells/574.png b/addons/tCrossBar/resources/spells/574.png similarity index 100% rename from resources/spells/574.png rename to addons/tCrossBar/resources/spells/574.png diff --git a/resources/spells/575.png b/addons/tCrossBar/resources/spells/575.png similarity index 100% rename from resources/spells/575.png rename to addons/tCrossBar/resources/spells/575.png diff --git a/resources/spells/576.png b/addons/tCrossBar/resources/spells/576.png similarity index 100% rename from resources/spells/576.png rename to addons/tCrossBar/resources/spells/576.png diff --git a/resources/spells/577.png b/addons/tCrossBar/resources/spells/577.png similarity index 100% rename from resources/spells/577.png rename to addons/tCrossBar/resources/spells/577.png diff --git a/resources/spells/578.png b/addons/tCrossBar/resources/spells/578.png similarity index 100% rename from resources/spells/578.png rename to addons/tCrossBar/resources/spells/578.png diff --git a/resources/spells/579.png b/addons/tCrossBar/resources/spells/579.png similarity index 100% rename from resources/spells/579.png rename to addons/tCrossBar/resources/spells/579.png diff --git a/resources/spells/58.png b/addons/tCrossBar/resources/spells/58.png similarity index 100% rename from resources/spells/58.png rename to addons/tCrossBar/resources/spells/58.png diff --git a/resources/spells/581.png b/addons/tCrossBar/resources/spells/581.png similarity index 100% rename from resources/spells/581.png rename to addons/tCrossBar/resources/spells/581.png diff --git a/resources/spells/582.png b/addons/tCrossBar/resources/spells/582.png similarity index 100% rename from resources/spells/582.png rename to addons/tCrossBar/resources/spells/582.png diff --git a/resources/spells/584.png b/addons/tCrossBar/resources/spells/584.png similarity index 100% rename from resources/spells/584.png rename to addons/tCrossBar/resources/spells/584.png diff --git a/resources/spells/585.png b/addons/tCrossBar/resources/spells/585.png similarity index 100% rename from resources/spells/585.png rename to addons/tCrossBar/resources/spells/585.png diff --git a/resources/spells/587.png b/addons/tCrossBar/resources/spells/587.png similarity index 100% rename from resources/spells/587.png rename to addons/tCrossBar/resources/spells/587.png diff --git a/resources/spells/588.png b/addons/tCrossBar/resources/spells/588.png similarity index 100% rename from resources/spells/588.png rename to addons/tCrossBar/resources/spells/588.png diff --git a/resources/spells/589.png b/addons/tCrossBar/resources/spells/589.png similarity index 100% rename from resources/spells/589.png rename to addons/tCrossBar/resources/spells/589.png diff --git a/resources/spells/59.png b/addons/tCrossBar/resources/spells/59.png similarity index 100% rename from resources/spells/59.png rename to addons/tCrossBar/resources/spells/59.png diff --git a/resources/spells/591.png b/addons/tCrossBar/resources/spells/591.png similarity index 100% rename from resources/spells/591.png rename to addons/tCrossBar/resources/spells/591.png diff --git a/resources/spells/592.png b/addons/tCrossBar/resources/spells/592.png similarity index 100% rename from resources/spells/592.png rename to addons/tCrossBar/resources/spells/592.png diff --git a/resources/spells/593.png b/addons/tCrossBar/resources/spells/593.png similarity index 100% rename from resources/spells/593.png rename to addons/tCrossBar/resources/spells/593.png diff --git a/resources/spells/594.png b/addons/tCrossBar/resources/spells/594.png similarity index 100% rename from resources/spells/594.png rename to addons/tCrossBar/resources/spells/594.png diff --git a/resources/spells/595.png b/addons/tCrossBar/resources/spells/595.png similarity index 100% rename from resources/spells/595.png rename to addons/tCrossBar/resources/spells/595.png diff --git a/resources/spells/596.png b/addons/tCrossBar/resources/spells/596.png similarity index 100% rename from resources/spells/596.png rename to addons/tCrossBar/resources/spells/596.png diff --git a/resources/spells/597.png b/addons/tCrossBar/resources/spells/597.png similarity index 100% rename from resources/spells/597.png rename to addons/tCrossBar/resources/spells/597.png diff --git a/resources/spells/598.png b/addons/tCrossBar/resources/spells/598.png similarity index 100% rename from resources/spells/598.png rename to addons/tCrossBar/resources/spells/598.png diff --git a/resources/spells/599.png b/addons/tCrossBar/resources/spells/599.png similarity index 100% rename from resources/spells/599.png rename to addons/tCrossBar/resources/spells/599.png diff --git a/resources/spells/6.png b/addons/tCrossBar/resources/spells/6.png similarity index 100% rename from resources/spells/6.png rename to addons/tCrossBar/resources/spells/6.png diff --git a/resources/spells/60.png b/addons/tCrossBar/resources/spells/60.png similarity index 100% rename from resources/spells/60.png rename to addons/tCrossBar/resources/spells/60.png diff --git a/resources/spells/603.png b/addons/tCrossBar/resources/spells/603.png similarity index 100% rename from resources/spells/603.png rename to addons/tCrossBar/resources/spells/603.png diff --git a/resources/spells/604.png b/addons/tCrossBar/resources/spells/604.png similarity index 100% rename from resources/spells/604.png rename to addons/tCrossBar/resources/spells/604.png diff --git a/resources/spells/605.png b/addons/tCrossBar/resources/spells/605.png similarity index 100% rename from resources/spells/605.png rename to addons/tCrossBar/resources/spells/605.png diff --git a/resources/spells/606.png b/addons/tCrossBar/resources/spells/606.png similarity index 100% rename from resources/spells/606.png rename to addons/tCrossBar/resources/spells/606.png diff --git a/resources/spells/608.png b/addons/tCrossBar/resources/spells/608.png similarity index 100% rename from resources/spells/608.png rename to addons/tCrossBar/resources/spells/608.png diff --git a/resources/spells/61.png b/addons/tCrossBar/resources/spells/61.png similarity index 100% rename from resources/spells/61.png rename to addons/tCrossBar/resources/spells/61.png diff --git a/resources/spells/610.png b/addons/tCrossBar/resources/spells/610.png similarity index 100% rename from resources/spells/610.png rename to addons/tCrossBar/resources/spells/610.png diff --git a/resources/spells/611.png b/addons/tCrossBar/resources/spells/611.png similarity index 100% rename from resources/spells/611.png rename to addons/tCrossBar/resources/spells/611.png diff --git a/resources/spells/612.png b/addons/tCrossBar/resources/spells/612.png similarity index 100% rename from resources/spells/612.png rename to addons/tCrossBar/resources/spells/612.png diff --git a/resources/spells/613.png b/addons/tCrossBar/resources/spells/613.png similarity index 100% rename from resources/spells/613.png rename to addons/tCrossBar/resources/spells/613.png diff --git a/resources/spells/614.png b/addons/tCrossBar/resources/spells/614.png similarity index 100% rename from resources/spells/614.png rename to addons/tCrossBar/resources/spells/614.png diff --git a/resources/spells/615.png b/addons/tCrossBar/resources/spells/615.png similarity index 100% rename from resources/spells/615.png rename to addons/tCrossBar/resources/spells/615.png diff --git a/resources/spells/616.png b/addons/tCrossBar/resources/spells/616.png similarity index 100% rename from resources/spells/616.png rename to addons/tCrossBar/resources/spells/616.png diff --git a/resources/spells/617.png b/addons/tCrossBar/resources/spells/617.png similarity index 100% rename from resources/spells/617.png rename to addons/tCrossBar/resources/spells/617.png diff --git a/resources/spells/618.png b/addons/tCrossBar/resources/spells/618.png similarity index 100% rename from resources/spells/618.png rename to addons/tCrossBar/resources/spells/618.png diff --git a/resources/spells/62.png b/addons/tCrossBar/resources/spells/62.png similarity index 100% rename from resources/spells/62.png rename to addons/tCrossBar/resources/spells/62.png diff --git a/resources/spells/620.png b/addons/tCrossBar/resources/spells/620.png similarity index 100% rename from resources/spells/620.png rename to addons/tCrossBar/resources/spells/620.png diff --git a/resources/spells/621.png b/addons/tCrossBar/resources/spells/621.png similarity index 100% rename from resources/spells/621.png rename to addons/tCrossBar/resources/spells/621.png diff --git a/resources/spells/622.png b/addons/tCrossBar/resources/spells/622.png similarity index 100% rename from resources/spells/622.png rename to addons/tCrossBar/resources/spells/622.png diff --git a/resources/spells/623.png b/addons/tCrossBar/resources/spells/623.png similarity index 100% rename from resources/spells/623.png rename to addons/tCrossBar/resources/spells/623.png diff --git a/resources/spells/626.png b/addons/tCrossBar/resources/spells/626.png similarity index 100% rename from resources/spells/626.png rename to addons/tCrossBar/resources/spells/626.png diff --git a/resources/spells/628.png b/addons/tCrossBar/resources/spells/628.png similarity index 100% rename from resources/spells/628.png rename to addons/tCrossBar/resources/spells/628.png diff --git a/resources/spells/629.png b/addons/tCrossBar/resources/spells/629.png similarity index 100% rename from resources/spells/629.png rename to addons/tCrossBar/resources/spells/629.png diff --git a/resources/spells/63.png b/addons/tCrossBar/resources/spells/63.png similarity index 100% rename from resources/spells/63.png rename to addons/tCrossBar/resources/spells/63.png diff --git a/resources/spells/631.png b/addons/tCrossBar/resources/spells/631.png similarity index 100% rename from resources/spells/631.png rename to addons/tCrossBar/resources/spells/631.png diff --git a/resources/spells/632.png b/addons/tCrossBar/resources/spells/632.png similarity index 100% rename from resources/spells/632.png rename to addons/tCrossBar/resources/spells/632.png diff --git a/resources/spells/633.png b/addons/tCrossBar/resources/spells/633.png similarity index 100% rename from resources/spells/633.png rename to addons/tCrossBar/resources/spells/633.png diff --git a/resources/spells/634.png b/addons/tCrossBar/resources/spells/634.png similarity index 100% rename from resources/spells/634.png rename to addons/tCrossBar/resources/spells/634.png diff --git a/resources/spells/636.png b/addons/tCrossBar/resources/spells/636.png similarity index 100% rename from resources/spells/636.png rename to addons/tCrossBar/resources/spells/636.png diff --git a/resources/spells/637.png b/addons/tCrossBar/resources/spells/637.png similarity index 100% rename from resources/spells/637.png rename to addons/tCrossBar/resources/spells/637.png diff --git a/resources/spells/638.png b/addons/tCrossBar/resources/spells/638.png similarity index 100% rename from resources/spells/638.png rename to addons/tCrossBar/resources/spells/638.png diff --git a/resources/spells/64.png b/addons/tCrossBar/resources/spells/64.png similarity index 100% rename from resources/spells/64.png rename to addons/tCrossBar/resources/spells/64.png diff --git a/resources/spells/640.png b/addons/tCrossBar/resources/spells/640.png similarity index 100% rename from resources/spells/640.png rename to addons/tCrossBar/resources/spells/640.png diff --git a/resources/spells/641.png b/addons/tCrossBar/resources/spells/641.png similarity index 100% rename from resources/spells/641.png rename to addons/tCrossBar/resources/spells/641.png diff --git a/resources/spells/642.png b/addons/tCrossBar/resources/spells/642.png similarity index 100% rename from resources/spells/642.png rename to addons/tCrossBar/resources/spells/642.png diff --git a/resources/spells/643.png b/addons/tCrossBar/resources/spells/643.png similarity index 100% rename from resources/spells/643.png rename to addons/tCrossBar/resources/spells/643.png diff --git a/resources/spells/644.png b/addons/tCrossBar/resources/spells/644.png similarity index 100% rename from resources/spells/644.png rename to addons/tCrossBar/resources/spells/644.png diff --git a/resources/spells/645.png b/addons/tCrossBar/resources/spells/645.png similarity index 100% rename from resources/spells/645.png rename to addons/tCrossBar/resources/spells/645.png diff --git a/resources/spells/646.png b/addons/tCrossBar/resources/spells/646.png similarity index 100% rename from resources/spells/646.png rename to addons/tCrossBar/resources/spells/646.png diff --git a/resources/spells/647.png b/addons/tCrossBar/resources/spells/647.png similarity index 100% rename from resources/spells/647.png rename to addons/tCrossBar/resources/spells/647.png diff --git a/resources/spells/648.png b/addons/tCrossBar/resources/spells/648.png similarity index 100% rename from resources/spells/648.png rename to addons/tCrossBar/resources/spells/648.png diff --git a/resources/spells/65.png b/addons/tCrossBar/resources/spells/65.png similarity index 100% rename from resources/spells/65.png rename to addons/tCrossBar/resources/spells/65.png diff --git a/resources/spells/650.png b/addons/tCrossBar/resources/spells/650.png similarity index 100% rename from resources/spells/650.png rename to addons/tCrossBar/resources/spells/650.png diff --git a/resources/spells/651.png b/addons/tCrossBar/resources/spells/651.png similarity index 100% rename from resources/spells/651.png rename to addons/tCrossBar/resources/spells/651.png diff --git a/resources/spells/652.png b/addons/tCrossBar/resources/spells/652.png similarity index 100% rename from resources/spells/652.png rename to addons/tCrossBar/resources/spells/652.png diff --git a/resources/spells/653.png b/addons/tCrossBar/resources/spells/653.png similarity index 100% rename from resources/spells/653.png rename to addons/tCrossBar/resources/spells/653.png diff --git a/resources/spells/654.png b/addons/tCrossBar/resources/spells/654.png similarity index 100% rename from resources/spells/654.png rename to addons/tCrossBar/resources/spells/654.png diff --git a/resources/spells/655.png b/addons/tCrossBar/resources/spells/655.png similarity index 100% rename from resources/spells/655.png rename to addons/tCrossBar/resources/spells/655.png diff --git a/resources/spells/656.png b/addons/tCrossBar/resources/spells/656.png similarity index 100% rename from resources/spells/656.png rename to addons/tCrossBar/resources/spells/656.png diff --git a/resources/spells/657.png b/addons/tCrossBar/resources/spells/657.png similarity index 100% rename from resources/spells/657.png rename to addons/tCrossBar/resources/spells/657.png diff --git a/resources/spells/658.png b/addons/tCrossBar/resources/spells/658.png similarity index 100% rename from resources/spells/658.png rename to addons/tCrossBar/resources/spells/658.png diff --git a/resources/spells/659.png b/addons/tCrossBar/resources/spells/659.png similarity index 100% rename from resources/spells/659.png rename to addons/tCrossBar/resources/spells/659.png diff --git a/resources/spells/66.png b/addons/tCrossBar/resources/spells/66.png similarity index 100% rename from resources/spells/66.png rename to addons/tCrossBar/resources/spells/66.png diff --git a/resources/spells/660.png b/addons/tCrossBar/resources/spells/660.png similarity index 100% rename from resources/spells/660.png rename to addons/tCrossBar/resources/spells/660.png diff --git a/resources/spells/661.png b/addons/tCrossBar/resources/spells/661.png similarity index 100% rename from resources/spells/661.png rename to addons/tCrossBar/resources/spells/661.png diff --git a/resources/spells/662.png b/addons/tCrossBar/resources/spells/662.png similarity index 100% rename from resources/spells/662.png rename to addons/tCrossBar/resources/spells/662.png diff --git a/resources/spells/663.png b/addons/tCrossBar/resources/spells/663.png similarity index 100% rename from resources/spells/663.png rename to addons/tCrossBar/resources/spells/663.png diff --git a/resources/spells/664.png b/addons/tCrossBar/resources/spells/664.png similarity index 100% rename from resources/spells/664.png rename to addons/tCrossBar/resources/spells/664.png diff --git a/resources/spells/665.png b/addons/tCrossBar/resources/spells/665.png similarity index 100% rename from resources/spells/665.png rename to addons/tCrossBar/resources/spells/665.png diff --git a/resources/spells/666.png b/addons/tCrossBar/resources/spells/666.png similarity index 100% rename from resources/spells/666.png rename to addons/tCrossBar/resources/spells/666.png diff --git a/resources/spells/667.png b/addons/tCrossBar/resources/spells/667.png similarity index 100% rename from resources/spells/667.png rename to addons/tCrossBar/resources/spells/667.png diff --git a/resources/spells/668.png b/addons/tCrossBar/resources/spells/668.png similarity index 100% rename from resources/spells/668.png rename to addons/tCrossBar/resources/spells/668.png diff --git a/resources/spells/669.png b/addons/tCrossBar/resources/spells/669.png similarity index 100% rename from resources/spells/669.png rename to addons/tCrossBar/resources/spells/669.png diff --git a/resources/spells/67.png b/addons/tCrossBar/resources/spells/67.png similarity index 100% rename from resources/spells/67.png rename to addons/tCrossBar/resources/spells/67.png diff --git a/resources/spells/670.png b/addons/tCrossBar/resources/spells/670.png similarity index 100% rename from resources/spells/670.png rename to addons/tCrossBar/resources/spells/670.png diff --git a/resources/spells/671.png b/addons/tCrossBar/resources/spells/671.png similarity index 100% rename from resources/spells/671.png rename to addons/tCrossBar/resources/spells/671.png diff --git a/resources/spells/672.png b/addons/tCrossBar/resources/spells/672.png similarity index 100% rename from resources/spells/672.png rename to addons/tCrossBar/resources/spells/672.png diff --git a/resources/spells/673.png b/addons/tCrossBar/resources/spells/673.png similarity index 100% rename from resources/spells/673.png rename to addons/tCrossBar/resources/spells/673.png diff --git a/resources/spells/674.png b/addons/tCrossBar/resources/spells/674.png similarity index 100% rename from resources/spells/674.png rename to addons/tCrossBar/resources/spells/674.png diff --git a/resources/spells/675.png b/addons/tCrossBar/resources/spells/675.png similarity index 100% rename from resources/spells/675.png rename to addons/tCrossBar/resources/spells/675.png diff --git a/resources/spells/677.png b/addons/tCrossBar/resources/spells/677.png similarity index 100% rename from resources/spells/677.png rename to addons/tCrossBar/resources/spells/677.png diff --git a/resources/spells/678.png b/addons/tCrossBar/resources/spells/678.png similarity index 100% rename from resources/spells/678.png rename to addons/tCrossBar/resources/spells/678.png diff --git a/resources/spells/679.png b/addons/tCrossBar/resources/spells/679.png similarity index 100% rename from resources/spells/679.png rename to addons/tCrossBar/resources/spells/679.png diff --git a/resources/spells/68.png b/addons/tCrossBar/resources/spells/68.png similarity index 100% rename from resources/spells/68.png rename to addons/tCrossBar/resources/spells/68.png diff --git a/resources/spells/680.png b/addons/tCrossBar/resources/spells/680.png similarity index 100% rename from resources/spells/680.png rename to addons/tCrossBar/resources/spells/680.png diff --git a/resources/spells/681.png b/addons/tCrossBar/resources/spells/681.png similarity index 100% rename from resources/spells/681.png rename to addons/tCrossBar/resources/spells/681.png diff --git a/resources/spells/682.png b/addons/tCrossBar/resources/spells/682.png similarity index 100% rename from resources/spells/682.png rename to addons/tCrossBar/resources/spells/682.png diff --git a/resources/spells/683.png b/addons/tCrossBar/resources/spells/683.png similarity index 100% rename from resources/spells/683.png rename to addons/tCrossBar/resources/spells/683.png diff --git a/resources/spells/684.png b/addons/tCrossBar/resources/spells/684.png similarity index 100% rename from resources/spells/684.png rename to addons/tCrossBar/resources/spells/684.png diff --git a/resources/spells/685.png b/addons/tCrossBar/resources/spells/685.png similarity index 100% rename from resources/spells/685.png rename to addons/tCrossBar/resources/spells/685.png diff --git a/resources/spells/686.png b/addons/tCrossBar/resources/spells/686.png similarity index 100% rename from resources/spells/686.png rename to addons/tCrossBar/resources/spells/686.png diff --git a/resources/spells/687.png b/addons/tCrossBar/resources/spells/687.png similarity index 100% rename from resources/spells/687.png rename to addons/tCrossBar/resources/spells/687.png diff --git a/resources/spells/688.png b/addons/tCrossBar/resources/spells/688.png similarity index 100% rename from resources/spells/688.png rename to addons/tCrossBar/resources/spells/688.png diff --git a/resources/spells/689.png b/addons/tCrossBar/resources/spells/689.png similarity index 100% rename from resources/spells/689.png rename to addons/tCrossBar/resources/spells/689.png diff --git a/resources/spells/69.png b/addons/tCrossBar/resources/spells/69.png similarity index 100% rename from resources/spells/69.png rename to addons/tCrossBar/resources/spells/69.png diff --git a/resources/spells/690.png b/addons/tCrossBar/resources/spells/690.png similarity index 100% rename from resources/spells/690.png rename to addons/tCrossBar/resources/spells/690.png diff --git a/resources/spells/692.png b/addons/tCrossBar/resources/spells/692.png similarity index 100% rename from resources/spells/692.png rename to addons/tCrossBar/resources/spells/692.png diff --git a/resources/spells/693.png b/addons/tCrossBar/resources/spells/693.png similarity index 100% rename from resources/spells/693.png rename to addons/tCrossBar/resources/spells/693.png diff --git a/resources/spells/694.png b/addons/tCrossBar/resources/spells/694.png similarity index 100% rename from resources/spells/694.png rename to addons/tCrossBar/resources/spells/694.png diff --git a/resources/spells/695.png b/addons/tCrossBar/resources/spells/695.png similarity index 100% rename from resources/spells/695.png rename to addons/tCrossBar/resources/spells/695.png diff --git a/resources/spells/696.png b/addons/tCrossBar/resources/spells/696.png similarity index 100% rename from resources/spells/696.png rename to addons/tCrossBar/resources/spells/696.png diff --git a/resources/spells/697.png b/addons/tCrossBar/resources/spells/697.png similarity index 100% rename from resources/spells/697.png rename to addons/tCrossBar/resources/spells/697.png diff --git a/resources/spells/698.png b/addons/tCrossBar/resources/spells/698.png similarity index 100% rename from resources/spells/698.png rename to addons/tCrossBar/resources/spells/698.png diff --git a/resources/spells/699.png b/addons/tCrossBar/resources/spells/699.png similarity index 100% rename from resources/spells/699.png rename to addons/tCrossBar/resources/spells/699.png diff --git a/resources/spells/7.png b/addons/tCrossBar/resources/spells/7.png similarity index 100% rename from resources/spells/7.png rename to addons/tCrossBar/resources/spells/7.png diff --git a/resources/spells/70.png b/addons/tCrossBar/resources/spells/70.png similarity index 100% rename from resources/spells/70.png rename to addons/tCrossBar/resources/spells/70.png diff --git a/resources/spells/700.png b/addons/tCrossBar/resources/spells/700.png similarity index 100% rename from resources/spells/700.png rename to addons/tCrossBar/resources/spells/700.png diff --git a/resources/spells/701.png b/addons/tCrossBar/resources/spells/701.png similarity index 100% rename from resources/spells/701.png rename to addons/tCrossBar/resources/spells/701.png diff --git a/resources/spells/702.png b/addons/tCrossBar/resources/spells/702.png similarity index 100% rename from resources/spells/702.png rename to addons/tCrossBar/resources/spells/702.png diff --git a/resources/spells/703.png b/addons/tCrossBar/resources/spells/703.png similarity index 100% rename from resources/spells/703.png rename to addons/tCrossBar/resources/spells/703.png diff --git a/resources/spells/704.png b/addons/tCrossBar/resources/spells/704.png similarity index 100% rename from resources/spells/704.png rename to addons/tCrossBar/resources/spells/704.png diff --git a/resources/spells/705.png b/addons/tCrossBar/resources/spells/705.png similarity index 100% rename from resources/spells/705.png rename to addons/tCrossBar/resources/spells/705.png diff --git a/resources/spells/706.png b/addons/tCrossBar/resources/spells/706.png similarity index 100% rename from resources/spells/706.png rename to addons/tCrossBar/resources/spells/706.png diff --git a/resources/spells/707.png b/addons/tCrossBar/resources/spells/707.png similarity index 100% rename from resources/spells/707.png rename to addons/tCrossBar/resources/spells/707.png diff --git a/resources/spells/708.png b/addons/tCrossBar/resources/spells/708.png similarity index 100% rename from resources/spells/708.png rename to addons/tCrossBar/resources/spells/708.png diff --git a/resources/spells/709.png b/addons/tCrossBar/resources/spells/709.png similarity index 100% rename from resources/spells/709.png rename to addons/tCrossBar/resources/spells/709.png diff --git a/resources/spells/71.png b/addons/tCrossBar/resources/spells/71.png similarity index 100% rename from resources/spells/71.png rename to addons/tCrossBar/resources/spells/71.png diff --git a/resources/spells/710.png b/addons/tCrossBar/resources/spells/710.png similarity index 100% rename from resources/spells/710.png rename to addons/tCrossBar/resources/spells/710.png diff --git a/resources/spells/711.png b/addons/tCrossBar/resources/spells/711.png similarity index 100% rename from resources/spells/711.png rename to addons/tCrossBar/resources/spells/711.png diff --git a/resources/spells/712.png b/addons/tCrossBar/resources/spells/712.png similarity index 100% rename from resources/spells/712.png rename to addons/tCrossBar/resources/spells/712.png diff --git a/resources/spells/713.png b/addons/tCrossBar/resources/spells/713.png similarity index 100% rename from resources/spells/713.png rename to addons/tCrossBar/resources/spells/713.png diff --git a/resources/spells/714.png b/addons/tCrossBar/resources/spells/714.png similarity index 100% rename from resources/spells/714.png rename to addons/tCrossBar/resources/spells/714.png diff --git a/resources/spells/715.png b/addons/tCrossBar/resources/spells/715.png similarity index 100% rename from resources/spells/715.png rename to addons/tCrossBar/resources/spells/715.png diff --git a/resources/spells/716.png b/addons/tCrossBar/resources/spells/716.png similarity index 100% rename from resources/spells/716.png rename to addons/tCrossBar/resources/spells/716.png diff --git a/resources/spells/717.png b/addons/tCrossBar/resources/spells/717.png similarity index 100% rename from resources/spells/717.png rename to addons/tCrossBar/resources/spells/717.png diff --git a/resources/spells/718.png b/addons/tCrossBar/resources/spells/718.png similarity index 100% rename from resources/spells/718.png rename to addons/tCrossBar/resources/spells/718.png diff --git a/resources/spells/719.png b/addons/tCrossBar/resources/spells/719.png similarity index 100% rename from resources/spells/719.png rename to addons/tCrossBar/resources/spells/719.png diff --git a/resources/spells/72.png b/addons/tCrossBar/resources/spells/72.png similarity index 100% rename from resources/spells/72.png rename to addons/tCrossBar/resources/spells/72.png diff --git a/resources/spells/720.png b/addons/tCrossBar/resources/spells/720.png similarity index 100% rename from resources/spells/720.png rename to addons/tCrossBar/resources/spells/720.png diff --git a/resources/spells/721.png b/addons/tCrossBar/resources/spells/721.png similarity index 100% rename from resources/spells/721.png rename to addons/tCrossBar/resources/spells/721.png diff --git a/resources/spells/722.png b/addons/tCrossBar/resources/spells/722.png similarity index 100% rename from resources/spells/722.png rename to addons/tCrossBar/resources/spells/722.png diff --git a/resources/spells/723.png b/addons/tCrossBar/resources/spells/723.png similarity index 100% rename from resources/spells/723.png rename to addons/tCrossBar/resources/spells/723.png diff --git a/resources/spells/724.png b/addons/tCrossBar/resources/spells/724.png similarity index 100% rename from resources/spells/724.png rename to addons/tCrossBar/resources/spells/724.png diff --git a/resources/spells/725.png b/addons/tCrossBar/resources/spells/725.png similarity index 100% rename from resources/spells/725.png rename to addons/tCrossBar/resources/spells/725.png diff --git a/resources/spells/726.png b/addons/tCrossBar/resources/spells/726.png similarity index 100% rename from resources/spells/726.png rename to addons/tCrossBar/resources/spells/726.png diff --git a/resources/spells/727.png b/addons/tCrossBar/resources/spells/727.png similarity index 100% rename from resources/spells/727.png rename to addons/tCrossBar/resources/spells/727.png diff --git a/resources/spells/728.png b/addons/tCrossBar/resources/spells/728.png similarity index 100% rename from resources/spells/728.png rename to addons/tCrossBar/resources/spells/728.png diff --git a/resources/spells/73.png b/addons/tCrossBar/resources/spells/73.png similarity index 100% rename from resources/spells/73.png rename to addons/tCrossBar/resources/spells/73.png diff --git a/resources/spells/736.png b/addons/tCrossBar/resources/spells/736.png similarity index 100% rename from resources/spells/736.png rename to addons/tCrossBar/resources/spells/736.png diff --git a/resources/spells/737.png b/addons/tCrossBar/resources/spells/737.png similarity index 100% rename from resources/spells/737.png rename to addons/tCrossBar/resources/spells/737.png diff --git a/resources/spells/738.png b/addons/tCrossBar/resources/spells/738.png similarity index 100% rename from resources/spells/738.png rename to addons/tCrossBar/resources/spells/738.png diff --git a/resources/spells/739.png b/addons/tCrossBar/resources/spells/739.png similarity index 100% rename from resources/spells/739.png rename to addons/tCrossBar/resources/spells/739.png diff --git a/resources/spells/74.png b/addons/tCrossBar/resources/spells/74.png similarity index 100% rename from resources/spells/74.png rename to addons/tCrossBar/resources/spells/74.png diff --git a/resources/spells/740.png b/addons/tCrossBar/resources/spells/740.png similarity index 100% rename from resources/spells/740.png rename to addons/tCrossBar/resources/spells/740.png diff --git a/resources/spells/741.png b/addons/tCrossBar/resources/spells/741.png similarity index 100% rename from resources/spells/741.png rename to addons/tCrossBar/resources/spells/741.png diff --git a/resources/spells/742.png b/addons/tCrossBar/resources/spells/742.png similarity index 100% rename from resources/spells/742.png rename to addons/tCrossBar/resources/spells/742.png diff --git a/resources/spells/743.png b/addons/tCrossBar/resources/spells/743.png similarity index 100% rename from resources/spells/743.png rename to addons/tCrossBar/resources/spells/743.png diff --git a/resources/spells/744.png b/addons/tCrossBar/resources/spells/744.png similarity index 100% rename from resources/spells/744.png rename to addons/tCrossBar/resources/spells/744.png diff --git a/resources/spells/745.png b/addons/tCrossBar/resources/spells/745.png similarity index 100% rename from resources/spells/745.png rename to addons/tCrossBar/resources/spells/745.png diff --git a/resources/spells/746.png b/addons/tCrossBar/resources/spells/746.png similarity index 100% rename from resources/spells/746.png rename to addons/tCrossBar/resources/spells/746.png diff --git a/resources/spells/747.png b/addons/tCrossBar/resources/spells/747.png similarity index 100% rename from resources/spells/747.png rename to addons/tCrossBar/resources/spells/747.png diff --git a/resources/spells/748.png b/addons/tCrossBar/resources/spells/748.png similarity index 100% rename from resources/spells/748.png rename to addons/tCrossBar/resources/spells/748.png diff --git a/resources/spells/749.png b/addons/tCrossBar/resources/spells/749.png similarity index 100% rename from resources/spells/749.png rename to addons/tCrossBar/resources/spells/749.png diff --git a/resources/spells/75.png b/addons/tCrossBar/resources/spells/75.png similarity index 100% rename from resources/spells/75.png rename to addons/tCrossBar/resources/spells/75.png diff --git a/resources/spells/76.png b/addons/tCrossBar/resources/spells/76.png similarity index 100% rename from resources/spells/76.png rename to addons/tCrossBar/resources/spells/76.png diff --git a/resources/spells/77.png b/addons/tCrossBar/resources/spells/77.png similarity index 100% rename from resources/spells/77.png rename to addons/tCrossBar/resources/spells/77.png diff --git a/resources/spells/78.png b/addons/tCrossBar/resources/spells/78.png similarity index 100% rename from resources/spells/78.png rename to addons/tCrossBar/resources/spells/78.png diff --git a/resources/spells/79.png b/addons/tCrossBar/resources/spells/79.png similarity index 100% rename from resources/spells/79.png rename to addons/tCrossBar/resources/spells/79.png diff --git a/resources/spells/8.png b/addons/tCrossBar/resources/spells/8.png similarity index 100% rename from resources/spells/8.png rename to addons/tCrossBar/resources/spells/8.png diff --git a/resources/spells/80.png b/addons/tCrossBar/resources/spells/80.png similarity index 100% rename from resources/spells/80.png rename to addons/tCrossBar/resources/spells/80.png diff --git a/resources/spells/81.png b/addons/tCrossBar/resources/spells/81.png similarity index 100% rename from resources/spells/81.png rename to addons/tCrossBar/resources/spells/81.png diff --git a/resources/spells/82.png b/addons/tCrossBar/resources/spells/82.png similarity index 100% rename from resources/spells/82.png rename to addons/tCrossBar/resources/spells/82.png diff --git a/resources/spells/828.png b/addons/tCrossBar/resources/spells/828.png similarity index 100% rename from resources/spells/828.png rename to addons/tCrossBar/resources/spells/828.png diff --git a/resources/spells/829.png b/addons/tCrossBar/resources/spells/829.png similarity index 100% rename from resources/spells/829.png rename to addons/tCrossBar/resources/spells/829.png diff --git a/resources/spells/83.png b/addons/tCrossBar/resources/spells/83.png similarity index 100% rename from resources/spells/83.png rename to addons/tCrossBar/resources/spells/83.png diff --git a/resources/spells/830.png b/addons/tCrossBar/resources/spells/830.png similarity index 100% rename from resources/spells/830.png rename to addons/tCrossBar/resources/spells/830.png diff --git a/resources/spells/831.png b/addons/tCrossBar/resources/spells/831.png similarity index 100% rename from resources/spells/831.png rename to addons/tCrossBar/resources/spells/831.png diff --git a/resources/spells/832.png b/addons/tCrossBar/resources/spells/832.png similarity index 100% rename from resources/spells/832.png rename to addons/tCrossBar/resources/spells/832.png diff --git a/resources/spells/833.png b/addons/tCrossBar/resources/spells/833.png similarity index 100% rename from resources/spells/833.png rename to addons/tCrossBar/resources/spells/833.png diff --git a/resources/spells/834.png b/addons/tCrossBar/resources/spells/834.png similarity index 100% rename from resources/spells/834.png rename to addons/tCrossBar/resources/spells/834.png diff --git a/resources/spells/835.png b/addons/tCrossBar/resources/spells/835.png similarity index 100% rename from resources/spells/835.png rename to addons/tCrossBar/resources/spells/835.png diff --git a/resources/spells/836.png b/addons/tCrossBar/resources/spells/836.png similarity index 100% rename from resources/spells/836.png rename to addons/tCrossBar/resources/spells/836.png diff --git a/resources/spells/837.png b/addons/tCrossBar/resources/spells/837.png similarity index 100% rename from resources/spells/837.png rename to addons/tCrossBar/resources/spells/837.png diff --git a/resources/spells/838.png b/addons/tCrossBar/resources/spells/838.png similarity index 100% rename from resources/spells/838.png rename to addons/tCrossBar/resources/spells/838.png diff --git a/resources/spells/839.png b/addons/tCrossBar/resources/spells/839.png similarity index 100% rename from resources/spells/839.png rename to addons/tCrossBar/resources/spells/839.png diff --git a/resources/spells/84.png b/addons/tCrossBar/resources/spells/84.png similarity index 100% rename from resources/spells/84.png rename to addons/tCrossBar/resources/spells/84.png diff --git a/resources/spells/841.png b/addons/tCrossBar/resources/spells/841.png similarity index 100% rename from resources/spells/841.png rename to addons/tCrossBar/resources/spells/841.png diff --git a/resources/spells/842.png b/addons/tCrossBar/resources/spells/842.png similarity index 100% rename from resources/spells/842.png rename to addons/tCrossBar/resources/spells/842.png diff --git a/resources/spells/843.png b/addons/tCrossBar/resources/spells/843.png similarity index 100% rename from resources/spells/843.png rename to addons/tCrossBar/resources/spells/843.png diff --git a/resources/spells/844.png b/addons/tCrossBar/resources/spells/844.png similarity index 100% rename from resources/spells/844.png rename to addons/tCrossBar/resources/spells/844.png diff --git a/resources/spells/845.png b/addons/tCrossBar/resources/spells/845.png similarity index 100% rename from resources/spells/845.png rename to addons/tCrossBar/resources/spells/845.png diff --git a/resources/spells/846.png b/addons/tCrossBar/resources/spells/846.png similarity index 100% rename from resources/spells/846.png rename to addons/tCrossBar/resources/spells/846.png diff --git a/resources/spells/848.png b/addons/tCrossBar/resources/spells/848.png similarity index 100% rename from resources/spells/848.png rename to addons/tCrossBar/resources/spells/848.png diff --git a/resources/spells/849.png b/addons/tCrossBar/resources/spells/849.png similarity index 100% rename from resources/spells/849.png rename to addons/tCrossBar/resources/spells/849.png diff --git a/resources/spells/85.png b/addons/tCrossBar/resources/spells/85.png similarity index 100% rename from resources/spells/85.png rename to addons/tCrossBar/resources/spells/85.png diff --git a/resources/spells/850.png b/addons/tCrossBar/resources/spells/850.png similarity index 100% rename from resources/spells/850.png rename to addons/tCrossBar/resources/spells/850.png diff --git a/resources/spells/851.png b/addons/tCrossBar/resources/spells/851.png similarity index 100% rename from resources/spells/851.png rename to addons/tCrossBar/resources/spells/851.png diff --git a/resources/spells/852.png b/addons/tCrossBar/resources/spells/852.png similarity index 100% rename from resources/spells/852.png rename to addons/tCrossBar/resources/spells/852.png diff --git a/resources/spells/853.png b/addons/tCrossBar/resources/spells/853.png similarity index 100% rename from resources/spells/853.png rename to addons/tCrossBar/resources/spells/853.png diff --git a/resources/spells/854.png b/addons/tCrossBar/resources/spells/854.png similarity index 100% rename from resources/spells/854.png rename to addons/tCrossBar/resources/spells/854.png diff --git a/resources/spells/855.png b/addons/tCrossBar/resources/spells/855.png similarity index 100% rename from resources/spells/855.png rename to addons/tCrossBar/resources/spells/855.png diff --git a/resources/spells/856.png b/addons/tCrossBar/resources/spells/856.png similarity index 100% rename from resources/spells/856.png rename to addons/tCrossBar/resources/spells/856.png diff --git a/resources/spells/857.png b/addons/tCrossBar/resources/spells/857.png similarity index 100% rename from resources/spells/857.png rename to addons/tCrossBar/resources/spells/857.png diff --git a/resources/spells/858.png b/addons/tCrossBar/resources/spells/858.png similarity index 100% rename from resources/spells/858.png rename to addons/tCrossBar/resources/spells/858.png diff --git a/resources/spells/859.png b/addons/tCrossBar/resources/spells/859.png similarity index 100% rename from resources/spells/859.png rename to addons/tCrossBar/resources/spells/859.png diff --git a/resources/spells/86.png b/addons/tCrossBar/resources/spells/86.png similarity index 100% rename from resources/spells/86.png rename to addons/tCrossBar/resources/spells/86.png diff --git a/resources/spells/860.png b/addons/tCrossBar/resources/spells/860.png similarity index 100% rename from resources/spells/860.png rename to addons/tCrossBar/resources/spells/860.png diff --git a/resources/spells/861.png b/addons/tCrossBar/resources/spells/861.png similarity index 100% rename from resources/spells/861.png rename to addons/tCrossBar/resources/spells/861.png diff --git a/resources/spells/862.png b/addons/tCrossBar/resources/spells/862.png similarity index 100% rename from resources/spells/862.png rename to addons/tCrossBar/resources/spells/862.png diff --git a/resources/spells/863.png b/addons/tCrossBar/resources/spells/863.png similarity index 100% rename from resources/spells/863.png rename to addons/tCrossBar/resources/spells/863.png diff --git a/resources/spells/864.png b/addons/tCrossBar/resources/spells/864.png similarity index 100% rename from resources/spells/864.png rename to addons/tCrossBar/resources/spells/864.png diff --git a/resources/spells/865.png b/addons/tCrossBar/resources/spells/865.png similarity index 100% rename from resources/spells/865.png rename to addons/tCrossBar/resources/spells/865.png diff --git a/resources/spells/866.png b/addons/tCrossBar/resources/spells/866.png similarity index 100% rename from resources/spells/866.png rename to addons/tCrossBar/resources/spells/866.png diff --git a/resources/spells/867.png b/addons/tCrossBar/resources/spells/867.png similarity index 100% rename from resources/spells/867.png rename to addons/tCrossBar/resources/spells/867.png diff --git a/resources/spells/868.png b/addons/tCrossBar/resources/spells/868.png similarity index 100% rename from resources/spells/868.png rename to addons/tCrossBar/resources/spells/868.png diff --git a/resources/spells/869.png b/addons/tCrossBar/resources/spells/869.png similarity index 100% rename from resources/spells/869.png rename to addons/tCrossBar/resources/spells/869.png diff --git a/resources/spells/87.png b/addons/tCrossBar/resources/spells/87.png similarity index 100% rename from resources/spells/87.png rename to addons/tCrossBar/resources/spells/87.png diff --git a/resources/spells/870.png b/addons/tCrossBar/resources/spells/870.png similarity index 100% rename from resources/spells/870.png rename to addons/tCrossBar/resources/spells/870.png diff --git a/resources/spells/871.png b/addons/tCrossBar/resources/spells/871.png similarity index 100% rename from resources/spells/871.png rename to addons/tCrossBar/resources/spells/871.png diff --git a/resources/spells/872.png b/addons/tCrossBar/resources/spells/872.png similarity index 100% rename from resources/spells/872.png rename to addons/tCrossBar/resources/spells/872.png diff --git a/resources/spells/873.png b/addons/tCrossBar/resources/spells/873.png similarity index 100% rename from resources/spells/873.png rename to addons/tCrossBar/resources/spells/873.png diff --git a/resources/spells/874.png b/addons/tCrossBar/resources/spells/874.png similarity index 100% rename from resources/spells/874.png rename to addons/tCrossBar/resources/spells/874.png diff --git a/resources/spells/875.png b/addons/tCrossBar/resources/spells/875.png similarity index 100% rename from resources/spells/875.png rename to addons/tCrossBar/resources/spells/875.png diff --git a/resources/spells/876.png b/addons/tCrossBar/resources/spells/876.png similarity index 100% rename from resources/spells/876.png rename to addons/tCrossBar/resources/spells/876.png diff --git a/resources/spells/877.png b/addons/tCrossBar/resources/spells/877.png similarity index 100% rename from resources/spells/877.png rename to addons/tCrossBar/resources/spells/877.png diff --git a/resources/spells/878.png b/addons/tCrossBar/resources/spells/878.png similarity index 100% rename from resources/spells/878.png rename to addons/tCrossBar/resources/spells/878.png diff --git a/resources/spells/879.png b/addons/tCrossBar/resources/spells/879.png similarity index 100% rename from resources/spells/879.png rename to addons/tCrossBar/resources/spells/879.png diff --git a/resources/spells/88.png b/addons/tCrossBar/resources/spells/88.png similarity index 100% rename from resources/spells/88.png rename to addons/tCrossBar/resources/spells/88.png diff --git a/resources/spells/880.png b/addons/tCrossBar/resources/spells/880.png similarity index 100% rename from resources/spells/880.png rename to addons/tCrossBar/resources/spells/880.png diff --git a/resources/spells/881.png b/addons/tCrossBar/resources/spells/881.png similarity index 100% rename from resources/spells/881.png rename to addons/tCrossBar/resources/spells/881.png diff --git a/resources/spells/882.png b/addons/tCrossBar/resources/spells/882.png similarity index 100% rename from resources/spells/882.png rename to addons/tCrossBar/resources/spells/882.png diff --git a/resources/spells/883.png b/addons/tCrossBar/resources/spells/883.png similarity index 100% rename from resources/spells/883.png rename to addons/tCrossBar/resources/spells/883.png diff --git a/resources/spells/884.png b/addons/tCrossBar/resources/spells/884.png similarity index 100% rename from resources/spells/884.png rename to addons/tCrossBar/resources/spells/884.png diff --git a/resources/spells/885.png b/addons/tCrossBar/resources/spells/885.png similarity index 100% rename from resources/spells/885.png rename to addons/tCrossBar/resources/spells/885.png diff --git a/resources/spells/886.png b/addons/tCrossBar/resources/spells/886.png similarity index 100% rename from resources/spells/886.png rename to addons/tCrossBar/resources/spells/886.png diff --git a/resources/spells/887.png b/addons/tCrossBar/resources/spells/887.png similarity index 100% rename from resources/spells/887.png rename to addons/tCrossBar/resources/spells/887.png diff --git a/resources/spells/888.png b/addons/tCrossBar/resources/spells/888.png similarity index 100% rename from resources/spells/888.png rename to addons/tCrossBar/resources/spells/888.png diff --git a/resources/spells/889.png b/addons/tCrossBar/resources/spells/889.png similarity index 100% rename from resources/spells/889.png rename to addons/tCrossBar/resources/spells/889.png diff --git a/resources/spells/89.png b/addons/tCrossBar/resources/spells/89.png similarity index 100% rename from resources/spells/89.png rename to addons/tCrossBar/resources/spells/89.png diff --git a/resources/spells/890.png b/addons/tCrossBar/resources/spells/890.png similarity index 100% rename from resources/spells/890.png rename to addons/tCrossBar/resources/spells/890.png diff --git a/resources/spells/891.png b/addons/tCrossBar/resources/spells/891.png similarity index 100% rename from resources/spells/891.png rename to addons/tCrossBar/resources/spells/891.png diff --git a/resources/spells/892.png b/addons/tCrossBar/resources/spells/892.png similarity index 100% rename from resources/spells/892.png rename to addons/tCrossBar/resources/spells/892.png diff --git a/resources/spells/894.png b/addons/tCrossBar/resources/spells/894.png similarity index 100% rename from resources/spells/894.png rename to addons/tCrossBar/resources/spells/894.png diff --git a/resources/spells/895.png b/addons/tCrossBar/resources/spells/895.png similarity index 100% rename from resources/spells/895.png rename to addons/tCrossBar/resources/spells/895.png diff --git a/resources/spells/896.png b/addons/tCrossBar/resources/spells/896.png similarity index 100% rename from resources/spells/896.png rename to addons/tCrossBar/resources/spells/896.png diff --git a/resources/spells/897.png b/addons/tCrossBar/resources/spells/897.png similarity index 100% rename from resources/spells/897.png rename to addons/tCrossBar/resources/spells/897.png diff --git a/resources/spells/898.png b/addons/tCrossBar/resources/spells/898.png similarity index 100% rename from resources/spells/898.png rename to addons/tCrossBar/resources/spells/898.png diff --git a/resources/spells/899.png b/addons/tCrossBar/resources/spells/899.png similarity index 100% rename from resources/spells/899.png rename to addons/tCrossBar/resources/spells/899.png diff --git a/resources/spells/9.png b/addons/tCrossBar/resources/spells/9.png similarity index 100% rename from resources/spells/9.png rename to addons/tCrossBar/resources/spells/9.png diff --git a/resources/spells/90.png b/addons/tCrossBar/resources/spells/90.png similarity index 100% rename from resources/spells/90.png rename to addons/tCrossBar/resources/spells/90.png diff --git a/resources/spells/900.png b/addons/tCrossBar/resources/spells/900.png similarity index 100% rename from resources/spells/900.png rename to addons/tCrossBar/resources/spells/900.png diff --git a/resources/spells/901.png b/addons/tCrossBar/resources/spells/901.png similarity index 100% rename from resources/spells/901.png rename to addons/tCrossBar/resources/spells/901.png diff --git a/resources/spells/902.png b/addons/tCrossBar/resources/spells/902.png similarity index 100% rename from resources/spells/902.png rename to addons/tCrossBar/resources/spells/902.png diff --git a/resources/spells/903.png b/addons/tCrossBar/resources/spells/903.png similarity index 100% rename from resources/spells/903.png rename to addons/tCrossBar/resources/spells/903.png diff --git a/resources/spells/904.png b/addons/tCrossBar/resources/spells/904.png similarity index 100% rename from resources/spells/904.png rename to addons/tCrossBar/resources/spells/904.png diff --git a/resources/spells/905.png b/addons/tCrossBar/resources/spells/905.png similarity index 100% rename from resources/spells/905.png rename to addons/tCrossBar/resources/spells/905.png diff --git a/resources/spells/906.png b/addons/tCrossBar/resources/spells/906.png similarity index 100% rename from resources/spells/906.png rename to addons/tCrossBar/resources/spells/906.png diff --git a/resources/spells/907.png b/addons/tCrossBar/resources/spells/907.png similarity index 100% rename from resources/spells/907.png rename to addons/tCrossBar/resources/spells/907.png diff --git a/resources/spells/908.png b/addons/tCrossBar/resources/spells/908.png similarity index 100% rename from resources/spells/908.png rename to addons/tCrossBar/resources/spells/908.png diff --git a/resources/spells/909.png b/addons/tCrossBar/resources/spells/909.png similarity index 100% rename from resources/spells/909.png rename to addons/tCrossBar/resources/spells/909.png diff --git a/resources/spells/91.png b/addons/tCrossBar/resources/spells/91.png similarity index 100% rename from resources/spells/91.png rename to addons/tCrossBar/resources/spells/91.png diff --git a/resources/spells/910.png b/addons/tCrossBar/resources/spells/910.png similarity index 100% rename from resources/spells/910.png rename to addons/tCrossBar/resources/spells/910.png diff --git a/resources/spells/911.png b/addons/tCrossBar/resources/spells/911.png similarity index 100% rename from resources/spells/911.png rename to addons/tCrossBar/resources/spells/911.png diff --git a/resources/spells/912.png b/addons/tCrossBar/resources/spells/912.png similarity index 100% rename from resources/spells/912.png rename to addons/tCrossBar/resources/spells/912.png diff --git a/resources/spells/913.png b/addons/tCrossBar/resources/spells/913.png similarity index 100% rename from resources/spells/913.png rename to addons/tCrossBar/resources/spells/913.png diff --git a/resources/spells/914.png b/addons/tCrossBar/resources/spells/914.png similarity index 100% rename from resources/spells/914.png rename to addons/tCrossBar/resources/spells/914.png diff --git a/resources/spells/915.png b/addons/tCrossBar/resources/spells/915.png similarity index 100% rename from resources/spells/915.png rename to addons/tCrossBar/resources/spells/915.png diff --git a/resources/spells/916.png b/addons/tCrossBar/resources/spells/916.png similarity index 100% rename from resources/spells/916.png rename to addons/tCrossBar/resources/spells/916.png diff --git a/resources/spells/917.png b/addons/tCrossBar/resources/spells/917.png similarity index 100% rename from resources/spells/917.png rename to addons/tCrossBar/resources/spells/917.png diff --git a/resources/spells/918.png b/addons/tCrossBar/resources/spells/918.png similarity index 100% rename from resources/spells/918.png rename to addons/tCrossBar/resources/spells/918.png diff --git a/resources/spells/919.png b/addons/tCrossBar/resources/spells/919.png similarity index 100% rename from resources/spells/919.png rename to addons/tCrossBar/resources/spells/919.png diff --git a/resources/spells/92.png b/addons/tCrossBar/resources/spells/92.png similarity index 100% rename from resources/spells/92.png rename to addons/tCrossBar/resources/spells/92.png diff --git a/resources/spells/920.png b/addons/tCrossBar/resources/spells/920.png similarity index 100% rename from resources/spells/920.png rename to addons/tCrossBar/resources/spells/920.png diff --git a/resources/spells/921.png b/addons/tCrossBar/resources/spells/921.png similarity index 100% rename from resources/spells/921.png rename to addons/tCrossBar/resources/spells/921.png diff --git a/resources/spells/922.png b/addons/tCrossBar/resources/spells/922.png similarity index 100% rename from resources/spells/922.png rename to addons/tCrossBar/resources/spells/922.png diff --git a/resources/spells/923.png b/addons/tCrossBar/resources/spells/923.png similarity index 100% rename from resources/spells/923.png rename to addons/tCrossBar/resources/spells/923.png diff --git a/resources/spells/924.png b/addons/tCrossBar/resources/spells/924.png similarity index 100% rename from resources/spells/924.png rename to addons/tCrossBar/resources/spells/924.png diff --git a/resources/spells/925.png b/addons/tCrossBar/resources/spells/925.png similarity index 100% rename from resources/spells/925.png rename to addons/tCrossBar/resources/spells/925.png diff --git a/resources/spells/926.png b/addons/tCrossBar/resources/spells/926.png similarity index 100% rename from resources/spells/926.png rename to addons/tCrossBar/resources/spells/926.png diff --git a/resources/spells/927.png b/addons/tCrossBar/resources/spells/927.png similarity index 100% rename from resources/spells/927.png rename to addons/tCrossBar/resources/spells/927.png diff --git a/resources/spells/928.png b/addons/tCrossBar/resources/spells/928.png similarity index 100% rename from resources/spells/928.png rename to addons/tCrossBar/resources/spells/928.png diff --git a/resources/spells/929.png b/addons/tCrossBar/resources/spells/929.png similarity index 100% rename from resources/spells/929.png rename to addons/tCrossBar/resources/spells/929.png diff --git a/resources/spells/93.png b/addons/tCrossBar/resources/spells/93.png similarity index 100% rename from resources/spells/93.png rename to addons/tCrossBar/resources/spells/93.png diff --git a/resources/spells/930.png b/addons/tCrossBar/resources/spells/930.png similarity index 100% rename from resources/spells/930.png rename to addons/tCrossBar/resources/spells/930.png diff --git a/resources/spells/931.png b/addons/tCrossBar/resources/spells/931.png similarity index 100% rename from resources/spells/931.png rename to addons/tCrossBar/resources/spells/931.png diff --git a/resources/spells/932.png b/addons/tCrossBar/resources/spells/932.png similarity index 100% rename from resources/spells/932.png rename to addons/tCrossBar/resources/spells/932.png diff --git a/resources/spells/933.png b/addons/tCrossBar/resources/spells/933.png similarity index 100% rename from resources/spells/933.png rename to addons/tCrossBar/resources/spells/933.png diff --git a/resources/spells/934.png b/addons/tCrossBar/resources/spells/934.png similarity index 100% rename from resources/spells/934.png rename to addons/tCrossBar/resources/spells/934.png diff --git a/resources/spells/935.png b/addons/tCrossBar/resources/spells/935.png similarity index 100% rename from resources/spells/935.png rename to addons/tCrossBar/resources/spells/935.png diff --git a/resources/spells/936.png b/addons/tCrossBar/resources/spells/936.png similarity index 100% rename from resources/spells/936.png rename to addons/tCrossBar/resources/spells/936.png diff --git a/resources/spells/937.png b/addons/tCrossBar/resources/spells/937.png similarity index 100% rename from resources/spells/937.png rename to addons/tCrossBar/resources/spells/937.png diff --git a/resources/spells/938.png b/addons/tCrossBar/resources/spells/938.png similarity index 100% rename from resources/spells/938.png rename to addons/tCrossBar/resources/spells/938.png diff --git a/resources/spells/939.png b/addons/tCrossBar/resources/spells/939.png similarity index 100% rename from resources/spells/939.png rename to addons/tCrossBar/resources/spells/939.png diff --git a/resources/spells/94.png b/addons/tCrossBar/resources/spells/94.png similarity index 100% rename from resources/spells/94.png rename to addons/tCrossBar/resources/spells/94.png diff --git a/resources/spells/940.png b/addons/tCrossBar/resources/spells/940.png similarity index 100% rename from resources/spells/940.png rename to addons/tCrossBar/resources/spells/940.png diff --git a/resources/spells/941.png b/addons/tCrossBar/resources/spells/941.png similarity index 100% rename from resources/spells/941.png rename to addons/tCrossBar/resources/spells/941.png diff --git a/resources/spells/942.png b/addons/tCrossBar/resources/spells/942.png similarity index 100% rename from resources/spells/942.png rename to addons/tCrossBar/resources/spells/942.png diff --git a/resources/spells/943.png b/addons/tCrossBar/resources/spells/943.png similarity index 100% rename from resources/spells/943.png rename to addons/tCrossBar/resources/spells/943.png diff --git a/resources/spells/944.png b/addons/tCrossBar/resources/spells/944.png similarity index 100% rename from resources/spells/944.png rename to addons/tCrossBar/resources/spells/944.png diff --git a/resources/spells/945.png b/addons/tCrossBar/resources/spells/945.png similarity index 100% rename from resources/spells/945.png rename to addons/tCrossBar/resources/spells/945.png diff --git a/resources/spells/946.png b/addons/tCrossBar/resources/spells/946.png similarity index 100% rename from resources/spells/946.png rename to addons/tCrossBar/resources/spells/946.png diff --git a/resources/spells/947.png b/addons/tCrossBar/resources/spells/947.png similarity index 100% rename from resources/spells/947.png rename to addons/tCrossBar/resources/spells/947.png diff --git a/resources/spells/948.png b/addons/tCrossBar/resources/spells/948.png similarity index 100% rename from resources/spells/948.png rename to addons/tCrossBar/resources/spells/948.png diff --git a/resources/spells/949.png b/addons/tCrossBar/resources/spells/949.png similarity index 100% rename from resources/spells/949.png rename to addons/tCrossBar/resources/spells/949.png diff --git a/resources/spells/95.png b/addons/tCrossBar/resources/spells/95.png similarity index 100% rename from resources/spells/95.png rename to addons/tCrossBar/resources/spells/95.png diff --git a/resources/spells/950.png b/addons/tCrossBar/resources/spells/950.png similarity index 100% rename from resources/spells/950.png rename to addons/tCrossBar/resources/spells/950.png diff --git a/resources/spells/951.png b/addons/tCrossBar/resources/spells/951.png similarity index 100% rename from resources/spells/951.png rename to addons/tCrossBar/resources/spells/951.png diff --git a/resources/spells/952.png b/addons/tCrossBar/resources/spells/952.png similarity index 100% rename from resources/spells/952.png rename to addons/tCrossBar/resources/spells/952.png diff --git a/resources/spells/953.png b/addons/tCrossBar/resources/spells/953.png similarity index 100% rename from resources/spells/953.png rename to addons/tCrossBar/resources/spells/953.png diff --git a/resources/spells/954.png b/addons/tCrossBar/resources/spells/954.png similarity index 100% rename from resources/spells/954.png rename to addons/tCrossBar/resources/spells/954.png diff --git a/resources/spells/955.png b/addons/tCrossBar/resources/spells/955.png similarity index 100% rename from resources/spells/955.png rename to addons/tCrossBar/resources/spells/955.png diff --git a/resources/spells/956.png b/addons/tCrossBar/resources/spells/956.png similarity index 100% rename from resources/spells/956.png rename to addons/tCrossBar/resources/spells/956.png diff --git a/resources/spells/957.png b/addons/tCrossBar/resources/spells/957.png similarity index 100% rename from resources/spells/957.png rename to addons/tCrossBar/resources/spells/957.png diff --git a/resources/spells/958.png b/addons/tCrossBar/resources/spells/958.png similarity index 100% rename from resources/spells/958.png rename to addons/tCrossBar/resources/spells/958.png diff --git a/resources/spells/959.png b/addons/tCrossBar/resources/spells/959.png similarity index 100% rename from resources/spells/959.png rename to addons/tCrossBar/resources/spells/959.png diff --git a/resources/spells/96.png b/addons/tCrossBar/resources/spells/96.png similarity index 100% rename from resources/spells/96.png rename to addons/tCrossBar/resources/spells/96.png diff --git a/resources/spells/960.png b/addons/tCrossBar/resources/spells/960.png similarity index 100% rename from resources/spells/960.png rename to addons/tCrossBar/resources/spells/960.png diff --git a/resources/spells/961.png b/addons/tCrossBar/resources/spells/961.png similarity index 100% rename from resources/spells/961.png rename to addons/tCrossBar/resources/spells/961.png diff --git a/resources/spells/962.png b/addons/tCrossBar/resources/spells/962.png similarity index 100% rename from resources/spells/962.png rename to addons/tCrossBar/resources/spells/962.png diff --git a/resources/spells/963.png b/addons/tCrossBar/resources/spells/963.png similarity index 100% rename from resources/spells/963.png rename to addons/tCrossBar/resources/spells/963.png diff --git a/resources/spells/964.png b/addons/tCrossBar/resources/spells/964.png similarity index 100% rename from resources/spells/964.png rename to addons/tCrossBar/resources/spells/964.png diff --git a/resources/spells/965.png b/addons/tCrossBar/resources/spells/965.png similarity index 100% rename from resources/spells/965.png rename to addons/tCrossBar/resources/spells/965.png diff --git a/resources/spells/966.png b/addons/tCrossBar/resources/spells/966.png similarity index 100% rename from resources/spells/966.png rename to addons/tCrossBar/resources/spells/966.png diff --git a/resources/spells/967.png b/addons/tCrossBar/resources/spells/967.png similarity index 100% rename from resources/spells/967.png rename to addons/tCrossBar/resources/spells/967.png diff --git a/resources/spells/968.png b/addons/tCrossBar/resources/spells/968.png similarity index 100% rename from resources/spells/968.png rename to addons/tCrossBar/resources/spells/968.png diff --git a/resources/spells/969.png b/addons/tCrossBar/resources/spells/969.png similarity index 100% rename from resources/spells/969.png rename to addons/tCrossBar/resources/spells/969.png diff --git a/resources/spells/97.png b/addons/tCrossBar/resources/spells/97.png similarity index 100% rename from resources/spells/97.png rename to addons/tCrossBar/resources/spells/97.png diff --git a/resources/spells/970.png b/addons/tCrossBar/resources/spells/970.png similarity index 100% rename from resources/spells/970.png rename to addons/tCrossBar/resources/spells/970.png diff --git a/resources/spells/971.png b/addons/tCrossBar/resources/spells/971.png similarity index 100% rename from resources/spells/971.png rename to addons/tCrossBar/resources/spells/971.png diff --git a/resources/spells/972.png b/addons/tCrossBar/resources/spells/972.png similarity index 100% rename from resources/spells/972.png rename to addons/tCrossBar/resources/spells/972.png diff --git a/resources/spells/973.png b/addons/tCrossBar/resources/spells/973.png similarity index 100% rename from resources/spells/973.png rename to addons/tCrossBar/resources/spells/973.png diff --git a/resources/spells/974.png b/addons/tCrossBar/resources/spells/974.png similarity index 100% rename from resources/spells/974.png rename to addons/tCrossBar/resources/spells/974.png diff --git a/resources/spells/975.png b/addons/tCrossBar/resources/spells/975.png similarity index 100% rename from resources/spells/975.png rename to addons/tCrossBar/resources/spells/975.png diff --git a/resources/spells/976.png b/addons/tCrossBar/resources/spells/976.png similarity index 100% rename from resources/spells/976.png rename to addons/tCrossBar/resources/spells/976.png diff --git a/resources/spells/977.png b/addons/tCrossBar/resources/spells/977.png similarity index 100% rename from resources/spells/977.png rename to addons/tCrossBar/resources/spells/977.png diff --git a/resources/spells/978.png b/addons/tCrossBar/resources/spells/978.png similarity index 100% rename from resources/spells/978.png rename to addons/tCrossBar/resources/spells/978.png diff --git a/resources/spells/979.png b/addons/tCrossBar/resources/spells/979.png similarity index 100% rename from resources/spells/979.png rename to addons/tCrossBar/resources/spells/979.png diff --git a/resources/spells/98.png b/addons/tCrossBar/resources/spells/98.png similarity index 100% rename from resources/spells/98.png rename to addons/tCrossBar/resources/spells/98.png diff --git a/resources/spells/980.png b/addons/tCrossBar/resources/spells/980.png similarity index 100% rename from resources/spells/980.png rename to addons/tCrossBar/resources/spells/980.png diff --git a/resources/spells/981.png b/addons/tCrossBar/resources/spells/981.png similarity index 100% rename from resources/spells/981.png rename to addons/tCrossBar/resources/spells/981.png diff --git a/resources/spells/982.png b/addons/tCrossBar/resources/spells/982.png similarity index 100% rename from resources/spells/982.png rename to addons/tCrossBar/resources/spells/982.png diff --git a/resources/spells/983.png b/addons/tCrossBar/resources/spells/983.png similarity index 100% rename from resources/spells/983.png rename to addons/tCrossBar/resources/spells/983.png diff --git a/resources/spells/984.png b/addons/tCrossBar/resources/spells/984.png similarity index 100% rename from resources/spells/984.png rename to addons/tCrossBar/resources/spells/984.png diff --git a/resources/spells/985.png b/addons/tCrossBar/resources/spells/985.png similarity index 100% rename from resources/spells/985.png rename to addons/tCrossBar/resources/spells/985.png diff --git a/resources/spells/986.png b/addons/tCrossBar/resources/spells/986.png similarity index 100% rename from resources/spells/986.png rename to addons/tCrossBar/resources/spells/986.png diff --git a/resources/spells/987.png b/addons/tCrossBar/resources/spells/987.png similarity index 100% rename from resources/spells/987.png rename to addons/tCrossBar/resources/spells/987.png diff --git a/resources/spells/99.png b/addons/tCrossBar/resources/spells/99.png similarity index 100% rename from resources/spells/99.png rename to addons/tCrossBar/resources/spells/99.png diff --git a/resources/spells/default.png b/addons/tCrossBar/resources/spells/default.png similarity index 100% rename from resources/spells/default.png rename to addons/tCrossBar/resources/spells/default.png diff --git a/resources/weaponskills/default.png b/addons/tCrossBar/resources/weaponskills/default.png similarity index 100% rename from resources/weaponskills/default.png rename to addons/tCrossBar/resources/weaponskills/default.png diff --git a/resources/wsmap.lua b/addons/tCrossBar/resources/wsmap.lua similarity index 100% rename from resources/wsmap.lua rename to addons/tCrossBar/resources/wsmap.lua diff --git a/singledisplay.lua b/addons/tCrossBar/singledisplay.lua similarity index 100% rename from singledisplay.lua rename to addons/tCrossBar/singledisplay.lua diff --git a/state/inventory.lua b/addons/tCrossBar/state/inventory.lua similarity index 100% rename from state/inventory.lua rename to addons/tCrossBar/state/inventory.lua diff --git a/state/player.lua b/addons/tCrossBar/state/player.lua similarity index 100% rename from state/player.lua rename to addons/tCrossBar/state/player.lua diff --git a/state/skillchain.lua b/addons/tCrossBar/state/skillchain.lua similarity index 100% rename from state/skillchain.lua rename to addons/tCrossBar/state/skillchain.lua diff --git a/tCrossBar.lua b/addons/tCrossBar/tCrossBar.lua similarity index 100% rename from tCrossBar.lua rename to addons/tCrossBar/tCrossBar.lua diff --git a/texturecache.lua b/addons/tCrossBar/texturecache.lua similarity index 100% rename from texturecache.lua rename to addons/tCrossBar/texturecache.lua diff --git a/updaters/ability.lua b/addons/tCrossBar/updaters/ability.lua similarity index 100% rename from updaters/ability.lua rename to addons/tCrossBar/updaters/ability.lua diff --git a/updaters/command.lua b/addons/tCrossBar/updaters/command.lua similarity index 100% rename from updaters/command.lua rename to addons/tCrossBar/updaters/command.lua diff --git a/updaters/empty.lua b/addons/tCrossBar/updaters/empty.lua similarity index 100% rename from updaters/empty.lua rename to addons/tCrossBar/updaters/empty.lua diff --git a/updaters/item.lua b/addons/tCrossBar/updaters/item.lua similarity index 100% rename from updaters/item.lua rename to addons/tCrossBar/updaters/item.lua diff --git a/updaters/spell.lua b/addons/tCrossBar/updaters/spell.lua similarity index 100% rename from updaters/spell.lua rename to addons/tCrossBar/updaters/spell.lua diff --git a/updaters/trust.lua b/addons/tCrossBar/updaters/trust.lua similarity index 100% rename from updaters/trust.lua rename to addons/tCrossBar/updaters/trust.lua diff --git a/updaters/weaponskill.lua b/addons/tCrossBar/updaters/weaponskill.lua similarity index 100% rename from updaters/weaponskill.lua rename to addons/tCrossBar/updaters/weaponskill.lua From 5d94640f232a002118272f12dd8efcc28be6d1b6 Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 17 Nov 2023 08:57:35 -0500 Subject: [PATCH 24/25] Update readme --- readme.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 886b71a..fed8108 100644 --- a/readme.md +++ b/readme.md @@ -2,14 +2,10 @@ tCrossBar is an interface for binding and visualizing macros more easily. It uses visual elements to display as much information as possible, and is highly customizable in appearance. Many features are familiar from tHotBar, but the interface is based around controller usage. ## How To Install -Download the release zip for the Ashita client version you are currently using. Extract directly to your Ashita directory(the folder with ashita-cli.exe in it!). Everything should fall into place. If you feel you've messed that up, the required components are a plugin named 'tRenderer.dll' in your plugins folder, and a folder named 'tCrossBar' in your addons folder. If you need to build tRenderer yourself for a different client version, or simply don't trust foreign dlls, you can access the source at:
-https://github.com/ThornyFFXI/tRenderer - -## How To Load -You must load the plugin tRenderer with **/load trenderer** prior to loading the addon tCrossBar with **/addon load tCrossBar**. If you place these in your autoload file, you must ensure that both addons itself and trenderer are loaded prior to loading tCrossBar. +Download the release zip. Extract directly to your Ashita directory(the folder with ashita-cli.exe in it!). Everything should fall into place. tRenderer is no longer a part of tCrossBar. You can just load the addon now. ## Initial Setup -Upon initial login, you can type **/tc** to open a configuration window and configure the addon. Initial release only includes one layout, but future releases will provide more variations. After selecting a layout, go to the second tab and select a device mapping. At present, the dualsense mapping should be usable for most directinput controllers, the xbox mapping should be usable for most xinput controllers, and the switchpro mapping should only be used for a switch pro controller. I am happy to work one on one with anyone who has a controller that needs specialized mapping to expand the amount of available mappings. Once you've selected a mapping, you can use the third tab to tweak controls if you are not happy with the defaults. Finally, close the configuration window and you're ready to get started. +Upon initial login, you can type **/tc** to open a configuration window and configure the addon. You can use the scale slider to make the displays larger or smaller, but you must click apply each time you change it to preview the change. If trying to view single display, use the 'Allow Drag' button under the 'Single Layout' header to force it visible. After you are happy with your layouts, go to the second tab and select a device mapping. If you are on Ashita Interface 4.15 or lower, and using an xbox controller, be sure to choose the 'xbox_legacy' layout. If on interface 4.16 or higher, the plain xbox layout is fine. At present, the dualsense mapping should be usable for most directinput controllers, the xbox mapping should be usable for most xinput controllers, and the switchpro mapping should only be used for a switch pro controller. I am happy to work one on one with anyone who has a controller that needs specialized mapping to expand the amount of available mappings. Once you've selected a mapping, you can use the third tab to tweak controls if you are not happy with the defaults. Finally, close the configuration window and you're ready to get started. ## Making Macros To open the binding interface, simply hold both combo keys and both palette swap keys until a small imgui window pops up. The default configuration for any controller will have these as L1+L2+R1+R2. Afterward, you can press any macro combination to create a macro for it. The macro interface itself requires mouse and keyboard for full customization, but has basic controller support. To use it with a controller, you can navigate between Scope, Action Type, and Action with dpad up/down. You can change any of these with dpad left/right, and holding the button down will cycle more rapidly. Pressing your gamepad's confirm button will bind the macro, and your cancel button will return you to the binding interface to select a different macro. The top button in your 4 button grouping swaps tabs, but controller cannot modify any settings in the appearance tab directly. @@ -58,7 +54,7 @@ You can create this directory if it does not yet exist. All image bindings will **Ashita/config/addons/tCrossBar/resources/abilities/16.png**
and you would enter the binding as:
**abilities/16.png**
-You can also use the game's item resources directly, as tCrossBar will do when binding items. To do this, simply enter the binding as **ITEM:28540** using the item id. This can be found on FFXIAH.com or many other places. This example would show a warp ring. +You can also use the game's item resources directly, as tCrossBar will do when binding items. To do this, simply enter the binding as **ITEM:28540** using the item id. This can be found on FFXIAH.com or many other places. This example would show a warp ring. Status resources are supported similarly, using the notation STATUS:## with the status ID. ## Custom Layouts If you want to adjust the layouts, the same thing applies! Copy the included layout from:
@@ -68,4 +64,13 @@ to
prior to making changes. Even if the original remains, layouts in config will always take priority. Make sure to click 'refresh' in the config UI to detect new or altered layouts after editing files on disk. ## FAQ +### My settings reset when installing 2.0+. +This is expected. Settings, as configured through the '/tc' window, have been overhauled enough to be incompatible. You will need to configure them again. Note that bindings, your actual macros, will always remain compatible. + +### tCrossBar crashes with a random error after upgrading to 2.0+. +Make sure you don't have any customized layouts from pre-2.0 in Ashita/addons/tCrossBar/resources/layouts. Layouts from prior to 2.0 are not compatible with 2.0+. + +### My xbox controller isn't working right after upgrading to 2.0+. +Use the xbox_legacy controller profile until you've also upgraded to Ashita 4.16+. + #### More to come as common questions arise. \ No newline at end of file From 153e0397dfdf81f78ef35839c4ac4ccccb8e484d Mon Sep 17 00:00:00 2001 From: ThornyFFXI <10786796+ThornyFFXI@users.noreply.github.com> Date: Fri, 17 Nov 2023 08:58:26 -0500 Subject: [PATCH 25/25] add xbox_legacy layout --- .../resources/controllers/xbox_legacy.lua | 297 ++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 addons/tCrossBar/resources/controllers/xbox_legacy.lua diff --git a/addons/tCrossBar/resources/controllers/xbox_legacy.lua b/addons/tCrossBar/resources/controllers/xbox_legacy.lua new file mode 100644 index 0000000..e2fd1c4 --- /dev/null +++ b/addons/tCrossBar/resources/controllers/xbox_legacy.lua @@ -0,0 +1,297 @@ +local state = { + LStick = { + Blocking = false, + State = 'Idle', + Horizontal = 0, + Vertical = 0, + }, + RStick = { + Blocking = false, + State = 'Idle', + Horizontal = 0, + Vertical = 0, + }, +}; + +local function HandleStick(stickName, horizontal, vertical) + local stick = state[stickName]; + if (horizontal == nil) or (math.abs(horizontal) < 10837) then + horizontal = 0; + end + if (vertical == nil) or (math.abs(vertical) < 10837) then + vertical = 0; + end + stick.Horizontal = horizontal; + stick.Vertical = vertical; + + local currentState = 'Idle'; + if (vertical ~= 0) then + currentState = (vertical < 0) and 'Up' or 'Down'; + if (horizontal ~= 0) then + currentState = currentState .. ((horizontal > 0) and 'Right' or 'Left'); + end + elseif (horizontal ~= 0) then + currentState = ((horizontal > 0) and 'Right' or 'Left'); + end + + if (currentState == 'Idle') then + if (stick.State ~= 'Idle') then + gController:Trigger(stickName .. '_' .. stick.State, false); + local block = stick.Blocking; + stick.Blocking = false; + stick.State = currentState; + return block; + end + elseif (currentState ~= stick.State) then + if (stick.State ~= 'Idle') then + gController:Trigger(stickName .. '_' .. stick.State, false); + end + if (gController:Trigger(stickName .. '_' .. currentState, true)) then + stick.Blocking = true; + end + end + + stick.State = currentState; + return stick.Blocking; +end + +local function HandleButton(buttonName, buttonState) + local button = state[buttonName]; + if (button == nil) then + button = { Blocking = false, State = false }; + state[buttonName] = button; + end + + if (buttonState == false) then + if (button.State ~= false) then + gController:Trigger(buttonName, false); + local block = button.Blocking; + button.Blocking = false; + button.State = false; + return block; + end + elseif (button.State == false) then + if gController:Trigger(buttonName, true) then + button.Blocking = true; + end + end + + button.State = buttonState; + return button.Blocking; +end + +local layout = { + --Enable the input method used for this controller only. + DirectInput = false, + XInput = true, + + --List of all button names available in this layout. + --Buttons must be triggered in the event handlers with identical names. + ButtonMap = { + 'A', + 'B', + 'X', + 'Y', + 'L1', + 'R1', + 'L2', + 'R2', + 'L3', + 'R3', + 'Dpad_Up', + 'Dpad_Right', + 'Dpad_Down', + 'Dpad_Left', + 'Menu', + 'View', + 'LStick_Up', + 'LStick_UpRight', + 'LStick_Right', + 'LStick_DownRight', + 'LStick_Down', + 'LStick_DownLeft', + 'LStick_Left', + 'LStick_UpLeft', + 'RStick_Up', + 'RStick_UpRight', + 'RStick_Right', + 'RStick_DownRight', + 'RStick_Down', + 'RStick_DownLeft', + 'RStick_Left', + 'RStick_UpLeft', + }; + + --Default controls until user configures bindings. Must exact match strings in ButtonMap. + Defaults = { + Macro1 = 'Dpad_Up', + Macro2 = 'Dpad_Right', + Macro3 = 'Dpad_Down', + Macro4 = 'Dpad_Left', + Macro5 = 'Y', + Macro6 = 'B', + Macro7 = 'A', + Macro8 = 'X', + ComboLeft = 'L2', + ComboRight = 'R2', + PreviousPalette = 'L1', + NextPalette = 'R1', + BindingUp = 'Dpad_Up', + BindingDown = 'Dpad_Down', + BindingNext = 'Dpad_Right', + BindingPrevious = 'Dpad_Left', + BindingConfirm = 'A', + BindingCancel = 'B', + BindingTab = 'Y', + }; + + + --[[ + Key is the value used in event callback as 'button'. + Value is a function that handles the event for that button. Function should handle blocking + and forward the resolved button name to addon. + ]] + Buttons = { + --Dpad Up + [0] = function(e) + if HandleButton('Dpad_Up', e.state == 1) then + e.blocked = true; + end + end, + + --Dpad Down + [1] = function(e) + if HandleButton('Dpad_Down', e.state == 1) then + e.blocked = true; + end + end, + + --Dpad Left + [2] = function(e) + if HandleButton('Dpad_Left', e.state == 1) then + e.blocked = true; + end + end, + + --Dpad Right + [3] = function(e) + if HandleButton('Dpad_Right', e.state == 1) then + e.blocked = true; + end + end, + + --Menu + [4] = function(e) + if HandleButton('Menu', e.state == 1) then + e.blocked = true; + end + end, + + --View + [5] = function(e) + if HandleButton('View', e.state == 1) then + e.blocked = true; + end + end, + + --L3 + [6] = function(e) + if HandleButton('L3', e.state == 1) then + e.blocked = true; + end + end, + + --R3 + [7] = function(e) + if HandleButton('R3', e.state == 1) then + e.blocked = true; + end + end, + + --L1 + [8] = function(e) + if HandleButton('L1', e.state == 1) then + e.blocked = true; + end + end, + + --R1 + [9] = function(e) + if HandleButton('R1', e.state == 1) then + e.blocked = true; + end + end, + + --A + [12] = function(e) + if HandleButton('A', e.state == 1) then + e.blocked = true; + end + end, + + --B + [13] = function(e) + if HandleButton('B', e.state == 1) then + e.blocked = true; + end + end, + + --X + [14] = function(e) + if HandleButton('X', e.state == 1) then + e.blocked = true; + end + end, + + --Y + [15] = function(e) + if HandleButton('Y', e.state == 1) then + e.blocked = true; + end + end, + + --L2 + [32] = function(e) + if HandleButton('L2', e.state > 0) then + e.blocked = true; + end + end, + + --R2 + [33] = function(e) + if HandleButton('R2', e.state > 0) then + e.blocked = true; + end + end, + + --Horizontal L-Stick Movement + [34] = function(e) + if HandleStick('LStick', e.state, state.LStick.Vertical) then + e.blocked = true; + end + end, + + --Vertical L-Stick Movement + [35] = function(e) + if HandleStick('LStick', state.LStick.Horizontal, e.state) then + e.blocked = true; + end + end, + + --Horizontal R-Stick Movement + [36] = function(e) + if HandleStick('RStick', e.state, state.RStick.Vertical) then + e.blocked = true; + end + end, + + --Vertical R-Stick Movement + [37] = function(e) + if HandleStick('RStick', state.RStick.Horizontal, e.state) then + e.blocked = true; + end + end, + }, +}; + +return layout; \ No newline at end of file