From 15c7f6d92b82cf8aad43750fdb95f6d33abbd1da Mon Sep 17 00:00:00 2001 From: davidh Date: Sun, 17 Jul 2022 20:10:33 -0500 Subject: [PATCH] Update SpiffUI-Radials v8 --- .../media/lua/client/!SpiffUI-Rads.lua | 78 +++- .../ISUI/SpiffUI_ISFirearmRadialMenu.lua | 20 + .../lua/client/ISUI/SpiffUI_ISRadialMenu.lua | 23 +- .../client/Radials/SpiffUI-ARadialMenu.lua | 284 +++++++---- .../client/Radials/SpiffUI_AlarmRadial.lua | 194 ++++++++ .../client/Radials/SpiffUI_ChoiceRadial.lua | 50 ++ .../client/Radials/SpiffUI_CraftingRadial.lua | 26 +- .../client/Radials/SpiffUI_DrinkRadial.lua | 22 +- .../lua/client/Radials/SpiffUI_EatRadial.lua | 18 +- .../Radials/SpiffUI_EquipmentRadial.lua | 171 +++++-- .../client/Radials/SpiffUI_FirstAidCraft.lua | 11 +- .../Radials/SpiffUI_GameSpeedRadial.lua | 122 +++++ .../lua/client/Radials/SpiffUI_OneRadial.lua | 441 ++++++++++++++++-- .../client/Radials/SpiffUI_PillsRadial.lua | 13 +- .../client/Radials/SpiffUI_RepairRadial.lua | 15 +- .../Radials/SpiffUI_SmokeCraftRadial.lua | 22 +- .../client/Radials/SpiffUI_SmokeRadial.lua | 9 +- .../media/lua/client/SpiffUI-Radials.lua | 376 ++++++++++++++- .../media/lua/shared/Translate/EN/UI_EN.txt | 65 ++- .../media/lua/shared/Translate/RU/UI_RU.txt | 165 ++++--- .../media/spifcons/alarm/00.png | Bin 0 -> 1022 bytes .../media/spifcons/alarm/01.png | Bin 0 -> 829 bytes .../media/spifcons/alarm/02.png | Bin 0 -> 1021 bytes .../media/spifcons/alarm/03.png | Bin 0 -> 953 bytes .../media/spifcons/alarm/04.png | Bin 0 -> 998 bytes .../media/spifcons/alarm/05.png | Bin 0 -> 1018 bytes .../media/spifcons/alarm/06.png | Bin 0 -> 1053 bytes .../media/spifcons/alarm/07.png | Bin 0 -> 890 bytes .../media/spifcons/alarm/08.png | Bin 0 -> 1043 bytes .../media/spifcons/alarm/09.png | Bin 0 -> 1030 bytes .../media/spifcons/alarm/10.png | Bin 0 -> 834 bytes .../media/spifcons/alarm/11.png | Bin 0 -> 561 bytes .../media/spifcons/alarm/12.png | Bin 0 -> 817 bytes .../media/spifcons/alarm/13.png | Bin 0 -> 809 bytes .../media/spifcons/alarm/14.png | Bin 0 -> 741 bytes .../media/spifcons/alarm/15.png | Bin 0 -> 843 bytes .../media/spifcons/alarm/16.png | Bin 0 -> 872 bytes .../media/spifcons/alarm/17.png | Bin 0 -> 704 bytes .../media/spifcons/alarm/18.png | Bin 0 -> 910 bytes .../media/spifcons/alarm/19.png | Bin 0 -> 801 bytes .../media/spifcons/alarm/20.png | Bin 0 -> 1007 bytes .../media/spifcons/alarm/21.png | Bin 0 -> 809 bytes .../media/spifcons/alarm/22.png | Bin 0 -> 1005 bytes .../media/spifcons/alarm/23.png | Bin 0 -> 967 bytes .../media/spifcons/alarm/30.png | Bin 0 -> 1021 bytes .../media/spifcons/alarm/40.png | Bin 0 -> 1003 bytes .../media/spifcons/alarm/50.png | Bin 0 -> 1029 bytes .../{SpiffUI => spifcons/choice}/1-2.png | Bin .../{SpiffUI => spifcons/choice}/1-4.png | Bin .../media/{SpiffUI => spifcons/choice}/1.png | Bin .../{SpiffUI => spifcons/choice}/ALL.png | Bin .../{SpiffUI => spifcons/choice}/FULL.png | Bin .../media/spifcons/clock/0.png | Bin 0 -> 861 bytes .../media/spifcons/clock/1.png | Bin 0 -> 461 bytes .../media/spifcons/clock/2.png | Bin 0 -> 794 bytes .../media/spifcons/clock/3.png | Bin 0 -> 718 bytes .../media/spifcons/clock/4.png | Bin 0 -> 708 bytes .../media/spifcons/clock/5.png | Bin 0 -> 795 bytes .../media/spifcons/clock/6.png | Bin 0 -> 834 bytes .../media/spifcons/clock/7.png | Bin 0 -> 625 bytes .../media/spifcons/clock/8.png | Bin 0 -> 818 bytes .../media/spifcons/clock/9.png | Bin 0 -> 800 bytes .../media/spifcons/clock/C.png | Bin 0 -> 694 bytes .../media/spifcons/clock/F.png | Bin 0 -> 710 bytes .../media/spifcons/clock/dot.png | Bin 0 -> 309 bytes .../media/spifcons/clock/mid.png | Bin 0 -> 442 bytes .../media/spifcons/clock/slash.png | Bin 0 -> 841 bytes .../media/{SpiffUI => spifcons}/crafting.png | Bin .../media/{SpiffUI => spifcons}/inventory.png | Bin .../media/{SpiffUI => spifcons}/nextpage.png | Bin .../media/spifcons/place_item.png | Bin 0 -> 1669 bytes .../media/{SpiffUI => spifcons}/prevpage.png | Bin SpiffUI-Radials/workshop.txt | 6 + 73 files changed, 1794 insertions(+), 337 deletions(-) create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_AlarmRadial.lua create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_ChoiceRadial.lua create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_GameSpeedRadial.lua create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/00.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/01.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/02.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/03.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/04.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/05.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/06.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/07.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/08.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/09.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/10.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/11.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/12.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/13.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/14.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/15.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/16.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/17.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/18.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/19.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/20.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/21.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/22.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/23.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/30.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/40.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/50.png rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons/choice}/1-2.png (100%) rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons/choice}/1-4.png (100%) rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons/choice}/1.png (100%) rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons/choice}/ALL.png (100%) rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons/choice}/FULL.png (100%) create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/0.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/1.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/2.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/3.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/4.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/5.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/6.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/7.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/8.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/9.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/C.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/F.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/dot.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/mid.png create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/slash.png rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons}/crafting.png (100%) rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons}/inventory.png (100%) rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons}/nextpage.png (100%) create mode 100644 SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/place_item.png rename SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/{SpiffUI => spifcons}/prevpage.png (100%) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/!SpiffUI-Rads.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/!SpiffUI-Rads.lua index 6e1061a..a290efc 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/!SpiffUI-Rads.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/!SpiffUI-Rads.lua @@ -25,7 +25,7 @@ ------------------------------------------ -- Set the SpiffUI lib version -local SPIFFUI_VERSION = 2 --<<< DO NOT CHANGE UNLESS YOU KNOW WHAT YOU'RE DOING +local SPIFFUI_VERSION = 3 --<<< DO NOT CHANGE UNLESS YOU KNOW WHAT YOU'RE DOING if SpiffUI then if SpiffUI.Version >= SPIFFUI_VERSION then return -- Don't do anything else @@ -147,10 +147,6 @@ SpiffUI.preCheck = function() return nil end - if UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0) then - return nil - end - return player end @@ -158,6 +154,7 @@ local function keyDown(key) --print("Pressed: " .. getKeyName(key) .. " | " .. key) local player = SpiffUI.preCheck(key) if not player then return end + for _,bind in ipairs(SpiffUI.KeyBinds) do if key == getCore():getKey(bind.name) then if bind.Down then @@ -165,7 +162,9 @@ local function keyDown(key) if bind.qBlock and queue and #queue.queue > 0 then return end - bind.Down(player) + if bind.allowPause or not (UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0)) then + bind.Down(player) + end end break end @@ -183,7 +182,9 @@ local function keyHold(key) if bind.qBlock and queue and #queue.queue > 0 then return end - bind.Hold(player) + if bind.allowPause or not (UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0)) then + bind.Hold(player) + end end break end @@ -201,7 +202,9 @@ local function keyRelease(key) if bind.qBlock and queue and #queue.queue > 0 then return end - bind.Up(player) + if bind.allowPause or not (UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0)) then + bind.Up(player) + end end break end @@ -231,7 +234,7 @@ SpiffUI.onKeyDown = function(player) if SpiffUI.action.ready then -- Hide Radial Menu on Press if applicable if radialMenu:isReallyVisible() and getCore():getOptionRadialMenuKeyToggle() then - radialMenu:removeFromUIManager() + radialMenu:undisplay() setJoypadFocus(player:getPlayerNum(), nil) SpiffUI.action.wasVisible = false SpiffUI.action.ready = true @@ -266,6 +269,7 @@ end SpiffUI.equippedItem = { ["Inventory"] = true, ["Health"] = true, + ["QOLEquip"] = true, ["Craft"] = true, ["Movable"] = true, ["Search"] = true, @@ -280,6 +284,8 @@ function SpiffUI:updateEquippedItem() -- Redo the ISEquippedItem tree based on what we set local player = getPlayerData(0) local y = player.equipped.invBtn:getY() + -- Add support for the QOL Equipment mod's icon + SpiffUI.equippedItem["QOLEquip"] = (SETTINGS_QOLMT and SETTINGS_QOLMT.options and SETTINGS_QOLMT.options.useIcon) or false for i,v in pairs(SpiffUI.equippedItem) do if i == "Inventory" then player.equipped.invBtn:setVisible(v) @@ -292,6 +298,13 @@ function SpiffUI:updateEquippedItem() if v then y = player.equipped.healthBtn:getY() + player.equipped.heartIcon:getHeightOrig() + 5 end + -- Add support for the QOL Equipment mod's icon + elseif i == "QOLEquip" and player.equipped.equipButton then + player.equipped.equipButton:setVisible(v) + player.equipped.equipButton:setY(y) + if v then + y = player.equipped.equipButton:getY() + player.equipped.equipmentIconOFF:getHeightOrig() + 5 + end elseif i == "Craft" then player.equipped.craftingBtn:setVisible(v) player.equipped.craftingBtn:setY(y) @@ -374,6 +387,11 @@ function SpiffUI:ModOptions() local function apply(data) local options = data.settings.options -- Set options + if isDebugEnabled() then + SpiffUI.config.debug = options.debug + else + SpiffUI.config.debug = false + end end local SPIFFCONFIG = { @@ -393,6 +411,15 @@ function SpiffUI:ModOptions() mod_fullname = getText("UI_Name_SpiffUI") } + if isDebugEnabled() then + SPIFFCONFIG.options_data.debug = { + name = "Enable Debug", + default = false, + OnApplyMainMenu = apply, + OnApplyInGame = apply + } + end + local optionsInstance = ModOptions:getInstance(SPIFFCONFIG) ModOptions:loadFile() @@ -589,6 +616,39 @@ SpiffUI.settingsModal = function(w, h, text, key, callback) end end +-- Adapted from: https://www.rosettacode.org/wiki/Word_wrap#Lua +SpiffUI.textwrap = function(text, linewidth) + local function splittokens(s) + local res = {} + for w in s:gmatch("%S+") do + res[#res+1] = w + end + return res + end + + if not linewidth then + linewidth = 75 + end + + local spaceleft = linewidth + local res = {} + local line = {} + + for _, word in ipairs(splittokens(text)) do + if #word + 1 > spaceleft then + table.insert(res, table.concat(line, ' ')) + line = {word} + spaceleft = linewidth - #word + else + table.insert(line, word) + spaceleft = spaceleft - (#word + 1) + end + end + + table.insert(res, table.concat(line, ' ')) + return table.concat(res, '\n') +end + ------------------------------------------ Events.OnGameBoot.Add(SpiffUI.firstBoot) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISFirearmRadialMenu.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISFirearmRadialMenu.lua index 2aec24f..f5449ca 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISFirearmRadialMenu.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISFirearmRadialMenu.lua @@ -2,6 +2,10 @@ -- SpiffUI Radials ---- ISFirearmRadialMenu getWeapon hack ------------------------------------------ +SpiffUI = SpiffUI or {} + +-- Register our Radials +local spiff = SpiffUI:Register("radials") -- This lets us set call the radial without having the wepaon in-hand ---- You must have the weapon equipped in primary in order to do an action though @@ -12,4 +16,20 @@ function ISFirearmRadialMenu:getWeapon() return _ISFirearmRadialMenu_getWeapon(self) end return self.weapon +end + +-- I need to inject our previous page if applicable +local _ISFirearmRadialMenu_display = ISFirearmRadialMenu.display +function ISFirearmRadialMenu:display() + if self.prev then + -- set some expected things + -- there be a previous page + self.page = 1 + self.maxPage = 1 + self.rmenu = getPlayerRadialMenu(self.playerNum) + local o = spiff.prevCmd:new(self, getText("UI_radial_SpiffUI_Previous"), getTexture("media/spifcons/prevpage.png")) + o:fillMenu() + end + + _ISFirearmRadialMenu_display(self) end \ No newline at end of file diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISRadialMenu.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISRadialMenu.lua index 47cae57..a2b9c0f 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISRadialMenu.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/ISUI/SpiffUI_ISRadialMenu.lua @@ -5,7 +5,7 @@ SpiffUI = SpiffUI or {} --- Register our inventory +-- Register our module local spiff = SpiffUI:Register("radials") local SpiffUIRadialRecipeTooltip = ISRecipeTooltip:derive("SpiffUIRadialRecipeTooltip") @@ -179,7 +179,6 @@ function SpiffUIRadialRecipeTooltip:layoutContents(x, y) -- Hack for "Dismantle Digital Watch" and similar recipes. -- Recipe sources include both left-hand and right-hand versions of the same item. -- We only want to display one of them. - ---[[ for j=1,#itemDataList do local item = itemDataList[j] for k=#itemDataList,j+1,-1 do @@ -189,7 +188,6 @@ function SpiffUIRadialRecipeTooltip:layoutContents(x, y) end end end - --]] for i,itemData in ipairs(itemDataList) do local x2 = x1 @@ -286,6 +284,11 @@ function ISRadialMenu:getSliceTooltipMouse(x, y) return nil end +function ISRadialMenu:getSliceText(sliceIndex) + if sliceIndex < 1 or sliceIndex > #self.slices then return "" end + return self.slices[sliceIndex].text +end + function ISRadialMenu:showTooltip(item) if item and spiff.config.showTooltips then if self.prev == item and (self.toolRender:getIsVisible() @@ -400,7 +403,6 @@ end local _ISRadialMenu_undisplay = ISRadialMenu.undisplay function ISRadialMenu:undisplay() _ISRadialMenu_undisplay(self) - if self.toolRender and self.toolRender:getIsVisible() then self.toolRender:removeFromUIManager() self.toolRender:setVisible(false) @@ -413,11 +415,17 @@ function ISRadialMenu:undisplay() self.invRender:removeFromUIManager() self.invRender:setVisible(false) end + if self.activeMenu then + self.activeMenu:undisplay() + self.activeMenu = nil + end end function ISRadialMenu:RadialTick() if self:isReallyVisible() then - self:showTooltip(self:getSliceTooltipJoyPad()) + if JoypadState.players[self.playerNum+1] then + self:showTooltip(self:getSliceTooltipJoyPad()) + end end end @@ -425,11 +433,6 @@ local _ISRadialMenu_new = ISRadialMenu.new function ISRadialMenu:new(...) local o = _ISRadialMenu_new(self, ...) o:makeToolTip() - if JoypadState.players[o.playerNum+1] then - Events.OnRenderTick.Add(function() - o:RadialTick() - end) - end return o end diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI-ARadialMenu.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI-ARadialMenu.lua index ac244e6..5ff35e8 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI-ARadialMenu.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI-ARadialMenu.lua @@ -9,19 +9,18 @@ SpiffUI = SpiffUI or {} local spiff = SpiffUI:Register("radials") -- Base SpiffUI Radial Menu -local SpiffUIRadialMenu = ISBaseObject:derive("SpiffUIRadialMenu") +local SpiffUIRadialMenu = ISUIElement:derive("SpiffUIRadialMenu") -- Base Radial Command local SpiffUIRadialCommand = ISBaseObject:derive("SpiffUIRadialCommand") --- Radial Command for asking amount -local SpiffUIRadialCommandAsk = SpiffUIRadialCommand:derive("SpiffUIRadialCommandAsk") -- Radial Command for Next Page local SpiffUIRadialCommandNext = SpiffUIRadialCommand:derive("SpiffUIRadialCommandNext") -- Radial Command for Prev Page local SpiffUIRadialCommandPrev = SpiffUIRadialCommand:derive("SpiffUIRadialCommandPrev") +spiff.prevCmd = SpiffUIRadialCommandPrev -- need to be able to call this other places ------------------------------------------ function SpiffUIRadialCommand:new(menu, text, texture, tooltip) @@ -33,24 +32,27 @@ function SpiffUIRadialCommand:new(menu, text, texture, tooltip) o.tooltip = tooltip + -- -- Disable the text if the menu has a forced center image + -- if menu.centerImg and menu.cIndex then + -- text = "" + -- end o.text = text + o.texture = texture o.shouldAsk = 0 + o.askText = nil + o.amount = 0 return o end function SpiffUIRadialCommand:fillMenu() - if spiff.config.showTooltips and self.tooltip then - if self.forceText then - self.rmenu:addSlice(self.text, self.texture, self.invoke, self) - else - self.rmenu:addSlice("", self.texture, self.invoke, self) - end - else - self.rmenu:addSlice(self.text, self.texture, self.invoke, self) + if self.texture then + self.rmenu:addSlice("", self.texture, self.invoke, self) + else -- add a blank + self.rmenu:addSlice(nil, nil, nil) end end @@ -61,7 +63,8 @@ end function SpiffUIRadialCommand:invoke() if self.shouldAsk > 0 then self.menu.command = self - self.menu:askAmount() + local rad = spiff.subradial.ask:new(self.player, self.menu, self.texture, self.menu.askText) + rad:start() return end self:Action() @@ -72,19 +75,6 @@ spiff.radialcommand = SpiffUIRadialCommand ------------------------------------------ -function SpiffUIRadialCommandAsk:invoke() - self.menu.command.amount = self.amount - self.menu.command:Action() -end - -function SpiffUIRadialCommandAsk:new(menu, text, texture, amount) - local o = spiff.radialcommand.new(self, menu, text, texture, nil) - o.amount = amount - return o -end - ------------------------------------------- - function SpiffUIRadialCommandNext:invoke() self.menu.page = self.menu.page + 1 self.menu:show() @@ -97,11 +87,19 @@ end ------------------------------------------ function SpiffUIRadialCommandPrev:invoke() - self.menu.page = self.menu.page - 1 - if self.menu.pageReset then - self.menu.maxPage = self.menu.page + if self.menu.page > 1 then + local p = self.menu.page + self.menu.page = self.menu.page - 1 + if self.menu.pageReset then + self.menu.maxPage = self.menu.page + self.menu.btmText[p] = nil + self.menu.centerImg[p] = nil + self.menu.cImgChange[p] = nil + end + self.menu:show() + else + self.menu.prev:show() end - self.menu:show() end function SpiffUIRadialCommandPrev:new(menu, text, texture) @@ -109,93 +107,66 @@ function SpiffUIRadialCommandPrev:new(menu, text, texture) end ------------------------------------------ - -function SpiffUIRadialMenu:build() - print("Base SpiffUIRadialMenu build -- Override me!") +function SpiffUIRadialMenu:start() + print("Base SpiffUIRadialMenu start -- Override me!") end -function SpiffUIRadialMenu:askAmount() - self.rmenu:clear() - --table.wipe(self.commands) - - local askCommands = {} - - if self.command.shouldAsk == 1 then -- Consume: 1 (all), 1/2, 1/4, Dieter - table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[4], 1)) - table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[2], 0.5)) - table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[3], 0.25)) - table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[5], -1)) - elseif self.command.shouldAsk == 2 then -- Crafting, all or 1 - table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.recipe:getName(), spiff.icons[4], true)) - table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.recipe:getName(), spiff.icons[1], false)) - end - - for _,command in ipairs(askCommands) do - local count = #self.rmenu.slices - command:fillMenu() - if count == #self.rmenu.slices then - self.rmenu:addSlice(nil, nil, nil) - end - end - - self.rmenu:center() - self.rmenu:addToUIManager() - self.rmenu:setVisible(true) - SpiffUI.action.wasVisible = true - if JoypadState.players[self.playerNum+1] then - self.rmenu:setHideWhenButtonReleased(Joypad.DPadUp) - setJoypadFocus(self.playerNum, self.rmenu) - self.player:setJoypadIgnoreAimUntilCentered(true) +function SpiffUIRadialMenu:display() + if self.start then + self:start() + self.page = 1 + self:show() end end -function SpiffUIRadialMenu:display() - self:build() - self.page = 1 - - self:show() +function SpiffUIRadialMenu:prepareCmds() + if not self.commands[self.page] then + self.commands[self.page] = {} + else + table.wipe(self.commands[self.page]) + end end function SpiffUIRadialMenu:show() self.rmenu:clear() - - local hasCommands = false + local count = 0 + local min = 3 -- Add the next page if self.maxPage > 1 and self.page < self.maxPage then - local nextp = SpiffUIRadialCommandNext:new(self, "Next", self.nextTex) - local count = #self.rmenu.slices + local nextp = SpiffUIRadialCommandNext:new(self, getText("UI_radial_SpiffUI_Next"), self.nextTex) nextp:fillMenu() - if count == #self.rmenu.slices then - self.rmenu:addSlice(nil, nil, nil) - end end if self.commands[self.page] then for _,command in ipairs(self.commands[self.page]) do - local count = #self.rmenu.slices command:fillMenu() - if count == #self.rmenu.slices then - self.rmenu:addSlice(nil, nil, nil) - end - hasCommands = true + count = count + 1 end end - -- Add the previous page - if self.maxPage > 1 and self.page > 1 then - local nextp = SpiffUIRadialCommandPrev:new(self, "Previous", self.prevTex) - local count = #self.rmenu.slices - nextp:fillMenu() - if count == #self.rmenu.slices then + -- rule of 3 + if count < min then + for i=count,min-1 do self.rmenu:addSlice(nil, nil, nil) end end - if hasCommands then + -- Add the previous page + if (self.maxPage > 1 and self.page > 1) or (self.page == 1 and self.prev) then + local nextp = SpiffUIRadialCommandPrev:new(self, getText("UI_radial_SpiffUI_Previous"), self.prevTex) + nextp:fillMenu() + end + + if count > 0 then self.rmenu:center() + self:center() self.rmenu:addToUIManager() + self:addToUIManager() self.rmenu:setVisible(true) + self:setVisible(true) + self:bringToTop() + self.rmenu.activeMenu = self SpiffUI.action.wasVisible = true if JoypadState.players[self.playerNum+1] then self.rmenu:setHideWhenButtonReleased(Joypad.DPadUp) @@ -208,9 +179,117 @@ function SpiffUIRadialMenu:show() end end +function SpiffUIRadialMenu:center() + local x = getPlayerScreenLeft(self.playerNum) + local y = getPlayerScreenTop(self.playerNum) + local w = getPlayerScreenWidth(self.playerNum) + local h = getPlayerScreenHeight(self.playerNum) + + x = x + w / 2 + y = y + h / 2 + + if self.cmdText then + local cH = getTextManager():getFontHeight(UIFont.Medium) + local cW = getTextManager():MeasureStringX(UIFont.Medium, self.cmdText) + + self.cTX = (x - cW / 2) + self.cTY = (y - cH / 2) + self.bTY = (y - cH / 2) + (cH * 2) + end + + if self.btmText[self.page] then + local bh = getTextManager():getFontHeight(UIFont.Medium) + local bw = getTextManager():MeasureStringX(UIFont.Medium, self.btmText[self.page]) + + self.bTX = (x - bw / 2) + self.bTY = (y - bh / 2) + (bh * 2) + end + + self.imgH = self.rmenu.innerRadius/2 + self.imgW = self.imgH + + self.imgX = (x - self.imgW / 2) + self.imgY = (y - self.imgH / 2) + + self.cenX = x + self.cenY = y +end + +function SpiffUIRadialMenu:render() + local index = -1 + -- This is a better way to handle this. :D + if self.cIndex then -- force show + index = -1 + elseif JoypadState.players[self.playerNum+1] then + index = self.rmenu.javaObject:getSliceIndexFromJoypad(self.rmenu.joyfocus.id) + else + index = self.rmenu.javaObject:getSliceIndexFromMouse(self.rmenu:getMouseX(), self.rmenu:getMouseY()) + end + + self.cmdText = nil + self.cmdImg = nil + + if index > -1 then + if self.rmenu:getSliceCommand(index+1) and self.rmenu:getSliceCommand(index+1)[2] then + self.cmdText = SpiffUI.textwrap(self.rmenu:getSliceCommand(index+1)[2].text,20) + self.cmdImg = self.rmenu:getSliceCommand(index+1)[2].texture + end + end + + self:center() + + if index == -1 then + if self.centerImg[self.page] then + self:drawTextureScaledAspect(self.centerImg[self.page], self.imgX, self.imgY, self.imgW, self.imgH, 1, 1, 1, 1) + end + if self.btmText[self.page] then + self:drawText(self.btmText[self.page], self.bTX, self.bTY, 1,1,1,1, UIFont.Medium) + end + else + if self.cImgChange[self.page] then + if self.cmdImg then + self:drawTextureScaledAspect(self.cmdImg, self.imgX, self.imgY, self.imgW, self.imgH, 1, 1, 1, 1) + else + if self.centerImg[self.page] then + self:drawTextureScaledAspect(self.centerImg[self.page], self.imgX, self.imgY, self.imgW, self.imgH, 1, 1, 1, 1) + end + end + else + if self.centerImg[self.page] then + self:drawTextureScaledAspect(self.centerImg[self.page], self.imgX, self.imgY, self.imgW, self.imgH, 1, 1, 1, 1) + end + end + + if self.cmdText then + if self.centerImg[self.page] or self.cImgChange[self.page] then + -- Draw cmdText at bottom + self:drawText(self.cmdText, self.cTX, self.bTY, 1,1,1,1, UIFont.Medium) + else + if self.btmText[self.page] then + -- Draw btmText + self:drawText(self.btmText[self.page], self.bTX, self.bTY, 1,1,1,1, UIFont.Medium) + end + -- Draw cmdText at middle + self:drawText(self.cmdText, self.cTX, self.cTY, 1,1,1,1, UIFont.Medium) + end + else + if self.btmText[self.page] then + self:drawText(self.btmText[self.page], self.bTX, self.bTY, 1,1,1,1, UIFont.Medium) + end + end + + if JoypadState.players[self.playerNum+1] then + self.rmenu:showTooltip(self.rmenu:getSliceTooltipJoyPad()) + end + end +end + +function SpiffUIRadialMenu:undisplay() + self:removeFromUIManager() +end + function SpiffUIRadialMenu:AddCommand(command) if self.cCount == self.cMax then - --print("Adding New Page: " .. self.cCount) self.cCount = 0 self.page = self.page + 1 self.maxPage = self.page @@ -221,11 +300,10 @@ function SpiffUIRadialMenu:AddCommand(command) end table.insert(self.commands[self.page], command) self.cCount = self.cCount + 1 - --print("Count: " .. self.cCount) end -function SpiffUIRadialMenu:new(player) - local o = ISBaseObject.new(self) +function SpiffUIRadialMenu:new(player, prev, centerImg, btmText) + local o = ISUIElement.new(self, 0,0,0,0) o.player = player o.playerNum = player:getPlayerNum() @@ -238,8 +316,26 @@ function SpiffUIRadialMenu:new(player) o.page = 1 o.maxPage = 1 - o.nextTex = getTexture("media/SpiffUI/nextpage.png") - o.prevTex = getTexture("media/SpiffUI/prevpage.png") + o.prev = prev or nil + + o.nextTex = getTexture("media/spifcons/nextpage.png") + o.prevTex = getTexture("media/spifcons/prevpage.png") + + o.centerImg = { + [o.page] = centerImg + } + o.btmText = { + [o.page] = btmText + } + + o.cmdText = nil + o.cmdImg = nil + + --o.cIndex = ((o.centerImg[o.page] ~= nil) or false) + o.cImgChange = {} + + o:initialise() + o.background = false return o end diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_AlarmRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_AlarmRadial.lua new file mode 100644 index 0000000..6f0e6fb --- /dev/null +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_AlarmRadial.lua @@ -0,0 +1,194 @@ +------------------------------------------ +-- SpiffUI Alarm Actions +---- Radial Menu for setting the alarm +------------------------------------------ + +SpiffUI = SpiffUI or {} + +-- Register our Radials +local spiff = SpiffUI:Register("radials") + +local SpiffUIAlarmRadial = spiff.radialmenu:derive("SpiffUIAlarmRadial") +if not spiff.subradial then spiff.subradial = {} end +spiff.subradial.alarm = SpiffUIAlarmRadial + +local SpiffUIAlarmRadialCommand = spiff.radialcommand:derive("SpiffUIAlarmRadialCommand") + +function SpiffUIAlarmRadialCommand:Action() + if self.mode == 1 then + self.alarm:setAlarmSet(false) + self.alarm:setHour(self.menu.hour) + self.alarm:setMinute(self.menu.minute) + self.alarm:syncAlarmClock() + elseif self.mode == 2 then + self.alarm:setAlarmSet(true) + self.alarm:setHour(self.menu.hour) + self.alarm:setMinute(self.menu.minute) + self.alarm:syncAlarmClock() + elseif self.mode == 3 then + self.menu.oldPrev = self.menu.prev + self.menu.prev = nil + self.menu:hourRadial() + elseif self.mode == 4 then + self.alarm:syncStopRinging() + end +end + +function SpiffUIAlarmRadialCommand:new(menu, mode, alarm) + local tex + local label = "" + if mode == 1 then + tex = menu.icons["silence"] + label = getText("UI_alarm_SpiffUI_Silence") + elseif mode == 2 then + tex = menu.icons["enable"] + label = getText("UI_alarm_SpiffUI_Enable") + elseif mode == 3 then + tex = alarm:getTexture() + label = getText("UI_alarm_SpiffUI_Reset") + elseif mode == 4 then + tex = menu.icons["stop"] + label = getText("ContextMenu_StopAlarm") + end + local o = spiff.radialcommand.new(self, menu, label, tex, nil) + o.mode = mode + o.alarm = alarm + return o +end + +local SpiffUIAlarmRadialCommandHour = spiff.radialcommand:derive("SpiffUIAlarmRadialCommandHour") + +function SpiffUIAlarmRadialCommandHour:Action() + self.menu.hour = self.hour + self.menu:minuteRadial() +end + +function SpiffUIAlarmRadialCommandHour:new(menu, hour) + local o = spiff.radialcommand.new(self, menu, "", menu.icons[hour], nil) + o.hour = hour + return o +end + +local SpiffUIAlarmRadialCommandMinute = spiff.radialcommand:derive("SpiffUIAlarmRadialCommandMinute") + +function SpiffUIAlarmRadialCommandMinute:Action() + self.menu.minute = self.minute + self.menu.alarm:setHour(self.menu.hour) + self.menu.alarm:setMinute(self.menu.minute) + self.menu.alarm:syncAlarmClock() + self.menu.prev = self.menu.oldPrev + self.menu.oldPrev = nil + self.menu:start() +end + +function SpiffUIAlarmRadialCommandMinute:new(menu, minute) + local o = spiff.radialcommand.new(self, menu, "", menu.icons[minute], nil) + o.minute = minute + return o +end + +------------------------------------------ + +function SpiffUIAlarmRadial:start() + self:prepareCmds() + + local hText = "" + if self.hour == -1 then + hText = getText("UI_alarm_SpiffUI_HH") + else + hText = string.format("%02d", self.hour) + end + + local mText = "" + if self.minute == -1 then + mText = getText("UI_alarm_SpiffUI_MM") + else + mText = string.format("%02d", self.minute) + end + + self.btmText[self.page] = getText("UI_alarm_SpiffUI_CurrentF", hText, mText) + self.btmText[self.page] = self.btmText[self.page]:gsub('\\n', '\n') + + if self.alarm:isRinging() then + self:AddCommand(SpiffUIAlarmRadialCommand:new(self,4,self.alarm)) + end + self:AddCommand(SpiffUIAlarmRadialCommand:new(self,3,self.alarm)) + self:AddCommand(SpiffUIAlarmRadialCommand:new(self,1,self.alarm)) + self:AddCommand(SpiffUIAlarmRadialCommand:new(self,2,self.alarm)) + + self:show() +end + +function SpiffUIAlarmRadial:hourRadial() + self:prepareCmds() + + self.btmText[self.page] = getText("UI_alarm_SpiffUI_SetHourF", getText("UI_alarm_SpiffUI_HH"), getText("UI_alarm_SpiffUI_MM")) + self.btmText[self.page] = self.btmText[self.page]:gsub('\\n', '\n') + + for i = 0, 23 do + table.insert(self.commands[self.page], SpiffUIAlarmRadialCommandHour:new(self, i)) + end + + self:show() +end + +function SpiffUIAlarmRadial:minuteRadial() + self:prepareCmds() + + local hText = "" + if self.hour == -1 then + hText = getText("UI_alarm_SpiffUI_HH") + else + hText = string.format("%02d", self.hour) + end + + self.btmText[self.page] = getText("UI_alarm_SpiffUI_SetMinuteF", hText, getText("UI_alarm_SpiffUI_MM")) + self.btmText[self.page] = self.btmText[self.page]:gsub('\\n', '\n') + + for i = 0, 5 do + table.insert(self.commands[self.page], SpiffUIAlarmRadialCommandMinute:new(self, i*10)) + end + + self:show() +end + +function SpiffUIAlarmRadial:initialise() + if self.init then + -- This is called by "onSetAlarm" + -- We'll just override this to show the radial instead + self:display() + else + ISUIElement.initialise(self) + self.init = true + end +end + +function SpiffUIAlarmRadial:new(player, alarm, prev) + local o = spiff.radialmenu.new(self, player, prev) + o.alarm = alarm + o.hour = o.alarm:getHour() + o.minute = o.alarm:getMinute() + + -- Alarm icons + o.icons = { + [30] = getTexture("media/spifcons/alarm/30.png"), + [40] = getTexture("media/spifcons/alarm/40.png"), + [50] = getTexture("media/spifcons/alarm/50.png"), + ["silence"] = getTexture("media/ui/ClockAssets/ClockAlarmLargeSet.png"), + ["enable"] = getTexture("media/ui/ClockAssets/ClockAlarmLargeSound.png"), + ["stop"] = getTexture("media/ui/emotes/no.png"), + } + -- Do the rest + for i=0,23 do + o.icons[i] = getTexture("media/spifcons/alarm/" .. string.format("%02d", i) .. ".png") + end + + return o +end + +-- later when i get the inventory to dismiss/reappear for controllers. i've delayed release enough for now +-- local _ISAlarmClockDialog_new = ISAlarmClockDialog.new +-- function ISAlarmClockDialog:new(x, y, width, height, player, alarm) +-- --return _ISAlarmClockDialog_new(self, x, y, width, height, player, alarm) +-- return SpiffUIAlarmRadial:new(getSpecificPlayer(player), alarm) +-- end \ No newline at end of file diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_ChoiceRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_ChoiceRadial.lua new file mode 100644 index 0000000..474f06c --- /dev/null +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_ChoiceRadial.lua @@ -0,0 +1,50 @@ +------------------------------------------ +-- SpiffUI Choice Actions +---- Radial Menu for making choices (ie how many) +------------------------------------------ +SpiffUI = SpiffUI or {} + +-- Register our Radials +local spiff = SpiffUI:Register("radials") + +local SpiffUIAskRadial = spiff.radialmenu:derive("SpiffUIAskRadial") +if not spiff.subradial then spiff.subradial = {} end +spiff.subradial.ask = SpiffUIAskRadial + +------------------------------------------ +-- Radial Command for asking amount +local SpiffUIRadialCommandAsk = spiff.radialcommand:derive("SpiffUIRadialCommandAsk") + +function SpiffUIRadialCommandAsk:invoke() + self.menu.prev.command.amount = self.amount + self.menu.prev.command:Action() +end + +function SpiffUIRadialCommandAsk:new(menu, text, texture, amount) + local o = spiff.radialcommand.new(self, menu, text, texture, nil) + o.amount = amount + return o +end + +------------------------------------------ + +function SpiffUIAskRadial:start() + self:prepareCmds() + + if self.prev.command.shouldAsk == 1 then -- Consume: 1 (all), 1/2, 1/4, Dieter + table.insert(self.commands[self.page], SpiffUIRadialCommandAsk:new(self, getText("UI_amount_SpiffUI_One"), getTexture("media/spifcons/choice/ALL.png"), 1)) + table.insert(self.commands[self.page], SpiffUIRadialCommandAsk:new(self, getText("UI_amount_SpiffUI_Half"), getTexture("media/spifcons/choice/1-2.png"), 0.5)) + table.insert(self.commands[self.page], SpiffUIRadialCommandAsk:new(self, getText("UI_amount_SpiffUI_Quarter"), getTexture("media/spifcons/choice/1-4.png"), 0.25)) + table.insert(self.commands[self.page], SpiffUIRadialCommandAsk:new(self, getText("UI_amount_SpiffUI_Full"), getTexture("media/spifcons/choice/FULL.png"), -1)) + elseif self.prev.command.shouldAsk == 2 then -- Crafting, all or 1 + table.insert(self.commands[self.page], SpiffUIRadialCommandAsk:new(self, getText("UI_amount_SpiffUI_All"), getTexture("media/spifcons/choice/ALL.png"), true)) + table.insert(self.commands[self.page], SpiffUIRadialCommandAsk:new(self, getText("UI_amount_SpiffUI_One"), getTexture("media/spifcons/choice/1.png"), false)) + end + + self:show() +end + +function SpiffUIAskRadial:new(player, prev, centerImg, btmText) + local o = spiff.radialmenu.new(self, player, prev, centerImg, btmText) + return o +end \ No newline at end of file diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_CraftingRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_CraftingRadial.lua index 2d0bb2c..22a65fb 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_CraftingRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_CraftingRadial.lua @@ -21,7 +21,16 @@ function SpiffUICraftingRadialCommand:Action() end function SpiffUICraftingRadialCommand:new(menu, recipe) - local texture = InventoryItemFactory.CreateItem(recipe.recipe:getResult():getFullType()):getTexture() + if SpiffUI.config.debug then + print("Item: " .. recipe.item:getFullType() .. " | Recipe: " .. recipe.recipe:getName() .. " | Result: " .. recipe.recipe:getResult():getFullType()) + end + local texture + local itex = InventoryItemFactory.CreateItem(recipe.recipe:getResult():getFullType()) + if itex then + texture = itex:getTexture() + else + texture = recipe.item:getTexture() + end local tooltip = { recipe = recipe.recipe, @@ -50,7 +59,7 @@ local function getRecipes(packs, player) for p = 0, packs:size() - 1 do local pack = packs:get(p) local ps = pack:getAllEval(function(item) - return instanceof(item, "InventoryItem") + return instanceof(item, "InventoryItem") and not instanceof(item, "Moveable") end) if ps and ps:size() > 0 then for i = 0, ps:size() - 1 do @@ -115,7 +124,7 @@ end ------------------------------------------ -function SpiffUICraftingRadial:build() +function SpiffUICraftingRadial:start() local bags = ISInventoryPaneContextMenu.getContainers(self.player) local recipes = getRecipes(bags, self.player) @@ -123,15 +132,20 @@ function SpiffUICraftingRadial:build() for i,j in pairs(recipes) do self:AddCommand(SpiffUICraftingRadialCommand:new(self, j)) hasRecipes = true - end + self.centerImg[self.page] = getTexture("media/spifcons/crafting.png") + self.btmText[self.page] = getText("UI_SpiffUI_Radial_Crafting") + self.cImgChange[self.page] = true + end if not hasRecipes then self.player:Say(getText("UI_character_SpiffUI_noCraft")) end end -function SpiffUICraftingRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUICraftingRadial:new(player, prev) + local o = spiff.radialmenu.new(self, player, prev) + o.askText = getText("UI_amount_SpiffUI_CraftHowMany") + return o end local function SpiffUICraftDown(player) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_DrinkRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_DrinkRadial.lua index afc1a44..790c562 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_DrinkRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_DrinkRadial.lua @@ -70,9 +70,7 @@ local function doDrink(item, player, amount) end function SpiffUIDrinkRadialCommand:Action() - doDrink(self.item, self.player, self.amount) - --ISInventoryPaneContextMenu.eatItem(self.item, self.amount, self.playerNum) - + doDrink(self.item, self.player, self.amount) -- Return from whence it came... if self.item:getContainer() ~= self.player:getInventory() then ISTimedActionQueue.add(ISInventoryTransferAction:new(self.player, self.item, self.player:getInventory(), self.item:getContainer())) @@ -97,8 +95,11 @@ local function getItems(packs, player) local items = {} for p = 0, packs:size() - 1 do local pack = packs:get(p) - local ps = pack:getAllEval(function(item) - return not player:isKnownPoison(item) and (item:getCustomMenuOption() and item:getCustomMenuOption() == "Drink") or item:isWaterSource() + local ps = pack:getAllEval(function(item) + -- the only real difference between food and drinks is if there is a custom menu option/animation it seems. + return item:isWaterSource() + or (instanceof(item, "Food") and not player:isKnownPoison(item) and not item:getScriptItem():isCantEat()) + and (item:getThirstChange() < 0 and item:getCustomMenuOption() == getText("ContextMenu_Drink")) end) if ps and ps:size() > 0 then for i = 0, ps:size() - 1 do @@ -143,7 +144,7 @@ end ------------------------------------------ -function SpiffUIDrinkRadial:build() +function SpiffUIDrinkRadial:start() local packs = ISInventoryPaneContextMenu.getContainers(self.player) local drinks = getItems(packs, self.player) @@ -165,6 +166,9 @@ function SpiffUIDrinkRadial:build() self:AddCommand(SpiffUIDrinkRadialCommand:new(self, j)) hasCmd = true end + self.centerImg[self.page] = InventoryItemFactory.CreateItem("Base.WaterBottleFull"):getTexture() + self.btmText[self.page] = getText("UI_SpiffUI_Radial_Drink") + self.cImgChange[self.page] = true end if not hasCmd then @@ -172,8 +176,10 @@ function SpiffUIDrinkRadial:build() end end -function SpiffUIDrinkRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUIDrinkRadial:new(player, prev) + local o = spiff.radialmenu.new(self, player, prev) + o.askText = getText("UI_amount_SpiffUI_DrinkHowMuch") + return o end local function quickDrink(player) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EatRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EatRadial.lua index c269904..ec4d163 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EatRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EatRadial.lua @@ -74,12 +74,13 @@ function SpiffUIEatRadialCommand:new(menu, item) return o end -local function getItems(packs) +local function getItems(packs, player) local items = {} for p = 0, packs:size() - 1 do local pack = packs:get(p) local ps = pack:getAllEval(function(item) - return instanceof(item, "Food") and item:getHungChange() < 0 and not item:getScriptItem():isCantEat() and not item:getCustomMenuOption() + return (instanceof(item, "Food") and not player:isKnownPoison(item) and not item:getScriptItem():isCantEat()) + and item:getHungChange() < 0 and not item:getCustomMenuOption() end) if ps and ps:size() > 0 then for i = 0, ps:size() - 1 do @@ -111,9 +112,9 @@ end ------------------------------------------ -function SpiffUIEatRadial:build() +function SpiffUIEatRadial:start() local packs = ISInventoryPaneContextMenu.getContainers(self.player) - local food = getItems(packs) + local food = getItems(packs, self.player) if not food then self.player:Say(getText("UI_character_SpiffUI_noFood")) @@ -123,11 +124,16 @@ function SpiffUIEatRadial:build() -- Build for _,j in ipairs(food) do self:AddCommand(SpiffUIEatRadialCommand:new(self, j)) + self.centerImg[self.page] = InventoryItemFactory.CreateItem("Base.Apple"):getTexture() + self.btmText[self.page] = getText("UI_SpiffUI_Radial_Eat") + self.cImgChange[self.page] = true end end -function SpiffUIEatRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUIEatRadial:new(player, prev) + local o = spiff.radialmenu.new(self, player, prev) + o.askText = getText("UI_amount_SpiffUI_EatHowMuch") + return o end local function quickEat(player) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EquipmentRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EquipmentRadial.lua index db286aa..ae4b113 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EquipmentRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_EquipmentRadial.lua @@ -63,8 +63,15 @@ function SpiffUIEquipmentItemRadialCommand:Action() end local frm = ISFirearmRadialMenu:new(self.player) frm.weapon = self.item.item + frm.prev = self.menu frm:fillMenu() frm:display() + elseif self.mode == 8 then -- Place + ISInventoryPaneContextMenu.onPlaceItemOnGround({self.item.item}, self.player) + elseif self.mode == 9 then + spiff.subradial.alarm:new(self.player, self.item.item, self.menu):display() + elseif self.mode == 10 then + self.item.item:stopRinging() else self.player:Say("OOPS! I don't know how to do that. That's not supposed to happen!") end @@ -156,6 +163,7 @@ local clothesSort = { ["FannyPackBack"] = 41, ["FannyPackFront"] = 42, ["Hands"] = 43, + ["Watch"] = 44, ["Left_MiddleFinger"] = 144, ["Left_RingFinger"] = 145, ["LeftWrist"] = 146, @@ -184,6 +192,14 @@ local clothesFilter = { ["ZedDmg"] = true } +local isWatch = function(item) + if instanceof(item, "AlarmClock") or instanceof(item, "AlarmClockClothing") then + return "Watch" + else + return nil + end +end + local function getItems(packs, player) local items = nil @@ -192,7 +208,7 @@ local function getItems(packs, player) for i=0, clothes:size() - 1 do if not items then items = {} end local item = clothes:get(i):getItem() - if item and not clothesFilter[item:getBodyLocation()] then + if item and not clothesFilter[(isWatch(item) or item:getBodyLocation())] then table.insert(items, item) end end @@ -211,9 +227,12 @@ local function getItems(packs, player) if items then -- order our clothes from head to toe + ---- NEW: We have to handle watches a bit funny due to how this works + ------ Mods may add bracelets or other items that go on the wrist, and we don't want those + table.sort(items, function(a,b) - if not clothesSort[a:getBodyLocation()] or not clothesSort[b:getBodyLocation()] then return false end - return clothesSort[a:getBodyLocation()] < clothesSort[b:getBodyLocation()] + if not clothesSort[isWatch(a) or a:getBodyLocation()] or not clothesSort[isWatch(b) or b:getBodyLocation()] then return false end + return clothesSort[isWatch(a) or a:getBodyLocation()] < clothesSort[isWatch(b) or b:getBodyLocation()] end) end return items @@ -301,10 +320,6 @@ local function fixerStuff(item, fixing, fixer, player) end end - if unavailable then - tooltip.description = tooltip.description .. " " .. "**FUCK YOU, ASSHOLE**" - end - return { fixing = fixing, fixer = fixer, @@ -328,9 +343,15 @@ function SpiffUIEquipmentRadial:itemOptions(item) if not item then return end - -- Get Hotbar + -- Get Hotbar & loot local hotbar = getPlayerHotbar(self.player:getPlayerNum()) - + local loot = getPlayerLoot(self.playerNum) + + self.btmText[self.page] = SpiffUI.textwrap(item:getName(), 20) -- some names are just too long :/ + + --self.btmText[self.page] = nil + self.centerImg[self.page] = item:getTexture() + -- Add "Inspect" if item:getCategory() == "Clothing" and item:getCoveredParts():size() > 0 then local stuff = { @@ -347,7 +368,7 @@ function SpiffUIEquipmentRadial:itemOptions(item) local stuff = { item = item, label = getText("ContextMenu_Unequip"), - texture = spiff.icons["unequip"], + texture = getTexture("media/ui/Icon_InventoryBasic.png"), tooltip = item, inHotbar = hotbar:isInHotbar(item) and not self.player:isEquipped(item), -- Trigger a remove from hotbar if item is not equipped mode = 1 @@ -355,17 +376,30 @@ function SpiffUIEquipmentRadial:itemOptions(item) table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) end - local loot = getPlayerLoot(self.playerNum) - if loot.inventory:getType() ~= "floor" then - local stuff = { - item = item, - label = getText("UI_radial_SpiffUI_Transfer") .. loot.title, - texture = ContainerButtonIcons[loot.inventory:getType()], - inv = loot.inventory, - tooltip = item, - mode = 2 - } - table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) + -- Transfer + if spiff.config.equipShowTransfer then + if loot.inventory:getType() ~= "floor" then + local tex = nil + if instanceof(loot.inventory:getContainingItem(), "InventoryContainer") then + tex = loot.inventory:getContainingItem():getTex() + else + tex = ContainerButtonIcons[loot.inventory:getType()] + end + + if not tex then + tex = getTexture("media/ui/Container_Shelf.png") + end + + local stuff = { + item = item, + label = getText("UI_radial_SpiffUI_Transfer") .. loot.title, + texture = tex, + inv = loot.inventory, + tooltip = item, + mode = 2 + } + table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) + end end -- Add "Drop" @@ -373,13 +407,58 @@ function SpiffUIEquipmentRadial:itemOptions(item) local stuff = { item = item, label = getText("ContextMenu_Drop"), - texture = spiff.icons["drop"], + texture = getTexture("media/ui/Container_Floor.png"), tooltip = item, mode = 3 } table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) end + -- Add "Place" + if spiff.config.equipShowPlace then + -- adapted from ISInventoryPaneContextMenu + local id3 = true + if not item:getWorldStaticItem() and not instanceof(item, "HandWeapon") and not instanceof(item, "Clothing") or item:getType() == "CarBatteryCharger" then + id3 = false + end + + if id3 and instanceof(item, "Clothing") then + id3 = item:canBe3DRender() + end + + if id3 then + local stuff = { + item = item, + label = getText("IGUI_PlaceObject"), + texture = getTexture("media/spifcons/place_item.png"), + tooltip = item, + mode = 8 + } + + table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) + end + end + + -- Watch! + if instanceof(item, "AlarmClock") or instanceof(item, "AlarmClockClothing") then + if item:isRinging() then + local stuff = { + item = item, + label = getText("ContextMenu_StopAlarm"), + texture = getTexture("media/ui/emotes/no.png"), + mode = 10 + } + table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) + end + + local stuff = { + item = item, + label = getText("ContextMenu_SetAlarm"), + texture = getTexture("media/ui/ClockAssets/ClockAlarmLargeSound.png"), + mode = 9 + } + table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) + end -- Add Clothing Items Extra if item.getClothingItemExtraOption and item:getClothingItemExtraOption() and spiff.config.equipShowClothingActions then @@ -445,27 +524,26 @@ function SpiffUIEquipmentRadial:itemOptions(item) if item.isRanged and item:isRanged() then local stuff = { item = item, - label = "Firearm Radial", + label = getText("UI_equip_SpiffUI_FirearmRadial"), texture = item:getTexture(), tooltip = item, mode = 7 } table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff)) - end + end self:show() end function SpiffUIEquipmentRadial:accessories() + self:prepareCmds() - if not self.commands[self.page] then - self.commands[self.page] = {} - else - table.wipe(self.commands[self.page]) - end + self.btmText[self.page] = getText("UI_radial_SpiffUI_Accessories") + self.centerImg[self.page] = self.accTex + self.cImgChange[self.page] = true for _,j in ipairs(self.items) do - if not clothesSort[j:getBodyLocation()] or clothesSort[j:getBodyLocation()] > 100 then + if not clothesSort[isWatch(j) or j:getBodyLocation()] or clothesSort[isWatch(j) or j:getBodyLocation()] > 100 then -- Add our items to page 2 table.insert(self.commands[self.page], SpiffUIEquipmentRadialCommand:new(self, j, 0)) end @@ -475,11 +553,11 @@ function SpiffUIEquipmentRadial:accessories() end function SpiffUIEquipmentRadial:hotbar() - if not self.commands[self.page] then - self.commands[self.page] = {} - else - table.wipe(self.commands[self.page]) - end + self:prepareCmds() + + self.btmText[self.page] = getText("UI_radial_SpiffUI_Hotbar") + self.centerImg[self.page] = self.hotTex + self.cImgChange[self.page] = true local hotbar = getPlayerHotbar(self.playerNum) for i,item in pairs(hotbar.attachedItems) do @@ -489,7 +567,7 @@ function SpiffUIEquipmentRadial:hotbar() self:show() end -function SpiffUIEquipmentRadial:build() +function SpiffUIEquipmentRadial:start() self.packs = ISInventoryPaneContextMenu.getContainers(self.player) self.items = getItems(self.packs, self.player) @@ -497,22 +575,27 @@ function SpiffUIEquipmentRadial:build() self.page = 1 self.maxPage = 1 + self.btmText[self.page] = getText("UI_SpiffUI_Radial_Equipment") + self.centerImg[self.page] = getTexture("media/spifcons/inventory.png") + local haveAccs = false local accTex local hasItems = false if self.items then + -- Start at page 1 + if not self.commands[1] then + self.commands[1] = {} + end + for _,j in ipairs(self.items) do - if clothesSort[j:getBodyLocation()] and clothesSort[j:getBodyLocation()] < 100 then - -- Add our items to page 1 - if not self.commands[1] then - self.commands[1] = {} - end + if clothesSort[isWatch(j) or j:getBodyLocation()] and clothesSort[isWatch(j) or j:getBodyLocation()] < 100 then table.insert(self.commands[1], SpiffUIEquipmentRadialCommand:new(self, j, 0)) hasItems = true else haveAccs = true if not accTex then accTex = j:getTexture() + self.accTex = accTex end end end @@ -534,6 +617,7 @@ function SpiffUIEquipmentRadial:build() label = getText("UI_radial_SpiffUI_Hotbar"), texture = item:getTexture() } + self.hotTex = item:getTexture() table.insert(self.commands[1], SpiffUIEquipmentRadialCommand:new(self, stuff, 2)) hasItems = true break @@ -546,10 +630,11 @@ function SpiffUIEquipmentRadial:build() end end -function SpiffUIEquipmentRadial:new(player) - local o = spiff.radialmenu.new(self, player) +function SpiffUIEquipmentRadial:new(player, prev) + local o = spiff.radialmenu.new(self, player, prev) -- If we end up back at page 1, then we're at the main menu o.pageReset = true + o.cImgChange[o.page] = true return o end diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_FirstAidCraft.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_FirstAidCraft.lua index c4ab982..94f8b2a 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_FirstAidCraft.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_FirstAidCraft.lua @@ -82,7 +82,7 @@ local function getRecipes(packs, player) return recipes end -function SpiffUIFirstAidCraftRadial:build() +function SpiffUIFirstAidCraftRadial:start() local recipes = {} local bags = ISInventoryPaneContextMenu.getContainers(self.player) @@ -93,6 +93,9 @@ function SpiffUIFirstAidCraftRadial:build() for i,j in pairs(recipes) do self:AddCommand(SpiffUIFirstAidCraftRadialCommand:new(self, j)) hasCraft = true + self.btmText[self.page] = getText("UI_SpiffUI_Radial_FirstAidCraft") + self.centerImg[self.page] = InventoryItemFactory.CreateItem("Base.Bandage"):getTexture() + self.cImgChange[self.page] = true end if not hasCraft then @@ -100,8 +103,10 @@ function SpiffUIFirstAidCraftRadial:build() end end -function SpiffUIFirstAidCraftRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUIFirstAidCraftRadial:new(player, prev) + local o = spiff.radialmenu.new(self, player, prev) + o.askText = getText("UI_amount_SpiffUI_CraftHowMany") + return o end local function FirstAidCraftDown(player) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_GameSpeedRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_GameSpeedRadial.lua new file mode 100644 index 0000000..512021e --- /dev/null +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_GameSpeedRadial.lua @@ -0,0 +1,122 @@ +------------------------------------------ +-- SpiffUI Game Speed Radial +---- does anyone else even read these? if so, hello. :) +------------------------------------------ + +SpiffUI = SpiffUI or {} + +-- Register our Radials +local spiff = SpiffUI:Register("radials") + +local SpiffUIGSRadial = spiff.radialmenu:derive("SpiffUIGSRadial") +if not spiff.radials then spiff.radials = {} end +spiff.radials[10] = SpiffUIGSRadial + +------------------------------------------ + +local SpiffUIGSRadialCommand = spiff.radialcommand:derive("SpiffUIGSRadialCommand") + +function SpiffUIGSRadialCommand:Action() + if self.mode == 0 then + UIManager.getSpeedControls():ButtonClicked("Pause") + elseif self.mode == 1 then + UIManager.getSpeedControls():ButtonClicked("Play") + elseif self.mode == 2 then + UIManager.getSpeedControls():ButtonClicked("Fast Forward x 1") + elseif self.mode == 3 then + UIManager.getSpeedControls():ButtonClicked("Fast Forward x 2") + elseif self.mode == 4 then + UIManager.getSpeedControls():ButtonClicked("Wait") + end +end + +function SpiffUIGSRadialCommand:new(menu, name, texture, mode) + local o = spiff.radialcommand.new(self, menu, name, texture, nil) + o.mode = mode + return o +end + +function SpiffUIGSRadial:start() + local multiplier = getGameTime():getTrueMultiplier() + + self.cImgChange[self.page] = true + + -- Play/pause + if UIManager.getSpeedControls():getCurrentGameSpeed() == 0 or multiplier > 1 then + self:AddCommand(SpiffUIGSRadialCommand:new(self, getText("IGUI_BackButton_Play"), getTexture("media/ui/Time_Play_Off.png"), 1)) + else + self:AddCommand(spiff.radialcommand:new(self, nil, nil, nil)) + self.centerImg[self.page] = getTexture("media/ui/Time_Play_On.png") + self.btmText[self.page] = getText("IGUI_BackButton_Play") + end + + if UIManager.getSpeedControls():getCurrentGameSpeed() ~= 0 then + self:AddCommand(SpiffUIGSRadialCommand:new(self, getText("UI_optionscreen_binding_Pause"), getTexture("media/ui/Time_Pause_Off.png"), 0)) + else + self:AddCommand(spiff.radialcommand:new(self, nil, nil, nil)) + self.centerImg[self.page] = getTexture("media/ui/Time_Pause_Off.png") + self.btmText[self.page] = getText("UI_optionscreen_binding_Pause") + end + + -- FF + if multiplier == 5 then + self:AddCommand(spiff.radialcommand:new(self, nil, nil, nil)) + self.centerImg[self.page] = getTexture("media/ui/Time_FFwd1_Off.png") + self.btmText[self.page] = getText("IGUI_BackButton_FF1") + else + self:AddCommand(SpiffUIGSRadialCommand:new(self, getText("IGUI_BackButton_FF1"), getTexture("media/ui/Time_FFwd1_Off.png"), 2)) + end + + -- FF x2 + if multiplier == 20 then + self:AddCommand(spiff.radialcommand:new(self, nil, nil, nil)) + self.centerImg[self.page] = getTexture("media/ui/Time_FFwd2_Off.png") + self.btmText[self.page] = getText("IGUI_BackButton_FF2") + else + self:AddCommand(SpiffUIGSRadialCommand:new(self, getText("IGUI_BackButton_FF2"), getTexture("media/ui/Time_FFwd2_Off.png"), 3)) + end + + -- FF xWait + if multiplier == 40 then + self:AddCommand(spiff.radialcommand:new(self, nil, nil, nil)) + self.centerImg[self.page] = getTexture("media/ui/Time_Wait_Off.png") + self.btmText[self.page] = getText("IGUI_BackButton_FF3") + else + self:AddCommand(SpiffUIGSRadialCommand:new(self, getText("IGUI_BackButton_FF3"), getTexture("media/ui/Time_Wait_Off.png"), 4)) + end +end + +function SpiffUIGSRadial:new(player, menu) + local o = spiff.radialmenu.new(self, player, menu) + return o +end + +local function GSDown(player) + -- Does nothing in multiplayer + if not UIManager.getSpeedControls() or isClient() then return end + + SpiffUI.onKeyDown(player) + -- if we're not ready, then we're not doing an action. + ---- do it now + if not SpiffUI.action.ready then + -- Create Menu + local menu = SpiffUIGSRadial:new(player) + menu:display() + -- Ready for another action + SpiffUI.action.ready = true + end +end + + +local function actionInit() + local bind = { + name = 'SpiffUIGSWheel', + key = Keyboard.KEY_GRAVE, -- ~ + queue = true, + allowPause = true, + Down = GSDown + } + SpiffUI:AddKeyBind(bind) +end + +actionInit() \ No newline at end of file diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_OneRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_OneRadial.lua index 0da6f73..4aba67d 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_OneRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_OneRadial.lua @@ -1,6 +1,6 @@ ------------------------------------------ --- SpiffUI First Aid Craft Actions ----- Radial Menu for First Aid Crafting +-- SpiffUI Main Radial +---- One Radial to Rule Them All ------------------------------------------ SpiffUI = SpiffUI or {} @@ -17,7 +17,7 @@ local SpiffUIOneRadialCommand = spiff.radialcommand:derive("SpiffUIOneRadialComm function SpiffUIOneRadialCommand:Action() local radial = spiff.radials[self.mode] if radial then - local menu = radial:new(self.player) + local menu = radial:new(self.player, self.menu) menu:display() end @@ -29,40 +29,392 @@ function SpiffUIOneRadialCommand:new(menu, name, texture, mode) return o end -function SpiffUIOneRadial:build() - -- Crafting - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Crafting",getTexture("media/SpiffUI/crafting.png"), 0)) - -- Drink - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Drink", InventoryItemFactory.CreateItem("Base.WaterBottleFull"):getTexture(), 1)) - -- Eat - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Eat", InventoryItemFactory.CreateItem("Base.ChickenFried"):getTexture(), 2)) - -- Equipment - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Equipment", getTexture("media/SpiffUI/inventory.png"), 3)) - -- First Aid Craft - self:AddCommand(SpiffUIOneRadialCommand:new(self, "First Aid Craft", InventoryItemFactory.CreateItem("Base.Bandage"):getTexture(), 4)) - -- Pills - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Pills", InventoryItemFactory.CreateItem("Base.PillsAntiDep"):getTexture(), 5)) - -- Repair - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Repair",InventoryItemFactory.CreateItem("Base.Hammer"):getTexture(), 6)) - -- Smoke Craft - if getActivatedMods():contains('jiggasGreenfireMod') then - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("Greenfire.SmokingPipe"):getTexture(), 7)) - elseif getActivatedMods():contains('Smoker') then - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("SM.SMSmokingBlend"):getTexture(), 7)) - elseif getActivatedMods():contains('MoreCigsMod') then - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("Cigs.CigsOpenPackReg"):getTexture(), 7)) - else - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture(), 7)) +local tickWatch = ISUIElement:derive("tickWatch") + +function tickWatch:render() + local hour = getGameTime():getHour() + minutes = getGameTime():getMinutes() + + hour = hour + (minutes/60) + + local endX = self.cenX + ( (self.hrLen) * (math.sin(2 * math.pi * hour / 12 ) ) ) + local endY = self.cenY + ( (-self.hrLen) * (math.cos(2 * math.pi * hour / 12 ) ) ) + + self:drawLine2(self.cenX, self.cenY, endX, endY, 1, 1, 1, 1) + + endX = self.cenX + ( (self.minLen) * (math.sin(2 * math.pi * minutes / 60 ) ) ) + endY = self.cenY + ( (-self.minLen) * (math.cos(2 * math.pi * minutes / 60 ) ) ) + + self:drawLine2(self.cenX, self.cenY, endX, endY, 1, 1, 1, 1) +end + +function tickWatch:center() + local x = getPlayerScreenLeft(self.playerNum) + local y = getPlayerScreenTop(self.playerNum) + local w = getPlayerScreenWidth(self.playerNum) + local h = getPlayerScreenHeight(self.playerNum) + + x = x + w / 2 + y = y + h / 2 + + self:setX(x - self.rad / 2) + self:setY(y - self.rad / 2) + + self.cenX = x + self.cenY = y +end + +function tickWatch:new(playerNum, radius, clock, menu) + local o = ISUIElement.new(self, 0, 0, radius, radius/3) + o:initialise() + + o.clock = clock + o.rad = radius + + o.playerNum = playerNum + + o.imgW = o.rad + o.imgH= o.rad + + o.hrLen = o.rad*0.5 + o.minLen = o.rad*0.8 + + self.menu = menu + + o:center() + + return o +end + +local timeImg = ISUIElement:derive("timeImg") + +function timeImg:render() + local time = getGameTime():getHour() + local h1 = 0 + local h2 = 0 + if time > 9 then + h1 = math.floor(time/10) end - -- Smoke - self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke",InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture(), 8)) + h2 = time - (h1*10) + + self:drawTextureScaledAspect(self.menu.icons[h1], self.X[1], 0, self.secW, self.imgH, 1,1,1,1) + self:drawTextureScaledAspect(self.menu.icons[h2], self.X[2], 0, self.secW, self.imgH, 1,1,1,1) + + self:drawTextureScaledAspect(self.menu.icons["mid"], self.X[3], 0, self.midW, self.imgH, 1,1,1,1) + + time = getGameTime():getMinutes() + h1 = 0 + h2 = 0 + if time > 9 then + h1 = math.floor(time/10) + end + h2 = time - (h1*10) + + self:drawTextureScaledAspect(self.menu.icons[h1], self.X[4], 0, self.secW, self.imgH, 1,1,1,1) + self:drawTextureScaledAspect(self.menu.icons[h2], self.X[5], 0, self.secW, self.imgH, 1,1,1,1) +end + +function timeImg:center() + local x = getPlayerScreenLeft(self.playerNum) + local y = getPlayerScreenTop(self.playerNum) + local w = getPlayerScreenWidth(self.playerNum) + local h = getPlayerScreenHeight(self.playerNum) + + x = x + w / 2 + y = y + h / 2 + + self:setX(x - self.imgW / 2) + self:setY(y - self.rad / 2) + + self.cenX = x + self.cenY = y +end + +function timeImg:new(playerNum, radius, clock, menu) + local o = ISUIElement.new(self, 0, 0, radius, radius/3) + o:initialise() + + o.clock = clock + o.rad = radius + + o.playerNum = playerNum + + o.imgW = o.rad + o.imgH= o.rad/3 + o.secW = o.rad/4 + o.midW = o.rad/8 + + o.X = { + [1] = 0, + [2] = o.secW, + [3] = o.secW + o.secW, + [4] = o.secW + o.secW + o.midW, + [5] = o.secW + o.secW + o.midW + o.secW + } + + o.imgW = o.X[5] + o.secW + + self.menu = menu + + o:center() + + return o +end + +local dateImg = ISUIElement:derive("dateImg") + +local function round(num) + return math.floor(num * 10) / 10; +end + +function dateImg:render() + local time = getGameTime():getMonth()+1 + local h1 = 0 + local h2 = 0 + if time > 9 then + h1 = math.floor(time/10) + end + h2 = time - (h1*10) + + self:drawTextureScaledAspect(self.menu.icons[h1], self.X[1], 0, self.secW, self.imgH, 1,1,1,1) + self:drawTextureScaledAspect(self.menu.icons[h2], self.X[2], 0, self.secW, self.imgH, 1,1,1,1) + + self:drawTextureScaledAspect(self.menu.icons["date"], self.X[3], 0, self.secW, self.imgH, 1,1,1,1) + + time = getGameTime():getDay()+1 + h1 = 0 + h2 = 0 + if time > 9 then + h1 = math.floor(time/10) + end + h2 = time - (h1*10) + + self:drawTextureScaledAspect(self.menu.icons[h1], self.X[4], 0, self.secW, self.imgH, 1,1,1,1) + self:drawTextureScaledAspect(self.menu.icons[h2], self.X[5], 0, self.secW, self.imgH, 1,1,1,1) + + ------------------------------------- + local temp = round(self.climate:getAirTemperatureForCharacter(self.player)) + + time = math.floor(temp) + h1 = 0 + h2 = 0 + if time > 9 then + h1 = math.floor(time/10) + end + h2 = time - (h1*10) + + self:drawTextureScaledAspect(self.menu.icons[h1], self.X[6], 0, self.secW, self.imgH, 1,1,1,1) + self:drawTextureScaledAspect(self.menu.icons[h2], self.X[7], 0, self.secW, self.imgH, 1,1,1,1) + + self:drawTextureScaledAspect(self.menu.icons["dot"], self.X[8], 5, self.midW, self.imgH, 1,1,1,1) + + h1 = math.floor((temp - time) * 10) + + self:drawTextureScaledAspect(self.menu.icons[h1], self.X[9], 0, self.secW, self.imgH, 1,1,1,1) + + self:drawTextureScaledAspect(self.menu.icons["C"], self.X[10], 0, self.secW, self.imgH, 1,1,1,1) +end + +function dateImg:center() + local x = getPlayerScreenLeft(self.playerNum) + local y = getPlayerScreenTop(self.playerNum) + local w = getPlayerScreenWidth(self.playerNum) + local h = getPlayerScreenHeight(self.playerNum) + + x = x + w / 2 + y = y + h / 2 + + self:setX(x - self.imgW / 2) + self:setY((y - self.rad / 2) + (self.rad * 0.4)) +end + +function dateImg:new(playerNum, player, radius, clock, menu) + local o = ISUIElement.new(self, 0, 0, radius, radius/3) + o:initialise() + + o.clock = clock + + o.climate = getClimateManager() + o.rad = radius + + o.playerNum = playerNum + o.player = player + + o.imgW = o.rad + o.imgH= o.rad/6 + o.secW = (o.rad/8) + o.midW = (o.rad/10) + + o.X ={ + [1] = 0, + [2] = o.secW, + [3] = 2*o.secW, + [4] = 3*o.secW, + [5] = 4*o.secW, + + [6] = 6*o.secW, + [7] = 7*o.secW, + [8] = 8*o.secW-2, + [9] = 8*o.secW+(o.midW/2)+2, + [10] = 9*o.secW+(o.midW/2)+2, + } + + o.imgW = 10*o.secW+(o.midW/2) + + self.menu = menu + + o:center() + + return o +end + +local function getBestClock(player) + local watch = nil + + local items = player:getInventory():getAllEval(function(item) + return instanceof(item, "AlarmClock") or instanceof(item, "AlarmClockClothing") + end) + + if items and items:size() > 0 then + for i = 0, items:size()-1 do + local item = items:get(i) + if not watch then + watch = item + else + -- Check to always get best clock in inventory + if (not watch:isDigital() or instanceof(item, "AlarmClock")) and (item:isDigital() and instanceof(item, "AlarmClockClothing")) then + watch = item + end + end + if player:isEquipped(item) then + watch = item + break + end + end + end + return watch +end + +function SpiffUIOneRadial:start() + + self.clock = getBestClock(self.player) + if self.clock then + self.cFace = nil + if spiff.config.experimental and (not self.clock:isDigital() or instanceof(self.clock, "AlarmClock")) then + -- hand clock or non-digital watch + self.cFace = tickWatch:new(self.playerNum, self.rmenu.innerRadius, self.clock, self) + else + self.cFace = timeImg:new(self.playerNum, self.rmenu.innerRadius, self.clock, self) + end + + self:addChild(self.cFace) + -- show date/temp + if self.clock:isDigital() and instanceof(self.clock, "AlarmClockClothing") then + self.dFace = dateImg:new(self.playerNum, self.player, self.rmenu.innerRadius, self.clock, self) + self:addChild(self.dFace) + end + end + + -- Crafting + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_Crafting"), getTexture("media/spifcons/crafting.png"), 0)) + -- Drink + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_Drink"), InventoryItemFactory.CreateItem("Base.WaterBottleFull"):getTexture(), 1)) + -- Eat + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_Eat"), InventoryItemFactory.CreateItem("Base.Apple"):getTexture(), 2)) + -- Equipment + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_Equipment"), getTexture("media/spifcons/inventory.png"), 3)) + -- First Aid Craft + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_FirstAidCraft"), InventoryItemFactory.CreateItem("Base.Bandage"):getTexture(), 4)) + -- Pills + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_Pills"), InventoryItemFactory.CreateItem("Base.PillsAntiDep"):getTexture(), 5)) + -- Repair + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_Repair"), InventoryItemFactory.CreateItem("Base.Hammer"):getTexture(), 6)) + + if spiff.config.showSmokeCraftRadial then + local icon = nil + if getActivatedMods():contains('jiggasGreenfireMod') then + icon = InventoryItemFactory.CreateItem("Greenfire.SmokingPipe"):getTexture() + elseif getActivatedMods():contains('Smoker') then + icon = InventoryItemFactory.CreateItem("SM.SMSmokingBlendPipe"):getTexture() + elseif getActivatedMods():contains('MoreCigsMod') then + icon = InventoryItemFactory.CreateItem("Cigs.CigsOpenPackReg"):getTexture() + else + icon = InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture() + end + -- Smoke Craft + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_SmokeCraft"), icon, 7)) + end + + if spiff.config.showSmokingRadial then + -- Smoke + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_Smoke"), InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture(), 8)) + end + if spiff.radials[9] then self:AddCommand(SpiffUIOneRadialCommand:new(self, "Clothing Action Radial Menu",InventoryItemFactory.CreateItem("Base.Hat_BaseballCapGreen"):getTexture(), 9)) end + + if UIManager.getSpeedControls() and not isClient() then + self:AddCommand(SpiffUIOneRadialCommand:new(self, getText("UI_SpiffUI_Radial_GameSpeed"), getTexture("media/ui/Time_Wait_Off.png"), 10)) + end +end + +function SpiffUIOneRadial:render() + local index = -1 + if self.cIndex then -- force show + index = -1 + elseif JoypadState.players[self.playerNum+1] then + index = self.rmenu.javaObject:getSliceIndexFromJoypad(self.rmenu.joyfocus.id) + else + index = self.rmenu.javaObject:getSliceIndexFromMouse(self.rmenu:getMouseX(), self.rmenu:getMouseY()) + end + + self.cmdText = nil + + if index > -1 then + if self.rmenu:getSliceCommand(index+1) and self.rmenu:getSliceCommand(index+1)[2] then + self.cmdText = SpiffUI.textwrap(self.rmenu:getSliceCommand(index+1)[2].text,20) + end + end + + self:center() + + if index > -1 then + if self.cmdText then + -- Draw cmdText at bottom + self:drawText(self.cmdText, self.cTX, self.bTY, 1,1,1,1, UIFont.Medium) + end + end + + if self.clock and self.clock:isAlarmSet() then + local sz = self.rmenu.innerRadius/3 + local y = self.cFace:getY() - (sz*1.15) + local x = self.cenX - sz/2 + if self.clock:isRinging() then + self:drawTextureScaledAspect(self.icons["enable"], x, y, sz, sz, 1,1,1,1) + else + self:drawTextureScaledAspect(self.icons["silence"], x, y, sz, sz, 1,1,1,1) + end + end end function SpiffUIOneRadial:new(player) - return spiff.radialmenu.new(self, player) + local o = spiff.radialmenu.new(self, player) + + o.icons = { + ["mid"] = getTexture("media/spifcons/clock/mid.png"), + ["date"] = getTexture("media/spifcons/clock/slash.png"), + ["dot"] = getTexture("media/spifcons/clock/dot.png"), + ["F"] = getTexture("media/spifcons/clock/F.png"), + ["C"] = getTexture("media/spifcons/clock/C.png"), + ["silence"] = getTexture("media/ui/ClockAssets/ClockAlarmLargeSet.png"), + ["enable"] = getTexture("media/ui/ClockAssets/ClockAlarmLargeSound.png"), + } + for i=0,9 do + o.icons[i] = getTexture(string.format("media/spifcons/clock/%d.png", i)) + end + + return o end local function OneDown(player) @@ -70,9 +422,15 @@ local function OneDown(player) -- if we're not ready, then we're doing an action. ---- do it now if not SpiffUI.action.ready then - -- Create Menu - local menu = SpiffUIOneRadial:new(player) - menu:display() + if UIManager.getSpeedControls() and UIManager.getSpeedControls():getCurrentGameSpeed() == 0 then + if not isClient() then + spiff.radials[10]:new(player):display() + else + return + end + else + SpiffUIOneRadial:new(player):display() + end -- Ready for another action SpiffUI.action.ready = true end @@ -81,20 +439,18 @@ end ------------------------------------------ --- For the DPad local function showRadialMenu(player) - if UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0) then + if not player or player:isDead() then return end - if not player or player:isDead() then - return - end - local queue = ISTimedActionQueue.queues[player] - if queue and #queue.queue > 0 then - return false + if UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0) then + if not isClient() then + spiff.radials[10]:new(player):display() + end + return end - local menu = SpiffUIOneRadial:new(player) - menu:display() + SpiffUIOneRadial:new(player):display() end ---- Show the Radial Menu on the Up DPad when there's not a car around @@ -113,6 +469,7 @@ local function actionInit() name = 'SpiffUIOneWheel', key = Keyboard.KEY_CAPITAL, -- ; queue = true, + allowPause = true, Down = OneDown } SpiffUI:AddKeyBind(bind) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_PillsRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_PillsRadial.lua index 5d0211c..146cf37 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_PillsRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_PillsRadial.lua @@ -48,7 +48,7 @@ local function getItems(packs, pills) local pill = ps:get(i) if pill then -- If not found or has less pills - if not pills[pill:getType()] or pills[pill:getType()]:getUsedDelta() > pill:getUsedDelta() then + if not pills[pill:getType()] or (pill.getUsedDelta and pills[pill:getType()]:getUsedDelta() > pill:getUsedDelta()) then pills[pill:getType()] = pill end end @@ -58,7 +58,7 @@ local function getItems(packs, pills) return pills end -function SpiffUIPillsRadial:build() +function SpiffUIPillsRadial:start() local pills = {} local packs = ISInventoryPaneContextMenu.getContainers(self.player) @@ -69,14 +69,19 @@ function SpiffUIPillsRadial:build() for i,j in pairs(pills) do self:AddCommand(SpiffUIPillsRadialCommand:new(self, j)) hasPills = true + self.btmText[self.page] = getText("UI_SpiffUI_Radial_Pills") + self.centerImg[self.page] = InventoryItemFactory.CreateItem("Base.PillsAntiDep"):getTexture() + self.cImgChange[self.page] = true end if not hasPills then self.player:Say(getText("UI_character_SpiffUI_noPills")) end end -function SpiffUIPillsRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUIPillsRadial:new(player, prev) + local o = spiff.radialmenu.new(self, player, prev) + o.askText = getText("UI_amount_SpiffUI_HowManyPills") + return o end ------------------------------------------ diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_RepairRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_RepairRadial.lua index fbdd67a..bc8d861 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_RepairRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_RepairRadial.lua @@ -119,16 +119,12 @@ local function fixerStuff(item, fixing, fixer, player) end end - if unavailable then - tooltip.description = tooltip.description .. " " .. "**FUCK YOU, ASSHOLE**" - end - return { fixing = fixing, fixer = fixer, item = item, tooltip = tooltip, - label = getText("ContextMenu_Repair") .. getItemNameFromFullType(item:getFullType()), + label = getItemNameFromFullType(item:getFullType()), texture = tooltip.texture, unavailable = unavailable, mode = 5 @@ -190,7 +186,7 @@ local function getItems(packs, player) return repairs end -function SpiffUIRepairRadial:build() +function SpiffUIRepairRadial:start() local packs = ISInventoryPaneContextMenu.getContainers(self.player) local items = getItems(packs, self.player) @@ -199,14 +195,17 @@ function SpiffUIRepairRadial:build() if items then for _,stuff in ipairs(items) do self:AddCommand(SpiffUIRepairRadialCommand:new(self, stuff)) + self.btmText[self.page] = getText("UI_SpiffUI_Radial_Repair") + self.centerImg[self.page] = InventoryItemFactory.CreateItem("Base.Hammer"):getTexture() + self.cImgChange[self.page] = true end else self.player:Say(getText("UI_character_SpiffUI_noRepair")) end end -function SpiffUIRepairRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUIRepairRadial:new(player, prev) + return spiff.radialmenu.new(self, player, prev) end local function RepairDown(player) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeCraftRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeCraftRadial.lua index c858d63..9529cb1 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeCraftRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeCraftRadial.lua @@ -92,7 +92,7 @@ local function getRecipes(packs, player) end -function SpiffUISmokeCraftRadial:build() +function SpiffUISmokeCraftRadial:start() local recipes = {} local bags = ISInventoryPaneContextMenu.getContainers(self.player) @@ -131,6 +131,9 @@ function SpiffUISmokeCraftRadial:build() for i,j in pairs(recipes) do self:AddCommand(SpiffUISmokeCraftRadialCommand:new(self, j)) hasCraft = true + self.btmText[self.page] = getText("UI_SpiffUI_Radial_SmokeCraft") + self.centerImg[self.page] = self.icon + self.cImgChange[self.page] = true end if not hasCraft then @@ -138,8 +141,21 @@ function SpiffUISmokeCraftRadial:build() end end -function SpiffUISmokeCraftRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUISmokeCraftRadial:new(player, prev) + local o = spiff.radialmenu.new(self, player, prev) + o.askText = getText("UI_amount_SpiffUI_CraftHowMany") + + if getActivatedMods():contains('jiggasGreenfireMod') then + o.icon = InventoryItemFactory.CreateItem("Greenfire.SmokingPipe"):getTexture() + elseif getActivatedMods():contains('Smoker') then + o.icon = InventoryItemFactory.CreateItem("SM.SMSmokingBlendPipe"):getTexture() + elseif getActivatedMods():contains('MoreCigsMod') then + o.icon = InventoryItemFactory.CreateItem("Cigs.CigsOpenPackReg"):getTexture() + else + o.icon = InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture() + end + + return o end local function SmokeCraftDown(player) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeRadial.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeRadial.lua index b992390..814dc40 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeRadial.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/Radials/SpiffUI_SmokeRadial.lua @@ -180,7 +180,7 @@ local function getLighter(pack) end) end -function SpiffUISmokeRadial:build() +function SpiffUISmokeRadial:start() -- A lighter is required to be on you local lighter = getLighter(self.player:getInventory()) @@ -207,11 +207,14 @@ function SpiffUISmokeRadial:build() -- Build Smokeables for _,j in pairs(items) do self:AddCommand(SpiffUISmokeRadialCommand:new(self, j, lighter)) + self.centerImg[self.page] = InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture() + self.btmText[self.page] = getText("UI_SpiffUI_Radial_Smoke") + self.cImgChange[self.page] = true end end -function SpiffUISmokeRadial:new(player) - return spiff.radialmenu.new(self, player) +function SpiffUISmokeRadial:new(player, prev) + return spiff.radialmenu.new(self, player, prev) end local function SmokeDown(player) diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/SpiffUI-Radials.lua b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/SpiffUI-Radials.lua index 6d71b4a..4a5fe73 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/SpiffUI-Radials.lua +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/client/SpiffUI-Radials.lua @@ -280,6 +280,11 @@ local function SpiffUIOnGameStart() } } } + + if spiff.config.hideClock then + UIManager.RemoveElement(UIManager.getClock()) + UIManager.RemoveElement(UIManager.getSpeedControls()) + end end local function SpiffUIBoot() @@ -301,13 +306,19 @@ local function SpiffUIBoot() equipShowAllRepairs = false, equipShowClothingActions = true, equipShowRecipes = true, + equipShowPlace = true, + equipShowTransfer = true, repairShowEquipped = false, repairShowHotbar = true, firstAidCraftAmount = -1, eatAmount = 0, drinkAmount = 0, eatQuickAmount = 1, - drinkQuickAmount = 1 + drinkQuickAmount = 1, + hideClock = false, + experimental = false, + showSmokeRadial = true, + showSmokeCraftRadial = true } if ModOptions and ModOptions.getInstance then @@ -336,6 +347,8 @@ local function SpiffUIBoot() spiff.config.equipShowAllRepairs = options.equipShowAllRepairs spiff.config.equipShowClothingActions = options.equipShowClothingActions spiff.config.equipShowRecipes = options.equipShowRecipes + spiff.config.equipShowPlace = options.equipShowPlace + spiff.config.equipShowTransfer = options.equipShowTransfer spiff.config.repairShowEquipped = options.repairShowEquipped spiff.config.repairShowHotbar = options.repairShowHotbar @@ -348,6 +361,11 @@ local function SpiffUIBoot() spiff.config.drinkQuickAmount = rOptions.consume[options.drinkQuickAmount] SpiffUI.equippedItem["Craft"] = not options.hideCraftButton + + spiff.config.hideClock = options.hideClock + + spiff.config.showSmokeRadial = options.showSmokeRadial + spiff.config.showSmokeCraftRadial = options.showSmokeCraftRadial end local function applyGame(data) @@ -371,6 +389,25 @@ local function SpiffUIBoot() OnApplyMainMenu = apply, OnApplyInGame = applyGame, }, + hideClock = { + name = "UI_ModOptions_SpiffUI_hideClock", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_hideClockTooltip"), + OnApplyMainMenu = apply, + OnApplyInGame = applyGame, + }, + showSmokeCraftRadial = { + name = "UI_ModOptions_SpiffUI_showSmokeCraftRadial", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + showSmokingRadial = { + name = "UI_ModOptions_SpiffUI_showSmokingRadial", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, eatShowNow = { name = "UI_ModOptions_SpiffUI_eatShowNow", default = false, @@ -538,6 +575,18 @@ local function SpiffUIBoot() OnApplyMainMenu = apply, OnApplyInGame = apply, }, + equipShowPlace = { + name = "UI_ModOptions_SpiffUI_equipShowPlace", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + equipShowTransfer = { + name = "UI_ModOptions_SpiffUI_equipShowTransfer", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, repairShowEquipped = { name = "UI_ModOptions_SpiffUI_repairShowEquipped", default = false, @@ -574,15 +623,65 @@ local function SpiffUIBoot() end) end - spiff.icons = { - [1] = getTexture("media/SpiffUI/1.png"), - [2] = getTexture("media/SpiffUI/1-2.png"), - [3] = getTexture("media/SpiffUI/1-4.png"), - [4] = getTexture("media/SpiffUI/ALL.png"), - [5] = getTexture("media/SpiffUI/FULL.png"), - ["unequip"] = getTexture("media/ui/Icon_InventoryBasic.png"), - ["drop"] = getTexture("media/ui/Container_Floor.png") - } + -- spiff.icons = { + -- [1] = getTexture("media/spifcons/1.png"), + -- [2] = getTexture("media/spifcons/1-2.png"), + -- [3] = getTexture("media/spifcons/1-4.png"), + -- [4] = getTexture("media/spifcons/ALL.png"), + -- [5] = getTexture("media/spifcons/FULL.png"), + -- ["unequip"] = getTexture("media/ui/Icon_InventoryBasic.png"), + -- ["drop"] = getTexture("media/ui/Container_Floor.png"), + -- ["place"] = getTexture("media/spifcons/place_item.png"), + -- ["defCon"] = getTexture("media/ui/Container_Shelf.png"), + -- ["nextpage"] = getTexture("media/spifcons/nextpage.png"), + -- ["prevpage"] = getTexture("media/spifcons/prevpage.png") + -- } + + -- spiff.icons.radials = { + -- [0] = getTexture("media/spifcons/crafting.png"), + -- [1] = InventoryItemFactory.CreateItem("Base.WaterBottleFull"):getTexture(), + -- [2] = InventoryItemFactory.CreateItem("Base.Apple"):getTexture(), + -- [3] = getTexture("media/spifcons/inventory.png"), + -- [4] = InventoryItemFactory.CreateItem("Base.Bandage"):getTexture(), + -- [5] = InventoryItemFactory.CreateItem("Base.PillsAntiDep"):getTexture(), + -- [6] = InventoryItemFactory.CreateItem("Base.Hammer"):getTexture(), + -- [8] = InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture() + -- } + + -- if getActivatedMods():contains('jiggasGreenfireMod') then + -- spiff.icons.radials[7] = InventoryItemFactory.CreateItem("Greenfire.SmokingPipe"):getTexture() + -- elseif getActivatedMods():contains('Smoker') then + -- spiff.icons.radials[7] = InventoryItemFactory.CreateItem("SM.SMSmokingBlend"):getTexture() + -- elseif getActivatedMods():contains('MoreCigsMod') then + -- spiff.icons.radials[7] = InventoryItemFactory.CreateItem("Cigs.CigsOpenPackReg"):getTexture() + -- else + -- spiff.icons.radials[7] = InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture() + -- end + + -- -- Alarm icons + -- spiff.icons.alarm = { + -- [30] = getTexture("media/spifcons/alarm/30.png"), + -- [40] = getTexture("media/spifcons/alarm/40.png"), + -- [50] = getTexture("media/spifcons/alarm/50.png"), + -- ["silence"] = getTexture("media/ui/ClockAssets/ClockAlarmLargeSet.png"), + -- ["enable"] = getTexture("media/ui/ClockAssets/ClockAlarmLargeSound.png"), + -- ["stop"] = getTexture("media/ui/emotes/no.png"), + -- } + -- -- Do the rest + -- for i=0,23 do + -- spiff.icons.alarm[i] = getTexture("media/spifcons/alarm/" .. string.format("%02d", i) .. ".png") + -- end + + -- spiff.icons.clock = { + -- ["mid"] = getTexture("media/spifcons/clock/mid.png"), + -- ["date"] = getTexture("media/spifcons/clock/slash.png"), + -- ["dot"] = getTexture("media/spifcons/clock/dot.png"), + -- ["F"] = getTexture("media/spifcons/clock/F.png"), + -- ["C"] = getTexture("media/spifcons/clock/C.png"), + -- } + -- for i=0,9 do + -- spiff.icons.clock[i] = getTexture(string.format("media/spifcons/clock/%dL.png", i)) + -- end SpiffUI:AddKeyDisable("Toggle Inventory") SpiffUI:AddKeyDisable("Crafting UI") @@ -591,9 +690,266 @@ local function SpiffUIBoot() SpiffUI:AddKeyDefault("Toggle Moveable Panel Mode", 0) SpiffUI:AddKeyDefault("Display FPS", 0) + SpiffUI:AddKeyDefault("ToggleLuaConsole", 0) print(getText("UI_Hello_SpiffUI_Radials")) end +spiff.SpiffUIConfig = function() + return { + options = { + showTooltips = { + name = "UI_ModOptions_SpiffUI_showTooltips", + default = true, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_showTooltips"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + hideCraftButton = { + name = "UI_ModOptions_SpiffUI_hideCraftButton", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = applyGame + }, + -- Eat + sep1 = { + name = "UI_optionscreen_binding_SpiffUIEatWheel", + default = "Seperator" + }, + eatShowNow = { + name = "UI_ModOptions_SpiffUI_eatShowNow", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_eatShowNow"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + eatAmount = { + getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"), + getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Ask"), + getText("UI_amount_SpiffUI_Full"), + + name = "UI_ModOptions_SpiffUI_eatAmount", + default = 4, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + eatQuickAmount = { + getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"), + getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Full"), + + name = "UI_ModOptions_SpiffUI_eatQuickAmount", + default = 1, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- Drink + sep2 = { + name = "UI_optionscreen_binding_SpiffUIDrinkWheel", + default = "Seperator" + }, + drinkShowNow = { + name = "UI_ModOptions_SpiffUI_drinkShowNow", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_drinkShowNow"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + drinkAmount = { + getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"), + getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Ask"), + getText("UI_amount_SpiffUI_Full"), + + name = "UI_ModOptions_SpiffUI_drinkAmount", + default = 4, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + drinkQuickAmount = { + getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"), + getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Full"), + + name = "UI_ModOptions_SpiffUI_drinkQuickAmount", + default = 1, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- Pills + sep3 = { + name = "UI_optionscreen_binding_SpiffUIPillWheel", + default = "Seperator" + }, + pillsShowNow = { + name = "UI_ModOptions_SpiffUI_pillsShowNow", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_pillsShowNow"), + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- Smoke + sep4 = { + name = "UI_optionscreen_binding_SpiffUISmokeWheel", + default = "Seperator" + }, + smokeShowNow = { + name = "UI_ModOptions_SpiffUI_smokeShowNow", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_smokeShowNow"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + smokeShowButts = { + name = "UI_ModOptions_SpiffUI_smokeShowButts", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + smokeShowGum = { + name = "UI_ModOptions_SpiffUI_smokeShowGum", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- Smoke Craft + sep5 = { + name = "UI_optionscreen_binding_SpiffUISmokeCraftWheel", + default = "Seperator" + }, + smokeCraftShowDismantle = { + name = "UI_ModOptions_SpiffUI_smokeCraftShowDismantle", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + smokeCraftShowCigPacks = { + name = "UI_ModOptions_SpiffUI_smokeCraftShowCigPacks", + default = false, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + smokeCraftAmount = { + getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_All"), + getText("UI_amount_SpiffUI_Ask"), + + name = "UI_ModOptions_SpiffUI_smokeCraftAmount", + default = 3, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- Craft + sep6 = { + name = "UI_optionscreen_binding_SpiffUICraftWheel", + default = "Seperator" + }, + craftSwitch = { + name = "UI_ModOptions_SpiffUI_craftSwitch", + default = true, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_CraftingWheelSwitch"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + craftShowEquipped = { + name = "UI_ModOptions_SpiffUI_craftShowEquipped", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_craftShowEquipped"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + craftShowSmokeables = { + name = "UI_ModOptions_SpiffUI_craftShowSmokeables", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_craftShowSmokeables"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + craftShowMedical = { + name = "UI_ModOptions_SpiffUI_craftShowMedical", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_craftShowMedical"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + craftFilterUnique = { + name = "UI_ModOptions_SpiffUI_craftFilterUnique", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + craftAmount = { + getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_All"), + getText("UI_amount_SpiffUI_Ask"), + + name = "UI_ModOptions_SpiffUI_craftAmount", + default = 3, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- Equpiment + sep7 = { + name = "UI_optionscreen_binding_SpiffUIEquipmentWheel", + default = "Seperator" + }, + equipShowDrop = { + name = "UI_ModOptions_SpiffUI_equipShowDrop", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + equipShowAllRepairs = { + name = "UI_ModOptions_SpiffUI_equipShowAllRepairs", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_equipShowAllRepairs"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + equipShowClothingActions = { + name = "UI_ModOptions_SpiffUI_equipShowClothingActions", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + equipShowRecipes = { + name = "UI_ModOptions_SpiffUI_equipShowRecipes", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- Repair + sep8 = { + name = "UI_optionscreen_binding_SpiffUIRepairWheel", + default = "Seperator" + }, + repairShowEquipped = { + name = "UI_ModOptions_SpiffUI_repairShowEquipped", + default = false, + tooltip = getText("UI_ModOptions_SpiffUI_tooltip_repairShowEquipped"), + OnApplyMainMenu = apply, + OnApplyInGame = apply, + }, + repairShowHotbar = { + name = "UI_ModOptions_SpiffUI_repairShowHotbar", + default = true, + OnApplyMainMenu = apply, + OnApplyInGame = apply + }, + -- First Aid Craft + sep9 = { + name = "UI_optionscreen_binding_SpiffUIFirstAidCraftWheel", + default = "Seperator" + }, + firstAidCraftAmount = { + getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_All"), + getText("UI_amount_SpiffUI_Ask"), + + name = "UI_ModOptions_SpiffUI_firstAidCraftAmount", + default = 3, + OnApplyMainMenu = apply, + OnApplyInGame = apply + } + }, + name = getText("UI_Name_SpiffUI_Radials"), + columns = 3 + } +end + spiff.Boot = SpiffUIBoot spiff.Start = SpiffUIOnGameStart \ No newline at end of file diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/EN/UI_EN.txt b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/EN/UI_EN.txt index c1e0ca9..12df1b1 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/EN/UI_EN.txt +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/EN/UI_EN.txt @@ -2,7 +2,7 @@ UI_EN = { -- SpiffUI UI_Hello_SpiffUI = "Hello SpiffUI!", UI_Name_SpiffUI = "SpiffUI", - UI_optionscreen_binding_SpiffUI = "SpiffUI" + UI_optionscreen_binding_SpiffUI = "SpiffUI", UI_ModOptions_SpiffUI_applyNewKeybinds = "Set SpiffUI Recommended Keybinds", UI_ModOptions_SpiffUI_Modal_applyNewKeybinds = " Set SpiffUI Keybinds Sets the following Keybinds: ", @@ -63,7 +63,7 @@ UI_EN = { UI_ModOptions_SpiffUI_tooltip_eatShowNow = "Note: Disables Quick Eat Food Action", - UI_ModOptions_SpiffUI_tooltip_craftShowMedical = "Note: Some Recipes may still filter through. Consider using the First Aid Crafting Menu instead!", + UI_ModOptions_SpiffUI_tooltip_craftShowMedical = "Note: Some Recipes may still filter through. Consider using the Medical Craft Menu instead!", UI_ModOptions_SpiffUI_tooltip_craftShowEquipped = "Note: Recipes on worn items can be done from the Equipment Menu. Items in your hand will still show recipes", UI_ModOptions_SpiffUI_tooltip_craftShowSmokeables = "Consider using the Smoke Crafting Menu instead!" @@ -88,13 +88,13 @@ UI_EN = { UI_optionscreen_binding_SpiffUIPillWheel = "Pill Radial", UI_optionscreen_binding_SpiffUIDrinkWheel = "Drink Radial", - UI_optionscreen_binding_SpiffUIEatWheel = "Eat Radial", + UI_optionscreen_binding_SpiffUIEatWheel = "Food Radial", UI_optionscreen_binding_SpiffUISmokeWheel = "Smoke Radial", UI_optionscreen_binding_SpiffUISmokeCraftWheel = "Smoke Craft Radial", UI_optionscreen_binding_SpiffUICraftWheel = "Crafting UI/Radial", UI_optionscreen_binding_SpiffUIEquipmentWheel = "Inventory Toggle/Radial", UI_optionscreen_binding_SpiffUIRepairWheel = "Repair Radial", - UI_optionscreen_binding_SpiffUIFirstAidCraftWheel = "First Aid Craft", + UI_optionscreen_binding_SpiffUIFirstAidCraftWheel = "Medical Craft", UI_optionscreen_binding_SpiffUIOneWheel = "SpiffUI Radial", UI_character_SpiffUI_noLighter = "I need a lighter.", @@ -115,5 +115,60 @@ UI_EN = { UI_character_SpiffUI_noPillsQuick = "I have no ", UI_character_SpiffUI_noPills = "There's no pills", - UI_character_SpiffUI_noPillsNeed = "I'm not in any Mood." + UI_character_SpiffUI_noPillsNeed = "I'm not in any Mood.", + + ------------------------------------------- + -- NEW v8: + UI_radial_SpiffUI_Previous = "Previous", + UI_radial_SpiffUI_Next = "Next", + + UI_alarm_SpiffUI_Silence = "Silence Alarm", + UI_alarm_SpiffUI_Enable = "Enable Alarm", + UI_alarm_SpiffUI_Reset = "Reset Alarm", + UI_alarm_SpiffUI_HH = "HH", + UI_alarm_SpiffUI_MM = "MM", + + -- These next few include formatting so that the text lines up more or less. + ---- EX: Current Alarm + ---- HH:MM + -- I can't do this with richtext, and there's only one label (for simplicity) so brute force it is + -- Sorry to all translators for any tweaks or weirdness you may have to do + + -- Hour:Minutes or HH:MM if no alarm + UI_alarm_SpiffUI_CurrentF = "Current Alarm \n %1:%2", + -- HH:MM + UI_alarm_SpiffUI_SetHourF = "SET HOUR \n %1:%2", + -- Hour:MM + UI_alarm_SpiffUI_SetMinuteF = "SET MINUTE \n %1:%2", + + UI_equip_SpiffUI_FirearmRadial = "Firearm Radial", + + UI_SpiffUI_Radial_Equipment = "Equipment", + UI_SpiffUI_Radial_Crafting = "Crafting", + UI_SpiffUI_Radial_Drink = "Drink", + UI_SpiffUI_Radial_Eat = "Food", + UI_SpiffUI_Radial_FirstAidCraft = "Medical Craft", + UI_SpiffUI_Radial_Pills = "Pills", + UI_SpiffUI_Radial_Repair = "Repair", + UI_SpiffUI_Radial_Smoke = "Smoke", + UI_SpiffUI_Radial_SmokeCraft = "Smoke Craft", + + UI_amount_SpiffUI_CraftHowMany = "Craft How Many", + UI_amount_SpiffUI_EatHowMuch = "Eat How Much", + UI_amount_SpiffUI_DrinkHowMuch = "Drink How Much", + UI_amount_SpiffUI_HowManyPills = "Take How Many Pills", + + UI_optionscreen_binding_SpiffUIGSWheel = "Game Speed Radial", + UI_SpiffUI_Radial_GameSpeed = "Game Speed", + + UI_ModOptions_SpiffUI_equipShowRecipes = "Show Recipes (Equipment)", + + UI_ModOptions_SpiffUI_hideClock = "Hide Vanilla Clock", + UI_ModOptions_SpiffUI_hideClockTooltip = "RECOMMENDED: The clock is now present in the SpiffUI Radial. A restart is required if in-game.", + + UI_ModOptions_SpiffUI_equipShowPlace = "Show Place Action (Equipment)", + UI_ModOptions_SpiffUI_equipShowTransfer = "Show Transfer Action (Equipment)", + + UI_ModOptions_SpiffUI_showSmokeCraftRadial = "Show Smoke Craft Radial (SpiffUI)", + UI_ModOptions_SpiffUI_showSmokingRadial = "Show Smoking Radial (SpiffUI)" } \ No newline at end of file diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/RU/UI_RU.txt b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/RU/UI_RU.txt index 2702cce..4330631 100644 --- a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/RU/UI_RU.txt +++ b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/lua/shared/Translate/RU/UI_RU.txt @@ -1,122 +1,121 @@ UI_RU = { - -- Translation By: fourteensix - -- Перевод: fourteensix - -- SpiffUI Radial + + -- SpiffUI Radial UI_Hello_SpiffUI = "Hello SpiffUI!", UI_Name_SpiffUI = "SpiffUI", UI_optionscreen_binding_SpiffUI = "SpiffUI" - UI_ModOptions_SpiffUI_applyNewKeybinds = "УÑтановите рекомендуемые ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ SpiffUI", - UI_ModOptions_SpiffUI_Modal_applyNewKeybinds = " УÑтановить привÑзки клавиш SpiffUI УÑтанавливает Ñледующие ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ: ", - UI_ModOptions_SpiffUI_Modal_aNKChild = " %1 длÑ: [%2] ", + UI_ModOptions_SpiffUI_applyNewKeybinds = "Óñòàíîâèòå ðåêîìåíäóåìûå ñî÷åòàíèÿ êëàâèø SpiffUI", + UI_ModOptions_SpiffUI_Modal_applyNewKeybinds = " Óñòàíîâèòü ïðèâÿçêè êëàâèø SpiffUI Óñòàíàâëèâàåò ñëåäóþùèå ñî÷åòàíèÿ êëàâèø: ", + UI_ModOptions_SpiffUI_Modal_aNKChild = " %1 äëÿ: [%2] ", - UI_ModOptions_SpiffUI_runAllResets = "ЗапуÑтить полный ÑÐ±Ñ€Ð¾Ñ SpiffUI", - UI_ModOptions_SpiffUI_tooltip_runResets = "Работает только в игре!", - UI_ModOptions_SpiffUI_Modal_runResets = " Ð¡Ð±Ñ€Ð¾Ñ SpiffUI Будет Ñброшено Ñледующее: ", + UI_ModOptions_SpiffUI_runAllResets = "Çàïóñòèòü ïîëíûé ñáðîñ SpiffUI", + UI_ModOptions_SpiffUI_tooltip_runResets = "Ðàáîòàåò òîëüêî â èãðå!", + UI_ModOptions_SpiffUI_Modal_runResets = " Ñáðîñ SpiffUI Áóäåò ñáðîøåíî ñëåäóþùåå: ", -- SpiffUI -- Radials UI_Hello_SpiffUI_Radials = "Hello SpiffUI - Radials", - + UI_Name_SpiffUI_Radials = "SpiffUI - Radials", - UI_ModOptions_SpiffUI_showTooltips = "Показать подÑказки", - UI_ModOptions_SpiffUI_hideCraftButton = "Скрыть кнопку крафта", + UI_ModOptions_SpiffUI_showTooltips = "Ïîêàçàòü ïîäñêàçêè", + UI_ModOptions_SpiffUI_hideCraftButton = "Ñêðûòü êíîïêó êðàôòà", - UI_ModOptions_SpiffUI_smokeShowButts = "Показать окурки (мод Smoke)", - UI_ModOptions_SpiffUI_smokeShowGum = "Показать жвачку (мод Smoke)", - UI_ModOptions_SpiffUI_smokeShowNow = "Показать радиальное меню при нажатии (мод Smoke)", + UI_ModOptions_SpiffUI_smokeShowButts = "Ïîêàçàòü îêóðêè (ìîä Smoke)", + UI_ModOptions_SpiffUI_smokeShowGum = "Ïîêàçàòü æâà÷êó (ìîä Smoke)", + UI_ModOptions_SpiffUI_smokeShowNow = "Ïîêàçàòü ðàäèàëüíîå ìåíþ ïðè íàæàòèè (ìîä Smoke)", - UI_ModOptions_SpiffUI_pillsShowNow = "Показать радиальное меню при нажатии (Таблетки)", + UI_ModOptions_SpiffUI_pillsShowNow = "Ïîêàçàòü ðàäèàëüíîå ìåíþ ïðè íàæàòèè (Òàáëåòêè)", - UI_ModOptions_SpiffUI_eatAmount = "КоличеÑтво еды (Еда)", - UI_ModOptions_SpiffUI_eatQuickAmount = "КоличеÑтво еды Ð´Ð»Ñ Ð±Ñ‹Ñтрого перекуÑа (Еда)", - UI_ModOptions_SpiffUI_eatShowNow = "Показать радиальное меню при нажатии (Еда)", + UI_ModOptions_SpiffUI_eatAmount = "Êîëè÷åñòâî åäû (Åäà)", + UI_ModOptions_SpiffUI_eatQuickAmount = "Êîëè÷åñòâî åäû äëÿ áûñòðîãî ïåðåêóñà (Åäà)", + UI_ModOptions_SpiffUI_eatShowNow = "Ïîêàçàòü ðàäèàëüíîå ìåíþ ïðè íàæàòèè (Åäà)", - UI_ModOptions_SpiffUI_drinkAmount = "КоличеÑтво Ð¿Ð¸Ñ‚ÑŒÑ (Ðапитки)", - UI_ModOptions_SpiffUI_drinkQuickAmount = "КоличеÑтво напитка Ð´Ð»Ñ Ð±Ñ‹Ñтрого ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¶Ð°Ð¶Ð´Ñ‹ (Ðапитки)", - UI_ModOptions_SpiffUI_drinkShowNow = "Показать радиальное меню при нажатии (Ðапитки)", + UI_ModOptions_SpiffUI_drinkAmount = "Êîëè÷åñòâî ïèòüÿ (Íàïèòêè)", + UI_ModOptions_SpiffUI_drinkQuickAmount = "Êîëè÷åñòâî íàïèòêà äëÿ áûñòðîãî óäàëåíèÿ æàæäû (Íàïèòêè)", + UI_ModOptions_SpiffUI_drinkShowNow = "Ïîêàçàòü ðàäèàëüíîå ìåíþ ïðè íàæàòèè (Íàïèòêè)", - UI_ModOptions_SpiffUI_smokeCraftShowDismantle = "Показать рецепты разборки (крафт мода Smoke)", - UI_ModOptions_SpiffUI_smokeCraftShowCigPacks = "Показать пачки Ñигарет (крафт мода Smoke)", - UI_ModOptions_SpiffUI_smokeCraftAmount = "КоличеÑтво Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ (крафт мода Smoke)", + UI_ModOptions_SpiffUI_smokeCraftShowDismantle = "Ïîêàçàòü ðåöåïòû ðàçáîðêè (êðàôò ìîäà Smoke)", + UI_ModOptions_SpiffUI_smokeCraftShowCigPacks = "Ïîêàçàòü ïà÷êè ñèãàðåò (êðàôò ìîäà Smoke)", + UI_ModOptions_SpiffUI_smokeCraftAmount = "Êîëè÷åñòâî äëÿ ñîçäàíèÿ (êðàôò ìîäà Smoke)", - UI_ModOptions_SpiffUI_craftSwitch = "Показать радиальное меню при нажатии (Крафт)", - UI_ModOptions_SpiffUI_craftShowEquipped = "Показать рецепты на Ñкипированных предметах (Крафт)", - UI_ModOptions_SpiffUI_craftShowSmokeables = "Показать рецепты Ð´Ð»Ñ ÐºÑƒÑ€ÐµÐ½Ð¸Ñ (Крафт)", - UI_ModOptions_SpiffUI_craftShowMedical = "Показать медицинÑкие рецепты (Крафт)", - UI_ModOptions_SpiffUI_craftAmount = "КоличеÑтво Ð´Ð»Ñ ÐºÑ€Ð°Ñ„Ñ‚Ð° (Крафт)", - UI_ModOptions_SpiffUI_craftFilterUnique = "Фильтр повторÑющихÑÑ Ñ€ÐµÑ†ÐµÐ¿Ñ‚Ð¾Ð² (Крафт)", + UI_ModOptions_SpiffUI_craftSwitch = "Ïîêàçàòü ðàäèàëüíîå ìåíþ ïðè íàæàòèè (Êðàôò)", + UI_ModOptions_SpiffUI_craftShowEquipped = "Ïîêàçàòü ðåöåïòû íà ýêèïèðîâàííûõ ïðåäìåòàõ (Êðàôò)", + UI_ModOptions_SpiffUI_craftShowSmokeables = "Ïîêàçàòü ðåöåïòû äëÿ êóðåíèÿ (Êðàôò)", + UI_ModOptions_SpiffUI_craftShowMedical = "Ïîêàçàòü ìåäèöèíñêèå ðåöåïòû (Êðàôò)", + UI_ModOptions_SpiffUI_craftAmount = "Êîëè÷åñòâî äëÿ êðàôòà (Êðàôò)", + UI_ModOptions_SpiffUI_craftFilterUnique = "Ôèëüòð ïîâòîðÿþùèõñÿ ðåöåïòîâ (Êðàôò)", - UI_ModOptions_SpiffUI_equipShowDrop = "Показать дейÑтвие дропа (Экипировка)", - UI_ModOptions_SpiffUI_equipShowAllRepairs = "Показать недоÑтупные параметры ремонта (Экипировка)", - UI_ModOptions_SpiffUI_equipShowClothingActions = "Показать дейÑÑ‚Ð²Ð¸Ñ Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ одеждой (Экипировка)", - UI_ModOptions_SpiffUI_equipShowRecipes = "Показать рецепты (Экипировка)", + UI_ModOptions_SpiffUI_equipShowDrop = "Ïîêàçàòü äåéñòâèå äðîïà (Ýêèïèðîâêà)", + UI_ModOptions_SpiffUI_equipShowAllRepairs = "Ïîêàçàòü íåäîñòóïíûå ïàðàìåòðû ðåìîíòà (Ýêèïèðîâêà)", + UI_ModOptions_SpiffUI_equipShowClothingActions = "Ïîêàçàòü äåéñòâèÿ ñ äîïîëíèòåëüíîé îäåæäîé (Ýêèïèðîâêà)", + UI_ModOptions_SpiffUI_equipShowRecipes = "Ïîêàçàòü ðåöåïòû (Ýêèïèðîâêà)", - UI_ModOptions_SpiffUI_repairShowEquipped = "Показать ремонт Ñкипированных предметов (Ремонт)", - UI_ModOptions_SpiffUI_repairShowHotbar = "Показать ремонт предметов в хотбаре (Ремонт)", + UI_ModOptions_SpiffUI_repairShowEquipped = "Ïîêàçàòü ðåìîíò ýêèïèðîâàííûõ ïðåäìåòîâ (Ðåìîíò)", + UI_ModOptions_SpiffUI_repairShowHotbar = "Ïîêàçàòü ðåìîíò ïðåäìåòîâ â õîòáàðå (Ðåìîíò)", - UI_ModOptions_SpiffUI_firstAidCraftAmount = "КоличеÑтво Ð´Ð»Ñ ÐºÑ€Ð°Ñ„Ñ‚Ð° (Крафт медикаментов)", + UI_ModOptions_SpiffUI_firstAidCraftAmount = "Êîëè÷åñòâî äëÿ êðàôòà (Êðàôò ìåäèêàìåíòîâ)", - UI_ModOptions_SpiffUI_tooltip_showTooltips = "Показывать вÑплывающие подÑказки в радиальных меню Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ð¾Ð², рецептов и ремонтов (РекомендуетÑÑ)", - - UI_ModOptions_SpiffUI_tooltip_pillsShowNow = "Примечание: отключает дейÑтвие *БыÑтрые таблетки*", - - UI_ModOptions_SpiffUI_tooltip_drinkShowNow = "Примечание: отключает дейÑтвие *БыÑтрое питьё воды*", + UI_ModOptions_SpiffUI_tooltip_showTooltips = "Ïîêàçûâàòü âñïëûâàþùèå ïîäñêàçêè â ðàäèàëüíûõ ìåíþ äëÿ ïðåäìåòîâ, ðåöåïòîâ è ðåìîíòîâ (Ðåêîìåíäóåòñÿ)", - UI_ModOptions_SpiffUI_tooltip_eatShowNow = "Примечание: отключает дейÑтвие *БыÑтро ÑъеÑть еду*", - - UI_ModOptions_SpiffUI_tooltip_craftShowMedical = "Примечание: некоторые рецепты могут по-прежнему фильтроватьÑÑ. ВмеÑто Ñтого раÑÑмотрите возможноÑть иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÑŽ крафта первой помощи!", - UI_ModOptions_SpiffUI_tooltip_craftShowEquipped = "Примечание: рецепты на изношенные предметы можно Ñделать из меню ÑнарÑжениÑ. Предметы в вашей руке по-прежнему будут показывать рецепты", - UI_ModOptions_SpiffUI_tooltip_craftShowSmokeables = "ВмеÑто Ñтого раÑÑмотрите возможноÑть иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÑŽ крафта мода Smoke!" + UI_ModOptions_SpiffUI_tooltip_pillsShowNow = "Ïðèìå÷àíèå: îòêëþ÷àåò äåéñòâèå *Áûñòðûå òàáëåòêè*", - UI_ModOptions_SpiffUI_tooltip_smokeShowNow = "Примечание: отключает мод AutoSmoke Ð´Ð»Ñ Ð±Ñ‹Ñтрого курениÑ", + UI_ModOptions_SpiffUI_tooltip_drinkShowNow = "Ïðèìå÷àíèå: îòêëþ÷àåò äåéñòâèå *Áûñòðîå ïèòü¸ âîäû*", - UI_ModOptions_SpiffUI_tooltip_CraftingWheelSwitch = "Ðажмите, чтобы открыть радиальное меню, удерживайте, чтобы открыть окно крафта", + UI_ModOptions_SpiffUI_tooltip_eatShowNow = "Ïðèìå÷àíèå: îòêëþ÷àåò äåéñòâèå *Áûñòðî ñúåñòü åäó*", - UI_ModOptions_SpiffUI_tooltip_equipShowAllRepairs = "Показать параметры ремонта, даже еÑли требуемых предметов нет в вашем инвентаре", - - UI_ModOptions_SpiffUI_tooltip_repairShowEquipped = "Ремонт ÑнарÑÐ¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ выполнить из меню ÑнарÑжениÑ.", + UI_ModOptions_SpiffUI_tooltip_craftShowMedical = "Ïðèìå÷àíèå: íåêîòîðûå ðåöåïòû ìîãóò ïî-ïðåæíåìó ôèëüòðîâàòüñÿ. Âìåñòî ýòîãî ðàññìîòðèòå âîçìîæíîñòü èñïîëüçîâàíèÿ ìåíþ êðàôòà ïåðâîé ïîìîùè!", + UI_ModOptions_SpiffUI_tooltip_craftShowEquipped = "Ïðèìå÷àíèå: ðåöåïòû íà èçíîøåííûå ïðåäìåòû ìîæíî ñäåëàòü èç ìåíþ ñíàðÿæåíèÿ. Ïðåäìåòû â âàøåé ðóêå ïî-ïðåæíåìó áóäóò ïîêàçûâàòü ðåöåïòû", + UI_ModOptions_SpiffUI_tooltip_craftShowSmokeables = "Âìåñòî ýòîãî ðàññìîòðèòå âîçìîæíîñòü èñïîëüçîâàíèÿ ìåíþ êðàôòà ìîäà Smoke!" - UI_amount_SpiffUI_Ask = "СпроÑить", - UI_amount_SpiffUI_All = "Ð’ÑÑ‘", - UI_amount_SpiffUI_Full = "Диетолог", + UI_ModOptions_SpiffUI_tooltip_smokeShowNow = "Ïðèìå÷àíèå: îòêëþ÷àåò ìîä AutoSmoke äëÿ áûñòðîãî êóðåíèÿ", + + UI_ModOptions_SpiffUI_tooltip_CraftingWheelSwitch = "Íàæìèòå, ÷òîáû îòêðûòü ðàäèàëüíîå ìåíþ, óäåðæèâàéòå, ÷òîáû îòêðûòü îêíî êðàôòà", + + UI_ModOptions_SpiffUI_tooltip_equipShowAllRepairs = "Ïîêàçàòü ïàðàìåòðû ðåìîíòà, äàæå åñëè òðåáóåìûõ ïðåäìåòîâ íåò â âàøåì èíâåíòàðå", + + UI_ModOptions_SpiffUI_tooltip_repairShowEquipped = "Ðåìîíò ñíàðÿæåíèÿ ìîæíî âûïîëíèòü èç ìåíþ ñíàðÿæåíèÿ.", + + UI_amount_SpiffUI_Ask = "Ñïðîñèòü", + UI_amount_SpiffUI_All = "Âñ¸", + UI_amount_SpiffUI_Full = "Äèåòîëîã", UI_amount_SpiffUI_One = "1", UI_amount_SpiffUI_Half = "1/2", UI_amount_SpiffUI_Quarter = "1/4", - UI_radial_SpiffUI_Accessories = "ÐкÑеÑÑуары", - UI_radial_SpiffUI_Hotbar = "Хотбар", - UI_radial_SpiffUI_Transfer = "ПеремеÑтить на ", + UI_radial_SpiffUI_Accessories = "Àêñåññóàðû", + UI_radial_SpiffUI_Hotbar = "Õîòáàð", + UI_radial_SpiffUI_Transfer = "Ïåðåìåñòèòü íà ", - UI_optionscreen_binding_SpiffUIPillWheel = "Таблетки в меню", - UI_optionscreen_binding_SpiffUIDrinkWheel = "Ðапитки в меню", - UI_optionscreen_binding_SpiffUIEatWheel = "Еда в меню", - UI_optionscreen_binding_SpiffUISmokeWheel = "Курение в меню", - UI_optionscreen_binding_SpiffUISmokeCraftWheel = "Крафт мода Smoke в меню", - UI_optionscreen_binding_SpiffUICraftWheel = "Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÑ€Ð°Ñ„Ñ‚Ð°/радиальное меню", - UI_optionscreen_binding_SpiffUIEquipmentWheel = "Переключатель инвентарÑ/Радиальное меню", - UI_optionscreen_binding_SpiffUIRepairWheel = "Ремонт в радиальном меню", - UI_optionscreen_binding_SpiffUIFirstAidCraftWheel = "Крафт Ð´Ð»Ñ Ð¿ÐµÑ€Ð²Ð¾Ð¹ помощи", - UI_optionscreen_binding_SpiffUIOneWheel = "SpiffUI Радиальное меню", + UI_optionscreen_binding_SpiffUIPillWheel = "Òàáëåòêè â ìåíþ", + UI_optionscreen_binding_SpiffUIDrinkWheel = "Íàïèòêè â ìåíþ", + UI_optionscreen_binding_SpiffUIEatWheel = "Åäà â ìåíþ", + UI_optionscreen_binding_SpiffUISmokeWheel = "Êóðåíèå â ìåíþ", + UI_optionscreen_binding_SpiffUISmokeCraftWheel = "Êðàôò ìîäà Smoke â ìåíþ", + UI_optionscreen_binding_SpiffUICraftWheel = "Èíòåðôåéñ êðàôòà/ðàäèàëüíîå ìåíþ", + UI_optionscreen_binding_SpiffUIEquipmentWheel = "Ïåðåêëþ÷àòåëü èíâåíòàðÿ/Ðàäèàëüíîå ìåíþ", + UI_optionscreen_binding_SpiffUIRepairWheel = "Ðåìîíò â ðàäèàëüíîì ìåíþ", + UI_optionscreen_binding_SpiffUIFirstAidCraftWheel = "Êðàôò äëÿ ïåðâîé ïîìîùè", + UI_optionscreen_binding_SpiffUIOneWheel = "SpiffUI Ðàäèàëüíîå ìåíþ", - UI_character_SpiffUI_noLighter = "Мне нужна зажигалка.", - UI_character_SpiffUI_noSmokes = "Ðечего курить.", + UI_character_SpiffUI_noLighter = "Ìíå íóæíà çàæèãàëêà.", + UI_character_SpiffUI_noSmokes = "Íå÷åãî êóðèòü.", - UI_character_SpiffUI_noCraft = "Крафтить нечего.", + UI_character_SpiffUI_noCraft = "Êðàôòèòü íå÷åãî.", - UI_character_SpiffUI_noEquip = "Я Голый!", + UI_character_SpiffUI_noEquip = "ß Ãîëûé!", - UI_character_SpiffUI_notHungry = "Я не голоден.", - UI_character_SpiffUI_noFood = "Ðет еды, чтобы поеÑть.", + UI_character_SpiffUI_notHungry = "ß íå ãîëîäåí.", + UI_character_SpiffUI_noFood = "Íåò åäû, ÷òîáû ïîåñòü.", - UI_character_SpiffUI_notThirsty = "Я не хочу пить.", - UI_character_SpiffUI_noDrinks = "Пить нечего.", + UI_character_SpiffUI_notThirsty = "ß íå õî÷ó ïèòü.", + UI_character_SpiffUI_noDrinks = "Ïèòü íå÷åãî.", - UI_character_SpiffUI_noRepair = "Ремонтировать нечего.", - UI_character_SpiffUI_noRepairItems = "Я не могу отремонтировать Ñто.", + UI_character_SpiffUI_noRepair = "Ðåìîíòèðîâàòü íå÷åãî.", + UI_character_SpiffUI_noRepairItems = "ß íå ìîãó îòðåìîíòèðîâàòü ýòî.", - UI_character_SpiffUI_noPillsQuick = "У Ð¼ÐµÐ½Ñ Ð½ÐµÑ‚ ", - UI_character_SpiffUI_noPills = "Ðет таблеток", - UI_character_SpiffUI_noPillsNeed = "Я не в наÑтроении.", -} \ No newline at end of file + UI_character_SpiffUI_noPillsQuick = "Ó ìåíÿ íåò ", + UI_character_SpiffUI_noPills = "Íåò òàáëåòîê", + UI_character_SpiffUI_noPillsNeed = "ß íå â íàñòðîåíèè." +} diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/00.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/00.png new file mode 100644 index 0000000000000000000000000000000000000000..2243455e715372a3fc5cc64b490f2373796319f4 GIT binary patch literal 1022 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 literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/05.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/05.png new file mode 100644 index 0000000000000000000000000000000000000000..7adaa86086feef8cbefd2206bf3d0972a5171f71 GIT binary patch literal 1018 zcmVpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11BXdO zK~zYI?N&`lV^;Ew;0eR&@FVLCiv0L0s4(fftQaZ77N{FOO$W7bcmI+_xxnn9Y1}H}{_N zo$uaz&fyRU1^CMG8C`Tc&O z_v-3uhKSx|=2MH{!B{NzWMpKdRT$kcr0MDDZ;9yLq6mAzkph9hr(IoL4|;ohC9B&t zH#d8hmzPx{>SgA?DuUk#27^zAhK7{R&Q9?S07RqF!9*hQC4h8EKut}}dkYH-ceB~7 zJ~%jN*4NkPDjk`bm^rYvwsv!BYHEv!USnpn5ZvC~-L1~f&b~T1IVsK0&;Ln8Ea1>p zRqbcybaBs4M5HLnt@ifz008Xm?Y)0;a`H$Z-ZMHn`c#%>Unmr61>gi=7S5a<9UZSY z91b}Y3hBec!|ebrMK4hP|D_iw2N7|lQE^{HXaOOI2)6$~`dsi*KvfR>PoP3mtAa2I zbGckPo6TP2^Le|j>qi!(=F!nn7J&Eo_*loY3IG7}@bK^wfKSsjNl}z9h{&uWFij?+ zubEjZ31DU>q7McJ2444gJinfuoqcbi+#sUc=jZ2-6N$tfX3m$L<%#HaCX-R4(Wtb! zxq07$17l-jcZjHyna_Y{IpFa5e6?=3J7{tH5{QT#4u^>Rw~dXBfvc;ls+(8XwM8P4 zpNPm+;`ICd@%{b%-0tpfzOJtBZDvO00wDMG^*v1{lRQ2?{x<-p$WD@^zLu7jN22BT z`+r$lS~@v6I52y9dcFfdb^vg>TsLG{cFD2~r_&j*5N}r$#R~vUO-(Lb=TE-U$TZC# ziRiHf$2)CpZ5=k7O$r8st-y1t0;?`4DvTH22VM%O%7N>)Anano&Q@h)(E+VE?99ww zulMJjot;}37Z>huIQ+1oq2WW3b2^=N8HSPH-rhchpaKfB#lu)EHX@3y>$-b=eLWwI zMlX}eLy74qKHn z;_>)Db8~Z(nx=ik%xnj)%Z7-)+S=NxRaNy~ARzW%Sy{=XQmKe2cmY4e1;(>NlFEeOxS6deLL~zw!&Tc@jRfxc~qF07*qoM6N<$f)m5&e*gdg literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/06.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/06.png new file mode 100644 index 0000000000000000000000000000000000000000..59c96290d7e90e7d0c2c2724f17ace5c6fa227a3 GIT binary patch literal 1053 zcmV+&1mgRNP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11FA_x zK~zYI?N&`lV^Yv3AkYGM%of z)M883sdN_?wonl%LKo7C+9xi=AW{Tz;S_n0Xq;+8@h9fxk@j?9q9J(?TIevF`QUEe zx#v6Iz4x5+4ly(GAR+?rIsgI2c*4x*Cbm3B1%NvyW*xvT7X-BxI9jT!t3MkX8++jO zdJVmomzR@7^aeAZngo|RIyzPd2M6m7qwBhLa&q!JB6>eB!j^L+pU*ei($ey~GiP(bZLO`X%JlT~E92wi*15U4--(C~ zI5b63x|lhU|7Ig1l4bdBV`HNa0QUCwK0G-&d2ArwH8eEzR1gGrAP}er-~f=#*&Izx zO)uH)b|DZ5XafTSjR3BUZlLh}Z*HIvM8w6L^52aJO<>4j1j~OQeI|Gzpd<(WCs3}b zmB26w)9G{~l}cS^G8vnuX-6ic*`uSQ6aew~_*lbj1pq+y@bK^ofIAk8S!G%Nf{3yu z1lcST(bvozyAi<5Ohg}bcXz+$a=CszJ3ITqM7d5x_s-AHe~d<>_nA3UV9OBEy<{@E z77m9k8yg$%nQ&luc=$dMH8b-WaGL{mx7%G&R#qmNoc;zxM0UH~$mI5TJZArpLJ7^Wsw$6; zj_R^3e^Xai_qcd@z209I78Xtp4i2(yZEfEJAR7QUold_X2u?u|;BYv6CgN?fEQ?EoN2(qD;0;t`BH;kykD4NVq{#VScsJ@D+Rz^t2=Y<%v0;Dvya z9Jp=^hF#3Cvzg#ubJ&=fMN#~DXJ_Z`<>h5rFc|!_s;cT^Bj-dS;na0Kv%S52h}#MP zfXvp`*51X%Mf3Xly3pI(s{$xVLQT`k*4EZC;c)m$Rn;}lO*tSU5=HT0C=~j9YHG@K zBs)Dl)w;U6ev8NBZyJnb6{0Av&dkib91I4{N*R$z!9Op#zRwNQx6$HWXxpZB(DvI)LEEfADU#9fD$MSyw XV>-Fafc07X00000NkvXXu0mjfTtD#7 literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/07.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/07.png new file mode 100644 index 0000000000000000000000000000000000000000..423de0fb7d04f666007081bb8ce04427d5e34ee6 GIT binary patch literal 890 zcmV-=1BLvFP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10|!Y& zK~zYI?N&`l8&MGcW_QC=38bk;G++;<5dw;YEtNotV5wL{LA>PBgHRA!?;a}NTQ4pB zp$K~Er39;|){;wUHNCVaS*;Yq)@q4KW36d}ZnkE6FiK1|qB+!yAIxFj&g^_MJ2P*H znUN17@&Ita8mr74w|YTDRKn&ExWJ*3|4>y`6&xKMedO_YBr9W0(@Y^myI~lM1EBizuVRJg2_Tk~-4@7i@nZE-70l2GaT1wY- z?(FP*nTvo5MC$11SkrZ#=jP`A0BB`q6bgVE0IG#tRupAY*LBu)otvAR?*SmoRPP0J zxLA%^V_@bafT9f29*WLO{j2|mGXkeiAXjYbu~^K=WHRQ)#>Q$X{Cnp~YA!5w@BR>PTXJ=bi+2a{66xM&Pswl)4SAHmq`6 z?`Q(d%tZ8lW@hG&s;ZRDW;^@)`(swh@p#<1wYBv-5{YaBSSiDwVHn1a5TfGXB(KlA zd_G@hd3o8~Um6N!X=%yy`Fsfg-ZCfQxj-Ng)-=s*YHGTV{Dp*>UkM>@PEAccZftC{ ztd05k`OLz?!Zl|8Tt@U@=3hi~V`ymTX*!+W0df;BALXv)Cqb^jDwuiu9~5HlrSb{( QO8@`>07*qoM6N<$f(3|`B>(^b literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/08.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/08.png new file mode 100644 index 0000000000000000000000000000000000000000..0adc485ee0f074fe2c50e6fd1771bddb4dd59367 GIT binary patch literal 1043 zcmV+u1nm2XP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11E5Jn zK~zYI?N&`lV^#4@11B<~S(x~Q?4uacR0k%Cg((6tE;O~B5Es5f{1D)NqRaoG~{h+YSMoJfIuMd;N;{)BcjL5%oYHss;YXpw6yfG zqA1zH!NFX0b#J@5(osI&dtr;357!D#l^*EM8u^& zR8_SHgF$U&W#yCM;b8^9*8o61pYJDGmRXi%_INy>0w5i=kB*L>$+FC|v$Gihc4o#^ zIqhR(V=rI^K1O4)SW1>@g^Qb{=!?tFULrU4VR{9puSMP_pw|QchtSnf zyIBJ1bULXh%7v<`mTWeAY;gDT`1m*tz?n=YvjB2MSnlZPC=I}wNF+>NulHLb%9T3E zWHNW-@pxVo#at?tIs$+KjVc=(8#kJpn?nGoK(A5-aId|+{SUj{-mHVY-`d*xd}3na ztU&2fJvcbv{{H@aFc|y=KqWI@m%!?DI;#XhkpAn-OePaqtyVqA;c~eIBD#E;eLkOu z*=&BHJS2+Z?B3p9W_Nd2b-7$08N6QT?(Y6mmSr9vAAb%&D8efG`ua{~S?0;fNzLo^ ze&_S~rb|^6#mMsV^0WQ@{ai2@{1JsgWV6|71VN}21OXKl6>fv%&0eq94ghs^b(Q$1 zf3yPTcDn@tkR<6cnM^(cP&Up1j5IVfG?`2$vm{9k!0Tgy(IhOp_{QhJ+XVD_z-Wry zXtKSk4+}H1!{PXOXJ_Ywi;D}J-|zpbwzl@Mo^djnv}u~AZf|cV@Gk=ZK#j#>zn-6; z-`m{W6b1$c4gr)kVK$q!MWa!*v$HdOcz77)t1Slr;B-1a@960GW@cu_a3xEnQrVuK zp5GIRM7z#PcFW;#MCRw`-}U?bMpQ;P9L_H+EIf(F<6m5_WB{Nj%9E|Fty>!#8~5FA zefzbwwNt&|0Km-WMD$@e9FAD6R^4)Gnr4nhqurtDuepF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11CvQa zK~zYI?N&`lV`mgSCwV6GG$T!(i9hM+La?-yks)G1CJQytZUluv>!yW3p(svdXoo>u zbXpLnwNlW{lwyjmq$1Lat!XN_Q$a>t$WV6;hKi;HN%SR}+%CpUWBO8*w#;VE<}L0$ z_nz0F{-MpH59p^*J04Lvkn-ijiy) zk;8)IuaNw?r>EzJs;VXcV#Lp8v!|M--HF9wYZnBNq^4<~wY0Q6Xl-pZ7gJwdU0u4k zxVS>HRYYQWrgTR~hbNoO%FxizsiG*>VlnFK>cS-3L}cT+fb#P4!P(i_50lBH?)Ur8 z>~{M}AyGsqB3d{cer;@QY>njWB660q*Vfi1{eHh`czBq-y}f@JCD(P`yt}(wIx#Wv zQ$OeSLj zfNVAk0JlgQb-|5uJ2IJ!0DvMQLh|G8?(R2KRechV$GPXZ z(`jpHXn2?8*G7}@U*Vsg&uE&y@HTuYz^DdTWWBo7%5`M{A|hpFWj}6hZFv)kgxb{9 z^oh&mdSE0V8jY&ybUL-Uxfwx02V4@T@pxREPUl|&03ex6eq*!Q9PRDxBa@SpW&q_z z?1O^?-RJY|Mk0~c{B7t8_%;v-+zJMR?_UrA0EtB6bC=6?ePv~(Pt%M?!SeF*VI&f1 zE7%7w4G}pd**`cq_>|;r0N{VMmR}VlRS`M)6Hq97R&~<+JOBUy07*qoM6N<$f>H0} Ai2wiq literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/10.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/10.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5f6fe4762ce7ea2e0dd02c0a2f9a1c491a4f22 GIT binary patch literal 834 zcmV-I1HJr-P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10?$cA zK~zYI?N(1nlVKSDJ>T0tzr$2=pAw;nAWV0P4jV{^0+&RGK#&$HT>=X{2%VL|4m(Ll zF`GBpKoTSdtIHrH0y~H>utUB?TZyfa)J&{>Pls*rIrn}|DiG>{_w@XEf6wzh@9+B& zGsDSg(%^MRZ9|VIz%+Jps@%8rh#uACdwPZ5snx3Bir0e>R+8U)&Nq4*5BArf; zPfbl}M0BU#XH<3{2n05yl)SmQ`3=C;>I492!C>&Ml#IGn@^Vf} z$&-_lZvbcwPoUbYgU@bO?V?o{mx-v_v9gxd;3a>}{sTC@0IE;MvMc~NLL~Woe#f$` z@3~yg0#H!o=B1PZ0PpVZ?kEu`o*@Y#u1BNM_ah@CF9GN^{__I^1FyTfx^BWoP_;D- z!?-;-IG6$8IS~;tGZRrN5{W$8-``(g=EIs0qq(`+?RL9OWoKn0A%t^;3VlaM$Nf|) z^)Va{zXQ-|Cn>+*zp=f&U0PjT{Q|(NsBv+2cJ_mm(h7w_FQ6bI)ecZkPtUm5>otdm zhfM&!>R%B6T3cJs5|QTdcnCntvE*{B+1=e;0zjr|o>L9L=@m4}gui8{_Zj{(02~!j zgQiuKlidhqeyHw|QuiqV?CtFp6;g_~wzi&Rv)R#=l@()bY%Hk~B!>kNfLuh!Ss>q#pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10lrB@ zK~zYI?Up@{5>XU}pECmv6q?0g0}0Ux$#%xZgoKO@ABCZ{wxFPZ&JKS7p`;-E1A7W; zet@OH#A3z}48_JZx{0fdyT@Xuz>$e})GbVSlUu##p8Mn`=e-wICCLIT;29t>-eaI_ z+%M_jmSy#-)#^9E-g9`fR;zsm9_|DDD*(WD9OwCXJpMQujV^Wp00G*aPUpjXKHnw* zurQE_2yoo%^GG+qt{gWIW8Y70dDSQ!C?N*4-+uW@ERpHC;~^+y2L zq65GIzz9IEhW%{0Tv`C@_4*`Qvs$fARrSL2yZ|@}_ZT%d4I%*^wOXy$!0{gcZoOWA zmCNOxU>HKiLA0Zs<2V7ZFAp*z;$*YgPl-AvxPfA~+kNl*zV`e5Q+|$O+jU*f^Stkq z$>a>U|4(lqjN&_$O2q~!l}fjwHN|4FC?a;bTo&MFxaYU}Kc?USZ~zEX?cDeM8*w$8 z&E^Ymc`X2;-cF~}r?c7YovKDh>~gVK)P}?1n;;0%T&1R&5`Ic0lgZq3U3bZ^pHcyi zn$6|{cz|IXi|L!OD-p@6>UoT30V!48n)Lbsbch?nSr@xY00000NkvXXu0mjfwk`b; literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/12.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/12.png new file mode 100644 index 0000000000000000000000000000000000000000..8571053e5d871b9b05b2e1d803c03a4ebcedfd9a GIT binary patch literal 817 zcmV-11J3-3P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10=`K^ zK~zYI?N&c%lTi@=-S_g3QYa{t3{u1;tJ3zXA__`K1`%Dt2QdnQPzoIaE?rAY11@e2 z!45UFcBt4v1d*DdloH4ivq*>VkW{e&#ej+0nC~2t(%8KBC04|x2RGflyWhRL`@KiZ z3@0HX0svMx5|IFK762)Z+5qy*Y&*qwbxCdjxB=iZ5pA@CAR>1l5O^{>JA1|B@pPPJ zW@CPS{uL43V&=vl1860;#>dAWr&6iwhinAkVl*1PIx;eHLKnlbteg3KK1oCqIuJ?# zL_|V}+jDbs4@034QmNG8>X?W&5{X2-SS&tpxm+DBXfzt0{{DWE$z<-t<8eVm_f%~J zGj}Ke!!*sjl#&aD!Z!dR0Hp9E0ER*Zfbi<->U$|APfku20T`-WPAyOkR>w^MPz@&m zU?SSLX=54PlKg8q2H?m8y@+O32o8Pk3Bdl!*tQJ-${i-6^M1cSB82EjREk_F&Z_ynTS=&qE~mQu1xr>3Ur!C>$$fRm~`+BIwu z&C8jYnT1-d_K2B(9IE_GI2_LO_4N&CD{J~y*4NiV%=}5`qh-Ru!NGVsou0^Mvv-N; z0yFQlY=&u?&yvZczfdTA9~~WC@p`?xsyO9xInB%^Cy-hu92*-`G9dsX7!1CXQu5~J z=2rkF4uJ%#PBzvaIGtyKPqDJ2l$00000NkvXXu0mjfy1Q*M literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/13.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/13.png new file mode 100644 index 0000000000000000000000000000000000000000..b0bf7e29498b0974ed6346404f3ffc2e1f17955b GIT binary patch literal 809 zcmV+^1J?YBP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10=7v+ zK~zYI?N&`lR8bWEzWLGK(}8+4YUDtx*;LYuBnUYTG2>>K7J(~w+0e$^6$Gtpf@wQ$ zCdMF8Q9_Vtqb)=iffC|M0$sd~Xz^l7FrL=Ag2fMjH>@%{}+r@4M%4zI!Ml zsAnW8H3vx&Ko~&4A?%}we6M%6?+D;t06CJ6MWkE-4+H|4TrT&ly}g}wadUHXpGe*i zk#DX5BI39Jcr{IX(cj;H0Ki|huO$+R&$_N#x~_}eT3ub;3xz@-0GxHhaLfQnPfJV7 z%dxSs+w1G=<%x-jYSJZ=w}ys>-UNfeX1n-OsdRpJcJ|81$jEz=*F@x}-8r`sH23xO z-3f=ofsKugeVfd!kqkS;`ZJl#7gbf8ySlnA6$%9fz_AIy=kp!7`9;LC+b3zeZ)cvP z9{g8!N}#R|xY?l?*}6`IK)GD5WatmMBzZ>Dw1k?V{2<`BLF{uV-u);k!>1l%Th6t_5b)o`|mn%O5ksm(CGn3ewZ5p%POG`Q&I>42Hi0qO~cXoEZYG`N()qrcsWO6>A&j;ZkG&?&x`@Oxr zYnz*!NvCND0O&RqAAU9$;_>+W!otGU%0(ops_MPr;o)psTbu3hvADQs6pO{1BJ$M{ npdNuLB8>okRQLT!jpe@p?8sF$vd2YN00000NkvXXu0mjfg92*T literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/14.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/14.png new file mode 100644 index 0000000000000000000000000000000000000000..682b5e09254d6313f4226229810c89113a37e990 GIT binary patch literal 741 zcmVpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10&+=2 zK~zYI?UpfU6JZp`|L^W{mL!r|La5}V#1vG-SRpRSkU|s55O4?*aS2F7f2=R!6Lu=4#YSMcSwNS3#7Y{1dp?~<6_r34`es|y9 zQ0OX+f?RY%C z4dAL{005*Y%9F*##hvBl<)IxQo6YWSY;1g)nVGoxLGQdI@M}*55N^so&vEh z7mLN`xm<3Xi1tMZp-{*-KR^Ehz;z-bL5iNqWL}rc0NUi_Mg43BP_ruo^j zETh?MayT4*=Jk4a>;}xNnx^SuW~v#ZyiA3T>5g?Gw=t{$2G5beD+k`~Chm%guY# zzP|pdSS(%x@X0B_#Psy^IRKcNnsNhBMM=!uB%-Gh4^KLseh7dJ!%zX77bTteFJNX% z6el8K+^$pa17`sLEkM81>74WfwYuHzPXP87?FiuG+S=OPN~O}m9|npM>euV_#M07I zV=x%Fq*)^dN&;Za&dzQDa66rX1s)TrRO&4xGa=c!>@g9M4qzzz-<^nvR2&Si$7aJ{ Xz+(1)#gW2O00000NkvXXu0mjf@nKqF literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/15.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/15.png new file mode 100644 index 0000000000000000000000000000000000000000..0abbe2ccb452101acc1fdbf2999dfba35d2c9bb9 GIT binary patch literal 843 zcmV-R1GM~!P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10@z7J zK~zYI?N(1nlVKSD{l3lZU=Yf7nR*zEG3a0-L?lrMu`)qo3Q-w#G4NuYcIcq);H6u1 z5t|@`4LXG&Xn1KZs0~9A4~g(aE9@XGX@%}{-_yYY(0DAlT`?mpf0$_>GUSD4y8y+71sj8}&t%-?=KLE~~ z#SoEQrv{nRX0zQ5hr`diy1LFZH#c_!m=O^nNuSRbiO1u?>FMd3wY9ZB4u@mMz=u9R zKmTNPb@i2H8O*Y8ZEgLis;Vq6FK+?3v3CLhl=k-a&#J0QGMUT)xL7r&#RP^#P5*jO(V3Z6_R z1DDG+=yW>28~JcJ9FzHce(5*>WMN_9X*?c}EG{m71+dS8BBGPL)z{aT^!xn{>2&%w zjHwvo9wungPNC1k2^Ja8(G?L5ZUW&+enSPyQXH!#C0)X4hxu$7nJ32aMNw$ed z_Rs)G(&chJjz*)8QmNEKl9xo}OBskyB)b!dM6bU3&p`oF3Bs1krB_i)helW5JaNXO?gaql$ODOpd?R^T z)3i9s-hv`izKceqGairUn%!RMMnsfYEH;(RW(TbX7Q>nFz=qvA*N8~oKzHJ?{4ZEM V=k$+*a!ddK002ovPDHLkV1oOYg(Ls~ literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/16.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/16.png new file mode 100644 index 0000000000000000000000000000000000000000..e1388815aac6727a46442a2e3a4597ae4044847a GIT binary patch literal 872 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 literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/19.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/19.png new file mode 100644 index 0000000000000000000000000000000000000000..42584fc44870053d1d834b7947519c27addc21c1 GIT binary patch literal 801 zcmV++1K#|JP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10priJVEmo1`2d z#IvW`P*YE&3G{%3dhr4^dNX(-&_Ez*w-8|4=fO4BI=eu7hiwwwOi8Z#f+1vpMPT=953NnO`p0r+Mvmz$fL-$f!3Z#W#@7eZ95 z_Q&J#H6nV-%m-%%Kt!!xuXlcAWTaD2j4FlgYd% zqKFj;DF7l8s;bV<&CT83+}u0>PGXliDzb02B%Z0QjeebzMI; zzX0$YfF?_*1$x;nTCdKCO1c!%*lPfDLZ&z1WU;kmb>3c9ZIQTK2&$o|{ zj~h;>Q+k!Nv$Mi5jN?=)^=xNnXQ{SR007J^9RMz?su~B-A@K?{QCMjTa9Eg zS?cWU%mHY%I>%B8HBI}FNF*L65{XAdqiHRj5x_2feR8_U7sj0~w2m~qs+5zON{U(S{i;IiB7AbtOSZqNE;pyt?x@C2a zT^F3lV)IU=@Ax9GaY*{B9UVz3;`3 znVFfF>2&%h>^jOyp-jcQ(%;{o1>m!bv)NCIqNsg+eP00xS&Z~8s5T-J04^}|ah;U_ f5nW{FLz(Xvbvv2|WAj3X00000NkvXXu0mjf-6dyM literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/20.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/20.png new file mode 100644 index 0000000000000000000000000000000000000000..a321ded753758ebe95a04d66797b78c842977777 GIT binary patch literal 1007 zcmVpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11AIwD zK~zYI?N(1nBWD!|(9~IN=sjPb+yS6uQ5*w)QX_4wGp2 z&d$ysMD!*zmt4q$y;hSFiNvQw^dU1h+5!L&o|u?;Ff%g~bjxmV zaPZFV?(QxTz19m3 zs|3tU<#M_I;NW0neSQ5$B6^*fuW!iZ(b3VgVHi0oNHUQg&?@^&pc+%hBe{ES--f`@VQgCEs zgwuJym0J^)o)92^spP;?QO|V!ZQWV7p0E(i>0J>ZRcrg-*$g(WUs;a&O2&UkM zm|ckebv*NP;CTR|9v}dc=sw5Od!zNcL`0p*5n4`D$G-;vs@3XuM@L7RZQFrpH2Q(2 zY0DypTrT%D5#1MD*^O*A`_t9c)p#b8>6xFO|JCh5lF4N3>FMc;X_{#OAZ7*;NnWq_ zJx$Z}jg1Yr5rSn|HBHm*l}e>#rxHZu_jpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10=7v+ zK~zYI?N&W#Q&AK?-^U|b6A5MP}v?IXBK8|hXk*r)|v1eLT93XwR}AzOzI z4mK_w8c6UJG>U^ruyk<9RE2^=zzbHS2?gttiupMXwi1&2UW~s>FP!C`zwe%N?l}j{ zOil-YLPSGE1PQxNM6bDn5dg50Q9CHAhGC?W$>f-(X>ELFR+g5QUI4hl%ykV`Jk!fLpB~0O$h)15byChl8uDt9OX#=K(M? z19-Ktun-kOEUK#7mV$b{uIak&T3cJY8jHnT0Inar5`Z2I2A^j#nX{HnnSBefJ|tyWWr zh?u!y>!8CI3`Qc6k`SUHgkTvZ5{c^Q=;&J_I^Lq|9UL6YEH5wb8isL+h|twH1ke`_ zhhOTte#|LCilThZ=kphs`BTfoz5uu#jYf-=O2z7G764F8(|nvtrA}>bZtj_;`N-q( zlw<)cm&<8pelM}nGd@24B$-T}o|~Hs0JzcBEb#e!egH~uZ!hia?A#-wf=td~5}uiy zoIL6G`;Ue~p^5eN^_$eqERgtdp4-28{(B!d1mIKy%{j;ZY9^KYo%*l?z{O%Qx3#r( zEtkuArl+T$X__V*tz0M+VgMdWKz!NW-frLH+AP?2LB;F!KA4}M-?i(4LI_@2S*Z}w zkZh6h`Fxix%PPg=@iKM0kT7!tKs1}p_VoAnpLe_6ZDDRS8m@FYohPC<5`6}cotc?= nXBft!oge(8wOnK7uQJ{@9;?pa1`@*t00000NkvXXu0mjfJ40zB literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/22.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/22.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6270050a8b428b5acfd4909439599c57222993 GIT binary patch literal 1005 zcmVpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11A0kB zK~zYI?N&iZV^fakf;vtzR=&;0`MF(8G9*9$7rW_f=EB?D z`_4P(-uwQ2pCW>?ktBe70B*wEeixBTi&*)LdH`=*gjE24NCm0AlHBcfe=<2aIo;UU zXo`-<0(ck>hgbG5&n+WR zM5wB&Gaiq3%+Aj4lI#!>y&^6oza1MJyW8E}{i#I-96q1#VtsvmdSqmzKr#vusagPR z7RwV3ho7g@X<1lUC;)I6u_Zh$@Ctx0_V@R5>2z9pdwXL5Y<7c4lzU?|lBRwWyZ{iR zzto~iKg-#^R(m6$<_?s4WoB0X|AMcHRS6*ZmdE4y+~sm9#*HH4JUTkM0RSf_Cn|uN zOG(nEC`xa0bMw0jSY^1?_C;KBI#_;;aD=#Cj)L@+TiQOsmAJBdW%k%+t$K(gNF^ZnS;($WUt z$_xwu#bQxUCX*kls`{IOoB%rd`ud(Iit=x*5?$B-+}+*n7ZD8r>?G-MIKEt7UcOIK z4+evKBJwM0zhyZ;KmSEl)t@RKlaeX@{r$1Ixw%_wYin9(XJ>?D!N{)bx*Q)L&xy!I z*=GkpyWQ?}xm@)C;B-2-Q>oOHiGY_XYRLh>*3i&U4**`Tx0ual9|L%P9emAKP_fTc zz%}jK_}4xM-Uuk)0b{>xB+Ytg*;~VYTWKzs9Z)sE>;Od5v>$eMc0MHOZf$KH4+H{Z zX5fQ^gYQXxX7Xg~dwY97pPrt+x3#t98XO!vv`9epdcA#TXJ>n_go{Xdgbw!f^h6_( z$PF`c0LbNXS}+)Vl+WiQ#!8TMIUJ5BOG``l{eHjK>WpYKdNDIIb5}&3mMZ`eDUw`D zBoeOG)z#^yrY2MH_V)HcKA&GUYlDdVP4eOV{CsS9c=#PNe4$WKHa0e<0Gw4-pdyR^ b{kQxd$`ZA%u^ZR300000NkvXXu0mjfsTI;> literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/23.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/23.png new file mode 100644 index 0000000000000000000000000000000000000000..e18db290a9917e8cba45a57ca81246f9a09f3f31 GIT binary patch literal 967 zcmV;&133JNP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H115`;w zK~zYI?N&iZ6k!y8-|TO@s|T%J1@R&jZIDq2qLhhYper3B74wji;6fgR4nZg`A$t=N zK|!R@I*2F0C}lHGY-X18&6X6s}ZAN-g3|L?u;z4!fZ zelRoX4S*n`OJr_IB8spP^al$fx=2LA0{?-Tlll*b4g#=OR8-9S{r);31dM1^RWUX; zHV44R%&IYXSy|cRKp=3pu&^)-OGGp?GqVPuiJ5<85zyFQ>+0&dTvb(7XpsT6w6xrb zMx#Ff+&7T$G&eWjt*@`Q#5$eM>Tozb3*dH|M1}w}Gk`aNKwuymjXshjDJzR)GHG|a z-6YGhudlCx4iK>%K6W-=}!0uf0j z%SJ@ELZQ%>qA2Y1`92bn^p9AHh%StbjKmd1VZYzMo5p5|Maw8lWLk?%#rHR?hF5jx zGS!uGIXntGCXl58t=DD-ZRNDT;Bynuz*kF4OK+N8!-Io^)0>-{Hjl@{+uPf5G6)WU z+vRdSa5x+%jM!8vx-;R0IGeB_(Pikr*bTs96?Pe?o2V zD}aX<+vm&6%dZm=xm>POhbmwZC+F15LBeVhntuQ9bKsbOUIY3bNdT$6FT`7VMp!onawF(&&MiIUEk(0}wQl001FGV{2>c)BOB=(+A1g z+M2VmvGG?V5_z9aI5P)J(eZkBch~eumITl}Jv}||cDt`gQg#QJS(=@leL+MqGyjW=i&K@Am7Pwf p)099k7>wwHAF6;ZlOuhW{|4ppoCzeJI=cV>002ovPDHLkV1kssvI+nI literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/30.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/30.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7287bfb32bfd94d2f96e4dadb9f35c31023a61 GIT binary patch literal 1021 zcmVpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11ByvR zK~zYI?N(1n9A^}NZ}toOhtb^~x2~|**n@{4xDhS3kOhm-8j83QQz&G$D4r6;gS5GM z5D}y#Y3xxCrMp;yf{27&JZXjEp`aLKvB8l<;_8ftx``9h-FZE9$9|6Acxg#4dGNvT zecx~1@4fH+9uJ8KEJMT(0N^r+O#^^u!~<-GhztO(Ivl?NfDJpIao~>D}mAL^$raV4u%y) z@jFGB$z*0uPEKwj;$uD%M08hFR6OeG>G`ywp+RxN$K&zdY&QD}5x=!ap!FX_bl2C{ zC!3m@Vj}Rt!GYZ0-)|7nrQY7&>xYMjzggt#>gr}vsni$K)6=fKy}g%=v7#UY?#jwa zN+c5Afq{XCOG`_4iHLw-0Du4>36?7m2qaZiB~?|arl#gQj=a>-(V?rVO6hbu4**w0 zcmVh+lgYeLRh9bs`qltIBBFn5005wr)^kOMh$!0UuW;X{y+#E1)BDl|KYc6qp1_$J zD7}@)oc8}e0*EO2e7-M(!Qf{ChiDi^Lq4B>Nkq&rjA#6zuIo7>^6&2M76IT-2Vc3J zogJ*Ltu-}Gdk$7nTJrOFJc(2)m9wN~Uz?koCv9zQ#pdSbAD|>5PQI68vDhC~RaMua zBu|0FC0Um5w6?bX4gj*Xf2IaZ)4WJ(RLYd-IXva%<#JhBS?~fpNRkAMv9oxdq0i@Q zk3=H(B9X{_+j^iV%9D+ajr{uh`s;8w{55cmsHLUlsj8}GGMPLAfQUnbi%m{W?rm>x zo1LAV3l^SnL`+0nI6gjJ5Rk_}An=nc%XI(%Ua$8<{?PCD2LS*>p%4Oq?2v$}>gsAj zL{t=|x48g6b^@tt*x!c z76~LGYb5(|Wo6}-qA2A~VGa!q8OzJdH#AL4+eR|x@pyh78yovP9*;YYWb^a$e~pZc zJkWLht~E0-fPdtNh~JNokGHnBw;zkZx~{X;)zuzN(=v9s5>WvWznPkvnhAwMA0y&9 rITwpXHak1}hIttWMm%w1Ujo00000NkvXXu0mjf(A471 literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/40.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/40.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c5e342f13cf4869f452225b85b6dfae785fe98 GIT binary patch literal 1003 zcmVpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H119(Y9 zK~zYI?N&`lV`mgS=eluj(M@R(sSYBBDq;#{u%HCGSCD`b!Bi-enJJ}z zSXu>RH!2uJXf|!I%uEe}#nOck?8eOqgU?OIm<;Ic-NVgV#s3BY9mJp%Bs6l*Jh>H$2q3TjHA0JuZ)D-p??d~dql?gxQD zpphia*i0s)OioUYll-=bwUMNzY2W#LzFLyEMC9y6$*ZfYKkM%9z8emQzc%^onx@?w z9v*(Txw-k8RgBHe%`f8dc$VZ3B9bq5K=t{2o^(1LBl)3-q{<{`O-+q|VPRopYisK) z91fo&*4obkyY7=~pulR5kctz@Rr~2-!}|Hg27-0fLh{H2L=YxhG9r36gmRn0HBzT3cw$W#Zrc0 zh}Y{~20)v+N}J85SaeURsHm{&tl9Eq=7RuAXN)K?yHa~a;K~Wu0H7d1A|gCKKCT0B zlcZUc?5C%vHUP-yFWfNf?d|;oplWw__XI%JBH!b9JbtF@dM=ep?Er=AMzUpOWaQ^u zE_cJ_ay_lBt-YXP0I;;QRMpwpc|0>SGrhjPe!EmTNxHhay6$akY?|fBsrL2t-Jh74 zsE$M;zXk$<>v;C?lvYmwy>oMOgD#iLIXE~tP10vGCHb4=I~EPl0)fCIP1AI@+ua%t zhZO+1qEpxPDgbae94Y`S#j2~Tt5a1~RUHn;jdL9+A#riSo>frx`~S5ozlN^}T$q8E zHIr~Dh0W>QFNISyxh#QPGMTjMSUwhu{kgxt-w};QU+?ele`vLkM5EEH$KyHL+1a^& zSpw9UXs^@n=YSgTdf~larJ8%EicLv+DBl^7n~E;>Y53=S!~TuZhTsh3`^p Z`M<(*k&VEA@(ln0002ovPDHLkV1lm3;kN() literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/50.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/alarm/50.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c8b6a917dd1047ee0ea499866276863c2a770f GIT binary patch literal 1029 zcmV+g1p51lP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11CmKZ zK~zYI?N(1nBWD!14JXi3#W=?Y#3k9C6xpR%=yA#019U@}eedN8qZoLML>-OE0Bm-*(s z-|zkT-usA|kryH&0M`MO!CHP{<};hKypK`tX_|I>YHI4^y1F{D zvJM0SzY@{g%>3L2yu72MBRD=je*HX_%aTkc<>~3^M?`d=nX?xJh)60gFTc~-+4-Qm zySvyfy88P1vXzyU_lRhrFp8WHMOD@BM@L8BY-wq!vh(5fdOrz=!+#RdLuSqr0CG4S zA1*I1e`Xj)>EhyIy1KeLWn~-+g}&L|-k!*_F94TXTU&o#SXg+==kpaAhVeTQWzF`< zWU{omx!LII>T-^ajeVr+`WFB|s;Yi1gkT{AH#Rm-0FVJl7D~(vvjUJuMn>X72=@E^ z2>_aftqkC{uIn)&1P=}l{s@5bJ#bMlB4PkpbBh0=WG%8p01AB)a?D<;ydqF!{=m$H zi;`WHf7u(>1PsG?8jr`HXEK@MR4Vn3+wHEm!ahAceN03FbAtiE@$vB=0G#1)I0eA4 z!Tas#=qRnKY94L>|1aQOS@ra6w zid$A!HTREHRaJG*wtfI4Ng`R6|2{V{bZeUS(Cv1AZdRAe_2tmeP(ld7larIr0LX=dXkcI&_yB;jwzl@lwp3Ns2>_a= z$pGy3iOc1370I$JYnt{3V0{ZLYml3e|GB*MIq-_Wl^!4>J5nzsYw8in!VjTf>ms)q zFA*T3oBjR$-)WlWGy^cRba;5EoSmH|bzOgg%d0iJv$ON~d|PlhneFh@{W>{l7QduzuDH- zR&D2FZf-6;KR<%OeSq*pGu{QgTdfT9{f@Ua#8&6&+@+jl~wF+2e$$H00000NkvXXu0mjfAIamM literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/1-2.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/1-2.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/1-2.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/1-2.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/1-4.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/1-4.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/1-4.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/1-4.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/1.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/1.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/1.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/1.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/ALL.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/ALL.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/ALL.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/ALL.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/FULL.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/FULL.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/FULL.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/choice/FULL.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/0.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/0.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce5feac1ca9bc08fd9b08cb58d2b8210b14d599 GIT binary patch literal 861 zcmV-j1ETziP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10_sUb zK~zYI?Upe}8&Md?|KGdh3?xXYMh+p?^^fR3g_a~RBAx&G1T0t^9&$6~QZk|g=PXhMifUDsa{(JN-Y@Prak5Wv{X z%*?Z7GTGBkrmpLA6B84Hh?beT)C6q+6TQ8?vyn*TSB4HnQT*X>_^DwSwT9x74J9H! zfCtml)3f8_<2N-;tL^RWm1J2qy@1Rtwzs$aOG`_ELZR?N(=>yKR+zbp#zF-Hfxx?5 zF2}iCj@Q@M4FDQ|D1dt|PZWSQIXQW5^@+#hp8*7!`O2JLUzD!^vH)r>LL~qa5!oX# zO;fVon^xZuCV(03E*I3W8>4w$w_g4f4{V|v-8>(#?02P3IUi>RrMnP6@ajE zZcjsyswm2buCA^WfRL4Q4qpf%Zgh8dcLE3ipf=7An}*jJHNea^*l8#h)G!QVIh{`5(KIbQKR-{YRBF!e_qRQw^ZEQm zp-|wht*s1z3eebw06;_m0QZBz;KJ(aYG811u+s}@#o5_eHIYaZkB*LJi^bxKb(yf` zGjkch+fu2N-re2((GCaz`Fy@|e0==e3B01z{!qW5J&Z=9PkcU~>;)vEOI_C&PESvp nE@(~AMh6*n`)e0vx2xn&UC?2=4^#_;00000NkvXXu0mjfJ`Iel literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/1.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/1.png new file mode 100644 index 0000000000000000000000000000000000000000..9045be6c2d3d153fe26fe42a7ddcf13203ff4096 GIT binary patch literal 461 zcmV;;0W$uHP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10a{5! zK~zYI?Uu1hLopPFzjI9~lsGsEzCmdpL8nU>hqfXG*Xmmo7rD51_ZeKebaZibb+{Ls zwV*@6%{DgA^{axfSyX0w?!#yG8Y7J`PJp8&1l zaA-v&y8bbViHO9vNF;RQ*h6;+YMpbkz7Hw_KPmyv(lj-Bo-aqE(Hv+4^5<__ffdkd zHk(gC3aF4Kwx-8QDFNnD*@0UM(CTzLZ$(k8vMhTCPJv{bDOCe*r_>W(d^ z)Nf7KBdFP}=HEmAA8O08-01L7vIU;UxBHUkc^P9Syq>5!bR{CM zlgZ>pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10;fqt zK~zYI<(9u|6JZ#~zu&vuVUsoq652tebHuG=i*zfUnn@9_C3I-J6e}7t2~JjMz#m{5 zaH}p(ZvF$E0=3XWTe75w6r_*@5(&}fY95DPYP`!`3c3^@c;I;N?(;s+`@GMWhav)} zk<!*2q(x3sj>GEGxV(-gxn zN&tpL#9b%=5Rn$il24QhfCzx|G(|+|KKF&%AGz;ZH*ZpUf&F&;=k}jNJqtzBuK{TL z#h^B97(mzussM=ff=PD#BE1?8hu^1CsU-Z5hr7GG+R@QbvtF+&o12?&0az|5$ze^? zR`dD%tz;nV<93LN_&d<-IR;xX$R4N4#IsF4lGNkMJlXyICSeA7mK@kyYwOSu5 zmCEa`m;kn*kkoWt&lU=Whm(_&(QG!`2?m30yL0;IPIk7pw?FUi@81@YnsYY*7#bZN zEq29WV`HNYAO+w$fNMTJ(haQF13hr3%vAw=1<-+qdFg}aJ;j+|h@Y@{+2v`|%LDZ* z6mcd6o{eyk>N_WmaR3c?UnwE^#W_d-zdI@b;BF?9c{MjT7hYIc;Kam)rK+lLM-_|3 zPg`4Ciz4#P1+_oA0w5iW#n#r>*O^EpM!bMstJP}l+1c3-rBZ28L{7Tv=YF<} Y0^8I?altD^=Kufz07*qoM6N<$f~>7xn*aa+ literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/3.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/3.png new file mode 100644 index 0000000000000000000000000000000000000000..6768c4540a0b27dd42329d989814df2c59f5a3c3 GIT binary patch literal 718 zcmV;<0x|uGP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10$WK$ zK~zYI?Uq4n6Hyd}&v|cV+O$cOiXcivmx_NNe;^4iOA)ik&~%|R(C(xztc!|9Xcfkl z2rB(6h3>Oxsf(#;>>@3tEk)BY9h2)OEt52vv`}2A7w%@>yWgBU!#!Mz2!cV<1Yn_m z_#$%D?ZD^&4jG0qold7`wAQ*8jbw9eZS51uXCiXg6WUT(n46n>lFeo>_mjD?u`y}e zc9Z1uPH<2uwbnNiiG=D01b}EXsz*jf9ygoKI?0zoFoWNeWIP&;F645#tkyaV&Qhsl z7K_EY=Xt77D7xm=cVxh%GAe+3XZW*D6k zM8qTcB}AnH5FsgnnzpV^L0gxk+j9VD!Frw_zxBf7ABT4RQ6w2s!&aUhN^$_em5@RO z;Hro)P}A%QB{@7eI5;~xIyxCSorBeA`tJRF9rKJx5{8LbpmQw1e<2a8}sZ>0y zJpiayt4HJG26;vAetbz7yD{w54`P zDK(wRWM&M*2wl)tS64r}t~=XpL1X7cUc@T-8+Lm(1qd-46951J07*qoM6N<$f`)`Y AnE(I) literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/4.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/4.png new file mode 100644 index 0000000000000000000000000000000000000000..7a42a65a8070b591615c3b4d80d659f779fa6d7c GIT binary patch literal 708 zcmV;#0z3VQP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10#Qjs zK~zYI?UpfU6JZp`fA6k$O|6QN)_|m>Vm2X@Qz;pAC^cgdTH0E` zo$>MU*FemaCCttb4GrZBg~H85BH>t;RjWI!){~Co*i%zeDd3vPCajJ(GMUV+SS)tA z)qf0X>MUWv=2%s28{c;GZ|w})ee3Dq6OLYRyDsS19Sx|6)LMK4z*XR|O`K)?4X}tb z&efr{?d|QC%gf8xCnhGM`Fvio+3XA3wmYeotgf#1R4NsJZ*R{kl}b;512FH~{3!xt zlF4L#adFWe85z0Q0SG{~T0NMXoBO%7we@UgXD6qs`}J!8psL@2SLJf~>F(}sYbn~A z@B11A0j}#F{#J@sT^5mZuIt_(8ymYPB6b*1Rjo>;(z~>@^uzakE1S(eTwh;*q^bvD zvgUH6t6}Q`aC>24;hX1q>Uo|{PfvfsNMGBQQq=$m!m>0fwGU`hOrwpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10;owu zK~zYI<(9uoTTv9pzvm_|F{vQ|i9<>(8MJp%9p zK+lEC0Dd#`ku_mnpP8+u?E(1d0R=mi4jkOKC}FpQULgi=xqAHPP%onh01*+nZ5Zf2 z5uI6bBLEWcC@CW9064V5&5ja6JT8?=Z!?)pv{)=6kw}~pk!MHMYPIi;M&mv+w{1{k zQwTsYnM}Sel}ch_Vj}DYyoiH?13jC~evwi>?e8qpC}#c(V6D|^RhZfJ%Kg#pb}1MP zX5#Vqq9N+C(!OhrL?V&TGcz;y;9VWGy}cb+Sy?&JG)>IU&%csVt}^o(nEBGex$6-C zw>?%8K)O&U97`!#O38C`bH4x#F|)m-3@85((V>S*0bmU0^Woy0c`MgC^%^8bRk-GF zPMh8wsH;(4g9OH~xe}C!ZsELS+ztu=clz^0WOkv`3ndzh#Xii=&OQ)Acy`p*)|Rrr zzkj4@8da;+PXNvUOPdl=P*IfCN~Q8}e0)6W0R#Z3s;cMn`IApF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10?$cA zK~zYI<(555TVWK(|K~~WH3_!X)?`RYg$(@$LZ`Tig9HLyMC7&zk|5gHic9IxHiI-S zEhHIi2Rro>bhIESb!d>Pw1ec*f&uYnxS?8WUQUPJ1asd)?Ib<$EcZF*$9Z|qxrdk; zW+5U8fNZ(2${91)%pbirzV^Fj!Z6OD+PdwY8YB6`luCyr1e3J4(1{3;rIIo0f-Lgm>ERml_V*- zw6yeeY;3G=Zf=gF(P+)%@i@YXsJXGR@xE9rPBXJ^2la(Qp$}VITXz6peSN*AD9Swm zp8+%-xD4PsGas8T+Tk;^xoF=2d~tz-?Vb*7s&DdyoebSXbXWO%`Ol$lg(3h%MC7E< zwfaOBBCmQA7*&Fql6ICnM~$cB9Z8unVCU296lo=*N!R{i=TFPckeQD z#R4^y`~c=7k;s!wCew_?VgV;$OAZeYYvbeN?^IPyo$svkg%Xk^UGMMjr$(dEjRyc| zG#b>?(~}4WgK5Jl07g!UNRnkaT__ap4-XGZi;Ih%wY9Yqx9|bb{{Ftava&+Du0Nig zojoO@m&{y;5xy@J3Vl>nl~q;c)z#HA0C4~j05@$;1VB8QOrErCCMG7n0`M_&$3QVp z`3itC?5i&T+`^yv(6Vo*@D|Y9_U2}3K^#>)Vyg70?^_7qz2D}iKwmD zg4U0Yj`F!&?)K#5p$H{%Mu`4cab6P(eEp5C8xG M07*qoM6N<$f^SN0;Q#;t literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/7.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2efdc4712e4a80ffbc63553319ed1052850a70 GIT binary patch literal 625 zcmV-%0*?KOP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10scuu zK~zYI?Uv7r5@8s}zmM)ry-deFebc!+TO z1ERyCARhJ~STe%Usl60P9V=XCz8#zybagj(?6AQ;FbwlP51;uC&yRV8Bt%32XaIt% z*_5Pn{?Ksm4*|SLBogs(I2;lY`)@Scwto+Y!vhidKyoSGgMI_>Iv$U|X*Qepwbr3c zWLB%y-Fm&gCnE0`!65)}4~~1i-m_Avbm}z}ajTYBUnE81uFn408hLxSz`)7#x%|SbUJ;P zBr=&yb2J*2NKTFO(IjmV`3T_CB|;4VQLS~(6#}Ky&Z2Y0IF~=Wh&Zo6tdx>x8)f;b zb_2a$(538)i2ocE>Hs+DcDrXJIT#FnP9~FM|3xGNT>x$Yc$&>-zel6d0|2*u-xg2- z5Hk$p2yRRN3+TOAEOylCbbb|!#W8?K@CH;spaI~yX_`MQ%i?%EW-^(42|$zFD*HQH zYX_Lm0>d!wc#dmVr#I051j>sXL7@b2+VA(*uSr|9sRpoLE|*m^$KoBt^J#B zB$b?s$h%st_E|*UVsX9(Rl1;90Z1sN_5di7SlLj5n7fLGyd~`qe@Mj2bZ4zr00000 LNkvXXu0mjf3Iz-O literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/8.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/8.png new file mode 100644 index 0000000000000000000000000000000000000000..923e55f9fa7e535eaf11c515ff8053045f0a3dfe GIT binary patch literal 818 zcmV-21I_%2P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10>4Q_ zK~zYI?Uuny8&MF(zj?_n8mvU3LW@=q+C%Z`Rd3=!J$Mt9h?gjeinj66qqNbKQfQ+^ z^pG4v{|Z4w+G7r4dr+4m62TWuN*k-$WO_-~xY^AXq=(WDJXqfB`|Z4$dEY)_W|)nL z6aZ?4qtdRKIcJ`9TL3+(s?PQF^gI(nxa?>|RM_9&e@8?wm^o_;B_fXyVm=%W&kqa? zc%8!3G;P7}_rnY}phQ$FgqUk@Zx1##HC5)s!s_bkgxBkx&E;}B5iK+Gr2!=(x1uP4 zP$;y}*VpHnnVI38ot;aU%T*0di9|wKUtgzmIvt#vnz|yQFf;2Y7OJMXx%s1}X{>1) zN2AdkfFS@K0G?Qk4gf=eK;W{pW_Wn`3xFDCzS%xAm*D3X$<%393se z@!;TKeJmEEk&%%P<$Y)sZ6c9Sj*pMOUtC8U<8HkMDNQXwg&arVm#MT(;M8X6iXpU*q-004!8Rc3AkMNw7t z>DtCMeec`T?{6cwjMF z0Q65xOk|w|#jNrv07=+a|6%#We?j>Rp?_9TP&~I~i`oEugMCZ2F|z@-6qK{Gv-gom zcF*?q w_6D6UXnT8mZx0U-Uz#sy70}{>J6$Dz0mGSI*(>acqW}N^07*qoM6N<$f=4rQ9RL6T literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/9.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/9.png new file mode 100644 index 0000000000000000000000000000000000000000..9677adfdfd4595d84b67fcc8cc99302b9794d9a2 GIT binary patch literal 800 zcmV+*1K<3KP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10ez;q7Sp8(h(n;MLle+BA+5v9OLE`o;7y1o@q6gtAI@^#y}x_TyXTxs z%nSe^A{PJ!CsUD`#X+Ygfd+tAot>TiZEbBD5tWXj5s}#0*?B`mpP9K(0|nqTH#hrz zKHuQ-^0M01)pe|h!{P9tX_^m-=u{l#`#m0y4{UF5+o4d1W@cuDuImkf%uFjQEBe^jSU!`%K4{Y0x zFtejouLA&|&*z?=o-U1#kG}-)yX-$80&s0=YU=sW&`=Wq#A316Yinx*0P)I!c4~-3iu_(zC#}n4=>mHGs@y&i9V{I;01pw> z+`bIPUG1peU+Mi^F86C|YwLPnU*F~R^>z6D{}=CfX-1>b!qUqI%d$i;7%ZkzsmDTykL5|V4=TYO-QC^q=jP^a>bg#ifXqy*tEQ;HKJSsU zMD*p5%oPARx7%GwQ&rWb*T>$?~aJYLyeuT^G>*3tI2(Iun!uWHvW9GsR-D zcrH-cAgNd^cHcD3WT8-Sm|3Y_aB7o5T@40<(c$6YpO9^OCTJD7Lsiug04g)rPN~y~ ehzNjEZtZ{A*MlJL54^qr0000tZ~ literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/C.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/C.png new file mode 100644 index 0000000000000000000000000000000000000000..7594d1906717c3d2060a4a7530d68f185394dc4b GIT binary patch literal 694 zcmV;n0!jUeP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10z*ke zK~zYI?Uv7K8c`I+zcc=+q_qZds)A4u3|bWW0@jr-x)%BdUF(!mkXf{Dx+p~j=?fU> zDut@}1a53L6-sB(jT<+j#9~s7X6AHZ3}bZENz+|ExG>DU_s2K)oVn)^GXnsKhyb_% zXfUStq>|(QCuYbs7G8z#bGV=@o1pNY06fLDvNyz1L7lXmzY!_%G60tj-&ZhvbOz540 zh-O}|S11;XBuSDj9*>_9(WW!jDwWF7a5#Ji;CwA~A-CIYPbQONS(aY`P+%Oq3jjX> zjCc`oBj}}T4Zsfo#{g8LbnPg{N=I&oweKT zudP<=WIP^E8;!;>fL~_QX>N!4Y5;iPcDr9jqtR~wLI4E){I28rnOam;JrD%Jg6%)X zcBcUDc|4xC)oS&(qA2HyM4|=22Y~*?sVx)=J&(m=4;>DNJ(Ws50q__%$dIKC%&fnd z=_bGx=xyl^di&az-~s^4yw6xKQ{_a{Gy)LCy!09tJ|fz!@b!AV(^{=&m1X%O5iyKA z6|GXK9CbRK*F{qtWO)bY+}$UEdynPmxIEna}6jGt;0=CX=NGO%Eji&RyJH c(@HD(7s%;2u(l$XcK`qY07*qoM6N<$g3wGY&Hw-a literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/F.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/F.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e3cde5ef0ca20601c2f253e38f4692ae8d7c50 GIT binary patch literal 710 zcmV;%0y+JOP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10#ivu zK~zYI?UX-g6JZ#KpZA)Siw!BINCt5VEk&0EN^dG18rMP{ge(O^7KeZ>6o)`NSqOEq zSUL(>3Qn$7P=_LDLE=!*RM3EfU`r}Oo8IMKhkErAlAfvE><AX>@RK@cHQIXli9;B^(ZiC5Wi1 zEG{m7E|p3d;Ek%f0EYiiB9Z9JWHO=I*;(6l-9}rIPa?wn{QQ;v{{Fl8O6N}>!!YcL zi3!6r&Bol^oSo0-U5-o9k-N0C^l^WGe*rjb3-th&Wkt&6@?koiehgGk0o%Y+pz5XG z4tk@C)t$Y)z3T%51LoG&mJAOM-|y+^`5_{mhW}`Ld;5`yyj0ctNpLOJ7f&XW z4~B+@ZjOwMkj-WzL8-2-t$iyNi?@MiUc};m3?dQ%ZpGvAhZ`FkW-J!#4TA3O?$*=k z^m?sUyQ8WHP3enB2)I!w6qd)w$9wbnJTo&hKSe}4rSH0~tgf!UuGMM<)#jarsfu2d@S^z`(5;2L0f|GW8`ps7^q-PF|74v+*wX92cC sF99XM`WK+8Huej$9`=Q;bs zWhNg9aBV&*DEAPEW~=>em?`;zMdE_Tu0PLr$)7x@fB)C+^rrj=ydA1{59%LSrP1Zg;i$+G8hX{@`L%}EhuQWl%l!3p@BQngwP!xp zubP0l+XkK DYE*i` literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/mid.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/mid.png new file mode 100644 index 0000000000000000000000000000000000000000..c08ee216dea13b7b47e1ea15c8eb8e5a2424e793 GIT binary patch literal 442 zcmV;r0Y(0aP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10Y^zh zK~y-6?UXS~LQxdQf9Jjz^rWd=ij)UJA=c31?BevqMOx}(G=_bT#<%zZ8d_S7Tm&aK z--~EzDk(w?JPqDVsp=>(SwswQ zkj-YV%jNRD>$(>rvOW`SFDSrXu~>ZUcDo;O9BUYcgH$SY3An0?s!oyx*e(7J^NPtBKzh$b`= z;YGE&7yO6+BrGDv`nVXj&<=0{WJJW7q328qf*|NO8jbf_t@Z{S1I~;oj6KVgN~M=x zuQ!V0SfeP?N~Q7&>|_7EvFQptwcG8hR;x7x=yW=RX0v$%JWQ;abI=3Ma=F~CG3FfD k_|ZW-Yzzq#X>|^M0?@;;|D|lQ-T(jq07*qoM6N<$f(vTE;Q#;t literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/slash.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/clock/slash.png new file mode 100644 index 0000000000000000000000000000000000000000..007ddf461fd26f21de6bef991694fa70235d82e6 GIT binary patch literal 841 zcmV-P1GfB$P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10@g`H zK~zYIrIx=>Q&AMhKc{_t6^sdm;KuNxDG)FWY78VW7$O}>Tp(d^AUG)_2qAVLF$M+_ zMiv%`pnm`*4p<~&VhG{_DUUZe8DvmnOIzCO(7xtbe!W+|$z5*F`{dkv&i$SzN-3@) z5%B>&AgGl33!q&Q7y_PGS64@LT@Q-L1Eo|JrBp==@awuhwYB4|}>YwI`DG;=m|baXTgJOsoultSw~TUb~~*}(1X?R0Hz?HfQV#d(C@ zj6@=bHqf#x)!*O$2e@r#=?MyG!C-JU9*-Z}z}3~&l%{Df0snuo9*T2kXlN+q%(Any z^E(hKk9XTr0(ABD^_4bau~>S2eSH-8RUYgXs(=q08ykLrY&M&lo}S(U-YTW?r=#89 zX`rR0<)F8>_qSmfpMd+$;y9OhaVZgL0Db~lAg9jx*eg`d13BgDPDMlj+yF0xN0)Mg4a1miYinywBoc=r(x{Zmx}u&_Y27f4k9&K2CzfTYXf&DunmMQ1 zmo|TK<~$x58M&wHx*wpuy*&qXQFsKG>a07x(b3WIs;8$%w>K6S7ZtEh;SqQ{KH%3h zExNL@QhMWSYip@MATUjtX(X>@mY{{ZSeS)|k2LZQ&o*49>OOw7;E zrzj3H&(LB4y2i%FN_00G-faI2`_xNF+{d=)}atF^;+830mxcCv$Ui zB}d=c*-6*c)xEccd TjJ~nO00000NkvXXu0mjf^xS&C literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/crafting.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/crafting.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/crafting.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/crafting.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/inventory.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/inventory.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/inventory.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/inventory.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/nextpage.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/nextpage.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/nextpage.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/nextpage.png diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/place_item.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/place_item.png new file mode 100644 index 0000000000000000000000000000000000000000..d7868f5221bb797ad0108d8266a449bd8c0b2447 GIT binary patch literal 1669 zcmV;027394P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11`v^Ek8=AXjLV0Duj|2 zk>CoXf>abm3ZeztR8fQfS*nDr5Je<4bx?~MH7KnV8bO1h1i{*C8-u+zyWZQ(oc@@a z*qFT-o0K1UrPWF^bIv?-zVE!}J4Z+>n_~g!iPUv6iX=9M9Y7O_Yklhc$})m}^9EG^ z&?qUXN!^-bC(@2u?st`%K-v&i7=R&k1JH}Tyrfwy#N84 zPp4BM1mB#WCD?t0q*6v26YJtJmdfa|v8cLY(se^qSRIOTqWfKva~oOd>to`0{4XjxUNMrl1j`3#l!rsLzx(-u@X`gr zf?wEwEknbG6JBSUI=K^FVNK{VpAYs@S>eG+DH)6>8On}Ue|uG9TVz4w>+S9Bop{CV z6v(_G)^x2T6R!;GeAu>v^RWR2ymS*K?J@&EGX1 zQ%3&YzGcgnHFzUAMR_4a3D%m)O43=EGE3vg-bYx!{hx%ThLj-&<4LZklH{BW%jzwD zye>lh{Dn9!B-1v@ltV5jd8WBMaH#X6=YhZQMa5klu$V5!#@M>=48PspKqd#4U**6n z4Q$yJE!Af>fO@J5H-^)vT&#JAZ$cm!4fjF6VMFHpY@V z3n9EDQ4~-VfvSRV;2)nQ(2+j0-UMtdcgkzOcPhf;G|;` P00000NkvXXu0mjf7au5% literal 0 HcmV?d00001 diff --git a/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/prevpage.png b/SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/prevpage.png similarity index 100% rename from SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/SpiffUI/prevpage.png rename to SpiffUI-Radials/Contents/mods/SpiffUI-Radials/media/spifcons/prevpage.png diff --git a/SpiffUI-Radials/workshop.txt b/SpiffUI-Radials/workshop.txt index 754e0b2..47e5312 100644 --- a/SpiffUI-Radials/workshop.txt +++ b/SpiffUI-Radials/workshop.txt @@ -131,6 +131,12 @@ description= description=Each Radial has its own Configuration as well. This is expanded upon in the Discussion [url=https://steamcommunity.com/workshop/filedetails/discussion/2802525922/3273564019257617796]SpiffUI Radials and their Configurations[/url]. description= description=[h2]Translations[/h2] +description=[list] +description=[*]English +description=[*]Russian - [url=https://steamcommunity.com/profiles/76561198433229952]fourteensix[/url] +description=[*]Spanish - [url=https://steamcommunity.com/id/deadinside11]ElDoktor[/url] +description=[/list] +description= description=Item Names, Recipes, and others use the built-in translations; mods must include this. If you would like to contribute a translation, please submit a pull request on [url=https://github.com/hlfstr/pz-mods]GitHub![/url] I will happily give credit! tags=Build 41;Food;Interface;Silly/Fun visibility=public