From e01291ec4a7c8ef9fa77c5e439083776dec55251 Mon Sep 17 00:00:00 2001 From: Andrew Lanzone Date: Sat, 17 May 2025 22:32:03 -0700 Subject: [PATCH] Add whole set of button icons --- apps/openmw/mwgui/birth.cpp | 10 +- apps/openmw/mwgui/birth.hpp | 2 - apps/openmw/mwgui/bookwindow.cpp | 12 +- apps/openmw/mwgui/bookwindow.hpp | 2 +- apps/openmw/mwgui/class.cpp | 58 +++--- apps/openmw/mwgui/class.hpp | 14 -- apps/openmw/mwgui/confirmationdialog.cpp | 7 +- apps/openmw/mwgui/confirmationdialog.hpp | 2 - apps/openmw/mwgui/container.cpp | 14 +- apps/openmw/mwgui/container.hpp | 2 +- .../openmw/mwgui/controllerbuttonsoverlay.cpp | 95 ++++++++- .../openmw/mwgui/controllerbuttonsoverlay.hpp | 53 ++++- apps/openmw/mwgui/journalwindow.cpp | 16 +- apps/openmw/mwgui/mainmenu.cpp | 5 - apps/openmw/mwgui/mainmenu.hpp | 2 - apps/openmw/mwgui/messagebox.cpp | 12 +- apps/openmw/mwgui/messagebox.hpp | 1 - apps/openmw/mwgui/race.cpp | 13 +- apps/openmw/mwgui/race.hpp | 2 - apps/openmw/mwgui/review.cpp | 10 +- apps/openmw/mwgui/review.hpp | 2 - apps/openmw/mwgui/savegamedialog.cpp | 10 +- apps/openmw/mwgui/savegamedialog.hpp | 2 +- apps/openmw/mwgui/scrollwindow.cpp | 11 +- apps/openmw/mwgui/scrollwindow.hpp | 2 +- apps/openmw/mwgui/settingswindow.cpp | 10 +- apps/openmw/mwgui/settingswindow.hpp | 1 - apps/openmw/mwgui/textinput.cpp | 7 +- apps/openmw/mwgui/textinput.hpp | 2 - apps/openmw/mwgui/waitdialog.cpp | 16 +- apps/openmw/mwgui/waitdialog.hpp | 2 +- apps/openmw/mwgui/windowbase.hpp | 21 +- apps/openmw/mwgui/windowmanagerimp.cpp | 16 +- files/data/CMakeLists.txt | 14 ++ .../mygui/openmw_controllerbuttons.layout | 187 +++++++++++++++++- files/data/textures/omw_steam_button_a.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_b.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_l1.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_l2.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_l3.dds | Bin 0 -> 22000 bytes .../data/textures/omw_steam_button_lstick.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_menu.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_r1.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_r2.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_r3.dds | Bin 0 -> 22000 bytes .../data/textures/omw_steam_button_rstick.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_view.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_x.dds | Bin 0 -> 22000 bytes files/data/textures/omw_steam_button_y.dds | Bin 0 -> 22000 bytes 49 files changed, 457 insertions(+), 178 deletions(-) create mode 100644 files/data/textures/omw_steam_button_a.dds create mode 100644 files/data/textures/omw_steam_button_b.dds create mode 100644 files/data/textures/omw_steam_button_l1.dds create mode 100644 files/data/textures/omw_steam_button_l2.dds create mode 100644 files/data/textures/omw_steam_button_l3.dds create mode 100644 files/data/textures/omw_steam_button_lstick.dds create mode 100644 files/data/textures/omw_steam_button_menu.dds create mode 100644 files/data/textures/omw_steam_button_r1.dds create mode 100644 files/data/textures/omw_steam_button_r2.dds create mode 100644 files/data/textures/omw_steam_button_r3.dds create mode 100644 files/data/textures/omw_steam_button_rstick.dds create mode 100644 files/data/textures/omw_steam_button_view.dds create mode 100644 files/data/textures/omw_steam_button_x.dds create mode 100644 files/data/textures/omw_steam_button_y.dds diff --git a/apps/openmw/mwgui/birth.cpp b/apps/openmw/mwgui/birth.cpp index bc6b37df50..53f0f9793b 100644 --- a/apps/openmw/mwgui/birth.cpp +++ b/apps/openmw/mwgui/birth.cpp @@ -59,7 +59,12 @@ namespace MWGui mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BirthDialog::onOkClicked); if (Settings::gui().mControllerMenus) + { mOkButton->setStateSelected(true); + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sBack}"; + mControllerButtons.x = "#{sDone}"; + } updateBirths(); updateSpells(); @@ -273,11 +278,6 @@ namespace MWGui mSpellArea->setViewOffset(MyGUI::IntPoint(0, 0)); } - std::string BirthDialog::getButtonStr() - { - return "(A) #{sSelect} (X) #{sDone} (B) #{sBack}"; - } - bool BirthDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) diff --git a/apps/openmw/mwgui/birth.hpp b/apps/openmw/mwgui/birth.hpp index 841ff872b0..8a7190b934 100644 --- a/apps/openmw/mwgui/birth.hpp +++ b/apps/openmw/mwgui/birth.hpp @@ -38,8 +38,6 @@ namespace MWGui */ EventHandle_WindowBase eventDone; - std::string getButtonStr() override; - protected: void onSelectBirth(MyGUI::ListBox* _sender, size_t _index); diff --git a/apps/openmw/mwgui/bookwindow.cpp b/apps/openmw/mwgui/bookwindow.cpp index 6f6a6187b9..c48493c1b4 100644 --- a/apps/openmw/mwgui/bookwindow.cpp +++ b/apps/openmw/mwgui/bookwindow.cpp @@ -70,6 +70,10 @@ namespace MWGui MyGUI::IntCoord(0, 0, (64 - 7) * scale, mNextPageButton->getSize().height * scale)); } + mControllerButtons.l1 = "#{sPrev}"; + mControllerButtons.r1 = "#{sNext}"; + mControllerButtons.b = "#{sClose}"; + center(); } @@ -222,12 +226,10 @@ namespace MWGui } } - std::string BookWindow::getButtonStr() + ControllerButtonStr* BookWindow::getControllerButtons() { - if (mTakeButton->getVisible()) - return "(A) #{sTake} (LB) #{sPrev} (RB) #{sNext} (B) #{sClose}"; - else - return "(LB) #{sPrev} (RB) #{sNext} (B) #{sClose}"; + mControllerButtons.a = mTakeButton->getVisible() ? "#{sTake}" : ""; + return &mControllerButtons; } bool BookWindow::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) diff --git a/apps/openmw/mwgui/bookwindow.hpp b/apps/openmw/mwgui/bookwindow.hpp index f6b1fa7bc9..0a1beb7342 100644 --- a/apps/openmw/mwgui/bookwindow.hpp +++ b/apps/openmw/mwgui/bookwindow.hpp @@ -21,7 +21,7 @@ namespace MWGui bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override; std::string_view getWindowIdForLua() const override { return "Book"; } - std::string getButtonStr() override; + ControllerButtonStr* getControllerButtons() override; protected: void onNextPageButtonClicked(MyGUI::Widget* sender); diff --git a/apps/openmw/mwgui/class.cpp b/apps/openmw/mwgui/class.cpp index 7c9d7c724e..0ac39e4bac 100644 --- a/apps/openmw/mwgui/class.cpp +++ b/apps/openmw/mwgui/class.cpp @@ -60,6 +60,8 @@ namespace MWGui mOkButton->setStateSelected(true); trackFocusEvents(mBackButton); trackFocusEvents(mOkButton); + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sBack}"; } center(); @@ -77,11 +79,6 @@ namespace MWGui center(); } - std::string GenerateClassResultDialog::getButtonStr() - { - return "(A) #{sSelect} (B) #{sBack}"; - } - bool GenerateClassResultDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) @@ -155,7 +152,12 @@ namespace MWGui mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &PickClassDialog::onOkClicked); if (Settings::gui().mControllerMenus) + { mOkButton->setStateSelected(true); + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sBack}"; + mControllerButtons.x = "#{sDone}"; + } updateClasses(); updateStats(); @@ -317,11 +319,6 @@ namespace MWGui setClassImage(mClassImage, mCurrentClassId); } - std::string PickClassDialog::getButtonStr() - { - return "(A) #{sSelect} (X) #{sDone} (B) #{sBack}"; - } - bool PickClassDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) @@ -419,6 +416,8 @@ namespace MWGui getWidget(mButtonBar, "ButtonBar"); center(); + + mControllerButtons.a = "#{sSelect}"; } void InfoBoxDialog::setText(const std::string& str) @@ -490,11 +489,6 @@ namespace MWGui } } - std::string InfoBoxDialog::getButtonStr() - { - return "(A) #{sSelect}"; - } - bool InfoBoxDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) @@ -623,7 +617,12 @@ namespace MWGui mButtons.push_back(okButton); if (Settings::gui().mControllerMenus) + { okButton->setStateSelected(true); + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sBack}"; + mControllerButtons.x = "#{sDone}"; + } // Set default skills, attributes @@ -718,11 +717,6 @@ namespace MWGui MyGUI::UString(MWBase::Environment::get().getWindowManager()->getGameSettingString("sOK", {}))); } - std::string CreateClassDialog::getButtonStr() - { - return "(A) #{sSelect} (X) #{sDone} (B) #{sCancel}"; - } - bool CreateClassDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) @@ -939,6 +933,9 @@ namespace MWGui MyGUI::Button* cancelButton; getWidget(cancelButton, "CancelButton"); cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onCancelClicked); + + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sCancel}"; } SelectSpecializationDialog::~SelectSpecializationDialog() {} @@ -970,11 +967,6 @@ namespace MWGui return true; } - std::string SelectSpecializationDialog::getButtonStr() - { - return "(A) #{sSelect} (B) #{sCancel}"; - } - bool SelectSpecializationDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_B) @@ -1016,6 +1008,9 @@ namespace MWGui MyGUI::Button* cancelButton; getWidget(cancelButton, "CancelButton"); cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked); + + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sCancel}"; } // widget controls @@ -1037,11 +1032,6 @@ namespace MWGui return true; } - std::string SelectAttributeDialog::getButtonStr() - { - return "(A) #{sSelect} (B) #{sCancel}"; - } - bool SelectAttributeDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_B) @@ -1093,6 +1083,9 @@ namespace MWGui MyGUI::Button* cancelButton; getWidget(cancelButton, "CancelButton"); cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSkillDialog::onCancelClicked); + + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sCancel}"; } SelectSkillDialog::~SelectSkillDialog() {} @@ -1116,11 +1109,6 @@ namespace MWGui return true; } - std::string SelectSkillDialog::getButtonStr() - { - return "(A) #{sSelect} (B) #{sCancel}"; - } - bool SelectSkillDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_B) diff --git a/apps/openmw/mwgui/class.hpp b/apps/openmw/mwgui/class.hpp index af18e5d660..e2566ce6c0 100644 --- a/apps/openmw/mwgui/class.hpp +++ b/apps/openmw/mwgui/class.hpp @@ -40,8 +40,6 @@ namespace MWGui */ EventHandle_Int eventButtonSelected; - std::string getButtonStr() override; - protected: void onButtonClicked(MyGUI::Widget* _sender); bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override; @@ -93,8 +91,6 @@ namespace MWGui */ EventHandle_WindowBase eventDone; - std::string getButtonStr() override; - protected: void onOkClicked(MyGUI::Widget* _sender); void onBackClicked(MyGUI::Widget* _sender); @@ -136,8 +132,6 @@ namespace MWGui */ EventHandle_WindowBase eventDone; - std::string getButtonStr() override; - protected: void onSelectClass(MyGUI::ListBox* _sender, size_t _index); void onAccept(MyGUI::ListBox* _sender, size_t _index); @@ -189,8 +183,6 @@ namespace MWGui */ EventHandle_Void eventItemSelected; - std::string getButtonStr() override; - protected: void onSpecializationClicked(MyGUI::Widget* _sender); void onCancelClicked(MyGUI::Widget* _sender); @@ -225,8 +217,6 @@ namespace MWGui */ EventHandle_Void eventItemSelected; - std::string getButtonStr() override; - protected: void onAttributeClicked(Widgets::MWAttributePtr _sender); void onCancelClicked(MyGUI::Widget* _sender); @@ -259,8 +249,6 @@ namespace MWGui */ EventHandle_Void eventItemSelected; - std::string getButtonStr() override; - protected: void onSkillClicked(Widgets::MWSkillPtr _sender); void onCancelClicked(MyGUI::Widget* _sender); @@ -322,8 +310,6 @@ namespace MWGui */ EventHandle_WindowBase eventDone; - std::string getButtonStr() override; - protected: void onOkClicked(MyGUI::Widget* _sender); void onBackClicked(MyGUI::Widget* _sender); diff --git a/apps/openmw/mwgui/confirmationdialog.cpp b/apps/openmw/mwgui/confirmationdialog.cpp index 8fa4afab16..1d8f14176a 100644 --- a/apps/openmw/mwgui/confirmationdialog.cpp +++ b/apps/openmw/mwgui/confirmationdialog.cpp @@ -24,6 +24,8 @@ namespace MWGui { trackFocusEvents(mOkButton); trackFocusEvents(mCancelButton); + mControllerButtons.a = "#{sOk}"; + mControllerButtons.b = "#{sCancel}"; } } @@ -72,11 +74,6 @@ namespace MWGui eventOkClicked(); } - std::string ConfirmationDialog::getButtonStr() - { - return "(A) #{sOk} (B) #{sCancel}"; - } - bool ConfirmationDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) diff --git a/apps/openmw/mwgui/confirmationdialog.hpp b/apps/openmw/mwgui/confirmationdialog.hpp index 2e2f7df0af..9b26e3a3c9 100644 --- a/apps/openmw/mwgui/confirmationdialog.hpp +++ b/apps/openmw/mwgui/confirmationdialog.hpp @@ -20,8 +20,6 @@ namespace MWGui EventHandle_Void eventOkClicked; EventHandle_Void eventCancelClicked; - std::string getButtonStr() override; - private: MyGUI::EditBox* mMessage; MyGUI::Button* mOkButton; diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp index 05e56d10ee..615c4801d3 100644 --- a/apps/openmw/mwgui/container.cpp +++ b/apps/openmw/mwgui/container.cpp @@ -56,6 +56,12 @@ namespace MWGui mTakeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerWindow::onTakeAllButtonClicked); setCoord(200, 0, 600, 300); + + mControllerButtons.a = "#{sTake}"; + mControllerButtons.b = "#{sClose}"; + mControllerButtons.x = "#{sTakeAll}"; + mControllerButtons.y = "#{sInfo}"; + mControllerButtons.l2 = "#{sInventory}"; } void ContainerWindow::onItemSelected(int index) @@ -352,12 +358,10 @@ namespace MWGui MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Container); } - std::string ContainerWindow::getButtonStr() + ControllerButtonStr* ContainerWindow::getControllerButtons() { - if (mDisposeCorpseButton->getVisible()) - return "(A) #{sTake} (X) #{sTakeAll} (LB) #{sDisposeofCorpse} (Y) #{sInfo} [LT] #{sInventory} (B) #{sClose}"; - else - return "(A) #{sTake} (X) #{sTakeAll} (Y) #{sInfo} [LT] #{sInventory} (B) #{sClose}"; + mControllerButtons.l1 = mDisposeCorpseButton->getVisible() ? "#{sDisposeofCorpse}" : ""; + return &mControllerButtons; } bool ContainerWindow::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) diff --git a/apps/openmw/mwgui/container.hpp b/apps/openmw/mwgui/container.hpp index 22f5f2425a..d2d8c9f4aa 100644 --- a/apps/openmw/mwgui/container.hpp +++ b/apps/openmw/mwgui/container.hpp @@ -40,7 +40,7 @@ namespace MWGui std::string_view getWindowIdForLua() const override { return "Container"; } - std::string getButtonStr() override; + ControllerButtonStr* getControllerButtons() override; void setActiveControllerWindow(bool active) override; private: diff --git a/apps/openmw/mwgui/controllerbuttonsoverlay.cpp b/apps/openmw/mwgui/controllerbuttonsoverlay.cpp index 2e7ec3ffcd..f4b35ac4de 100644 --- a/apps/openmw/mwgui/controllerbuttonsoverlay.cpp +++ b/apps/openmw/mwgui/controllerbuttonsoverlay.cpp @@ -1,8 +1,5 @@ #include "controllerbuttonsoverlay.hpp" -#include -#include - #include "../mwbase/environment.hpp" #include "../mwbase/windowmanager.hpp" @@ -11,16 +8,94 @@ namespace MWGui ControllerButtonsOverlay::ControllerButtonsOverlay() : WindowBase("openmw_controllerbuttons.layout") { - getWidget(mButtonStr, "ButtonStr"); + getWidget(mImageA, "BtnAImage"); + getWidget(mTextA, "BtnAText"); + + getWidget(mImageB, "BtnBImage"); + getWidget(mTextB, "BtnBText"); + + getWidget(mImageL1, "BtnL1Image"); + getWidget(mTextL1, "BtnL1Text"); + + getWidget(mImageL2, "BtnL2Image"); + getWidget(mTextL2, "BtnL2Text"); + + getWidget(mImageL3, "BtnL3Image"); + getWidget(mTextL3, "BtnL3Text"); + + getWidget(mImageLStick, "BtnLStickImage"); + getWidget(mTextLStick, "BtnLStickText"); + + getWidget(mImageMenu, "BtnMenuImage"); + getWidget(mTextMenu, "BtnMenuText"); + + getWidget(mImageR1, "BtnR1Image"); + getWidget(mTextR1, "BtnR1Text"); + + getWidget(mImageR2, "BtnR2Image"); + getWidget(mTextR2, "BtnR2Text"); + + getWidget(mImageR3, "BtnR3Image"); + getWidget(mTextR3, "BtnR3Text"); + + getWidget(mImageRStick, "BtnRStickImage"); + getWidget(mTextRStick, "BtnRStickText"); + + getWidget(mImageView, "BtnViewImage"); + getWidget(mTextView, "BtnViewText"); + + getWidget(mImageX, "BtnXImage"); + getWidget(mTextX, "BtnXText"); + + getWidget(mImageY, "BtnYImage"); + getWidget(mTextY, "BtnYText"); + + getWidget(mHBox, "ButtonBox"); } - void ControllerButtonsOverlay::setButtonStr(const std::string& buttonStr) + void ControllerButtonsOverlay::setButtons(ControllerButtonStr* buttons) { - mButtonStr->setCaptionWithReplacing(buttonStr); + int buttonCount = 0; + buttonCount += updateButton(mTextA, mImageA, buttons->a); + buttonCount += updateButton(mTextB, mImageB, buttons->b); + buttonCount += updateButton(mTextL1, mImageL1, buttons->l1); + buttonCount += updateButton(mTextL2, mImageL2, buttons->l2); + buttonCount += updateButton(mTextL3, mImageL3, buttons->l3); + buttonCount += updateButton(mTextLStick, mImageLStick, buttons->lStick); + buttonCount += updateButton(mTextMenu, mImageMenu, buttons->menu); + buttonCount += updateButton(mTextR1, mImageR1, buttons->r1); + buttonCount += updateButton(mTextR2, mImageR2, buttons->r2); + buttonCount += updateButton(mTextR3, mImageR3, buttons->r3); + buttonCount += updateButton(mTextRStick, mImageRStick, buttons->rStick); + buttonCount += updateButton(mTextView, mImageView, buttons->view); + buttonCount += updateButton(mTextX, mImageX, buttons->x); + buttonCount += updateButton(mTextY, mImageY, buttons->y); + mHBox->notifyChildrenSizeChanged(); - // int height = mMessage->getTextSize().height + 60; - // int width = mMessage->getTextSize().width + 24; - // mMainWidget->setSize(width, height); - // mMessage->setSize(mMessage->getWidth(), mMessage->getTextSize().height + 24); + setVisible(buttonCount > 0); + } + + int ControllerButtonsOverlay::updateButton(MyGUI::TextBox* text, MyGUI::ImageBox* image, const std::string& buttonStr) + { + if (buttonStr.length() > 0) + { + image->setVisible(true); + image->setUserString("Hidden", "false"); + + text->setCaptionWithReplacing(buttonStr); + text->setVisible(true); + text->setUserString("Hidden", "false"); + text->setSize(text->getTextSize().width + 16, 48); + return 1; + } + else + { + image->setVisible(false); + image->setUserString("Hidden", "true"); + + text->setVisible(false); + text->setUserString("Hidden", "true"); + return 0; + } } } diff --git a/apps/openmw/mwgui/controllerbuttonsoverlay.hpp b/apps/openmw/mwgui/controllerbuttonsoverlay.hpp index c2a9b110bf..7663bbed44 100644 --- a/apps/openmw/mwgui/controllerbuttonsoverlay.hpp +++ b/apps/openmw/mwgui/controllerbuttonsoverlay.hpp @@ -1,6 +1,11 @@ #ifndef MWGUI_CONTROLLERBUTTONSOVERLAY_H #define MWGUI_CONTROLLERBUTTONSOVERLAY_H +#include +#include + +#include + #include "windowbase.hpp" namespace MWGui @@ -10,10 +15,54 @@ namespace MWGui public: ControllerButtonsOverlay(); - void setButtonStr(const std::string& buttonStr); + void setButtons(ControllerButtonStr* buttons); private: - MyGUI::TextBox* mButtonStr; + MyGUI::ImageBox* mImageA; + MyGUI::TextBox* mTextA; + + MyGUI::ImageBox* mImageB; + MyGUI::TextBox* mTextB; + + MyGUI::ImageBox* mImageL1; + MyGUI::TextBox* mTextL1; + + MyGUI::ImageBox* mImageL2; + MyGUI::TextBox* mTextL2; + + MyGUI::ImageBox* mImageL3; + MyGUI::TextBox* mTextL3; + + MyGUI::ImageBox* mImageLStick; + MyGUI::TextBox* mTextLStick; + + MyGUI::ImageBox* mImageMenu; + MyGUI::TextBox* mTextMenu; + + MyGUI::ImageBox* mImageR1; + MyGUI::TextBox* mTextR1; + + MyGUI::ImageBox* mImageR2; + MyGUI::TextBox* mTextR2; + + MyGUI::ImageBox* mImageR3; + MyGUI::TextBox* mTextR3; + + MyGUI::ImageBox* mImageRStick; + MyGUI::TextBox* mTextRStick; + + MyGUI::ImageBox* mImageView; + MyGUI::TextBox* mTextView; + + MyGUI::ImageBox* mImageX; + MyGUI::TextBox* mTextX; + + MyGUI::ImageBox* mImageY; + MyGUI::TextBox* mTextY; + + Gui::HBox* mHBox; + + int updateButton(MyGUI::TextBox* text, MyGUI::ImageBox* image, const std::string& buttonStr); }; } diff --git a/apps/openmw/mwgui/journalwindow.cpp b/apps/openmw/mwgui/journalwindow.cpp index 029104d27c..abb1843178 100644 --- a/apps/openmw/mwgui/journalwindow.cpp +++ b/apps/openmw/mwgui/journalwindow.cpp @@ -218,6 +218,10 @@ namespace } } + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.x = "Quests"; + mControllerButtons.y = "#{sTopics}"; + mQuestMode = false; mAllQuests = false; mOptionsMode = false; @@ -669,14 +673,12 @@ namespace } } - std::string getButtonStr() override + MWGui::ControllerButtonStr* getControllerButtons() override { - if (mOptionsMode) - return "(A) #{sSelect} (X) Quests (Y) #{sTopics} (B) #{sBack}"; - else if (mStates.size() > 1) - return "(A) #{sSelect} (LB) #{sPrev} (RB) #{sNext} (X) Quests (Y) #{sTopics} (B) #{sBack}"; - else - return "(A) #{sSelect} (LB) #{sPrev} (RB) #{sNext} (X) Quests (Y) #{sTopics} (B) #{sClose}"; + mControllerButtons.b = mOptionsMode || mStates.size() > 1 ? "#{sBack}" : "#{sClose}"; + mControllerButtons.l1 = mOptionsMode ? "" : "#{sPrev}"; + mControllerButtons.r1 = mOptionsMode ? "" : "#{sNext}"; + return &mControllerButtons; } bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override diff --git a/apps/openmw/mwgui/mainmenu.cpp b/apps/openmw/mwgui/mainmenu.cpp index 62740c030d..cfcb63e4d5 100644 --- a/apps/openmw/mwgui/mainmenu.cpp +++ b/apps/openmw/mwgui/mainmenu.cpp @@ -207,11 +207,6 @@ namespace MWGui } } - std::string MainMenu::getButtonStr() - { - return ""; - } - bool MainMenu::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { // REMOVEME diff --git a/apps/openmw/mwgui/mainmenu.hpp b/apps/openmw/mwgui/mainmenu.hpp index aa4cba4257..453a16b5e4 100644 --- a/apps/openmw/mwgui/mainmenu.hpp +++ b/apps/openmw/mwgui/mainmenu.hpp @@ -55,8 +55,6 @@ namespace MWGui bool exit() override; - std::string getButtonStr() override; - private: const VFS::Manager* mVFS; diff --git a/apps/openmw/mwgui/messagebox.cpp b/apps/openmw/mwgui/messagebox.cpp index 00c49e44d0..8c5a968c99 100644 --- a/apps/openmw/mwgui/messagebox.cpp +++ b/apps/openmw/mwgui/messagebox.cpp @@ -282,10 +282,13 @@ namespace MWGui } } - if (Settings::gui().mControllerMenus && mButtons.size() > 1) + if (Settings::gui().mControllerMenus) { + mControllerButtons.a = "#{sOk}"; + // If we have more than one button, we need to set the focus to the first one. - mButtons[0]->setStateSelected(true); + if (mButtons.size() > 1) + mButtons[0]->setStateSelected(true); } MyGUI::IntSize mainWidgetSize; @@ -439,11 +442,6 @@ namespace MWGui return mButtonPressed; } - std::string InteractiveMessageBox::getButtonStr() - { - return "InteractiveMessageBox (A) #{sOk}"; - } - bool InteractiveMessageBox::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) diff --git a/apps/openmw/mwgui/messagebox.hpp b/apps/openmw/mwgui/messagebox.hpp index 3bc3127828..e6128ee0d1 100644 --- a/apps/openmw/mwgui/messagebox.hpp +++ b/apps/openmw/mwgui/messagebox.hpp @@ -103,7 +103,6 @@ namespace MWGui bool mMarkedToDelete; - std::string getButtonStr() override; bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override; private: diff --git a/apps/openmw/mwgui/race.cpp b/apps/openmw/mwgui/race.cpp index c26d42f0f7..9b97dfbb53 100644 --- a/apps/openmw/mwgui/race.cpp +++ b/apps/openmw/mwgui/race.cpp @@ -117,7 +117,15 @@ namespace MWGui mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onOkClicked); if (Settings::gui().mControllerMenus) + { mOkButton->setStateSelected(true); + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sBack}"; + mControllerButtons.x = "#{sDone}"; + mControllerButtons.y = "#{sSex}"; + mControllerButtons.l1 = "#{sHair}"; + mControllerButtons.r1 = "#{sFace}"; + } updateRaces(); updateSkills(); @@ -463,11 +471,6 @@ namespace MWGui } } - std::string RaceDialog::getButtonStr() - { - return "(A) #{sSelect} (Y) #{sSex} (LB) #{sHair} (RB) #{sFace} (X) #{sDone} (B) #{sBack}"; - } - bool RaceDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) diff --git a/apps/openmw/mwgui/race.hpp b/apps/openmw/mwgui/race.hpp index b5eafb51f1..c3b322ba8b 100644 --- a/apps/openmw/mwgui/race.hpp +++ b/apps/openmw/mwgui/race.hpp @@ -65,8 +65,6 @@ namespace MWGui */ EventHandle_WindowBase eventDone; - std::string getButtonStr() override; - protected: void onPreviewScroll(MyGUI::Widget* _sender, int _delta); void onHeadRotate(MyGUI::ScrollBar* _sender, size_t _position); diff --git a/apps/openmw/mwgui/review.cpp b/apps/openmw/mwgui/review.cpp index 40be524daf..4d0d9d4d2c 100644 --- a/apps/openmw/mwgui/review.cpp +++ b/apps/openmw/mwgui/review.cpp @@ -126,7 +126,12 @@ namespace MWGui mButtons.push_back(okButton); if (Settings::gui().mControllerMenus) + { mButtons[mControllerFocus]->setStateSelected(true); + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sBack}"; + mControllerButtons.x = "#{sDone}"; + } } void ReviewDialog::onOpen() @@ -537,11 +542,6 @@ namespace MWGui MyGUI::IntPoint(0, static_cast(mSkillView->getViewOffset().top + _rel * 0.3))); } - std::string ReviewDialog::getButtonStr() - { - return "(A) #{sSelect} (X) #{sDone} (B) #{sBack}"; - } - bool ReviewDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) diff --git a/apps/openmw/mwgui/review.hpp b/apps/openmw/mwgui/review.hpp index e14bf834cd..fe53787fe3 100644 --- a/apps/openmw/mwgui/review.hpp +++ b/apps/openmw/mwgui/review.hpp @@ -62,8 +62,6 @@ namespace MWGui EventHandle_Int eventActivateDialog; - std::string getButtonStr() override; - protected: void onOkClicked(MyGUI::Widget* _sender); void onBackClicked(MyGUI::Widget* _sender); diff --git a/apps/openmw/mwgui/savegamedialog.cpp b/apps/openmw/mwgui/savegamedialog.cpp index 9db28afc10..568c12d00d 100644 --- a/apps/openmw/mwgui/savegamedialog.cpp +++ b/apps/openmw/mwgui/savegamedialog.cpp @@ -66,6 +66,8 @@ namespace MWGui trackFocusEvents(mCancelButton); trackFocusEvents(mDeleteButton); + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sClose}"; } void SaveGameDialog::onSlotActivated(MyGUI::ListBox* sender, size_t pos) @@ -504,12 +506,10 @@ namespace MWGui mScreenshot->setRenderItemTexture(mScreenshotTexture.get()); } - std::string SaveGameDialog::getButtonStr() + ControllerButtonStr* SaveGameDialog::getControllerButtons() { - if (mSaving) - return "(A) #{sSelect} (B) #{sClose}"; - else - return "(A) #{sSelect} (Y) Select Character (B) #{sClose}"; + mControllerButtons.y = mSaving ? "" : "Select Character"; + return &mControllerButtons; } bool SaveGameDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) diff --git a/apps/openmw/mwgui/savegamedialog.hpp b/apps/openmw/mwgui/savegamedialog.hpp index e9872a0d49..fbe319aed1 100644 --- a/apps/openmw/mwgui/savegamedialog.hpp +++ b/apps/openmw/mwgui/savegamedialog.hpp @@ -24,7 +24,7 @@ namespace MWGui void setLoadOrSave(bool load); - std::string getButtonStr() override; + ControllerButtonStr* getControllerButtons() override; private: void confirmDeleteSave(); diff --git a/apps/openmw/mwgui/scrollwindow.cpp b/apps/openmw/mwgui/scrollwindow.cpp index 5b7ef4238a..5146d77e5d 100644 --- a/apps/openmw/mwgui/scrollwindow.cpp +++ b/apps/openmw/mwgui/scrollwindow.cpp @@ -41,6 +41,9 @@ namespace MWGui mCloseButton->eventKeyButtonPressed += MyGUI::newDelegate(this, &ScrollWindow::onKeyButtonPressed); mTakeButton->eventKeyButtonPressed += MyGUI::newDelegate(this, &ScrollWindow::onKeyButtonPressed); + mControllerButtons.b = "#{sClose}"; + mControllerButtons.rStick = "#{sScrolldown}"; + center(); } @@ -126,12 +129,10 @@ namespace MWGui BookWindowBase::onClose(); } - std::string ScrollWindow::getButtonStr() + ControllerButtonStr* ScrollWindow::getControllerButtons() { - if (mTakeButton->getVisible()) - return "(A) #{sTake} (RS) #{sScrolldown} (B) #{sClose}"; - else - return "(A) #{sTake} (RS) #{sScrolldown} (B) #{sClose}"; + mControllerButtons.a = mTakeButton->getVisible() ? "#{sTake}" : ""; + return &mControllerButtons; } bool ScrollWindow::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) diff --git a/apps/openmw/mwgui/scrollwindow.hpp b/apps/openmw/mwgui/scrollwindow.hpp index 4e447707d0..f1047fdeba 100644 --- a/apps/openmw/mwgui/scrollwindow.hpp +++ b/apps/openmw/mwgui/scrollwindow.hpp @@ -25,7 +25,7 @@ namespace MWGui std::string_view getWindowIdForLua() const override { return "Scroll"; } - std::string getButtonStr() override; + ControllerButtonStr* getControllerButtons() override; protected: void onCloseButtonClicked(MyGUI::Widget* _sender); diff --git a/apps/openmw/mwgui/settingswindow.cpp b/apps/openmw/mwgui/settingswindow.cpp index 201204bc74..2fa6a72fd8 100644 --- a/apps/openmw/mwgui/settingswindow.cpp +++ b/apps/openmw/mwgui/settingswindow.cpp @@ -459,6 +459,11 @@ namespace MWGui i++; } + + mControllerButtons.a = "#{sSelect}"; + mControllerButtons.b = "#{sOk}"; + mControllerButtons.l1 = "#{sPrev} Tab"; + mControllerButtons.r1 = "#{sNext} Tab"; } void SettingsWindow::onTabChanged(MyGUI::TabControl* /*_sender*/, size_t /*index*/) @@ -1129,11 +1134,6 @@ namespace MWGui mControlsBox->setViewOffset(MyGUI::IntPoint(0, 0)); } - std::string SettingsWindow::getButtonStr() - { - return "(A) #{sSelect} (LB) #{sPrev} Tab (RB) #{sNext} Tab (B) #{sOk}"; - } - bool SettingsWindow::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_B) diff --git a/apps/openmw/mwgui/settingswindow.hpp b/apps/openmw/mwgui/settingswindow.hpp index e8d7f248cb..555468d806 100644 --- a/apps/openmw/mwgui/settingswindow.hpp +++ b/apps/openmw/mwgui/settingswindow.hpp @@ -26,7 +26,6 @@ namespace MWGui void onResChange(int, int) override; - std::string getButtonStr() override; bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override; protected: diff --git a/apps/openmw/mwgui/textinput.cpp b/apps/openmw/mwgui/textinput.cpp index e6352c928e..6ef8f1ef8e 100644 --- a/apps/openmw/mwgui/textinput.cpp +++ b/apps/openmw/mwgui/textinput.cpp @@ -25,6 +25,8 @@ namespace MWGui // Make sure the edit box has focus MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mTextEdit); + + mControllerButtons.a = "#{sOk}"; } void TextInputDialog::setNextButtonShow(bool shown) @@ -83,11 +85,6 @@ namespace MWGui mTextEdit->setCaption(text); } - std::string TextInputDialog::getButtonStr() - { - return "(A) #{sOk}"; - } - bool TextInputDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) { if (arg.button == SDL_CONTROLLER_BUTTON_A) diff --git a/apps/openmw/mwgui/textinput.hpp b/apps/openmw/mwgui/textinput.hpp index 67ca8ba757..ad7896ff27 100644 --- a/apps/openmw/mwgui/textinput.hpp +++ b/apps/openmw/mwgui/textinput.hpp @@ -24,8 +24,6 @@ namespace MWGui */ EventHandle_WindowBase eventDone; - std::string getButtonStr() override; - protected: void onOkClicked(MyGUI::Widget* _sender); void onTextAccepted(MyGUI::EditBox* _sender); diff --git a/apps/openmw/mwgui/waitdialog.cpp b/apps/openmw/mwgui/waitdialog.cpp index 9886f036e4..fa5cefb238 100644 --- a/apps/openmw/mwgui/waitdialog.cpp +++ b/apps/openmw/mwgui/waitdialog.cpp @@ -86,6 +86,8 @@ namespace MWGui trackFocusEvents(mCancelButton); for (MyGUI::Widget* widget : mHourSlider->getAllWidgets()) trackFocusEvents(widget); + + mControllerButtons.b = "#{sCancel}"; } void WaitDialog::setPtr(const MWWorld::Ptr& ptr) @@ -332,17 +334,11 @@ namespace MWGui } } - std::string WaitDialog::getButtonStr() + ControllerButtonStr* WaitDialog::getControllerButtons() { - if (mSleeping) - { - if (mUntilHealedButton->getVisible()) - return "(X) #{sUntilHealed} (A) #{sRest} (B) #{sCancel}"; - else - return "(A) #{sRest} (B) #{sCancel}"; - } - else - return "(A) #{sWait} (B) #{sCancel}"; + mControllerButtons.a = mSleeping ? "#{sRest}" : "#{sWait}"; + mControllerButtons.x = mSleeping && mUntilHealedButton->getVisible() ? "#{sUntilHealed}" : ""; + return &mControllerButtons; } bool WaitDialog::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) diff --git a/apps/openmw/mwgui/waitdialog.hpp b/apps/openmw/mwgui/waitdialog.hpp index 77593c3049..4a7ccfcd00 100644 --- a/apps/openmw/mwgui/waitdialog.hpp +++ b/apps/openmw/mwgui/waitdialog.hpp @@ -47,7 +47,7 @@ namespace MWGui std::string_view getWindowIdForLua() const override { return "WaitDialog"; } - std::string getButtonStr() override; + ControllerButtonStr* getControllerButtons() override; protected: MyGUI::TextBox* mDateTimeText; diff --git a/apps/openmw/mwgui/windowbase.hpp b/apps/openmw/mwgui/windowbase.hpp index cd4d2874ca..2a9d4592d3 100644 --- a/apps/openmw/mwgui/windowbase.hpp +++ b/apps/openmw/mwgui/windowbase.hpp @@ -14,6 +14,24 @@ namespace MWGui { class DragAndDrop; + struct ControllerButtonStr + { + std::string a; + std::string b; + std::string l1; + std::string l2; + std::string l3; + std::string lStick; + std::string menu; + std::string r1; + std::string r2; + std::string r3; + std::string rStick; + std::string view; + std::string x; + std::string y; + }; + class WindowBase : public Layout { public: @@ -62,12 +80,13 @@ namespace MWGui // REMOVEME // virtual bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) = 0; // virtual bool onControllerThumbstickEvent(const SDL_ControllerAxisEvent& arg) = 0; - virtual std::string getButtonStr() { return ""; } + virtual ControllerButtonStr* getControllerButtons() { return &mControllerButtons; } virtual void setActiveControllerWindow(bool active) { mActiveControllerWindow = active; } protected: virtual void onTitleDoubleClicked(); + ControllerButtonStr mControllerButtons; MyGUI::Widget* mMouseFocus = nullptr; bool mActiveControllerWindow = false; void trackFocusEvents(MyGUI::Widget* widget); diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index b9df5b0b4e..ff2e9754af 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -2561,19 +2561,7 @@ namespace MWGui return; } - std::string buttonStr = topWin->getButtonStr(); - // REMOVEME - Log(Debug::Error) << "WindowManager::updateControllerButtonsOverlay: showing overlay: " << buttonStr; - if (buttonStr.length() > 0) - { - mControllerButtonsOverlay->setButtonStr(buttonStr); - mControllerButtonsOverlay->setVisible(true); - } - else - { - // REMOVEME - Log(Debug::Error) << "WindowManager::updateControllerButtonsOverlay: ...psych, hiding it"; - mControllerButtonsOverlay->setVisible(false); - } + // setButtons will handle setting visibility based on if any buttons are defined. + mControllerButtonsOverlay->setButtons(topWin->getControllerButtons()); } } diff --git a/files/data/CMakeLists.txt b/files/data/CMakeLists.txt index 97b49d1002..6339344500 100644 --- a/files/data/CMakeLists.txt +++ b/files/data/CMakeLists.txt @@ -10,6 +10,20 @@ set(BUILTIN_DATA_FILES textures/omw_menu_scroll_center_h.dds textures/omw_menu_scroll_center_v.dds textures/omw_menu_icon_active.dds + textures/omw_steam_button_a.dds + textures/omw_steam_button_b.dds + textures/omw_steam_button_l1.dds + textures/omw_steam_button_l2.dds + textures/omw_steam_button_l3.dds + textures/omw_steam_button_lstick.dds + textures/omw_steam_button_menu.dds + textures/omw_steam_button_r1.dds + textures/omw_steam_button_r2.dds + textures/omw_steam_button_r3.dds + textures/omw_steam_button_rstick.dds + textures/omw_steam_button_view.dds + textures/omw_steam_button_x.dds + textures/omw_steam_button_y.dds textures/omw/water_nm.png fonts/DejaVuFontLicense.txt diff --git a/files/data/mygui/openmw_controllerbuttons.layout b/files/data/mygui/openmw_controllerbuttons.layout index d12785f0fc..42c89e10b4 100644 --- a/files/data/mygui/openmw_controllerbuttons.layout +++ b/files/data/mygui/openmw_controllerbuttons.layout @@ -4,15 +4,194 @@ - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/files/data/textures/omw_steam_button_a.dds b/files/data/textures/omw_steam_button_a.dds new file mode 100644 index 0000000000000000000000000000000000000000..447aa6081540c570208bd37a9338954feaf6990d GIT binary patch literal 22000 zcmeHP3sh7`ny$JH%}eNx!jQxeO~jyQb&MIoL{_?YV;FmPfHu+_R?P`MV_YGc$)=|j zLr1bnJbREw46OmgsEN*M#@9*?Yjz>gv)VplrzaYto`Gf1C}eqQgN@L&f89&fz1+;& zGCWS)wNL2qS&zT!|Nci+-MY-0HFsVZ}+jNhWq-sZx8qV0W@%r#RIIZ%(_$= zZe;!|V(qr9J{Ub&+!q^P>x(~6>4PgLBZluaecbEg75Pg*?=k)Bk*T<$dVU1M6R@e6 zSWks8oUAdmlk6iLF9-shH4(G&rJ;bwhj2bc92>^5Sbt^MY*t_FFDsne56Ejbe5%W5 z)(em?1*rZBR@aR z`8_$w`RZp^61ct_EY6ma%dwo#W}CCNq%?rz_KhZY$@_iqmzBj@UfyiW{j$<6;|5Fa zm*+1A8=3r*lXBe`M~5wE*b$NYJXsvh?ZGUh)f@KeWP6CVPe!BksjR*@-~BUd7#?c< z{?z&prvB?)JBrOe5u3JNuD;Iwxjfw2bL8jWa(?TRs+vl!Oym4|^Q-1(m&*M5POWyP zj6|G2(pYt>5ALWsVuCcr zta717tDVH=XAztg)mEAB<1tlh9nHr$-Tw^Y;y2+MC2* z7s)D)H5H4LQa(|jRL05&8+Q>?sZw5tZ(`d{azhkK#S{0Aai7{{d+4Ii|G-cf02de+!ZV&dn^|EtIG}AxuU4A6Db0ov=@l|WB z&EIgoyB$+sPAz+q&zCe^KNh0!=i%mep!TA+57IPGql_QjjvYI`cFFeO9`88>_Q2zV zMR@ahLzAw9=_?pPyvSLf#PD$Q=}#WbXQL|@E@tCP#Ln{1tE@b}gMZts&FMUUtNCv8 zWgfkHrh+!_J%12?{XdJ_AYN?B?K02_(s-e^hvP9fsXg%ZLn40D9d|>{51{YxOZ#VD zVD0_!Gt}icTDv6E9z25zhzeZ})n8(xlh) z%@;d%w7Ehz$oljgO4_c-57EM3)i#8vU&{U6EI3O`ZU4yqy*_Dm=kv{G z?(f8Xy&+_i9N)W0id&gKhnhd?WZx}c&({ZrSwx56h=A!=jiG+#Xw&8fRzB3@gM9Jf zPR06#xaVok6w3LbK55Umjtn^-n1ywJZD>@*gM-5t5A?`cTDHN#^SdLWYKwKchx@xX z|N83@TV32fJABLkqk9<{bCde4$uEk4%YP}@U? zFRkrmMSk$+&&z9bjo|A8N5oAU4?Ju14JvZF`KBk4VeM`CrEk6=8wJy}~C+!(G zBSYqY0?v8L(3m%5>qCh53t@dXpUpp6Q{}KK_;0XG{UD-cl^pLIf&WL%od2QLm%9Hc zXLqf;a9}2n?|%I|QamsIU+e46RxVy!xsaDvh=&CQR2^b`QOh4}Od2WwBX%=+4VLYB z@fo@{hLbfn4kao0$J+g{KAgu>)4%7Oo-ixZade7_*b_Q4CbBA)M?ZPyDU_9^)H zJXD8&Hhlc2)e=%c+Kw}Q=py&S`M;ds)$^NDOZO|UB(nNxEeB&Rz1#C0!|M8KOpsQO zA1l=igH!oVLsSH`_Au;>|Mu3xXPVBwf>R|HoQb4CD>odH`z^mgm8L zbcS?#OGAPDXJr1{H(oCc{YcOK-|IWEulr*F``cU^brrOYRwBYXfn^K#QedCR6 zKEAY;f}W$Ko7<0?Z#CAPeIvUiA^XU1&Cl!0ZT)5L&6k;I4%9o`2flnD&q?ogT|sjJ#RnI`Kj9j z{~f@85F20nMj+pu7tiq0P$0if&i`0D==?8(_&=Y?TMz`~LkeKH*|w`S6jA`g#1oZ? zA1xfR{I9DZ-Z8n|B7u~De|%4wM&rF~AJr}1KKsAwV}19775nzbDEal*zpkaZr6)OC zJOGx)Lp33N1_Kk1J@iD)2!4LvY}4yJkOHU#+W&$eARkfy!&nQ!KX39~`-8vv(fkkV zztOD!WR0!p1)F0n!wr^Qtr6Gta~UR$QFXXN&If9H9w;7DTd?lpyDtvf{QS+|U-_8Y z%Iw6-SGax#IzM%L(r6Do?TX;>zQLj|@MMge!StQ1xwa#z=@$luA^*erFMP=KGXVqt zRgN+y@8l%d{7sFrGVD7Y=~D6!`iPM@Q(6cyfXlP?FD<$A`cBPPZ3B(x z`Lwy{FH(8yUE_jHcg_cDdAgRKYI5RLpDa%lrI2@LEb0r6gjjpuX?yTq1^*`}!RBxK zAMkeBRpbQw3KU z_Q$unoFKa}&A5KN++K{TihSD_>nbW=PJ|_%T%Z0XeZ-pmd_JgaIk4`#T|G6l2dRBu zd20QRsXhPd_X)55QLZn^zFXYkBR6*Cc0{uJ-h5Z+nFsgrc<+eFn9|kstbvv5(Y0U1 z<+z89e^?JLo3Gdpn}z8R4`h3&Px`nnVu~COhbXH4#DnrmSC!_ixeSTpIa zS_--&pe!LY7g>F=<7;e7($-`kai!u{3M>Bm`gyvNa zZz(??Iv!I7_OON9L#K6Ajj4H)gViT)nlI#d0qdg*k|M_oN#Da~A8LMKJj9UpA@^tE zhIsCt!Tq_@YJVbs-Wk3>KOW=SeQvLk?~F5DJvTVtIP9S(YwSa}fAh!JP?raz=|$D1 zt=ygyadT^_B3_h-m)E^kEys)cq*3P7Y}r1%`NDqFl@e|*zEcn{E=S7t(n#?pUQRl| zUrJ@{r8~0};T2|IA~wz7&#T4y?!Pmza?%L?dohD!kO%k#=hvH$VzWli=jHWD_D>G1 ze39ewaMz6Uo)*q;BF;!53V#kp+iDGI%KMA=mVXb_Ua(dR>jycX;pm4o%h3}4e8nt$ z4DmwFCyt0RY9Bm)oSZbuoc)H38!SRiO7<3B-fTnrO<6K---wBwq9scI!rF_= zl=r=`c3enb92?XZUka#E@Q1ZRrn0|#O&|Bi`~NGS-sk&1-&6x^{d%|dAZZQ0d*AoH zk9#$6m-?Vj2P_s#)ChRLE!LSkO2UB%$5&=)?9sQ4Q=&j1V}1QBn7 z^8yJ&{qPGT3*miaz($0`{?ddl5nIfh9|>F1hnp{Y|NBzq!ab7wD4avz=c}Uc^C1M& zL#@Hi+#`zj^?b=yFJ>3Z_DG7o)qUQtD<+4O*q7XK=s=--AEPxm_xan3_vt_$yl+eI zKTCfmLmbck7h!!3`m&@O2U{P~e3yByr0(X zrKPk5LU8}JU+<^E`ND_F`|)+E_se|odv<(nm)}P{Oy3W>kta%|^2G5TjFI$_ZZ`k9 z`jGT#i2{9Zy}W_G&n5Bei=VnQG)lhD-_diTLY!>xdzYvheq9dL$LsVybnl;0;eWq?+J}FC34{3_b8dNrwg#>UxG#U2$;0t^ zDHoz1`GWRmgpWUe(9C&f#qM_&!ThBW6nAI-?&^x)4dD5;OY_8Q2SxoGjb`&ju&DWo7W3azlJ#-`m^h?r+pXb-bw{>mlX`XaeUziiM z;EM<7{8@WZukx2FzX@|-@}Pp=+L#oNX~kpi{yrB;ffr~{DA(T#G}|33?vJUpr>7HS zDjMM}f%6&3z6izqOCIuNCi0+yebb{j~&{3%uJ8@$+^Z_SQ`4J{0ZGeAnwG+FKM5 zk^|4PHjC%ebhHTj;zzmgC-Qwa5A{#)(A{@c^DW9FH-gxFeerhfUj1Z#9-V`(Ju5vg z635H!oz5qn8kox8{b6{%yJ9q$q^N)J$HSRC0Y_FpwO0o*|t_ zO7_tj1kWozlh31l$!KiIl@idOWS<1q!st>7g`)jSxWm9O)JLY#|G;r;5Ij#fET1pu zplvTn&kH1emGd!)5{2om#`wEqD* zr_=qdX%XZ@ny(O&u<$j*QvKfjhXr=9{nW=AvH!9MMSBXwh+yZsxiRwoimX{Zk?u2@ zzmPS1HM5l%zxjAqO{kHT+h~8OLht(5_#=L>IKPF7;`pPY0tvQ7>EbdK>)qLX_HUxo zqVSotK75Q1+$I&>^RjRDVhr)CP?^sNZp?cI=}xfmi1OfyxhO9^-3R&Y z1BvZ{OcZG3^XrX=OIUj!$`s<({$VF=Z$x@@8`e_`QvdT9#TfqhW5;b;Q(i9;n_Z|u zp?21OI!gUA_HXF>&|*HM@(X8~HjC{g`2lA7iW93(9z_9mG=i_^LJvPBosCS!P^w=r=!{1V}Di8<%2#JEAtD%KU*cV6~4gb z2Oy0L6wNU@P^aV{_c&Xvx$U$VMgaBj#5zG)AKOQ?ZdTln4`S~F|LOd&25l%h#^M(a zv=A(~@bnKZ^ZwUB=OguwKG=SY=Oftf1nk`|Kkv1nRrNf68O{BU&q7ebB9_lE#MkNQ zlV1Cxv!z&H&ie-}1ieMqo1%Rgp}s%=6P~92y|CB6!T!Ntx?84!zM*%jM>ubZo2ScU zSggOF`FFaRAg3eJEA7`{b&ALcgih25x43?SP$qtCm4;)qcKs6Z zawPUJCSk7dtGfebzQew1ja&h706uia1iA8NE|>OG-~mSA>4ZhH{a7pnXEuho literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_b.dds b/files/data/textures/omw_steam_button_b.dds new file mode 100644 index 0000000000000000000000000000000000000000..0be30636439019f9695ca56f5abfa614474cef26 GIT binary patch literal 22000 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 literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_l1.dds b/files/data/textures/omw_steam_button_l1.dds new file mode 100644 index 0000000000000000000000000000000000000000..2b79a67b985b3e73eef56c54a3bb66e895456044 GIT binary patch literal 22000 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 I6!LiXe`A%mtpET3 literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_l2.dds b/files/data/textures/omw_steam_button_l2.dds new file mode 100644 index 0000000000000000000000000000000000000000..156b1ca96c57d9a3120871fd7994214482d2f7a5 GIT binary patch literal 22000 zcmeHP4OCQB9=~sf8D$V=6vmIzFvU{S1XI*XXH>TBoeqdAv)Z;5A}N_5eHgmhLg~>w zrop)NWN%7NeH2N}r+LS5m9kDvJ4-@p$)`6=OVSNrG> zi9zraHzR5E<(})RGhX^z&09+c#E^* zbQmq~X%*j8n^6@^@thF82@eWJ6sL6q92LN~N*}W|p#RhmBdvd`lK%<+J@j3Qxqdmr z(JEa6;WrUXK(Np4!@m>wHYFuSb5+HkmiG#$&+BbD>UZyXESBOk&zAqsvThXElW0-R zf2pdqtO{cMHy7}SY?c6K`nk#aXj+jy$!1YAKI-{jCLcbcNu%vq8}jE#hLYTa6m$I) zkAD_nhW-p;rV*i;>hgl=i}Z|t$LyF338l#z`aJ$=$hX1a{aN{~F8kpqk_Z>^C>OEi z8yjyC{uIDBUmv*T{J?ZjJmuq{>$v$9zI7AD_59Y7^SwhE|5KIc9xLG2XKJ>Xng4HfeOc!GGS@}Zk&1j1FT!^KQ*DU-;a2Mdx7ZbDa=O8IF1Dv> z#SG)ICRq}#%CiEx%+g?AKYsB0`(JS z#OreX?;_^&li(&#ko4v?iOSJ%Q=HZf$oJqsnp>1Ny}a;Kntm{*z9B3|&-izJ9Z|I`TGDLM04VGIX-T-elFp^;OhKyJ$9#jusn^$3md~7nbTg*&ms~LdD=>f z>w-6%A$}C`MI65;>ZOejP<*rHyV>+*9LK3QTLcmW`}DUy`SW-L;V)<~tFIb2@A*ioKXU$?WIcqnN18uV`AL2$ z{=%rtTK6$z}!sgbmyT01i zT<78W&9wfG>QA2EU;d@`BBVE&Ouf;fyl2X#cyPzyMqPMJch>*g4_Grb8@%FyLs9Y9 z9}nDY{}&XJs*=g+Q}e^CnvDY`FD84Nd-XH!&6ci=yqV&|7Yz8C*M{vE`>p(6K< zBi1)y{Y&Ie&W{`$Dq=I5U(fhidY*g}FQPL;8E!OqV0nIDIJ=^?L;kF@`ak8r2P)5h zraZ3~5sCb5v&g@eVv+w$HXnp|@Xq4DdPVyV556iYZJ|Oi=ayHFt+lZU^&Zd5^*yB) zV*_rDB##I>Wb5tMhO;YRFmqZVH+^3CdfoVX`#-7OWYX*Vpz?xe7UeVkZ9`-9(El0# z?RMz=n;TgCC-CnP@5uGz3*T)2@2frjrW+jD&g$H2_a~87Tl!+#tfQU9x4gX_;UB_3 z{ZOvFV6g}P)nj2X075|8Ue^yB8iLo`*?xe$et+?u#=o{2`g?Z6ZmN&m)!VN+KY;kp zy`L)f?-7pI9qs$9B)i*R2wyu5`^!J<2hF_K_QEXE8kI`LB`M1b7cW}C#`_a9V$LTx zr2T+1uH=8zzjWYOXSM%!=O5;8gl`rvI?%$VC@+5}j+|5pb z z2R76N7aN(shw&cPf2I9CU+wXg?l1p_>?cz^`N&>|lCOph*3^unu^Cq!Z;3z0xS6f* zY0Gl^)qqQv`19`H@_1gG9qU(nE^Tj%1G~VDVN5|5ZBP5h z5%%Cx&;4K6{GX?|VdFtZ<-gnWU&6nS^B}NI-enRlZ#WsVGszxNozQj-qatBaodB~zBknGgMTPu z^TGXtRwZU+71q-FPd=yE9sjU|8@J(1u!U(=-*#`G_64W zUrcR#km|pl&nexOnr@(YZAkC&7tbAK>0G};BNsjl)~`uza01-DUqz5`$*|l%aNTsu zCu5TZ`v42k59f|&?y9mf{-y@4s#}94JTth5-Qt1ggrG!EoYoD&%R|!h0qmbXW@}KK z%|m}vmG*r{T#`Pyem{;1Rv_5#7T8VX)Ni@hGvR%ZB$J8qPtpOwCV*%L*NVOD1M+if z^K9xrNLie^rmN?9E=~9!EYe*g?vR$zb5+-WFa4Jd%s&S*AL!*RR;&g`1Xl;vR4L$uHkcD_+wo}&dfN8-jv zT3*+kFFuAo9`BwHB_(yOO$|Hu#C$l_ORS6IZi4v}LB_=K z=!0T$e;pv4$6kT5@)(8#+88P7fU+gx^KfLt$9}Od`4v54Q%YjzmXPw`{Ew=2EC|0v zl3#wl6V5Ax@RIyflIZz;@Re}s%AUwL1~(}W)Okt!a0t?z*sX}B@~cDW`6kct_+wRm zU$^|+#c?3~7SH`pa=ukM@6b{C)18J!VKVOKKkWiC1Np)Q;v)Q7AM%UIgOPpdptO%5 z3z@AO6SEKq&#w(47{ph7*wRvlomQ4#ZV$fXHzI!Rx~hWSq&z~G>vtP6HP*T-_WzE` zFK?e5LoiH&L@~a$A%#U6^TUu+R!ej4mkTV4z%BFJl+aC^HZ8_1SP?Ivugn~UNC8KJ>e4UtWz#e{(KG1zXdJ)DT*He z>%YYNT|<6Z`8oT^`3Wm2PH2z6{GSZH;5Gg?y4q{;SHGU|-p%xJYn&8sbwdA64`KfLcEflM3Q9Y4gsuPEx%bK@c&rD@=X+e&y(x74 zj#HUT6HuwS7ED0wU7SfdEq(y+;m@GUC)coaWV+q(RAiq^OxW!mOyQ{ED2u0zNo@U7 zux-J<**EdauY5i{mdp?N9x(qS{+dI|N4@=bXJc+Ol%LZN;%ic$5#jKd3tS|L_e6$1 zcY4P|osDrwiL!Bb*jKbZj5g~+TFq?yKP^mkrT9F;1^xT$p+bBN1`%}fEXj!@$psUGwwalwojFeA?BT7uhPs*Ae?i4j2eG zDJ=-Dx$WT0vRlaG?)s~WB8o`72)ov6^{qOu8mU2`M$?H^@)^zZFJ& z$}Tt7!|$E#Efv_~eNB1&?eM;K_{su7K6sp40DR;4xALfbpA%2dE0}-pD8?bXyPeS) zm_Jr&JoevV{xc4(H#7ePJw*8^RPK%kNss9$=0UfP7%{{GR1B8neEF?KEl=;^4hY^UEZ*> z@fi2*lR8nA#Po}Y#F(cakp7=sTc6~Au5)QwdY*HUy~`4_lppofO%e7Vp)t^;!QXnv z+j0!e9{eA?iuPAiV;_DbUzup4?QQMF4_MhZ?kS3!)vE{1%U?|(WJSo)Yt)X3mR}4M cAAV`4p?gaAHj0bh@0O#0=O`}TNODQ||4q~$wg3PC literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_l3.dds b/files/data/textures/omw_steam_button_l3.dds new file mode 100644 index 0000000000000000000000000000000000000000..3b6b174e482c790cf00896e35d34f2683af53313 GIT binary patch literal 22000 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 literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_menu.dds b/files/data/textures/omw_steam_button_menu.dds new file mode 100644 index 0000000000000000000000000000000000000000..ef0a0a501c8c3cc085b8de4b369fb96c36640bfb GIT binary patch literal 22000 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 LO#U@*1mph)YI8aW literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_r1.dds b/files/data/textures/omw_steam_button_r1.dds new file mode 100644 index 0000000000000000000000000000000000000000..bdd93de2b2975c69b7d431ad106dcbad015f1b02 GIT binary patch literal 22000 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 C_0qNg literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_r2.dds b/files/data/textures/omw_steam_button_r2.dds new file mode 100644 index 0000000000000000000000000000000000000000..052e97ebe1aca5f4511a54f5170c846435b01567 GIT binary patch literal 22000 zcmeHP3sjWXwLbs6gaMo}NCl&JXyJz3BnC|)4QXY@KyUr)wTwCwX;LewMf55dZS0CB znGr}eYt_p@Fo=(g6<6L?#jLr@X0?M!Yau3Kv}wu>aY2m|lW2#h@)+jaea_E0GyIB3 z&;;B0*D&yL&e>=0{hfW@GZ`5R8Ij zy~RVK3Vt%OEHkf`FHCQ`^51IdUl<1O zju`I6Wgoi4vcwRU{QY(NqsPC?v7a~}9-sx`Gs~0*>>3lp-rTCHE`8KVhI2F>RcT)Y z_|MfoxqVVS4ZNJv*+RQ~W8UDGpS((;cmBw&hB#AiT>zB}N>@HcH=sD8qP z^bmgK{=omRhrLo03G+9J{|n3XQEgetyuV+h-V5=6zmcV1!GA@Ff8rbRT+P37e}B`s z7sKEymeC=A=x7f^`p&_v?{2+V%td?<^K8EUdo1Dv$Pk{XyQ}?~Be#?tSeD@9%}% z;>^b;exJ_&k;!Db+58(bFjl(zVf`uj1F#Okmcm!YHmpkwF7L%nzLY#JPv-^6Jvu*= zKT`iXrOA|ml?Qnp`ey_BW;!>+en~{q#Id%f@b@?hC*pSz-%^KZZ`i&ZERJ-i`74z zzeby`YjQ1>`MU|%7W4<|Cx1!L)#4L^R(Z#d&Lol?Qu<&%N2{N_yw2O_?N2F42-GL( zcD>l&SfhPEsJ}n;U{=W${e4F|@9zc8p@H^`ki}}Xjy3*m#Sknh+0+Td^M-oB(LN*d z$CBlM>3-Jr@uPEZ$oHn?e~*=y$4_Px?lahYwAa2Kz73@Fajm(X$xHUS)+o za8zTmZydvNzU5fA#I-EAy)N-$C+;iZ^5puG@qWL!laKfPA9%*M>6LuEfAh{A%7^v_ z#`{=wKEc>d=6hfr^!KcOYAd{rHU5#hM(2Z9z<<;g+#j|kXa74kUsE7mvScW1D$#L=n z-Cpb`gBWYy^iPh-cpuEa?_D52i2wbGdx8JJ`d%?%!jxn1BGQ2VTb_RykNf{@?0-Ap zpJDj-0{O0$L&m?`yQQBF)&u@_|IrmS4AwOdP(o{#?T0j-rHKaePSTTYhZi?Om&>r6 zZ#gz*0QvrF#{bp$r)`eZ_cGI30*AH-{{5n9}B{^ zVm5xU_#jpX_9Nx~G`L;)mydgg>`&zJJ6a6wvu7Okea!Ti>m$boCmBz2c>63k*zF`` z$wLj3wJ$0D1N*K09uoh$i!8tEu6+>y0siAqM}qMS#y?0LINzhP;ce{o|B`0R9;WY5 zIQfCWST@g82^2|1B2tSmVFx?4=xhi3Sz*kFNgE zyvB;_pP%Wx=L^oc@^>+N<^CEePWBQ>9h`4ny>3cF_0aLHn>e^X($%~E`*P6wV5IdA zmmha~6t(s+x?mzP-Q#$)s7)VrfZ1O;zVk@hzCeEEKx7Uq1hb z{SsJA^$~Mud&sm9|3>k6AFh8ec>7Cy9~Dp*X`eSt|G#88t;)daOZMuX`oC-NEw3N+ z%L(oeY{e*hMA%(h;5%Nx$FJe|C-VW=|4n52`ajSs-}h*@GW_9;*Ase!`h%Im(+>xa z2V^YZpwuF6{{@ji?CW|Vi>wd$`fy#;7s|At{ehd!zg)i%mbhj7+-QHm`G5C{p!5GO z$Kdn-$0LCJGuJr(51s#Vf=K+_XntQOPn<5D|H77Ft`;u; zJXyMkm2ckym%mimcBoha^H!1%)Tc2%C|HO}{! zqUV*9OWpjw$9h$kyEo{*hoFu7uVaPN==$GeGMncsXOu2FTEW-LE#gbrg8( z&->txWkrV>#@)~-?kazaVXDuXyTuTe=38IUA3VOOe?M+9GJoO=2+cWF%lY)bg;Xmi zpWt}@Kg7y)=l;mcZx4^1)!X@L5-UFioliGD(+=xHGMJgn^7CI|szKJBPL@#30YeEk{1BlJfZZ{_H#5LDG6@>E>;X#>!oL{~{MmYy zvejn5T-p~$RE@Vtbb$uM+pCO#Rnysyvgnd{Ig?$oY$o+zlX4CjS55+PFYnK2Yep~-GZx182za7QCnzV5rlqZeDY!0gs z71Df-V5{{YDs!Br=dlvTNU?Sy9MMYog_vA&5)DVvOdq8mcf6e070K{9w8JZ%=R$dt z#j1}hTFU2ta9>;5{phl-aKudI2{G0QKJ3INbS+R&x7=+cqz5cy=+@fAsc)@pTo{pTvHZ&vwbOA5r;W zy;(61`dfNmoU{&W3`R2?inwgr|B~-l$m>@-Xt05S#9euPXh$%{Gm**^6u%;x^LAn; zS^v@dI~I(>OZ7ea2!i3;8_G8Oj|cxtP2pXCt&?y`9-^PTy}odnqy+BUs9WnD$BHF+ zuzh8Tx&Y2h$(>H+!}nF-NpWVR2)_SG%1aLs?_U7Md&a*<{zI@4%{!H}NkQ!=*P(9! z|J$bowSSC$T%DAsm_=#>_o8!1EG-saqVMHU;+U zZkq)5x>izuPK=4MVw7YOTx36nSc9yYe%KtSSxVytuv+d<{Cdrx`$4}Gp1v;$j(}PH zBelOBL9lKtES2m-s2$a9|7qP1;Jg4ThgipYq^w1O?;}wD4jO~P;Uekq?IQ@I!;Xn{ zB77eKXbS;=752!~b>Ast`Un-UzC|P?$o>U<2UZ2NrvXgXvvS;no-2)gZZ@x9ZhxoW z)@s8&ZYKW=-I=1)9YtLXkJNs-{IQO4D^g{nFg|{M9<`%n(D;AF{0AmKeSz_5tlKBo zkM6&VWia2REezq6NVV1TYu^9AhMMm;K6M7-UrP4~mmQ0O_Pg;4#dKlM#Q$aKufzD7 zxF+!ZDq{`f-4I8Om$*HCBa9)FA2Txj8wLF=*dONOfe=06o(2dpVm%DE79slh(sT$h z>J6ArEI@l&8~OZ&hHUm&#>$1_T_Rkulh{PoG^D?1uM0=yWu!puC$*mh!|J(;Y%5dT5#3oAjXi4MMABubjhCGh^Fd15b%ia5!D~+q|#)*j8Wa9UF0{-LGY^Tk0~C=-vj#{biV@h zCI44_yP1|_`R_%9f6!mj5J&u5tMIaZJ;Q$j{xK}+ZWMk3=66Q%NBllTKQimm*0cE? zoX^eFFOxp+1j-7qzI$l!dUCWl6?t~^^(2|0YXj#8&>g~jQY^zSW`MntzwZ3oVE@T6 zxo>GarM0vCbNWsk$(Vac#rze~E8aV8@++Ge_D^yg`YbJhe?A?Lx8HM*dLj4!oIWT# z_s#FK{Qcq2J-%d5;QQnv+w047%FB5?;VEz5SF6_UW%)5uHH$su{1N;ICfxbA!SO1` z7}?)QrRQf-{?n6sjHssg_e|dBaiStSVa`E@PfuzHpQCgTNNYH)x$mXfsMpAF&8qxu X>*CL)FkD_ag@hq*KV=oP9*+MXXwoi9 literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_r3.dds b/files/data/textures/omw_steam_button_r3.dds new file mode 100644 index 0000000000000000000000000000000000000000..73b4bea1f7bb3ecb45eb2df16d2e84757b7d2075 GIT binary patch literal 22000 zcmeHP4_s7LzCUM%8D>CWhRxynYr(G?r_eXxuqkiZSAM~x#E21 zoO{mi|M{Iicb<4+M#wURkh{tQ8Q_2N4{6CCgcR^kH|_CXKMDVIQ=aC(yWO7*VzB{NQhueWM)|rx&(ReB z-)LR@kvcV|_}F8*_^K*7lizU>J|V&%i*V^g=jTtkz~cJi_Qd^(=@HZWp;|Y+Dp;97 z`B|lGKi2td8sitc_f}!I5GgJH_t(E6v2xXdrzyV%q{~>T+Y(A~Rj;?gm0MI%6n9j< z|K+q?6^jpF+mJR>m&xjLb-KxmGToScT(+We6NC`@{5K+8?*fbKi`#?#9?f*;b!?3>|n@#aw(UOcD2mRiZ_=e*EqlA`s*cuL8iSxcfF_Mu__RF5XP(;VC`-?j{ zU6$|Q3}4a<>HphcgIj_@5l%7Ae@Bm{y-Fw^1LK|LjVe zKeu>*-O2baA4d66W8IdE#aEfWvph?!M;`et^XE$w3SY{)JW5IH|E4{E+WG4_b1A+F z@nMI9JtWz5TP)u$w9xW@wf?!GBwZKu{Vl3I7Un>26Vh$j*ff`oXO||lAG;9b`68u1 z%X9g3ZjKkr2h=#KHmudb9^4^6NXuo<|J3XOE5W%}$%j*ZBvHsMp?o)se@BBlmS#P2 zj_J2OdCAqJoKcLQu7@*25R$X_*w3QdK7iS^h8QZbC0CnWbyCx zfWoCIH~zus>q?K97nu_-=o@0>?v2O7=<~Z#LUX7ta~Z`P#K(<;LfCjd@p^0?DI*t& zuNfQiU$4|y`cr(r?ZG}Nma};Nka@t=DhGW}y@Totucr@|)^+pXL4lY73@H06K zd1)!$4e_i_cZl)dg^(UM8FOfPSNittXUhe9I6a`Ppz~S59wH^nr)wH~+G&04o)7V% z-%*P1wLOT(?@_okx2Q0M*?&n8=zGNT%$~nT--__KkC^?-_v9xAo917p^m3?4kBOY% zBJy$-&x^~rmi}B*e_9_8I_Om?U%>L``BrtjV|#O)UQNDxz<)+y%J}~`YdBM8#Cl<`1?ThW< zMUg!OG(k;=c&<9^9M7@BG-t+@Pnm!Dn5_r6D|c>BV*15+%zLSg8bT~wL>{uerU6wM z){iI#duYW6jm#d~lD2PeQ+ckVR?+AK5Ul^I0JtXz=TkH4RSjz^f{MIP(v&yu?_6 zN;l`MS^og-|21V{c1pzmuz26PxT)29XF2nCY}I9yugPKd3gg{|KxKv}eg1CcA%5PK z{>A(N_O5}O(lh65ffc6;>jU0r)%nwOt9{qNz255u(F7nNo&E)?{?v+t4zW<)fx zcyB4Vn(VPf(7z4Etr(QNg5@*%GbhZ}8)lXd-D`RDRR5YMObfeA3xg?tnlkc9%JOp# zl}IK|6V_u~$wyPBPBOombl>put=uAjLigZY2a@Q47vCL`0o?X!21J@RUp|I7T+U$1=A z%H(;q1%ZoqsR7{3iR)NnwA$0-zFWuQCMFN!p#FU^>?oS2Qet$LH{LVn^Zn<)AnuE z@2EWBrg%v9o3EeWCFoy&=8W0))lWzN3;#g$m&p9zmA*A*Q{qT<(oD)V<;-t5wnnxG8-lV>hOagPY<9F(|(W`VS)dhY&!YFB*PT z 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 C+cc5@ literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_view.dds b/files/data/textures/omw_steam_button_view.dds new file mode 100644 index 0000000000000000000000000000000000000000..8fb56f847fef49cf612c21ff664e4e25d661c561 GIT binary patch literal 22000 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 literal 0 HcmV?d00001 diff --git a/files/data/textures/omw_steam_button_x.dds b/files/data/textures/omw_steam_button_x.dds new file mode 100644 index 0000000000000000000000000000000000000000..9619ed243cfa4a27a4d5a4cfccd8a0f0551f12bd GIT binary patch literal 22000 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