diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..c1c3dc182 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +compile-error.txt diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..26553c449 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,10 @@ +[submodule "sksevr_plugin/skse"] + path = sksevr_plugin/skse + url = git@github.com:Odie/sksevr-mirror.git +[submodule "sksevr_plugin/common"] + path = sksevr_plugin/common + url = git@github.com:Odie/sksevr-common-mirror.git +[submodule "sksevr_plugin/luajit"] + path = sksevr_plugin/luajit + url = https://luajit.org/git/luajit.git + ignore = dirty diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..4fb2ac2b6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2012 schlangster + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 6fe5c5824..b5eeebfd0 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,48 @@ -Related repositories +SkyUI - VR +---------- + +This repository hosts the source and the packaged releases for a working +version of SkyUI (and MCM) for SkyrimVR. + +### Getting SkyUI + +To get the mod, head on over to +[the release page](https://github.com/Odie/skyui-vr/releases/) and grab the +lastest version. All you need is the .7z file. (Ignore the source code download +links.) + +### Prerequsite +Make sure [SKSE VR](http://skse.silverlock.org/) is installed. (Don't forget +the .pex files!) + +### Installation + +For MO2 users, use the "Install from file" icon in the toolbar. + +For Vortex users, drop the .7z file over the vortex window. + + +VR specific controls -------------------- -### Unofficial UI SDK -https://github.com/Mardoxx/skyrimui -Disclaimer ----------- -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Currently, there are certain limitations to how the UIs in the game can process +inputs from the VR controllers. At the moment, the UI seems to mostly receive +up/down/right/left signals from the game. This makes operating a more complex +UI like SkyUI a little difficult, but not impossible. + +Here's what you need to know. + +### Toggle trade direction +In the barter menu or the gift menu, keep hitting "left" until you've reached +the first item on the category list (titled "All"). Hit "left" again and the +trade direction should toggle. -Thanks to MIT license for providing this standard disclaimer. +### Sorting items +This applies to any screen where you can see an inventory list. With the first +item in the list selected (or nothing selected), hit "up" once to move the +sorted column to the next one. Hit "up" twice in quick succession to change the +sort direction. -Thanks to Bethesda Game Studios for creating The Elder Scrolls V: Skyrim, providing the base content and allowing us to mod it. +For trackpad users, trying using "slow swipe" and "fast swipe" to differentiate +between these two actions. The number of controller vibrations indicates how many +"up" events the game has registered. diff --git a/build/exported/skyui/.gitkeep b/build/exported/skyui/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/build/exported/widgets/skyui/.gitkeep b/build/exported/widgets/skyui/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/build/skyui/config.txt b/build/skyui/config.txt index bf005fc36..93b3c6052 100644 --- a/build/skyui/config.txt +++ b/build/skyui/config.txt @@ -27,13 +27,13 @@ itemcard.yOffset = 0 ; ===================================================================================================================== -[ItemList] +[ItemList] ; ===================================================================================================================== quantityMenu.minCount = 6 ; Number of items required to trigger quantity dialog. 0 is disabled ; ===================================================================================================================== -[Appearance] +[Appearance] ; ===================================================================================================================== icons.category.source = 'skyui/icons_category_psychosteve.swf' @@ -50,7 +50,7 @@ colors.negative.disabled = 0x800000 ; ===================================================================================================================== -[ListLayout] +[ListLayout] ; ===================================================================================================================== vars.a_textBorder.value = <0, 0, 1.1, 0> ; left right top bottom vars.n_iconSize.value = 18 @@ -63,7 +63,7 @@ defaults.entry.textFormat.align = right defaults.entry.textFormat.bold = false defaults.entry.textFormat.italic = false defaults.entry.textFormat.underline = false -defaults.entry.textFormat.size = 14 +defaults.entry.textFormat.size = 18 defaults.entry.textFormat.letterSpacing = 0.8 defaults.entry.textFormat.kerning = false defaults.entry.textFormat.leftMargin = 0 @@ -76,7 +76,7 @@ defaults.label.textFormat.align = right defaults.label.textFormat.bold = false defaults.label.textFormat.italic = false defaults.label.textFormat.underline = false -defaults.label.textFormat.size = 12 +defaults.label.textFormat.size = 16 defaults.label.textFormat.letterSpacing = 0.8 defaults.label.textFormat.kerning = false defaults.label.textFormat.leftMargin = 0 @@ -757,4 +757,4 @@ layouts.smithingListLayout.name = 'SmithingListLayout' layouts.smithingListLayout.views = layouts.alchemyListLayout.name = 'AlchemyListLayout' -layouts.alchemyListLayout.views = \ No newline at end of file +layouts.alchemyListLayout.views = diff --git a/dist/Data/Interface/skyui/config.txt b/dist/Data/Interface/skyui/config.txt index bf005fc36..ecc8e8268 100644 --- a/dist/Data/Interface/skyui/config.txt +++ b/dist/Data/Interface/skyui/config.txt @@ -118,23 +118,24 @@ columns.itemNameColumn.label.textFormat.align = left columns.itemNameColumn.state1.label.text = '$NAME' columns.itemNameColumn.state1.entry.text = @text +columns.itemNameColumn.state1.sortAttributes = columns.itemNameColumn.state1.sortOptions = {ASCENDING | CASEINSENSITIVE} columns.itemNameColumn.state2.label.text = '$EQUIPPED' columns.itemNameColumn.state2.entry.text = @text -columns.itemNameColumn.state2.sortAttributes = +columns.itemNameColumn.state2.sortAttributes = columns.itemNameColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}> columns.itemNameColumn.state2.playerOnly = true columns.itemNameColumn.state3.label.text = '$STOLEN' columns.itemNameColumn.state3.entry.text = @text -columns.itemNameColumn.state3.sortAttributes = +columns.itemNameColumn.state3.sortAttributes = columns.itemNameColumn.state3.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}> columns.itemNameColumn.state3.playerOnly = true columns.itemNameColumn.state4.label.text = '$ENCHANTED' columns.itemNameColumn.state4.entry.text = @text -columns.itemNameColumn.state4.sortAttributes = +columns.itemNameColumn.state4.sortAttributes = columns.itemNameColumn.state4.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}> diff --git a/dist/Data/Scripts/Source/SKI_ConfigBase.psc b/dist/Data/Scripts/Source/SKI_ConfigBase.psc index 5f1fadd58..830c803d5 100644 --- a/dist/Data/Scripts/Source/SKI_ConfigBase.psc +++ b/dist/Data/Scripts/Source/SKI_ConfigBase.psc @@ -10,6 +10,7 @@ int property STATE_RESET = 1 autoReadonly int property STATE_SLIDER = 2 autoReadonly int property STATE_MENU = 3 autoReadonly int property STATE_COLOR = 4 autoReadonly +int property STATE_INPUT = 5 autoReadonly int property OPTION_TYPE_EMPTY = 0x00 autoReadonly int property OPTION_TYPE_HEADER = 0x01 autoReadonly @@ -19,6 +20,7 @@ int property OPTION_TYPE_SLIDER = 0x04 autoReadonly int property OPTION_TYPE_MENU = 0x05 autoReadonly int property OPTION_TYPE_COLOR = 0x06 autoReadonly int property OPTION_TYPE_KEYMAP = 0x07 autoReadonly +int property OPTION_TYPE_INPUT = 0x08 autoReadonly int property OPTION_FLAG_NONE = 0x00 autoReadonly int property OPTION_FLAG_DISABLED = 0x01 autoReadonly @@ -56,6 +58,7 @@ int[] _colorParams int _activeOption = -1 string _infoText +string _inputStartText bool _messageResult = false bool _waitForMessage = false @@ -741,7 +744,7 @@ bool function ShowMessage(string a_message, bool a_withCancel = true, string a_a endWhile UnregisterForModEvent("SKICP_messageDialogClosed") - + return _messageResult endFunction @@ -765,7 +768,7 @@ function OpenConfig() endFunction function CloseConfig() - OnConfigClose() + OnConfigClose() ClearOptionBuffers() _waitForMessage = false @@ -780,14 +783,14 @@ endFunction function SetPage(string a_page, int a_index) _currentPage = a_page _currentPageNum = 1+a_index - + ; Set default title, can be overridden in OnPageReset if (a_page != "") SetTitleText(a_page) else SetTitleText(ModName) endIf - + ClearOptionBuffers() _state = STATE_RESET OnPageReset(a_page) @@ -805,18 +808,18 @@ int function AddOption(int a_optionType, string a_text, string a_strValue, float if (pos == -1) return -1 ; invalid endIf - + _optionFlagsBuf[pos] = a_optionType + a_flags * 0x100 _textBuf[pos] = a_text _strValueBuf[pos] = a_strValue _numValueBuf[pos] = a_numValue - + ; Just use numerical value of fill mode _cursorPosition += _cursorFillMode if (_cursorPosition >= 128) _cursorPosition = -1 endIf - + ; byte 1 - position ; byte 2 - page return pos + _currentPageNum * 0x100 @@ -827,7 +830,7 @@ function AddOptionST(string a_stateName, int a_optionType, string a_text, string Error("State option name " + a_stateName + " is already in use") return endIf - + int index = AddOption(a_optionType, a_text, a_strValue, a_numValue, a_flags) % 0x100 if (index < 0) return @@ -868,7 +871,7 @@ function WriteOptionBuffers() endif i += 1 endWhile - + UI.InvokeIntA(menu, root + ".setOptionFlagsBuffer", _optionFlagsBuf) UI.InvokeStringA(menu, root + ".setOptionTextBuffer", _textBuf) UI.InvokeStringA(menu, root + ".setOptionStrValueBuffer", _strValueBuf) @@ -1114,3 +1117,89 @@ function RemapKey(int a_index, int a_keyCode, string a_conflictControl, string a OnOptionKeyMapChange(option, a_keyCode, a_conflictControl, a_conflictName) endIf endFunction + +function OnOptionInputOpen(Int a_option) +{Called when a text input option has been selected} +endFunction + +function OnInputOpenST() +{Called when a text input state option has been selected} +endFunction + +function OnOptionInputAccept(Int a_option, String a_input) +{Called when a new text input has been accepted} +endFunction + +function OnInputAcceptST(String a_input) +{Called when a new text input has been accepted for this state option} +endFunction + +function SetInputOptionValue(Int a_option, String a_value, Bool a_noUpdate) + Int index = a_option % 256 + Int type = _optionFlagsBuf[index] % 256 + if type != self.OPTION_TYPE_INPUT + Int pageIdx = a_option / 256 - 1 + if pageIdx != -1 + self.Error("Option type mismatch. Expected input option, page \"" + Pages[pageIdx] + "\", index " + index as String) + else + self.Error("Option type mismatch. Expected input option, page \"\", index " + index as String) + endIf + return + endIf + self.SetOptionStrValue(index, a_value, a_noUpdate) +endFunction + +function SetInputOptionValueST(String a_value, Bool a_noUpdate, String a_stateName) + Int index = self.GetStateOptionIndex(a_stateName) + if index < 0 + self.Error("Cannot use SetInputOptionValueST outside a valid option state") + return + endIf + self.SetInputOptionValue(index, a_value, a_noUpdate) +endFunction + +function RequestInputDialogData(Int a_index) + _activeOption = a_index + _currentPageNum * 256 + _inputStartText = "" + _state = self.STATE_INPUT + String optionState = _stateOptionMap[a_index] + if optionState != "" + String oldState = self.GetState() + self.GotoState(optionState) + self.OnInputOpenST() + self.GotoState(oldState) + else + self.OnOptionInputOpen(_activeOption) + endIf + _state = self.STATE_DEFAULT + ui.InvokeString(self.JOURNAL_MENU, self.MENU_ROOT + ".setInputDialogParams", _inputStartText) +endFunction + +Int function AddInputOption(String a_text, String a_value, Int a_flags) + return self.AddOption(self.OPTION_TYPE_INPUT, a_text, a_value, 0 as Float, a_flags) +endFunction + +function AddInputOptionST(String a_stateName, String a_text, String a_value, Int a_flags) + self.AddOptionST(a_stateName, self.OPTION_TYPE_INPUT, a_text, a_value, 0 as Float, a_flags) +endFunction + +function SetInputDialogStartText(String a_text) + if _state != self.STATE_INPUT + self.Error("Cannot set input dialog params while outside OnOptionInputOpen()") + return + endIf + _inputStartText = a_text +endFunction + +function SetInputText(String a_text) + String optionState = _stateOptionMap[_activeOption % 256] + if optionState != "" + String oldState = self.GetState() + self.GotoState(optionState) + self.OnInputAcceptST(a_text) + self.GotoState(oldState) + else + self.OnOptionInputAccept(_activeOption, a_text) + endIf + _activeOption = -1 +endFunction diff --git a/dist/Data/Scripts/Source/SKI_ConfigManager.psc b/dist/Data/Scripts/Source/SKI_ConfigManager.psc index a67391a70..ae5ddf8be 100644 --- a/dist/Data/Scripts/Source/SKI_ConfigManager.psc +++ b/dist/Data/Scripts/Source/SKI_ConfigManager.psc @@ -70,6 +70,8 @@ event OnGameReload() RegisterForModEvent("SKICP_menuAccepted", "OnMenuAccept") RegisterForModEvent("SKICP_colorSelected", "OnColorSelect") RegisterForModEvent("SKICP_colorAccepted", "OnColorAccept") + self.RegisterForModEvent("SKICP_inputSelected", "OnInputSelect") + self.RegisterForModEvent("SKICP_inputAccepted", "OnInputAccept") RegisterForModEvent("SKICP_dialogCanceled", "OnDialogCancel") RegisterForMenu(JOURNAL_MENU) @@ -357,6 +359,15 @@ function Log(string a_msg) Debug.Trace(self + ": " + a_msg) endFunction +function OnInputSelect(String a_eventName, String a_strArg, Float a_numArg, Form a_sender) + Int optionIndex = a_numArg as Int + _activeConfig.RequestInputDialogData(optionIndex) +endFunction + +function OnInputAccept(String a_eventName, String a_strArg, Float a_numArg, Form a_sender) + _activeConfig.SetInputText(a_strArg) + ui.InvokeBool(self.JOURNAL_MENU, self.MENU_ROOT + ".unlock", true) +endFunction ; STATES --------------------------------------------------------------------------------------- diff --git a/dist/Data/Scripts/Source/SKI_ConfigMenu.psc b/dist/Data/Scripts/Source/SKI_ConfigMenu.psc index 1dc7cdc31..a661f0138 100644 --- a/dist/Data/Scripts/Source/SKI_ConfigMenu.psc +++ b/dist/Data/Scripts/Source/SKI_ConfigMenu.psc @@ -25,7 +25,7 @@ scriptname SKI_ConfigMenu extends SKI_ConfigBase ; 8: - Removed unsupported icon themes int function GetVersion() - return 8 + return 9 endFunction @@ -329,7 +329,24 @@ event OnVersionUpdate(int a_version) SKI_SettingsManagerInstance.SetOverride("Appearance$icons$category$source", _categoryIconThemeValues[_categoryIconThemeIdx]) endIf - + if a_version >= 9 && CurrentVersion < 9 + debug.Trace(self as String + ": Updating to script version 9") + _categoryIconThemeShortNames = new String[4] + _categoryIconThemeShortNames[0] = "SKYUI V5" + _categoryIconThemeShortNames[1] = "CELTIC" + _categoryIconThemeShortNames[2] = "CURVED" + _categoryIconThemeShortNames[3] = "STRAIGHT" + _categoryIconThemeLongNames = new String[4] + _categoryIconThemeLongNames[0] = "SkyUI V5, by PsychoSteve" + _categoryIconThemeLongNames[1] = "Celtic, by GreatClone" + _categoryIconThemeLongNames[2] = "Curved, by T3T" + _categoryIconThemeLongNames[3] = "Straight, by T3T" + _categoryIconThemeValues = new String[4] + _categoryIconThemeValues[0] = "skyui\\icons_category_psychosteve.swf" + _categoryIconThemeValues[1] = "skyui\\icons_category_celtic.swf" + _categoryIconThemeValues[2] = "skyui\\icons_category_curved.swf" + _categoryIconThemeValues[3] = "skyui\\icons_category_straight.swf" + endIf endEvent @@ -353,7 +370,7 @@ event OnPageReset(string a_page) AddHeaderOption("$Item List") AddTextOptionST("ITEMLIST_FONT_SIZE", "$Font Size", _sizes[_itemlistFontSizeIdx]) AddSliderOptionST("ITEMLIST_QUANTITY_MIN_COUNT", "$Quantity Menu Min. Count", _itemlistQuantityMinCount) - ;AddMenuOptionST("ITEMLIST_CATEGORY_ICON_THEME", "$Category Icon Theme", _categoryIconThemeShortNames[_categoryIconThemeIdx]) + AddMenuOptionST("ITEMLIST_CATEGORY_ICON_THEME", "$Category Icon Theme", _categoryIconThemeShortNames[_categoryIconThemeIdx]) AddToggleOptionST("ITEMLIST_NO_ICON_COLORS", "$Disable Icon Colors", _itemlistNoIconColors) AddEmptyOption() @@ -376,7 +393,7 @@ event OnPageReset(string a_page) AddHeaderOption("$Favorite Groups") AddMenuOptionST("FAV_GROUP_SELECT", "", "$Group {" + (_favCurGroupIdx+1) + "}") AddToggleOptionST("FAV_GROUP_UNEQUIP_ARMOR", "$Unequip Armor", SKI_FavoritesManagerInstance.GetGroupFlag(_favCurGroupIdx, ARMOR_FLAG)) - AddToggleOptionST("FAV_GROUP_UNEQUIP_HANDS", "$Unequip Hands", SKI_FavoritesManagerInstance.GetGroupFlag(_favCurGroupIdx, HANDS_FLAG)) + AddToggleOptionST("FAV_GROUP_UNEQUIP_HANDS", "$Unequip Hands", SKI_FavoritesManagerInstance.GetGroupFlag(_favCurGroupIdx, HANDS_FLAG)) ; ------------------------------------------------------- elseIf (a_page == "$Controls") @@ -426,7 +443,7 @@ event OnPageReset(string a_page) ; ------------------------------------------------------- elseIf (a_page == "$Advanced") SetCursorFillMode(TOP_TO_BOTTOM) - + AddHeaderOption("$3D Item") AddSliderOptionST("XD_ITEM_XOFFSET", "$Horizontal Offset", _3DItemXOffset, "{0}", _3DItemFlags) AddSliderOptionST("XD_ITEM_YOFFSET", "$Vertical Offset", _3DItemYOffset, "{0}", _3DItemFlags) @@ -453,15 +470,15 @@ event OnPageReset(string a_page) AddEmptyOption() AddHeaderOption("$SWF Version Checking") - AddToggleOptionST("CHECK_MAP_MENU", "Map Menu", SKI_MainInstance.MapMenuCheckEnabled) - AddToggleOptionST("CHECK_FAVORITES_MENU", "Favorites Menu", SKI_MainInstance.FavoritesMenuCheckEnabled) + ; AddToggleOptionST("CHECK_MAP_MENU", "Map Menu", SKI_MainInstance.MapMenuCheckEnabled) + ; AddToggleOptionST("CHECK_FAVORITES_MENU", "Favorites Menu", SKI_MainInstance.FavoritesMenuCheckEnabled) AddToggleOptionST("CHECK_INVENTORY_MENU", "Inventory Menu", SKI_MainInstance.InventoryMenuCheckEnabled) AddToggleOptionST("CHECK_MAGIC_MENU", "Magic Menu", SKI_MainInstance.MagicMenuCheckEnabled) AddToggleOptionST("CHECK_BARTER_MENU", "Barter Menu", SKI_MainInstance.BarterMenuCheckEnabled) AddToggleOptionST("CHECK_CONTAINER_MENU", "Container Menu", SKI_MainInstance.ContainerMenuCheckEnabled) AddToggleOptionST("CHECK_CRAFTING_MENU", "Crafting Menu", SKI_MainInstance.CraftingMenuCheckEnabled) AddToggleOptionST("CHECK_GIFT_MENU", "Gift Menu", SKI_MainInstance.GiftMenuCheckEnabled) - + endIf endEvent @@ -480,7 +497,7 @@ state FAV_GROUP_ADD_KEY ; KEYMAP endEvent event OnDefaultST() - SKI_FavoritesManagerInstance.GroupAddKey = 33 + SKI_FavoritesManagerInstance.GroupAddKey = 33 RefreshFavoriteHotkeys() endEvent @@ -502,7 +519,7 @@ state FAV_GROUP_USE_KEY ; KEYMAP endEvent event OnDefaultST() - SKI_FavoritesManagerInstance.GroupUseKey = 19 + SKI_FavoritesManagerInstance.GroupUseKey = 19 RefreshFavoriteHotkeys() endEvent @@ -524,7 +541,7 @@ state FAV_SET_ICON_KEY ; KEYMAP endEvent event OnDefaultST() - SKI_FavoritesManagerInstance.SetIconKey = 56 + SKI_FavoritesManagerInstance.SetIconKey = 56 RefreshFavoriteHotkeys() endEvent @@ -546,7 +563,7 @@ state FAV_EQUIP_STATE_KEY ; KEYMAP endEvent event OnDefaultST() - SKI_FavoritesManagerInstance.SaveEquipStateKey = 20 + SKI_FavoritesManagerInstance.SaveEquipStateKey = 20 RefreshFavoriteHotkeys() endEvent @@ -568,7 +585,7 @@ state FAV_TOGGLE_FOCUS ; KEYMAP endEvent event OnDefaultST() - SKI_FavoritesManagerInstance.ToggleFocusKey = 57 + SKI_FavoritesManagerInstance.ToggleFocusKey = 57 RefreshFavoriteHotkeys() endEvent @@ -724,7 +741,7 @@ state FAV_MENU_HELP_ENABLED ; TOGGLE event OnHighlightST() SetInfoText("$SKI_INFO1{$On}") endEvent - + endState state FAV_GROUP_SELECT ; MENU @@ -754,7 +771,7 @@ state FAV_GROUP_SELECT ; MENU event OnHighlightST() SetInfoText("$SKI_INFO6") endEvent - + endState state FAV_GROUP_UNEQUIP_ARMOR ; TOGGLE @@ -779,7 +796,7 @@ state FAV_GROUP_UNEQUIP_ARMOR ; TOGGLE event OnHighlightST() SetInfoText("$SKI_INFO7{$Off}") endEvent - + endState state FAV_GROUP_UNEQUIP_HANDS ; TOGGLE @@ -804,7 +821,7 @@ state FAV_GROUP_UNEQUIP_HANDS ; TOGGLE event OnHighlightST() SetInfoText("$SKI_INFO8{$Off}") endEvent - + endState ; ------------------------------------------------------- @@ -830,7 +847,7 @@ state ITEMLIST_FONT_SIZE ; TEXT event OnHighlightST() SetInfoText("$SKI_INFO1{" + _sizes[1] + "}") endEvent - + endState state ITEMLIST_QUANTITY_MIN_COUNT ; SLIDER @@ -857,7 +874,7 @@ state ITEMLIST_QUANTITY_MIN_COUNT ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO2{6}") endEvent - + endState state ITEMLIST_CATEGORY_ICON_THEME ; MENU @@ -883,7 +900,7 @@ state ITEMLIST_CATEGORY_ICON_THEME ; MENU event OnHighlightST() SetInfoText("$SKI_INFO1{" + _categoryIconThemeShortNames[0] + "}") endEvent - + endState state ITEMLIST_NO_ICON_COLORS ; TOGGLE @@ -903,7 +920,7 @@ state ITEMLIST_NO_ICON_COLORS ; TOGGLE event OnHighlightST() SetInfoText("$SKI_INFO1{$Off}") endEvent - + endState ; ------------------------------------------------------- @@ -933,14 +950,14 @@ state EFFECT_WIDGET_ENABLED ; TOGGLE SetOptionFlagsST(_effectWidgetFlags, true, "EFFECT_WIDGET_ICON_SIZE") SetOptionFlagsST(_effectWidgetFlags, true, "EFFECT_WIDGET_MIN_TIME_LEFT") - + SetToggleOptionValueST(true) endEvent event OnHighlightST() SetInfoText("$SKI_INFO1{$On}") endEvent - + endState state EFFECT_WIDGET_ICON_SIZE ; TEXT @@ -965,7 +982,7 @@ state EFFECT_WIDGET_ICON_SIZE ; TEXT event OnHighlightST() SetInfoText("$SKI_INFO1{" + _sizes[1] + "}") endEvent - + endState state EFFECT_WIDGET_ORIENTATION ; TEXT @@ -976,7 +993,7 @@ state EFFECT_WIDGET_ORIENTATION ; TEXT else _effectWidgetOrientationIdx = 0 endIf - + SKI_ActiveEffectsWidgetInstance.Orientation = _orientationValues[_effectWidgetOrientationIdx] SetTextOptionValueST(_orientations[_effectWidgetOrientationIdx]) endEvent @@ -1553,7 +1570,7 @@ state CHECK_INVENTORY_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState state CHECK_MAGIC_MENU ; SLIDER @@ -1572,7 +1589,7 @@ state CHECK_MAGIC_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState state CHECK_BARTER_MENU ; SLIDER @@ -1591,7 +1608,7 @@ state CHECK_BARTER_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState state CHECK_CONTAINER_MENU ; SLIDER @@ -1610,7 +1627,7 @@ state CHECK_CONTAINER_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState state CHECK_GIFT_MENU ; SLIDER @@ -1629,7 +1646,7 @@ state CHECK_GIFT_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState state CHECK_MAP_MENU ; SLIDER @@ -1648,7 +1665,7 @@ state CHECK_MAP_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState state CHECK_FAVORITES_MENU ; SLIDER @@ -1667,7 +1684,7 @@ state CHECK_FAVORITES_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState state CHECK_CRAFTING_MENU ; SLIDER @@ -1686,7 +1703,7 @@ state CHECK_CRAFTING_MENU ; SLIDER event OnHighlightST() SetInfoText("$SKI_INFO3{$On}") endEvent - + endState @@ -1935,7 +1952,7 @@ endFunction ; REMOVED DATA ----------------------------------------------------------------------------------- - + ; -- Version 1 -- ; (remove version) ; int _itemlistFontSizeOID_T ; (4) @@ -1966,4 +1983,4 @@ endFunction ; -- Version 3 -- -; int _3DItemDisablePositioningOID_B ; (4) \ No newline at end of file +; int _3DItemDisablePositioningOID_B ; (4) diff --git a/dist/Data/Scripts/Source/SKI_FavoritesManager.psc b/dist/Data/Scripts/Source/SKI_FavoritesManager.psc index 8c499bc56..50886462e 100644 --- a/dist/Data/Scripts/Source/SKI_FavoritesManager.psc +++ b/dist/Data/Scripts/Source/SKI_FavoritesManager.psc @@ -954,6 +954,11 @@ bool function ProcessItem(Form a_item, int a_itemType, bool a_allowDeferring = t endIf return true + + ; MISC ------------ + elseIf a_itemType == 32 + PlayerREF.EquipItem(a_item, abSilent = True) + return true endIf return true diff --git a/dist/Data/Scripts/Source/SKI_Main.psc b/dist/Data/Scripts/Source/SKI_Main.psc index a8a83ddf5..c85e4b62e 100644 --- a/dist/Data/Scripts/Source/SKI_Main.psc +++ b/dist/Data/Scripts/Source/SKI_Main.psc @@ -29,18 +29,18 @@ bool _magicMenuCheckEnabled = true bool _barterMenuCheckEnabled = true bool _containerMenuCheckEnabled = true bool _giftMenuCheckEnabled = true -bool _mapMenuCheckEnabled = true -bool _favoritesMenuCheckEnabled = true +bool _mapMenuCheckEnabled = false ;; SkyUI-VR doesn't come with a custom map +bool _favoritesMenuCheckEnabled = false ;; SkyUI-VR doesn't come with a custom favorites menu bool _craftingMenuCheckEnabled = true ; PROPERTIES -------------------------------------------------------------------------------------- -int property MinSKSERelease = 44 autoReadonly -string property MinSKSEVersion = "1.6.16" autoReadonly +int property MinSKSERelease = 53 autoReadonly +string property MinSKSEVersion = "2.0.10" autoReadonly -int property ReqSWFRelease = 17 autoReadonly -string property ReqSWFVersion = "5.0" autoReadonly +int property ReqSWFRelease = 2018 autoReadonly +string property ReqSWFVersion = "5.2 SE" autoReadonly bool property ErrorDetected = false auto @@ -122,31 +122,33 @@ endProperty bool property MapMenuCheckEnabled bool function get() - return _mapMenuCheckEnabled + ;; return _mapMenuCheckEnabled + return false endFunction function set(bool a_val) - _mapMenuCheckEnabled = a_val - if (a_val) - RegisterForMenu(MAP_MENU) - else - UnregisterForMenu(MAP_MENU) - endIf + ;; _mapMenuCheckEnabled = a_val + ;; if (a_val) + ;; RegisterForMenu(MAP_MENU) + ;; else + ;; UnregisterForMenu(MAP_MENU) + ;; endIf endFunction endProperty bool property FavoritesMenuCheckEnabled bool function get() - return _favoritesMenuCheckEnabled + ;; return _favoritesMenuCheckEnabled + return false endFunction function set(bool a_val) - _favoritesMenuCheckEnabled = a_val - if (a_val) - RegisterForMenu(FAVORITES_MENU) - else - UnregisterForMenu(FAVORITES_MENU) - endIf + ;; _favoritesMenuCheckEnabled = a_val + ;; if (a_val) + ;; RegisterForMenu(FAVORITES_MENU) + ;; else + ;; UnregisterForMenu(FAVORITES_MENU) + ;; endIf endFunction endProperty @@ -177,22 +179,22 @@ event OnGameReload() ErrorDetected = false if (SKSE.GetVersionRelease() == 0) - Error(ERR_SKSE_MISSING, "The Skyrim Script Extender (SKSE) is not running.\nSkyUI will not work correctly!\n\n" \ - + "This message may also appear if a new Skyrim Patch has been released. In this case, wait until SKSE has been updated, then install the new version.") + Error(ERR_SKSE_MISSING, "The Skyrim Script Extender (SKSEVR) is not running.\nSkyUI will not work correctly!\n\n" \ + + "This message may also appear if a new Skyrim Patch has been released. In this case, wait until SKSEVR has been updated, then install the new version.") return elseIf (GetType() == 0) - Error(ERR_SKSE_BROKEN, "The SKSE scripts have been overwritten or are not properly loaded.\nReinstalling SKSE might fix this.") + Error(ERR_SKSE_BROKEN, "The SKSEVR scripts have been overwritten or are not properly loaded.\nReinstalling SKSE might fix this.") return elseIf (SKSE.GetVersionRelease() < MinSKSERelease) - Error(ERR_SKSE_VERSION_RT, "SKSE is outdated.\nSkyUI will not work correctly!\n" \ + Error(ERR_SKSE_VERSION_RT, "SKSEVR is outdated.\nSkyUI will not work correctly!\n" \ + "Required version: " + MinSKSEVersion + " or newer\n" \ + "Detected version: " + SKSE.GetVersion() + "." + SKSE.GetVersionMinor() + "." + SKSE.GetVersionBeta()) return elseIf (SKSE.GetScriptVersionRelease() < MinSKSERelease) - Error(ERR_SKSE_VERSION_SCPT, "SKSE scripts are outdated.\nYou probably forgot to install/update them with the rest of SKSE.\nSkyUI will not work correctly!") + Error(ERR_SKSE_VERSION_SCPT, "SKSEVR scripts are outdated.\nYou probably forgot to install/update them with the rest of SKSE.\nSkyUI will not work correctly!") return endIf @@ -279,14 +281,14 @@ event OnMenuOpen(string a_menuName) endIf elseIf (a_menuName == MAP_MENU) - if (CheckMenuVersion("map.swf", a_menuName, "_global.Map.MapMenu")) - UnregisterForMenu(a_menuName) - endIf + ; if (CheckMenuVersion("map.swf", a_menuName, "_global.Map.MapMenu")) + ; UnregisterForMenu(a_menuName) + ; endIf elseIf (a_menuName == FAVORITES_MENU) - if (CheckMenuVersion("favoritesmenu.swf", a_menuName, "_global.FavoritesMenu")) - UnregisterForMenu(a_menuName) - endIf + ; if (CheckMenuVersion("favoritesmenu.swf", a_menuName, "_global.FavoritesMenu")) + ; UnregisterForMenu(a_menuName) + ; endIf elseIf (a_menuName == CRAFTING_MENU) if (CheckMenuVersion("craftingmenu.swf", a_menuName, "_global.CraftingMenu")) diff --git a/dist/Data/Scripts/Source/SKI_PlayerInventoryHook.psc b/dist/Data/Scripts/Source/SKI_PlayerInventoryHook.psc new file mode 100644 index 000000000..738cef79e --- /dev/null +++ b/dist/Data/Scripts/Source/SKI_PlayerInventoryHook.psc @@ -0,0 +1,65 @@ +scriptname SKI_PlayerInventoryHook extends ReferenceAlias + +;; Interface for FormDB +Function SetInt(Form form, string fieldName, int val) global native +int Function GetInt(Form form, string fieldName, int default_val) global native +Function SetBool(Form form, string fieldName, bool val) global native +bool Function GetBool(Form form, string fieldName, bool default_val) global native +Function RemoveField(Form form, string fieldName) global native +Function RemoveAllfields(Form form) global native + +Event OnInit() + ;; Debug.Trace("[PIH] PlayerInventoryHook started") +endEvent + +String function form2str(Form f) + return f + " " + f.GetName() +endFunction + +String function obj2str(ObjectReference o) + return o + " base: " + form2str(o.GetBaseObject()) +endFunction + +Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) + ;; Debug.Trace("[PIH] OnItemAdded") + ;; Debug.Trace("[PIH] baseItem: " + form2str(akBaseItem)) + ;; if akSourceContainer != None + ;; Debug.Trace("[PIH] SourceContainer: " + obj2str(akSourceContainer)) + ;; endIf + ;; We want to associate some data with the base Form to indicate that this item is "new". + ;; { + ;; = {skyui = {newItem: true}} + ;; } + ;; + ;; This "new" status is only useful/meaningful when we're viewing the player's inventory. + ;; Care should be taken to ignore this flag when not viewing player inventory. + + if akSourceContainer != Game.GetPlayer() + ;; Add a "new" tag to the item indicating that it is new + SetBool(akBaseItem, "skyui/newItem", true) + + ;; bool val = GetBool(akBaseItem, "skyui/newItem", false) + ;; Debug.Trace("[PIH] Setting 'new' flag for " + akBaseItem + " to " + val) + + endIf +endEvent + +Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) + ;; Debug.Trace("[PIH] OnItemRemoved") + ;; Debug.Trace("[PIH] baseItem: " + form2str(akBaseItem)) + ;; if akDestContainer != None + ;; Debug.Trace("[PIH] DestContainer: " + obj2str(akDestContainer)) + ;; endIf + + ;; Make sure to clean any data associated with the base Form if the item is removed. + ;; Another script might move the item before the player has the opportunity to open the inventory and cause + ;; all the "new" tags to be cleared. + if akDestContainer != Game.GetPlayer() + ;; bool val = GetBool(akBaseItem, "skyui/newItem", false) + ;; if val != false + ;; Debug.Trace("[PIH] " + akBaseItem + " still has the 'new' flag on it!") + ;; endIf + RemoveField(akBaseItem, "skyui") + ;; Debug.Trace("[PIH] Destroying data associated with " + akBaseItem) + endIf +endEvent diff --git a/dist/Data/SkyUI.esp b/dist/Data/SkyUI.esp deleted file mode 100644 index 3daac9890..000000000 Binary files a/dist/Data/SkyUI.esp and /dev/null differ diff --git a/dist/Data/SkyUI_SE.esp b/dist/Data/SkyUI_SE.esp new file mode 100644 index 000000000..d1d2cc7ad Binary files /dev/null and b/dist/Data/SkyUI_SE.esp differ diff --git a/dist/filegroup_scripts.txt b/dist/filegroup_scripts.txt index 872910051..c0c73dc21 100644 --- a/dist/filegroup_scripts.txt +++ b/dist/filegroup_scripts.txt @@ -4,6 +4,7 @@ Scripts\SKI_ConfigManager.pex Scripts\SKI_ConfigMenu.pex Scripts\SKI_FavoritesManager.pex Scripts\SKI_Main.pex +Scripts\SKI_PlayerInventoryHook.pex Scripts\SKI_PlayerLoadGameAlias.pex Scripts\SKI_QF_ConfigManagerInstance.pex Scripts\SKI_QuestBase.pex @@ -16,6 +17,7 @@ Scripts\Source\SKI_ConfigManager.psc Scripts\Source\SKI_ConfigMenu.psc Scripts\Source\SKI_FavoritesManager.psc Scripts\Source\SKI_Main.psc +Scripts\Source\SKI_PlayerInventoryHook.psc Scripts\Source\SKI_PlayerLoadGameAlias.psc Scripts\Source\SKI_QF_ConfigManagerInstance.psc Scripts\Source\SKI_QuestBase.psc diff --git a/misc/Flash Util/build-all.jsfl b/misc/Flash Util/build-all.jsfl new file mode 100644 index 000000000..acb07c5b2 --- /dev/null +++ b/misc/Flash Util/build-all.jsfl @@ -0,0 +1,52 @@ +var srcDir = "file:///E:/dev/skyui/src/" +var flaFiles = [ + "CraftingMenu/craftingmenu.fla", + //"FavoritesMenu/favoritesmenu.fla", + //"HUDWidgets/activeeffects.fla", + //"HUDWidgets/widgetloader.fla", + "ItemMenus/bartermenu.fla", + "ItemMenus/bottombar.fla", + "ItemMenus/containermenu.fla", + "ItemMenus/giftmenu.fla", + "ItemMenus/inventorylists.fla", + "ItemMenus/inventorymenu.fla", + "ItemMenus/itemcard.fla", + "ItemMenus/magicmenu.fla", + //"MapMenu/map.fla", + "ModConfigPanel/configpanel.fla", + //"ModConfigPanel/mcm_splash.fla", + //"ModConfigPanel/skyui_splash.fla", + "PauseMenu/quest_journal/quest_journal.xfl", + "Resources/buttonArt/buttonArt.xfl", + //"Resources/icons_category_celtic.fla", + //"Resources/icons_category_curved.fla", + //"Resources/icons_category_psychosteve.fla", + //"Resources/icons_category_straight.fla", + //"Resources/icons_effect_psychosteve.fla", + //"Resources/icons_item_psychosteve.fla", + //"Resources/mapMarkerArt.fla", +]; + +for(var i = 0; i < flaFiles.length; i++) { + flaFiles[i] = srcDir + flaFiles[i]; +} + +// Starting a new compile session +// Clear out all errors +var logfile = "file:///E:/dev/skyui/compile-error.txt"; +FLfile.remove(logfile); +fl.compilerErrors.clear(); + +function build(documentUri) { + FLfile.remove(logfile); + var doc = fl.openDocument(documentUri); + doc.publish(); + fl.compilerErrors.save(logfile, true); + if( FLfile.getSize(logfile) > 27 ) + throw "Compile error encountered!"; +} + +for(idx in flaFiles) { + build(flaFiles[idx]); +} + diff --git a/misc/cp-built-files b/misc/cp-built-files new file mode 100644 index 000000000..ccbc849c0 --- /dev/null +++ b/misc/cp-built-files @@ -0,0 +1,166 @@ +#!/usr/bin/env ruby + +# This utility copys the newly built files in ../build to the +# `destination_dir`. It's also possible to watch the directory +# so built files are copied automatically. +# +# This was written for ruby 2.5 and requires WSL and the 'listen' +# gem for the directory watching capability. + +require('optparse') +require('pathname') +require('fileutils') + +options = {} +optParser = OptionParser.new do |opts| + opts.banner = "Usage: cpBuiltFiles [options] destination_dir" + + opts.on("-w", "--watch", "Watch built directory") do + options[:watch] = true + end + + opts.on_tail("-h", "--help", "Show this message") do + puts opts + exit + end +end + +optParser.parse! + +destDir = ARGV.pop +if not destDir then + destDir = ENV["SKYUIVR_TEST_DIR"] +end +if not destDir then + puts optParser + exit +end + +# This is where we'll be trying to copy files from +srcDirPath = Pathname.new(__FILE__).parent + "../build" + +# This is where we'll be trying to copy files to +destDirPath = Pathname.new(destDir) + +puts("Checking: #{destDir}\n\n") +filesCopied = 0 + +# For each file in the destination directory... +Pathname.glob("#{destDir}/**/*").each do |destPath| + + # For all files (not a directory)... + next if destPath.directory? + next if destPath.to_s.include? "/exported/" + + srcPath = srcDirPath + destPath.relative_path_from(destDirPath) + + # If the a matching file from the build (src) directory exists, and it appears + # to be newer... + # This should mean that the file was newly built. + if srcPath.exist? && srcPath.mtime() > destPath.mtime() then + + # Copy the file over to the destination + puts("#{srcPath} => #{destPath}") + FileUtils::copy_file(srcPath.realpath, destPath.realpath) + filesCopied = filesCopied + 1 + + end +end + +if filesCopied != 0 then + puts +end +puts("#{filesCopied} files copied") + + +def getDestPath(srcBaseDirPath, srcFilePath, destBaseDirPath) + return destBaseDirPath + srcFilePath.relative_path_from(srcBaseDirPath) +end + +if options[:watch] then + require('listen') + require('thread') + + def waitFileStopsGrowing(filename) + oldSize = 0 + newSize = File.size(filename) + while oldSize != newSize do + oldSize = newSize + sleep(1) + newSize = File.size(filename) + end + end + + puts("Watching #{srcDirPath} for changes...") + + # Create a set that records which files we're waiting for to finish writing + semaphore = Mutex.new + filesBeingWritten = Set.new + + # Wait for a file to finish being written then copy it to the destination + copierThread = Thread.new do + while true do + + # Wait until we found a file that has been modified + sleep(0.25) + files = filesBeingWritten.to_a + if files.length == 0 then + next + end + + # Wait for the file to stop growing + modifiedFile = files[0] + modifiedPath = Pathname.new(modifiedFile) + waitFileStopsGrowing(modifiedPath) + + # Figure out where to copy the file from & to + srcPath = modifiedPath + destPath = getDestPath(srcDirPath.realpath, srcPath, destDirPath) + + # Don't copy the file if it doesn't already exist in the destination + next if !destPath.exist? + + # Actually copy the file when ready + time = Time.new + while true do + begin + puts("[#{time.strftime("%H:%M")}] #{srcPath} => #{destPath}") + FileUtils::copy_file(srcPath, destPath) + break + rescue + puts("File wasn't ready. Retrying.") + sleep(1) + next + end + end + + # Make sure we stop waiting for the file the next iteration + semaphore.synchronize do + filesBeingWritten.delete(modifiedFile) + end + end + end + + listenThread = Thread.new do + listener = Listen.to(srcDirPath) do |modified, added, removed| + if modified then + semaphore.synchronize do + modified.each do |f| + next if f.include? "/exported/" + filesBeingWritten.add(f) + end + end + end + end + listener.start + sleep + end + + # notifier = INotify::Notifier.new + # notifier.watch(srcDirPath.to_s, :close) do |event| + # # The #name field of the event object contains the name of the affected file + # puts "#{event.name} modified" + # end + # notifier.run + sleep +end diff --git a/misc/decompile-pex b/misc/decompile-pex new file mode 100644 index 000000000..5f2d84852 --- /dev/null +++ b/misc/decompile-pex @@ -0,0 +1,55 @@ +#! env ruby + +def toWinPath(wslPath) + cmd = "wslpath -w '#{wslPath}'" + return `#{cmd}`.strip +end + +# This utility decompiles every pex file in the target_dir +# and places the result file in the same directory. + +require('optparse') +require('pathname') +require('fileutils') + +options = {} +optParser = OptionParser.new do |opts| + opts.banner = "Usage: decompile-pex [options] target_dir" + + # opts.on("-w", "--watch", "Watch built directory") do + # options[:watch] = true + # end + + opts.on_tail("-h", "--help", "Show this message") do + puts opts + exit + end +end + +optParser.parse! + +targetDir = ARGV.pop +if not targetDir then + puts optParser + exit +end + +targetDirPath = Pathname.new(targetDir) +if !targetDirPath.exist? or !targetDirPath.directory? then + puts "Cannot locate target directory: " + targetDirPath; + exit 1 +end + +decompiler = ENV['PEX_DECOMPILER'] +if !File.exists?(decompiler) then + puts "Cannot locate decompiler from $PEX_DECOMPILER"; + exit 1 +end + +Dir.chdir targetDirPath +Pathname.glob("#{targetDirPath}/**/*.pex").each do |f| + next if f.directory? + + cmd = "\"#{decompiler}\" -p \"#{toWinPath(targetDirPath)}\" \"#{toWinPath(f)}\"" + puts `#{cmd}` +end diff --git a/misc/pack-release b/misc/pack-release new file mode 100644 index 000000000..2422a00af --- /dev/null +++ b/misc/pack-release @@ -0,0 +1,53 @@ +#!/usr/bin/env ruby +# + +require('pathname') +require('fileutils') +require('tmpdir') + + +# Make sure we can find where the files we're packing from +testDir = ENV["SKYUIVR_TEST_DIR"] +if not testDir then + puts "Please set a directory to package from using $SKYUIVR_TEST_DIR" + exit +end + +# Make sure we have a place to put the packed file +releaseDir = ENV["SKYUIVR_RELEASE_DIR"] +if not releaseDir then + puts "Please set a directory to package from using $SKYUIVR_RELEASE_DIR" + exit +end + +puts "Add a tag?" +tag = gets.chomp + +# Make a temp directory to copy the files to be compressed +tempDir = Dir.mktmpdir("skyuivr-pack") +tempPath = Pathname.new(tempDir) +puts tempPath + + +# Copy the files in the test directory to a new temp directory named "SkyUI" +srcPath = Pathname.new(testDir) +# contentPath = Pathname.new(tempDir) + "SkyUI" +# FileUtils.mkdir_p(contentPath) + +puts "Copying from #{srcPath} => #{tempPath}" +FileUtils::cp_r(srcPath.realpath, tempPath.realpath) +contentPath = tempPath + "SkyUI" +FileUtils.mv(tempPath + srcPath.basename, contentPath) +FileUtils::rm_f(contentPath + "meta.ini") + + +# Zip up the directory +if tag[0] == "v" then + archiveFilename = tempPath + "SkyUI.#{tag}.7z" +else + archiveFilename = tempPath + "SkyUI - #{tag}.7z" +end +puts "ContentPath: #{contentPath}" +system("7z a '#{archiveFilename}' '#{contentPath}'") + +FileUtils::cp(archiveFilename, releaseDir) diff --git a/misc/rename-png b/misc/rename-png new file mode 100644 index 000000000..abe881a17 --- /dev/null +++ b/misc/rename-png @@ -0,0 +1,56 @@ +#! env ruby + +def toWinPath(wslPath) + cmd = "wslpath -w '#{wslPath}'" + return `#{cmd}`.strip +end + +# This is a one-off utility to rename png files in a directory. +# We're exporting icon pngs from the VR version of the game +# to use in the help text. +# +# Ideally, we would export all the known button art as png +# and import them again. I'm being lazy and skipping that for now. + +require('optparse') +require('pathname') +require('fileutils') + +options = {} +optParser = OptionParser.new do |opts| + opts.banner = "Usage: decompile-pex [options] target_dir" + + # opts.on("-w", "--watch", "Watch built directory") do + # options[:watch] = true + # end + + opts.on_tail("-h", "--help", "Show this message") do + puts opts + exit + end +end + +optParser.parse! + +targetDir = ARGV.pop +if not targetDir then + puts optParser + exit +end + +targetDirPath = Pathname.new(targetDir) +if !targetDirPath.exist? or !targetDirPath.directory? then + puts "Cannot locate target directory: " + targetDirPath; + exit 1 +end + +def transformName(oldName) + oldName = oldName.to_s + firstUnderscore = oldName.to_s.index('_') + return oldName.slice(firstUnderscore+1, oldName.length - 4 - firstUnderscore - 1) +end + +Pathname.glob(targetDirPath + "*.png.png").each do |f| + puts "#{f} => #{targetDirPath + transformName(f)}" + f.rename(targetDirPath + transformName(f)) +end diff --git a/misc/reorder-psc b/misc/reorder-psc new file mode 100644 index 000000000..b6e89aa7f --- /dev/null +++ b/misc/reorder-psc @@ -0,0 +1,178 @@ +#! env ruby + +# Reorder/rewrite the psc file so content is sorted into the same order +# by entity/construct name. This is useful for comparing two sets of +# decompiled pex files. + +require('optparse') +require('pathname') +require('fileutils') +require('pp') + +options = {} +optParser = OptionParser.new do |opts| + opts.banner = "Usage: cpBuiltFiles [options] destination_dir" + + opts.on("-w", "--watch", "Watch built directory") do + options[:watch] = true + end + + opts.on_tail("-h", "--help", "Show this message") do + puts opts + exit + end +end + +optParser.parse! + +destDir = ARGV.pop +if not destDir then + puts optParser + exit +end + +# This is where the psc files are +destDirPath = Pathname.new(destDir) + +filesProcessed = 0 + +def lineOffsets(f) + offsets = [] + + curOffset = 0 + File.readlines(f).each do |line| + offsets.append << curOffset + curOffset += line.length + end + + return offsets +end + +def lineNum(lineoffsets, offset) + lineoffsets.each_with_index do |entry, index| + if entry > offset + return index + end + end + return lineoffsets.length +end + +# Retrieve all "property" entries, their names, and their offset into the file +def properties(f) + singlelineProps = /^.*property\b(.*)\bauto$/ + multilineProps = /\bproperty\b(.*?)\b?$.*?\bendproperty\b/m + + matches = IO.read(f).to_enum(:scan, multilineProps) + .map { Regexp.last_match } + .map { |match| {name: match.captures.first.strip , offsets: match.offset(0)} } +end + +# Retrieve all "state" entries, their names, and their offset into the file +def states(f) + regex = /\bstate\b(.*?)\b?$.*?\bendState\b/m + matches = IO.read(f).to_enum(:scan, regex) + .map { Regexp.last_match } + .map { |match| {name: match.captures.first.strip , offsets: match.offset(0)} } +end + +def functions(f) + regex = /\bfunction\b(.*?)\b?$.*?\bendFunction\b/m + matches = IO.read(f).to_enum(:scan, regex) + .map { Regexp.last_match } + .map { |match| {name: match.captures.first.strip , offsets: match.offset(0)} } +end + +def variables(f) + # TODO!!! This needs to be done over lines instead of over the entire file + regex = /\b(.*?)\b(.*?)\b?$/m + matches = IO.read(f).to_enum(:scan, regex) + .map { Regexp.last_match } + .map { |match| {name: match.captures.first.strip , offsets: match.offset(0)} } +end + +# Entries usually contain byte offsets into the file. +# This function adds a field that indictes the actual line numbers the entry spans +def entryAddLineNum(entry, lineoffsets) + entry[:lines] = entry[:offsets].map { |offset| + lineNum(lineoffsets, offset)}; + entry +end + +def lineSpanExpand(linespan) + Range.new(linespan.first, linespan.last).to_a +end + +def unprocessedLines(f, processedLines) + Range.new(1, IO.read(f).lines.length).to_a - processedLines +end + +def linespansToLines(linespans) + linespans + .map { |linespan| lineSpanExpand(linespan) } + .reduce([]) { |accum, lines| accum + lines } +end + +Pathname.glob("#{destDir}/*.psc").each do |f| + filesProcessed += 1 + # next if filesProcessed > 1 + + puts "Processing: #{f}" + lineoffsets = lineOffsets(f) + + props = properties(f) + props = props + .map { |entry| entryAddLineNum(entry, lineoffsets) } + .sort_by { |entry| entry[:name] } + proplines = linespansToLines(props.map { |entry| entry[:lines] }) + + states = states(f) + states = states + .map { |entry| entryAddLineNum(entry, lineoffsets) } + .sort_by { |entry| entry[:name] } + statelines = linespansToLines(states.map { |entry| entry[:lines] }) + + funcs = functions(f) + funcs = funcs + .map { |entry| entryAddLineNum(entry, lineoffsets) } + .sort_by { |entry| entry[:name] } + funclines = linespansToLines(funcs.map { |entry| entry[:lines] }) - proplines - statelines + + puts "props:" + pp props + puts "states:" + pp states + + # Figure out all the lines already processed + processedLines = props.map { |entry| entry[:lines] } + processedLines += states.map { |entry| entry[:lines] } + processedLines += funcs.map { |entry| entry[:lines] } + processedLines = linespansToLines(processedLines) + + upl = unprocessedLines(f, processedLines) + + flines = f.readlines + File.open(f.sub_ext(".out"), "w") {|outf| + outf.puts(";;; --- Properties ---------------------------------"); + proplines.each { |lineNum| outf.write(flines[lineNum-1]) } + outf.puts + outf.puts + + outf.puts(";;; --- Functions ----------------------------------"); + funclines.each { |lineNum| outf.write(flines[lineNum-1]) } + outf.puts + outf.puts + + outf.puts(";;; --- States -------------------------------------"); + statelines.each { |lineNum| outf.write(flines[lineNum-1]) } + outf.puts + outf.puts + + outf.puts(";;; --- Unprocessed --------------------------------"); + upl.each { |lineNum| + line = flines[lineNum-1] + if !line.strip.empty? then + outf.write(flines[lineNum-1]) + end + } + } +end diff --git a/sksevr_plugin/.editorconfig b/sksevr_plugin/.editorconfig new file mode 100644 index 000000000..704dde6be --- /dev/null +++ b/sksevr_plugin/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 3 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/sksevr_plugin/.gitignore b/sksevr_plugin/.gitignore new file mode 100644 index 000000000..1f4e57edd --- /dev/null +++ b/sksevr_plugin/.gitignore @@ -0,0 +1,7 @@ +*.user +*.suo + +**/.vs + +/Build +lua-tests/luacov* diff --git a/sksevr_plugin/README.md b/sksevr_plugin/README.md new file mode 100644 index 000000000..7c2be7a46 --- /dev/null +++ b/sksevr_plugin/README.md @@ -0,0 +1,46 @@ +# Skyrim SKSE plugin example + +This has been adapted from [this example](https://github.com/xanderdunn/skaar/releases/tag/plugin3). It has a simple build script to simplify the build process. It's also been tidied up a bit, and updated to use Visual Studio 2017. + + +## Requirements + +- Skyrim + - The Creation Kit +- [Python 3.6](https://www.python.org/downloads/) for the build script +- [Visual Studio 2017](https://visualstudio.microsoft.com/vs/express/) + - "VC++ 2017 version 15.8 v14.15 latest v141 tools" + - "Windows Universal CRT SDK" + + +## Getting Started + +Ignore the `common` and `skse` directories, they are included from SKSE and are required for the plugin to compile. The directory of interest for your plugin is `plugin`. + +Paths relevant to the build script are stored in `build.ini`, you may need to edit these, particularly if you're not installing with Steam on a 64-bit machine. + +To compile, run: + +``` +python build.py +``` + +This will compile the plugin and any Papyrus scripts in the `plugin\scripts` directory to the `Debug` directory. When you have finished developing and are ready to compile a release version, run the following: + +``` +python build.py --release +``` + +This will compile to the `Release` directory. You can then use the following to install the compiled plugin and scripts to your Skyrim installation's directory: + +``` +python build.py install +``` + +Or: + +``` +python build.py install --release +``` + +From here follow [this guide](https://github.com/xanderdunn/skaar/wiki/SKSE%3A-Getting-Started). diff --git a/sksevr_plugin/build.ini b/sksevr_plugin/build.ini new file mode 100644 index 000000000..68f848603 --- /dev/null +++ b/sksevr_plugin/build.ini @@ -0,0 +1,3 @@ +[Paths] +skyrim=C:\Program Files (x86)\Steam\steamapps\common\Skyrim +msbuild=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe diff --git a/sksevr_plugin/build.py b/sksevr_plugin/build.py new file mode 100644 index 000000000..ebaa06605 --- /dev/null +++ b/sksevr_plugin/build.py @@ -0,0 +1,169 @@ +import configparser +import os +import shutil +import subprocess +import sys + + + +def search_arguments(needle): + found = False + + for argument in sys.argv[1:]: + if argument == needle: + found = True + break + + return found + + +def configuration(): + return "Release" if search_arguments("--release") else "Debug" + + +def root_path(): + return os.path.dirname(os.path.realpath(__file__)) + + +def read_ini(): + ini = configparser.ConfigParser() + ini_path = os.path.join(root_path(), "build.ini") + ini.read(ini_path) + return ini + + +def read_paths(): + return read_ini()["Paths"] + + +def build_path(): + return os.path.join(root_path(), configuration()) + + +def skyrim_path(): + return read_paths()["skyrim"] + + +def papyrus_compiler_path(): + return os.path.join(skyrim_path(), r"Papyrus Compiler\PapyrusCompiler.exe") + + +def skyrim_compiled_scripts_path(): + return os.path.join(skyrim_path(), r"Data\scripts") + + +def skyrim_scripts_path(): + return os.path.join(skyrim_compiled_scripts_path(), r"Source") + + +def scripts_path(): + return os.path.join(root_path(), r"plugin\scripts") + + +def compiled_scripts_path(): + return os.path.join(build_path(), "scripts") + + +def msbuild_path(): + return read_paths()["msbuild"] + + +def run_command(command): + result = subprocess.run( + command, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + + if result.returncode != 0: + print("--- The following command failed with code:", result.returncode) + print(command.strip()) + print("--- Standard output:") + print(result.stdout.decode("utf-8")) + print("--- Error output") + print(result.stderr.decode("utf-8")) + sys.exit(1) + + +def compile_plugin(): + project_path = os.path.join(root_path(), "plugin.sln") + + command = """ \ + "{compiler_path}" \ + "{project_path}" \ + /property:Configuration={configuration} \ + """.format( + compiler_path=msbuild_path(), + project_path=project_path, + configuration=configuration() + ) + + run_command(command) + + +def compile_scripts(): + output_path = compiled_scripts_path() + os.makedirs(output_path, exist_ok=True) + + command = """ \ + "{compiler_path}" \ + "{scripts_path}" \ + -all \ + -flags="TESV_Papyrus_Flags.flg" \ + -import="{skyrim_scripts_path};{scripts_path}" \ + -output="{output_path}" \ + """.format( + compiler_path=papyrus_compiler_path(), + skyrim_scripts_path=skyrim_scripts_path(), + scripts_path=scripts_path(), + output_path=output_path + ) + + run_command(command) + + +def build(): + compile_plugin() + compile_scripts() + + +def copy_plugin(): + plugin_path = os.path.join(build_path(), "plugin.dll") + plugins_path = os.path.join(skyrim_path(), r"Data\skse\plugins") + + os.makedirs(plugins_path, exist_ok=True) + shutil.copy2(plugin_path, plugins_path) + + +def copy_files(source, destination): + with os.scandir(source) as entries: + for entry in entries: + if entry.is_file(): + shutil.copy2(entry.path, destination) + + +def copy_script_sources(): + skyrim_scripts_directory = skyrim_scripts_path() + os.makedirs(skyrim_scripts_directory, exist_ok=True) + copy_files(scripts_path(), skyrim_scripts_directory) + + +def copy_compiled_scripts(): + skyrim_compiled_scripts_directory = skyrim_compiled_scripts_path() + os.makedirs(skyrim_compiled_scripts_directory, exist_ok=True) + copy_files(compiled_scripts_path(), skyrim_compiled_scripts_directory) + + +def install(): + copy_plugin() + copy_script_sources() + copy_compiled_scripts() + + + +if __name__ == "__main__": + if search_arguments("install"): + install() + else: + build() diff --git a/sksevr_plugin/common b/sksevr_plugin/common new file mode 160000 index 000000000..efcce45ee --- /dev/null +++ b/sksevr_plugin/common @@ -0,0 +1 @@ +Subproject commit efcce45eeb2c319459081f59d233239ec9465549 diff --git a/sksevr_plugin/lib/openvr_api.lib b/sksevr_plugin/lib/openvr_api.lib new file mode 100644 index 000000000..543028b11 Binary files /dev/null and b/sksevr_plugin/lib/openvr_api.lib differ diff --git a/sksevr_plugin/lua-tests/core_spec.lua b/sksevr_plugin/lua-tests/core_spec.lua new file mode 100644 index 000000000..df4113e54 --- /dev/null +++ b/sksevr_plugin/lua-tests/core_spec.lua @@ -0,0 +1,171 @@ +require("MainEntry") + +describe("FormDB", function() + it("should be a top level table", function() + assert.truthy(_G["FormDB"]) + assert.True(type(_G["FormDB"]) == "table") + end) +end) + +describe("Data access", function() + describe("Allow setting values by path", function() + it("should allow setting differet types transparently", function() + -- Set value by simple key + -- This should be the same as a simple assignment like t[k]=v + assert.are.same( + { hello = 1 }, + table_set_by_path({}, "hello", 1)) + + -- We should be able to deal with different types + assert.are.same( + { hello = 1.5 }, + table_set_by_path({}, "hello", 1.5)) + + -- We should be able to deal with different types + assert.are.same( + { hello = "skyrim" }, + table_set_by_path({}, "hello", "skyrim")) + + assert.are.same( + { hello = true }, + table_set_by_path({}, "hello", true)) + + -- Assign a new table + assert.are.same( + { hello = { world = 1 }} , + table_set_by_path({}, "hello", { world = 1 })) + end) + + it("should make setting deeply nested tables simple", function() + assert.are.same( + { hello = { world = 1 }}, + table_set_by_path({}, "hello/world", 1)) + + assert.are.same( + { hello = { small = { world = 1}} }, + table_set_by_path({}, "hello/small", { world = 1 })) + + assert.are.same( + { hello = { small = { world = { things = { should = { be = "easy" }}}}}}, + table_set_by_path({}, "hello/small/world/things/should/be", "easy")) + end) + + it("should not disturb unrelated keys in the table", function() + assert.are.same( + { hello = 1, + skyui = + {item_is_new = 1}}, + table_set_by_path({hello = 1}, "skyui/item_is_new", 1)) + end) + + it("should tolerate consecutive path separators", function() + assert.are.same( + { hello = 1 }, + table_set_by_path({}, "hello//", 1)) + + assert.are.same( + { hello = { world = 1 }}, + table_set_by_path({}, "hello//world", 1)) + end) + + it("should ignore leading or trailing path separators", function() + assert.are.same( + { hello = 1 }, + table_set_by_path({}, "hello/", 1)) + + assert.are.same( + { hello = 1 }, + table_set_by_path({}, "/hello", 1)) + end) + + it("should report errors if the path is not reachable", function() + local result, err = table_set_by_path({hello = 1}, "hello/world", 1) + assert.truthy(err) + assert.True(result == nil) + end) + end) + + describe("Fetching data by path", function() + it("should allow fetching values by path", function() + assert.are.same( + 1, + table_get_by_path({hello = 1}, "hello")) + + assert.are.same( + 1, + table_get_by_path({hello = {world = 1}}, "hello/world")) + end) + + it("should reply with the default value if data doesn't exist", function() + assert.are.same( + "not there", + table_get_by_path({a = {b = {}}}, "b/c", "not there")) + end) + + it("should reply with an error if the path cannot be reached", function() + local result, err = table_get_by_path({a = {b = 1}}, "a/b/c", "not there") + assert.are.same("not there", result) + assert.truthy(err) + end) + end) + + it("should remove empty tables", function() + assert.are.same( + { some_field = true }, + table_set_by_path({hello = {world = {again = 1}}, some_field = true}, "hello/world/again", nil)) + end) + + +end) + +it("FormDB basics", function() + FormDB_init() + + -- Associate some data with a form + Form_SetVal(123, "inv/item_new", true) + Form_SetVal(123, "inv/hidden", true) + + -- Fetch the data again + assert.True(Form_GetVal(123, "inv/item_new")) + + -- The FormDB is just a table + assert.are.same( + {[123] = + {inv = + {item_new = true, + hidden = true }}}, + FormDB) + + -- Fetch the data again + assert.True(Form_GetVal(123, "inv/item_new")) + + -- Fetching data that doesn't exist results in nil + assert.is_nil(Form_GetVal(456, "inv/item_new")) + + -- Fetching data that doesn't exist can return a default value + assert.is_equal("default", Form_GetVal(456, "inv/item_new", "default")) + + Form_RemoveField(123, "inv/item_new") + assert.is_equal("nada", Form_GetVal(123, "inv/item_new", "nada")) + + assert.are.same( + {[123] = + {inv = + {hidden = true}}}, + FormDB) + + -- FormDB is kept compacted as data is removed out of it + Form_RemoveField(123, "inv/hidden") + assert.are.same( + {}, + FormDB) + + -- Removing all data associated with a FormID all at once + Form_SetVal(123, "inv/item_new", true) + Form_SetVal(123, "inv/hidden", true) + Form_RemoveAllFields(123) + assert.are.same( + {}, + FormDB) + +end) diff --git a/sksevr_plugin/lua/MainEntry.lua b/sksevr_plugin/lua/MainEntry.lua new file mode 100644 index 000000000..4c55ae4c8 --- /dev/null +++ b/sksevr_plugin/lua/MainEntry.lua @@ -0,0 +1,258 @@ +function file_exists(name) + local f=io.open(name,"r") + if f~=nil then + io.close(f) + return true + else + return false + end +end + +function path_split(path) + local steps = {} + local idx = 1 + for str in string.gmatch(path, "([^/]+)") do + steps[idx] = str + idx = idx + 1 + end + return steps +end + +function table_is_empty(t) + return next(t) == nil +end + +-- We want to keep the FormDB relatively clean and free of empty tables. +-- While it is possible to just walk the entire table tree to locate and +-- remove empty tables, this may cause a *LOT* of nodes to be visited. +-- +-- Instead, we only compact tables along a particular path when something +-- is being removed (set to nil). When this happens, we know the exact +-- tables and fields we must examine to keep the db compacted. +-- +function table_trail_compact(trail) + -- Starting from the parent of the leaf node, work backwards towards the root + for i = #trail, 1, -1 do + local post = trail[i] + local target = post.t[post.k] + + assert(type(target) == "table") + if table_is_empty(target) then + post.t[post.k] = nil + else + break + end + end +end + +-- Given a (tree of) tables, starting at `root`... +-- Iteratively walk through the `path`, creating tables/nodes if required, +-- to set the given 'val' +-- +-- See clojure's `assoc-in` +-- +-- For example, the call +-- table_set_by_path({}, "hello/world", 1) +-- +-- Should give us +-- { hello = +-- { world = 1 } +-- } +-- +-- Returns: +-- root - on success +-- nil, err_msg - on failure +function table_set_by_path(root, path, val) + local steps = path_split(path) + local step_cnt = #steps + local is_delete = val == nil + + -- Assuming we're dealing with a tree of tables + -- Start walking at the passed root + local cur = root + local trail = nil + if is_delete then + trail = {} + end + + for i, k in ipairs(steps) do + if i == step_cnt then + break + end + + -- Try to get the table that's next level down + local candidate = cur[k] + + -- Create the table right now, if it isn't present + if not candidate then + candidate = {} + cur[k] = candidate + + -- If we reached a leaf node in the tree when we expected to be able to go further... + -- Abort the walk with an error messsage + elseif type(candidate) ~= "table" then + return nil, string.format("[set_by_path] Path '%s' reached a val of type '%s' unexpectedly", table.concat(steps, "/", 1, i), type(candidate)) + end + + if is_delete then + table.insert(trail, {t = cur, k = k}) + end + + -- Update the cursor so we can walk deeper into the tree + cur = candidate + end + + cur[steps[step_cnt]] = val + + if is_delete then + table_trail_compact(trail) + end + + return root +end + +function inspect(o) + local dump = require("inspect") + print(dump(o)) +end + +function print_value_recursive(o) + inspect(o) +end + +-- Given a (tree of) tables, starting at `root`... +-- Iteratively walk through the `path` to fetch a value +-- If the item is not present, return the `default` +-- +-- See clojure's `get-in` +-- +-- Returns: +-- root - on success +-- nil, err_msg - on failure +function table_get_by_path(root, path, default) + local steps = path_split(path) + local step_cnt = #steps + + -- Assuming we're dealing with a tree of tables + -- Start walking at the passed root + local cur = root + for i, k in ipairs(steps) do + -- Can we actually move further into the path? + if type(cur) ~= "table" then + return default, string.format("[get_by_path] Path '%s' reached a val of type '%s' unexpectedly", table.concat(steps, "/", 1, i), type(candidate)) + end + + -- Walk deeper into the tree + cur = cur[k] + end + + if cur == nil then + return default + else + return cur + end +end + +function load_settings_file(path) + local chunk = loadfile(path) + local env={} + setfenv(chunk, env) + chunk() + return env +end + +function settings_get_by_path_with_defaults(root, path, defaults_filename, default) + local defaultsTop = "SettingsDefaults" + local defaults_table = nil + print("defaults_filename: ", defaults_filename) + -- Try to access "SettingsDefaults/defaults_filename" + -- We can't use table_get_by_path() here because the `defaults_filename` will likely + -- contain path separators, which interferes with the way the function works. + local t = _G[defaultsTop] + print("--- 0 ---") + print("_G[defaultsTop]") + inspect(t) + if t then + print("--- 1 ---") + defaults_table = t[defaults_filename] + print("defaults_table") + inspect(defaults_table) + else + print("--- 2 ---") + _G[defaultsTop] = {} + end + print("--- 3 ---") + if not defaults_table then + -- Load the settings file + local file_contents = load_settings_file(defaults_filename) + if file_contents then + print("--- 4 ---") + print("loaded from file") + inspect(file_contents) + defaults_table = {} + print("defaults top: ", defaultsTop) + print("defaults_filename: ", defaults_filename) + _G[defaultsTop][defaults_filename] = defaults_table + defaults_table["Settings"] = file_contents["Settings"] + end + end + print("--- 5 ---") + local val = table_get_by_path(root, path, nil); + if not val then + print("--- 6 ---") + print("--- reverting to defaults ---") + val = table_get_by_path(defaults_table, path, nil); + end + if nil == val then + return default + else + print("val") + inspect(val) + return val + end +end + +function Form_FetchDataLazyInit(formID) + local o = FormDB[formID] + if not o then + o = {} + FormDB[formID] = o + end + return o +end + +function Form_SetVal(formID, field_path, val) + local o = Form_FetchDataLazyInit(formID) + local result = {table_set_by_path(o, field_path, val)} + if table_is_empty(o) then + Form_RemoveAllFields(formID) + end + return unpack(result) +end + +function Form_GetVal(formID, field_path, default_val) + -- Fetch the table that stores the data associated with the form + local o = FormDB[formID] + if not o then + return default_val + end + + return table_get_by_path(o, field_path, default_val) +end + +function Form_RemoveField(formID, field_path) + return Form_SetVal(formID, field_path, nil) +end + +function Form_RemoveAllFields(formID) + FormDB[formID] = nil +end + +function FormDB_init() + FormDB = {} +end + +-- Do no reinitialize the FormDB if already present +if not _G["FormDB"] then + FormDB_init() +end diff --git a/sksevr_plugin/lua/defaults-general.lua b/sksevr_plugin/lua/defaults-general.lua new file mode 100644 index 000000000..fbc5b4d71 --- /dev/null +++ b/sksevr_plugin/lua/defaults-general.lua @@ -0,0 +1,44 @@ +Settings = { + -- On a per-menu basis, change the keybind used to activate the search function. + -- We're just using a bunch of strings try narrowing down when the search function + -- should be triggerred. + -- + -- For example: + -- {"thumbstick", "clicked"} => triggers when either thumbstick click starts + -- {"leftHand", "thumbstick", "clicked"} => triggers when the left hand thumbstick click starts + -- {"rightHand", "touchpad", "center", "touched"} => triggers when the right hand touchpad has its center touched + -- + -- Strings to indicate handedness: + -- "leftHand", "rightHand" + -- + -- Strings to indicate widget type: + -- "touchpad", "thumbstick", "application menu", "grip", "trigger", "b button", "a button", "x button", "y button" + -- + -- Strings to indicate touchpad region: + -- "top", "right", "left", "bottom", "center" + -- + -- Strings to indicate widget "phase": (touched => pressed => clicked => pressed => touched) + -- "touched", "pressed", "clicked" + -- + -- Strings to trigger either when a phase starts or ends: + -- "start", "end" + + BarterMenu = { + search = {} + }, + ContainerMenu = { + search = {} + }, + CraftingMenu = { + search = {} + }, + GiftMenu = { + search = {} + }, + InventoryMenu = { + search = {} + }, + MagicMenu = { + search = {} + }, +} \ No newline at end of file diff --git a/sksevr_plugin/lua/defaults-knuckles.lua b/sksevr_plugin/lua/defaults-knuckles.lua new file mode 100644 index 000000000..12bdda23f --- /dev/null +++ b/sksevr_plugin/lua/defaults-knuckles.lua @@ -0,0 +1,20 @@ +Settings = { + BarterMenu = { + search = {"thumbstick", "clicked"} + }, + ContainerMenu = { + search = {"thumbstick", "clicked"} + }, + CraftingMenu = { + search = {"thumbstick", "clicked"} + }, + GiftMenu = { + search = {"thumbstick", "clicked"} + }, + InventoryMenu = { + search = {"thumbstick", "clicked"} + }, + MagicMenu = { + search = {"thumbstick", "clicked"} + }, +} \ No newline at end of file diff --git a/sksevr_plugin/lua/defaults-oculus.lua b/sksevr_plugin/lua/defaults-oculus.lua new file mode 100644 index 000000000..f649e4848 --- /dev/null +++ b/sksevr_plugin/lua/defaults-oculus.lua @@ -0,0 +1,20 @@ +Settings = { + BarterMenu = { + search = {"leftHand", "thumbstick", "clicked"} + }, + ContainerMenu = { + search = {"leftHand", "thumbstick", "clicked"} + }, + CraftingMenu = { + search = {"leftHand", "thumbstick", "clicked"} + }, + GiftMenu = { + search = {"leftHand", "thumbstick", "clicked"} + }, + InventoryMenu = { + search = {"leftHand", "thumbstick", "clicked"} + }, + MagicMenu = { + search = {"leftHand", "thumbstick", "clicked"} + }, +} \ No newline at end of file diff --git a/sksevr_plugin/lua/defaults-vive.lua b/sksevr_plugin/lua/defaults-vive.lua new file mode 100644 index 000000000..637d85d5e --- /dev/null +++ b/sksevr_plugin/lua/defaults-vive.lua @@ -0,0 +1,20 @@ +Settings = { + BarterMenu = { + search = {"touchpad", "clicked", "bottom"} + }, + ContainerMenu = { + search = {"touchpad", "clicked", "bottom"} + }, + CraftingMenu = { + search = {"application menu", "clicked"} + }, + GiftMenu = { + search = {"touchpad", "clicked", "bottom"} + }, + InventoryMenu = { + search = {"touchpad", "clicked", "bottom"} + }, + MagicMenu = { + search = {"touchpad", "clicked", "bottom"} + }, +} \ No newline at end of file diff --git a/sksevr_plugin/lua/defaults-wmr.lua b/sksevr_plugin/lua/defaults-wmr.lua new file mode 100644 index 000000000..bfe2fa1a7 --- /dev/null +++ b/sksevr_plugin/lua/defaults-wmr.lua @@ -0,0 +1,20 @@ +Settings = { + BarterMenu = { + search = {"application menu", "clicked"} + }, + ContainerMenu = { + search = {"application menu", "clicked"} + }, + CraftingMenu = { + search = {"application menu", "clicked"} + }, + GiftMenu = { + search = {"application menu", "clicked"} + }, + InventoryMenu = { + search = {"application menu", "clicked"} + }, + MagicMenu = { + search = {"application menu", "clicked"} + }, +} \ No newline at end of file diff --git a/sksevr_plugin/lua/inspect.lua b/sksevr_plugin/lua/inspect.lua new file mode 100644 index 000000000..e2e3806ed --- /dev/null +++ b/sksevr_plugin/lua/inspect.lua @@ -0,0 +1,334 @@ +local inspect ={ + _VERSION = 'inspect.lua 3.1.0', + _URL = 'http://github.com/kikito/inspect.lua', + _DESCRIPTION = 'human-readable representations of tables', + _LICENSE = [[ + MIT LICENSE + + Copyright (c) 2013 Enrique García Cota + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ]] +} + +local tostring = tostring + +inspect.KEY = setmetatable({}, {__tostring = function() return 'inspect.KEY' end}) +inspect.METATABLE = setmetatable({}, {__tostring = function() return 'inspect.METATABLE' end}) + +local function rawpairs(t) + return next, t, nil +end + +-- Apostrophizes the string if it has quotes, but not aphostrophes +-- Otherwise, it returns a regular quoted string +local function smartQuote(str) + if str:match('"') and not str:match("'") then + return "'" .. str .. "'" + end + return '"' .. str:gsub('"', '\\"') .. '"' +end + +-- \a => '\\a', \0 => '\\0', 31 => '\31' +local shortControlCharEscapes = { + ["\a"] = "\\a", ["\b"] = "\\b", ["\f"] = "\\f", ["\n"] = "\\n", + ["\r"] = "\\r", ["\t"] = "\\t", ["\v"] = "\\v" +} +local longControlCharEscapes = {} -- \a => nil, \0 => \000, 31 => \031 +for i=0, 31 do + local ch = string.char(i) + if not shortControlCharEscapes[ch] then + shortControlCharEscapes[ch] = "\\"..i + longControlCharEscapes[ch] = string.format("\\%03d", i) + end +end + +local function escape(str) + return (str:gsub("\\", "\\\\") + :gsub("(%c)%f[0-9]", longControlCharEscapes) + :gsub("%c", shortControlCharEscapes)) +end + +local function isIdentifier(str) + return type(str) == 'string' and str:match( "^[_%a][_%a%d]*$" ) +end + +local function isSequenceKey(k, sequenceLength) + return type(k) == 'number' + and 1 <= k + and k <= sequenceLength + and math.floor(k) == k +end + +local defaultTypeOrders = { + ['number'] = 1, ['boolean'] = 2, ['string'] = 3, ['table'] = 4, + ['function'] = 5, ['userdata'] = 6, ['thread'] = 7 +} + +local function sortKeys(a, b) + local ta, tb = type(a), type(b) + + -- strings and numbers are sorted numerically/alphabetically + if ta == tb and (ta == 'string' or ta == 'number') then return a < b end + + local dta, dtb = defaultTypeOrders[ta], defaultTypeOrders[tb] + -- Two default types are compared according to the defaultTypeOrders table + if dta and dtb then return defaultTypeOrders[ta] < defaultTypeOrders[tb] + elseif dta then return true -- default types before custom ones + elseif dtb then return false -- custom types after default ones + end + + -- custom types are sorted out alphabetically + return ta < tb +end + +-- For implementation reasons, the behavior of rawlen & # is "undefined" when +-- tables aren't pure sequences. So we implement our own # operator. +local function getSequenceLength(t) + local len = 1 + local v = rawget(t,len) + while v ~= nil do + len = len + 1 + v = rawget(t,len) + end + return len - 1 +end + +local function getNonSequentialKeys(t) + local keys, keysLength = {}, 0 + local sequenceLength = getSequenceLength(t) + for k,_ in rawpairs(t) do + if not isSequenceKey(k, sequenceLength) then + keysLength = keysLength + 1 + keys[keysLength] = k + end + end + table.sort(keys, sortKeys) + return keys, keysLength, sequenceLength +end + +local function countTableAppearances(t, tableAppearances) + tableAppearances = tableAppearances or {} + + if type(t) == 'table' then + if not tableAppearances[t] then + tableAppearances[t] = 1 + for k,v in rawpairs(t) do + countTableAppearances(k, tableAppearances) + countTableAppearances(v, tableAppearances) + end + countTableAppearances(getmetatable(t), tableAppearances) + else + tableAppearances[t] = tableAppearances[t] + 1 + end + end + + return tableAppearances +end + +local copySequence = function(s) + local copy, len = {}, #s + for i=1, len do copy[i] = s[i] end + return copy, len +end + +local function makePath(path, ...) + local keys = {...} + local newPath, len = copySequence(path) + for i=1, #keys do + newPath[len + i] = keys[i] + end + return newPath +end + +local function processRecursive(process, item, path, visited) + if item == nil then return nil end + if visited[item] then return visited[item] end + + local processed = process(item, path) + if type(processed) == 'table' then + local processedCopy = {} + visited[item] = processedCopy + local processedKey + + for k,v in rawpairs(processed) do + processedKey = processRecursive(process, k, makePath(path, k, inspect.KEY), visited) + if processedKey ~= nil then + processedCopy[processedKey] = processRecursive(process, v, makePath(path, processedKey), visited) + end + end + + local mt = processRecursive(process, getmetatable(processed), makePath(path, inspect.METATABLE), visited) + if type(mt) ~= 'table' then mt = nil end -- ignore not nil/table __metatable field + setmetatable(processedCopy, mt) + processed = processedCopy + end + return processed +end + + + +------------------------------------------------------------------- + +local Inspector = {} +local Inspector_mt = {__index = Inspector} + +function Inspector:puts(...) + local args = {...} + local buffer = self.buffer + local len = #buffer + for i=1, #args do + len = len + 1 + buffer[len] = args[i] + end +end + +function Inspector:down(f) + self.level = self.level + 1 + f() + self.level = self.level - 1 +end + +function Inspector:tabify() + self:puts(self.newline, string.rep(self.indent, self.level)) +end + +function Inspector:alreadyVisited(v) + return self.ids[v] ~= nil +end + +function Inspector:getId(v) + local id = self.ids[v] + if not id then + local tv = type(v) + id = (self.maxIds[tv] or 0) + 1 + self.maxIds[tv] = id + self.ids[v] = id + end + return tostring(id) +end + +function Inspector:putKey(k) + if isIdentifier(k) then return self:puts(k) end + self:puts("[") + self:putValue(k) + self:puts("]") +end + +function Inspector:putTable(t) + if t == inspect.KEY or t == inspect.METATABLE then + self:puts(tostring(t)) + elseif self:alreadyVisited(t) then + self:puts('') + elseif self.level >= self.depth then + self:puts('{...}') + else + if self.tableAppearances[t] > 1 then self:puts('<', self:getId(t), '>') end + + local nonSequentialKeys, nonSequentialKeysLength, sequenceLength = getNonSequentialKeys(t) + local mt = getmetatable(t) + + self:puts('{') + self:down(function() + local count = 0 + for i=1, sequenceLength do + if count > 0 then self:puts(',') end + self:puts(' ') + self:putValue(t[i]) + count = count + 1 + end + + for i=1, nonSequentialKeysLength do + local k = nonSequentialKeys[i] + if count > 0 then self:puts(',') end + self:tabify() + self:putKey(k) + self:puts(' = ') + self:putValue(t[k]) + count = count + 1 + end + + if type(mt) == 'table' then + if count > 0 then self:puts(',') end + self:tabify() + self:puts(' = ') + self:putValue(mt) + end + end) + + if nonSequentialKeysLength > 0 or type(mt) == 'table' then -- result is multi-lined. Justify closing } + self:tabify() + elseif sequenceLength > 0 then -- array tables have one extra space before closing } + self:puts(' ') + end + + self:puts('}') + end +end + +function Inspector:putValue(v) + local tv = type(v) + + if tv == 'string' then + self:puts(smartQuote(escape(v))) + elseif tv == 'number' or tv == 'boolean' or tv == 'nil' or + tv == 'cdata' or tv == 'ctype' then + self:puts(tostring(v)) + elseif tv == 'table' then + self:putTable(v) + else + self:puts('<', tv, ' ', self:getId(v), '>') + end +end + +------------------------------------------------------------------- + +function inspect.inspect(root, options) + options = options or {} + + local depth = options.depth or math.huge + local newline = options.newline or '\n' + local indent = options.indent or ' ' + local process = options.process + + if process then + root = processRecursive(process, root, {}, {}) + end + + local inspector = setmetatable({ + depth = depth, + level = 0, + buffer = {}, + ids = {}, + maxIds = {}, + newline = newline, + indent = indent, + tableAppearances = countTableAppearances(root) + }, Inspector_mt) + + inspector:putValue(root) + + return table.concat(inspector.buffer) +end + +setmetatable(inspect, { __call = function(_, ...) return inspect.inspect(...) end }) + +return inspect + diff --git a/sksevr_plugin/luajit b/sksevr_plugin/luajit new file mode 160000 index 000000000..05f1984e1 --- /dev/null +++ b/sksevr_plugin/luajit @@ -0,0 +1 @@ +Subproject commit 05f1984e1a862e4b3d3c3b370c773492e2edf84a diff --git a/sksevr_plugin/luajit.vcxproj b/sksevr_plugin/luajit.vcxproj new file mode 100644 index 000000000..27fe36371 --- /dev/null +++ b/sksevr_plugin/luajit.vcxproj @@ -0,0 +1,178 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {38230328-1674-4bfd-b185-885b95075068} + luajit123 + 10.0.19041.0 + + + + StaticLibrary + true + v141 + Unicode + + + StaticLibrary + false + v141 + true + Unicode + + + StaticLibrary + true + v141 + Unicode + + + StaticLibrary + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + $(SolutionDir)Build\$(Configuration)\luajit\ + $(SolutionDir)Build\$(Configuration)\Intermediate\$(ProjectName)\ + + + false + $(SolutionDir)Build\$(Configuration)\luajit\ + $(SolutionDir)Build\$(Configuration)\Intermediate\$(ProjectName)\ + + + + Level3 + true + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + true + true + + + + + Level3 + true + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + + + cd "$(SolutionDir)luajit\src\" +msvcbuild.bat debug static + + + xcopy /y $(ProjectDir)luajit\src\lua51.lib $(SolutionDir)Build\$(Configuration)\$(ProjectName)\ +xcopy /y $(ProjectDir)luajit\src\lua*.h $(SolutionDir)Build\$(Configuration)\$(ProjectName)\ +xcopy /y $(ProjectDir)luajit\src\lauxlib.h $(SolutionDir)Build\$(Configuration)\$(ProjectName)\ + + + + + Level3 + true + true + true + NDEBUG;_LIB;%(PreprocessorDefinitions) + true + Use + pch.h + + + + + true + true + true + + + cd "$(SolutionDir)luajit\src\" +msvcbuild.bat debug static + + + xcopy /y $(ProjectDir)luajit\src\lua51.lib $(SolutionDir)Build\$(Configuration)\$(ProjectName)\ +xcopy /y $(ProjectDir)luajit\src\lua*.h $(SolutionDir)Build\$(Configuration)\$(ProjectName)\ +xcopy /y $(ProjectDir)luajit\src\lauxlib.h $(SolutionDir)Build\$(Configuration)\$(ProjectName)\ + + + + + + diff --git a/sksevr_plugin/plugin.sln b/sksevr_plugin/plugin.sln new file mode 100644 index 000000000..4df0c0f77 --- /dev/null +++ b/sksevr_plugin/plugin.sln @@ -0,0 +1,66 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31702.278 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "skse64", "skse\skse64\skse64.vcxproj", "{639411C0-FC23-4819-A0C5-429A4E5D8A51}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "skse64_common", "skse\skse64_common\skse64_common.vcxproj", "{5FD1C08D-DB80-480C-A1C6-F0920005CD13}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_vc14", "common\common_vc14.vcxproj", "{472E19AB-DEF0-42DF-819B-18722E8DC822}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin", "plugin\plugin.vcxproj", "{547171CB-F934-40B9-B788-3C520FE66363}" + ProjectSection(ProjectDependencies) = postProject + {38230328-1674-4BFD-B185-885B95075068} = {38230328-1674-4BFD-B185-885B95075068} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "luajit", "luajit.vcxproj", "{38230328-1674-4BFD-B185-885B95075068}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {639411C0-FC23-4819-A0C5-429A4E5D8A51}.Debug|x64.ActiveCfg = Debug_Lib|x64 + {639411C0-FC23-4819-A0C5-429A4E5D8A51}.Debug|x64.Build.0 = Debug_Lib|x64 + {639411C0-FC23-4819-A0C5-429A4E5D8A51}.Debug|x86.ActiveCfg = Debug|x64 + {639411C0-FC23-4819-A0C5-429A4E5D8A51}.Release|x64.ActiveCfg = Release_Lib|x64 + {639411C0-FC23-4819-A0C5-429A4E5D8A51}.Release|x64.Build.0 = Release_Lib|x64 + {639411C0-FC23-4819-A0C5-429A4E5D8A51}.Release|x86.ActiveCfg = Release|x64 + {5FD1C08D-DB80-480C-A1C6-F0920005CD13}.Debug|x64.ActiveCfg = Debug|x64 + {5FD1C08D-DB80-480C-A1C6-F0920005CD13}.Debug|x64.Build.0 = Debug|x64 + {5FD1C08D-DB80-480C-A1C6-F0920005CD13}.Debug|x86.ActiveCfg = Debug|x64 + {5FD1C08D-DB80-480C-A1C6-F0920005CD13}.Release|x64.ActiveCfg = Release|x64 + {5FD1C08D-DB80-480C-A1C6-F0920005CD13}.Release|x64.Build.0 = Release|x64 + {5FD1C08D-DB80-480C-A1C6-F0920005CD13}.Release|x86.ActiveCfg = Release|x64 + {472E19AB-DEF0-42DF-819B-18722E8DC822}.Debug|x64.ActiveCfg = Debug|x64 + {472E19AB-DEF0-42DF-819B-18722E8DC822}.Debug|x64.Build.0 = Debug|x64 + {472E19AB-DEF0-42DF-819B-18722E8DC822}.Debug|x86.ActiveCfg = Debug|x64 + {472E19AB-DEF0-42DF-819B-18722E8DC822}.Release|x64.ActiveCfg = Release|x64 + {472E19AB-DEF0-42DF-819B-18722E8DC822}.Release|x64.Build.0 = Release|x64 + {472E19AB-DEF0-42DF-819B-18722E8DC822}.Release|x86.ActiveCfg = Release|x64 + {547171CB-F934-40B9-B788-3C520FE66363}.Debug|x64.ActiveCfg = Debug|x64 + {547171CB-F934-40B9-B788-3C520FE66363}.Debug|x64.Build.0 = Debug|x64 + {547171CB-F934-40B9-B788-3C520FE66363}.Debug|x86.ActiveCfg = Debug|x64 + {547171CB-F934-40B9-B788-3C520FE66363}.Release|x64.ActiveCfg = Release|x64 + {547171CB-F934-40B9-B788-3C520FE66363}.Release|x64.Build.0 = Release|x64 + {547171CB-F934-40B9-B788-3C520FE66363}.Release|x86.ActiveCfg = Release|x64 + {38230328-1674-4BFD-B185-885B95075068}.Debug|x64.ActiveCfg = Debug|x64 + {38230328-1674-4BFD-B185-885B95075068}.Debug|x64.Build.0 = Debug|x64 + {38230328-1674-4BFD-B185-885B95075068}.Debug|x86.ActiveCfg = Debug|Win32 + {38230328-1674-4BFD-B185-885B95075068}.Debug|x86.Build.0 = Debug|Win32 + {38230328-1674-4BFD-B185-885B95075068}.Release|x64.ActiveCfg = Release|x64 + {38230328-1674-4BFD-B185-885B95075068}.Release|x64.Build.0 = Release|x64 + {38230328-1674-4BFD-B185-885B95075068}.Release|x86.ActiveCfg = Release|Win32 + {38230328-1674-4BFD-B185-885B95075068}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BACC6EF5-15F4-4A24-A264-596F5928BCDE} + EndGlobalSection +EndGlobal diff --git a/sksevr_plugin/plugin/ControllerStateHook.cpp b/sksevr_plugin/plugin/ControllerStateHook.cpp new file mode 100644 index 000000000..3e38f7aa3 --- /dev/null +++ b/sksevr_plugin/plugin/ControllerStateHook.cpp @@ -0,0 +1,325 @@ +/* ControllerStateHook + * + * Does 2 things: + * - Hooks into Controller State update calls made by the engine via SkyrimVRTools + * - Pushes controller states to scaleform for processing + * + * Similar code has already been in SkyrimVRTools for sometime. However, since we have a + * more generic way to get controller updates from it now, having scaleform related + * functionality here allows more control over the native code without having to worry + * about coordinating release. Users will have a more straightforward time installing and + * running skyui as well. + */ + +#include "skse64/InternalVR.h" +#include "skse64/ScaleformMovie.h" +#include "skse64/Hooks_Scaleform.h" +#include "skse64/ScaleformCallbacks.h" +#include "skse64/GameEvents.h" +#include "skse64/GameMenus.h" + +#include "VRHookAPI.h" +#include +#include +#include + + +namespace ControllerStateHook { + namespace vr = vr_1_0_12; + + void DispatchControllerState(vr::ETrackedControllerRole controllerHand, const vr::VRControllerState_t* controllerState); + + OpenVRHookManagerAPI* hookMgr = nullptr; + + // When we receive ControllerState updates, send it over to Scaleform as needed. + bool ControllerStateCB(vr::TrackedDeviceIndex_t unControllerDeviceIndex, const vr::VRControllerState_t* pControllerState, uint32_t unControllerStateSize, vr::VRControllerState_t* pOutputControllerState) { + vr::IVRSystem* system = hookMgr->GetVRSystem(); + assert(system); + + vr::ETrackedControllerRole hand = vr::TrackedControllerRole_Invalid; + + if (unControllerDeviceIndex == system->GetTrackedDeviceIndexForControllerRole(vr::ETrackedControllerRole::TrackedControllerRole_LeftHand)) { + hand = vr::TrackedControllerRole_LeftHand; + } + else if (unControllerDeviceIndex == system->GetTrackedDeviceIndexForControllerRole(vr::ETrackedControllerRole::TrackedControllerRole_RightHand)) { + hand = vr::TrackedControllerRole_RightHand; + } + + DispatchControllerState(hand, pControllerState); + return true; + } + + + + bool equalGFxValue(const GFxValue& lhs, const GFxValue& rhs) + { + if (rhs.type == lhs.type) { + switch (rhs.GetType()) { + case GFxValue::kType_Null: + return true; + case GFxValue::kType_Bool: + return lhs.GetBool() == rhs.GetBool(); + case GFxValue::kType_Number: + return lhs.GetNumber() == rhs.GetNumber(); + case GFxValue::kType_String: + return 0 == strcmp(lhs.GetString(), rhs.GetString()); + case GFxValue::kType_WideString: + return 0 == wcscmp(lhs.GetWideString(), rhs.GetWideString()); + case GFxValue::kType_Object: + return lhs.data.obj == rhs.data.obj; + case GFxValue::kType_Array: + // Not implemented =( + return false; + case GFxValue::kType_DisplayObject: + return lhs.data.obj == rhs.data.obj; + case GFxValue::kType_Function: + return lhs.data.obj == rhs.data.obj; + default: + return false; + } + } + return false; + } + + struct ScaleformCallback { + GFxMovieView* movieView; + GFxValue object; + const char* methodName; + + bool operator==(const ScaleformCallback& rhs) + { + return equalGFxValue(this->object, rhs.object) && (0 == strcmp(this->methodName, rhs.methodName)); + } + }; + + typedef std::list ScaleformCallbackList; + static ScaleformCallbackList g_scaleformInputHandlers; + + void DispatchControllerState(vr::ETrackedControllerRole controllerHand, const vr::VRControllerState_t* controllerState) { + for (ScaleformCallbackList::iterator iter = g_scaleformInputHandlers.begin(); iter != g_scaleformInputHandlers.end(); ++iter) + { + GFxMovieView* movieView = (*iter).movieView; + GFxValue* object = &(*iter).object; + const char* methodName = (*iter).methodName; + + GFxValue result, args[7]; + args[0].SetNumber(controllerHand); + args[1].SetNumber(controllerState->unPacketNum); + args[2].SetNumber(controllerState->ulButtonPressed & 0xFFFFFFFF); + args[3].SetNumber(controllerState->ulButtonPressed >> 32); + args[4].SetNumber(controllerState->ulButtonTouched && 0xFFFFFFFF); + args[5].SetNumber(controllerState->ulButtonTouched >> 32); + + GFxValue axisData; + movieView->CreateArray(&args[6]); + + for (int i = 0; i < vr::k_unControllerStateAxisCount; i++) { + GFxValue x, y; + x.SetNumber(controllerState->rAxis[i].x); + y.SetNumber(controllerState->rAxis[i].y); + + args[6].PushBack(&x); + args[6].PushBack(&y); + } + + object->Invoke(methodName, &result, args, 7); + } + } + + class VRInputScaleform_RegisterInputHandler : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + //_MESSAGE("RegisterInputHandler dll fn called!"); + + ASSERT(args->numArgs == 2); + ASSERT(args->args[0].GetType() == GFxValue::kType_DisplayObject || args->args[0].GetType() == GFxValue::kType_Object); + ASSERT(args->args[1].GetType() == GFxValue::kType_String); + + ScaleformCallback callback; + callback.movieView = args->movie; + callback.object = args->args[0]; + callback.object.AddManaged(); + callback.methodName = args->args[1].GetString(); + + + // If the same callback has already been registered, do not add it again. + // This will cause the callback to triggered twice when input events are sent. + for (ScaleformCallbackList::iterator iter = g_scaleformInputHandlers.begin(); iter != g_scaleformInputHandlers.end(); ++iter) + { + if (*iter == callback) { + //_MESSAGE("Duplicate callback found, aborting register..."); + return; + } + } + + //_MESSAGE("Registering: %s", callback.methodName); + g_scaleformInputHandlers.push_back(callback); + } + }; + + class VRInputScaleform_UnregisterInputHandler : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + //_MESSAGE("VRInputScaleform_UnregisterInputHandler dll fn called!"); + ASSERT(args->numArgs == 2); + ASSERT(args->args[0].GetType() == GFxValue::kType_DisplayObject || args->args[0].GetType() == GFxValue::kType_Object); + ASSERT(args->args[1].GetType() == GFxValue::kType_String); + + ScaleformCallback callback; + callback.object = args->args[0]; + callback.methodName = args->args[1].GetString(); + + g_scaleformInputHandlers.remove(callback); + callback.object.CleanManaged(); + //_MESSAGE("Unregistering: %s | remaining: %d", callback.methodName, g_scaleformInputHandlers.size()); + } + }; + + std::string GetControllerName(vr::COpenVRContext* vrContext, vr::ETrackedControllerRole role, vr::ETrackedPropertyError* err) { + char controllerType[vr::k_unMaxSettingsKeyLength]; + auto controllerIdx = vrContext->VRSystem()->GetTrackedDeviceIndexForControllerRole(vr::TrackedControllerRole_LeftHand); + vrContext->VRSystem()->GetStringTrackedDeviceProperty(controllerIdx, vr::Prop_ControllerType_String, controllerType, vr::k_unMaxSettingsKeyLength, err); + + if (*err == vr::TrackedProp_Success) { + return controllerType; + } + else + return ""; + } + + class VRInputScaleform_ControllerType : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + ASSERT(args->numArgs == 0); + + auto vrContext = vr::COpenVRContext(); + + vr::TrackedPropertyError err; + auto controllerName = GetControllerName(&vrContext, vr::TrackedControllerRole_LeftHand, &err); + if (err != vr::TrackedProp_Success) { + controllerName = GetControllerName(&vrContext, vr::TrackedControllerRole_RightHand, &err); + } + + if (err != vr::TrackedProp_Success) { + args->result->SetString("unknown"); + return; + } + + GFxValue val; + args->movie->CreateString(&val, controllerName.c_str()); + *args->result = val; + } + }; + + bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) { + //_MESSAGE("Registering scaleform functions"); + + RegisterFunction(plugin, view, "RegisterInputHandler"); + RegisterFunction(plugin, view, "UnregisterInputHandler"); + RegisterFunction(plugin, view, "ControllerType"); + return true; + } + + std::unordered_set ignoredMenus({ + "WSActivateRollover", + "WSEnemyMeters", + "LoadWaitSpinner", + "HUD Menu", + "Cursor Menu", + "Fader Menu", + "Mist Menu", + "LoadWaitSpinner", + "Loading Menu", + "TweenMenu", + }); + + std::unordered_set forceCleanMenus({ + "Journal Menu", + "InventoryMenu", + "MagicMenu", + "ContainerMenu", + "BarterMenu", + "GiftMenu", + "Crafting Menu", + }); + + bool contains(std::unordered_set& set, const char* key) { + if (set.find(key) == set.end()) + return false; + else + return true; + } + + class CleanControllerHookOnMenuClose : public BSTEventSink + { + EventResult ReceiveEvent(MenuOpenCloseEvent* evn, EventDispatcher* dispatcher) { + if (evn->opening) + return kEvent_Continue; + + //_MESSAGE(">>> CleanControllerHookOnMenuHook"); + + //if (!contains(ignoredMenus, evn->menuName)) + // _MESSAGE("Closing menu: %s", evn->menuName); + + // In the menus, the game engine seems to still respond to a lot of the events on its own. + // There are places where additional menus are opened without skyui's intervention. + // There are also places where menus are closed without skyui receiving notifications. + // This means we can't properly unregister VRInput::handleVRButtonUpdate(). + // Instead, we listen for the menu close event globally here and forcefully kickout + // any registration. + // + // This only works because VRInput is the only code that registers for these button updates. + // We really shouldn't be able to unintentionally remove handlers we don't intend to. + // + // Examples: + // ContainerMenu: + // Take all: forcefully closes the menu + // CraftingMenu: + // "Quit alchemy" prompt forcefully closes the menu + + //_MESSAGE("Menu name is: %s", evn->menuName); + if (contains(forceCleanMenus, evn->menuName)) { + //_MESSAGE("Actually cleaning up"); + + // Any GFxValue we might have tried to hang on are probably gone/destroyed now. + // We're removing the "managed" flag manually here we don't try to reference them and + // clean them up again, which will result in a crash. + for (auto it = g_scaleformInputHandlers.begin(); it != g_scaleformInputHandlers.end(); it++) { + ScaleformCallback& cb = *it; + cb.object.type &= ~GFxValue::kTypeFlag_Managed; + } + + g_scaleformInputHandlers.clear(); + } + + //_MESSAGE("<<< CleanControllerHookOnMenuHook"); + return kEvent_Continue; + } + }; + + CleanControllerHookOnMenuClose g_menuCloseHandler; + + void Init() { + // Ask for SkyrimVRTools to send us ConstrollerStates whenever they are requested. + hookMgr = RequestOpenVRHookManagerObject(); + if (!hookMgr) + return; + + hookMgr->RegisterControllerStateCB(ControllerStateCB); + + // Handle menu close events + MenuManager* mm = MenuManager::GetSingleton(); + if (mm) { + mm->MenuOpenCloseEventDispatcher()->AddEventSink(&g_menuCloseHandler); + } + else { + _MESSAGE("Failed to register menu close handler!"); + } + } +} diff --git a/sksevr_plugin/plugin/ControllerStateHook.h b/sksevr_plugin/plugin/ControllerStateHook.h new file mode 100644 index 000000000..88d25e8c3 --- /dev/null +++ b/sksevr_plugin/plugin/ControllerStateHook.h @@ -0,0 +1,6 @@ +#pragma once + +namespace ControllerStateHook{ + void Init(); + bool RegisterScaleformFuncs(GFxMovieView * view, GFxValue * plugin); +} diff --git a/sksevr_plugin/plugin/FormDB.cpp b/sksevr_plugin/plugin/FormDB.cpp new file mode 100644 index 000000000..46a0f6240 --- /dev/null +++ b/sksevr_plugin/plugin/FormDB.cpp @@ -0,0 +1,312 @@ +#include +#include + +#include "FormDB.h" +#include "skse64/GameForms.h" +#include "skse64/ScaleformValue.h" +#include "skse64/ScaleformCallbacks.h" +#include "skse64/ScaleformAPI.h" +#include "skse64/Hooks_Scaleform.h" +#include "skse64/ScaleformMovie.h" +#include "skse64/GameExtraData.h" +#include "skse64/ScaleformExtendedData.h" +#include "skse64/GameRTTI.h" + +#include "Keyboard.h" + +lua_State* g_lua = nullptr; + +namespace FormDB { + + + void Form_SetInt(UInt32 formID, const char* fieldName, SInt32 val) { + const char* func_name = "Form_SetVal"; + lua_getglobal(g_lua, func_name); // Grab the lua function + lua_pushinteger(g_lua, formID); // Push the params + lua_pushstring(g_lua, fieldName); + lua_pushinteger(g_lua, val); + + // Call and print any errors + if (lua_pcall(g_lua, 3, 1, 0) != 0) + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + + // Pop the return value + // The lua function actually returns the updated table. + // Since there isn't a great way to interact with it in C/C++, + // we're just going to discard it. + lua_pop(g_lua, 1); + } + + void Form_SetInt(TESForm* form, BSFixedString fieldName, SInt32 val) { + if (form == nullptr) { + // _MESSAGE("Form_SetInt: form is null"); + return; + } + + // _MESSAGE("Form_SetInt: 0x%x, %s, %d", form->formID, fieldName.c_str(), val); + Form_SetInt(form->formID, fieldName.c_str(), val); + } + + void Papyrus_Form_SetInt(StaticFunctionTag*, TESForm* form, BSFixedString fieldName, SInt32 val) { + if (form == nullptr) { + // _MESSAGE("Papyrus_Form_SetInt: form is null"); + return; + } + + // _MESSAGE("Papyrus_Form_SetInt: 0x%x, %s, %d", form->formID, fieldName.c_str(), val); + Form_SetInt(form->formID, fieldName.c_str(), val); + } + + SInt32 Form_GetInt(UInt32 formID, const char* fieldName, SInt32 default) { + const char* func_name = "Form_GetVal"; + lua_getglobal(g_lua, func_name); // Grab the lua function + lua_pushinteger(g_lua, formID); // Push the params + lua_pushstring(g_lua, fieldName); + lua_pushinteger(g_lua, default); + + // Call and print any errors + if (lua_pcall(g_lua, 3, 1, 0) != 0) + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + + if (!lua_isnumber(g_lua, -1)) + _ERROR("function `%s` did not return a number", func_name); + + // Get the fetch result + SInt32 val = lua_tointeger(g_lua, -1); + + lua_pop(g_lua, 1); // Cleanup the result from the stack + + return val; + } + + SInt32 Form_GetInt(TESForm* form, BSFixedString fieldName, SInt32 default) { + if (form == nullptr) { + // _MESSAGE("Form_GetInt: form is null"); + return default; + } + + // _MESSAGE("Form_GetInt: 0x%x, %s", form->formID, fieldName); + auto val = Form_GetInt(form->formID, fieldName.c_str(), default); + // _MESSAGE("Form_GetInt result: %d", val); + return val; + } + + SInt32 Papyrus_Form_GetInt(StaticFunctionTag*, TESForm* form, BSFixedString fieldName, SInt32 default) { + if (form == nullptr) { + // _MESSAGE("Papyrus_Form_GetInt: form is null"); + return default; + } + + // _MESSAGE("Papyrus_Form_GetInt: 0x%x, %s", form->formID, fieldName); + auto val = Form_GetInt(form->formID, fieldName.c_str(), default); + // _MESSAGE("Papyrus_Form_GetInt result: %d", val); + return val; + } + + const char* boolToStr(bool val) { + if (val) + return "true"; + else + return "false"; + } + + void Form_SetBool(UInt32 formID, const char* fieldName, bool val) { + const char* func_name = "Form_SetVal"; + lua_getglobal(g_lua, func_name); // Grab the lua function + lua_pushinteger(g_lua, formID); // Push the params + lua_pushstring(g_lua, fieldName); + lua_pushboolean(g_lua, val); + + if (lua_pcall(g_lua, 3, 1, 0) != 0) + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + + lua_pop(g_lua, 1); + } + + void Form_SetBool(TESForm* form, BSFixedString fieldName, bool val) { + if (form == nullptr) { + // _MESSAGE("Form_SetBool: form is null"); + return; + } + + // _MESSAGE("Form_SetBool: 0x%x, %s, %s", form->formID, fieldName.c_str(), boolToStr(val)); + Form_SetBool(form->formID, fieldName.c_str(), val); + } + + void Papyrus_Form_SetBool(StaticFunctionTag*, TESForm* form, BSFixedString fieldName, bool val) { + if (form == nullptr) { + // _MESSAGE("Form_SetBool: form is null"); + return; + } + + // _MESSAGE("Papyrus_Form_SetBool: 0x%x, %s, %s", form->formID, fieldName.c_str(), boolToStr(val)); + Form_SetBool(form->formID, fieldName.c_str(), val); + } + + bool Form_GetBool(UInt32 formID, const char* fieldName, bool default) { + const char* func_name = "Form_GetVal"; + lua_getglobal(g_lua, func_name); // Grab the lua function + lua_pushinteger(g_lua, formID); // Push the params + lua_pushstring(g_lua, fieldName); + lua_pushboolean(g_lua, default); + + // Call and print any errors + if (lua_pcall(g_lua, 3, 1, 0) != 0) + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + + if (!lua_isboolean(g_lua, -1)) + _ERROR("function `%s` did not return a boolean", func_name); + + // Get the fetch result + bool val = lua_toboolean(g_lua, -1); + + lua_pop(g_lua, 1); // Cleanup the result from the stack + + return val; + } + + bool Form_GetBool(TESForm* form, BSFixedString fieldName, bool default) { + if (form == nullptr) { + // _MESSAGE("Form_GetBool: form is null"); + return default; + } + + // _MESSAGE("Form_GetBool: 0x%x, %s", form->formID, fieldName); + bool val = Form_GetBool(form->formID, fieldName.c_str(), default); + // _MESSAGE("Form_GetBool result: %s", boolToStr(val)); + return val; + } + + bool Papyrus_Form_GetBool(StaticFunctionTag*, TESForm* form, BSFixedString fieldName, bool default) { + if (form == nullptr) { + // _MESSAGE("Papyrus_Form_GetBool: form is null"); + return default; + } + + // _MESSAGE("Papyrus_Form_GetBool: 0x%x, %s", form->formID, fieldName); + auto val = Form_GetBool(form->formID, fieldName.c_str(), default); + // _MESSAGE("Papyrus_Form_GetBool result: %s", boolToStr(val)); + return val; + } + + void Form_RemoveField(UInt32 formID, const char* fieldName) { + const char* func_name = "Form_RemoveField"; + lua_getglobal(g_lua, func_name); // Grab the lua function + lua_pushinteger(g_lua, formID); // Push the params + lua_pushstring(g_lua, fieldName); + + // Call and print any errors + if (lua_pcall(g_lua, 2, 0, 0) != 0) + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + } + + void Form_RemoveField(TESForm* form, BSFixedString fieldName) { + if (form == nullptr) { + // _MESSAGE("Form_RemoveField: form is null"); + return; + } + + // _MESSAGE("Form_RemoveField: 0x%x, %s", form->formID, fieldName); + Form_RemoveField(form->formID, fieldName.c_str()); + } + + void Papyrus_Form_RemoveField(StaticFunctionTag*, TESForm* form, BSFixedString fieldName) { + if (form == nullptr) { + // _MESSAGE("Papyrus_Form_RemoveField: form is null"); + return; + } + // _MESSAGE("Papyrus_Form_RemoveField: 0x%x, %s", form->formID, fieldName); + Form_RemoveField(form->formID, fieldName.c_str()); + } + + void Form_RemoveAllFields(UInt32 formID) { + const char* func_name = "Form_RemoveAllFields"; + lua_getglobal(g_lua, func_name); + lua_pushinteger(g_lua, formID); + + // Call and print any errors + if (lua_pcall(g_lua, 1, 0, 0) != 0) + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + } + + void Form_RemoveAllFields(TESForm* form) { + if (form == nullptr) { + // _MESSAGE("Form_RemoveAllFields: form is null"); + return; + } + // _MESSAGE("Form_RemoveAllFields: 0x%x, %s", form->formID); + Form_RemoveAllFields(form->formID); + } + + void Papyrus_Form_RemoveAllFields(StaticFunctionTag*, TESForm* form) { + if (form == nullptr) { + // _MESSAGE("Papyrus_Form_RemoveAllFields: form is null"); + return; + } + // _MESSAGE("Papyrus_Form_RemoveAllFields: 0x%x, %s", form->formID); + Form_RemoveAllFields(form->formID); + } + + bool RegisterPapyrusFuncs(VMClassRegistry* registry) { + _MESSAGE("Registering Papyrus Functions"); + registry->RegisterFunction(new NativeFunction3 ("SetInt", "SKI_PlayerInventoryHook", Papyrus_Form_SetInt, registry)); + registry->RegisterFunction(new NativeFunction3 ("GetInt", "SKI_PlayerInventoryHook", Papyrus_Form_GetInt, registry)); + registry->RegisterFunction(new NativeFunction3 ("SetBool", "SKI_PlayerInventoryHook", Papyrus_Form_SetBool, registry)); + registry->RegisterFunction(new NativeFunction3 ("GetBool", "SKI_PlayerInventoryHook", Papyrus_Form_GetBool, registry)); + registry->RegisterFunction(new NativeFunction2 ("RemoveField", "SKI_PlayerInventoryHook", Papyrus_Form_RemoveField, registry)); + registry->RegisterFunction(new NativeFunction1 ("RemoveAllFields", "SKI_PlayerInventoryHook", Papyrus_Form_RemoveAllFields, registry)); + return true; + } + + bool InitGlobalLuaVM() { + if (g_lua) + return false; + + // Setup new lua instance + g_lua = lua::lua_new_skyui_state(); + + if (g_lua) + return true; + else + return false; + } + + + + class Scaleform_RemoveField : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + //_MESSAGE("In Scaleform_RemoveField"); + ASSERT(args->numArgs == 2); + ASSERT(args->args[0].GetType() == GFxValue::kType_Number); + ASSERT(args->args[1].GetType() == GFxValue::kType_String); + + //_MESSAGE("Scaleform -> Dll: RemoveField, %d, %s", UInt32(args->args[0].GetNumber()), args->args[1].GetString()); + Form_RemoveField(UInt32(args->args[0].GetNumber()), args->args[1].GetString()); + } + }; + + bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) { + RegisterFunction(plugin, view, "FormDB_RemoveField"); + Keyboard::RegisterScaleformFuncs(view, plugin); + return true; + } + + void InventoryMarkNew(GFxMovieView* view, GFxValue* object, InventoryEntryData* item) { + bool new_item = Form_GetBool(item->type->formID, "skyui/newItem", false); + // Skip marking gold as new + if (item->type->formID == 0x0000000f) + return; + if (new_item) { + //_MESSAGE("Marking [%x] with 'newItem'", item->type->formID); + RegisterBool(object, "newItem", new_item); + } + } + + void RegisterScaleformInventoryHooks(SKSEScaleformInterface* infc) { + infc->RegisterForInventory(InventoryMarkNew); + } +} + diff --git a/sksevr_plugin/plugin/FormDB.h b/sksevr_plugin/plugin/FormDB.h new file mode 100644 index 000000000..e6db368d0 --- /dev/null +++ b/sksevr_plugin/plugin/FormDB.h @@ -0,0 +1,19 @@ +#include "skse64/PapyrusNativeFunctions.h" +#include "skse64/PluginAPI.h" + +#include "lua_glue.h" + +extern lua_State* g_lua; + +namespace FormDB { + void Form_SetInt(TESForm* form, BSFixedString fieldName, SInt32 val); + SInt32 Form_GetInt(TESForm* form, BSFixedString fieldName, SInt32 default); + void Form_RemoveField(TESForm* form, BSFixedString fieldName); + void Form_RemoveAllFields(TESForm* form, BSFixedString fieldName); + + bool RegisterPapyrusFuncs(VMClassRegistry* registry); + bool InitGlobalLuaVM(); + + bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin); + void RegisterScaleformInventoryHooks(SKSEScaleformInterface* infc); +} diff --git a/sksevr_plugin/plugin/Globals.h b/sksevr_plugin/plugin/Globals.h new file mode 100644 index 000000000..d1d63ff21 --- /dev/null +++ b/sksevr_plugin/plugin/Globals.h @@ -0,0 +1,7 @@ +#pragma once +#include "skse64/PluginAPI.h" +extern PluginHandle g_pluginHandle; +extern SKSEPapyrusInterface* g_papyrus; +extern SKSEScaleformInterface* g_scaleform; +extern SKSETaskInterface* g_SkseTaskInterface; +extern SKSEObjectInterface* g_SkseObjectInterface; diff --git a/sksevr_plugin/plugin/Keyboard.cpp b/sksevr_plugin/plugin/Keyboard.cpp new file mode 100644 index 000000000..7f938cfab --- /dev/null +++ b/sksevr_plugin/plugin/Keyboard.cpp @@ -0,0 +1,142 @@ +#include "skse64/PluginAPI.h" +#include "skse64/ScaleformValue.h" +#include "skse64/ScaleformMovie.h" +#include "skse64/ScaleformCallbacks.h" +#include "skse64/ScaleformAPI.h" +#include "skse64/Hooks_UI.h" +#include "common/ICriticalSection.h" +#include "skse64/InternalVR.h" +#include "skse64/GameVR.h" +#include "skse64/Hooks_Threads.h" +#include "skse64/InternalVR.h" + +#include +#include +#include +#include +#include + + +namespace Keyboard { + namespace vr = vr_1_0_12; + + auto vrContext = vr::COpenVRContext(); + vr::VROverlayHandle_t keyboardOverlayHandle = 0; + std::thread* keyboardHandlerThread = nullptr; + + void WaitForKeyboardInput(GFxValue desc, GFxValue currentText, GFxValue thisValue, GFxValue func) { + desc.AddManaged(); + currentText.AddManaged(); + thisValue.AddManaged(); + func.AddManaged(); + // In the case where the user is clicking on the search box directly, + // wait a short while before activating the keyboard. + // If we don't do this, the keyboard might become active before the trigger can be released. + // Steamvr may immediately dismiss the keyboard if the keyboard becomes active, because the + // controller is pointing away from the keyboard and the trigger is still depressed. + // This gives the user a bit of time to release the trigger. + // This isn't perfect. A better solution may be to wait for both controller's trigger to become + // fully released first. + Sleep(100); + + const int charMax = 255; + + // Bring up the keyboard + vr::EVROverlayError err; + err = vrContext.VROverlay()->ShowKeyboardForOverlay(keyboardOverlayHandle, vr::k_EGamepadTextInputModeNormal, vr::k_EGamepadTextInputLineModeSingleLine, desc.GetString(), charMax, currentText.GetString(), false, 0); + if (err != vr::EVROverlayError::VROverlayError_None) + return; + + //int i = 0; + vr::VREvent_t eventData; + while (true) + { + // Consume all overlay events + if (vrContext.VROverlay()->PollNextOverlayEvent(keyboardOverlayHandle, &eventData, sizeof(vr::VREvent_t))) + { + //_MESSAGE("Keyboard got event %i: %d", i++, eventData.eventType); + // Look for event where the keyboard is dismissed + if (eventData.eventType == vr::VREvent_KeyboardClosed || eventData.eventType == vr::VREvent_KeyboardDone) + { + // Grab the entered text in its entirety. + char buffer[charMax+1] = "\0"; + vrContext.VROverlay()->GetKeyboardText(buffer, charMax); + //_MESSAGE("Keyboard got string: %s", buffer); + + // Invoke the callback to send the result back to the Scaleform UI. + GFxValue vals[3]; + vals[0] = thisValue; + auto objectInterface = func.objectInterface; + if (objectInterface) { + auto movieRoot = objectInterface->root; + if (movieRoot) { + movieRoot->CreateString(&vals[1], buffer); + } + } + vals[2].SetNumber(0); + func.Invoke("call", nullptr, vals, 3); + break; + } + } + Sleep(50); + } + + keyboardHandlerThread->detach(); + delete keyboardHandlerThread; + keyboardHandlerThread = nullptr; + + vrContext.VROverlay()->DestroyOverlay(keyboardOverlayHandle); + keyboardOverlayHandle = 0; + + desc.CleanManaged(); + currentText.CleanManaged(); + thisValue.CleanManaged(); + func.CleanManaged(); + } + + + class Scaleform_ShowVirtualKeyboard : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + ASSERT(args->numArgs >= 6); + ASSERT(args->args[0].GetType() == GFxValue::kType_String); // Key + ASSERT(args->args[1].GetType() == GFxValue::kType_String); // Title + ASSERT(args->args[2].GetType() == GFxValue::kType_String); // Desc + ASSERT(args->args[3].GetType() == GFxValue::kType_String); // Text + ASSERT(args->args[4].GetType() == GFxValue::kType_Object || args->args[4].GetType() == GFxValue::kType_DisplayObject); // This + ASSERT(args->args[5].GetType() == GFxValue::kType_Object); // Function + + // Lazily initialize the keyboard overlay + vr::EVROverlayError err; + assert(keyboardOverlayHandle == 0); + err = vrContext.VROverlay()->CreateOverlay(args->args[0].GetString(), args->args[1].GetString(), &keyboardOverlayHandle); + if (err != vr::EVROverlayError::VROverlayError_None) + return; + + // Start a thread to wait for keyboard input. + assert(keyboardHandlerThread == nullptr); + keyboardHandlerThread = new std::thread(WaitForKeyboardInput, args->args[2], args->args[3], args->args[4], args->args[5]); + + // Tell the caller things have been initiated. + args->result->SetBool(true); + } + }; + + + bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) { + + RegisterFunction(plugin, view, "ShowVirtualKeyboard"); + + return true; + } + + void RegisterScaleformHooks(SKSEScaleformInterface* infc) { + _MESSAGE("Registering keyboard scaleform funcs"); + infc->Register("skyui", [](GFxMovieView* view, GFxValue* plugin){ + RegisterFunction(plugin, view, "ShowVirtualKeyboard"); + return true; + }); + } +} diff --git a/sksevr_plugin/plugin/Keyboard.h b/sksevr_plugin/plugin/Keyboard.h new file mode 100644 index 000000000..5e933ecea --- /dev/null +++ b/sksevr_plugin/plugin/Keyboard.h @@ -0,0 +1,9 @@ +#pragma once + +#include "skse64/PluginAPI.h" + +namespace Keyboard { + void Init(); + bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin); + void RegisterScaleformHooks(SKSEScaleformInterface* infc); +} diff --git a/sksevr_plugin/plugin/PapyrusUIFix.cpp b/sksevr_plugin/plugin/PapyrusUIFix.cpp new file mode 100644 index 000000000..d6f9744f3 --- /dev/null +++ b/sksevr_plugin/plugin/PapyrusUIFix.cpp @@ -0,0 +1,196 @@ +#include "PapyrusUIFix.h" + +#include "skse64/GameMenus.h" +#include "skse64/ScaleformCallbacks.h" +#include "skse64/ScaleformMovie.h" +#include "skse64/PapyrusNativeFunctions.h" + +#include "skse64/PapyrusUI.h" +#include "skse64/Hooks_UI.h" +#include "skse64/Serialization.h" + +#include "Globals.h" + +namespace PapyrusUIFix +{ + template void SetGFxValue(GFxValue* val, T arg); + template <> void SetGFxValue(GFxValue* val, bool arg) { val->SetBool(arg); } + template <> void SetGFxValue(GFxValue* val, float arg) { val->SetNumber(arg); } + + // Disabled so we don't accidentally use this + //template <> void SetGFxValue(GFxValue* val, UInt32 arg) { val->SetNumber(arg); } + + template <> void SetGFxValue(GFxValue* val, SInt32 arg) { val->SetNumber(arg); } + template <> void SetGFxValue(GFxValue* val, BSFixedString arg) + { + // lifetime of this string will not be managed by the scaleform runtime + val->SetString(arg.data); + } + + class UIInvokeDelegate : public UIDelegate_v1, public ISKSEObject + { + public: + UIInvokeDelegate(const char* nameBuf, const char* targetBuf) : + menuName_(nameBuf), + target_(targetBuf) + {} + + explicit UIInvokeDelegate(SerializationTag tag) { + + } + + virtual const char* ClassName() const { return "SkyUI-UIInvokeDelegate"; } + virtual UInt32 ClassVersion() const { return 1; } + + virtual void Run() override + { + MenuManager* mm = MenuManager::GetSingleton(); + if (!mm) + return; + + BSFixedString t(menuName_.c_str()); + GFxMovieView* view = mm->GetMovieView(&t); + if (!view) + return; + + GFxValue* value = NULL; + if (args.size() > 0) + value = &args[0]; + + view->Invoke(target_.c_str(), NULL, value, args.size()); + } + virtual void Dispose() override + { + delete this; + } + + virtual bool Save(SKSESerializationInterface* intfc) + { + using namespace Serialization; + + if (!WriteData(intfc, &menuName_)) + return false; + + if (!WriteData(intfc, &target_)) + return false; + + if (!WriteData(intfc, &type_)) + return false; + + if (!WriteData(intfc, &handle_)) + return false; + + return true; + } + + virtual bool Load(SKSESerializationInterface* intfc, UInt32 version) + { + using namespace Serialization; + + if (!ReadData(intfc, &menuName_)) + return false; + + if (!ReadData(intfc, &target_)) + return false; + + if (!ReadData(intfc, &type_)) + return false; + + if (!ReadData(intfc, &handle_)) + return false; + + UInt64 fixedHandle; + if (intfc->ResolveHandle(handle_, &fixedHandle)) + handle_ = fixedHandle; + + return true; + } + + + std::vector args; + + private: + std::string menuName_; + std::string target_; + + UInt32 type_; + UInt64 handle_; + }; + + template + void SetT(StaticFunctionTag* thisInput, BSFixedString menuName, BSFixedString targetStr, T value) + { + if (!menuName.data || !targetStr.data) + return; + + MenuManager* mm = MenuManager::GetSingleton(); + if (!mm) + return; + + GFxMovieView* view = mm->GetMovieView(&menuName); + if (!view) + return; + + GFxValue fxValue; + PapyrusUIFix::SetGFxValue(&fxValue, value); + + view->SetVariable(targetStr.data, &fxValue, 1); + } + + template + void InvokeArgT(StaticFunctionTag* thisInput, BSFixedString menuName, BSFixedString targetStr, T arg) + { + if (!menuName.data || !targetStr.data) + return; + + if (!g_SkseTaskInterface) + return; + + UIInvokeDelegate* cmd = new UIInvokeDelegate(menuName.data, targetStr.data); + + cmd->args.resize(1); + PapyrusUIFix::SetGFxValue(&cmd->args[0], arg); + + g_SkseTaskInterface->AddUITask(cmd); + } + + template + void InvokeArrayT(StaticFunctionTag* thisInput, BSFixedString menuName, BSFixedString targetStr, VMArray args) + { + if (!menuName.data || !targetStr.data) + return; + + if (!g_SkseTaskInterface) + return; + + UInt32 argCount = args.Length(); + + UIInvokeDelegate* cmd = new UIInvokeDelegate(menuName.data, targetStr.data); + + cmd->args.resize(argCount); + for (UInt32 i = 0; i < argCount; i++) + { + T arg; + args.Get(&arg, i); + PapyrusUIFix::SetGFxValue(&cmd->args[i], arg); + } + + g_SkseTaskInterface->AddUITask(cmd); + } + + bool RegisterPapyrusFuncs(VMClassRegistry* registry) { + SKSEObjectRegistry& objectRegistry = g_SkseObjectInterface->GetObjectRegistry(); + objectRegistry.RegisterClass(); + + registry->RegisterFunction( + new NativeFunction3 ("SetInt", "UI", SetT, registry)); + + registry->RegisterFunction( + new NativeFunction3 ("InvokeInt", "UI", InvokeArgT, registry)); + + registry->RegisterFunction( + new NativeFunction3 >("InvokeIntA", "UI", InvokeArrayT, registry)); + + return true; + } +} diff --git a/sksevr_plugin/plugin/PapyrusUIFix.h b/sksevr_plugin/plugin/PapyrusUIFix.h new file mode 100644 index 000000000..3329f04e9 --- /dev/null +++ b/sksevr_plugin/plugin/PapyrusUIFix.h @@ -0,0 +1,8 @@ +#pragma once + +#include "skse64/PapyrusObjects.h" + +namespace PapyrusUIFix +{ + bool RegisterPapyrusFuncs(VMClassRegistry* registry); +} diff --git a/sksevr_plugin/plugin/ScaleformExtendedDataFix.cpp b/sksevr_plugin/plugin/ScaleformExtendedDataFix.cpp new file mode 100644 index 000000000..bcc650578 --- /dev/null +++ b/sksevr_plugin/plugin/ScaleformExtendedDataFix.cpp @@ -0,0 +1,38 @@ + +#include "ScaleformExtendedDataFix.h" +#include "skse64/ScaleformValue.h" +#include "skse64/ScaleformExtendedData.h" +#include "skse64/GameRTTI.h" +#include "skse64/GameExtraData.h" + +namespace ExtendDataFix { + + // As of SKSEVR 2.0.12, the layout of TESAmmo is slightly off, causing the "flags" field to be + // read & passed to skyui incorrectly. + // The end result is skyui seems to always categorize bolts and arrow as "type: bolt". + void AttachAmmoFlags(GFxMovieView* view, GFxValue* pFxVal, InventoryEntryData* item) { + TESForm* pForm = item->type; + if (!pForm || !pFxVal || !pFxVal->IsObject()) + return; + + switch (pForm->GetFormType()) + { + case kFormType_Ammo: + { + TESAmmo* pAmmo = DYNAMIC_CAST(pForm, TESForm, TESAmmo); + if (pAmmo) + { + RegisterNumber(pFxVal, "flags", pAmmo->settings.flags); + } + } + break; + + default: + break; + } + } + + void RegisterScaleformInventoryHooks(SKSEScaleformInterface* infc) { + infc->RegisterForInventory(AttachAmmoFlags); + } +} diff --git a/sksevr_plugin/plugin/ScaleformExtendedDataFix.h b/sksevr_plugin/plugin/ScaleformExtendedDataFix.h new file mode 100644 index 000000000..9cfe0585f --- /dev/null +++ b/sksevr_plugin/plugin/ScaleformExtendedDataFix.h @@ -0,0 +1,7 @@ +#pragma once + +#include "skse64/PluginAPI.h" + +namespace ExtendDataFix{ + void RegisterScaleformInventoryHooks(SKSEScaleformInterface* infc); +} diff --git a/sksevr_plugin/plugin/Settings.cpp b/sksevr_plugin/plugin/Settings.cpp new file mode 100644 index 000000000..e67772aef --- /dev/null +++ b/sksevr_plugin/plugin/Settings.cpp @@ -0,0 +1,319 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "skse64/ScaleformValue.h" +#include "skse64/ScaleformMovie.h" +#include "skse64/ScaleformCallbacks.h" +#include "skse64_common/Utilities.h" + +#include "lua_glue.h" +#include "FormDB.h" + +namespace Settings { + + bool GetBool(lua_State* L, const char* path, bool default) { + return lua::lua_table_get_bool_by_path(L, LUA_GLOBALSINDEX, path, default); + } + + double GetDouble(lua_State* L, const char* path, double default) { + return lua::lua_table_get_double_by_path(L, LUA_GLOBALSINDEX, path, default); + } + + std::string GetString(lua_State* L, const char* path, std::string default) { + return lua::lua_table_get_string_by_path(L, LUA_GLOBALSINDEX, path, default); + } + + bool load_settings_file(lua_State* L, const char* path) { + const char* func_name = "load_settings_file"; + lua_getglobal(L, func_name); // Grab the lua function + lua_pushstring(L, path); + + // Call and print any errors + if (lua_pcall(L, 1, 1, 0) != 0) { + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + return false; + } + + return true; + } + + bool loadLuaConfig(const char* settingFilePath = nullptr) + { + std::string path; + + // Figure out which file we're trying to open. + if (settingFilePath) { + path = settingFilePath; + } + else { + path = GetRuntimeDirectory() + "Data\\SKSE\\Plugins\\SkyUI-VR.settings.lua"; + } + + int top = lua_gettop(g_lua); + + bool ok = load_settings_file(g_lua, path.c_str()); + if (!ok) + return false; + + lua_getfield(g_lua, -1, "Settings"); + lua_setglobal(g_lua, "Settings"); + lua::lua_pop_to_level(g_lua, top); + return true; + } + + bool deepCopyValue(lua_State* L, int index, GFxMovieView* movie, GFxValue* val); + + bool deepCopyTable(lua_State* L, int index, GFxMovieView* movie, GFxValue* object) { + int top = lua_gettop(L); + + // stack now contains: -1 => table + bool isArray = lua::lua_table_is_array(L, index); + + if (isArray) { + movie->CreateArray(object); + + lua_pushnil(L); + // stack now contains: -1 => nil; -2 => table + + for(int i = 0; lua_next(L, -2); i++) { + // stack now contains: -1 => value; -2 => key; -3 => table + GFxValue val; + + //lua::lua_print_value(L, -1); + //printf("\n"); + + // Copy the lua value from the top of the stack into a Scaleform Value + deepCopyValue(L, -1, movie, &val); + + // Add the Scaleform value to the Scaleform array + object->PushBack(&val); + + // pop value, leaving the key + lua_pop(L, 1); + // stack now contains: -1 => key; -2 => table + } + } + else { + movie->CreateObject(object); + + lua_pushnil(L); + // stack now contains: -1 => nil; -2 => table + + while (lua_next(L, -2)) + { + // stack now contains: -1 => value; -2 => key; -3 => table + const char* key = lua_tostring(L, -2); + const char* value = lua_tostring(L, -1); + + //lua::lua_print_value(L, -2); + //printf(" => "); + //lua::lua_print_value(L, -1); + //printf("\n"); + + GFxValue val; + deepCopyValue(L, -1, movie, &val); + object->SetMember(key, &val); + + // pop value, leaving the key + lua_pop(L, 1); + // stack now contains: -1 => key; -2 => table + } + } + + // stack now contains: -1 => table + // (when lua_next returns 0 it pops the key but does not push anything.) + + // Restore stack to the same state as when we entered the function + lua::lua_pop_to_level(L, top); + + return true; + } + + + bool deepCopyValue(lua_State* L, int index, GFxMovieView* movie, GFxValue* val) { + switch (lua_type(L, index)) { + case LUA_TNONE: + val->SetUndefined(); + break; + + case LUA_TNIL: + val->SetNull(); + break; + + case LUA_TBOOLEAN: + val->SetBool(lua_toboolean(L, index)); + break; + + case LUA_TNUMBER: + val->SetBool(lua_tonumber(L, index)); + break; + + case LUA_TSTRING: + val->SetString(lua_tostring(L, index)); + break; + + case LUA_TTABLE: + deepCopyTable(L, index, movie, val); + break; + + case LUA_TLIGHTUSERDATA: + printf("Cannot copy light user data"); + break; + case LUA_TFUNCTION: + printf("Cannot copy function"); + break; + case LUA_TUSERDATA: + printf("Cannot copy userdata"); + break; + case LUA_TTHREAD: + printf("Cannot copy thread"); + break; + } + + return true; + } + + class Scaleform_IniGet : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + ASSERT(args->numArgs >= 1); + ASSERT(args->args[0].GetType() == GFxValue::kType_String); // Key + ASSERT(g_lua); + + int top = lua_gettop(g_lua); + bool ok = lua::lua_table_get_by_path(g_lua, LUA_GLOBALSINDEX, args->args[0].GetString()); + + if (ok) + deepCopyValue(g_lua, -1, args->movie, args->result); + else + args->result->SetNull(); + + lua::lua_pop_to_level(g_lua, top); + } + }; + + // Used by actionscript code to request VR action bindings. + // Here, we're using both the globally loaded settings and another + // one to provide defaults if the specified path/value cannot be located. + class Scaleform_IniGetWithDefaults : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + ASSERT(args->numArgs >= 1); + ASSERT(args->args[0].GetType() == GFxValue::kType_String); // Path + ASSERT(args->args[1].GetType() == GFxValue::kType_String); // Defaults filename + ASSERT(g_lua); + + const char* givenFilename = args->args[1].GetString(); + std::string defaultsFilename; + + if (std::filesystem::exists(givenFilename)) { + defaultsFilename = givenFilename; + } + else { + std::string candidate = GetRuntimeDirectory() + "Data\\SKSE\\Plugins\\SkyUI-VR\\" + givenFilename + ".lua"; + if (std::filesystem::exists(candidate.c_str())) + defaultsFilename = candidate; + } + + int top = lua_gettop(g_lua); + bool ok; + + if (defaultsFilename.length() != 0) { + ok = lua::lua_settings_get_by_path_with_defaults(g_lua, LUA_GLOBALSINDEX, args->args[0].GetString(), defaultsFilename.c_str()); + } + else { + _ERROR("Unable to locate defaults settings file: %s", givenFilename); + ok = lua::lua_table_get_by_path(g_lua, LUA_GLOBALSINDEX, args->args[0].GetString()); + } + + if (ok) + deepCopyValue(g_lua, -1, args->movie, args->result); + else + args->result->SetNull(); + + lua::lua_pop_to_level(g_lua, top); + } + }; + + class Scaleform_IniGetBool : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + ASSERT(args->numArgs >= 1); + ASSERT(args->args[0].GetType() == GFxValue::kType_String); // Key + ASSERT(g_lua); + + int top = lua_gettop(g_lua); + bool ok = lua::lua_table_get_by_path(g_lua, LUA_GLOBALSINDEX, args->args[0].GetString()); + + if (ok && lua_isboolean(g_lua, -1)) + deepCopyValue(g_lua, -1, args->movie, args->result); + else + args->result->SetUndefined(); + + lua::lua_pop_to_level(g_lua, top); + } + }; + + class Scaleform_IniGetNumber : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + ASSERT(args->numArgs >= 1); + ASSERT(args->args[0].GetType() == GFxValue::kType_String); // Key + ASSERT(g_lua); + + int top = lua_gettop(g_lua); + bool ok = lua::lua_table_get_by_path(g_lua, LUA_GLOBALSINDEX, args->args[0].GetString()); + + if (ok && lua_isnumber(g_lua, -1)) + deepCopyValue(g_lua, -1, args->movie, args->result); + else + args->result->SetUndefined(); + + lua::lua_pop_to_level(g_lua, top); + } + }; + + class Scaleform_IniGetString : public GFxFunctionHandler + { + public: + virtual void Invoke(Args* args) + { + ASSERT(args->numArgs >= 1); + ASSERT(args->args[0].GetType() == GFxValue::kType_String); // Key + ASSERT(g_lua); + + int top = lua_gettop(g_lua); + bool ok = lua::lua_table_get_by_path(g_lua, LUA_GLOBALSINDEX, args->args[0].GetString()); + + if (ok && lua_isstring(g_lua, -1)) + deepCopyValue(g_lua, -1, args->movie, args->result); + else + args->result->SetUndefined(); + + lua::lua_pop_to_level(g_lua, top); + } + }; + + bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) { + RegisterFunction(plugin, view, "IniGet"); + RegisterFunction(plugin, view, "IniGetWithDefaults"); + RegisterFunction(plugin, view, "IniGetBool"); + RegisterFunction(plugin, view, "IniGetNumber"); + RegisterFunction(plugin, view, "IniGetString"); + return true; + } +} diff --git a/sksevr_plugin/plugin/Settings.h b/sksevr_plugin/plugin/Settings.h new file mode 100644 index 000000000..a7caa8134 --- /dev/null +++ b/sksevr_plugin/plugin/Settings.h @@ -0,0 +1,13 @@ +#pragma once + +#include "skse64/PluginAPI.h" + +namespace Settings { + bool loadLuaConfig(const char* settingFilePath = nullptr); + + bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin); + + bool GetBool (lua_State* L, const char* path, bool default); + double GetDouble(lua_State* L, const char* path, double default); + std::string GetString(lua_State* L, const char* path, std::string default); +} diff --git a/sksevr_plugin/plugin/VRHookAPI.h b/sksevr_plugin/plugin/VRHookAPI.h new file mode 100644 index 000000000..9878765c4 --- /dev/null +++ b/sksevr_plugin/plugin/VRHookAPI.h @@ -0,0 +1,59 @@ +/* VRHookAPI.h + * + * Part of SkyrimVRTools. + * Provides ability to register callbacks to get Controller States whenever the game engine asks for an update. + */ + +#pragma once + +#include +#include "common/IDebugLog.h" +#include "skse64/InternalVR.h" + +namespace vr = vr_1_0_12; + +// VR input callbacks +// last argument is ptr to VRControllerState that the mod authors can modify and use to block inputs +typedef bool (*GetControllerState_CB)(vr::TrackedDeviceIndex_t unControllerDeviceIndex, const vr::VRControllerState_t *pControllerState, uint32_t unControllerStateSize, vr::VRControllerState_t* pOutputControllerState); +typedef vr::EVRCompositorError (*WaitGetPoses_CB)(VR_ARRAY_COUNT(unRenderPoseArrayCount) vr::TrackedDevicePose_t* pRenderPoseArray, uint32_t unRenderPoseArrayCount, + VR_ARRAY_COUNT(unGamePoseArrayCount) vr::TrackedDevicePose_t* pGamePoseArray, uint32_t unGamePoseArrayCount); + +class OpenVRHookManagerAPI +{ +public: + virtual bool IsInitialized() = 0; + + virtual void RegisterControllerStateCB(GetControllerState_CB cbfunc) = 0; + virtual void RegisterGetPosesCB(WaitGetPoses_CB cbfunc) = 0; + virtual void UnregisterControllerStateCB(GetControllerState_CB cbfunc) = 0; + virtual void UnregisterGetPosesCB(WaitGetPoses_CB cbfunc) = 0; + + virtual vr::IVRSystem* GetVRSystem() const = 0; + virtual vr::IVRCompositor* GetVRCompositor() const = 0; +}; + + +// Request OpenVRHookManagerAPI object from dll if it is available, otherwise return null. Use to initialize raw OpenVR hooking +inline OpenVRHookManagerAPI* RequestOpenVRHookManagerObject() +{ + typedef OpenVRHookManagerAPI* (*GetVRHookMgrFuncPtr_t)(); + HMODULE skyrimVRToolsModule = LoadLibraryA("skyrimvrtools.dll"); + if (skyrimVRToolsModule != nullptr) + { + GetVRHookMgrFuncPtr_t vrHookGetFunc = (GetVRHookMgrFuncPtr_t)GetProcAddress(skyrimVRToolsModule, "GetVRHookManager"); + if (vrHookGetFunc) + { + return vrHookGetFunc(); + } + else + { + _MESSAGE("Failed to get address of function GetVRHookmanager from skyrimvrtools.dll in RequestOpenVRHookManagerObject(). Is your skyrimvrtools.dll out of date?"); + } + } + else + { + _MESSAGE("Failed to load skyrimvrtools.dll in RequestOpenVRHookManagerObject()"); + } + + return nullptr; +} diff --git a/sksevr_plugin/plugin/exports.def b/sksevr_plugin/plugin/exports.def new file mode 100644 index 000000000..550b9fb09 --- /dev/null +++ b/sksevr_plugin/plugin/exports.def @@ -0,0 +1,4 @@ +LIBRARY "SkyUI-VR" +EXPORTS +SKSEPlugin_Query +SKSEPlugin_Load diff --git a/sksevr_plugin/plugin/guicon.cpp b/sksevr_plugin/plugin/guicon.cpp new file mode 100644 index 000000000..06d827bbb --- /dev/null +++ b/sksevr_plugin/plugin/guicon.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include + +// maximum mumber of lines the output console should have +static const WORD MAX_CONSOLE_LINES = 500; + +bool RedirectIOToConsole() +{ + CONSOLE_SCREEN_BUFFER_INFO coninfo; + + // allocate a console for this app + AllocConsole(); + + // set the screen buffer to be big enough to let us scroll text + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); + coninfo.dwSize.Y = MAX_CONSOLE_LINES; + SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); + + bool result = true; + FILE* fp; + + // Redirect STDIN if the console has an input handle + if (GetStdHandle(STD_INPUT_HANDLE) != INVALID_HANDLE_VALUE) + if (freopen_s(&fp, "CONIN$", "r", stdin) != 0) + result = false; + else + setvbuf(stdin, NULL, _IONBF, 0); + + // Redirect STDOUT if the console has an output handle + if (GetStdHandle(STD_OUTPUT_HANDLE) != INVALID_HANDLE_VALUE) + if (freopen_s(&fp, "CONOUT$", "w", stdout) != 0) + result = false; + else + setvbuf(stdout, NULL, _IONBF, 0); + + // Redirect STDERR if the console has an error handle + if (GetStdHandle(STD_ERROR_HANDLE) != INVALID_HANDLE_VALUE) + if (freopen_s(&fp, "CONOUT$", "w", stderr) != 0) + result = false; + else + setvbuf(stderr, NULL, _IONBF, 0); + + // Make C++ standard streams point to console as well. + std::ios::sync_with_stdio(true); + + // Clear the error state for each of the C++ standard streams. + std::wcout.clear(); + std::cout.clear(); + std::wcerr.clear(); + std::cerr.clear(); + std::wcin.clear(); + std::cin.clear(); + + return result; +} diff --git a/sksevr_plugin/plugin/guicon.h b/sksevr_plugin/plugin/guicon.h new file mode 100644 index 000000000..6bc2d022c --- /dev/null +++ b/sksevr_plugin/plugin/guicon.h @@ -0,0 +1,3 @@ +#pragma once + +bool RedirectIOToConsole(); diff --git a/sksevr_plugin/plugin/lua_glue.cpp b/sksevr_plugin/plugin/lua_glue.cpp new file mode 100644 index 000000000..c831dd116 --- /dev/null +++ b/sksevr_plugin/plugin/lua_glue.cpp @@ -0,0 +1,238 @@ +#include "lua_glue.h" +#include +#include +#include "FormDB.h" + +namespace lua { + std::filesystem::path dll_path() { + HMODULE hm = nullptr; + if (GetModuleHandleEx( + GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + (LPCSTR)&dll_path, &hm) == 0) + { + int ret = GetLastError(); + _ERROR("GetModuleHandle failed, error = %d\n", ret); + return L""; + } + + wchar_t path[MAX_PATH]; + if (GetModuleFileNameW(hm, path, _countof(path)) == 0) { + int ret = GetLastError(); + _ERROR("GetModuleFileName failed, error = %d\n", ret); + return L""; + } + + return std::filesystem::path(path); + } + + lua_State* lua_new_with_libs() { + lua_State* L = luaL_newstate(); + if (L) { + luaL_openlibs(L); + } + + return L; + } + + int lua_prepend_package_path(lua_State* L, const char* path) { + int stack_before = lua_gettop(L); + auto new_path = std::string(path); + + lua_getglobal(L, "package"); + lua_getfield(L, -1, "path"); // get field "path" from table at top of stack (-1) + const char* cur_path = lua_tostring(L, -1); // grab path string from top of stack + lua_pop(L, 1); // Pop the result we just used + + new_path.append(";"); + new_path.append(cur_path); + + lua_pushstring(L, new_path.c_str()); // push the new one + lua_setfield(L, -2, "path"); // set the field "path" in table at -2 with value at top of stack + lua_pop(L, 1); // get rid of package table from top of stack + + assert(stack_before == lua_gettop(L)); + return 0; + } + + lua_State* lua_new_skyui_state() { + // Setup new lua instance + lua_State* state = lua_new_with_libs(); + + auto dll_dir = dll_path().parent_path(); + auto package_path = dll_dir / "SkyUI-VR/?.lua"; + lua_prepend_package_path(state, package_path.generic_u8string().c_str()); + + // Execute our lua file to setup global functions and variables in the vm + // FIXME!!! This will probably not work for non-ascii paths. + auto mainEntryPath = dll_dir / "SkyUI-VR/MainEntry.lua"; + if (luaL_dofile(state, mainEntryPath.generic_u8string().c_str()) != 0) { + _ERROR("Could not load lua file '%s': %s", mainEntryPath.generic_u8string().c_str(), lua_tostring(state, lua_gettop(state))); + lua_pop(state, 1); + } + + return state; + } + + void lua_pop_to_level(lua_State* L, int targetLevel) { + int curLevel = lua_gettop(L); + assert(targetLevel <= curLevel); + + int popCount = curLevel - targetLevel; + if (curLevel > 0) + lua_pop(L, curLevel - targetLevel); + + assert(lua_gettop(L) == targetLevel); + } + + bool lua_table_is_array(lua_State* L, int tableIdx) { + assert(lua_istable(L, tableIdx)); + int top = lua_gettop(L); + + lua_pushvalue(L, tableIdx); + // stack starts with: -1 => table + + lua_pushnil(L); + // stack now contains: -1 => nil; -2 => table + + // Walk through the table... + // We'll consider the table an "array" if all keys are numbers and are consecutive integers + bool isArray = true; + int index = 1; + while (lua_next(L, -2)) { + // stack now contains: -1 => value; -2 => key; -3 => table + if (0 == lua_isnumber(L, -2) || lua_tonumber(L, -2) != (lua_Number)index) { + isArray = false; + break; + } + index++; + + // Pop the value before continuing with lua_next() + lua_pop(L, 1); + } + + // Restore the stack to the level where we entered + lua::lua_pop_to_level(L, top); + + return isArray; + } + + void lua_print_value(lua_State* L, int index) { + switch (lua_type(L, index)) { + case LUA_TNONE: + printf("LUA_TNONE"); + break; + + case LUA_TNIL: + printf("LUA_TNIL"); + break; + + case LUA_TBOOLEAN: + printf("LUA_TBOOLEAN: %s", lua_toboolean(L, index) ? "true" : "false"); + break; + + case LUA_TNUMBER: + printf("LUA_TNUMBER: %f", lua_tonumber(L, index)); + break; + + case LUA_TSTRING: + printf("LUA_TSTRING: %s", lua_tostring(L, index)); + break; + + case LUA_TTABLE: + printf("LUA_TTABLE: 0x%llx", (uint64_t)lua_topointer(L, index)); + break; + + case LUA_TLIGHTUSERDATA: + printf("LUA_TLIGHTUSERDATA: 0x%llx", (uint64_t)lua_topointer(L, index)); + break; + + case LUA_TFUNCTION: + printf("LUA_TFUNCTION: 0x%llx", (uint64_t)lua_topointer(L, index)); + break; + + case LUA_TUSERDATA: + printf("LUA_TUSERDATA: 0x%llx", (uint64_t)lua_topointer(L, index)); + break; + + case LUA_TTHREAD: + printf("LUA_TTHREAD: 0x%llx", (uint64_t)lua_topointer(L, index)); + break; + } + } + + void lua_print_value_recursive(lua_State* L, int index) { + int top = lua_gettop(L); + + const char* func_name = "print_value_recursive"; + lua_getglobal(L, func_name); // Grab the lua function + lua_pushvalue(L, index); + + // Call and print any errors + if (lua_pcall(L, 1, 0, 0) != 0) { + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + } + + lua::lua_pop_to_level(L, top); + } + + bool lua_table_get_by_path(lua_State* L, int tableIdx, const char* path) { + const char* func_name = "table_get_by_path"; + lua_getglobal(L, func_name); // Grab the lua function + lua_pushvalue(L, tableIdx); + lua_pushstring(L, path); + lua_pushnil(L); + + // Call and print any errors + if (lua_pcall(L, 3, 1, 0) != 0) { + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + return false; + } + return true; + } + + bool lua_settings_get_by_path_with_defaults(lua_State* L, int tableIdx, const char* path, const char* defaultsFilename) { + const char* func_name = "settings_get_by_path_with_defaults"; + lua_getglobal(L, func_name); // Grab the lua function + lua_pushvalue(L, tableIdx); + lua_pushstring(L, path); + lua_pushstring(L, defaultsFilename); + lua_pushnil(L); + + // Call and print any errors + if (lua_pcall(L, 4, 1, 0) != 0) { + _ERROR("Error running `%s`: %s", func_name, lua_tostring(g_lua, -1)); + return false; + } + return true; + } + + bool lua_table_get_bool_by_path(lua_State* L, int tableIdx, const char* path, bool default) { + bool ok = lua_table_get_by_path(L, tableIdx, path); + if (!ok) + return default; + + bool val = lua_toboolean(L, -1); + lua_pop(L, 1); + return val; + } + + double lua_table_get_double_by_path(lua_State* L, int tableIdx, const char* path, double default) { + bool ok = lua_table_get_by_path(L, tableIdx, path); + if (!ok) + return default; + + double val = lua_tonumber(L, -1); + lua_pop(L, 1); + return val; + } + + std::string lua_table_get_string_by_path(lua_State* L, int tableIdx, const char* path, std::string default) { + bool ok = lua_table_get_by_path(L, tableIdx, path); + if (!ok) + return default; + + std::string val = lua_tostring(L, -1); + lua_pop(L, 1); + return val; + } +} diff --git a/sksevr_plugin/plugin/lua_glue.h b/sksevr_plugin/plugin/lua_glue.h new file mode 100644 index 000000000..3dc9c6e2d --- /dev/null +++ b/sksevr_plugin/plugin/lua_glue.h @@ -0,0 +1,26 @@ +#pragma once +#include + +extern "C" { +#include +#include +#include +#include "luajit.h" +} + +namespace lua { + std::filesystem::path dll_path(); + lua_State* lua_new_skyui_state(); + + bool lua_table_get_by_path(lua_State* L, int tableIdx, const char* path); + void lua_pop_to_level(lua_State* L, int targetLevel); + bool lua_table_is_array(lua_State* L, int tableIdx); + void lua_print_value(lua_State* L, int index); + void lua_print_value_recursive(lua_State* L, int index); + + bool lua_table_get_bool_by_path(lua_State* L, int tableIdx, const char* path, bool default); + double lua_table_get_double_by_path(lua_State* L, int tableIdx, const char* path, double default); + std::string lua_table_get_string_by_path(lua_State* L, int tableIdx, const char* path, std::string default); + + bool lua_settings_get_by_path_with_defaults(lua_State* L, int tableIdx, const char* path, const char* defaultsFilename); +} diff --git a/sksevr_plugin/plugin/main.cpp b/sksevr_plugin/plugin/main.cpp new file mode 100644 index 000000000..b6391d3f0 --- /dev/null +++ b/sksevr_plugin/plugin/main.cpp @@ -0,0 +1,110 @@ +#include "skse64/PluginAPI.h" // super +#include "skse64_common/skse_version.h" // What version of SKSE is running? +#include // CSIDL_MYCODUMENTS + +#include "FormDB.h" +#include "Keyboard.h" +#include "ControllerStateHook.h" +#include "Settings.h" + +// SKSE patches +#include "ScaleformExtendedDataFix.h" +#include "PapyrusUIFix.h" +#include "skse64/Hooks_UI.h" + +#include "guicon.h" + +PluginHandle g_pluginHandle = kPluginHandle_Invalid; +SKSEPapyrusInterface* g_papyrus = nullptr; +SKSEScaleformInterface* g_scaleform = nullptr; +SKSETaskInterface* g_SkseTaskInterface = nullptr; +SKSEObjectInterface* g_SkseObjectInterface = nullptr; + +void WaitForDebugger(bool should_break = false) { + while (!IsDebuggerPresent()) + Sleep(100); + if (should_break) + DebugBreak(); +} + +extern "C" { + // Called by SKSE to learn about this plugin and check that it's safe to load it + bool SKSEPlugin_Query(const SKSEInterface * skse, PluginInfo * info) { + gLog.OpenRelative(CSIDL_MYDOCUMENTS, "\\My Games\\Skyrim VR\\SKSE\\SkyUI-VR.log"); + gLog.SetPrintLevel(IDebugLog::kLevel_Error); + gLog.SetLogLevel(IDebugLog::kLevel_DebugMessage); + + _MESSAGE("SkyUI-VR loading"); + + // populate info structure + info->infoVersion = PluginInfo::kInfoVersion; + info->name = "SkyUI"; + info->version = 1; + + // store plugin handle so we can identify ourselves later + g_pluginHandle = skse->GetPluginHandle(); + + if (skse->isEditor) { + _MESSAGE("loaded in editor, marking as incompatible"); + return false; + } else if (skse->runtimeVersion != RUNTIME_VR_VERSION_1_4_15) { + _MESSAGE("unsupported runtime version %08X", skse->runtimeVersion); + return false; + } + + // ### do not do anything else in this callback + // ### only fill out PluginInfo and return true/false + + // supported runtime version + return true; + } + + // Called by SKSE to load this plugin + bool SKSEPlugin_Load(const SKSEInterface * skse) { + _MESSAGE("SkyUI-VR loaded"); + +#ifdef _DEBUG + WaitForDebugger(); + RedirectIOToConsole(); +#endif // DEBUG + + // Initialize lua + // We're storing all our data in lua + FormDB::InitGlobalLuaVM(); + Settings::loadLuaConfig(); + + // Setup pointers to various SKSE interfaces + // Parts of the program may need to access these sparatically. + g_SkseTaskInterface = (SKSETaskInterface*)skse->QueryInterface(kInterface_Task); + g_SkseObjectInterface = (SKSEObjectInterface*)skse->QueryInterface(kInterface_Object); + + // Register additional Papyrus functions + g_papyrus = (SKSEPapyrusInterface *)skse->QueryInterface(kInterface_Papyrus); + g_papyrus->Register(FormDB::RegisterPapyrusFuncs); // Expose FormDB lua functions to Papyrus + g_papyrus->Register(PapyrusUIFix::RegisterPapyrusFuncs); // Fix Papyrus=>SKSE=>Scaleform SInt32 conversion bug + + // Register Inventory item hooks + g_scaleform = (SKSEScaleformInterface*)skse->QueryInterface(kInterface_Scaleform); + FormDB::RegisterScaleformInventoryHooks(g_scaleform); + ExtendDataFix::RegisterScaleformInventoryHooks(g_scaleform); + + // Register additional Scaleform functions + g_scaleform->Register("skyui", [](GFxMovieView* view, GFxValue* plugin) { + FormDB::RegisterScaleformFuncs(view, plugin); // Expose FormDB lua functions to Scaleform + ControllerStateHook::RegisterScaleformFuncs(view, plugin); + Keyboard::RegisterScaleformFuncs(view, plugin); + Settings::RegisterScaleformFuncs(view, plugin); + return true; + }); + + // Start receiving constroller state updates + ControllerStateHook::Init(); + + + + + _MESSAGE("Plugin loaded"); + + return true; + } +}; diff --git a/sksevr_plugin/plugin/plugin.vcxproj b/sksevr_plugin/plugin/plugin.vcxproj new file mode 100644 index 000000000..e069044c4 --- /dev/null +++ b/sksevr_plugin/plugin/plugin.vcxproj @@ -0,0 +1,175 @@ + + + + + Debug + x64 + + + Release + x64 + + + + {547171CB-F934-40B9-B788-3C520FE66363} + Win32Proj + plugin + 10.0.19041.0 + + + + + + + + + plugin + + + + DynamicLibrary + true + v141 + MultiByte + + + DynamicLibrary + v141 + true + MultiByte + + + + + + + + + + + + + true + $(SolutionDir)Build\$(Configuration)\ + $(SolutionDir)Build\$(Configuration)\Intermediate\$(ProjectName)\ + SkyUI-VR + + + false + $(SolutionDir)Build\$(Configuration)\ + $(SolutionDir)Build\$(Configuration)\Intermediate\$(ProjectName)\ + SkyUI-VR + + + + + + Level3 + Disabled + _DEBUG;_WINDOWS;_USRDLL;PLUGIN_EXPORTS;%(PreprocessorDefinitions) + $(SolutionDir)common;$(SolutionDir)skse;$(SolutionDir);$(SolutionDir)..;$(SolutionDir)Build\$(Configuration)\luajit;%(AdditionalIncludeDirectories) + common/IPrefix.h;%(ForcedIncludeFiles) + MultiThreadedDebugDLL + EnableFastChecks + EditAndContinue + stdcpp17 + + + Windows + true + $(SolutionDir)lib\*;$(SolutionDir)Build\$(Configuration)\luajit\lua51.lib;%(AdditionalDependencies) + exports.def + + + + + + + if defined SkyUITestPath ( + echo Copying built dll to test directory + xcopy /y $(TargetPath) "%SkyUITestPath%\SKSE\Plugins" + xcopy /y $(TargetDir)SkyUI-VR.pdb "%SkyUITestPath%\SKSE\Plugins" +) else ( + echo %%SkyUITestPath%% not defined + echo Not copying built artifact to test directory +) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;PLUGIN_EXPORTS;%(PreprocessorDefinitions) + $(SolutionDir)common;$(SolutionDir)skse;$(SolutionDir);$(SolutionDir)..;$(SolutionDir)Build\$(Configuration)\luajit;%(AdditionalIncludeDirectories) + common/IPrefix.h;%(ForcedIncludeFiles) + MultiThreadedDLL + ProgramDatabase + stdcpp17 + + + Windows + true + true + true + $(SolutionDir)lib\*;$(SolutionDir)Build\$(Configuration)\luajit\lua51.lib;%(AdditionalDependencies) + exports.def + + + + + + + if defined SkyUITestPath ( + echo Copying built dll to test directory + xcopy /y $(TargetPath) "%SkyUITestPath%\SKSE\Plugins" + xcopy /y $(TargetDir)SkyUI-VR.pdb "%SkyUITestPath%\SKSE\Plugins" +) else ( + echo %%SkyUITestPath%% not defined + echo Not copying built artifact to test directory +) + + + + + {472e19ab-def0-42df-819b-18722e8dc822} + + + {639411c0-fc23-4819-a0c5-429a4e5d8a51} + + + {5fd1c08d-db80-480c-a1c6-f0920005cd13} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sksevr_plugin/plugin/plugin.vcxproj.filters b/sksevr_plugin/plugin/plugin.vcxproj.filters new file mode 100644 index 000000000..d34a244cf --- /dev/null +++ b/sksevr_plugin/plugin/plugin.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + + SKSE Patches + + + + + + + SKSE Patches + + + + + + + SKSE Patches + + + + + + + SKSE Patches + + + + + + + + + + + {6d3ec361-f98a-4172-b913-8e3f183dad14} + + + \ No newline at end of file diff --git a/sksevr_plugin/plugin/scripts/ExportPlugin.psc b/sksevr_plugin/plugin/scripts/ExportPlugin.psc new file mode 100644 index 000000000..d3a834ede --- /dev/null +++ b/sksevr_plugin/plugin/scripts/ExportPlugin.psc @@ -0,0 +1,3 @@ +ScriptName ExportPlugin Hidden + +float Function MyTest() global native diff --git a/sksevr_plugin/skse b/sksevr_plugin/skse new file mode 160000 index 000000000..7ed497e87 --- /dev/null +++ b/sksevr_plugin/skse @@ -0,0 +1 @@ +Subproject commit 7ed497e87dc66935d6b6fbcc70a09ba2287307ad diff --git a/sksevr_plugin/tools/run-lua-tests b/sksevr_plugin/tools/run-lua-tests new file mode 100644 index 000000000..852fc9fbd --- /dev/null +++ b/sksevr_plugin/tools/run-lua-tests @@ -0,0 +1,6 @@ +#!/usr/bin/bash + +SCRIPT_PATH=`dirname "$(realpath $0)"` + +cd $SCRIPT_PATH/../lua-tests +busted --coverage -m "$SCRIPT_PATH/../lua/?.lua" . diff --git a/src/.gitignore b/src/.gitignore index 824613c1c..bd0b9851f 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,3 +1,2 @@ - .flashProjectProperties -/Common/mx/transitions/Tween.as +.snippets diff --git a/src/CLIK/gfx/controls/OptionStepper.as b/src/CLIK/gfx/controls/OptionStepper.as index 5259d38d1..8511fded5 100644 --- a/src/CLIK/gfx/controls/OptionStepper.as +++ b/src/CLIK/gfx/controls/OptionStepper.as @@ -286,4 +286,15 @@ invalidateData(); } + function ToggleNextOrAround(evtObj) + { + if(_selectedIndex < _dataProvider.length - 1) + { + selectedIndex = selectedIndex + 1; + } + else + { + selectedIndex = 0; + } + } } diff --git a/src/CLIK/gfx/managers/FocusHandler.as b/src/CLIK/gfx/managers/FocusHandler.as index cdf756918..a09110f02 100644 --- a/src/CLIK/gfx/managers/FocusHandler.as +++ b/src/CLIK/gfx/managers/FocusHandler.as @@ -1,3 +1,5 @@ +import skyui.util.Debug; + dynamic class gfx.managers.FocusHandler { static var _instance = gfx.managers.FocusHandler.instance; @@ -21,7 +23,7 @@ dynamic class gfx.managers.FocusHandler static function get instance() { - if (_instance == null) + if (_instance == null) { _instance = new FocusHandler(); } @@ -70,18 +72,34 @@ dynamic class gfx.managers.FocusHandler function handleInput(event: Object): Void { + // Grab the focus path + // It appears controllerIdx is always 0 here. var controllerIdx: Number = event.details.controllerIdx; var focusIdx: Number = Selection.getControllerFocusGroup(controllerIdx); var path: Array = getPathToFocus(focusIdx); + + // Send the input into the first item in the focus list if possible if (path.length == 0 || path[0].handleInput == null || path[0].handleInput(event.details, path.slice(1)) != true) { + + // If nothing is going to handle the input Or if the handler returned false... + // Perform some default handling on "keyup" if (event.details.value != "keyUp") { + + // Only deal with input with a navEquivalent (aka keys we understand && will deal with) + // Keys that we don't understand will be skipped. var nav = event.details.navEquivalent; if (nav != null) { + // Get the thing that is in focus var focusedElem = eval(Selection.getFocus(controllerIdx)); var actualFocus = this.actualFocusLookup[focusIdx]; + + // If the thing in focus is a text field, try to have it handle the input... + // If the input is handled, don't do anything further. if (actualFocus instanceof TextField && focusedElem == actualFocus && this.textFieldHandleInput(nav, controllerIdx)) { return; } + + // We're going to try to find another thing we can focus on... var dirH = nav == gfx.ui.NavigationCode.LEFT || nav == gfx.ui.NavigationCode.RIGHT; var dirV = nav == gfx.ui.NavigationCode.UP || nav == gfx.ui.NavigationCode.DOWN; var focusContext = focusedElem._parent; @@ -112,14 +130,14 @@ dynamic class gfx.managers.FocusHandler var __reg5 = this.currentFocusLookup[focusIdx]; var __reg3 = __reg5; var __reg4 = [__reg3]; - while (__reg3) + while (__reg3) { __reg3 = __reg3._parent; - if (__reg3.handleInput != null) + if (__reg3.handleInput != null) { __reg4.unshift(__reg3); } - if (__reg3 == _root) + if (__reg3 == _root) { break; } @@ -129,17 +147,17 @@ dynamic class gfx.managers.FocusHandler function onSetFocus(oldFocus, newFocus, controllerIdx) { - if (oldFocus instanceof TextField && newFocus == null) + if (oldFocus instanceof TextField && newFocus == null) { return undefined; } var __reg2 = Selection.getControllerFocusGroup(controllerIdx); var __reg6 = this.actualFocusLookup[__reg2]; - if (__reg6 == newFocus) + if (__reg6 == newFocus) { var __reg4 = newFocus instanceof TextField ? newFocus._parent : newFocus; var __reg5 = __reg4.focused; - if (__reg5 & 1 << __reg2 == 0) + if (__reg5 & 1 << __reg2 == 0) { __reg4.focused = __reg5 | 1 << __reg2; } @@ -153,27 +171,27 @@ dynamic class gfx.managers.FocusHandler var __reg3 = Selection.getCaretIndex(controllerIdx); var __reg4 = Selection.getControllerFocusGroup(controllerIdx); var __reg2 = this.actualFocusLookup[__reg4]; - if ((__reg0 = nav) === gfx.ui.NavigationCode.UP) + if ((__reg0 = nav) === gfx.ui.NavigationCode.UP) { - if (!__reg2.multiline) + if (!__reg2.multiline) { return false; } return __reg3 > 0; } - else if (__reg0 === gfx.ui.NavigationCode.LEFT) + else if (__reg0 === gfx.ui.NavigationCode.LEFT) { return __reg3 > 0; } - else if (__reg0 === gfx.ui.NavigationCode.DOWN) + else if (__reg0 === gfx.ui.NavigationCode.DOWN) { - if (!__reg2.multiline) + if (!__reg2.multiline) { return false; } return __reg3 < TextField(__reg2).length; } - else if (__reg0 === gfx.ui.NavigationCode.RIGHT) + else if (__reg0 === gfx.ui.NavigationCode.RIGHT) { return __reg3 < TextField(__reg2).length; } diff --git a/src/CLIK/gfx/managers/InputDelegate.as b/src/CLIK/gfx/managers/InputDelegate.as index 3b68cd92f..285339ee5 100644 --- a/src/CLIK/gfx/managers/InputDelegate.as +++ b/src/CLIK/gfx/managers/InputDelegate.as @@ -1,4 +1,11 @@ -import gfx.events.EventDispatcher; +/* Class InputDelegate + * + * This is where keydown/keyup events are normally passed to the UI. + * We attach some supplimental information from SKSE, then dispatch + * the event to the rest of the UI. + * + */ +import gfx.events.EventDispatcher; import gfx.ui.NavigationCode; import gfx.ui.InputDetails; @@ -9,29 +16,34 @@ import skyui.util.GlobalFunctions; class gfx.managers.InputDelegate extends EventDispatcher { /* SINGLETON */ - + private static var _instance: InputDelegate; - + public static function get instance(): InputDelegate { - if (_instance == null) + if (_instance == null) _instance = new InputDelegate(); - + return _instance; } - - + + public function Reset() + { + _keyRepeatStateLookup = {}; + } + + /* PRIVATE VARIABLES */ - + private var _keyRepeatStateLookup: Object; private var _keyRepeatSuppressLookup: Object; - + private var _bEnableControlFixup: Boolean = false; private var _acceptKeycode: Number = -1; - - + + /* PROPERTIES */ - + public var isGamepad: Boolean = false; @@ -40,22 +52,22 @@ class gfx.managers.InputDelegate extends EventDispatcher public function InputDelegate() { super(); - + Key.addListener(this); _keyRepeatSuppressLookup = {}; _keyRepeatStateLookup = {}; } - - + + /* PUBLIC FUNCTIONS */ - + // Certain menus wont receive navEquiv's, i.e. ENTER for activate in MapMenu // Has to be disabled manually for skse.AllowTextInput public function enableControlFixup(a_bEnabled: Boolean): Void { if (a_bEnabled) _acceptKeycode = GlobalFunctions.getMappedKey("Accept", Input.CONTEXT_MENUMODE, isGamepad); - + _bEnableControlFixup = a_bEnabled; } @@ -74,11 +86,17 @@ class gfx.managers.InputDelegate extends EventDispatcher { var code = Key.getCode(a_controllerIdx); var repeatState = getKeyRepeatState(a_controllerIdx); - + + // We can get multiple keydowns for the same key + // Possible outcomes: + // - send/passthrough the keydown event + // - supress the event + // - send a keyheld event + if (!repeatState[code]) { handleKeyPress("keyDown", code, a_controllerIdx, skse.GetLastControl(true), skse.GetLastKeycode(true)); repeatState[code] = true; - + } else { var suppressState = getKeyRepeatSuppress(a_controllerIdx); if (!suppressState[code]) @@ -88,14 +106,16 @@ class gfx.managers.InputDelegate extends EventDispatcher public function onKeyUp(a_controllerIdx: Number): Void { + // Just send through the keyup event + var code = Key.getCode(a_controllerIdx); var repeatState = getKeyRepeatState(a_controllerIdx); repeatState[code] = false; - + handleKeyPress("keyUp", code, a_controllerIdx, skse.GetLastControl(false), skse.GetLastKeycode(false)); } - - + + /* PRIVATE FUNCTIONS */ private function handleKeyPress(a_type: String, a_code: Number, a_controllerIdx: Number, a_control: String, a_skseKeycode: Number): Void @@ -112,7 +132,7 @@ class gfx.managers.InputDelegate extends EventDispatcher a_skseKeycode = null; break; } - + // For != null, attempt fixup? } else if (_bEnableControlFixup) { if (a_skseKeycode == _acceptKeycode) { @@ -120,6 +140,8 @@ class gfx.managers.InputDelegate extends EventDispatcher } } + // Dispatch the event. + // By default, FocusHandler is the only listener. var details = new InputDetails("key", a_code, a_type, navEquivalent, a_controllerIdx, a_control, a_skseKeycode); dispatchEvent({type: "input", details: details}); } @@ -143,9 +165,13 @@ class gfx.managers.InputDelegate extends EventDispatcher } return obj; } - + private function inputToNav(a_code: Number): String { + // We're usually given just a number that represents the key. + // This function is used to map these key numbers to some symbolic + // name so we can deal with the key in a more reasonable manner + // in the rest of the code. switch (a_code) { case 38: return NavigationCode.UP; @@ -176,7 +202,7 @@ class gfx.managers.InputDelegate extends EventDispatcher case 106: return NavigationCode.GAMEPAD_START; case 107: return NavigationCode.GAMEPAD_BACK; } - + return null; } } diff --git a/src/CLIK/gfx/ui/NavigationCode.as b/src/CLIK/gfx/ui/NavigationCode.as index 599ef99d4..b78288f55 100644 --- a/src/CLIK/gfx/ui/NavigationCode.as +++ b/src/CLIK/gfx/ui/NavigationCode.as @@ -25,5 +25,5 @@ static var PAGE_DOWN: String = "pageDown"; static var PAGE_UP: String = "pageUp"; static var TAB: String = "tab"; - static var SHIFT_TAB: String = "shifttab"; + static var SHIFT_TAB: String = "tab"; } diff --git a/src/Common/Components/CrossPlatformButtons.as b/src/Common/Components/CrossPlatformButtons.as index 9df3c13a9..4b057b040 100644 --- a/src/Common/Components/CrossPlatformButtons.as +++ b/src/Common/Components/CrossPlatformButtons.as @@ -1,3 +1,6 @@ +// TODO!!! Doesn't look like this file is use at all by skyui. +// Consider removing this file completely. + import Shared.ButtonChange; class Components.CrossPlatformButtons extends gfx.controls.Button diff --git a/src/Common/SaveLoadPanel.as b/src/Common/SaveLoadPanel.as index 371c24669..410b75d6a 100644 --- a/src/Common/SaveLoadPanel.as +++ b/src/Common/SaveLoadPanel.as @@ -4,24 +4,34 @@ import gfx.io.GameDelegate; class SaveLoadPanel extends MovieClip { static var SCREENSHOT_DELAY: Number = 200; //750 - - + static var CONTROLLER_PC = 0; + static var CONTROLLER_PC_GAMEPAD = 1; + static var CONTROLLER_DURANGO = 2; + static var CONTROLLER_ORBIS = 3; + var List_mc: MovieClip; var SaveLoadList_mc: MovieClip; var ScreenshotHolder: MovieClip; var ScreenshotRect: MovieClip; - + var ScreenshotLoader: MovieClipLoader; - + var PlayerInfoText: TextField; var dispatchEvent: Function; - + var bSaving: Boolean; - + var iBatchSize: Number; var iPlatform: Number; var iScreenshotTimerID: Number; + var showCharacterBackHint; + var showingCharacterList; + var lastSelectedIndexMemory; + + var uiSaveLoadManagerProcessedElements; + var uiSaveLoadManagerNumElementsToLoad; + var isForceStopping; function SaveLoadPanel() { @@ -29,6 +39,13 @@ class SaveLoadPanel extends MovieClip EventDispatcher.initialize(this); SaveLoadList_mc = List_mc; bSaving = true; + + showCharacterBackHint = false; + showingCharacterList = false; + lastSelectedIndexMemory = 0; + uiSaveLoadManagerProcessedElements = 0; + uiSaveLoadManagerNumElementsToLoad = 0; + isForceStopping = false; } function onLoad(): Void @@ -37,6 +54,7 @@ class SaveLoadPanel extends MovieClip ScreenshotLoader.addListener(this); GameDelegate.addCallBack("ConfirmOKToLoad", this, "onOKToLoadConfirm"); GameDelegate.addCallBack("onSaveLoadBatchComplete", this, "onSaveLoadBatchComplete"); + GameDelegate.addCallBack("onFillCharacterListComplete",this,"onFillCharacterListComplete"); GameDelegate.addCallBack("ScreenshotReady", this, "ShowScreenshot"); SaveLoadList_mc.addEventListener("itemPress", this, "onSaveLoadItemPress"); SaveLoadList_mc.addEventListener("selectionChange", this, "onSaveLoadItemHighlight"); @@ -56,6 +74,21 @@ class SaveLoadPanel extends MovieClip bSaving = abFlag; } + function get isShowingCharacterList() + { + return showingCharacterList; + } + + function set isShowingCharacterList(abFlag) + { + showingCharacterList = abFlag; + if(iPlatform != SaveLoadPanel.CONTROLLER_ORBIS) + { + ScreenshotHolder._visible = !showingCharacterList; + } + PlayerInfoText._visible = !showingCharacterList; + } + function get selectedIndex(): Number { return SaveLoadList_mc.selectedIndex; @@ -81,8 +114,46 @@ class SaveLoadPanel extends MovieClip return SaveLoadList_mc.entryList.length; } + function get selectedEntry() + { + return SaveLoadList_mc.entryList[SaveLoadList_mc.selectedIndex]; + } + + function get LastSelectedIndexMemory() + { + if(lastSelectedIndexMemory > SaveLoadList_mc.entryList.length -1) { + lastSelectedIndexMemory = Math.max(0, SaveLoadList_mc.entryList.length - 1); + } + return lastSelectedIndexMemory; + } + function onSaveLoadItemPress(event: Object): Void { + lastSelectedIndexMemory = SaveLoadList_mc.selectedIndex; + if(this.isShowingCharacterList) + { + var selected = this.SaveLoadList_mc.entryList[this.SaveLoadList_mc.selectedIndex]; + if(selected != undefined) + { + if(this.iPlatform != 0) + { + SaveLoadList_mc.selectedIndex = 0; + } + var flags = selected.flags; + if(flags == undefined) + { + flags = 0; + } + var id = selected.id; + if(id == undefined) + { + flags = 4294967295; + } + gfx.io.GameDelegate.call("CharacterSelected",[id, flags, bSaving, SaveLoadList_mc.entryList, iBatchSize]); + this.dispatchEvent({type:"OnCharacterSelected"}); + return; + } + } if (!bSaving) { GameDelegate.call("IsOKtoLoad", [SaveLoadList_mc.selectedIndex]); return; @@ -95,7 +166,16 @@ class SaveLoadPanel extends MovieClip dispatchEvent({type: "loadGameSelected", index: SaveLoadList_mc.selectedIndex}); } - function onSaveLoadItemHighlight(event: Object): Void + function ForceStopLoading() + { + isForceStopping = true; + if(uiSaveLoadManagerProcessedElements < uiSaveLoadManagerNumElementsToLoad) + { + GameDelegate.call("ForceStopSaveListLoading",[]); + } + } + + function RemoveScreenshot() { if (iScreenshotTimerID != undefined) { clearInterval(iScreenshotTimerID); @@ -108,7 +188,19 @@ class SaveLoadPanel extends MovieClip PlayerInfoText.PlayTimeText.SetText(" "); ScreenshotRect = undefined; } - if (event.index != -1) + } + + function onSaveLoadItemHighlight(event: Object): Void + { + if(isForceStopping) + return; + + RemoveScreenshot(); + + if(isShowingCharacterList) + return; + + if (event.index != -1) iScreenshotTimerID = setInterval(this, "PrepScreenshot", SaveLoadPanel.SCREENSHOT_DELAY); dispatchEvent({type: "saveHighlighted", index: SaveLoadList_mc.selectedIndex}); } @@ -128,7 +220,7 @@ class SaveLoadPanel extends MovieClip { ScreenshotRect = ScreenshotHolder.createEmptyMovieClip("ScreenshotRect", 0); ScreenshotLoader.loadClip("img://BGSSaveLoadHeader_Screenshot", ScreenshotRect); - + if (SaveLoadList_mc.selectedEntry.corrupt == true) { PlayerInfoText.textField.SetText("$SAVE CORRUPT"); } else if (SaveLoadList_mc.selectedEntry.obsolete == true) { @@ -138,21 +230,21 @@ class SaveLoadPanel extends MovieClip } else { var strSaveName: String = SaveLoadList_mc.selectedEntry.name; var iSaveNameMaxLength: Number = 20; - if (strSaveName.length > iSaveNameMaxLength) + if (strSaveName.length > iSaveNameMaxLength) strSaveName = strSaveName.substr(0, iSaveNameMaxLength - 3) + "..."; - if (SaveLoadList_mc.selectedEntry.raceName != undefined && SaveLoadList_mc.selectedEntry.raceName.length > 0) + if (SaveLoadList_mc.selectedEntry.raceName != undefined && SaveLoadList_mc.selectedEntry.raceName.length > 0) strSaveName = strSaveName + (", " + SaveLoadList_mc.selectedEntry.raceName); - if (SaveLoadList_mc.selectedEntry.level != undefined && SaveLoadList_mc.selectedEntry.level > 0) + if (SaveLoadList_mc.selectedEntry.level != undefined && SaveLoadList_mc.selectedEntry.level > 0) strSaveName = strSaveName + (", " + PlayerInfoText.LevelText.text + " " + SaveLoadList_mc.selectedEntry.level); PlayerInfoText.textField.textAutoSize = "shrink"; PlayerInfoText.textField.SetText(strSaveName); } - - if (SaveLoadList_mc.selectedEntry.playTime == undefined) + + if (SaveLoadList_mc.selectedEntry.playTime == undefined) PlayerInfoText.PlayTimeText.SetText(" "); - else + else PlayerInfoText.PlayTimeText.SetText(SaveLoadList_mc.selectedEntry.playTime); - + if (SaveLoadList_mc.selectedEntry.dateString != undefined) { PlayerInfoText.DateText.SetText(SaveLoadList_mc.selectedEntry.dateString); return; @@ -166,42 +258,84 @@ class SaveLoadPanel extends MovieClip aTargetClip._height = ScreenshotHolder.sizer._height; } - function onSaveLoadBatchComplete(abDoInitialUpdate: Boolean): Void + function onFillCharacterListComplete(abDoInitialUpdate: Boolean): Void { + // FIXME? Is this a no-op by mistake? + isShowingCharacterList(true); var iSaveNameMaxLength: Number = 20; - + for (var i: Number = 0; i < SaveLoadList_mc.entryList.length; i++) - if (SaveLoadList_mc.entryList[i].text.length > iSaveNameMaxLength) + if (SaveLoadList_mc.entryList[i].text.length > iSaveNameMaxLength) SaveLoadList_mc.entryList[i].text = SaveLoadList_mc.entryList[i].text.substr(0, iSaveNameMaxLength - 3) + "..."; - - if (abDoInitialUpdate) { - var strNewSave: String = "$[NEW SAVE]"; - if (bSaving && SaveLoadList_mc.entryList[0].text != strNewSave) { - var newSaveObj: Object = {name: " ", playTime: " ", text: strNewSave}; - SaveLoadList_mc.entryList.unshift(newSaveObj); - } else if (!bSaving && SaveLoadList_mc.entryList[0].text == strNewSave) { - SaveLoadList_mc.entryList.shift(); + + SaveLoadList_mc.InvalidateData(); + + if(iPlatform != 0) { + onSaveLoadItemHighlight({index:LastSelectedIndexMemory}); + SaveLoadList_mc.selectedIndex = LastSelectedIndexMemory; + SaveLoadList_mc.UpdateList(); + } + dispatchEvent({type: "saveListCharactersPopulated"}); + } + + function onSaveLoadBatchComplete(abDoInitialUpdate: Boolean, aNumProcessed: Number, aSaveCount: Number): Void + { + var iSaveNameMaxLength: Number = 20; + uiSaveLoadManagerProcessedElements = aNumProcessed; + uiSaveLoadManagerNumElementsToLoad = aSaveCount; + + var cursor = 0; + while(cursor < SaveLoadList_mc.entryList.length) { + if(iPlatform == SaveLoadPanel.CONTROLLER_ORBIS) + { + if(SaveLoadList_mc.entryList[cursor].text == undefined) + { + SaveLoadList_mc.entryList.splice(cursor, 1); + } } + if(SaveLoadList_mc.entryList[cursor].text.length > iSaveNameMaxLength) + { + SaveLoadList_mc.entryList[cursor].text = SaveLoadList_mc.entryList[cursor].text.substr(0, iSaveNameMaxLength - 3) + "..."; + } + cursor++; + } + + var strNewSave: String = "$[NEW SAVE]"; + if (bSaving && SaveLoadList_mc.entryList[0].text != strNewSave) { + var newSaveObj: Object = {name: " ", playTime: " ", text: strNewSave}; + SaveLoadList_mc.entryList.unshift(newSaveObj); + } else if (!bSaving && SaveLoadList_mc.entryList[0].text == strNewSave) { + SaveLoadList_mc.entryList.shift(); } + SaveLoadList_mc.InvalidateData(); - + if(iPlatform == SaveLoadPanel.CONTROLLER_ORBIS) + { + lastSelectedIndexMemory = 0; + } + if (abDoInitialUpdate) { - if (iPlatform != 0) { - if (SaveLoadList_mc.selectedIndex == 0) - onSaveLoadItemHighlight({index: 0}); - else - SaveLoadList_mc.selectedIndex = 0; - } - dispatchEvent({type: "saveListPopulated"}); + isForceStopping = false; + isShowingCharacterList = false; + onSaveLoadItemHighlight({index: LastSelectedIndexMemory}); + SaveLoadList_mc.selectedIndex(LastSelectedIndexMemory); + SaveLoadList_mc.UpdateList(); + dispatchEvent({type:"saveListPopulated"}); + return; } + + if(isForceStopping) + return; + + dispatchEvent({type: "saveListOnBatchAdded"}); } function DeleteSelectedSave(): Void { if (!bSaving || SaveLoadList_mc.selectedIndex != 0) { - if (bSaving) + if (bSaving) GameDelegate.call("DeleteSave", [SaveLoadList_mc.selectedIndex - 1]); - else + else GameDelegate.call("DeleteSave", [SaveLoadList_mc.selectedIndex]); SaveLoadList_mc.entryList.splice(SaveLoadList_mc.selectedIndex, 1); SaveLoadList_mc.InvalidateData(); @@ -209,4 +343,20 @@ class SaveLoadPanel extends MovieClip } } + function PopulateEmptySaveList() + { + SaveLoadList_mc.ClearList(); + SaveLoadList_mc.entryList.push(new Object()); + onSaveLoadBatchComplete(true, 0, 0); + } + + function OnSelectClicked() + { + onSaveLoadItemPress(null); + } + + function OnBackClicked() + { + dispatchEvent({type:"OnSaveLoadPanelBackClicked"}); + } } diff --git a/src/Common/Shared/BSScrollingList.as b/src/Common/Shared/BSScrollingList.as index b2ae48449..404089ebb 100644 --- a/src/Common/Shared/BSScrollingList.as +++ b/src/Common/Shared/BSScrollingList.as @@ -166,7 +166,7 @@ class Shared.BSScrollingList extends MovieClip SetEntry(GetClipByIndex(EntriesA[iCurrentIndex].clipIndex),EntriesA[iCurrentIndex]); if (iSelectedIndex != -1) { - if (iPlatform != 0) { + if (iPlatform != Shared.Platforms.CONTROLLER_PC) { if (iSelectedIndex < iScrollPosition) scrollPosition = iSelectedIndex; else if (iSelectedIndex >= iScrollPosition + iListItemsShown) @@ -412,7 +412,7 @@ class Shared.BSScrollingList extends MovieClip function SetPlatform(aiPlatform: Number, abPS3Switch: Boolean): Void { iPlatform = aiPlatform; - bMouseDrivenNav = iPlatform == 0; + bMouseDrivenNav = iPlatform == Shared.Platforms.CONTROLLER_PC; } function onScroll(event: Object): Void diff --git a/src/Common/Shared/ButtonChange.as b/src/Common/Shared/ButtonChange.as index c3f74b4ba..0cb3262c5 100644 --- a/src/Common/Shared/ButtonChange.as +++ b/src/Common/Shared/ButtonChange.as @@ -2,11 +2,16 @@ import gfx.events.EventDispatcher; class Shared.ButtonChange extends gfx.events.EventDispatcher { + // Not sure why this is being duplicated from Shared.Platforms static var PLATFORM_PC: Number = 0; static var PLATFORM_PC_GAMEPAD: Number = 1; static var PLATFORM_360: Number = 2; static var PLATFORM_PS3: Number = 3; - + static var PLATFORM_VIVE: Number = 4; + static var PLATFORM_MOVE: Number = 5; + static var PLATFORM_OCULUS: Number = 6; + static var PLATFORM_WINDOWS_MR: Number = 8; + var iCurrPlatform: Number = Shared.ButtonChange.PLATFORM_360; var dispatchEvent: Function; diff --git a/src/Common/Shared/ButtonTextArtHolder.as b/src/Common/Shared/ButtonTextArtHolder.as index 3a2089719..1209ae113 100644 --- a/src/Common/Shared/ButtonTextArtHolder.as +++ b/src/Common/Shared/ButtonTextArtHolder.as @@ -16,10 +16,16 @@ class Shared.ButtonTextArtHolder extends MovieClip } function CreateButtonArt(aInputText: TextField): String + { + return CreateButtonArtCustomSize(aInputText, 26); + } + + function CreateButtonArtCustomSize(aInputText: TextField, aiSize: Number): String { var iReplacerStart: Number = aInputText.text.indexOf("["); var iReplacerEnd: Number = iReplacerStart == -1 ? -1 : aInputText.text.indexOf("]", iReplacerStart); var strTextWithButtons = undefined; + var requestedSize = aiSize; if (iReplacerStart != -1 && iReplacerEnd != -1) { strTextWithButtons = aInputText.text.substr(0, iReplacerStart); while (iReplacerStart != -1 && iReplacerEnd != -1) { @@ -31,7 +37,7 @@ class Shared.ButtonTextArtHolder extends MovieClip } else { var ButtonImage: BitmapData = BitmapData.loadBitmap(strButtonName + ".png"); if (ButtonImage != undefined && ButtonImage.height > 0) { - var iMaxHeight: Number = 26; + var iMaxHeight: Number = requestedSize; var iScaledWidth: Number = Math.floor(iMaxHeight / ButtonImage.height * ButtonImage.width); strTextWithButtons = strTextWithButtons + (""); } else { diff --git a/src/Common/Shared/CenteredScrollingList.as b/src/Common/Shared/CenteredScrollingList.as index 92c7dc7b4..9484c2530 100644 --- a/src/Common/Shared/CenteredScrollingList.as +++ b/src/Common/Shared/CenteredScrollingList.as @@ -112,9 +112,9 @@ class Shared.CenteredScrollingList extends Shared.BSScrollingList for (var i: Number = 0; i < EntriesA.length; i++) if (IsDivider(EntriesA[i])) iDividerIndex = i; - - - if (bRecenterSelection || iPlatform != 0) + + + if (bRecenterSelection || iPlatform != Shared.Platforms.CONTROLLER_PC) iSelectedIndex = -1; else iSelectedIndex = filterer.ClampIndex(iSelectedIndex); @@ -146,8 +146,8 @@ class Shared.CenteredScrollingList extends Shared.BSScrollingList iHeightSum = iHeightSum + item._height; ++iListItemsShown; } - - if (iEntryIndex != undefined && (bRecenterSelection || iPlatform != 0)) + + if (iEntryIndex != undefined && (bRecenterSelection || iPlatform != Shared.Platforms.CONTROLLER_PC)) iSelectedIndex = iEntryIndex; @@ -281,8 +281,8 @@ class Shared.CenteredScrollingList extends Shared.BSScrollingList aEntryClip.gotoAndStop("Divider"); else aEntryClip.gotoAndStop("Normal"); - - if (iPlatform == 0) { + + if (iPlatform == Shared.Platforms.CONTROLLER_PC) { aEntryClip._alpha = aEntryObject == selectedEntry ? 100 : 60; } else { var iAlphaMulti: Number = 4; diff --git a/src/Common/Shared/ExtractPlatformText.as b/src/Common/Shared/ExtractPlatformText.as new file mode 100644 index 000000000..675669664 --- /dev/null +++ b/src/Common/Shared/ExtractPlatformText.as @@ -0,0 +1,122 @@ +class Shared.ExtractPlatformText +{ + function ExtractPlatformText() + { + } + static function IsWhitespace(str) + { + return str == " " || str == "\n" || str == "\r"; + } + static function Trim(str) + { + var i = 0; // Start at the beginning of the string + var j = str.length - 1; // Start at the end of the string + while(i < str.length) + { + if(Shared.ExtractPlatformText.IsWhitespace(str.charAt(i)) == false) + { + break; + } + i++; + } + j = str.length - 1; + while(j >= 0) + { + if(Shared.ExtractPlatformText.IsWhitespace(str.charAt(j)) == false) + { + break; + } + j--; + } + return str.substr(i, j - i + 1); + } + + // This looks to be processing a long string that looks like: + // <>>> <>>> + // The function takes this string and returns string text associated with 'aiPlatform' + static function Extract(asText, aiPlatform) + { + // If there are no platform markers, all platforms will share the same text + if(asText.indexOf("<<") < 0) + { + return asText; + } + + // Determine the name of the platform we're looking for + var platformName = undefined; + switch(aiPlatform) + { + case Shared.Platforms.CONTROLLER_PCGAMEPAD: + platformName = "PCGAMEPAD"; + break; + case Shared.Platforms.CONTROLLER_VIVE: + platformName = "VIVE"; + break; + case Shared.Platforms.CONTROLLER_OCULUS: + platformName = "OCULUS"; + break; + case Shared.Platforms.CONTROLLER_WINDOWS_MR: + platformName = "WINDOWS_MR"; + break; + case Shared.Platforms.CONTROLLER_ORBIS_MOVE: + platformName = "ORBIS_MOVE"; + break; + case Shared.Platforms.CONTROLLER_ORBIS: + platformName = "ORBIS"; + break; + default: + return asText; + } + + // Attempt to extract the text marked by the platformName + var remainingText = asText; + while(remainingText.length > 0) + { + // Look for the next platform marker + var startMarker = remainingText.indexOf("<<"); + var endMarker = remainingText.indexOf(">>"); + + // If ther are no platform markers, then we use the text for all platforms + if(startMarker < 0 || endMarker < 0) { + return remainingText; + } + + // We located a platform marker... + // What is the name of the platform we've located? + var enclosedText = remainingText.substr(startMarker + 2,endMarker - startMarker - 2); + remainingText = remainingText.substr(endMarker + 2); + + // Did we find the platform we're looking for? + if(enclosedText == platformName) + { + var text = ""; + + // Grab all the text up to the next platform marker + var nextStartMarker = remainingText.indexOf("<<"); + + if(nextStartMarker < 0) + text = remainingText; + else + text = remainingText.substr(0, nextStartMarker); + + return Shared.ExtractPlatformText.Trim(text); + } + + // We didn't find the platform we're looking for... + // Does it look like there is another platform marker? + // If not, whatever remaining text will be used as the text. + // This means the very last piece of text is the default text + var nextStartMarker = remainingText.indexOf("<<"); + if(nextStartMarker < 0) + { + return remainingText; + } + + // There is more platform text left... + // Prep for the next iteration by moving to the beginning of the next + // platform marker + remainingText = remainingText.substr(nextStartMarker); + continue; + } + } +} diff --git a/src/Common/Shared/GlobalFunc.as b/src/Common/Shared/GlobalFunc.as index c8b998945..a0b173d80 100644 --- a/src/Common/Shared/GlobalFunc.as +++ b/src/Common/Shared/GlobalFunc.as @@ -10,14 +10,14 @@ class Shared.GlobalFunc static function Lerp(aTargetMin: Number, aTargetMax: Number, aSourceMin: Number, aSourceMax: Number, aSource: Number, abClamp: Boolean): Number { var normVal: Number = aTargetMin + (aSource - aSourceMin) / (aSourceMax - aSourceMin) * (aTargetMax - aTargetMin); - if (abClamp) + if (abClamp) normVal = Math.min(Math.max(normVal, aTargetMin), aTargetMax); return normVal; } static function IsKeyPressed(aInputInfo: Object, abProcessKeyHeldDown: Boolean): Boolean { - if (abProcessKeyHeldDown == undefined) + if (abProcessKeyHeldDown == undefined) abProcessKeyHeldDown = true; return aInputInfo.value == "keyDown" || (abProcessKeyHeldDown && aInputInfo.value == "keyHold"); } @@ -32,14 +32,13 @@ class Shared.GlobalFunc { TextField.prototype.SetText = function (aText: String, abHTMLText: Boolean) { - if (aText == undefined || aText == "") + if (aText == undefined || aText == "") aText = " "; var textFormat: TextFormat = this.getTextFormat(); if (abHTMLText) { var letterSpacing: Number = textFormat.letterSpacing; var kerning: Boolean = textFormat.kerning; this.htmlText = aText; - textFormat = this.getTextFormat(); textFormat.letterSpacing = letterSpacing; textFormat.kerning = kerning; this.setTextFormat(textFormat); @@ -67,14 +66,14 @@ class Shared.GlobalFunc // | THE | // | STAGE | // (minXY.x, maxXY.y)|_____________|(maxXY.x, maxXY.y) - - if (aPosition == "T" || aPosition == "TL" || aPosition == "TR") + + if (aPosition == "T" || aPosition == "TL" || aPosition == "TR") this._y = minXY.y; - if (aPosition == "B" || aPosition == "BL" || aPosition == "BR") + if (aPosition == "B" || aPosition == "BL" || aPosition == "BR") this._y = maxXY.y; - if (aPosition == "L" || aPosition == "TL" || aPosition == "BL") + if (aPosition == "L" || aPosition == "TL" || aPosition == "BL") this._x = minXY.x; - if (aPosition == "R" || aPosition == "TR" || aPosition == "BR") + if (aPosition == "R" || aPosition == "TR" || aPosition == "BR") this._x = maxXY.x; }; @@ -87,7 +86,7 @@ class Shared.GlobalFunc { var movieClips: Array = new Array(); for (var i: Number = 0; i < this.length; i++) - if (this[i] instanceof MovieClip && this[i] != this) + if (this[i] instanceof MovieClip && this[i] != this) movieClips.push(this[i]); return movieClips; }; @@ -137,14 +136,14 @@ class Shared.GlobalFunc static function GetTextField(aParentClip: MovieClip, aName: String): TextField { - if (Shared.GlobalFunc.RegisteredTextFields[aName + aParentClip._name] != undefined) + if (Shared.GlobalFunc.RegisteredTextFields[aName + aParentClip._name] != undefined) return Shared.GlobalFunc.RegisteredTextFields[aName + aParentClip._name]; trace(aName + " is not registered a TextField name."); } static function GetMovieClip(aParentClip: MovieClip, aName: String): MovieClip { - if (Shared.GlobalFunc.RegisteredMovieClips[aName + aParentClip._name] != undefined) + if (Shared.GlobalFunc.RegisteredMovieClips[aName + aParentClip._name] != undefined) return Shared.GlobalFunc.RegisteredMovieClips[aName + aParentClip._name]; trace(aName + " is not registered a MovieClip name."); } @@ -153,7 +152,7 @@ class Shared.GlobalFunc { TextField.prototype.RegisterTextField = function (aStartingClip): Void { - if (Shared.GlobalFunc.RegisteredTextFields[this._name + aStartingClip._name] == undefined) + if (Shared.GlobalFunc.RegisteredTextFields[this._name + aStartingClip._name] == undefined) Shared.GlobalFunc.RegisteredTextFields[this._name + aStartingClip._name] = this; }; @@ -163,7 +162,7 @@ class Shared.GlobalFunc static function RegisterTextFields(aStartingClip: MovieClip) : Void { for (var i: Number = 0; i < aStartingClip.length; i++) - if (aStartingClip[i] instanceof TextField) + if (aStartingClip[i] instanceof TextField) aStartingClip[i].RegisterTextField(aStartingClip); } @@ -179,7 +178,7 @@ class Shared.GlobalFunc { MovieClip.prototype.RegisterMovieClip = function (aStartingClip): Void { - if (Shared.GlobalFunc.RegisteredMovieClips[this._name + aStartingClip._name] == undefined) + if (Shared.GlobalFunc.RegisteredMovieClips[this._name + aStartingClip._name] == undefined) Shared.GlobalFunc.RegisteredMovieClips[this._name + aStartingClip._name] = this; }; @@ -189,7 +188,7 @@ class Shared.GlobalFunc static function RegisterMovieClips(aStartingClip: MovieClip): Void { for (var i: Number = 0; i < aStartingClip.length; i++) - if (aStartingClip[i] instanceof MovieClip) + if (aStartingClip[i] instanceof MovieClip) aStartingClip[i].RegisterMovieClip(aStartingClip); } @@ -197,7 +196,7 @@ class Shared.GlobalFunc { for (var i: Number = 0; i < aStartingClip.length; i++) { if (aStartingClip[i] instanceof MovieClip) { - if (aStartingClip[i] != aStartingClip) + if (aStartingClip[i] != aStartingClip) Shared.GlobalFunc.RecursiveRegisterMovieClips(aStartingClip[i], aRootClip); aStartingClip[i].RegisterMovieClip(aRootClip); } @@ -218,14 +217,17 @@ class Shared.GlobalFunc var j: Number = 0; var strLength: Number = astrText.length; var trimStr: String = undefined; - while (astrText.charAt(i) == " " || astrText.charAt(i) == "\n" || astrText.charAt(i) == "\r" || astrText.charAt(i) == "\t") + while (astrText.charAt(i) == " " || astrText.charAt(i) == "\n" || astrText.charAt(i) == "\r" || astrText.charAt(i) == "\t") ++i; trimStr = astrText.substring(i); j = trimStr.length - 1; - while (trimStr.charAt(j) == " " || trimStr.charAt(j) == "\n" || trimStr.charAt(j) == "\r" || trimStr.charAt(j) == "\t") + while (trimStr.charAt(j) == " " || trimStr.charAt(j) == "\n" || trimStr.charAt(j) == "\r" || trimStr.charAt(j) == "\t") --j; trimStr = trimStr.substring(0, j + 1); return trimStr; } + static function StringReplaceAll(str:String, search:String, replace:String):String { + return str.split(search).join(replace); + } } diff --git a/src/Common/Shared/Macros.as b/src/Common/Shared/Macros.as new file mode 100644 index 000000000..a19d738cb --- /dev/null +++ b/src/Common/Shared/Macros.as @@ -0,0 +1,19 @@ +import gfx.io.GameDelegate; + +class Shared.Macros +{ + function Macros() + { + } + static function BSOUTPUT(asMessage) + { + GameDelegate.call("DoActionscriptOutput",[asMessage]); + } + static function BSASSERT(abConditional, asMessage) + { + if(!abConditional) + { + GameDelegate.call("DoActionscriptAssert",[abConditional,asMessage]); + } + } +} diff --git a/src/Common/Shared/Platforms.as b/src/Common/Shared/Platforms.as new file mode 100644 index 000000000..36f19190f --- /dev/null +++ b/src/Common/Shared/Platforms.as @@ -0,0 +1,27 @@ +class Shared.Platforms +{ + static var CONTROLLER_PC = 0; + static var CONTROLLER_PCGAMEPAD = 1; + static var CONTROLLER_DURANGO = 2; + static var CONTROLLER_ORBIS = 3; + static var CONTROLLER_VIVE = 4; + static var CONTROLLER_ORBIS_MOVE = 5; + static var CONTROLLER_OCULUS = 6; + static var CONTROLLER_VIVE_KNUCKLES = 7; + static var CONTROLLER_WINDOWS_MR = 8; + function Platforms() + { + } + static function IsUsingWands(aiPlatform) + { + return aiPlatform == CONTROLLER_VIVE || + aiPlatform == CONTROLLER_VIVE_KNUCKLES || + aiPlatform == CONTROLLER_ORBIS_MOVE || + aiPlatform == CONTROLLER_OCULUS || + aiPlatform == CONTROLLER_WINDOWS_MR; + } + static function IsUsingController(aiPlatform) + { + return aiPlatform == Shared.Platforms.CONTROLLER_PCGAMEPAD || aiPlatform == Shared.Platforms.CONTROLLER_ORBIS; + } +} diff --git a/src/Common/mx/transitions/Tween.as b/src/Common/mx/transitions/Tween.as new file mode 100644 index 000000000..ddf13073a --- /dev/null +++ b/src/Common/mx/transitions/Tween.as @@ -0,0 +1,252 @@ +class mx.transitions.Tween +{ + var obj; + var prop; + var begin; + var useSeconds; + var _time; + var prevTime; + var looping; + var _duration; + var _fps; + var isPlaying; + var prevPos; + var _pos; + var change; + var _intervalID; + var _startTime; + + public var onMotionStarted; + public var onMotionFinished; + public var onMotionStopped; + public var onMotionLooped; + public var onMotionChanged; + public var onMotionResumed; + + function Tween(obj, prop, func, begin, finish, duration, useSeconds) + { + if(!arguments.length) + { + return; + } + this.obj = obj; + this.prop = prop; + this.begin = begin; + this.position = begin; + this.duration = duration; + this.useSeconds = useSeconds; + if(func) + { + this.func = func; + } + this.finish = finish; + this.FPS = 30; + start(); + } + function set time(t) + { + prevTime = _time; + if(t > this.duration) + { + if(looping) + { + this.rewind(t - this._duration); + this.update(); + if(this.onMotionLooped) + { + this.onMotionLooped(); + } + } + else + { + if(this.useSeconds) + { + this._time = this._duration; + this.update(); + } + this.stop(); + if(this.onMotionFinished) + { + this.onMotionFinished(); + } + } + } + else if(t < 0) + { + this.rewind(); + this.update(); + } + else + { + this._time = t; + this.update(); + } + //return this.time; + } + function get time() + { + return _time; + } + function set duration(d) + { + _duration = !(d == null || d <= 0)?d:_global.Infinity; + //return this.duration; + } + function get duration() + { + return _duration; + } + function set FPS(fps) + { + var _loc2_ = this.isPlaying; + this.stopEnterFrame(); + this._fps = fps; + if(_loc2_) + { + this.startEnterFrame(); + } + //return this.__get__FPS(); + } + function __get__FPS() + { + return this._fps; + } + function set position(p) + { + this.setPosition(p); + //return this.__get__position(); + } + function setPosition(p) + { + this.prevPos = this._pos; + this.obj[this.prop] = this._pos = p; + if(this.onMotionChanged) + { + this.onMotionChanged(this._pos); + } + updateAfterEvent(); + } + function get position() + { + return this.getPosition(); + } + function getPosition(t) + { + if(t == undefined) + { + t = this._time; + } + return this.func(t,this.begin,this.change,this._duration); + } + function set finish(f) + { + this.change = f - this.begin; + //return this.finish; + } + function get finish() + { + return this.begin + this.change; + } + function continueTo(finish, duration) + { + this.begin = this.position; + this.finish = finish; + if(duration != undefined) + { + this.duration = duration; + } + this.start(); + } + function yoyo() + { + this.continueTo(this.begin,this.time); + } + function startEnterFrame() + { + this._intervalID = setInterval(this,"onEnterFrame",1000 / this._fps); + this.isPlaying = true; + } + function stopEnterFrame() + { + clearInterval(this._intervalID); + this.isPlaying = false; + } + function start() + { + this.rewind(); + this.startEnterFrame(); + if(this.onMotionStarted) + { + this.onMotionStarted(); + } + } + function stop() + { + this.stopEnterFrame(); + if(this.onMotionStopped) + { + this.onMotionStopped(); + } + } + function resume() + { + this.fixTime(); + this.startEnterFrame(); + if(this.onMotionResumed) + { + this.onMotionResumed(); + } + } + function rewind(t) + { + this._time = t != undefined?t:0; + this.fixTime(); + this.update(); + } + function fforward() + { + this.time = _duration; + this.fixTime(); + } + function nextFrame() + { + if(this.useSeconds) + { + this.time = (getTimer() - this._startTime) / 1000; + } + else + { + this.time = this._time + 1; + } + } + function onEnterFrame() + { + this.nextFrame(); + } + function prevFrame() + { + if(!this.useSeconds) + { + this.time = this._time - 1; + } + } + function toString() + { + return "[Tween]"; + } + function fixTime() + { + if(this.useSeconds) + { + this._startTime = getTimer() - this._time * 1000; + } + } + function update() + { + this.position = getPosition(this._time); + } + function func(t, b, c, d) + { + return c * t / d + b; + } +} diff --git a/src/Common/skse.as b/src/Common/skse.as index 596c9664e..90f48982b 100644 --- a/src/Common/skse.as +++ b/src/Common/skse.as @@ -11,8 +11,8 @@ static function OpenMenu(a_menu:String):Void; static function CloseMenu(a_menu:String):Void; static function ExtendData(enable:Boolean):Void; - static function ExtendAlchemyCategories(enable:Boolean):Void; - static function ForceContainerCategorization(enable:Boolean):Void; + static function ExtendAlchemyCategories(enable:Boolean):Void; + static function ForceContainerCategorization(enable:Boolean):Void; static function SendModEvent(a_eventName:String, a_strArg:String, a_numArg:Number, a_formId:Number):Void; static function RequestActivePlayerEffects(a_list:Array):Void; static function ExtendForm(a_formid:Number, a_object:Object, a_extraData:Boolean, a_recursive:Boolean):Void; @@ -20,5 +20,6 @@ static function ShowOnMap(a_markerIndex:Number):Void; static function StoreIndices(a_key:String, a_indicesIn:Array):Void; static function LoadIndices(a_key:String, a_indicesOut:Array):Void; + static function ShowVirtualKeyboard(a_key:String, title:String, desc:String, curText:String, obj:Object, func:Object):Boolean; -} \ No newline at end of file +} diff --git a/src/Common/skyui/VRInput.as b/src/Common/skyui/VRInput.as new file mode 100644 index 000000000..52fb1fa59 --- /dev/null +++ b/src/Common/skyui/VRInput.as @@ -0,0 +1,1289 @@ +// The VRInput class is a namespace that holds all functions related +// to construction, manipulation, transformation of OpenVR's +// ControllerState_t into something meaningful and usable by the UI +// +// OpenVR gives us a few pieces of data that are packed into bit flags. +// However, in an UI, we want to know which widgets are manpulated and +// *how* they are being manipulated. +// +// What we really need is to unpack the bitfields into something that is +// reasonable for the UI to work with. +// +// Something like this looks pretty reasonable: +// { +// id: (int) [0-64], // OpenVR id for the widget +// pressed: (boolean) // do we consider the widget pressed? +// touched: (boolean) // do we consider the widget touched? +// +// // For widgets with associated axis data +// axisId: (int) // extracted from OpenVR ControllerState +// axis: (vec2) // extracted from OpenVR ControllerState +// +// type: (string) ["button", // has binary on/off signal +// "thumbstick", // has x,y axis +// "touchpad", // has x,y axis & touch +// "trigger"], // has x axis +// +// // Added annotation +// widgetName: (string), // name of button or axis +// controllerName: (string) ["vive", "knuckles", "oculus", "wmr"], +// controllerRole: (string) ["rightHand", "leftHand"], +// +// pressStartTime: clock time when the event started +// touchStartTime: clock time when the event started +// +// eventType: string "up"/"down"/"repeat" +// +// action: (string), // probable intended action +// } +// +// The rough processing steps should be: +// raw controller state data => +// add annotation => +// generate event obj => +// dispatch event for processing + +import gfx.managers.FocusHandler; +import Shared.Platforms; +import skyui.util.Debug; +import skyui.util.GlobalFunctions; + +class skyui.VRInput { + // GLOBALS --------------------------------------------------------- + public var initialized = false; + + // What is the name of the controller that corresponds to the + // current platform + public var controllerName_Game: String = ""; // Controller name reported by the game + public var controllerName_OpenVR: String = ""; // Controller name reported by OpenVR + public var controllerName: String = ""; // Internal logic will cue off of this + + // Stores the right/left hand controller state that we last saw + public var lastControllerStates; + + // Stores state of each of the widgets on a controller + public var lastWidgetStates; + public var widgetStates; + + public var ignoreInput = false; + + public var errorPrintedFlags = {}; + + public var logDetails = false; + + // CONSTANTS ------------------------------------------------------- + static public var WIDGET_MAX_COUNT = 64; + + // A controller state mirrors OpenVR's ControllerState_t + // + // This is the lowest level data we have access to regarding the + // controller buttons. + public function makeEmptyControllerState() { + return { + packetNum: 0, + buttonPressedLow: 0, + buttonPressedHigh: 0, + buttonTouchedLow: 0, + buttonTouchedHigh: 0, + axis: [] + }; + } + + private function init() { + if(!initialized) { + lastControllerStates = [{}, {}]; + lastWidgetStates = makeEmptyWidgetStates(); + widgetStates = makeEmptyWidgetStates(); + + logDetails = skse["plugins"]["skyui"].IniGetBool("Settings/VRInput/logDetails"); + } + initialized = true; + } + + public function makeEmptyWidgetStates() { + var widgetStates = [[], []]; + + for(var i = 0; i < WIDGET_MAX_COUNT; i++) { + widgetStates[0].push({ + id: i, + controllerRole: "leftHand", + axis: [], + uninitialized: true + }); + } + + for(var i = 0; i < WIDGET_MAX_COUNT; i++) { + widgetStates[1].push({ + id: i, + controllerRole: "rightHand", + axis: [], + uninitialized: true + }); + } + + return widgetStates; + } + + public function controllerNameFromPlatformEnum(platform) { + switch(platform) { + case Platforms.CONTROLLER_VIVE: + return "vive"; + case Platforms.CONTROLLER_ORBIS_MOVE: + return "orbis"; + case Platforms.CONTROLLER_OCULUS: + return "oculus"; + case Platforms.CONTROLLER_VIVE_KNUCKLES: + return "knuckles"; + case Platforms.CONTROLLER_WINDOWS_MR: + return "wmr"; + default: + return "unknown"; + } + } + + public function controllerNameFromOpenVRName(name) { + switch(name){ + case "vive_controller": + return "vive"; + case "knuckles": + return "knuckles"; + case "oculus": + return "oculus"; + case "wmr": + return "wmr"; + default: + return "unknown"; + } + //return "oculus"; + //return "knuckles"; + } + + public function getDefaultBindingsFilename() { + var conName = controllerName || + controllerNameFromOpenVRName(skse["plugins"]["skyui"].ControllerType()); + + if(conName == "unknown") + conName = "general" + + return "defaults-" + conName; + } + + public function getActionConditionDefs(menuName) { + return skse["plugins"]["skyui"].IniGetWithDefaults("Settings/" + menuName, getDefaultBindingsFilename()); + } + + public function getActionConditions(menuName) { + return generateActionTriggerConditions(getActionConditionDefs(menuName)); + } + + public function getAxis(axisArray, idx) { + return [axisArray[idx*2], axisArray[idx*2+1]]; + } + + public function updatePlatform(platform: Number) { + //Debug.log("VRInput.updatePlatform: " + platform); + controllerName_Game = controllerNameFromPlatformEnum(platform); + controllerName_OpenVR = skse["plugins"]["skyui"].ControllerType(); + + //Debug.log("[skyui] controllerName_Game: " + controllerName_Game); + //Debug.log("[skyui] controllerName_OpenVR: " + controllerName_OpenVR); + + // We'll prefer controller type reported by OpenVR over the game engine + // The game doesn't know how to deal with the index controller. + var name = controllerNameFromOpenVRName(controllerName_OpenVR); + //Debug.log("[skyui] OpenVR mapped name: " + name); + if (name != "unknown") + controllerName = name; + else + controllerName = controllerName_Game; + + //Debug.log("[skyui] controllerName: " + controllerName); + } + + public function widgetDetectPhaseChange(curState, lastState, phaseName) { + var cur = curState[phaseName]; + var last = lastState[phaseName]; + + if(cur == last) + return "no-change"; + if(cur && !last) + return "start"; + else + return "stop"; + } + + public function widgetDetectPhaseStart(curState, lastState, phaseName) { + var cur = curState[phaseName]; + var last = lastState[phaseName]; + + if(cur && !last) + return "start"; + + return "no-change"; + } + + public function widgetDetectPhaseStop(curState, lastState, phaseName) { + var cur = curState[phaseName]; + var last = lastState[phaseName]; + + if(!cur && last) + return "stop"; + + return "no-change"; + } + + public function makeWidgetEvent(curState, lastState, phaseName, eventName) { + return { + curState: curState, + lastState: lastState, + phaseName: phaseName, + eventName: eventName + }; + } + + public function copyWidgetState(src, dest) { + for (var key:String in src) { + if(key != "axis") + dest[key] = src[key]; + } + if(!dest.axis) { + dest.axis = []; + } + dest.axis[0] = src.axis[0]; + dest.axis[1] = src.axis[1]; + return dest; + } + + static public function axisQuadrant(vec2) { + var angle = GlobalFunctions.vec2Angle(vec2); + if (angle < 0) + angle += 360; + + if(angle < 45) + return "right"; + if(angle < 135) + return "top"; + if(angle < 225) + return "left"; + if(angle < 315) + return "bottom"; + return "right"; + } + + static function axisRegion(vec2) { + var mag = GlobalFunctions.vec2Mag(vec2); + if(mag <= 0.45) + return "center"; + + return axisQuadrant(vec2); + } + + public function interestingWidgetIdxs() { + switch(controllerName) { + case "vive": + return [1, 2, 32, 33]; + break; + case "knuckles": + return [1, 2, 7, 32, 33, 34]; + break; + case "oculus": + return [1, 2, 7, 32, 33]; + break; + default: + if(!errorPrintedFlags["unknown-controller"]) { + Debug.log("unknown controller: " + controllerName); + Debug.log("controllerName_Game: " + controllerName_Game); + Debug.log("controllerName_OpenVR: " + controllerName_OpenVR); + Debug.log("controllerName: " + controllerName); + errorPrintedFlags["unknown-controller"] = true; + } + return [1, 2, 32, 33]; + } + } + + // Given the new controller state, perform some upkeep and generate + // an array of "interesting" events. + public function updateControllerState( + timestamp: Number, + controllerHand: Number, packetNum: Number, + buttonPressedLow: Number, buttonPressedHigh: Number, + buttonTouchedLow: Number, buttonTouchedHigh: Number, + axis: Array): Array + { + var handIdx = controllerHand-1; + var lastButtonState = lastControllerStates[handIdx]; + var curButtonState = { + packetNum: packetNum, + buttonPressedLow: buttonPressedLow, + buttonPressedHigh: buttonPressedHigh, + buttonTouchedLow: buttonTouchedLow, + buttonTouchedHigh: buttonTouchedHigh, + axis: axis + }; + + var eventQueue = []; + if(lastButtonState.packetNum != curButtonState.packetNum) + { + //Debug.log("packetNum: " + lastButtonState.packetNum + " => " + curButtonState.packetNum); + + // Only process widgets that we know may actually be updated + var widgetIdxs = interestingWidgetIdxs(); + + // Prepare to receive a new state + // We're about to get an update on the state of the widget, + // move the (old) current state of the widget into the last + // state array. + // + // We're just using two arrays to store the previous and + // current state of the widgets and reusing the objects + // used to store the information. + { + var lastWidgets = lastWidgetStates[handIdx]; + var curWidgets = widgetStates[handIdx]; + for(var i = 0; i < widgetIdxs.length; i++) { + var id = widgetIdxs[i]; + var temp = lastWidgets[id]; + lastWidgets[id] = curWidgets[id]; + curWidgets[id] = temp; + + copyWidgetState(lastWidgets[id], curWidgets[id]); + } + } + + // Update widget states + var widgets = widgetStates[handIdx]; + for(var i = 0; i < widgetIdxs.length; i++) { + var id = widgetIdxs[i]; + var mask = 1 << id; + var state = widgets[id]; + + if(id < 32) { + state.pressed = (buttonPressedLow & mask) == 0 ? false : true; + state.touched = (buttonTouchedLow & mask) == 0 ? false : true; + state.controllerName = controllerName; + } else { + state.pressed = (buttonPressedHigh & mask) == 0 ? false : true; + state.touched = (buttonTouchedHigh & mask) == 0 ? false : true; + state.controllerName = controllerName; + } + delete state["uninitialized"]; + } + + // Wire up additional Vive controller data + + switch(controllerName) { + case "vive": + widgets[1].widgetName = "application menu"; + widgets[1].type = "button"; + widgetAddClickWhenPressed(widgets[1]); + + widgets[2].widgetName = "grip"; + widgets[2].type = "button"; + widgetAddClickWhenPressed(widgets[2]); + + widgets[32].widgetName = "touchpad"; + widgets[32].type = "touchpad"; + widgets[32].axisId = 0; + widgets[32].axis = getAxis(axis, 0); + widgetAddClickWhenPressed(widgets[32]); + + widgets[33].widgetName = "trigger"; + widgets[33].type = "trigger"; + + widgets[33].axisId = 1; + widgets[33].axis = getAxis(axis, 1); + widgetAddClickForTrigger(widgets[33]); + widgetDetectTouchWithAxis(widgets[33]); + break; + + case "knuckles": + widgets[1].widgetName = "B button"; + widgets[1].type = "button"; + widgetAddClickWhenPressed(widgets[1]); + + widgets[2].widgetName = "grip"; + widgets[2].type = "button"; + widgets[2].axisId = 2; + widgets[2].axis = getAxis(axis, 2); + widgetAddClickWhenPressed(widgets[2]); + + widgets[7].widgetName = "A button"; + widgets[7].type = "button"; + widgetAddClickWhenPressed(widgets[7]); + + widgets[32].widgetName = "thumbstick"; + widgets[32].type = "thumbstick"; + widgets[32].axisId = 0; + widgets[32].axis = getAxis(axis, 0); + widgetAddClickWhenPressed(widgets[32]); + + widgets[33].widgetName = "trigger"; + widgets[33].type = "trigger"; + widgets[33].axisId = 1; + widgets[33].axis = getAxis(axis, 1); + widgetAddClickForTrigger(widgets[33]); + widgetDetectTouchWithAxis(widgets[33]); + + widgets[34].widgetName = "fingers"; + widgets[34].type = "button"; + break; + + case "wmr": + widgets[1].widgetName = "application menu"; + widgets[1].type = "button"; + widgetAddClickWhenPressed(widgets[1]); + + widgets[2].widgetName = "grip"; + widgets[2].type = "button"; + widgetAddClickWhenPressed(widgets[2]); + + widgets[32].widgetName = "touchpad"; + widgets[32].type = "touchpad"; + widgets[32].axisId = 0; + widgets[32].axis = getAxis(axis, 0); + widgetAddClickWhenPressed(widgets[32]); + + widgets[33].widgetName = "trigger"; + widgets[33].type = "trigger"; + widgets[33].axisId = 1; + widgets[33].axis = getAxis(axis, 1); + widgetAddClickForTrigger(widgets[33]); + widgetDetectTouchWithAxis(widgets[33]); + + widgets[34].widgetName = "thumbstick"; + widgets[34].type = "thumbstick"; + widgets[34].axisId = 0; + widgets[34].axis = getAxis(axis, 2); + widgetAddClickWhenPressed(widgets[34]); + break; + + default: + widgets[1].widgetName = "B button"; + widgets[1].type = "button"; + widgetAddClickWhenPressed(widgets[1]); + + widgets[2].widgetName = "grip"; + widgets[2].type = "button"; + widgets[2].axisId = 2; + widgets[2].axis = getAxis(axis, 2); + widgetAddClickWhenPressed(widgets[2]); + + widgets[7].widgetName = "A button"; + widgets[7].type = "button"; + widgetAddClickWhenPressed(widgets[7]); + + widgets[32].widgetName = "thumbstick"; + widgets[32].type = "thumbstick"; + widgets[32].axisId = 0; + widgets[32].axis = getAxis(axis, 0); + widgetAddClickWhenPressed(widgets[32]); + + widgets[33].widgetName = "trigger"; + widgets[33].type = "trigger"; + widgets[33].axisId = 1; + widgets[33].axis = getAxis(axis, 1); + widgetAddClickForTrigger(widgets[33]); + widgetDetectTouchWithAxis(widgets[33]); + + break; + } + + // Generate events as appropriate + var lastWidgets = lastWidgetStates[handIdx]; + var curWidgets = widgetStates[handIdx]; + for(var i = 0; i < widgetIdxs.length; i++) + { + var id = widgetIdxs[i]; + var lastState = lastWidgets[id]; + var curState = curWidgets[id]; + + if(lastState.uninitialized) { + copyWidgetState(curState, lastState); + delete lastState["uninitialized"]; + } + + // Clean up event timestamps if appropriate + if(curState.touchedStart && curState.touchedStop) { + delete curState["touchedStart"]; + delete curState["touchedStartState"]; + delete curState["touchedStop"]; + } + if(curState.pressedStart && curState.pressedStop) { + delete curState["pressedStart"]; + delete curState["pressedStartState"]; + delete curState["pressedStop"]; + } + if(curState.clickedStart && curState.clickedStop) { + delete curState["clickedStart"]; + delete curState["clickedStartState"]; + delete curState["clickedStop"]; + } + + // Detect and generate phase events + // Note that we take a bit of effort to make sure that the start/stop + // events are ordered like this: + // touched start => pressed start => clicked start => + // clicked end => pressed end => touched end + var phases; + + phases = ["touched", "pressed", "clicked"]; + for(var j = 0; j < phases.length; j++) { + var phase = phases[j]; + var change = widgetDetectPhaseStart(curState, lastState, phase); + if(change != "no-change") { + var event = makeWidgetEvent(curState, lastState, phase, change); + curState[phase + "Start"] = timestamp; + curState[phase + "StartState"] = copyWidgetState(curState, {}); + eventQueue.push(event); + } + } + phases = ["clicked", "pressed", "touched"]; + for(var j = 0; j < phases.length; j++) { + var phase = phases[j]; + var change = widgetDetectPhaseStop(curState, lastState, phase); + if(change != "no-change") { + var event = makeWidgetEvent(curState, lastState, phase, change); + curState[phase + "Stop"] = timestamp; + eventQueue.push(event); + } + } + } + + // Generate other synthetic events + // By reading the event queue + if(controllerName == "vive") { + widgetTouchpadDetectSwipe(widgets[32], eventQueue); + } + + // Record the current state + // We'll use this as the last state when we're called again the next time. + lastControllerStates[handIdx] = curButtonState; + /* + Debug.log("handIdx " + handIdx); + Debug.dump("lastControllerStates[handIdx]", lastControllerStates[handIdx]); + */ + } + return eventQueue; + } + + //---------------------------------------------------------------------------- + // Native function interop + // + + // Return a timestamp with millisecond resolution. + static private function clock(): Number { + // We're sure the VRInput plugin is available. + // Just call the clock function. + return skse["plugins"]["vrinput"].GetClock(); + } + + static private function triggerHapticPulse(controllerRole: String, strength: Number) { + skse["plugins"]["vrinput"].TriggerHapticPulse(controllerRole == "leftHand" ? 1 : 2, strength); + } + + + //---------------------------------------------------------------------------- + // Vec2 utilities + // + private function cloneVec2(vec2: Array) { + return [vec2[0], vec2[1]]; + } + + private function copyVec2(src: Array, dest: Array) { + dest[0] = src[0]; + dest[1] = src[1]; + return dest; + } + + + // Widget synthetic attributes ------------------------------------- + // + // Some widgets may not behave the exact same way we want, + // these functions can be used to add some synthetic attributes + // to help bridge these differences. + + function widgetAddClickWhenPressed(widget) + { + if(widget.pressed) { + widget.clicked = true; + } else { + widget.clicked = false; + } + } + + function widgetAddClickForTrigger(widget) + { + if(widget.axis[0] == 1) { + widget.clicked = true; + } else { + widget.clicked = false; + } + } + + function widgetDetectTouchWithAxis(widget) + { + if(widget.axis[0] != 0.0 || widget.axis[1] != 0.0) { + widget.touched = true; + } + } + + var touchpadSwipeStates = { + leftHand: {}, + rightHand: {} + }; + + function widgetTouchpadDetectSwipe(widget, eventQueue) + { + // Given the current state of the widget, + // generate events if swipes are detected... + + // If the touchpad isn't being touched, do nothing + if(!widget.touched) { + return; + } + + var curTime = getTimer(); + + // Fetch the swipe state associated with the widget + var hand = touchpadSwipeStates[widget.controllerRole]; + var swipeState = hand[widget.id]; + + // Are we hanging on to state data from a previous swipe? + // If so, clean it up now... + if(widget.touchedStart && swipeState.startTime != widget.touchedStart) { + delete touchpadSwipeStates[widget.controllerRole][widget.id]; + swipeState = undefined; + } + + // If we don't have a swipe state either because no data + // has been associated with said widget or because associated + // state has been cleaned up... + // Create empty state to hold the swipe state + if(!swipeState) { + swipeState = { + startTime: widget.touchedStart, + lastProcessTime: curTime, + lastPosition: cloneVec2(widget.axis) + }; + touchpadSwipeStates[widget.controllerRole][widget.id] = swipeState; + } + + // Limit the rate at which events can be generated + var timeDelta = curTime - swipeState.lastProcessTime; + var curPosition = widget.axis; + var lastPosition = swipeState.lastPosition + var xDelta = curPosition[0] - lastPosition[0]; + var yDelta = curPosition[1] - lastPosition[1]; + var distanceDelta = Math.sqrt((xDelta * xDelta) + (yDelta * yDelta)); + var velocity = distanceDelta / timeDelta; + + var distanceThreshold; + var timeThreshold; + var savePosition; + var velThreshold = 0.16; + if(velocity > 0.005) { + distanceThreshold = 0.1; + timeThreshold = 10; + savePosition = false; + } else { + distanceThreshold = 0.33; + timeThreshold = 10; + savePosition = false; + } + + // FIXME!!! Event firing frequency is tied directly to the framerate. + if(timeDelta < timeThreshold) { + return; + } + + // If the touchpad position moved a certain distance + // within the alotted period of time... + // Generate an appropriate event. + + // We'e going to restrict swiping to up/down/right/left + // First, determine which direction has received more movement... + // That is the dominate axis + var eventFired = false; + if(Math.abs(xDelta) > Math.abs(yDelta)) { + if(xDelta > distanceThreshold) { + eventQueue.push({ + eventType: "swipe", + direction: "right", + widget: widget + }); + eventFired = true; + } else if(xDelta < -1 * distanceThreshold) { + eventQueue.push({ + eventType: "swipe", + direction: "left", + widget: widget + }); + eventFired = true; + } + } else { + if(yDelta > distanceThreshold) { + eventQueue.push({ + eventType: "swipe", + direction: "up", + widget: widget + }); + eventFired = true; + } else if(yDelta < -1 * distanceThreshold) { + eventQueue.push({ + eventType: "swipe", + direction: "down", + widget: widget + }); + eventFired = true; + } + } + + // Only update the last position and processing time + // if an event actually fired. + // + // This means that as long as the user has traveled + // a specific distance on the touchpad, the swipe + // will be registered. + // + // This emulates the behavior of the game. Though + // it isn't ideal, it will do for now. + if(eventFired) { + copyVec2(widget.axis, swipeState.lastPosition); + swipeState.lastProcessTime = curTime; + } + } + + public function vibrateOnSwipe(eventQueue) { + // Look a swipe event in the event queue + // If found, vibrate the corresponding controller... + for(var i = 0; i < eventQueue.length; i++) { + var event = eventQueue[i]; + if(event.eventType == "swipe") { + triggerHapticPulse(event.widget.controllerRole, 0.25); + break; + } + } + } + + // Refactor? Do we really still need this function? + // Is this serving the same role as `handleVRButtonUpdates`? + public function getInputEvents( + timestamp: Number, + controllerHand: Number, packetNum: Number, + buttonPressedLow: Number, buttonPressedHigh: Number, + buttonTouchedLow: Number, buttonTouchedHigh: Number, + axis: Array): Array + { + var eventQueue = updateControllerState( + timestamp, + controllerHand, packetNum, + buttonPressedLow, buttonPressedHigh, + buttonTouchedLow, buttonTouchedHigh, + axis); + + vibrateOnSwipe(eventQueue); + + return eventQueue; + } + + function getFocusPath() { + // Skyrim is a single player game. So technically, we're only dealing with "one controller" + return FocusHandler.instance.getPathToFocus(Selection.getControllerFocusGroup(0)); + } + + function handleVRButtonUpdate( + controllerHand: Number, packetNum: Number, + buttonPressedLow: Number, buttonPressedHigh: Number, + buttonTouchedLow: Number, buttonTouchedHigh: Number, + axis: Array) + { + //Debug.log(">>> VRInput handleVRButtonUpdate"); + + // Should we update any button states at all? + // This is useful for ignorning inputs when we're supposed to be + // blocking, waiting for the OpenVR virtual keyboard. + if(ignoreInput) + return; + + var timestamp = getTimer(); + var eventQueue = getInputEvents( + timestamp, + controllerHand, packetNum, + buttonPressedLow, buttonPressedHigh, + buttonTouchedLow, buttonTouchedHigh, + axis); + + var update = { + timestamp: timestamp, + controllerHand: controllerHand, + packetNum: packetNum, + buttonPressedLow: buttonPressedLow, + buttonPressedHigh: buttonPressedHigh, + buttonTouchedLow: buttonTouchedLow, + buttonTouchedHigh: buttonTouchedHigh, + axis: axis + } + + var stateText = controllerStateText(update, true); + //if(stateText.length != 0) { + // Debug.log("-- Button states --"); + // Debug.log(stateText); + //} + + var focusPath = getFocusPath(); + //if(eventQueue.length != 0) { + // Debug.log("focusPath: " + focusPath); + // Debug.dump("eventQueue", eventQueue); + //} + + + dispatchButtonUpdates(update, focusPath); + dispatchInputEvents(eventQueue, focusPath); + + //Debug.log("<<< VRInput handleVRButtonUpdate"); + } + + public function dispatchButtonUpdates(update, focusPath: Array) { + if(focusPath == null) + focusPath = getFocusPath(); + + for(var i = 0; i < focusPath.length; i++) { + var obj = focusPath[i]; + if(obj.handleVRButtonUpdate != null) { + obj.handleVRButtonUpdate(update); + } + } + } + + public function dispatchInputEvents(eventQueue: Array, focusPath: Array) { + if(focusPath == null) + focusPath = getFocusPath(); + + // Take every event in the queue + for(var ei = 0; ei < eventQueue.length; ei++) { + var event = eventQueue[ei]; + //if(ei == 0) { + // Debug.log("dispatchInputEvents"); + // Debug.dump("focusPath", focusPath); + //} + //Debug.log("Dispatching event: " + ei); + + // Send the event to the "handleVRInput" function of every object in the focus path + for(var fi = 0; fi < focusPath.length; fi++) { + var obj = focusPath[fi]; + if(obj.handleVRInput != null) { + //Debug.log("focusPath: " + fi + " " + obj); + //if(obj.classname != null) + // Debug.log("" + fi + ": " + obj.classname()); + + // An object may signal that it has already handled the event and stop the event + // from going further in the focus path. + var stop = obj.handleVRInput(event); + if(stop) + break; + } + } + } + } + + function controllerStateText(update, printFlags): String { + var output:String = ""; + var lastLength = output.length; + + for(var i = 0; i < 32; i++) + { + var mask = 1 << i; + + if(update.buttonPressedLow & mask) { + output += "pressed: " + i + "\n"; + } + } + + if(printFlags && lastLength != output.length){ + output += "buttonPressedLow: " + update.buttonPressedLow + "\n"; + lastLength = output.length; + } + + for(var i = 0; i < 32; i++) + { + var mask = 1 << i; + + if(update.buttonPressedHigh & mask) { + output += "pressed: " + (i + 32) + "\n"; + } + } + + if(printFlags && lastLength != output.length){ + output += "buttonPressedHigh: " + update.buttonPressedHigh + "\n"; + lastLength = output.length; + } + + for(var i = 0; i < 32; i++) + { + var mask = 1 << i; + + if(update.buttonTouchedLow & mask) { + output += "touched: " + i + "\n"; + } + } + + if(printFlags && lastLength != output.length){ + output += "buttonTouchedLow: " + update.buttonTouchedLow + "\n"; + lastLength = output.length; + } + + for(var i = 0; i < 32; i++) + { + var mask = 1 << i; + + if(update.buttonTouchedHigh & mask) { + output += "touched: " + (i + 32) + "\n"; + } + } + + if(printFlags && lastLength != output.length){ + output += "buttonTouchedHigh: " + update.buttonTouchedHigh + "\n"; + lastLength = output.length; + } + + for(var i = 0; i < 5; i++) + { + var x = update.axis[i*2]; + var y = update.axis[i*2 + 1]; + + if(x != 0.0) { + output += "x[" + i + "] = " + x + "\n"; + } + if(y != 0.0) { + output += "y[" + i + "] = " + y + "\n"; + } + + if(x != 0.0 || y != 0.0) { + var vec2 = [x, y]; + output += "mag: " + GlobalFunctions.vec2Mag(vec2) + "\n"; + output += "quadrant: " + axisQuadrant(vec2) + "\n"; + output += "region: " + axisRegion(vec2) + "\n"; + } + } + return output; + } + + function widgetToString(widget: Object): String + { + var output = ""; + for (var key:String in widget) { + output += key + ": " + widget[key] + "\n"; + } + return output; + } + + // Build a list of widgets with interesting states + function collectInterestingWidgets(handIdx): Array { + var idxs = interestingWidgetIdxs(); + var result = []; + var widgets = widgetStates[handIdx]; + for(var i = 0; i < idxs.length; i++) { + var widget = widgets[idxs[i]]; + if(widget.pressed || widget.touched || GlobalFunctions.vec2Mag(widget.axis)) { + result.push(widget); + } + } + return result; + } + + var controllerTexts = ["", ""]; + function controllerStateString(update): String + { + // Output all text prepared for each hand + var handIdx = update.controllerHand-1 + var text = controllerStateText(update); + controllerTexts[handIdx] = text; + + var collectedWidgets = collectInterestingWidgets(handIdx); + + // Build a string representation of all interesting widgets + var widgetText = ""; + for(var i = 0; i < collectedWidgets.length; i++) { + var widget = collectedWidgets[i]; + widgetText += widgetToString(widget); + } + + // Append widget text to the output for the cooresponding hand + if(widgetText.length != 0) + controllerTexts[handIdx] += "\n" + widgetText; + + var output = ""; + + if(controllerTexts[0].length != 0 || controllerTexts[1].length != 0) { + output += "Skryim says: " + controllerName_Game + "\n"; + output += "OpenVR says: " + controllerName_OpenVR + "\n"; + output += "Skyui will use: " + controllerName + "\n"; + output += "\n"; + } + if(controllerTexts[0].length != 0) { + output += "Left controller: \n"; + output += controllerTexts[0]; + } + if(controllerTexts[1].length != 0) { + output += "Right controller: \n"; + output += controllerTexts[1]; + } + + return output; + } + + + private static var _instance: VRInput; + + public static function get instance(): VRInput + { + if (_instance == null) + _instance = new VRInput(); + + return _instance; + } + + private function VRInput() { + init(); + } + + function setup() { + //Debug.log("VRInput.setup()"); + var skyui = skse["plugins"]["skyui"]; + if(skyui != undefined) + { + Debug.log("Registering to receive VR input"); + skyui.RegisterInputHandler(this, "handleVRButtonUpdate"); + } else { + Debug.log("skyui plugin not available"); + } + } + + function teardown() { + //Debug.log("VRInput.teardown()"); + var skyui = skse["plugins"]["skyui"]; + if(skyui != undefined) + { + Debug.log("Unregistering to receive VR input"); + skyui.UnregisterInputHandler(this, "handleVRButtonUpdate"); + } + } + + + function pauseInput(type) { + switch(type) { + case "self": + ignoreInput = true; + break; + case "game": + skse["plugins"]["vrinput"].ShutoffButtonEventsToGame(true); + break; + case "all": + pauseInput("game"); + pauseInput("self"); + break; + } + } + + function resumeInput(type) { + switch(type) { + case "self": + ignoreInput = false; + break; + case "game": + skse["plugins"]["vrinput"].ShutoffButtonEventsToGame(false); + break; + case "all": + resumeInput("game"); + resumeInput("self"); + break; + } + } + + static public function inputEventSummary(event): String { + return "phase: " + event.phaseName + ", event: " + event.eventName + ", widget: " + event.curState.widgetName; + } + + // Given a single array of strings, describing how an action should be triggered, + // fill out an object to help make trigger comparison easier. + public function makeActionTriggerCondition(specs: Array) { + if(logDetails) { + Debug.log(">>> makeActionTriggerCondition"); + Debug.dump("specs", specs); + } + + var condition = new Object(); + + for(var i = 0; i < specs.length; i++) { + var spec = specs[i]; + if(logDetails) { + Debug.log("processing spec: " + spec); + Debug.dump("condition cur:", condition); + } + switch(spec) { + case 'leftHand': + case 'rightHand': + + if(logDetails) { + Debug.log("--- 1 ---"); + } + condition["role"] = spec; + break; + + case 'start': + case 'end': + + if(logDetails) { + Debug.log("--- 2 ---"); + } + condition["eventName"] = spec; + break; + + case 'top': + case 'right': + case 'left': + case 'bottom': + case 'center': + if(logDetails) { + Debug.log("--- 3 ---"); + } + condition["region"] = spec; + break; + + case 'touched': + case 'pressed': + case 'clicked': + if(logDetails) { + Debug.log("--- 4 ---"); + } + condition["phaseName"] = spec; + break; + + case 'touch': + case 'press': + case 'click': + if(logDetails) { + Debug.log("--- 5 ---"); + } + condition["phaseName"] = spec + "ed"; + break; + + case 'touchpad': + case 'thumbstick': + case 'application menu': + case 'grip': + case 'trigger': + case 'b button': + case 'a button': + case 'x button': + case 'y button': + if(logDetails) { + Debug.log("--- 6 ---"); + } + condition["widgetName"] = spec; + break; + + default: + + if(logDetails) { + Debug.log("--- 7 ---"); + Debug.log("Unhandled spec string: " + spec); + } + break; + } + } + + // Default phaseName is "clicked" + if(!condition["phaseName"]) + condition["eventName"] = "clicked"; + + // Default eventName is "start" + if(!condition["eventName"]) + condition["eventName"] = "start"; + + if(logDetails) { + Debug.dump("condition final:", condition); + } + return condition; + } + + // Given an object that maps from "action name" => "trigger condition strings", + // return an object that maps from "action name" => "trigger condition" + public function generateActionTriggerConditions(settings: Object) { + if(logDetails) { + Debug.log(">>> generateActionTriggerConditions") + Debug.dump("settings", settings); + } + var actionConditions = new Object; + + for(var key in settings) { + actionConditions[key] = makeActionTriggerCondition(settings[key]); + actionConditions[key]["name"] = key; + } + + if(logDetails) { + Debug.log("<<< generateActionTriggerConditions") + } + return actionConditions; + } + + // Given a list of actions the event object sent to vrHandleInput, + // return the action name that has been triggered + public function triggeredAction(actionConditions: Object, event: Object) { + if(logDetails) { + Debug.log(">>> triggeredAction") + Debug.dump("event", event); + } + var state = event.curState; + var candidate = undefined; + for(var actionName in actionConditions) { + var condition = actionConditions[actionName]; + + if(logDetails) { + Debug.dump("condition", condition); + Debug.log("-- 1 --"); + } + var role = condition["role"] + if(role && state.controllerRole != role) + continue; + + if(logDetails) { + Debug.log("-- 2 --"); + } + var widgetName = condition["widgetName"] + if(widgetName && state.widgetName.toLowerCase() != widgetName.toLowerCase()) + continue; + + if(logDetails) { + Debug.log("-- 3 --"); + } + var phaseName = condition["phaseName"] + if(phaseName && event.phaseName != phaseName) + continue; + + if(logDetails) { + Debug.log("-- 4 --"); + } + var eventName = condition["eventName"] + if(eventName && eventName != event.eventName) + continue; + + if(logDetails) { + Debug.log("-- 5 --"); + } + var region = condition["region"] + if(region && region != VRInput.axisRegion(state.axis)) + continue; + + if(logDetails) { + Debug.log("<<< triggeredAction: " + actionName) + } + return actionName; + } + + if(logDetails) { + Debug.log("<<< triggeredAction: no match") + } + return undefined; + } +} diff --git a/src/Common/skyui/components/BottomBarMappedButton.as b/src/Common/skyui/components/BottomBarMappedButton.as new file mode 100644 index 000000000..9b5489fdb --- /dev/null +++ b/src/Common/skyui/components/BottomBarMappedButton.as @@ -0,0 +1,48 @@ +import skyui.components.MappedButton; +import skyui.util.GlobalFunctions; +import skyui.defines.Screen; + +// Specialized version of a MappedButton for the BottomBar +// We vertically center the button after the button is updated. +// Note that we're assuming information regarding the bottombar +// layout and where mapped buttons would be. +// +// This is not suitable for general use in other layouts. +class skyui.components.BottomBarMappedButton extends MappedButton +{ + public function update(): Void + { + super.update(); + + // Position this button so it's centered in the bottombar + // We're assuming the following display tree: + // bottom bar + // |- bg + // |- button panel + // |- Mapped Button + // + // Note that the bg provides a stable/static dimension for the bottombar. + // Since we're tweaking the layout of the bottombar programmatically, it's not a good + // idea to perform the calculation with respect to the dynamic size of the bottombar since + // might change if the button or text size were to ever exceed the static height of the + // bottombar, then the layout calculation would be thrown off from that point on. + // + // To center the ourselves to the bottom bar, we need to: + // ( center self with respect to the bottombar ) - (_y offset introduced by button panel) + // + // Also note that, sometimes, the bottombar may fall outside of the rendering area. Having + // an oversized element like this makes design time tweaking a bit more straigtforward. + // If we want to tweak the position at runtime, it means we can't just use the `bg` object + // as a sizing reference directly. We need to figure out how much of the element is actually + // visible and use that as the height of the bottombar. + var targetHeight = textField._height; + var bottombar = _parent._parent; + var reference = bottombar.centerReference != undefined ? bottombar.centerReference : bottombar.bg; + + var referenceOrigin:Object = {x: 0, y:0}; + reference.localToGlobal(referenceOrigin); + + var visibleHeight = GlobalFunctions.clamp(referenceOrigin.y + reference._height, 0, Screen.height) - referenceOrigin.y; + _y = ((visibleHeight - targetHeight) / 2) - _parent._y + reference._y; + } +} diff --git a/src/Common/skyui/components/MappedButton.as b/src/Common/skyui/components/MappedButton.as index 4f8b96bad..a34bcc2c4 100644 --- a/src/Common/skyui/components/MappedButton.as +++ b/src/Common/skyui/components/MappedButton.as @@ -2,6 +2,7 @@ import gfx.controls.Button; import skyui.defines.Input; import skyui.util.GlobalFunctions; +import skyui.defines.ButtonArtNames; class skyui.components.MappedButton extends Button { @@ -10,38 +11,38 @@ class skyui.components.MappedButton extends Button private static var _arrayWrap = []; private var _platform: Number; - - private var _keyCodes: Array; - - + + private var _controlInfos: Array; + + /* STAGE ELEMENTS */ - + public var background: MovieClip; public var textField: TextField; - - + + /* PROPERTIES */ - + public function set hiddenBackground(a_flag: Boolean) { background._visible = !a_flag; } - + public function get hiddenBackground(): Boolean { return background._visible; } - + public function get width(): Number { return background._width; } - + public function set width(a_value: Number) { background._width = a_value; } - + public var buttonArt: Array; @@ -50,9 +51,9 @@ class skyui.components.MappedButton extends Button function MappedButton() { super(); - - _keyCodes = []; - + + _controlInfos = []; + buttonArt = []; for (var i=0; this["buttonArt" + i] != undefined; i++) buttonArt.push(this["buttonArt" + i]); @@ -78,7 +79,7 @@ class skyui.components.MappedButton extends Button dispatchEvent({type:"stateChange", state:state}); } - + /* PUBLIC FUNCTIONS */ public function setPlatform(a_platform: Number): Void @@ -87,24 +88,27 @@ class skyui.components.MappedButton extends Button if (label != null && label.length > 0) update(); } - + public function setButtonData(a_buttonData: Object): Void { textField.autoSize = "left"; label = a_buttonData.text; - // Update textfield size - autoSize doesn't work reliably for large resolutions + // Update textfield size - autoSize doesn't work reliably for large resolutions textField._width = textField.getLineMetrics(0).width; - + setMappedControls(a_buttonData.controls); } public function setMappedControls(a_controls): Void { + // FIXME? a_controls is now stored directly + // This means the caller may potentially change the data and mess things up. + // If this becomes a problem, duplicate the incoming controls data constraints=null; - _keyCodes.splice(0); - + _controlInfos.splice(0); + // Accept either single object or array for multiple icons var controls: Array; if (a_controls instanceof Array) { @@ -113,42 +117,61 @@ class skyui.components.MappedButton extends Button _arrayWrap[0] = a_controls; controls = _arrayWrap; } - + for (var i=0; i 0) { - icon._visible = true; - icon.gotoAndStop(_keyCodes[i]); + + if (_controlInfos[i].keyCode > 0) { + icon._visible = true; + icon.gotoAndStop(_controlInfos[i].keyCode); + + // Scale up the icon up to the target height + icon._scaleX = 1.0; + icon._scaleY = 1.0; + var scaleMult = targetHeight / icon._height; + icon._scaleY = scaleMult; + icon._scaleX = scaleMult; + icon._x = xOffset icon._y = (_height - icon._height) / 2; xOffset += icon._width - 2; @@ -156,10 +179,10 @@ class skyui.components.MappedButton extends Button icon._visible = false; } } - - textField._x = xOffset + 1; - xOffset += textField._width + 6; - + + textField._x = xOffset + 3; + xOffset += textField._width + 8; + background._width = xOffset; } } diff --git a/src/Common/skyui/components/SearchWidget.as b/src/Common/skyui/components/SearchWidget.as index 68ff18a8d..1ea41db53 100644 --- a/src/Common/skyui/components/SearchWidget.as +++ b/src/Common/skyui/components/SearchWidget.as @@ -1,21 +1,24 @@ -import gfx.events.EventDispatcher; +import flash.utils.Timer; +import gfx.events.EventDispatcher; import gfx.managers.FocusHandler; import gfx.ui.NavigationCode; import gfx.ui.InputDetails; import Shared.GlobalFunc; import skyui.util.ConfigManager; +import skyui.util.Debug; +import skyui.VRInput; class skyui.components.SearchWidget extends MovieClip { /* CONSTANTS */ - + private static var S_FILTER = "$FILTER"; - - + + /* PRIVATE VARIABLES */ - + private var _previousFocus: Object; private var _currentInput: String; private var _lastInput: String; @@ -23,38 +26,38 @@ class skyui.components.SearchWidget extends MovieClip private var _bRestoreFocus: Boolean = false; private var _bEnableAutoupdate: Boolean; private var _updateDelay: Number; - + private var _updateTimerId: Number; - - + + /* STAGE ELEMENTS */ - + public var textField: TextField; public var icon: MovieClip; - + /* PROPERTIES */ - + public var isDisabled: Boolean = false; - - + + /* INITIALIZATION */ - + public function SearchWidget() { super(); EventDispatcher.initialize(this); - + textField.onKillFocus = function(a_newFocus: Object) { _parent.endInput(); }; - + textField.SetText(S_FILTER); ConfigManager.registerLoadCallback(this, "onConfigLoad"); } - - + + /* PUBLIC FUNCTIONS */ // @mixin by gfx.events.EventDispatcher @@ -65,49 +68,66 @@ class skyui.components.SearchWidget extends MovieClip public var removeEventListener: Function; public var removeAllEventListeners: Function; public var cleanUpEvents: Function; - + public function onConfigLoad(event): Void { var config = event.config; _bEnableAutoupdate = config.SearchBox.autoupdate.enable; _updateDelay = config.SearchBox.autoupdate.delay; } - + public function onPress(a_mouseIndex, a_keyboardOrMouse) { + Debug.log("In onPress!"); + } + + public function onRelease(a_mouseIndex, a_keyboardOrMouse) + { + //Debug.log("In onRelease!"); + //setTimeout(startInput, 100); startInput(); } public function startInput(): Void { + //Debug.log("SearchWidget::startInput()"); if (_bActive || isDisabled) return; - + + //Debug.log("SearchWidget::startInput() rest"); _previousFocus = FocusHandler.instance.getFocus(0); _currentInput = _lastInput = undefined; - + textField.SetText(""); textField.type = "input"; textField.noTranslate = true; textField.selectable = true; - + Selection.setFocus(textField); Selection.setSelection(0,0); - + _bActive = true; - skse.AllowTextInput(true); - + + // We're about to switch control over to the virtual keyboard + // While the keyboard is up and running, we'll want to stop processing input + // so we're not accidentally operating on something in the menu while entering text. + VRInput.instance.pauseInput("all"); + + // Show the keyboard + skse["plugins"]["skyui"].ShowVirtualKeyboard("skyui", "Search", "Item name", "", this, recvVirtualKeyboardInput); + + //Debug.log("sending inputStart event and entering autoupdate loop"); dispatchEvent({type: "inputStart"}); - + if ( _bEnableAutoupdate) { this.onEnterFrame = function() { refreshInput(); - + if (_currentInput != _lastInput) { _lastInput = _currentInput; - + if (_updateTimerId != undefined) { clearInterval(_updateTimerId); } @@ -117,25 +137,36 @@ class skyui.components.SearchWidget extends MovieClip } } + private function recvVirtualKeyboardInput(text:String, err:Number): Void + { + //Debug.log("recvVirtualKeyboardInput: ", text, err); + textField.text = text; + endInput(); + } + public function endInput(): Void { + //Debug.log("SearchWidget::endInput()"); if (!_bActive) return; + //Debug.log("SearchWidget::endInput() rest"); delete this.onEnterFrame; - + + VRInput.instance.resumeInput("all"); + textField.type = "dynamic"; textField.noTranslate = false; textField.selectable = false; textField.maxChars = null; - + var bPrevEnabled = _previousFocus.focusEnabled; _previousFocus.focusEnabled = true; Selection.setFocus(_previousFocus,0); _previousFocus.focusEnabled = bPrevEnabled; _bActive = false; - skse.AllowTextInput(false); + //skse.AllowTextInput(false); refreshInput(); @@ -150,49 +181,58 @@ class skyui.components.SearchWidget extends MovieClip // @GFx public function handleInput(details: InputDetails, pathToFocus: Array): Boolean { + //Debug.log("search widget handle input"); + Debug.dump("InputDetails", details, false, 0); + if (GlobalFunc.IsKeyPressed(details)) { - + + + /* if (details.navEquivalent == NavigationCode.ENTER) { + Debug.log("Ending: enter key detected"); endInput(); - - } else if (details.navEquivalent == NavigationCode.TAB || details.navEquivalent == NavigationCode.ESCAPE) { + + } + else if (details.navEquivalent == NavigationCode.TAB || details.navEquivalent == NavigationCode.ESCAPE) { + Debug.log("Ending: tab or escape"); clearText(); endInput(); } + */ var nextClip = pathToFocus.shift(); if (nextClip.handleInput(details, pathToFocus)) return true; } - + return false; } - - + + /* PRIVATE FUNCTIONS */ - + private function clearText(): Void { textField.SetText(""); } - + private function refreshInput(): Void { var t = GlobalFunc.StringTrim(textField.text); - + if (t != undefined && t != "" && t != S_FILTER) { _currentInput = t; } else { _currentInput = undefined; } } - + private function updateInput(): Void { if (_updateTimerId != undefined) { clearInterval(_updateTimerId); _updateTimerId = undefined; - + if (_currentInput != undefined) { dispatchEvent({type: "inputChange", data: _currentInput}); } else { @@ -200,4 +240,4 @@ class skyui.components.SearchWidget extends MovieClip } } } -} \ No newline at end of file +} diff --git a/src/Common/skyui/components/list/IEntryEnumeration.as b/src/Common/skyui/components/list/IEntryEnumeration.as index bee3c097f..d39374057 100644 --- a/src/Common/skyui/components/list/IEntryEnumeration.as +++ b/src/Common/skyui/components/list/IEntryEnumeration.as @@ -1,20 +1,25 @@ /* * An enumeration of list entries. + * + * This is meant to provide an abstraction over a list of things + * so we have the opporunity to provide a filtered or remapped + * view of a list without having to actually reorder the + * elements. */ interface skyui.components.list.IEntryEnumeration { // Returns the number of entries the enumeration contains. public function size(): Number; - + // Returns the ith element of the enumeration. public function at(index: Number): Object; - + // Get the entry index associated with a given enum index for a given enum index. public function lookupEntryIndex(enumIndex: Number): Number; - + // Get the entry index associated with a given enum index for a given entry index. public function lookupEnumIndex(entryIndex: Number): Number; - + // The underlying data has been modified. public function invalidate(): Void; -} \ No newline at end of file +} diff --git a/src/Common/skyui/components/list/ListLayout.as b/src/Common/skyui/components/list/ListLayout.as index d0dc01c9d..e50c81653 100644 --- a/src/Common/skyui/components/list/ListLayout.as +++ b/src/Common/skyui/components/list/ListLayout.as @@ -261,7 +261,27 @@ class skyui.components.list.ListLayout updateLayout(); } - + + public function nextColumn(): Void + { + // What's the next column we want to get to? + var nextIndex = _activeColumnIndex + 1; + + var listIndex = toColumnListIndex(nextIndex); + if(listIndex == -1) { + // If we're trying to reach an invalid column by index, + // activate the first column instead + selectColumn(1); + } else { + selectColumn(nextIndex); + } + } + + public function nextActiveColumnState(): Void + { + selectColumn(activeColumnIndex); + } + public function restoreColumnState(a_activeIndex: Number, a_activeState: Number): Void { var listIndex = toColumnListIndex(a_activeIndex); diff --git a/src/Common/skyui/components/list/ScrollingList.as b/src/Common/skyui/components/list/ScrollingList.as index 0e70601a0..a28a7d23f 100644 --- a/src/Common/skyui/components/list/ScrollingList.as +++ b/src/Common/skyui/components/list/ScrollingList.as @@ -196,6 +196,8 @@ class skyui.components.list.ScrollingList extends BasicList scrollUpButton._visible = _scrollPosition > 0; if (scrollDownButton != undefined) scrollDownButton._visible = _scrollPosition < _maxScrollPosition; + + dispatchEvent({type: "listUpdated"}); } // @override BasicList @@ -216,9 +218,6 @@ class skyui.components.list.ScrollingList extends BasicList listEnumeration.invalidate(); - if (_selectedIndex >= listEnumeration.size()) - _selectedIndex = listEnumeration.size() - 1; - if (listEnumeration.lookupEnumIndex(_selectedIndex) == null) _selectedIndex = -1; diff --git a/src/Common/skyui/components/list/TabularList.as b/src/Common/skyui/components/list/TabularList.as index c12853a01..886c76631 100644 --- a/src/Common/skyui/components/list/TabularList.as +++ b/src/Common/skyui/components/list/TabularList.as @@ -20,6 +20,8 @@ class skyui.components.list.TabularList extends ScrollingList private var _nextColumnKey: Number = -1; private var _sortOrderKey: Number = -1; + private var _columnOpRequested: Number = 0; + /* STAGE ELEMENTS */ public var header: SortedListHeader; @@ -61,10 +63,56 @@ class skyui.components.list.TabularList extends ScrollingList // @GFx public function handleInput(details: InputDetails, pathToFocus: Array): Boolean { + + if (!disableInput && _platform != 0) { + if (GlobalFunc.IsKeyPressed(details)) { + + // VR specific behavior + // + // While look at a specific category, we want to be able to both: + // - switch column + // - switch column sort direction + // We only have swipe events to work with in VR at the moment. + // We can't use the the right/left swiping motions because they cause changes to the columns. + // So, we can only overload the up/down swipes. + if (Shared.GlobalFunc.IsKeyPressed(details) && + (details.navEquivalent == NavigationCode.UP && + (selectedIndex == -1 || // Nothing is selected (just switched category) + getSelectedListEnumIndex() == 0)) // Selected item is the first item in current view of the list + ){ + + var inputWindow = 250; + if(_platform == Shared.Platforms.CONTROLLER_OCULUS) { + inputWindow = 400; + } + + // Has no column operation is currently pending... + if(_columnOpRequested == 0) { + // Schedule an operation to be performed in the near future. + var _this = this; + setTimeout(function() { + if(_this._columnOpRequested == 1) { + _this.layout.nextColumn(); + } else { + _this.layout.nextActiveColumnState(); + } + _this._columnOpRequested = 0; + }, inputWindow); + } + + // While we're waiting for the column operation to be performed in the near future, + // record the number of times the operation is requested. + _columnOpRequested++; + return true; + } + } + } + if (super.handleInput(details, pathToFocus)) return true; if (!disableInput && _platform != 0) { + if (GlobalFunc.IsKeyPressed(details)) { if (details.skseKeycode == _previousColumnKey) { _layout.selectColumn(_layout.activeColumnIndex - 1); diff --git a/src/Common/skyui/components/list/TabularListEntry.as b/src/Common/skyui/components/list/TabularListEntry.as index 27d927b18..c19589797 100644 --- a/src/Common/skyui/components/list/TabularListEntry.as +++ b/src/Common/skyui/components/list/TabularListEntry.as @@ -39,10 +39,16 @@ class skyui.components.list.TabularListEntry extends BasicListEntry setSpecificEntryLayout(a_entryObject, a_state); } + // The entire entry should be using the same font & size + // We want to fetch the lineMetrics just once (not sure how expensive this call is) + var textMetrics = undefined; + // Format the actual entry contents. Do this with every upate. for (var i = 0; i < layout.columnCount; i++) { var columnLayoutData: ColumnLayoutData = layout.columnLayoutData[i]; var e = this[columnLayoutData.stageName]; + if (textMetrics == undefined) + textMetrics = e.getLineMetrics(0); // Substitute @variables by entryObject properties var entryValue: String = columnLayoutData.entryValue; @@ -80,6 +86,20 @@ class skyui.components.list.TabularListEntry extends BasicListEntry if (color != undefined) e.textColor = color; } + + // Center the text vertically, using the selectIndicator as a reference + // + // For some reason, text alignment is more difficult than it should be. + // The idea here is to align the top of the select indicator and the TextField. + // Then, we vertically center the TextField using the `ascent` height only. + // + // There is a small wrinkle here. For some reason, even if selectIndicator._y + // and TextField._y is set to 0, they are not perfectly vertically aligned. + // There is a small vertical gap which throws off this centering calculation. + // By experiementation, it looks like subtracting the `descent` hight gets the + // text to mostly align with the top of the indicator selector. It's still off + // by a few pixels, but at least it's much better than not accounting for it. + e._y = selectIndicator._y - textMetrics.descent + ((selectIndicator._height - textMetrics.ascent)/2); } } diff --git a/src/Common/skyui/defines/ButtonArtNames.as b/src/Common/skyui/defines/ButtonArtNames.as new file mode 100644 index 000000000..0d033c49c --- /dev/null +++ b/src/Common/skyui/defines/ButtonArtNames.as @@ -0,0 +1,277 @@ +// Provides a mapping from keyname => keycode +// The keyCodes correspond directly to the animation/timeline frames in ButtonArt. +class skyui.defines.ButtonArtNames +{ + private static var _buttonNameMap = null; + + private static function nameMap(): Object + { + if(_buttonNameMap == null || _buttonNameMap == undefined) { + _buttonNameMap = constructNameMap(); + } + + return _buttonNameMap; + } + + public static function constructNameMap(): Object + { + var aNameMap = { + esc: 1, + //1: 2, + //2: 3, + //3: 4, + //4: 5, + //5: 6, + //6: 7, + //7: 8, + //8: 9, + //9: 10, + //0: 11, + hyphen: 12, + equal: 13, + backspace: 14, + tab: 15, + q: 16, + w: 17, + e: 18, + r: 19, + t: 20, + y: 21, + u: 22, + i: 23, + o: 24, + p: 25, + bracketleft: 26, + bracketright: 27, + enter: 28, + //l-ctrl: 29, + a: 30, + s: 31, + d: 32, + f: 33, + g: 34, + h: 35, + j: 36, + k: 37, + l: 38, + semicolon: 39, + quotesingle: 40, + tilde: 41, + //l-shift: 42, + backslash: 43, + z: 44, + x: 45, + c: 46, + v: 47, + b: 48, + n: 49, + m: 50, + comma: 51, + period: 52, + slash: 53, + //r-shift: 54, + numpadmult: 55, + //l-alt: 56, + space: 57, + capslock: 58, + f1: 59, + f2: 60, + f3: 61, + f4: 62, + f5: 63, + f6: 64, + f7: 65, + f8: 66, + f9: 67, + f10: 68, + numlock: 69, + scrolllock: 70, + numpad7: 71, + numpad8: 72, + numpad9: 73, + numpadminus: 74, + numpad4: 75, + numpad5: 76, + numpad6: 77, + numpadplus: 78, + numpad1: 79, + numpad2: 80, + numpad3: 81, + numpad0: 82, + numpaddec: 83, + f11: 87, + f12: 88, + numpadenter: 156, + //r-ctrl: 157, + numpaddivide: 158, + printsrc: 183, + //r-alt: 184, + pause: 197, + home: 199, + up: 200, + pgup: 201, + left: 203, + right: 205, + end: 207, + down: 208, + pgdn: 209, + insert: 210, + //delete: 211, + // Mouse + mouse1: 256, + mouse2: 257, + mouse3: 258, + mouse4: 259, + mouse5: 260, + mouse6: 261, + mouse7: 262, + mouse8: 263, + mousewheelup: 264, + mousewheeldown: 265, + // Controller + //360_start: 270, + //360_back: 271, + //360_l3: 272, + //360_r3: 273, + //360_lb: 274, + //360_rb: 275, + //360_a: 276, + //360_b: 277, + //360_x: 278, + //360_y: 279, + //360_lt: 280, + //360_rt: 281, + // PS3 buttons = 360 buttons + ps3_start: 270, + ps3_back: 271, + ps3_l3: 272, + ps3_r3: 273, + ps3_lb: 274, + ps3_rb: 275, + ps3_a: 276, + ps3_b: 277, + ps3_x: 278, + ps3_y: 279, + ps3_lt: 280, + ps3_rt: 281 + }; + + insertAdditionalNames(aNameMap); + + insertNamesStartingAtKeyCode(aNameMap, 325, [ + // 325 - 329 + "360_Y", "360_X", "360_Start", "360_RS", "360_RB", + + // 330 - 339 + "360_R3", "360_LTRT", "360_LS", "360_LB", "360_LS", "360_Back", "360_B", "360_A", "MR MOTION", "MR MENU_RIGHT", + + // 340 - 349 + "MR MENU_LEFT", "MR MENU_HOLD", "ME MENU", "trigger_Right", "trigger_LR", "trigger_Left", "trigger_Hold", "trigger", "thumb_Right_Up", "thumb_Right_UD", + + // 350 - 359 + "thumb_Right_Right", "thumb_Right_Press", "thumb_Right_LR", "thumb_Right_Left", "thumb_Right_Down", + "thumb_Right_Any", "thumb_Left_Up", "thumb_Left_UD", "thumb_Left_Right", "thumb_Left_Press", + + // 360 - 369 + "thumb_Left_LR", "thumb_Left_Left", "thumb_Left_Down", "thumb_Left_Any", "radial_Right_Up", + "radial_Right_UD", "radial_Right_Right", "radial_Right_NoCenter", "radial_Right_LR", "radial_Right_Left", + + // 370 - 379 + "radial_Right_Down", "radial_Right_Center", "radial_Right_Any", "radial_Left_Up", "radial_Left_UD", + "radial_Left_Right", "radial_Left_NoCenter", "radial_Left_LR", "radial_Left_Left", "radial_Left_Down", + + // 380 - 389 + "radial_Left_Center", "radial_Left_Any", "radial_Either_UpDown", "radial_Either_Up", "radial_Either_NoCenter_Hold", + "radial_Either_NoCenter", "radial_Either_LeftRight", "radial_Either_Down", "radial_Either_Center", "radial_Either_Any_Hold", + + // 390 - 399 + "radial_Either_Any", "grip_Right", "grip_Left", "grip_Hold", "grip", + "grab_Right", "grab_Left", "grab_Hold", "grab", "VIVE MOTION", + + // 400 - 409 + "VIVE MENU_RIGHT", "VIVE MENU_LEFT", "VIVE MENU_HOLD", "VIVE MENU", "PS3_Y_RIGHT", + "PS3_Y_LEFT", "PS3_XY_RIGHT", "PS3_XY_LEFT", "PS3_XY", "PS3_X_RIGHT", + + // 410 - 419 + "PS3_X_LEFT", "PS3_Back", "PS3_TELEPORT", "PS3_START", "PS3_Select", + "PS3_RS", "PS3_RB", "PS3_R3", "PS3_P_SWING_RIGHT", "PS3_P_SWING_LEFT", + + // 420 - 429 + "PS3_P_SWING", "PS3_OPTIONS", "PS3_NAV_UD_RIGHT", "PS3_NAV_UD_LEFT", "PS3_NAV_UD", + "PS3_NAV_RIGHT", "PS3_NAV_LR_RIGHT", "PS3_NAV_LR_LEFT", "PS3_NAV_LR", "PS3_NAV_LEFT", + + // 430 - 439 + "PS3_NAV", "PS3_Move_Select_RIGHT", "PS3_Move_Select_LEFT", "PS3_Move_Select", "PS3_Move_RIGHT", + "PS3_Move_LEFT", "PS3_Move", "PS3_MOTION_RIGHT", "PS3_MOTION_LEFT", "PS3_MOTION", + + // 440 - 449 + "PS3_LTRT", "PS3_LS", "PS3_LBRB", "PS3_LB", "PS3_L3", + "PS3_CON_RIGHT", "PS3_CON_LEFT", "PS3_B_RIGHT", "PS3_B_LEFT", "PS3_B", + + // 450 - 459 + "PS3_AB_RIGHT", "PS3_AB_LEFT", "PS3_AB", "PS3_A_RIGHT", "PS3_A_LEFT", + "PS3_A", "radial_Either_Right", "radial_Either_Left", "Action_Up", "Action_Double_Up", + + // 460 - 469 + "Action_Left", "", "", "", "", + "", "", "", "", "", + + // 470 - 479 + "OCC MOTION", "OCC THUMB_REST", "OCC THUMB_RESET_LEFT", "OCC THUMB_REST_RIGHT", "OCC_A", + "OCC_A_HOLD", "OCC_B", "OCC_B_HOLD", "OCC_X", "OCC_X_HOLD", + + // 480 + "OCC_Y", "OCC_Y_HOLD" + ]); + return aNameMap; + } + + public static function lookup(keyName: String): Number + { + var aNameMap = nameMap(); + return aNameMap[keyName.toLowerCase()]; + } + + + private static function insertAdditionalNames(aNameMap: Object): Void + { + // These Button names can't be set in the object constructor since they're 'invalid' names + aNameMap["1"] = 2; + aNameMap["2"] = 3; + aNameMap["3"] = 4; + aNameMap["4"] = 5; + aNameMap["5"] = 6; + aNameMap["6"] = 7; + aNameMap["7"] = 8; + aNameMap["8"] = 9; + aNameMap["9"] = 10; + aNameMap["0"] = 11; + aNameMap["l-ctrl"] = 29; + aNameMap["l-shift"] = 42; + aNameMap["r-shift"] = 54; + aNameMap["l-alt"] = 56; + aNameMap["r-ctrl"] = 157; + aNameMap["r-alt"] = 184; + aNameMap["delete"] = 211; + aNameMap["360_start"] = 270; + aNameMap["360_back"] = 271; + aNameMap["360_l3"] = 272; + aNameMap["360_r3"] = 273; + aNameMap["360_lb"] = 274; + aNameMap["360_rb"] = 275; + aNameMap["360_a"] = 276; + aNameMap["360_b"] = 277; + aNameMap["360_x"] = 278; + aNameMap["360_y"] = 279; + aNameMap["360_lt"] = 280; + aNameMap["360_rt"] = 281; + aNameMap["???"] = 282; + } + + private static function insertNamesStartingAtKeyCode(aNameMap: Object, startKeyCode: Number, namesArr: Array): Void + { + for(var i = 0; i < namesArr.length; i++) { + aNameMap[ namesArr[i].toLowerCase() ] = i + startKeyCode; + } + } +} diff --git a/src/Common/skyui/defines/Input.as b/src/Common/skyui/defines/Input.as index 69284f7dd..bd3fd6edf 100644 --- a/src/Common/skyui/defines/Input.as +++ b/src/Common/skyui/defines/Input.as @@ -1,9 +1,12 @@ -class skyui.defines.Input +import Shared.Platforms; +import skyui.util.Debug; + +class skyui.defines.Input { static var DEVICE_KEYBOARD: Number = 0; static var DEVICE_MOUSE: Number = 1; static var DEVICE_GAMEPAD: Number = 2; - + static var CONTEXT_GAMEPLAY: Number = 0; static var CONTEXT_MENUMODE: Number = 1; static var CONTEXT_CONSOLE: Number = 2; @@ -21,7 +24,7 @@ static var CONTEXT_MAPDEBUG: Number = 14; static var CONTEXT_LOCKPICKING: Number = 15; static var CONTEXT_FAVOR: Number = 16; - + // Controlmap static var ChargeItem = {name: "ChargeItem", context: CONTEXT_INVENTORY}; static var XButton = {name: "XButton", context: CONTEXT_ITEMMENU}; @@ -37,7 +40,7 @@ static var Cancel = {name: "Cancel", context: CONTEXT_MENUMODE}; static var JournalXButton = {name: "XButton", context: CONTEXT_JOURNAL}; static var JournalYButton = {name: "YButton", context: CONTEXT_JOURNAL}; - + // Custom static var LeftRight: Array = [ {name: "Left", context: CONTEXT_MENUMODE}, @@ -60,5 +63,4 @@ static var Shift = {keyCode: 42}; static var Space = {keyCode: 57}; static var Alt = {keyCode: 56}; - -} \ No newline at end of file +} diff --git a/src/Common/skyui/defines/Screen.as b/src/Common/skyui/defines/Screen.as new file mode 100644 index 000000000..d48e36a14 --- /dev/null +++ b/src/Common/skyui/defines/Screen.as @@ -0,0 +1,5 @@ +class skyui.defines.Screen +{ + static public var width = 1280; + static public var height = 720; +} diff --git a/src/Common/skyui/util/Debug.as b/src/Common/skyui/util/Debug.as index d86283fda..6da8a65fd 100644 --- a/src/Common/skyui/util/Debug.as +++ b/src/Common/skyui/util/Debug.as @@ -5,6 +5,8 @@ class skyui.util.Debug /* PRIVATE VARIABLES */ private static var _buffer: Array = []; + private static var indent = 0; + /* PUBLIC STATIC FUNCTIONS */ public static function log(/* a_text: String , a_text2: String ... */): Void { @@ -23,12 +25,21 @@ class skyui.util.Debug // Flush buffer if (_global.skse && _buffer.length > 0) { for(var i = 0; i < _buffer.length; i++) - skse.Log(_buffer[i]); + skse.Log(_buffer[i]); _buffer.splice(0); } + if(arguments[0].slice(0, 3) == "<< ") + indent -= 1; + for(var i = 0; i < arguments.length; i++) { - var str = dateTime + " " + arguments[i]; + var str = dateTime + " "; + + for(var j = 0; j < indent; j++) { + str += " "; + } + + str += arguments[i]; if (_global.skse) skse.Log(str); @@ -37,6 +48,8 @@ class skyui.util.Debug else _buffer.push(str); } + if(arguments[0].slice(0, 3) == ">> ") + indent += 1; } public static function logNT(/* a_text: String , a_text2: String ... */): Void @@ -44,7 +57,7 @@ class skyui.util.Debug // Flush buffer if (_global.skse && _buffer.length > 0) { for(var i = 0; i < _buffer.length; i++) - skse.Log(_buffer[i]); + skse.Log(_buffer[i]); _buffer.splice(0); } @@ -176,6 +189,16 @@ class skyui.util.Debug return null; } + + static public function dumpFocusPath(focusPath: Array) { + Debug.dump("focusPath", focusPath); + for(var i = 0; i < focusPath.length; i++) { + var obj = focusPath[i]; + if(obj.classname != null) + Debug.log("" + i + ": " + obj.classname()); + } + } + } diff --git a/src/Common/skyui/util/GlobalFunctions.as b/src/Common/skyui/util/GlobalFunctions.as index 47c70fc44..2e0872263 100644 --- a/src/Common/skyui/util/GlobalFunctions.as +++ b/src/Common/skyui/util/GlobalFunctions.as @@ -3,7 +3,7 @@ class skyui.util.GlobalFunctions { /* PUBLIC FUNCTIONS */ - + public static function extract(a_str: String, a_startChar: String, a_endChar: String): String { return a_str.slice(a_str.indexOf(a_startChar) + 1,a_str.lastIndexOf(a_endChar)); @@ -26,7 +26,7 @@ class skyui.util.GlobalFunctions return a_str.slice(i,j + 1); } - public static function unescape(a_str: String): String + public static function unescape(a_str: String): String { a_str = a_str.split("\\n").join("\n"); a_str = a_str.split("\\t").join("\t"); @@ -39,39 +39,39 @@ class skyui.util.GlobalFunctions { if (_arrayExtended) return; - + _arrayExtended = true; - + Array.prototype.indexOf = function (a_element): Number { for (var i=0; i 0) { var dotIdx: Number = valStr.indexOf(".") if (dotIdx == -1) { dotIdx = valStr.length valStr += "."; } - + var decLen: Number = valStr.length - (dotIdx + 1); for (var i: Number = 0; decLen + i < a_decimal; i++) valStr += "0"; } - + if (floatComponents[1] != undefined) valStr += "E" + floatComponents[1] - + return valStr; } - + public static function getMappedKey(a_control: String, a_context: Number, a_bGamepad: Boolean): Number { if (_global.skse == undefined) return -1; - + if (a_bGamepad == true) { return skse.GetMappedKey(a_control, Input.DEVICE_GAMEPAD, a_context); } else { @@ -233,18 +233,38 @@ class skyui.util.GlobalFunctions a_scope[a_memberFn] = function () {memberFn.apply(a_scope, arguments); a_hookScope[a_hookFn].apply(a_hookScope, arguments);} return true; } - + public static function getDistance(a: MovieClip, b: MovieClip): Number { var dx = b._x - a._x; var dy = b._y - a._y; return Math.sqrt(dx*dx + dy*dy); } - + public static function getAngle(a: MovieClip, b: MovieClip): Number { var dx = b._x - a._x; - var dy = b._y - a._y; + var dy = b._y - a._y; return Math.atan2(dy, dx) * (180 / Math.PI); } -} \ No newline at end of file + + static public function clamp(val:Number, min:Number, max:Number) + { + return Math.max(min, Math.min(max, val)) + } + + static public function vec2Mag(vec2: Array) + { + if(vec2 == undefined) + return undefined; + var x = vec2[0]; + var y = vec2[1]; + return Math.sqrt(x*x + y*y); + } + + static public function vec2Angle(vec2: Array) + { + return Math.atan2(vec2[1], vec2[0]) * (180 / Math.PI); + } + +} diff --git a/src/Common/skyui/util/Input.as b/src/Common/skyui/util/Input.as new file mode 100644 index 000000000..c4be1d918 --- /dev/null +++ b/src/Common/skyui/util/Input.as @@ -0,0 +1,69 @@ +import skyui.util.Debug; +import skyui.VRInput; + +class skyui.util.Input +{ + //---------------------------------------------------------------------- + // Utility functions + // + // This is for picking the right ButtonArt given a map and a platform enum. + // It expect the same format the vanilla game uses to specify keys. + // This makes it relatively straighforward to port changes over. + // + //--------------------------------------------------------------------- + static function pickButtonArt(a_platform: Number, buttonNames: Object): String + { + switch(VRInput.instance.controllerName) { + case "vive": + return buttonNames["ViveArt"]; + case "knuckles": + if(buttonNames["KnucklesArt"]) + return buttonNames["KnucklesArt"]; + else + return buttonNames["OculusArt"]; + } + + switch(a_platform) { + + case Shared.Platforms.CONTROLLER_PC: + return buttonNames["PCArt"]; + + case Shared.Platforms.CONTROLLER_PCGAMEPAD: + case Shared.Platforms.CONTROLLER_DURANGO: + case Shared.Platforms.CONTROLLER_ORBIS: + return buttonNames["XBoxArt"]; + + case Shared.Platforms.CONTROLLER_VIVE: + case Shared.Platforms.CONTROLLER_VIVE_KNUCKLES: + return buttonNames["ViveArt"]; + + case Shared.Platforms.CONTROLLER_ORBIS_MOVE: + return buttonNames["MoveArt"]; + + case Shared.Platforms.CONTROLLER_OCULUS: + return buttonNames["OculusArt"]; + + case Shared.Platforms.CONTROLLER_WINDOWS_MR: + return buttonNames["WindowsMRArt"]; + + default: + return buttonNames["XBoxArt"]; + } + } + + static function pickControls(a_platform: Number, buttonNames: Object): Object + { + var val = {namedKey: pickButtonArt(a_platform, buttonNames)}; + return val; + } + + // Helper function to perform rate limiting + static function rateLimit(a_obj: Object, a_fieldname: String, delayTime: Number) + { + a_obj[a_fieldname] = true; + setTimeout(function() { + a_obj[a_fieldname] = false; + }, + delayTime); + } +} diff --git a/src/CraftingMenu/CraftingLists.as b/src/CraftingMenu/CraftingLists.as index 79ee43c18..c7724c25b 100644 --- a/src/CraftingMenu/CraftingLists.as +++ b/src/CraftingMenu/CraftingLists.as @@ -29,19 +29,19 @@ import skyui.defines.Inventory; class CraftingLists extends MovieClip { #include "../version.as" - + /* CONSTANTS */ - + static var HIDE_PANEL = 0; static var SHOW_PANEL = 1; static var TRANSITIONING_TO_HIDE_PANEL = 2; static var TRANSITIONING_TO_SHOW_PANEL = 3; - + static var SHORT_LIST_OFFSET = 210; - + /* STAGE ELEMENTS */ - + public var panelContainer: MovieClip; public var zoomButtonHolder: MovieClip; @@ -51,23 +51,26 @@ class CraftingLists extends MovieClip private var _typeFilter: ItemTypeFilter; private var _nameFilter: NameFilter; private var _sortFilter: SortFilter; - + private var _platform: Number; - + private var _currCategoryIndex: Number; private var _savedSelectionIndex: Number = -1; - + private var _searchKey: Number = -1; private var _sortOrderKey: Number = -1; private var _sortOrderKeyHeld: Boolean = false; private var _columnSelectDialog: MovieClip; private var _columnSelectInterval: Number; - + private var _subtypeName: String; - + private var _bFocusItemList: Boolean = true; - + + private var _categoryChanged: Boolean; + private var _categorySelections: Object; + /* PROPERTIES */ @@ -75,15 +78,15 @@ class CraftingLists extends MovieClip // @API public var CategoriesList: IconTabList; - + public var searchWidget: SearchWidget; - + public var categoryLabel: MovieClip; - + public var columnSelectButton: Button; - + private var _currentState: Number; - + public function get currentState() { return _currentState; @@ -103,7 +106,7 @@ class CraftingLists extends MovieClip public function CraftingLists() { super(); - + GlobalFunctions.addArrayFunctions(); EventDispatcher.initialize(this); @@ -116,7 +119,7 @@ class CraftingLists extends MovieClip _typeFilter = new ItemTypeFilter(); _nameFilter = new NameFilter(); _sortFilter = new SortFilter(); - + categoryLabel = panelContainer.categoryLabel; CategoriesList = panelContainer.categoriesList; // Note: Re-assigned later if alchemy itemList = panelContainer.itemList; @@ -128,8 +131,8 @@ class CraftingLists extends MovieClip // Hide by default, maybe show later panelContainer.effectsList._visible = false; - } - + } + /* PUBLIC FUNCTIONS */ // @mixin by gfx.events.EventDispatcher @@ -140,51 +143,51 @@ class CraftingLists extends MovieClip public var removeEventListener: Function; public var removeAllEventListeners: Function; public var cleanUpEvents: Function; - + // @mixin by Shared.GlobalFunc public var Lock: Function; - + public function InitExtensions(a_subtypeName: String): Void { _subtypeName = a_subtypeName; - + // Alchemy uses a different layout if (_subtypeName == "Alchemy") { panelContainer.gotoAndStop("no_categories"); - + // Hide top icon category bar, use effects list instead CategoriesList._visible = false; CategoriesList = panelContainer.effectsList; CategoriesList._visible = true; - + itemList.gotoAndStop("short"); itemList.leftBorder = SHORT_LIST_OFFSET; itemList.listHeight = 560; // Support for custom categorization - } else if (_subtypeName == "ConstructibleObject") { + } else if (_subtypeName == "ConstructibleObject") { itemList.addDataProcessor(new CustomConstructDataSetter()); - + // Smithing doesn't need top icon categories - } else if (_subtypeName == "Smithing") { + } else if (_subtypeName == "Smithing") { panelContainer.gotoAndStop("no_categories"); CategoriesList._visible = false; itemList.listHeight = 560; } - + var listEnumeration = new FilteredEnumeration(itemList.entryList); listEnumeration.addFilter(_typeFilter); listEnumeration.addFilter(_nameFilter); listEnumeration.addFilter(_sortFilter); itemList.listEnumeration = listEnumeration; - - _typeFilter.addEventListener("filterChange", this, "onFilterChange"); + + _typeFilter.addEventListener("filterChange", this, "onFilterChange"); _nameFilter.addEventListener("filterChange", this, "onFilterChange"); _sortFilter.addEventListener("filterChange", this, "onFilterChange"); - + CategoriesList.listEnumeration = new BasicEnumeration(CategoriesList.entryList); - + itemList.listState.maxTextLength = 80; _typeFilter.addEventListener("filterChange", this, "onFilterChange"); @@ -200,14 +203,15 @@ class CraftingLists extends MovieClip itemList.addEventListener("selectionChange", this, "onItemsListSelectionChange"); itemList.addEventListener("sortChange", this, "onSortChange"); itemList.addEventListener("itemPress", this, "onItemPress"); + itemList.addEventListener("listUpdated", this, "onItemsListUpdate"); searchWidget.addEventListener("inputStart", this, "onSearchInputStart"); searchWidget.addEventListener("inputEnd", this, "onSearchInputEnd"); searchWidget.addEventListener("inputChange", this, "onSearchInputChange"); - + columnSelectButton.addEventListener("press", this, "onColumnSelectButtonPress"); - - itemList.onInvalidate = Delegate.create(this, onItemListInvalidate); + + itemList.onInvalidate = Delegate.create(this, onItemListInvalidate); CategoriesList.onUnsuspend = function() { @@ -215,18 +219,18 @@ class CraftingLists extends MovieClip this.onItemPress(0, 0); // Select first category delete this.onUnsuspend; }; - + // Delay updates until config is ready CategoriesList.suspended = true; itemList.suspended = true; } - + public function showPanel(a_bPlayBladeSound: Boolean): Void { // Release itemlist for updating CategoriesList.suspended = false; itemList.suspended = false; - + _currentState = TRANSITIONING_TO_SHOW_PANEL; gotoAndPlay("PanelShow"); @@ -240,7 +244,7 @@ class CraftingLists extends MovieClip { _currentState = TRANSITIONING_TO_HIDE_PANEL; gotoAndPlay("PanelHide"); - + GameDelegate.call("PlaySound",["UIMenuBladeCloseSD"]); } @@ -251,7 +255,7 @@ class CraftingLists extends MovieClip CategoriesList.setPlatform(a_platform,a_bPS3Switch); itemList.setPlatform(a_platform,a_bPS3Switch); } - + public function setPartitionedFilterMode(a_bPartitioned: Boolean): Void { _typeFilter.setPartitionedFilterMode(a_bPartitioned); @@ -309,7 +313,7 @@ class CraftingLists extends MovieClip return true; } } - + if (_subtypeName == "Alchemy") { if (handleAlchemyNavigation(details, pathToFocus)) return true; @@ -317,7 +321,7 @@ class CraftingLists extends MovieClip if (CategoriesList.handleInput(details, pathToFocus)) return true; } - + var nextClip = pathToFocus.shift(); return nextClip.handleInput(details, pathToFocus); } @@ -335,7 +339,7 @@ class CraftingLists extends MovieClip // Moving from Item list to Category List _bFocusItemList = false; return true; - + } else if (details.navEquivalent == NavigationCode.RIGHT) { if (_bFocusItemList) return true; @@ -350,7 +354,7 @@ class CraftingLists extends MovieClip _bFocusItemList = true; return true; } - + // Ok thats a bit weird but whatever...: // Itemlist always has focus, but if this flag is false, categories list gets to run first. // Since both use the same nav scheme, category list wins. @@ -358,12 +362,12 @@ class CraftingLists extends MovieClip if (CategoriesList.handleInput(details, pathToFocus)) { // Clear saved index _savedSelectionIndex = -1; - + return true; } } } - + return false; } @@ -372,11 +376,18 @@ class CraftingLists extends MovieClip var lb = panelContainer.ListBackground; return [lb._x, lb._y, lb._width, lb._height]; } - + public function showItemsList(): Void { + // Save the previous selection in the category + var prevCategory = CategoriesList.lastSelectedIndex; + _categorySelections[prevCategory] = { + selectedIndex: itemList.selectedIndex, + scrollPosition: itemList.scrollPosition + }; + _currCategoryIndex = CategoriesList.selectedIndex; - + categoryLabel.textField.SetText(CategoriesList.selectedEntry.text.toUpperCase()); // Start with no selection @@ -385,48 +396,49 @@ class CraftingLists extends MovieClip if (CategoriesList.selectedEntry != undefined) { var catFlag = CategoriesList.selectedEntry.flag; - + // Set filter type _typeFilter.changeFilterFlag(catFlag); - + // Not set yet before the config is loaded itemList.layout.changeFilterFlag(catFlag); } - + itemList.requestUpdate(); - + dispatchEvent({type: "showItemsList", index: itemList.selectedIndex}); - + // dispatchEvent({type:"itemHighlightChange", index:itemList.selectedIndex}); itemList.disableInput = false; } // Called to initially set the category list. - // @API + // @API public function SetCategoriesList(): Void - { + { var textOffset = 0; var flagOffset = 1; var bDontHideOffset = 2; var len = 3; CategoriesList.clearList(); + _categorySelections = new Array(); for (var i=0, index = 0; i < arguments.length; i = i + len, index++) { var entry = {text:arguments[i + textOffset], flag:arguments[i + flagOffset], bDontHide:arguments[i + bDontHideOffset], savedItemIndex:0, filterFlag:arguments[i + bDontHideOffset] == true ? (1) : (0)}; - + if (entry.flag == 0) { entry.divider = true; } - + entry.enabled = false; - + // Debug.dump("category" + i, entry); - + CategoriesList.entryList.push(entry); } - + // We have enough information to init the art now. // But the list has not been invalidated, so no clips have been loaded yet. preprocessCategoriesList(); @@ -441,25 +453,25 @@ class CraftingLists extends MovieClip { itemList.InvalidateData(); } - - + + /* PRIVATE FUNCTIONS */ - + private function onHideCategoriesList(event: Object): Void { itemList.listHeight = 579; } - + private function onConfigLoad(event: Object): Void { var config = event.config; _searchKey = config["Input"].controls.pc.search; - + if (_platform != 0) { _sortOrderKey = config["Input"].controls.gamepad.sortOrder; } } - + private function onItemListInvalidate(): Void { // Set enabled == false for empty categories @@ -476,16 +488,16 @@ class CraftingLists extends MovieClip // Grey out any categories that are not enabled CategoriesList.UpdateList(); - - // This is called when an ItemCard list closes(ex. ShowSoulGemList) to refresh ItemCard data + + // This is called when an ItemCard list closes(ex. ShowSoulGemList) to refresh ItemCard data if (itemList.selectedIndex == -1) dispatchEvent({type:"showItemsList", index: -1}); else dispatchEvent({type:"itemHighlightChange", index:itemList.selectedIndex}); } - + private function preprocessCategoriesList(): Void - { + { // EnchantConstruct - Set icon art, but leave default categories as they are. if (_subtypeName == "EnchantConstruct") { CategoriesList.iconArt = [ "ench_disentchant", "separator", "ench_item", "ench_effect", "ench_soul" ]; @@ -493,23 +505,23 @@ class CraftingLists extends MovieClip // Smithing - Set icon art, but leave default categories as they are. } else if (_subtypeName == "Smithing") { CategoriesList.iconArt = [ "smithing" ]; - + // ConstructibleObject - Use a custom categorization scheme. } else if (_subtypeName == "ConstructibleObject") { CategoriesList.iconArt = [ "construct_all", "weapon", "ammo", "armor", "jewelry", "food", "misc" ]; - + replaceConstructObjectCategories(); // Alchemy - Use a custom categorization scheme. - } else if (_subtypeName == "Alchemy") { + } else if (_subtypeName == "Alchemy") { fixupAlchemyCategories(); } - } - + } + private function replaceConstructObjectCategories(): Void { CategoriesList.clearList(); - + CategoriesList.entryList.push( {text: "$ALL", flag: Inventory.FILTERFLAG_CUST_CRAFT_ALL, bDontHide: 1, savedItemIndex: 0, filterFlag: 1, enabled: false}); CategoriesList.entryList.push( @@ -525,17 +537,17 @@ class CraftingLists extends MovieClip CategoriesList.entryList.push( {text: Translator.translate("$Misc"), flag: Inventory.FILTERFLAG_CUST_CRAFT_MISC, bDontHide: 1, savedItemIndex: 0, filterFlag: 1, enabled: false}); } - + private function fixupAlchemyCategories(): Void { // Ingredients category is always enabled CategoriesList.entryList[0].enabled = true; CategoriesList.entryList[0].iconLabel = "ingredients"; - + // Old flag is type. New flag is index (was flag before skse ext.) for (var i=1; i= listEnumeration.size()) _selectedIndex = listEnumeration.size() - 1; UpdateList(); - + if (onInvalidate) onInvalidate(); } - + // @override BasicList public function UpdateList(): Void { @@ -98,9 +100,9 @@ class IconTabList extends BasicList _bRequestUpdate = true; return; } - + var clipCount = listEnumeration.size(); - + setClipCount(clipCount); var cw = 0; @@ -130,10 +132,10 @@ class IconTabList extends BasicList xPos = xPos + iconSize + spacing; entryClip._visible = true; } - + updateSelector(); } - + // Moves the selection left to the next element. Wraps around. public function moveSelectionLeft(): Void { @@ -142,16 +144,17 @@ class IconTabList extends BasicList var curIndex = _selectedIndex; var startIndex = _selectedIndex; - + lastSelectedIndex = curIndex; + do { if (curIndex > 0) { curIndex--; } else { _bFastSwitch = true; - curIndex = listEnumeration.size() - 1; + curIndex = listEnumeration.size() - 1; } } while (curIndex != startIndex && listEnumeration.at(curIndex).enabled == false); - + onItemPress(curIndex, 0); } @@ -160,10 +163,11 @@ class IconTabList extends BasicList { if (disableSelection) return; - + var curIndex = _selectedIndex; var startIndex = _selectedIndex; - + lastSelectedIndex = curIndex; + do { if (curIndex < listEnumeration.size() - 1) { curIndex++; @@ -172,16 +176,16 @@ class IconTabList extends BasicList curIndex = 0; } } while (curIndex != startIndex && listEnumeration.at(curIndex).enabled == false); - + onItemPress(curIndex, 0); } - + // @GFx public function handleInput(details: InputDetails, pathToFocus: Array): Boolean { if (disableInput) return false; - + if (GlobalFunc.IsKeyPressed(details)) { if (details.navEquivalent == NavigationCode.LEFT) { moveSelectionLeft(); @@ -193,68 +197,68 @@ class IconTabList extends BasicList } return false; } - + // @override BasicList public function onEnterFrame(): Void { super.onEnterFrame(); - + if (_bFastSwitch && _selectorPos != _targetSelectorPos) { _selectorPos = _targetSelectorPos; _bFastSwitch = false; refreshSelector(); - + } else if (_selectorPos < _targetSelectorPos) { _selectorPos = _selectorPos + (_targetSelectorPos - _selectorPos) * 0.2 + 1; - + refreshSelector(); - + if (_selectorPos > _targetSelectorPos) _selectorPos = _targetSelectorPos; - + } else if (_selectorPos > _targetSelectorPos) { _selectorPos = _selectorPos - (_selectorPos - _targetSelectorPos) * 0.2 - 1; - + refreshSelector(); - + if (_selectorPos < _targetSelectorPos) _selectorPos = _targetSelectorPos; } } - + // @override BasicList public function onItemPress(a_index: Number, a_keyboardOrMouse: Number): Void { if (disableInput || disableSelection || a_index == -1) return; - + doSetSelectedIndex(a_index, a_keyboardOrMouse); updateSelector(); dispatchEvent({type: "itemPress", index: _selectedIndex, entry: selectedEntry, keyboardOrMouse: a_keyboardOrMouse}); } - + // @override BasicList private function onItemPressAux(a_index: Number, a_keyboardOrMouse: Number, a_buttonIndex: Number): Void { if (disableInput || disableSelection || a_index == -1 || a_buttonIndex != 1) return; - + doSetSelectedIndex(a_index, a_keyboardOrMouse); updateSelector(); dispatchEvent({type: "itemPressAux", index: _selectedIndex, entry: selectedEntry, keyboardOrMouse: a_keyboardOrMouse}); } - + // @override BasicList public function onItemRollOver(a_index: Number): Void { if (disableInput || disableSelection) return; - + isMouseDrivenNav = true; - + if (a_index == _selectedIndex) return; - + var entryClip = getClipByIndex(a_index); entryClip._alpha = 75; } @@ -264,31 +268,31 @@ class IconTabList extends BasicList { if (disableInput || disableSelection) return; - + isMouseDrivenNav = true; - + if (a_index == _selectedIndex) return; - + var entryClip = getClipByIndex(a_index); entryClip._alpha = 50; } /* PRIVATE FUNCTIONS */ - + private function updateSelector(): Void { if (selectorCenter == undefined) { return; } - + if (_selectedIndex == -1) { selectorCenter._visible = false; if (selectorLeft != undefined) selectorLeft._visible = false; - + if (selectorRight != undefined) selectorRight._visible = false; @@ -298,10 +302,10 @@ class IconTabList extends BasicList var selectedClip = _entryClipManager.getClip(_selectedIndex); _targetSelectorPos = selectedClip._x + (selectedClip.background._width - selectorCenter._width) / 2; - + selectorCenter._visible = true; selectorCenter._y = selectedClip._y + selectedClip.background._height; - + if (selectorLeft != undefined) { selectorLeft._visible = true; selectorLeft._x = 0; @@ -330,4 +334,4 @@ class IconTabList extends BasicList selectorRight._width = _totalWidth - selectorRight._x; } } -} \ No newline at end of file +} diff --git a/src/HUDWidgets/activeeffects.fla b/src/HUDWidgets/activeeffects.fla index f8de55123..a6990ae77 100644 Binary files a/src/HUDWidgets/activeeffects.fla and b/src/HUDWidgets/activeeffects.fla differ diff --git a/src/ItemMenus/BarterMenu.as b/src/ItemMenus/BarterMenu.as index b02d25f4a..736d2a1a7 100644 --- a/src/ItemMenus/BarterMenu.as +++ b/src/ItemMenus/BarterMenu.as @@ -1,4 +1,6 @@ import gfx.io.GameDelegate; +import gfx.ui.NavigationCode; +import gfx.ui.InputDetails; import skyui.components.list.ListLayoutManager; import skyui.components.list.TabularList; @@ -7,14 +9,17 @@ import skyui.props.PropertyDataExtender; import skyui.defines.Input; import skyui.defines.Inventory; +import skyui.VRInput; + +import skyui.util.Debug; class BarterMenu extends ItemMenu { #include "../version.as" - + /* PRIVATE VARIABLES */ - + private var _buyMult: Number = 1; private var _sellMult: Number = 1; private var _confirmAmount: Number = 0; @@ -23,13 +28,17 @@ class BarterMenu extends ItemMenu private var _categoryListIconArt: Array; private var _tabBarIconArt: Array; - - + + /* PROPERTIES */ - + // @override ItemMenu public var bEnableTabs: Boolean = true; + private var _handleInputRateLimiter: Boolean; + private var _tabSwitchRateLimiter: Boolean; + + private var vrActionConditions = undefined; /* INITIALIZATION */ @@ -40,23 +49,27 @@ class BarterMenu extends ItemMenu _categoryListIconArt = ["inv_all", "inv_weapons", "inv_armor", "inv_potions", "inv_scrolls", "inv_food", "inv_ingredients", "inv_books", "inv_keys", "inv_misc"]; _tabBarIconArt = ["buy", "sell"]; } - - + + /* PUBLIC FUNCTIONS */ - + public function InitExtensions(): Void { super.InitExtensions(); GameDelegate.addCallBack("SetBarterMultipliers", this, "SetBarterMultipliers"); - + itemCard.addEventListener("messageConfirm",this,"onTransactionConfirm"); itemCard.addEventListener("sliderChange",this,"onQuantitySliderChange"); - + inventoryLists.tabBarIconArt = _tabBarIconArt; - + // Initialize menu-specific list components var categoryList: CategoryList = inventoryLists.categoryList; categoryList.iconArt = _categoryListIconArt; + + // We need access to the categoryList to figure out if want to + // show the new icon or not + inventoryLists.itemList.listState.categoryList = categoryList; } // @override ItemMenu @@ -64,22 +77,65 @@ class BarterMenu extends ItemMenu { super.setConfig(a_config); - var itemList: TabularList = inventoryLists.itemList; + var itemList: TabularList = inventoryLists.itemList; itemList.addDataProcessor(new BarterDataSetter(_buyMult, _sellMult)); itemList.addDataProcessor(new InventoryIconSetter(a_config["Appearance"])); itemList.addDataProcessor(new PropertyDataExtender(a_config["Appearance"], a_config["Properties"], "itemProperties", "itemIcons", "itemCompoundProperties")); - + var layout: ListLayout = ListLayoutManager.createLayout(a_config["ListLayout"], "ItemListLayout"); itemList.layout = layout; // Not 100% happy with doing this here, but has to do for now. if (inventoryLists.categoryList.selectedEntry) layout.changeFilterFlag(inventoryLists.categoryList.selectedEntry.flag); + + inventoryLists.itemList.listState.layout = layout; + } + + // @GFx + public function handleInput(details: InputDetails, pathToFocus: Array): Boolean + { + if(_handleInputRateLimiter) + return true; + skyui.util.Input.rateLimit(this, "_handleInputRateLimiter", 10); + + // If the item card is in focus, don't capture right/left events. + // The item card is likely waiting for quantity slider input. + var bShouldCaptureInput = (pathToFocus[0] != itemCard); + + // Is the user asking a tab switch? + if (bShouldCaptureInput && + Shared.GlobalFunc.IsKeyPressed(details) && + details.navEquivalent == NavigationCode.LEFT && inventoryLists.categoryList.selectionAtBeginningOfSegment()) { + + // Rate limit tab switching so the user won't accidentally tab switch multiple times + if(!_tabSwitchRateLimiter) { + inventoryLists.toggleTab(); + skyui.util.Input.rateLimit(this, "_tabSwitchRateLimiter", 1000/3); + } + + return true; + } + + return super.handleInput(details, pathToFocus); + } + + public function handleVRInput(event): Boolean { + //Debug.dump("BarterMenu::handleVRInput", event); + if (!bFadedIn) + return; + + var action = VRInput.instance.triggeredAction(vrActionConditions, event); + if(action == "search") { + inventoryLists.searchWidget.startInput(); + return true; + } + return false; } private function onExitButtonPress(): Void { - GameDelegate.call("CloseMenu",[]); + closeMenu() } // @API @@ -94,7 +150,7 @@ class BarterMenu extends ItemMenu { itemCard.ShowConfirmMessage(a_warning); } - + // @override ItemMenu public function UpdateItemCardInfo(a_updateObj: Object): Void { @@ -116,13 +172,21 @@ class BarterMenu extends ItemMenu _playerGold = a_playerGold; bottomBar.updateBarterInfo(a_playerUpdateObj, itemCard.itemInfo, a_playerGold, a_vendorGold, a_vendorName); } - - + + /* PRIVATE FUNCTIONS */ - + // @override ItemMenu private function onShowItemsList(event: Object): Void { + setupVRInput(); + + if(!vrActionConditions) { + vrActionConditions = VRInput.instance.getActionConditions("BarterMenu"); + if(VRInput.instance.logDetails) + Debug.dump("vrActionConditions", vrActionConditions); + } + inventoryLists.showItemsList(); //super.onShowItemsList(event); @@ -143,10 +207,10 @@ class BarterMenu extends ItemMenu super.onHideItemsList(event); bottomBar.updateBarterPerItemInfo({type:Inventory.ICT_NONE}); - + updateBottomBar(false); } - + private function onQuantitySliderChange(event: Object): Void { var price = itemCard.itemInfo.value * event.value; @@ -155,7 +219,7 @@ class BarterMenu extends ItemMenu } bottomBar.updateBarterPriceInfo(_playerGold, _vendorGold, itemCard.itemInfo, price); } - + // @override ItemMenu private function onQuantityMenuSelect(event: Object): Void { @@ -183,13 +247,13 @@ class BarterMenu extends ItemMenu bottomBar.updateBarterPriceInfo(_playerGold, _vendorGold); } } - + private function onTransactionConfirm(): Void { doTransaction(_confirmAmount); _confirmAmount = 0; } - + private function doTransaction(a_amount: Number): Void { GameDelegate.call("ItemSelect",[a_amount, itemCard.itemInfo.value, isViewingVendorItems()]); @@ -197,30 +261,38 @@ class BarterMenu extends ItemMenu // Update itemList => dataProcessor => BarterDataSetter updateBarterMultipliers // Update itemCardInfo GameDelegate.call("RequestItemCardInfo",[], this, "UpdateItemCardInfo"); } - + private function isViewingVendorItems(): Boolean { return inventoryLists.categoryList.activeSegment == 0; } - + // @override ItemMenu private function updateBottomBar(a_bSelected: Boolean): Void { navPanel.clearButtons(); - + if (a_bSelected) { - navPanel.addButton({text: (isViewingVendorItems() ? "$Buy" : "$Sell"), controls: Input.Activate}); + var activateControls = skyui.util.Input.pickControls(_platform, {PCArt:"E",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"trigger",MoveArt:"PS3_MOVE",OculusArt:"trigger",WindowsMRArt:"trigger"}); + navPanel.addButton({text: (isViewingVendorItems() ? "$Buy" : "$Sell"), controls: activateControls}); } else { - navPanel.addButton({text: "$Exit", controls: _cancelControls}); - navPanel.addButton({text: "$Search", controls: _searchControls}); + // navPanel.addButton({text: "$Exit", controls: _cancelControls}); + // navPanel.addButton({text: "$Search", controls: _searchControls}); if (_platform != 0) { - navPanel.addButton({text: "$Column", controls: _sortColumnControls}); - navPanel.addButton({text: "$Order", controls: _sortOrderControls}); + navPanel.addButton({text: "$Column", controls: {namedKey: "Action_Up"}}); + navPanel.addButton({text: "$Order", controls: {namedKey: "Action_Double_Up"}}); } - navPanel.addButton({text: "$Switch Tab", controls: _switchControls}); + navPanel.addButton({text: "$Switch Tab", controls: {namedKey: "Action_Left"}}); } - + + navPanel.addButton({ + text: "$Search", + controls: skyui.util.Input.pickControls(_platform, + {PCArt: "Space", ViveArt: "radial_Either_Down", + MoveArt: "PS3_X", OculusArt: "OCC THUMB_REST", WindowsMRArt: "OCC THUMB_REST", + KnucklesArt: "OCC THUMB_REST"})}); + navPanel.updateButtons(true); } -} \ No newline at end of file +} diff --git a/src/ItemMenus/BottomBar.as b/src/ItemMenus/BottomBar.as index cd29b6e41..e6309dd05 100644 --- a/src/ItemMenus/BottomBar.as +++ b/src/ItemMenus/BottomBar.as @@ -296,6 +296,11 @@ class BottomBar extends MovieClip buttonPanel.setPlatform(a_platform, a_bPS3Switch); } + function GoToDefaultFrame() + { + // TODO! Check if the MC actually have a "default" defined + playerInfoCard.gotoAndStop("Default"); + } /* PRIVATE FUNCTIONS */ diff --git a/src/ItemMenus/CategoryList.as b/src/ItemMenus/CategoryList.as index 8d753293b..3b76370fa 100644 --- a/src/ItemMenus/CategoryList.as +++ b/src/ItemMenus/CategoryList.as @@ -54,7 +54,10 @@ class CategoryList extends BasicList // The active segment for divided lists (left or right). private var _activeSegment: Number; - + + // Index of previous selected item + public var lastSelectedIndex: Number; + public function set activeSegment(a_segment: Number) { if (a_segment == _activeSegment) @@ -76,8 +79,29 @@ class CategoryList extends BasicList { return _activeSegment; } - - + + public function selectionAtBeginningOfSegment(): Boolean + { + if(selectedIndex == 0) + return true; + + if(dividerIndex != -1 && selectedIndex == dividerIndex + 1) + return true; + + return false; + } + + public function selectionAtEndOfSegment(): Boolean + { + if(selectedIndex == entryList.length) + return true; + + if(dividerIndex != -1 && selectedIndex == dividerIndex - 1) + return true; + + return false; + } + /* INITIALIZATION */ public function CategoryList() @@ -180,7 +204,8 @@ class CategoryList extends BasicList var curIndex = _selectedIndex; var startIndex = _selectedIndex; - + lastSelectedIndex = curIndex; + do { if (curIndex > _segmentOffset) { curIndex--; @@ -201,7 +226,8 @@ class CategoryList extends BasicList var curIndex = _selectedIndex; var startIndex = _selectedIndex; - + lastSelectedIndex = curIndex; + do { if (curIndex < _segmentOffset + _segmentLength - 1) { curIndex++; diff --git a/src/ItemMenus/ContainerMenu.as b/src/ItemMenus/ContainerMenu.as index 72207e397..0560d68c1 100644 --- a/src/ItemMenus/ContainerMenu.as +++ b/src/ItemMenus/ContainerMenu.as @@ -13,13 +13,15 @@ import skyui.defines.Input; import skyui.defines.Inventory; import skyui.defines.Item; +import skyui.util.Debug; +import skyui.VRInput; class ContainerMenu extends ItemMenu { #include "../version.as" - + /* CONSTANTS */ - + private static var NULL_HAND: Number = -1; private static var RIGHT_HAND: Number = 0; private static var LEFT_HAND: Number = 1; @@ -32,16 +34,21 @@ class ContainerMenu extends ItemMenu private var _equipModeKey: Number; private var _equipModeControls: Object; - - private var _categoryListIconArt: Array; + private var _tabBarIconArt: Array; - - + + private var _pauseInputHandling: Boolean; + private var _pauseTabSwitch: Boolean; + + private var _columnOpRequested: Number; + + private var vrActionConditions = undefined; + /* PROPERTIES */ - + // @API public var bNPCMode: Boolean = false; - + // @override ItemMenu public var bEnableTabs: Boolean = true; @@ -51,49 +58,60 @@ class ContainerMenu extends ItemMenu public function ContainerMenu() { super(); - - _categoryListIconArt = ["inv_all", "inv_weapons", "inv_armor", "inv_potions", "inv_scrolls", "inv_food", "inv_ingredients", "inv_books", "inv_keys", "inv_misc"]; - + _tabBarIconArt = ["take", "give"]; + _pauseInputHandling = false; + _columnOpRequested = 0; } /* PUBLIC FUNCTIONS */ - + public function InitExtensions(): Void { super.InitExtensions(); - + inventoryLists.tabBarIconArt = _tabBarIconArt; // Initialize menu-specific list components - var categoryList: CategoryList = inventoryLists.categoryList; - categoryList.iconArt = _categoryListIconArt; + inventoryLists.categoryList.iconArt = ["inv_all", "inv_weapons", "inv_armor", "inv_potions", "inv_scrolls", "inv_food", "inv_ingredients", "inv_books", "inv_keys", "inv_misc"]; GameDelegate.addCallBack("AttemptEquip", this, "AttemptEquip"); - GameDelegate.addCallBack("XButtonPress", this, "onXButtonPress"); + GameDelegate.addCallBack("AttemptTake",this,"AttemptTake"); + GameDelegate.addCallBack("AttemptTakeAll",this,"AttemptTakeAll"); + GameDelegate.addCallBack("AttemptStore",this,"AttemptStore"); + GameDelegate.addCallBack("AttemptTakeAndEquip",this,"AttemptTakeAndEquip"); + GameDelegate.addCallBack("Vanilla_AttemptEquip",this,"Vanilla_AttemptEquip"); + GameDelegate.addCallBack("Vanilla_XButtonPress",this,"Vanilla_XButtonPress"); + itemCardFadeHolder.StealTextInstance._visible = false; + + // We need access to the categoryList to figure out if want to + // show the new icon or not + inventoryLists.itemList.listState.categoryList = inventoryLists.categoryList; } // @override ItemMenu public function setConfig(a_config: Object): Void { super.setConfig(a_config); - - var itemList: TabularList = inventoryLists.itemList; + + var itemList: TabularList = inventoryLists.itemList; itemList.addDataProcessor(new InventoryDataSetter()); itemList.addDataProcessor(new InventoryIconSetter(a_config["Appearance"])); itemList.addDataProcessor(new PropertyDataExtender(a_config["Appearance"], a_config["Properties"], "itemProperties", "itemIcons", "itemCompoundProperties")); - + var layout: ListLayout = ListLayoutManager.createLayout(a_config["ListLayout"], "ItemListLayout"); itemList.layout = layout; // Not 100% happy with doing this here, but has to do for now. if (inventoryLists.categoryList.selectedEntry) layout.changeFilterFlag(inventoryLists.categoryList.selectedEntry.flag); - + _equipModeKey = a_config["Input"].controls.pc.equipMode; _equipModeControls = {keyCode: _equipModeKey}; + + inventoryLists.itemList.listState.layout = layout; } // @API @@ -106,10 +124,53 @@ class ContainerMenu extends ItemMenu // @GFx public function handleInput(details: InputDetails, pathToFocus: Array): Boolean { + // Rate limit input handling + // For some reason, VR trackpad swipe events seem to be sent in duplictes? + // This means if we're using the trackpad to enable some kind of toggling logic, + // the toggle would always cancel itself out. To get around this, we... + // + // Limit processing of these events to something reasonable. + if(_pauseInputHandling) + return true; + + skyui.util.Input.rateLimit(this, "_pauseInputHandling", 10); + + + // VR specific behavior + // + // Currently, we're not getting a whole lot of keycodes from the game. We cannot + // hookup additional keypresses to UI behavior arbitrarily. However, we can continue + // to make use of NavigationCode.LEFT and RIGHT. + // + // The original SkyUI category list allows the player to wrap around the list. Here, + // we alter the behavior so that... + // + // If we've reached the beginning the category list and the player is still asking to + // navigate left, switch active segment instead. + var bShouldCaptureInput = (pathToFocus[0] != itemCard); + if (bShouldCaptureInput && + Shared.GlobalFunc.IsKeyPressed(details) && + details.navEquivalent == NavigationCode.LEFT && inventoryLists.categoryList.selectionAtBeginningOfSegment()) { + + // Only actually toggle the tab if we're not being rate limited + if(!_pauseTabSwitch) { + inventoryLists.toggleTab(); + + // Rate limit tab switching to 3 times a second + skyui.util.Input.rateLimit(this, "_pauseTabSwitch", 1000/3); + } + + return true; + } + super.handleInput(details,pathToFocus); if (shouldProcessItemsListInput(false)) { - if (_platform == 0 && details.skseKeycode == _equipModeKey && inventoryLists.itemList.selectedIndex != -1) { + if ((_platform == Shared.Platforms.CONTROLLER_PC || + _platform == Shared.Platforms.CONTROLLER_VIVE || + _platform == Shared.Platforms.CONTROLLER_OCULUS || + _platform == Shared.Platforms.CONTROLLER_WINDOWS_MR) + && details.skseKeycode == _equipModeKey && inventoryLists.itemList.selectedIndex != -1) { _bEquipMode = details.value != "keyUp"; updateBottomBar(true); } @@ -118,6 +179,23 @@ class ContainerMenu extends ItemMenu return true; } + public function classname(): String{ + return "Class ContainerMenu"; + } + + public function handleVRInput(event): Boolean { + //Debug.dump("ContainerMenu::handleVRInput", event); + if (!bFadedIn) + return; + + var action = VRInput.instance.triggeredAction(vrActionConditions, event); + if(action == "search") { + inventoryLists.searchWidget.startInput(); + return true; + } + return false; + } + // @override ItemMenu public function UpdateItemCardInfo(a_updateObj: Object): Void { @@ -136,13 +214,32 @@ class ContainerMenu extends ItemMenu // @API public function AttemptEquip(a_slot: Number, a_bCheckOverList: Boolean): Void + { + // Function not present in VR interface file + } + + + // @API + public function SetPlatform(a_platform: Number, a_bPS3Switch: Boolean): Void + { + super.SetPlatform(a_platform,a_bPS3Switch); + + _bEquipMode = (a_platform != 0); + } + + + // @API + public function Vanilla_AttemptEquip(a_slot: Number, a_bCheckOverList: Boolean): Void { var bCheckOverList = a_bCheckOverList == undefined ? true : a_bCheckOverList; - + if (!shouldProcessItemsListInput(bCheckOverList) || !confirmSelectedEntry()) return; - - if (_platform == 0) { + + if (_platform == Shared.Platforms.CONTROLLER_PC || + _platform == Shared.Platforms.CONTROLLER_VIVE || + _platform == Shared.Platforms.CONTROLLER_OCULUS || + _platform == Shared.Platforms.CONTROLLER_WINDOWS_MR) { if (_bEquipMode) startItemEquip(a_slot); else @@ -153,27 +250,54 @@ class ContainerMenu extends ItemMenu } // @API - public function onXButtonPress(): Void + function AttemptTake(abCheckOverList) + { + var bCheckOverList = abCheckOverList == undefined ? true : abCheckOverList; + if(shouldProcessItemsListInput(bCheckOverList)) + startItemTransfer(); + } + + // @API + function AttemptTakeAndEquip(aiSlot, abCheckOverList) + { + var bCheckOverList = abCheckOverList == undefined?true:abCheckOverList; + if(shouldProcessItemsListInput(bCheckOverList)) + startItemEquip(aiSlot); + } + + // @API + function AttemptTakeAll() + { + if(isViewingContainer() && !bNPCMode) + GameDelegate.call("TakeAllItems",[]); + } + + // @API + function AttemptStore() + { + if(!isViewingContainer()) + startItemTransfer(); + } + + // @API + public function Vanilla_XButtonPress(): Void { // If we are zoomed into an item, do nothing if (!bFadedIn) return; - + if (isViewingContainer() && !bNPCMode) GameDelegate.call("TakeAllItems",[]); - } - - // @API - public function SetPlatform(a_platform: Number, a_bPS3Switch: Boolean): Void - { - super.SetPlatform(a_platform,a_bPS3Switch); - _bEquipMode = (a_platform != 0); + // TODO! Is this really required? + // Present in SE and VR but not in SkyUI. + // Maybe skyui already takes care of this case elsewhere? + else if (!isViewingContainer()) + startItemTransfer(); } - - + /* PRIVATE FUNCTIONS */ - + private function onItemSelect(event: Object): Void { if (event.keyboardOrMouse != 0) { @@ -191,7 +315,7 @@ class ContainerMenu extends ItemMenu if (event.menu == "quantity") GameDelegate.call("QuantitySliderOpen", [event.opening]); } - + // @override ItemMenu private function onItemHighlightChange(event: Object): Void { @@ -204,6 +328,16 @@ class ContainerMenu extends ItemMenu // @override ItemMenu private function onShowItemsList(event: Object): Void { + // For some unknown reason, OnShow() does not get called for the container menu. + // + setupVRInput(); + + if(!vrActionConditions) { + vrActionConditions = VRInput.instance.getActionConditions("ContainerMenu"); + if(VRInput.instance.logDetails) + Debug.dump("vrActionConditions", vrActionConditions); + } + inventoryLists.showItemsList(); } @@ -241,54 +375,80 @@ class ContainerMenu extends ItemMenu GameDelegate.call("DisabledItemSelect",[]); } - + // @override ItemMenu private function updateBottomBar(a_bSelected: Boolean): Void { navPanel.clearButtons(); - + + var equipControl = skyui.util.Input.pickControls(_platform, {PCArt:"M1M2",XBoxArt:"360_LTRT",PS3Art:"PS3_LTRT",ViveArt:"trigger_LR",MoveArt:"PS3_A",OculusArt:"trigger_LR",WindowsMRArt:"trigger_LR"}); + var takeAllControl = skyui.util.Input.pickControls(_platform, {PCArt:"R",XBoxArt:"360_X",PS3Art:"PS3_X",ViveArt:"radial_Either_Left",MoveArt:"PS3_B",OculusArt:"OCC_Y",WindowsMRArt:"radial_Either_Left"}); + var activateControl = skyui.util.Input.pickControls(_platform, {PCArt:"E",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"radial_Either_Center",MoveArt:"PS3_MOVE",OculusArt:"OCC_A",WindowsMRArt:"radial_Either_Center"}); + var favoriteControl = skyui.util.Input.pickControls(_platform, {PCArt:"F",XBoxArt:"360_Y",PS3Art:"PS3_Y",ViveArt:"radial_Either_Right",MoveArt:"PS3_Y",OculusArt:"OCC_B",WindowsMRArt:"radial_Either_Right"}); + + // Setup the main action button + var equipArt = {PCArt:"M1M2", XBoxArt:"360_LTRT", PS3Art:"PS3_LTRT", ViveArt: "trigger_LR", + MoveArt:"PS3_MOVE", OculusArt: "trigger_LR", WindowsMRArt: "trigger_LR"}; + var useItemArt = {PCArt:"E",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"trigger",MoveArt:"PS3_MOVE",OculusArt:"trigger",WindowsMRArt:"trigger"}; + + var actionText = undefined; + var actionArt = undefined; + switch(itemCard.itemInfo.type) + { + case Inventory.ICT_BOOK: + actionText = "$Read"; + actionArt = useItemArt; + break; + case Inventory.ICT_POTION: + actionText = "$Use"; + actionArt = useItemArt; + break; + case Inventory.ICT_FOOD: + case Inventory.ICT_INGREDIENT: + actionText = "$Eat"; + actionArt = useItemArt; + break; + case Inventory.ICT_ARMOR: + case Inventory.ICT_WEAPON: + actionText = "$Equip"; + actionArt = equipArt; + break; + } + + if (actionArt != undefined) + navPanel.addButton({text: actionText, controls: skyui.util.Input.pickControls(_platform, actionArt)}); + if (a_bSelected && inventoryLists.itemList.selectedIndex != -1 && inventoryLists.currentState == InventoryLists.SHOW_PANEL) { if (isViewingContainer()) { - if (_platform != 0) { - navPanel.addButton({text: "$Take", controls: Input.Activate}); - navPanel.addButton(getEquipButtonData(itemCard.itemInfo.type, true)); - } else { - if (_bEquipMode) - navPanel.addButton(getEquipButtonData(itemCard.itemInfo.type)); - else - navPanel.addButton({text: "$Take", controls: Input.Activate}); - } + navPanel.addButton({text: "$Take", controls: activateControl}); if (!bNPCMode) - navPanel.addButton({text: "$Take All", controls: Input.XButton}); + navPanel.addButton({text: "$Take All", controls: takeAllControl}); } else { - if (_platform != 0) { - navPanel.addButton({text: bNPCMode ? "$Give" : "$Store", controls: Input.Activate}); - navPanel.addButton(getEquipButtonData(itemCard.itemInfo.type, true)); - } else { - if (_bEquipMode) - navPanel.addButton(getEquipButtonData(itemCard.itemInfo.type)); - else - navPanel.addButton({text: bNPCMode ? "$Give" : "$Store", controls: Input.Activate}); - } - - navPanel.addButton({text: itemCard.itemInfo.favorite ? "$Unfavorite" : "$Favorite", controls: Input.YButton}); + navPanel.addButton({text: bNPCMode ? "$Give" : "$Store", controls: activateControl}); + navPanel.addButton({text: itemCard.itemInfo.favorite ? "$Unfavorite" : "$Favorite", controls: favoriteControl}); } - if (!_bEquipMode) - navPanel.addButton({text: "$Equip Mode", controls: _equipModeControls}); + // if (!_bEquipMode) + // navPanel.addButton({text: "$Equip Mode", controls: _equipModeControls}); } else { - navPanel.addButton({text: "$Exit", controls: _cancelControls}); - navPanel.addButton({text: "$Search", controls: _searchControls}); + // navPanel.addButton({text: "$Exit", controls: _cancelControls}); if (_platform != 0) { - navPanel.addButton({text: "$Column", controls: _sortColumnControls}); - navPanel.addButton({text: "$Order", controls: _sortOrderControls}); + navPanel.addButton({text: "$Column", controls: {namedKey: "Action_Up"}}); + navPanel.addButton({text: "$Order", controls: {namedKey: "Action_Double_Up"}}); } - navPanel.addButton({text: "$Switch Tab", controls: _switchControls}); - + navPanel.addButton({text: "$Switch Tab", controls: {namedKey: "Action_Left"}}); + if (isViewingContainer() && !bNPCMode) - navPanel.addButton({text: "$Take All", controls: Input.XButton}); + navPanel.addButton({text: "$Take All", controls: takeAllControl}); } - + + navPanel.addButton({ + text: "$Search", + controls: skyui.util.Input.pickControls(_platform, + {PCArt: "Space", ViveArt: "radial_Either_Down", + MoveArt: "PS3_X", OculusArt: "OCC THUMB_REST", WindowsMRArt: "OCC THUMB_REST", + KnucklesArt: "OCC THUMB_REST"})}); + navPanel.updateButtons(true); } @@ -322,7 +482,7 @@ class ContainerMenu extends ItemMenu if (!checkBook(inventoryLists.itemList.selectedEntry)) checkPoison(inventoryLists.itemList.selectedEntry); } - + private function isViewingContainer(): Boolean { return (inventoryLists.categoryList.activeSegment == 0); @@ -351,4 +511,4 @@ class ContainerMenu extends ItemMenu return true; } -} \ No newline at end of file +} diff --git a/src/ItemMenus/GiftMenu.as b/src/ItemMenus/GiftMenu.as index d8e183c25..6da0d6b4c 100644 --- a/src/ItemMenus/GiftMenu.as +++ b/src/ItemMenus/GiftMenu.as @@ -7,18 +7,21 @@ import skyui.props.PropertyDataExtender; import skyui.defines.Input; import skyui.defines.Inventory; +import skyui.util.Debug; +import skyui.VRInput; class GiftMenu extends ItemMenu { #include "../version.as" - + /* PRIVATE VARIABLES */ - + private var _bGivingGifts: Boolean = true; private var _categoryListIconArt: Array; + private var vrActionConditions = undefined; /* INITIALIZATION */ @@ -28,15 +31,15 @@ class GiftMenu extends ItemMenu _categoryListIconArt = ["inv_all", "inv_weapons", "inv_armor", "inv_potions", "inv_scrolls", "inv_food", "inv_ingredients", "inv_books", "inv_keys", "inv_misc"]; } - - + + /* PUBLIC FUNCTIONS */ - + public function InitExtensions(): Void { super.InitExtensions(); GameDelegate.addCallBack("SetMenuInfo", this, "SetMenuInfo"); - + // Initialize menu-specific list components var categoryList: CategoryList = inventoryLists.categoryList; categoryList.iconArt = _categoryListIconArt; @@ -47,11 +50,11 @@ class GiftMenu extends ItemMenu { super.setConfig(a_config); - var itemList: TabularList = inventoryLists.itemList; + var itemList: TabularList = inventoryLists.itemList; itemList.addDataProcessor(new InventoryDataSetter()); itemList.addDataProcessor(new InventoryIconSetter(a_config["Appearance"])); itemList.addDataProcessor(new PropertyDataExtender(a_config["Appearance"], a_config["Properties"], "itemProperties", "itemIcons", "itemCompoundProperties")); - + var layout: ListLayout = ListLayoutManager.createLayout(a_config["ListLayout"], "ItemListLayout"); itemList.layout = layout; @@ -71,7 +74,7 @@ class GiftMenu extends ItemMenu public function SetMenuInfo(a_bGivingGifts: Boolean, a_bUseFavorPoints: Boolean): Void { _bGivingGifts = a_bGivingGifts; - + if (!a_bUseFavorPoints) bottomBar.hidePlayerInfo(); } @@ -82,12 +85,19 @@ class GiftMenu extends ItemMenu bottomBar.setGiftInfo(a_favorPoints); } - + /* PRIVATE FUNCTIONS */ // @override ItemMenu private function onShowItemsList(event: Object): Void { + setupVRInput(); + if(!vrActionConditions) { + vrActionConditions = VRInput.instance.getActionConditions("GiftMenu"); + if(VRInput.instance.logDetails) + Debug.dump("vrActionConditions", vrActionConditions); + } + // Force select of first category because RestoreIndices isn't called for GiftMenu // TODO: Do this in the correct place, i.e. InventoryLists.SetCategoriesList(); var categoryList: CategoryList = inventoryLists.categoryList; @@ -104,16 +114,16 @@ class GiftMenu extends ItemMenu super.onHideItemsList(event); bottomBar.updatePerItemInfo({type:Inventory.ICT_NONE}); - + updateBottomBar(false); } private function onItemHighlightChange(event: Object): Void { super.onItemHighlightChange(event); - + if (event.index != -1) - updateBottomBar(true); + updateBottomBar(true); } // @override ItemMenu @@ -123,24 +133,47 @@ class GiftMenu extends ItemMenu if (event.menu == "quantity") GameDelegate.call("QuantitySliderOpen", [event.opening]); } - + // @override ItemMenu private function updateBottomBar(a_bSelected: Boolean): Void { navPanel.clearButtons(); - + + var activateControls = skyui.util.Input.pickControls(_platform, + {PCArt:"E",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"trigger",MoveArt:"PS3_MOVE",OculusArt:"trigger",WindowsMRArt:"trigger"}); + if (a_bSelected) { - navPanel.addButton({text: (_bGivingGifts ? "$Give" : "$Take"), controls: Input.Activate}); + navPanel.addButton({text: (_bGivingGifts ? "$Give" : "$Take"), controls: activateControls}); } else { navPanel.addButton({text: "$Exit", controls: _cancelControls}); navPanel.addButton({text: "$Search", controls: _searchControls}); if (_platform != 0) { - navPanel.addButton({text: "$Column", controls: _sortColumnControls}); - navPanel.addButton({text: "$Order", controls: _sortOrderControls}); + navPanel.addButton({text: "$Column", controls: {namedKey: "Action_Up"}}); + navPanel.addButton({text: "$Order", controls: {namedKey: "Action_Double_Up"}}); } } - + + navPanel.addButton({ + text: "$Search", + controls: skyui.util.Input.pickControls(_platform, + {PCArt: "Space", ViveArt: "radial_Either_Down", + MoveArt: "PS3_X", OculusArt: "OCC THUMB_REST", WindowsMRArt: "OCC THUMB_REST", + KnucklesArt: "OCC THUMB_REST"})}); + navPanel.updateButtons(true); } -} \ No newline at end of file + + public function handleVRInput(event): Boolean { + //Debug.dump("GiftMenu::handleVRInput", event); + if (!bFadedIn) + return; + + var action = VRInput.instance.triggeredAction(vrActionConditions, event); + if(action == "search") { + inventoryLists.searchWidget.startInput(); + return true; + } + return false; + } +} diff --git a/src/ItemMenus/InventoryDataSetter.as b/src/ItemMenus/InventoryDataSetter.as index 6378e927a..cf3ec3e12 100644 --- a/src/ItemMenus/InventoryDataSetter.as +++ b/src/ItemMenus/InventoryDataSetter.as @@ -11,13 +11,13 @@ import skyui.defines.Inventory; class InventoryDataSetter extends ItemcardDataExtender { /* INITIALIZATION */ - + public function InventoryDataSetter() { super(); } - - + + /* PUBLIC FUNCTIONS */ // @override ItemcardDataExtender @@ -31,22 +31,22 @@ class InventoryDataSetter extends ItemcardDataExtender a_entryObject.infoValue = (a_itemInfo.value > 0) ? (Math.round(a_itemInfo.value * 100) / 100) : null; a_entryObject.infoWeight =(a_itemInfo.weight > 0) ? (Math.round(a_itemInfo.weight * 100) / 100) : null; - + a_entryObject.infoValueWeight = (a_itemInfo.weight > 0 && a_itemInfo.value > 0) ? Math.round(a_itemInfo.value / a_itemInfo.weight) : null; switch (a_entryObject.formType) { case Form.TYPE_SCROLLITEM: a_entryObject.subTypeDisplay = Translator.translate("$Scroll"); - + a_entryObject.duration = (a_entryObject.duration > 0) ? (Math.round(a_entryObject.duration * 100) / 100) : null; a_entryObject.magnitude = (a_entryObject.magnitude > 0) ? (Math.round(a_entryObject.magnitude * 100) / 100) : null; - + break; case Form.TYPE_ARMOR: a_entryObject.isEnchanted = (a_itemInfo.effects != ""); a_entryObject.infoArmor = (a_itemInfo.armor > 0) ? (Math.round(a_itemInfo.armor * 100) / 100) : null; - + processArmorClass(a_entryObject); processArmorPartMask(a_entryObject); processMaterialKeywords(a_entryObject); @@ -73,9 +73,9 @@ class InventoryDataSetter extends ItemcardDataExtender case Form.TYPE_WEAPON: a_entryObject.isEnchanted = (a_itemInfo.effects != ""); - a_entryObject.isPoisoned = (a_itemInfo.poisoned == true); + a_entryObject.isPoisoned = (a_itemInfo.poisoned == true); a_entryObject.infoDamage = (a_itemInfo.damage > 0) ? (Math.round(a_itemInfo.damage * 100) / 100) : null; - + processWeaponType(a_entryObject); processMaterialKeywords(a_entryObject); processWeaponBaseId(a_entryObject); @@ -84,7 +84,7 @@ class InventoryDataSetter extends ItemcardDataExtender case Form.TYPE_AMMO: a_entryObject.isEnchanted = (a_itemInfo.effects != ""); a_entryObject.infoDamage = (a_itemInfo.damage > 0) ? (Math.round(a_itemInfo.damage * 100) / 100) : null; - + processAmmoType(a_entryObject); processMaterialKeywords(a_entryObject); processAmmoBaseId(a_entryObject); @@ -97,7 +97,7 @@ class InventoryDataSetter extends ItemcardDataExtender case Form.TYPE_POTION: a_entryObject.duration = (a_entryObject.duration > 0) ? (Math.round(a_entryObject.duration * 100) / 100) : null; a_entryObject.magnitude = (a_entryObject.magnitude > 0) ? (Math.round(a_entryObject.magnitude * 100) / 100) : null; - + processPotionType(a_entryObject); break; @@ -116,7 +116,7 @@ class InventoryDataSetter extends ItemcardDataExtender { if (a_entryObject.weightClass == Armor.WEIGHT_NONE) a_entryObject.weightClass = null; - + a_entryObject.weightClassDisplay = Translator.translate("$Other"); switch (a_entryObject.weightClass) { @@ -138,7 +138,7 @@ class InventoryDataSetter extends ItemcardDataExtender } else if (a_entryObject.keywords["VendorItemJewelry"] != undefined) { a_entryObject.weightClass = Armor.WEIGHT_JEWELRY; a_entryObject.weightClassDisplay = Translator.translate("$Jewelry"); - } + } } } @@ -154,62 +154,62 @@ class InventoryDataSetter extends ItemcardDataExtender a_entryObject.keywords["WeapMaterialDaedric"] != undefined) { a_entryObject.material = Material.DAEDRIC; a_entryObject.materialDisplay = Translator.translate("$Daedric"); - + } else if (a_entryObject.keywords["ArmorMaterialDragonplate"] != undefined) { a_entryObject.material = Material.DRAGONPLATE; a_entryObject.materialDisplay = Translator.translate("$Dragonplate"); - + } else if (a_entryObject.keywords["ArmorMaterialDragonscale"] != undefined) { a_entryObject.material = Material.DRAGONSCALE; a_entryObject.materialDisplay = Translator.translate("$Dragonscale"); - + } else if (a_entryObject.keywords["ArmorMaterialDwarven"] != undefined || a_entryObject.keywords["WeapMaterialDwarven"] != undefined) { a_entryObject.material = Material.DWARVEN; a_entryObject.materialDisplay = Translator.translate("$Dwarven"); - + } else if (a_entryObject.keywords["ArmorMaterialEbony"] != undefined || a_entryObject.keywords["WeapMaterialEbony"] != undefined) { a_entryObject.material = Material.EBONY; a_entryObject.materialDisplay = Translator.translate("$Ebony"); - + } else if (a_entryObject.keywords["ArmorMaterialElven"] != undefined || a_entryObject.keywords["WeapMaterialElven"] != undefined) { a_entryObject.material = Material.ELVEN; a_entryObject.materialDisplay = Translator.translate("$Elven"); - + } else if (a_entryObject.keywords["ArmorMaterialElvenGilded"] != undefined) { a_entryObject.material = Material.ELVENGILDED; a_entryObject.materialDisplay = Translator.translate("$Elven Gilded"); - + } else if (a_entryObject.keywords["ArmorMaterialGlass"] != undefined || a_entryObject.keywords["WeapMaterialGlass"] != undefined) { a_entryObject.material = Material.GLASS; a_entryObject.materialDisplay = Translator.translate("$Glass"); - + } else if (a_entryObject.keywords["ArmorMaterialHide"] != undefined) { a_entryObject.material = Material.HIDE; a_entryObject.materialDisplay = Translator.translate("$Hide"); - + } else if (a_entryObject.keywords["ArmorMaterialImperialHeavy"] != undefined || a_entryObject.keywords["ArmorMaterialImperialLight"] != undefined || a_entryObject.keywords["WeapMaterialImperial"] != undefined) { a_entryObject.material = Material.IMPERIAL; a_entryObject.materialDisplay = Translator.translate("$Imperial"); - + } else if (a_entryObject.keywords["ArmorMaterialImperialStudded"] != undefined) { a_entryObject.material = Material.IMPERIALSTUDDED; a_entryObject.materialDisplay = Translator.translate("$Studded"); - + } else if (a_entryObject.keywords["ArmorMaterialIron"] != undefined || a_entryObject.keywords["WeapMaterialIron"] != undefined) { a_entryObject.material = Material.IRON; a_entryObject.materialDisplay = Translator.translate("$Iron"); - + } else if (a_entryObject.keywords["ArmorMaterialIronBanded"] != undefined) { a_entryObject.material = Material.IRONBANDED; a_entryObject.materialDisplay = Translator.translate("$Iron Banded"); - + // Must be above leather, vampire armor has 2 material keywords } else if (a_entryObject.keywords["DLC1ArmorMaterialVampire"] != undefined) { a_entryObject.material = Material.VAMPIRE; @@ -218,54 +218,54 @@ class InventoryDataSetter extends ItemcardDataExtender } else if (a_entryObject.keywords["ArmorMaterialLeather"] != undefined) { a_entryObject.material = Material.LEATHER; a_entryObject.materialDisplay = Translator.translate("$Leather"); - + } else if (a_entryObject.keywords["ArmorMaterialOrcish"] != undefined || a_entryObject.keywords["WeapMaterialOrcish"] != undefined) { a_entryObject.material = Material.ORCISH; a_entryObject.materialDisplay = Translator.translate("$Orcish"); - + } else if (a_entryObject.keywords["ArmorMaterialScaled"] != undefined) { a_entryObject.material = Material.SCALED; a_entryObject.materialDisplay = Translator.translate("$Scaled"); - + } else if (a_entryObject.keywords["ArmorMaterialSteel"] != undefined || a_entryObject.keywords["WeapMaterialSteel"] != undefined) { a_entryObject.material = Material.STEEL; a_entryObject.materialDisplay = Translator.translate("$Steel"); - + } else if (a_entryObject.keywords["ArmorMaterialSteelPlate"] != undefined) { a_entryObject.material = Material.STEELPLATE; a_entryObject.materialDisplay = Translator.translate("$Steel Plate"); - + } else if (a_entryObject.keywords["ArmorMaterialStormcloak"] != undefined) { a_entryObject.material = Material.STORMCLOAK; a_entryObject.materialDisplay = Translator.translate("$Stormcloak"); - + } else if (a_entryObject.keywords["ArmorMaterialStudded"] != undefined) { a_entryObject.material = Material.STUDDED; a_entryObject.materialDisplay = Translator.translate("$Studded"); - + } else if (a_entryObject.keywords["DLC1ArmorMaterialDawnguard"] != undefined) { a_entryObject.material = Material.DAWNGUARD; a_entryObject.materialDisplay = Translator.translate("$Dawnguard"); - + } else if (a_entryObject.keywords["DLC1ArmorMaterialFalmerHardened"] != undefined || a_entryObject.keywords["DLC1ArmorMaterialFalmerHeavy"] != undefined) { a_entryObject.material = Material.FALMERHARDENED; a_entryObject.materialDisplay = Translator.translate("$Falmer Hardened"); - + } else if (a_entryObject.keywords["DLC1ArmorMaterialHunter"] != undefined) { a_entryObject.material = Material.HUNTER; a_entryObject.materialDisplay = Translator.translate("$Hunter"); - + } else if (a_entryObject.keywords["DLC1LD_CraftingMaterialAetherium"] != undefined) { a_entryObject.material = Material.AETHERIUM; a_entryObject.materialDisplay = Translator.translate("$Aetherium"); - + } else if (a_entryObject.keywords["DLC1WeapMaterialDragonbone"] != undefined) { a_entryObject.material = Material.DRAGONBONE; a_entryObject.materialDisplay = Translator.translate("$Dragonbone"); - + } else if (a_entryObject.keywords["DLC2ArmorMaterialBonemoldHeavy"] != undefined || a_entryObject.keywords["DLC2ArmorMaterialBonemoldLight"] != undefined) { a_entryObject.material = Material.BONEMOLD; @@ -275,17 +275,17 @@ class InventoryDataSetter extends ItemcardDataExtender a_entryObject.keywords["DLC2ArmorMaterialChitinLight"] != undefined) { a_entryObject.material = Material.CHITIN; a_entryObject.materialDisplay = Translator.translate("$Chitin"); - + } else if (a_entryObject.keywords["DLC2ArmorMaterialMoragTong"] != undefined) { a_entryObject.material = Material.MORAGTONG; a_entryObject.materialDisplay = Translator.translate("$Morag Tong"); - + } else if (a_entryObject.keywords["DLC2ArmorMaterialNordicHeavy"] != undefined || a_entryObject.keywords["DLC2ArmorMaterialNordicLight"] != undefined || a_entryObject.keywords["DLC2WeaponMaterialNordic"] != undefined) { a_entryObject.material = Material.NORDIC; a_entryObject.materialDisplay = Translator.translate("$Nordic"); - + } else if (a_entryObject.keywords["DLC2ArmorMaterialStalhrimHeavy"] != undefined || a_entryObject.keywords["DLC2ArmorMaterialStalhrimLight"] != undefined || a_entryObject.keywords["DLC2WeaponMaterialStalhrim"] != undefined) { @@ -295,27 +295,27 @@ class InventoryDataSetter extends ItemcardDataExtender a_entryObject.material = Material.DEATHBRAND; a_entryObject.materialDisplay = Translator.translate("$Deathbrand"); } - + } else if (a_entryObject.keywords["WeapMaterialDraugr"] != undefined) { a_entryObject.material = Material.DRAUGR; a_entryObject.materialDisplay = Translator.translate("$Draugr"); - + } else if (a_entryObject.keywords["WeapMaterialDraugrHoned"] != undefined) { a_entryObject.material = Material.DRAUGRHONED; a_entryObject.materialDisplay = Translator.translate("$Draugr Honed"); - + } else if (a_entryObject.keywords["WeapMaterialFalmer"] != undefined) { a_entryObject.material = Material.FALMER; a_entryObject.materialDisplay = Translator.translate("$Falmer"); - + } else if (a_entryObject.keywords["WeapMaterialFalmerHoned"] != undefined) { a_entryObject.material = Material.FALMERHONED; a_entryObject.materialDisplay = Translator.translate("$Falmer Honed"); - + } else if (a_entryObject.keywords["WeapMaterialSilver"] != undefined) { a_entryObject.material = Material.SILVER; a_entryObject.materialDisplay = Translator.translate("$Silver"); - + } else if (a_entryObject.keywords["WeapMaterialWood"] != undefined) { a_entryObject.material = Material.WOOD; a_entryObject.materialDisplay = Translator.translate("$Wood"); @@ -553,7 +553,7 @@ class InventoryDataSetter extends ItemcardDataExtender a_entryObject.subTypeDisplay = Translator.translate("$Book"); a_entryObject.isRead = ((a_entryObject.flags & Item.BOOKFLAG_READ) != 0); - + if (a_entryObject.bookType == Item.BOOKTYPE_NOTE) { a_entryObject.subType = Item.BOOK_NOTE; a_entryObject.subTypeDisplay = Translator.translate("$Note"); @@ -571,9 +571,14 @@ class InventoryDataSetter extends ItemcardDataExtender } } + // Mirrors logic in SKSE + private function isBolt(a_entryObject: Object): Boolean { + return (a_entryObject.flags & Weapon.AMMOFLAG_NONBOLT) == 0; + } + private function processAmmoType(a_entryObject: Object): Void { - if ((a_entryObject.flags & Weapon.AMMOFLAG_NONBOLT) != 0) { + if (!isBolt(a_entryObject)) { a_entryObject.subType = Weapon.AMMO_ARROW; a_entryObject.subTypeDisplay = Translator.translate("$Arrow"); } else { @@ -681,7 +686,7 @@ class InventoryDataSetter extends ItemcardDataExtender a_entryObject.subType = Item.POTION_DRINK; a_entryObject.subTypeDisplay = Translator.translate("$Drink"); } - + } else if ((a_entryObject.flags & Item.ALCHFLAG_POISON) != 0) { a_entryObject.subType = Item.POTION_POISON; a_entryObject.subTypeDisplay = Translator.translate("$Poison"); @@ -787,17 +792,17 @@ class InventoryDataSetter extends ItemcardDataExtender a_entryObject.subType = Item.MISC_TOY; a_entryObject.subTypeDisplay = Translator.translate("$Toy"); - + } else if (a_entryObject.keywords["BYOHHouseCraftingCategoryWeaponRacks"] != undefined || - a_entryObject.keywords["BYOHHouseCraftingCategoryShelf"] != undefined || + a_entryObject.keywords["BYOHHouseCraftingCategoryShelf"] != undefined || a_entryObject.keywords["BYOHHouseCraftingCategoryFurniture"] != undefined || - a_entryObject.keywords["BYOHHouseCraftingCategoryExterior"] != undefined || + a_entryObject.keywords["BYOHHouseCraftingCategoryExterior"] != undefined || a_entryObject.keywords["BYOHHouseCraftingCategoryContainers"] != undefined || - a_entryObject.keywords["BYOHHouseCraftingCategoryBuilding"] != undefined || + a_entryObject.keywords["BYOHHouseCraftingCategoryBuilding"] != undefined || a_entryObject.keywords["BYOHHouseCraftingCategorySmithing"] != undefined) { a_entryObject.subType = Item.MISC_HOUSEPART; a_entryObject.subTypeDisplay = Translator.translate("$House Part"); - + } else if (a_entryObject.keywords["VendorItemDaedricArtifact"] != undefined) { a_entryObject.subType = Item.MISC_ARTIFACT; @@ -876,4 +881,4 @@ class InventoryDataSetter extends ItemcardDataExtender break; } } -} \ No newline at end of file +} diff --git a/src/ItemMenus/InventoryListEntry.as b/src/ItemMenus/InventoryListEntry.as index 366e9f1b2..4c8b494c5 100644 --- a/src/ItemMenus/InventoryListEntry.as +++ b/src/ItemMenus/InventoryListEntry.as @@ -6,65 +6,68 @@ import skyui.components.list.TabularListEntry; import skyui.components.list.ListState; import skyui.util.ConfigManager; +import skyui.util.Debug; + class InventoryListEntry extends TabularListEntry { /* CONSTANTS */ - + private static var STATES = ["None", "Equipped", "LeftEquip", "RightEquip", "LeftAndRightEquip"]; /* PRIVATE VARIABLES */ - + private var _iconLabel: String; private var _iconColor: Number; - + /* STAGE ELMENTS */ - + public var itemIcon: MovieClip; public var equipIcon: MovieClip; - + public var bestIcon: MovieClip; public var favoriteIcon: MovieClip; public var poisonIcon: MovieClip; public var stolenIcon: MovieClip; public var enchIcon: MovieClip; public var readIcon: MovieClip; - - + public var newItemIndicator: MovieClip; + + /* INITIALIZATION */ - + // @override TabularListEntry public function initialize(a_index: Number, a_state: ListState): Void { super.initialize(); - + var iconLoader = new MovieClipLoader(); iconLoader.addListener(this); iconLoader.loadClip(a_state.iconSource, itemIcon); - + itemIcon._visible = false; equipIcon._visible = false; - + for (var i = 0; this["textField" + i] != undefined; i++) this["textField" + i]._visible = false; } - - + + /* PUBLIC FUNCTIONS */ - + // @override TabularListEntry public function setSpecificEntryLayout(a_entryObject: Object, a_state: ListState): Void { var iconY = TabularList(a_state.list).layout.entryHeight * 0.25; var iconSize = TabularList(a_state.list).layout.entryHeight * 0.5; - + bestIcon._height = bestIcon._width = iconSize; favoriteIcon._height = favoriteIcon._width = iconSize; poisonIcon._height = poisonIcon._width = iconSize; stolenIcon._height = stolenIcon._width = iconSize; enchIcon._height = enchIcon._width = iconSize; readIcon._height = readIcon._width = iconSize; - + bestIcon._y = iconY; favoriteIcon._y = iconY; poisonIcon._y = iconY; @@ -119,7 +122,7 @@ class InventoryListEntry extends TabularListEntry a_entryField.autoSize = "left"; a_entryField.SetText(text); - + formatColor(a_entryField, a_entryObject, a_state); // BestInClass icon @@ -128,6 +131,20 @@ class InventoryListEntry extends TabularListEntry // All icons have the same size var iconSpace = bestIcon._width * 1.25; + // FIXME!!! Need a better to figure out if we're actually looking at the player's inventory. + // Presumably, the player container is always shown as the "right" segment. + var shouldShowNewIndicator = false + if(a_state.categoryList) { + if (a_state.categoryList.activeSegment == CategoryList.RIGHT_SEGMENT && a_entryObject.newItem == true) { + shouldShowNewIndicator = true + } + } else if (a_entryObject.newItem == true) { + shouldShowNewIndicator = true + } + + newItemIndicator._visible = shouldShowNewIndicator; + newItemIndicator._height = this._height - 2.5; + if (a_entryObject.bestInClass == true) { bestIcon._x = iconPos; iconPos = iconPos + iconSpace; @@ -182,14 +199,14 @@ class InventoryListEntry extends TabularListEntry readIcon.gotoAndStop("hide"); } } - + // @override TabularEntry public function formatText(a_entryField: Object, a_entryObject: Object, a_state: ListState): Void { formatColor(a_entryField, a_entryObject, a_state); } - - + + /* PRIVATE FUNCTIONS */ // @implements MovieClipLoader @@ -198,22 +215,22 @@ class InventoryListEntry extends TabularListEntry a_icon.gotoAndStop(_iconLabel); changeIconColor(a_icon, _iconColor); } - + private function formatColor(a_entryField: Object, a_entryObject: Object, a_state: ListState): Void { // Negative Effect if (a_entryObject.negativeEffect == true) a_entryField.textColor = a_entryObject.enabled == false ? a_state.negativeDisabledColor : a_state.negativeEnabledColor; - + // Stolen else if (a_entryObject.infoIsStolen == true || a_entryObject.isStealing == true) a_entryField.textColor = a_entryObject.enabled == false ? a_state.stolenDisabledColor : a_state.stolenEnabledColor; - + // Default else a_entryField.textColor = a_entryObject.enabled == false ? a_state.defaultDisabledColor : a_state.defaultEnabledColor; } - + private function changeIconColor(a_icon: MovieClip, a_rgb: Number): Void { var element: Object; @@ -231,4 +248,4 @@ class InventoryListEntry extends TabularListEntry } } } -} \ No newline at end of file +} diff --git a/src/ItemMenus/InventoryLists.as b/src/ItemMenus/InventoryLists.as index f392f0dab..387d890cc 100644 --- a/src/ItemMenus/InventoryLists.as +++ b/src/ItemMenus/InventoryLists.as @@ -27,17 +27,17 @@ import skyui.defines.Input; class InventoryLists extends MovieClip { #include "../version.as" - + /* CONSTANTS */ - + static var HIDE_PANEL = 0; static var SHOW_PANEL = 1; static var TRANSITIONING_TO_HIDE_PANEL = 2; static var TRANSITIONING_TO_SHOW_PANEL = 3; - - + + /* STAGE ELEMENTS */ - + public var panelContainer: MovieClip; public var zoomButtonHolder: MovieClip; @@ -47,41 +47,43 @@ class InventoryLists extends MovieClip private var _typeFilter: ItemTypeFilter; private var _nameFilter: NameFilter; private var _sortFilter: SortFilter; - + private var _platform: Number; - + private var _currCategoryIndex: Number; private var _savedSelectionIndex: Number = -1; - + private var _searchKey: Number = -1; private var _switchTabKey: Number = -1; private var _sortOrderKey: Number = -1; private var _sortOrderKeyHeld: Boolean = false; - + private var _bTabbed = false; private var _leftTabText: String; private var _rightTabText: String; private var _columnSelectDialog: MovieClip; private var _columnSelectInterval: Number; - + private var _categoryChanged: Boolean; + private var _categorySelections: Object; + /* PROPERTIES */ public var itemList: TabularList; public var categoryList: CategoryList; - + public var tabBar: TabBar; - + public var searchWidget: SearchWidget; - + public var categoryLabel: MovieClip; - + public var columnSelectButton: Button; - + private var _currentState: Number; - + public function get currentState() { return _currentState; @@ -94,17 +96,17 @@ class InventoryLists extends MovieClip _currentState = a_newState; } - + private var _tabBarIconArt: Array; - + public function set tabBarIconArt(a_iconArt: Array) { _tabBarIconArt = a_iconArt; - + if (tabBar) tabBar.setIcons(_tabBarIconArt[0], _tabBarIconArt[1]); } - + public function get tabBarIconArt(): Array { return _tabBarIconArt; @@ -129,7 +131,7 @@ class InventoryLists extends MovieClip _typeFilter = new ItemTypeFilter(); _nameFilter = new NameFilter(); _sortFilter = new SortFilter(); - + categoryList = panelContainer.categoryList; categoryLabel = panelContainer.categoryLabel; itemList = panelContainer.itemList; @@ -139,7 +141,7 @@ class InventoryLists extends MovieClip ConfigManager.registerLoadCallback(this, "onConfigLoad"); ConfigManager.registerUpdateCallback(this, "onConfigUpdate"); } - + private function onLoad(): Void { categoryList.listEnumeration = new BasicEnumeration(categoryList.entryList); @@ -150,7 +152,7 @@ class InventoryLists extends MovieClip listEnumeration.addFilter(_sortFilter); itemList.listEnumeration = listEnumeration; // data processors are initialized by the top-level menu since they differ in each case - + itemList.listState.maxTextLength = 80; _typeFilter.addEventListener("filterChange", this, "onFilterChange"); @@ -165,15 +167,16 @@ class InventoryLists extends MovieClip itemList.addEventListener("selectionChange", this, "onItemsListSelectionChange"); itemList.addEventListener("sortChange", this, "onSortChange"); + itemList.addEventListener("listUpdated", this, "onItemsListUpdate"); searchWidget.addEventListener("inputStart", this, "onSearchInputStart"); searchWidget.addEventListener("inputEnd", this, "onSearchInputEnd"); searchWidget.addEventListener("inputChange", this, "onSearchInputChange"); - + columnSelectButton.addEventListener("press", this, "onColumnSelectButtonPress"); } - - + + /* PUBLIC FUNCTIONS */ // @mixin by gfx.events.EventDispatcher @@ -184,23 +187,23 @@ class InventoryLists extends MovieClip public var removeEventListener: Function; public var removeAllEventListeners: Function; public var cleanUpEvents: Function; - + // @mixin by Shared.GlobalFunc public var Lock: Function; - + public function InitExtensions(): Void { // Delay updates until config is ready categoryList.suspended = true; itemList.suspended = true; } - + public function showPanel(a_bPlayBladeSound: Boolean): Void { // Release itemlist for updating categoryList.suspended = false; itemList.suspended = false; - + _currentState = TRANSITIONING_TO_SHOW_PANEL; gotoAndPlay("PanelShow"); @@ -216,7 +219,7 @@ class InventoryLists extends MovieClip gotoAndPlay("PanelHide"); GameDelegate.call("PlaySound",["UIMenuBladeCloseSD"]); } - + public function enableTabBar(): Void { _bTabbed = true; @@ -232,6 +235,10 @@ class InventoryLists extends MovieClip itemList.setPlatform(a_platform,a_bPS3Switch); } + public function classname(): String { + return "Class InventoryLists"; + } + // @GFx public function handleInput(details: InputDetails, pathToFocus: Array): Boolean { @@ -279,21 +286,30 @@ class InventoryLists extends MovieClip if (GlobalFunc.IsKeyPressed(details)) { // Search hotkey (default space) + /* if (details.skseKeycode == _searchKey) { searchWidget.startInput(); return true; } - + */ + /* + if (details.navEquivalent == "down") { + Debug.log("InventoryLists triggering search start"); + searchWidget.startInput(); + return true; + } + */ + // Toggle tab (default ALT) if (tabBar != undefined && details.skseKeycode == _switchTabKey) { tabBar.tabToggle(); return true; } } - + if (categoryList.handleInput(details, pathToFocus)) return true; - + var nextClip = pathToFocus.shift(); return nextClip.handleInput(details, pathToFocus); } @@ -303,11 +319,18 @@ class InventoryLists extends MovieClip var lb = panelContainer.ListBackground; return [lb._x, lb._y, lb._width, lb._height]; } - + public function showItemsList(): Void { + // Save the previous selection in the category + var prevCategory = categoryList.lastSelectedIndex; + _categorySelections[prevCategory] = { + selectedIndex: itemList.selectedIndex, + scrollPosition: itemList.scrollPosition + }; + _currCategoryIndex = categoryList.selectedIndex; - + categoryLabel.textField.SetText(categoryList.selectedEntry.text); // Start with no selection @@ -317,20 +340,20 @@ class InventoryLists extends MovieClip if (categoryList.selectedEntry != undefined) { // Set filter type _typeFilter.changeFilterFlag(categoryList.selectedEntry.flag); - + // Not set yet before the config is loaded itemList.layout.changeFilterFlag(categoryList.selectedEntry.flag); } - + itemList.requestUpdate(); - + dispatchEvent({type:"itemHighlightChange", index:itemList.selectedIndex}); itemList.disableInput = false; } // Called to initially set the category list. - // @API + // @API public function SetCategoriesList(): Void { var textOffset = 0; @@ -339,6 +362,7 @@ class InventoryLists extends MovieClip var len = 3; categoryList.clearList(); + _categorySelections = new Array(); for (var i = 0, index = 0; i < arguments.length; i = i + len, index++) { var entry = {text:arguments[i + textOffset], flag:arguments[i + flagOffset], bDontHide:arguments[i + bDontHideOffset], savedItemIndex:0, filterFlag:arguments[i + bDontHideOffset] == true ? (1) : (0)}; @@ -346,8 +370,10 @@ class InventoryLists extends MovieClip if (entry.flag == 0) categoryList.dividerIndex = index; + + _categorySelections.push(undefined); } - + // Initialize tabbar labels and replace text of segment heads (name -> ALL) if (_bTabbed) { // Restore 0 as default index for tabbed lists @@ -389,22 +415,22 @@ class InventoryLists extends MovieClip _typeFilter.itemFilter = categoryList.selectedEntry.flag; dispatchEvent({type:"categoryChange", index:categoryList.selectedIndex}); } - - // This is called when an ItemCard list closes(ex. ShowSoulGemList) to refresh ItemCard data + + // This is called when an ItemCard list closes(ex. ShowSoulGemList) to refresh ItemCard data if (itemList.selectedIndex == -1) dispatchEvent({type:"showItemsList", index: -1}); else dispatchEvent({type:"itemHighlightChange", index:itemList.selectedIndex}); } - - + + /* PRIVATE FUNCTIONS */ - + private function onConfigLoad(event: Object): Void { var config = event.config; _searchKey = config["Input"].controls.pc.search; - + if (_platform == 0) _switchTabKey = config["Input"].controls.pc.switchTab; else { @@ -412,22 +438,22 @@ class InventoryLists extends MovieClip _sortOrderKey = config["Input"].controls.gamepad.sortOrder; } } - + private function onFilterChange(): Void { itemList.requestInvalidate(); } - + private function onTabBarLoad(): Void { tabBar = panelContainer.tabBar; tabBar.setIcons(_tabBarIconArt[0], _tabBarIconArt[1]); tabBar.addEventListener("tabPress", this, "onTabPress"); - + if (categoryList.dividerIndex != -1) tabBar.setLabelText(_leftTabText, _rightTabText); } - + private function onColumnSelectButtonPress(event: Object): Void { if (event.type == "timeout") { @@ -439,27 +465,38 @@ class InventoryLists extends MovieClip DialogManager.close(); return; } - + + openColumnSelectDialog(); + } + + public function openColumnSelectDialog(): Void + { + // Don't do anything if the dialog is already opened + if (_columnSelectDialog) { + return; + } + + // Setup and open the dialog _savedSelectionIndex = itemList.selectedIndex; itemList.selectedIndex = -1; - + categoryList.disableSelection = categoryList.disableInput = true; itemList.disableSelection = itemList.disableInput = true; searchWidget.isDisabled = true; - + _columnSelectDialog = DialogManager.open(panelContainer, "ColumnSelectDialog", {_x: 554, _y: 35, layout: itemList.layout}); _columnSelectDialog.addEventListener("dialogClosed", this, "onColumnSelectDialogClosed"); } - + private function onColumnSelectDialogClosed(event: Object): Void { categoryList.disableSelection = categoryList.disableInput = false; itemList.disableSelection = itemList.disableInput = false; searchWidget.isDisabled = false; - + itemList.selectedIndex = _savedSelectionIndex; } - + private function onConfigUpdate(event: Object): Void { itemList.layout.refresh(); @@ -469,28 +506,40 @@ class InventoryLists extends MovieClip { showItemsList(); } - - private function onTabPress(event: Object): Void + + public function toggleTab(): Void + { + var newTab = tabBar.activeTab == TabBar.LEFT_TAB ? TabBar.RIGHT_TAB : TabBar.LEFT_TAB; + switchTab(newTab); + } + + public function switchTab(newTab: Number): Void { if (categoryList.disableSelection || categoryList.disableInput || itemList.disableSelection || itemList.disableInput) return; - - if (event.index == TabBar.LEFT_TAB) { + + if (newTab == TabBar.LEFT_TAB) { tabBar.activeTab = TabBar.LEFT_TAB; categoryList.activeSegment = CategoryList.LEFT_SEGMENT; - } else if (event.index == TabBar.RIGHT_TAB) { + } else if (newTab == TabBar.RIGHT_TAB) { tabBar.activeTab = TabBar.RIGHT_TAB; categoryList.activeSegment = CategoryList.RIGHT_SEGMENT; } - + GameDelegate.call("PlaySound",["UIMenuBladeOpenSD"]); showItemsList(); } + private function onTabPress(event: Object): Void + { + switchTab(event.index); + } + private function onCategoriesListSelectionChange(event: Object): Void { + _categoryChanged = true; dispatchEvent({type:"categoryChange", index:event.index}); - + if (event.index != -1) GameDelegate.call("PlaySound",["UIMenuFocus"]); } @@ -508,6 +557,37 @@ class InventoryLists extends MovieClip _sortFilter.setSortBy(event.attributes, event.options); } + private function onItemsListUpdate(): Void + { + if(!_categoryChanged) + return; + + // The items list was just updated because the selected + // category changed. + + // Restore the selected item and scroll position settings. + // This is needed because it's quite easy to accidentally + // switch catetory by accdient while using the VR trackpad. + + // In these case, we want to be able to return to the previous + // category and retain our position in the list. If the scroll + // position always returned to the top of the list, this makes + // navigating large inventory lists very difficult. + + // If we can find a previously saved selection setting for this + // category, restore it now. + var savedSelection = _categorySelections[_currCategoryIndex]; + if(savedSelection != undefined) { + itemList.selectedIndex = savedSelection.selectedIndex; + itemList.scrollPosition = savedSelection.scrollPosition; + } else { + itemList.selectedIndex = -1; + itemList.scrollPosition = 0; + } + + _categoryChanged = false; + } + private function onSearchInputStart(event: Object): Void { categoryList.disableSelection = categoryList.disableInput = true; @@ -526,4 +606,4 @@ class InventoryLists extends MovieClip itemList.disableSelection = itemList.disableInput = false; _nameFilter.filterText = event.data; } -} \ No newline at end of file +} diff --git a/src/ItemMenus/InventoryMenu.as b/src/ItemMenus/InventoryMenu.as index d13e7ff13..d60a66336 100644 --- a/src/ItemMenus/InventoryMenu.as +++ b/src/ItemMenus/InventoryMenu.as @@ -10,22 +10,23 @@ import skyui.props.PropertyDataExtender; import skyui.defines.Inventory; import skyui.defines.Input; - +import skyui.util.Debug; +import skyui.VRInput; class InventoryMenu extends ItemMenu { #include "../version.as" - + /* PRIVATE VARIABLES */ - + private var _bMenuClosing: Boolean = false; private var _bSwitchMenus: Boolean = false; private var _categoryListIconArt: Array; - - + + /* PROPERTIES */ - + // @GFx public var bPCControlsReady: Boolean = true; @@ -35,29 +36,58 @@ class InventoryMenu extends ItemMenu public function InventoryMenu() { super(); - + _categoryListIconArt = ["cat_favorites", "inv_all", "inv_weapons", "inv_armor", "inv_potions", "inv_scrolls", "inv_food", "inv_ingredients", "inv_books", "inv_keys", "inv_misc"]; - + GameDelegate.addCallBack("AttemptEquip", this, "AttemptEquip"); GameDelegate.addCallBack("DropItem", this, "DropItem"); GameDelegate.addCallBack("AttemptChargeItem", this, "AttemptChargeItem"); GameDelegate.addCallBack("ItemRotating", this, "ItemRotating"); } + private var vrActionConditions = undefined; + + + public function OnShow() + { + super.OnShow(); + if(!vrActionConditions) { + vrActionConditions = VRInput.instance.getActionConditions("InventoryMenu"); + if(VRInput.instance.logDetails) + Debug.dump("vrActionConditions", vrActionConditions); + } + + _bMenuClosing = false; + // TODO! Cleanup these lines ported from SkyrimVR + //this.iLastItemType = InventoryDefines.ICT_NONE; + //bottomBar._lastItemType = Inventory.ICT_NONE; + //ResetItemCard(); + //itemCard.bFadedIn = false; + //itemCard._visible = false; + //inventoryLists.showItemsList(); + if(!this.bFadedIn) + { + inventoryLists.showPanel(false); + itemCard.FadeInCard(); + ToggleMenuFade(); + } + //bottomBar.GoToDefaultFrame(); + //bottomBar.buttonPanel.hideButtons(); + } /* PUBLIC FUNCTIONS */ - + // @override ItemMenu public function InitExtensions(): Void - { + { super.InitExtensions(); GlobalFunc.AddReverseFunctions(); - + inventoryLists.zoomButtonHolder.gotoAndStop(1); - + // Initialize menu-specific list components var categoryList: CategoryList = inventoryLists.categoryList; categoryList.iconArt = _categoryListIconArt; @@ -65,22 +95,40 @@ class InventoryMenu extends ItemMenu itemCard.addEventListener("itemPress", this, "onItemCardListPress"); } + // @override ItemMenu + public function closeMenu(): Void + { + var list = inventoryLists.itemList.listEnumeration; + for(var i = 0; i < list.size(); i++) { + var item = list.at(i); + if(item.newItem) { + var skyui_funcs = skse["plugins"]["skyui"]; + if(skyui_funcs) { + skyui_funcs.FormDB_RemoveField(item.formId, "skyui/newItem"); + } + } + } + super.closeMenu(); + } + // @override ItemMenu public function setConfig(a_config: Object): Void { super.setConfig(a_config); - + var itemList: TabularList = inventoryLists.itemList; itemList.addDataProcessor(new InventoryDataSetter()); itemList.addDataProcessor(new InventoryIconSetter(a_config["Appearance"])); itemList.addDataProcessor(new PropertyDataExtender(a_config["Appearance"], a_config["Properties"], "itemProperties", "itemIcons", "itemCompoundProperties")); - + var layout: ListLayout = ListLayoutManager.createLayout(a_config["ListLayout"], "ItemListLayout"); itemList.layout = layout; // Not 100% happy with doing this here, but has to do for now. if (inventoryLists.categoryList.selectedEntry) layout.changeFilterFlag(inventoryLists.categoryList.selectedEntry.flag); + + inventoryLists.itemList.listState.layout = layout; } // @GFx @@ -88,11 +136,11 @@ class InventoryMenu extends ItemMenu { if (!bFadedIn) return true; - + var nextClip = pathToFocus.shift(); if (nextClip.handleInput(details, pathToFocus)) return true; - + if (GlobalFunc.IsKeyPressed(details)) { if (details.navEquivalent == NavigationCode.TAB || details.navEquivalent == NavigationCode.SHIFT_TAB ) { startMenuFade(); @@ -103,10 +151,28 @@ class InventoryMenu extends ItemMenu openMagicMenu(true); } } - + return true; } + public function classname(): String{ + return "Class Inventorymenu"; + } + + public function handleVRInput(event): Boolean { + //Debug.dump("InventoryMenu::handleVRInput", event); + if (!bFadedIn) + return; + + var action = VRInput.instance.triggeredAction(vrActionConditions, event); + if(action == "search") { + inventoryLists.searchWidget.startInput(); + return true; + } + + return false; + } + // @API public function AttemptEquip(a_slot: Number, a_bCheckOverList: Boolean): Void { @@ -133,18 +199,18 @@ class InventoryMenu extends ItemMenu { if (inventoryLists.itemList.selectedIndex == -1) return; - + if (shouldProcessItemsListInput(false) && itemCard.itemInfo.charge != undefined && itemCard.itemInfo.charge < 100) GameDelegate.call("ShowSoulGemList", []); } // @override ItemMenu public function SetPlatform(a_platform: Number, a_bPS3Switch: Boolean): Void - { + { inventoryLists.zoomButtonHolder.gotoAndStop(1); inventoryLists.zoomButtonHolder.ZoomButton._visible = a_platform != 0; inventoryLists.zoomButtonHolder.ZoomButton.SetPlatform(a_platform, a_bPS3Switch); - + super.SetPlatform(a_platform, a_bPS3Switch); } @@ -153,10 +219,10 @@ class InventoryMenu extends ItemMenu { inventoryLists.zoomButtonHolder.PlayForward(inventoryLists.zoomButtonHolder._currentframe); } - - + + /* PRIVATE FUNCTIONS */ - + // @override ItemMenu private function onExitMenuRectClick(): Void { @@ -169,7 +235,7 @@ class InventoryMenu extends ItemMenu if (!_bMenuClosing) return; - GameDelegate.call("CloseMenu", []); + closeMenu(); if (_bSwitchMenus) { GameDelegate.call("CloseTweenMenu",[]); skse.OpenMenu("MagicMenu"); @@ -180,18 +246,30 @@ class InventoryMenu extends ItemMenu private function onShowItemsList(event: Object): Void { super.onShowItemsList(event); - + if (event.index != -1) + { updateBottomBar(true); + GameDelegate.call("SetShowingItemsList",[1]); + } + } + + public function logAllItems() { + var itemList = inventoryLists.itemList; + var entryList: Array = itemList.entryList; + for (var i: Number = 0; i < entryList.length; i++) { + var obj = entryList[i]; + Debug.dump("inv item", obj); + } } private function onItemHighlightChange(event: Object): Void { super.onItemHighlightChange(event); - + if (event.index != -1) updateBottomBar(true); - + } // @override ItemMenu @@ -200,8 +278,9 @@ class InventoryMenu extends ItemMenu super.onHideItemsList(event); bottomBar.updatePerItemInfo({type:Inventory.ICT_NONE}); - + updateBottomBar(false); + GameDelegate.call("SetShowingItemsList",[0]); } // @override ItemMenu @@ -217,7 +296,7 @@ class InventoryMenu extends ItemMenu private function onQuantityMenuSelect(event: Object): Void { GameDelegate.call("ItemDrop", [event.amount]); - + // Bug Fix: ItemCard does not update when attempting to drop quest items through the quantity menu // so let's request an update even though it may be redundant. GameDelegate.call("RequestItemCardInfo", [], this, "UpdateItemCardInfo"); @@ -239,7 +318,7 @@ class InventoryMenu extends ItemMenu { super.onItemCardSubMenuAction(event); GameDelegate.call("QuantitySliderOpen", [event.opening]); - + if (event.menu == "list") { if (event.opening == true) { navPanel.clearButtons(); @@ -252,7 +331,7 @@ class InventoryMenu extends ItemMenu } } } - + private function openMagicMenu(a_bFade: Boolean): Void { if (a_bFade) { @@ -260,47 +339,100 @@ class InventoryMenu extends ItemMenu startMenuFade(); } else { saveIndices(); - GameDelegate.call("CloseMenu",[]); + closeMenu(); GameDelegate.call("CloseTweenMenu",[]); skse.OpenMenu("MagicMenu"); } } - + private function startMenuFade(): Void { inventoryLists.hidePanel(); + itemCard.FadeOutCard(); + //onHideItemsList({}); ToggleMenuFade(); saveIndices(); _bMenuClosing = true; } - + // @override ItemMenu private function updateBottomBar(a_bSelected: Boolean): Void { navPanel.clearButtons(); - + if (a_bSelected) { - navPanel.addButton(getEquipButtonData(itemCard.itemInfo.type)); - navPanel.addButton({text: "$Drop", controls: Input.XButton}); - + // Setup the main action button + var equipArt = {PCArt:"M1M2", XBoxArt:"360_LTRT", PS3Art:"PS3_LTRT", ViveArt: "trigger_LR", + MoveArt:"PS3_MOVE", OculusArt: "trigger_LR", WindowsMRArt: "trigger_LR"}; + var useItemArt = {PCArt:"E",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"trigger",MoveArt:"PS3_MOVE",OculusArt:"trigger",WindowsMRArt:"trigger"}; + + var actionText = undefined; + var actionArt = undefined; + switch(itemCard.itemInfo.type) + { + case Inventory.ICT_BOOK: + actionText = "$Read"; + actionArt = useItemArt; + break; + case Inventory.ICT_POTION: + actionText = "$Use"; + actionArt = useItemArt; + break; + case Inventory.ICT_FOOD: + case Inventory.ICT_INGREDIENT: + actionText = "$Eat"; + actionArt = useItemArt; + break; + case Inventory.ICT_ARMOR: + case Inventory.ICT_WEAPON: + actionText = "$Equip"; + actionArt = equipArt; + break; + } + + if (actionArt != undefined) + navPanel.addButton({text: actionText, controls: skyui.util.Input.pickControls(_platform, actionArt)}); + + navPanel.addButton({ + text: "$Drop", + controls: skyui.util.Input.pickControls(_platform, + {PCArt:"R", XBoxArt: "360_X", PS3Art: "PS3_X", ViveArt: "radial_Either_Up", + MoveArt: "PS3_A", OculusArt: "OCC_X", WindowsMRArt: "radial_Either_Up"}) }); + + // Add the Favorite/Unfavorite button + var favoriteControl = skyui.util.Input.pickControls(_platform, + {PCArt:"F", XBoxArt:"360_Y", PS3Art:"PS3_Y", ViveArt:"radial_Either_Right", + MoveArt:"PS3_Y", OculusArt:"OCC_B", WindowsMRArt:"radial_Either_Right"}); if (inventoryLists.itemList.selectedEntry.filterFlag & inventoryLists.categoryList.entryList[0].flag != 0) - navPanel.addButton({text: "$Unfavorite", controls: Input.YButton}); + navPanel.addButton({text: "$Unfavorite", controls: favoriteControl}); else - navPanel.addButton({text: "$Favorite", controls: Input.YButton}); - - if (itemCard.itemInfo.charge != undefined && itemCard.itemInfo.charge < 100) - navPanel.addButton({text: "$Charge", controls: Input.ChargeItem}); - + navPanel.addButton({text: "$Favorite", controls: favoriteControl}); + + if (itemCard.itemInfo.charge != undefined && itemCard.itemInfo.charge < 100) { + navPanel.addButton({ + text: "$Charge", + controls: skyui.util.Input.pickControls(_platform, + {PCArt: "T", XBoxArt: "360_RB", PS3Art: "PS3_RB", ViveArt: "radial_Either_Left", + MoveArt: "PS3_X", OculusArt: "OCC_Y", WindowsMRArt: "radial_Either_Left"}) + }); + } } else { - navPanel.addButton({text: "$Exit", controls: _cancelControls}); - navPanel.addButton({text: "$Search", controls: _searchControls}); + // navPanel.addButton({text: "$Exit", controls: _cancelControls}); + // navPanel.addButton({text: "$Search", controls: _searchControls}); if (_platform != 0) { - navPanel.addButton({text: "$Column", controls: _sortColumnControls}); - navPanel.addButton({text: "$Order", controls: _sortOrderControls}); + navPanel.addButton({text: "$Column", controls: {namedKey: "Action_Up"}}); + navPanel.addButton({text: "$Order", controls: {namedKey: "Action_Double_Up"}}); } - navPanel.addButton({text: "$Magic", controls: _switchControls}); + // navPanel.addButton({text: "$Magic", controls: _switchControls}); } - + + navPanel.addButton({ + text: "$Search", + controls: skyui.util.Input.pickControls(_platform, + {PCArt: "Space", ViveArt: "radial_Either_Down", + MoveArt: "PS3_X", OculusArt: "OCC THUMB_REST", WindowsMRArt: "OCC THUMB_REST", + KnucklesArt: "OCC THUMB_REST"})}); + navPanel.updateButtons(true); } -} \ No newline at end of file +} diff --git a/src/ItemMenus/ItemCard.as b/src/ItemMenus/ItemCard.as index 1bf7193ba..6818881a5 100644 --- a/src/ItemMenus/ItemCard.as +++ b/src/ItemMenus/ItemCard.as @@ -7,12 +7,13 @@ import Components.DeltaMeter; import Shared.GlobalFunc; import skyui.defines.Inventory; +import skyui.util.Debug; class ItemCard extends MovieClip { #include "../version.as" - + var ActiveEffectTimeValue: TextField; var ApparelArmorValue: TextField; var ApparelEnchantedLabel: TextField; @@ -41,7 +42,7 @@ class ItemCard extends MovieClip var TotalChargesValue: TextField; var WeaponDamageValue: TextField; var WeaponEnchantedLabel: TextField; - + var ButtonRect: MovieClip; var ButtonRect_mc: MovieClip; var CardList_mc: MovieClip; @@ -58,16 +59,18 @@ class ItemCard extends MovieClip var PrevFocus: MovieClip; var QuantitySlider_mc: MovieClip; var WeaponChargeMeter: MovieClip; - + var InputHandler: Function; var dispatchEvent: Function; - + var ItemCardMeters: Object; var LastUpdateObj: Object; - + var _bEditNameMode: Boolean; var bFadedIn: Boolean; - + + //var LastShoutObj: Object; + function ItemCard() { @@ -84,6 +87,19 @@ class ItemCard extends MovieClip _bEditNameMode = false; } + function shoutWordPronunciation(word: String): String + { + word = GlobalFunc.StringReplaceAll(word, "1", "aa"); + word = GlobalFunc.StringReplaceAll(word, "2", "ei"); + word = GlobalFunc.StringReplaceAll(word, "3", "ii"); + word = GlobalFunc.StringReplaceAll(word, "4", "ah"); + word = GlobalFunc.StringReplaceAll(word, "6", "ur"); + word = GlobalFunc.StringReplaceAll(word, "7", "ir"); + word = GlobalFunc.StringReplaceAll(word, "8", "oo"); + word = GlobalFunc.StringReplaceAll(word, "9", "ey"); + return word.charAt(0).toUpperCase() + word.slice(1); + } + function get bEditNameMode(): Boolean { return _bEditNameMode; @@ -94,12 +110,12 @@ class ItemCard extends MovieClip return ItemName; } - function SetupItemName(aPrevName: String): Void + function SetupItemName(aName: String): Void { ItemName = ItemText.ItemTextField; - if (ItemName != undefined) { + if (aName != undefined) { ItemName.textAutoSize = "shrink"; - ItemName.htmlText = aPrevName; + ItemName.SetText(aName, true); ItemName.selectable = false; } } @@ -115,14 +131,21 @@ class ItemCard extends MovieClip function SetPlatform(aiPlatform: Number, abPS3Switch: Boolean): Void { - ButtonRect_mc.AcceptGamepadButton._visible = aiPlatform != 0; - ButtonRect_mc.CancelGamepadButton._visible = aiPlatform != 0; - ButtonRect_mc.AcceptMouseButton._visible = aiPlatform == 0; - ButtonRect_mc.CancelMouseButton._visible = aiPlatform == 0; - if (aiPlatform != 0) { - ButtonRect_mc.AcceptGamepadButton.SetPlatform(aiPlatform, abPS3Switch); - ButtonRect_mc.CancelGamepadButton.SetPlatform(aiPlatform, abPS3Switch); - } + // TODO!!! Clean out both *GamepadButton and *MouseButton + // We're now using MappedButton instead of CrossplatformButton + ButtonRect_mc.AcceptGamepadButton._visible = false; + ButtonRect_mc.CancelGamepadButton._visible = false; + ButtonRect_mc.AcceptMouseButton._visible = false; + ButtonRect_mc.CancelMouseButton._visible = false; + + var acceptControls = skyui.util.Input.pickControls(aiPlatform, + {PCArt:"Enter",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"trigger",MoveArt:"PS3_MOVE",OculusArt:"trigger",WindowsMRArt:"trigger"}) + var cancelControls = skyui.util.Input.pickControls(aiPlatform, + {PCArt:"Esc", XBoxArt:"360_B", PS3Art:"PS3_B", ViveArt:"grip", MoveArt:"PS3_B", OculusArt:"grab", WindowsMRArt:"grab"}); + + ButtonRect_mc.AcceptButton.setButtonData({text: "$Yes", controls: acceptControls}); + ButtonRect_mc.CancelButton.setButtonData({text: "$No", controls: cancelControls}); + ItemList.SetPlatform(aiPlatform, abPS3Switch); } @@ -179,8 +202,8 @@ class ItemCard extends MovieClip ItemCardMeters = new Array(); var strItemNameHtml: String = ItemName == undefined ? "" : ItemName.htmlText; var _iItemType: Number = aUpdateObj.type; - - + + switch (_iItemType) { case Inventory.ICT_ARMOR: if (aUpdateObj.effects.length == 0) @@ -190,10 +213,10 @@ class ItemCard extends MovieClip ApparelArmorValue.textAutoSize = "shrink"; ApparelArmorValue.SetText(aUpdateObj.armor); ApparelEnchantedLabel.textAutoSize = "shrink"; - ApparelEnchantedLabel.htmlText = aUpdateObj.effects; - SkillTextInstance.text = aUpdateObj.skillText; + ApparelEnchantedLabel.SetText(aUpdateObj.effects, true); + SkillTextInstance.SetText(aUpdateObj.skillText); break; - + case Inventory.ICT_WEAPON: if (aUpdateObj.effects.length == 0) { gotoAndStop("Weapons_reg"); @@ -213,10 +236,10 @@ class ItemCard extends MovieClip PoisonInstance.gotoAndStop(strIsPoisoned); WeaponDamageValue.SetText(aUpdateObj.damage); WeaponEnchantedLabel.textAutoSize = "shrink"; - WeaponEnchantedLabel.htmlText = aUpdateObj.effects; + WeaponEnchantedLabel.SetText(aUpdateObj.effects, true); break; - - case Inventory.ICT_BOOK: + + case Inventory.ICT_BOOK: if (aUpdateObj.description != undefined && aUpdateObj.description != "") { gotoAndStop("Books_Description"); BookDescriptionLabel.SetText(aUpdateObj.description); @@ -224,21 +247,21 @@ class ItemCard extends MovieClip gotoAndStop("Books_reg"); } break; - - case Inventory.ICT_POTION: + + case Inventory.ICT_POTION: gotoAndStop("Potions_reg"); PotionsLabel.textAutoSize = "shrink"; - PotionsLabel.htmlText = aUpdateObj.effects; - SkillTextInstance.text = aUpdateObj.skillName == undefined ? "" : aUpdateObj.skillName; + PotionsLabel.SetText(aUpdateObj.effects, true); + SkillTextInstance.SetText(aUpdateObj.skillName == undefined ? "" : aUpdateObj.skillName); break; - + case Inventory.ICT_FOOD: gotoAndStop("Potions_reg"); PotionsLabel.textAutoSize = "shrink"; - PotionsLabel.htmlText = aUpdateObj.effects; - SkillTextInstance.text = aUpdateObj.skillName == undefined ? "" : aUpdateObj.skillName; + PotionsLabel.SetText(aUpdateObj.effects, true); + SkillTextInstance.SetText(aUpdateObj.skillName == undefined ? "" : aUpdateObj.skillName); break; - + case Inventory.ICT_SPELL_DEFAULT: gotoAndStop("Power_reg"); MagicEffectsLabel.SetText(aUpdateObj.effects, true); @@ -252,27 +275,27 @@ class ItemCard extends MovieClip } else { MagicCostValue._alpha = 100; MagicCostLabel._alpha = 100; - MagicCostValue.text = aUpdateObj.spellCost.toString(); + MagicCostValue.SetText(aUpdateObj.spellCost.toString()); } break; - + case Inventory.ICT_SPELL: var bCastTime: Boolean = aUpdateObj.castTime == 0; if (bCastTime) gotoAndStop("Magic_time_label"); else gotoAndStop("Magic_reg"); - SkillLevelText.text = aUpdateObj.castLevel.toString(); + SkillLevelText.SetText(aUpdateObj.castLevel.toString()); MagicEffectsLabel.SetText(aUpdateObj.effects, true); MagicEffectsLabel.textAutoSize = "shrink"; MagicCostValue.textAutoSize = "shrink"; MagicCostTimeValue.textAutoSize = "shrink"; if (bCastTime) - MagicCostTimeValue.text = aUpdateObj.spellCost.toString(); + MagicCostTimeValue.SetText(aUpdateObj.spellCost.toString()); else - MagicCostValue.text = aUpdateObj.spellCost.toString(); + MagicCostValue.SetText(aUpdateObj.spellCost.toString()); break; - + case Inventory.ICT_INGREDIENT: gotoAndStop("Ingredients_reg"); for (var i: Number = 0; i < 4; i++) { @@ -288,11 +311,11 @@ class ItemCard extends MovieClip } } break; - + case Inventory.ICT_MISC: gotoAndStop("Misc_reg"); break; - + case Inventory.ICT_SHOUT: gotoAndStop("Shouts_reg"); var iLastWord: Number = 0; @@ -304,24 +327,34 @@ class ItemCard extends MovieClip var strDragonWord: String = aUpdateObj["dragonWord" + i] == undefined ? "" : aUpdateObj["dragonWord" + i]; var strWord: String = aUpdateObj["word" + i] == undefined ? "" : aUpdateObj["word" + i]; var bWordKnown: Boolean = aUpdateObj["unlocked" + i] == true; - this["ShoutTextInstance" + i].DragonShoutLabelInstance.ShoutWordsLabel.textAutoSize = "shrink"; - this["ShoutTextInstance" + i].ShoutLabelInstance.ShoutWordsLabelTranslation.textAutoSize = "shrink"; - this["ShoutTextInstance" + i].DragonShoutLabelInstance.ShoutWordsLabel.SetText(strDragonWord.toUpperCase()); - this["ShoutTextInstance" + i].ShoutLabelInstance.ShoutWordsLabelTranslation.SetText(strWord); + var textInstance = this["ShoutTextInstance" + i]; + + textInstance.ShoutPronunciation.ShoutWordsLabel.textAutoSize = "shrink"; + textInstance.DragonShoutLabelInstance.ShoutWordsLabel.textAutoSize = "shrink"; + textInstance.ShoutLabelInstance.ShoutWordsLabelTranslation.textAutoSize = "shrink"; + + textInstance.ShoutPronunciation.ShoutWordsLabel.SetText(shoutWordPronunciation(strDragonWord)); + textInstance.DragonShoutLabelInstance.ShoutWordsLabel.SetText(strDragonWord.toUpperCase()); + textInstance.ShoutLabelInstance.ShoutWordsLabelTranslation.SetText(strWord); + + // If the player just learned a word, kick off the Learn animation if (bWordKnown && i == iLastWord && LastUpdateObj.soulSpent == true) { - this["ShoutTextInstance" + i].gotoAndPlay("Learn"); + textInstance.gotoAndPlay("Learn"); + + // If the word is known, kick off the Translate animation to show the + // pronunciation } else if (bWordKnown) { - this["ShoutTextInstance" + i].gotoAndStop("Known"); - this["ShoutTextInstance" + i].gotoAndStop("Known"); + textInstance.gotoAndPlay("Translate"); + + // Otherwise, just display the word as is } else { - this["ShoutTextInstance" + i].gotoAndStop("Unlocked"); - this["ShoutTextInstance" + i].gotoAndStop("Unlocked"); + textInstance.gotoAndStop("Unlocked"); } } - ShoutEffectsLabel.htmlText = aUpdateObj.effects; - ShoutCostValue.text = aUpdateObj.spellCost.toString(); + ShoutEffectsLabel.SetText(aUpdateObj.effects, true); + ShoutCostValue.SetText(aUpdateObj.spellCost.toString()); break; - + case Inventory.ICT_ACTIVE_EFFECT: gotoAndStop("ActiveEffects"); MagicEffectsLabel.html = true; @@ -333,36 +366,36 @@ class ItemCard extends MovieClip SecsText._alpha = 100; if (iEffectTimeRemaining >= 3600) { iEffectTimeRemaining = Math.floor(iEffectTimeRemaining / 3600); - ActiveEffectTimeValue.text = iEffectTimeRemaining.toString(); + ActiveEffectTimeValue.SetText(iEffectTimeRemaining.toString()); if (iEffectTimeRemaining == 1) - SecsText.text = "$hour"; + SecsText.SetText("$hour"); else - SecsText.text = "$hours"; + SecsText.SetText("$hours"); } else if (iEffectTimeRemaining >= 60) { iEffectTimeRemaining = Math.floor(iEffectTimeRemaining / 60); - ActiveEffectTimeValue.text = iEffectTimeRemaining.toString(); + ActiveEffectTimeValue.SetText(iEffectTimeRemaining.toString()); if (iEffectTimeRemaining == 1) - SecsText.text = "$min"; + SecsText.SetText("$min"); else - SecsText.text = "$mins"; + SecsText.SetText("$mins"); } else { - ActiveEffectTimeValue.text = iEffectTimeRemaining.toString(); + ActiveEffectTimeValue.SetText(iEffectTimeRemaining.toString()); if (iEffectTimeRemaining == 1) - SecsText.text = "$sec"; + SecsText.SetText("$sec"); else - SecsText.text = "$secs"; + SecsText.SetText("$secs"); } } else { ActiveEffectTimeValue._alpha = 0; SecsText._alpha = 0; } break; - + case Inventory.ICT_SOUL_GEMS: gotoAndStop("SoulGem"); - SoulLevel.text = aUpdateObj.soulLVL; + SoulLevel.SetText(aUpdateObj.soulLVL); break; - + case Inventory.ICT_LIST: gotoAndStop("Item_list"); if (aUpdateObj.listItems != undefined) { @@ -374,7 +407,7 @@ class ItemCard extends MovieClip OpenListMenu(); } break; - + case Inventory.ICT_CRAFT_ENCHANTING: case Inventory.ICT_HOUSE_PART: if (aUpdateObj.type == Inventory.ICT_HOUSE_PART) { @@ -387,7 +420,7 @@ class ItemCard extends MovieClip gotoAndStop("Craft_Enchanting"); ItemCardMeters[Inventory.ICT_WEAPON] = new DeltaMeter(ChargeMeter_Default.MeterInstance); if (aUpdateObj.totalCharges != undefined && aUpdateObj.totalCharges != 0) - TotalChargesValue.text = aUpdateObj.totalCharges; + TotalChargesValue.SetText(aUpdateObj.totalCharges); } else if (aUpdateObj.damage == undefined) { if (aUpdateObj.armor == undefined) { if (aUpdateObj.soulLVL == undefined) { @@ -398,24 +431,24 @@ class ItemCard extends MovieClip } else { gotoAndStop("Craft_Enchanting_SoulGem"); ItemCardMeters[Inventory.ICT_WEAPON] = new DeltaMeter(ChargeMeter_SoulGem.MeterInstance); - SoulLevel.text = aUpdateObj.soulLVL; + SoulLevel.SetText(aUpdateObj.soulLVL); } } else { gotoAndStop("Craft_Enchanting_Armor"); ApparelArmorValue.SetText(aUpdateObj.armor); - SkillTextInstance.text = aUpdateObj.skillText; + SkillTextInstance.SetText(aUpdateObj.skillText); } } else { gotoAndStop("Craft_Enchanting_Weapon"); ItemCardMeters[Inventory.ICT_WEAPON] = new DeltaMeter(ChargeMeter_Weapon.MeterInstance); WeaponDamageValue.SetText(aUpdateObj.damage); } - + if (aUpdateObj.usedCharge == 0 && aUpdateObj.totalCharges == 0) ItemCardMeters[Inventory.ICT_WEAPON].DeltaMeterMovieClip._parent._parent._alpha = 0; else if (aUpdateObj.usedCharge != undefined) ItemCardMeters[Inventory.ICT_WEAPON].SetPercent(aUpdateObj.usedCharge); - + if (aUpdateObj.effects != undefined && aUpdateObj.effects.length > 0) { if (EnchantmentLabel != undefined) EnchantmentLabel.SetText(aUpdateObj.effects, true); @@ -431,13 +464,13 @@ class ItemCard extends MovieClip Enchanting_Background._alpha = 0; } break; - + case Inventory.ICT_KEY: case Inventory.ICT_NONE: default: gotoAndStop("Empty"); } - + SetupItemName(strItemNameHtml); if (aUpdateObj.name != undefined) { var strItemName: String = aUpdateObj.count != undefined && aUpdateObj.count > 1 ? aUpdateObj.name + " (" + aUpdateObj.count + ")" : aUpdateObj.name; @@ -467,9 +500,9 @@ class ItemCard extends MovieClip var iEnchantingSlider_yOffset = 147.3; var iButtonRect_iOffset = 130; var iButtonRect_iOffsetEnchanting = 166; - + switch (aActiveClip) { - case EnchantingSlider_mc: + case EnchantingSlider_mc: QuantitySlider_mc._y = -100; ButtonRect._y = iButtonRect_iOffsetEnchanting; EnchantingSlider_mc._y = iEnchantingSlider_yOffset; @@ -479,8 +512,8 @@ class ItemCard extends MovieClip EnchantingSlider_mc._alpha = 100; CardList_mc._alpha = 0; break; - - case QuantitySlider_mc: + + case QuantitySlider_mc: QuantitySlider_mc._y = iQuantitySlider_yOffset; ButtonRect._y = iButtonRect_iOffset; EnchantingSlider_mc._y = -100; @@ -490,8 +523,8 @@ class ItemCard extends MovieClip EnchantingSlider_mc._alpha = 0; CardList_mc._alpha = 0; break; - - case CardList_mc: + + case CardList_mc: QuantitySlider_mc._y = -100; ButtonRect._y = -100; EnchantingSlider_mc._y = -100; @@ -501,8 +534,8 @@ class ItemCard extends MovieClip EnchantingSlider_mc._alpha = 0; CardList_mc._alpha = 100; break; - - case ButtonRect: + + case ButtonRect: QuantitySlider_mc._y = -100; ButtonRect._y = iButtonRect_iOffset; EnchantingSlider_mc._y = -100; @@ -605,7 +638,7 @@ class ItemCard extends MovieClip if (Selection.getFocus() != ItemName) { PrevFocus = FocusHandler.instance.getFocus(0); if (aInitialText != undefined) - ItemName.text = aInitialText; + ItemName.SetText(aInitialText); ItemName.type = "input"; ItemName.noTranslate = true; ItemName.selectable = true; @@ -636,7 +669,7 @@ class ItemCard extends MovieClip function handleInput(details: InputDetails, pathToFocus: Array): Boolean { var bHandledInput: Boolean = false; - if (pathToFocus.length > 0 && pathToFocus[0].handleInput != undefined) + if (pathToFocus.length > 0 && pathToFocus[0].handleInput != undefined) pathToFocus[0].handleInput(details, pathToFocus.slice(1)); if (InputHandler != undefined) bHandledInput = InputHandler(details); @@ -722,7 +755,7 @@ class ItemCard extends MovieClip function onListMouseSelectionChange(event: Object): Void { - if (event.keyboardOrMouse == 0) + if (event.keyboardOrMouse == 0) onListSelectionChange(event); } diff --git a/src/ItemMenus/ItemMenu.as b/src/ItemMenus/ItemMenu.as index 1a4cca1ed..93841e514 100644 --- a/src/ItemMenus/ItemMenu.as +++ b/src/ItemMenus/ItemMenu.as @@ -10,132 +10,144 @@ import skyui.components.ButtonPanel; import skyui.defines.Inventory; import skyui.defines.Item; +import skyui.util.Debug; +import skyui.VRInput; class ItemMenu extends MovieClip { /* PRIVATE VARIABLES */ - + private var _platform: Number; private var _bItemCardFadedIn: Boolean = false; private var _bItemCardPositioned: Boolean = false; - + private var _quantityMinCount: Number = 5; - + private var _config: Object; - + private var _bPlayBladeSound: Boolean; - + private var _searchKey: Number; private var _switchTabKey: Number; - + private var _acceptControls: Object; private var _cancelControls: Object; private var _searchControls: Object; private var _switchControls: Object; private var _sortColumnControls: Array; private var _sortOrderControls: Object; - - + + private var _VRInput: VRInput; + /* STAGE ELEMENTS */ - + public var inventoryLists: InventoryLists; - + public var itemCardFadeHolder: MovieClip; public var bottomBar: BottomBar; - + public var mouseRotationRect: MovieClip; public var exitMenuRect: MovieClip; - - + + /* PROPERTIES */ - + public var itemCard: MovieClip; - + public var navPanel: ButtonPanel; - + public var bEnableTabs: Boolean = false; - + // @GFx public var bPCControlsReady: Boolean = true; - + public var bFadedIn: Boolean = true; - - + + /* INITIALIZATION */ public function ItemMenu() { super(); - + itemCard = itemCardFadeHolder.ItemCard_mc; navPanel = bottomBar.buttonPanel; - + Mouse.addListener(this); ConfigManager.registerLoadCallback(this, "onConfigLoad"); - + bFadedIn = true; _bItemCardFadedIn = false; } + public function setupVRInput() { + _VRInput = VRInput.instance; + VRInput.instance.setup(); + } + + public function OnShow() { + setupVRInput(); + } + /* PUBLIC FUNCTIONS */ - + // @API public function InitExtensions(a_bPlayBladeSound): Void { skse.ExtendData(true); skse.ForceContainerCategorization(true); - + _bPlayBladeSound = a_bPlayBladeSound - + inventoryLists.InitExtensions(); - + if (bEnableTabs) inventoryLists.enableTabBar(); - + GameDelegate.addCallBack("UpdatePlayerInfo",this,"UpdatePlayerInfo"); GameDelegate.addCallBack("UpdateItemCardInfo",this,"UpdateItemCardInfo"); GameDelegate.addCallBack("ToggleMenuFade",this,"ToggleMenuFade"); GameDelegate.addCallBack("RestoreIndices",this,"RestoreIndices"); - + inventoryLists.addEventListener("categoryChange",this,"onCategoryChange"); inventoryLists.addEventListener("itemHighlightChange",this,"onItemHighlightChange"); inventoryLists.addEventListener("showItemsList",this,"onShowItemsList"); inventoryLists.addEventListener("hideItemsList",this,"onHideItemsList"); - + inventoryLists.itemList.addEventListener("itemPress", this ,"onItemSelect"); - + itemCard.addEventListener("quantitySelect",this,"onQuantityMenuSelect"); itemCard.addEventListener("subMenuAction",this,"onItemCardSubMenuAction"); - + positionFixedElements(); - + itemCard._visible = false; navPanel.hideButtons(); - + exitMenuRect.onMouseDown = function() { if (_parent.bFadedIn == true && Mouse.getTopMostEntity() == this) _parent.onExitMenuRectClick(); }; } - + public function setConfig(a_config: Object): Void { _config = a_config; - + positionFloatingElements(); - + var itemListState = inventoryLists.itemList.listState; var categoryListState = inventoryLists.categoryList.listState; var appearance = a_config["Appearance"]; - + categoryListState.iconSource = appearance.icons.category.source; - + itemListState.iconSource = appearance.icons.item.source; itemListState.showStolenIcon = appearance.icons.item.showStolen; - + itemListState.defaultEnabledColor = appearance.colors.text.enabled; itemListState.negativeEnabledColor = appearance.colors.negative.enabled; itemListState.stolenEnabledColor = appearance.colors.stolen.enabled; @@ -144,12 +156,12 @@ class ItemMenu extends MovieClip itemListState.stolenDisabledColor = appearance.colors.stolen.disabled; _quantityMinCount = a_config["ItemList"].quantityMenu.minCount; - + if (_platform == 0) { _switchTabKey = a_config["Input"].controls.pc.switchTab; } else { _switchTabKey = a_config["Input"].controls.gamepad.switchTab; - + var previousColumnKey = a_config["Input"].controls.gamepad.prevColumn; var nextColumnKey = a_config["Input"].controls.gamepad.nextColumn; var sortOrderKey = a_config["Input"].controls.gamepad.sortOrder; @@ -157,39 +169,41 @@ class ItemMenu extends MovieClip {keyCode: nextColumnKey}]; _sortOrderControls = {keyCode: sortOrderKey}; } - + _switchControls = {keyCode: _switchTabKey}; - + _searchKey = a_config["Input"].controls.pc.search; _searchControls = {keyCode: _searchKey}; - + updateBottomBar(false); } // @API public function SetPlatform(a_platform: Number, a_bPS3Switch: Boolean): Void { + VRInput.instance.updatePlatform(a_platform); + _platform = a_platform; - + if (a_platform == 0) { _acceptControls = Input.Enter; _cancelControls = Input.Tab; - + // Defaults _switchControls = Input.Alt; } else { _acceptControls = Input.Accept; _cancelControls = Input.Cancel; - + // Defaults _switchControls = Input.GamepadBack; _sortColumnControls = Input.SortColumn; _sortOrderControls = Input.SortOrder; } - + // Defaults _searchControls = Input.Space; - + inventoryLists.setPlatform(a_platform,a_bPS3Switch); itemCard.SetPlatform(a_platform,a_bPS3Switch); bottomBar.setPlatform(a_platform,a_bPS3Switch); @@ -206,18 +220,26 @@ class ItemMenu extends MovieClip { if (!bFadedIn) return true; - + var nextClip = pathToFocus.shift(); - + if (nextClip.handleInput(details, pathToFocus)) return true; - + if (GlobalFunc.IsKeyPressed(details) && (details.navEquivalent == NavigationCode.TAB || details.navEquivalent == NavigationCode.SHIFT_TAB)) - GameDelegate.call("CloseMenu",[]); + closeMenu(); return true; } + public function closeMenu() + { + //Debug.log(">>> ItemMenu::CloseMenu"); + VRInput.instance.teardown(); + GameDelegate.call("CloseMenu",[]); + //Debug.log("<<< ItemMenu::CloseMenu"); + } + // @API public function UpdatePlayerInfo(aUpdateObj: Object): Void { @@ -255,13 +277,13 @@ class ItemMenu extends MovieClip inventoryLists.categoryList.disableSelection = false; inventoryLists.categoryList.disableInput = false; } - + // @API public function RestoreIndices(): Void { var categoryList = inventoryLists.categoryList; var itemList = inventoryLists.itemList; - + if (arguments[0] != undefined && arguments[0] != -1 && arguments.length == 5) { categoryList.listState.restoredItem = arguments[0]; categoryList.onUnsuspend = function() @@ -269,7 +291,7 @@ class ItemMenu extends MovieClip this.onItemPress(this.listState.restoredItem, 0); delete this.onUnsuspend; }; - + itemList.listState.restoredScrollPosition = arguments[2]; itemList.listState.restoredSelectedIndex = arguments[1]; itemList.listState.restoredActiveColumnIndex = arguments[3]; @@ -283,12 +305,12 @@ class ItemMenu extends MovieClip this.selectedIndex = this.listState.restoredSelectedIndex; delete this.onInvalidate; }; - + this.layout.restoreColumnState(this.listState.restoredActiveColumnIndex, this.listState.restoredActiveColumnState); delete this.onUnsuspend; }; } else { - + categoryList.onUnsuspend = function() { this.onItemPress(1, 0); // ALL @@ -296,8 +318,8 @@ class ItemMenu extends MovieClip }; } } - - + + /* PRIVATE FUNCTIONS */ public function onItemCardSubMenuAction(event: Object): Void @@ -314,7 +336,7 @@ class ItemMenu extends MovieClip inventoryLists.categoryList.disableInput = false; } } - + private function onConfigLoad(event: Object): Void { setConfig(event.config); @@ -334,32 +356,38 @@ class ItemMenu extends MovieClip private function onExitMenuRectClick(): Void { - GameDelegate.call("CloseMenu",[]); + closeMenu(); } private function onCategoryChange(event: Object): Void { } - + + private function ResetItemCard(aiItemInfo) + { + itemCard.itemInfo = aiItemInfo; + bottomBar.updateBarterPerItemInfo(aiItemInfo); + } + private function onItemHighlightChange(event: Object): Void - { + { if (event.index != -1) { if (!_bItemCardFadedIn) { _bItemCardFadedIn = true; - + if (_bItemCardPositioned) itemCard.FadeInCard(); } - + if (_bItemCardPositioned) GameDelegate.call("UpdateItem3D",[true]); - + GameDelegate.call("RequestItemCardInfo",[], this, "UpdateItemCardInfo"); - + } else { if (!bFadedIn) resetMenu(); - + if (_bItemCardFadedIn) { _bItemCardFadedIn = false; onHideItemsList(); @@ -420,39 +448,39 @@ class ItemMenu extends MovieClip private function saveIndices(): Void { var a = new Array(); - + // Save selected category, selected item and relative scroll position a.push(inventoryLists.categoryList.selectedIndex); a.push(inventoryLists.itemList.selectedIndex); a.push(inventoryLists.itemList.scrollPosition); a.push(inventoryLists.itemList.layout.activeColumnIndex); a.push(inventoryLists.itemList.layout.activeColumnState); - + GameDelegate.call("SaveIndices", [a]); } - + private function positionFixedElements(): Void { GlobalFunc.SetLockFunction(); - + inventoryLists.Lock("L"); inventoryLists._x = inventoryLists._x - 20; - + var leftEdge = Stage.visibleRect.x + Stage.safeRect.x; var rightEdge = Stage.visibleRect.x + Stage.visibleRect.width - Stage.safeRect.x; - + bottomBar.positionElements(leftEdge, rightEdge); - + MovieClip(exitMenuRect).Lock("TL"); exitMenuRect._x = exitMenuRect._x - Stage.safeRect.x; exitMenuRect._y = exitMenuRect._y - Stage.safeRect.y; } - + private function positionFloatingElements(): Void { var leftEdge = Stage.visibleRect.x + Stage.safeRect.x; var rightEdge = Stage.visibleRect.x + Stage.visibleRect.width - Stage.safeRect.x; - + var a = inventoryLists.getContentBounds(); // 25 is hardcoded cause thats the final offset after the animation of the panel container is done var panelEdge = inventoryLists._x + a[0] + a[2] + 25; @@ -460,16 +488,16 @@ class ItemMenu extends MovieClip var itemCardContainer = itemCard._parent; var itemcardPosition = _config.ItemInfo.itemcard; var itemiconPosition = _config.ItemInfo.itemicon; - + var scaleMult = (rightEdge - panelEdge) / itemCardContainer._width; - + // Scale down if necessary if (scaleMult < 1.0) { itemCardContainer._width *= scaleMult; itemCardContainer._height *= scaleMult; itemiconPosition.scale *= scaleMult; } - + if (itemcardPosition.align == "left") itemCardContainer._x = panelEdge + leftEdge + itemcardPosition.xOffset; else if (itemcardPosition.align == "right") @@ -485,50 +513,50 @@ class ItemMenu extends MovieClip mouseRotationRect._width = itemCardContainer._width; mouseRotationRect._height = 0.55 * Stage.visibleRect.height; } - + _bItemCardPositioned = true; - + // Delayed fade in if positioned wasn't set if (_bItemCardFadedIn) { GameDelegate.call("UpdateItem3D",[true]); itemCard.FadeInCard(); } } - + private function shouldProcessItemsListInput(abCheckIfOverRect: Boolean): Boolean { var process = bFadedIn == true && inventoryLists.currentState == InventoryLists.SHOW_PANEL && inventoryLists.itemList.itemCount > 0 && !inventoryLists.itemList.disableSelection && !inventoryLists.itemList.disableInput; - if (process && _platform == 0 && abCheckIfOverRect) { + if (process && _platform == Shared.Platforms.CONTROLLER_PC && abCheckIfOverRect) { var e = Mouse.getTopMostEntity(); var found = false; - + while (!found && e != undefined) { if (e == inventoryLists.itemList) found = true; - + e = e._parent; } - + process = process && found; } return process; } - + // Added to prevent clicks on the scrollbar from equipping/using stuff private function confirmSelectedEntry(): Boolean { // only confirm when using mouse if (_platform != 0) return true; - + for (var e = Mouse.getTopMostEntity(); e != undefined; e = e._parent) if (e.itemIndex == inventoryLists.itemList.selectedIndex) return true; - + return false; } - + /* This method is only used for the InventoryMenu Favorites Category. It prevents a lockup when unfavoriting the last item from favorites list by @@ -536,9 +564,11 @@ class ItemMenu extends MovieClip */ private function resetMenu(): Void { - saveIndices(); - GameDelegate.call("CloseMenu",[]); - skse.OpenMenu("Inventory Menu"); + // FIXME? This crashes SkyrimVR + // When opening the inventory a second time without having an item selected for some reason. + //saveIndices(); + //closemenu(); + //skse.OpenMenu("Inventory Menu"); } /* @@ -556,19 +586,19 @@ class ItemMenu extends MovieClip a_entryObject.flags |= Item.BOOKFLAG_READ; a_entryObject.skyui_itemDataProcessed = false; - + inventoryLists.itemList.requestInvalidate(); return true; } - + private function getEquipButtonData(a_itemType: Number, a_bAlwaysEquip: Boolean): Object { var btnData = {}; - + var useControls = Input.Activate; var equipControls = Input.Equip; - + switch (a_itemType) { case Inventory.ICT_ARMOR : btnData.text = "$Equip"; @@ -592,9 +622,9 @@ class ItemMenu extends MovieClip btnData.text = "$Use"; btnData.controls = a_bAlwaysEquip ? equipControls : useControls; } - + return btnData; } - + private function updateBottomBar(a_bSelected: Boolean): Void {} -} \ No newline at end of file +} diff --git a/src/ItemMenus/MagicMenu.as b/src/ItemMenus/MagicMenu.as index 5a8dc08cf..561134e19 100644 --- a/src/ItemMenus/MagicMenu.as +++ b/src/ItemMenus/MagicMenu.as @@ -10,64 +10,95 @@ import skyui.props.PropertyDataExtender; import skyui.defines.Input; import skyui.defines.Inventory; - +import skyui.util.Debug; +import skyui.VRInput; class MagicMenu extends ItemMenu { #include "../version.as" - + /* PRIVATE VARIABLES */ - + private var _hideButtonFlag: Number = 0; private var _bMenuClosing: Boolean = false; private var _bSwitchMenus: Boolean = false; private var _categoryListIconArt: Array; - - + + /* PROPERTIES */ - + public var hideButtonFlag: Number; - + /* INITIALIZATION */ public function MagicMenu() { super(); - + _categoryListIconArt = ["cat_favorites", "mag_all", "mag_alteration", "mag_illusion", "mag_destruction", "mag_conjuration", "mag_restoration", "mag_shouts", "mag_powers", "mag_activeeffects"]; } - - + + private var vrActionConditions = undefined; + + public function OnShow() { + super.OnShow(); + + if(!vrActionConditions) { + vrActionConditions = VRInput.instance.getActionConditions("MagicMenu"); + if(VRInput.instance.logDetails) + Debug.dump("vrActionConditions", vrActionConditions); + } + + _bMenuClosing = false; + //iLastItemType = InventoryDefines.ICT_NONE; + //bottomBar.iLastItemType = Inventory.ICT_NONE; + /* ResetItemCard({type:Inventory.ICT_SPELL_DEFAULT}); */ + /* itemCard.bFadedIn = false; */ + /* itemCard._visible = false; */ + if(!bFadedIn) { + inventoryLists.showPanel(false); + this.ToggleMenuFade(); + } + /* bottomBar.GoToDefaultFrame(); */ + /* bottomBar.HideButtons(); */ + } + /* PUBLIC FUNCTIONS */ public function InitExtensions(): Void { super.InitExtensions(); - + GameDelegate.addCallBack("DragonSoulSpent", this, "DragonSoulSpent"); GameDelegate.addCallBack("AttemptEquip", this , "AttemptEquip"); - + bottomBar.updatePerItemInfo({type:Inventory.ICT_SPELL_DEFAULT}); - + // Initialize menu-specific list components var categoryList: CategoryList = inventoryLists.categoryList; categoryList.iconArt = _categoryListIconArt; + + // SkyrimVR moves some variables from the "Interface" section to the "VRUI" section. + // Originally, SkyUI patched these positions in papyrus scripts to line up with the new UI. + // It does seem to make sense for this kind of patching to be done from the UI itself though. + var itemPosXSettingName = "fMagic3DItemPosX:VRUI"; + skse.SetINISetting(itemPosXSettingName, skse.GetINISetting(itemPosXSettingName) - 37); } // @override ItemMenu public function setConfig(a_config: Object): Void { super.setConfig(a_config); - + var itemList: TabularList = inventoryLists.itemList; itemList.addDataProcessor(new MagicDataSetter(a_config["Appearance"])); itemList.addDataProcessor(new MagicIconSetter(a_config["Appearance"])); itemList.addDataProcessor(new PropertyDataExtender(a_config["Appearance"], a_config["Properties"], "magicProperties", "magicIcons", "magicCompoundProperties")); - + var layout: ListLayout = ListLayoutManager.createLayout(a_config["ListLayout"], "MagicListLayout"); itemList.layout = layout; @@ -81,12 +112,12 @@ class MagicMenu extends ItemMenu { if (!bFadedIn) return true; - + var nextClip = pathToFocus.shift(); - + if (nextClip.handleInput(details, pathToFocus)) return true; - + if (GlobalFunc.IsKeyPressed(details)) { if (details.navEquivalent == NavigationCode.TAB || details.navEquivalent == NavigationCode.SHIFT_TAB ) { startMenuFade(); @@ -100,23 +131,40 @@ class MagicMenu extends ItemMenu return true; } + public function classname(): String{ + return "Class MagicMenu"; + } + + public function handleVRInput(event): Boolean { + if (!bFadedIn) + return; + + var action = VRInput.instance.triggeredAction(vrActionConditions, event); + if(action == "search") { + inventoryLists.searchWidget.startInput(); + return true; + } + + return false; + } + // @API public function DragonSoulSpent(): Void { itemCard.itemInfo.soulSpent = true; updateBottomBar(); } - + // @API public function AttemptEquip(a_slot: Number): Void { if (shouldProcessItemsListInput(true) && confirmSelectedEntry()) GameDelegate.call("ItemSelect",[a_slot]); } - - + + /* PRIVATE FUNCTIONS */ - + // @override ItemMenu private function onItemSelect(event: Object): Void { @@ -128,7 +176,7 @@ class MagicMenu extends ItemMenu GameDelegate.call("ShowShoutFail",[]); } } - + // @override ItemMenu private function onExitMenuRectClick(): Void { @@ -141,7 +189,7 @@ class MagicMenu extends ItemMenu if (!_bMenuClosing) return; - GameDelegate.call("CloseMenu", []); + closeMenu(); if (_bSwitchMenus) { GameDelegate.call("CloseTweenMenu",[]); skse.OpenMenu("InventoryMenu"); @@ -152,7 +200,7 @@ class MagicMenu extends ItemMenu private function onShowItemsList(event: Object): Void { super.onShowItemsList(event); - + if (event.index != -1) updateBottomBar(true); } @@ -161,7 +209,7 @@ class MagicMenu extends ItemMenu private function onItemHighlightChange(event: Object) { super.onItemHighlightChange(event); - + if (event.index != -1) updateBottomBar(true); } @@ -170,12 +218,12 @@ class MagicMenu extends ItemMenu private function onHideItemsList(event: Object): Void { super.onHideItemsList(event); - + bottomBar.updatePerItemInfo({type:Inventory.ICT_SPELL_DEFAULT}); - + updateBottomBar(false); } - + private function openInventoryMenu(a_bFade: Boolean): Void { if (a_bFade) { @@ -183,41 +231,56 @@ class MagicMenu extends ItemMenu startMenuFade(); } else { saveIndices(); - GameDelegate.call("CloseMenu",[]); + closeMenu(); GameDelegate.call("CloseTweenMenu",[]); skse.OpenMenu("InventoryMenu"); } } - + // @override ItemMenu private function updateBottomBar(a_bSelected: Boolean): Void { navPanel.clearButtons(); - + + var activateControls = skyui.util.Input.pickControls(_platform, + {PCArt:"E",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"trigger",MoveArt:"PS3_MOVE",OculusArt:"trigger",WindowsMRArt:"trigger"}); + var exitControls = skyui.util.Input.pickControls(_platform, + {PCArt:"Tab",XBoxArt:"360_B",PS3Art:"PS3_B",ViveArt:"grip",MoveArt:"PS3_B",OculusArt:"grab",WindowsMRArt:"grab"}); + var favoriteControls = skyui.util.Input.pickControls(_platform, + {PCArt:"F",XBoxArt:"360_Y",PS3Art:"PS3_Y",ViveArt:"radial_Either_Right",MoveArt:"PS3_Y",OculusArt:"OCC_B",WindowsMRArt:"radial_Either_Right"}); + var unlockControls = skyui.util.Input.pickControls(_platform, + {PCArt:"R",XBoxArt:"360_X",PS3Art:"PS3_X",ViveArt:"radial_Either_Left",MoveArt:"PS3_X",OculusArt:"OCC_Y",WindowsMRArt:"radial_Either_Left"}); + if (a_bSelected && (inventoryLists.itemList.selectedEntry.filterFlag & Inventory.FILTERFLAG_MAGIC_ACTIVEEFFECTS) == 0) { - navPanel.addButton({text: "$Equip", controls: Input.Equip}); - + navPanel.addButton({text: "$Equip", controls: activateControls}); + if (inventoryLists.itemList.selectedEntry.filterFlag & inventoryLists.categoryList.entryList[0].flag != 0) - navPanel.addButton({text: "$Unfavorite", controls: Input.YButton}); + navPanel.addButton({text: "$Unfavorite", controls: favoriteControls}); else - navPanel.addButton({text: "$Favorite", controls: Input.YButton}); - + navPanel.addButton({text: "$Favorite", controls: favoriteControls}); + if (itemCard.itemInfo.showUnlocked) - navPanel.addButton({text: "$Unlock", controls: Input.XButton}); - + navPanel.addButton({text: "$Unlock", controls: unlockControls}); + } else { - navPanel.addButton({text: "$Exit", controls: _cancelControls}); - navPanel.addButton({text: "$Search", controls: _searchControls}); + // navPanel.addButton({text: "$Exit", controls: _cancelControls}); if (_platform != 0) { - navPanel.addButton({text: "$Column", controls: _sortColumnControls}); - navPanel.addButton({text: "$Order", controls: _sortOrderControls}); + navPanel.addButton({text: "$Column", controls: {namedKey: "Action_Up"}}); + navPanel.addButton({text: "$Order", controls: {namedKey: "Action_Double_Up"}}); } - navPanel.addButton({text: "$Inventory", controls: _switchControls}); + // navPanel.addButton({text: "$Inventory", controls: _switchControls}); } - + + navPanel.addButton({ + text: "$Search", + controls: skyui.util.Input.pickControls(_platform, + {PCArt: "Space", ViveArt: "radial_Either_Down", + MoveArt: "PS3_X", OculusArt: "OCC_X", WindowsMRArt: "radial_Either_Down", + KnucklesArt: "OCC THUMB_REST"})}); + navPanel.updateButtons(true); } - + private function startMenuFade(): Void { inventoryLists.hidePanel(); @@ -225,4 +288,4 @@ class MagicMenu extends ItemMenu saveIndices(); _bMenuClosing = true; } -} \ No newline at end of file +} diff --git a/src/ItemMenus/bottombar.fla b/src/ItemMenus/bottombar.fla index 2baec5c1a..57e60023d 100644 Binary files a/src/ItemMenus/bottombar.fla and b/src/ItemMenus/bottombar.fla differ diff --git a/src/ItemMenus/inventorylists.fla b/src/ItemMenus/inventorylists.fla index 039b40a0d..e161c56a2 100644 Binary files a/src/ItemMenus/inventorylists.fla and b/src/ItemMenus/inventorylists.fla differ diff --git a/src/ItemMenus/inventorymenu.fla b/src/ItemMenus/inventorymenu.fla index 619ae486c..6a584c1c1 100644 Binary files a/src/ItemMenus/inventorymenu.fla and b/src/ItemMenus/inventorymenu.fla differ diff --git a/src/ItemMenus/itemcard.fla b/src/ItemMenus/itemcard.fla index 0e98141f9..28d4e41f6 100644 Binary files a/src/ItemMenus/itemcard.fla and b/src/ItemMenus/itemcard.fla differ diff --git a/src/ItemMenus/magicmenu.fla b/src/ItemMenus/magicmenu.fla index c998bb3f2..253201cc1 100644 Binary files a/src/ItemMenus/magicmenu.fla and b/src/ItemMenus/magicmenu.fla differ diff --git a/src/PauseMenu/InputMappingArt.as b/src/PauseMenu/InputMappingArt.as index ac86eea80..1096b4bdb 100644 --- a/src/PauseMenu/InputMappingArt.as +++ b/src/PauseMenu/InputMappingArt.as @@ -1,4 +1,5 @@ import Shared.GlobalFunc; +import skyui.defines.ButtonArtNames; class InputMappingArt extends MovieClip { @@ -7,177 +8,34 @@ class InputMappingArt extends MovieClip private var _keyCodes: Array; - - - private var _buttonNameMap: Object = {esc: 1, - //1: 2, - //2: 3, - //3: 4, - //4: 5, - //5: 6, - //6: 7, - //7: 8, - //8: 9, - //9: 10, - //0: 11, - hyphen: 12, - equal: 13, - backspace: 14, - tab: 15, - q: 16, - w: 17, - e: 18, - r: 19, - t: 20, - y: 21, - u: 22, - i: 23, - o: 24, - p: 25, - bracketleft: 26, - bracketright: 27, - enter: 28, - //l-ctrl: 29, - a: 30, - s: 31, - d: 32, - f: 33, - g: 34, - h: 35, - j: 36, - k: 37, - l: 38, - semicolon: 39, - quotesingle: 40, - tilde: 41, - //l-shift: 42, - backslash: 43, - z: 44, - x: 45, - c: 46, - v: 47, - b: 48, - n: 49, - m: 50, - comma: 51, - period: 52, - slash: 53, - //r-shift: 54, - numpadmult: 55, - //l-alt: 56, - space: 57, - capslock: 58, - f1: 59, - f2: 60, - f3: 61, - f4: 62, - f5: 63, - f6: 64, - f7: 65, - f8: 66, - f9: 67, - f10: 68, - numlock: 69, - scrolllock: 70, - numpad7: 71, - numpad8: 72, - numpad9: 73, - numpadminus: 74, - numpad4: 75, - numpad5: 76, - numpad6: 77, - numpadplus: 78, - numpad1: 79, - numpad2: 80, - numpad3: 81, - numpad0: 82, - numpaddec: 83, - f11: 87, - f12: 88, - numpadenter: 156, - //r-ctrl: 157, - numpaddivide: 158, - printsrc: 183, - //r-alt: 184, - pause: 197, - home: 199, - up: 200, - pgup: 201, - left: 203, - right: 205, - end: 207, - down: 208, - pgdn: 209, - insert: 210, - //delete: 211, - // Mouse - mouse1: 256, - mouse2: 257, - mouse3: 258, - mouse4: 259, - mouse5: 260, - mouse6: 261, - mouse7: 262, - mouse8: 263, - mousewheelup: 264, - mousewheeldown: 265, - // Controller - //360_start: 270, - //360_back: 271, - //360_l3: 272, - //360_r3: 273, - //360_lb: 274, - //360_rb: 275, - //360_a: 276, - //360_b: 277, - //360_x: 278, - //360_y: 279, - //360_lt: 280, - //360_rt: 281, - // PS3 buttons = 360 buttons - ps3_start: 270, - ps3_back: 271, - ps3_l3: 272, - ps3_r3: 273, - ps3_lb: 274, - ps3_rb: 275, - ps3_a: 276, - ps3_b: 277, - ps3_x: 278, - ps3_y: 279, - ps3_lt: 280, - ps3_rt: 281 - }; - - /* STAGE ELEMENTS */ - + public var background: MovieClip; public var textField: TextField; - - + + /* PROPERTIES */ - + public function set hiddenBackground(a_flag: Boolean) { background._visible = !a_flag; } - + public function get hiddenBackground(): Boolean { return background._visible; } - + public function get width(): Number { return background._width; } - + public function set width(a_value: Number) { background._width = a_value; } - + public var buttonArt: Array; @@ -196,7 +54,7 @@ class InputMappingArt extends MovieClip _keyCodes = []; textField.textAutoSize = "shrink"; - + textField._visible = false; background._visible = false; @@ -204,47 +62,16 @@ class InputMappingArt extends MovieClip this["buttonArt" + i]._visible = false; buttonArt.push(this["buttonArt" + i]); } - - // These Button names can't be set in the object constructor since they're 'invalid' names - _buttonNameMap["1"] = 2; - _buttonNameMap["2"] = 3; - _buttonNameMap["3"] = 4; - _buttonNameMap["4"] = 5; - _buttonNameMap["5"] = 6; - _buttonNameMap["6"] = 7; - _buttonNameMap["7"] = 8; - _buttonNameMap["8"] = 9; - _buttonNameMap["9"] = 10; - _buttonNameMap["0"] = 11; - _buttonNameMap["l-ctrl"] = 29; - _buttonNameMap["l-shift"] = 42; - _buttonNameMap["r-shift"] = 54; - _buttonNameMap["l-alt"] = 56; - _buttonNameMap["r-ctrl"] = 157; - _buttonNameMap["r-alt"] = 184; - _buttonNameMap["delete"] = 211; - _buttonNameMap["360_start"] = 270; - _buttonNameMap["360_back"] = 271; - _buttonNameMap["360_l3"] = 272; - _buttonNameMap["360_r3"] = 273; - _buttonNameMap["360_lb"] = 274; - _buttonNameMap["360_rb"] = 275; - _buttonNameMap["360_a"] = 276; - _buttonNameMap["360_b"] = 277; - _buttonNameMap["360_x"] = 278; - _buttonNameMap["360_y"] = 279; - _buttonNameMap["360_lt"] = 280; - _buttonNameMap["360_rt"] = 281; } - - + + /* PUBLIC FUNCTIONS */ public function setButtonName(a_buttonName: String): Void { textField._visible = false; - var keyCodes = _buttonNameMap[a_buttonName.toLowerCase()]; + var keyCodes = ButtonArtNames.lookup(a_buttonName); if (keyCodes instanceof Array) _keyCodes = keyCodes; @@ -266,9 +93,9 @@ class InputMappingArt extends MovieClip var xOffset: Number = 0; for (var i: Number = 0; i < buttonArt.length; i++) { var icon: MovieClip = buttonArt[i]; - + if (_keyCodes[i] > 0) { - icon._visible = true; + icon._visible = true; icon.gotoAndStop(_keyCodes[i]); icon._x = xOffset; icon._y = 0; //(0 - icon._height) / 2; // Center it @@ -277,7 +104,7 @@ class InputMappingArt extends MovieClip icon._visible = false; } } - + background._width = xOffset; } } diff --git a/src/PauseMenu/OptionsList.as b/src/PauseMenu/OptionsList.as index 4fdc123f8..8ee2a7ba5 100644 --- a/src/PauseMenu/OptionsList.as +++ b/src/PauseMenu/OptionsList.as @@ -34,6 +34,7 @@ class OptionsList extends Shared.BSScrollingList } aEntryClip.ID = aEntryObject.ID; aEntryClip.value = aEntryObject.value; + aEntryClip.requiresRestart = aEntryObject.requiresRestart; aEntryClip.text = aEntryObject.text; } } diff --git a/src/PauseMenu/Quest_Journal.as b/src/PauseMenu/Quest_Journal.as index 5a935d13b..f80490976 100644 --- a/src/PauseMenu/Quest_Journal.as +++ b/src/PauseMenu/Quest_Journal.as @@ -7,34 +7,45 @@ import gfx.ui.NavigationCode; import gfx.managers.FocusHandler; import skyui.components.ButtonPanel; +import skyui.defines.ButtonArtNames; +import skyui.util.Debug; +import skyui.VRInput; +import skyui.util.GlobalFunctions; class Quest_Journal extends MovieClip { #include "../version.as" - + var bTabsDisabled: Boolean; - + var iCurrentTab: Number; - + var BottomBar: MovieClip; var BottomBar_mc: MovieClip; - + var TextPanel: MovieClip; + var showInputReadout: Boolean; + var PageArray: Array; - + public var previousTabButton: MovieClip; public var nextTabButton: MovieClip; - var TopmostPage: MovieClip; + var TopmostPage: MovieClip; var QuestsFader: MovieClip; var StatsFader: MovieClip; var SystemFader: MovieClip; - + var QuestsTab: RadioButton; var StatsTab: RadioButton; var SystemTab: RadioButton; var TabButtonGroup: ButtonGroup; - + var ConfigPanel: MovieClip; + var _VRInput: VRInput; + + public static var PAGE_QUEST: Number = 0; + public static var PAGE_STATS: Number = 1; + public static var PAGE_SYSTEM: Number = 2; public static var QUESTS_TAB: Number = 0; public static var STATS_TAB: Number = 1; public static var SETTINGS_TAB: Number = 2; @@ -46,37 +57,99 @@ class Quest_Journal extends MovieClip PageArray = new Array(QuestsFader.Page_mc, StatsFader.Page_mc, SystemFader.Page_mc); TopmostPage = QuestsFader; bTabsDisabled = false; + iCurrentTab = Quest_Journal.PAGE_QUEST; } function InitExtensions() { GlobalFunc.SetLockFunction(); - MovieClip(BottomBar_mc).Lock("B"); - + ConfigPanel = _root.ConfigPanelFader.configPanel; - + QuestsTab.disableFocus = true; StatsTab.disableFocus = true; SystemTab.disableFocus = true; - + TabButtonGroup = ButtonGroup(QuestsTab.group); TabButtonGroup.addEventListener("itemClick", this, "onTabClick"); TabButtonGroup.addEventListener("change", this, "onTabChange"); - + GameDelegate.addCallBack("RestoreSavedSettings", this, "RestoreSavedSettings"); GameDelegate.addCallBack("onRightStickInput", this, "onRightStickInput"); GameDelegate.addCallBack("HideMenu", this, "DoHideMenu"); GameDelegate.addCallBack("ShowMenu", this, "DoShowMenu"); GameDelegate.addCallBack("StartCloseMenu", this, "CloseMenu"); - + GameDelegate.addCallBack("OnShow", this, "OnShow"); + GameDelegate.call("ShouldShowMod", [], this, "SetShowMod"); + BottomBar_mc.InitBar(); - + ConfigPanel.initExtensions(); } + function OnShow(): Void + { + var vrtools = skse["plugins"]["vrinput"]; + if(vrtools != undefined) + { + //vrtools.ShutoffButtonEventsToGame(true); + } else { + Debug.log("SkyrimVRTools plugin not available"); + } + + showInputReadout = skse["plugins"]["skyui"].IniGetBool("Settings/showInputReadout"); + if(!showInputReadout) + TextPanel._visible = false; + else { + // For whatever reason, Scaleform API requires an object to be somewhere + // on the stage to be able to send inputs via a registered callback. + // By adding it here, VRInput should start receiving and button updates + // and start pumping out button events. + _VRInput = VRInput.instance; + VRInput.instance.setup(); + } + + QuestsTab.disableFocus = true; + StatsTab.disableFocus = true; + SystemTab.disableFocus = true; + QuestsTab.disabled = false; + StatsTab.disabled = false; + SystemTab.disabled = false; + BottomBar_mc.InitBar(); + var pageCursor = 0; + while(pageCursor <= Quest_Journal.PAGE_SYSTEM) + { + var page = PageArray[pageCursor]; + Shared.Macros.BSASSERT(page != null && page != undefined,"Unable to open page " + pageCursor); + Shared.Macros.BSASSERT(page.OnShow != null && page.OnShow != undefined,"page does not have OnShow function"); + page.OnShow(); + if(pageCursor == iCurrentTab) + { + page.startPage(); + } + pageCursor = pageCursor + 1; + } + if(TopmostPage != null && TopmostPage != undefined) + { + TopmostPage.gotoAndPlay("fadeIn"); + } + } + + function SetShowMod(): Void + { + PageArray[Quest_Journal.PAGE_SYSTEM].SetShowMod(arguments[0]); + } + function RestoreSavedSettings(aiSavedTab: Number, abTabsDisabled: Boolean): Void { - iCurrentTab = Math.min(Math.max(aiSavedTab, 0), TabButtonGroup.length - 1); + // For some reason, the game will ask for the tab to be set to 0 (PAGE_QUEST) + // *every* time after 'OnShow' is called. + // This means the player will always be sent to the Quest page when the + // quest_journal menu is brought up. + // Strangely, the vanilla VR interface does not suffer from this problem. + if(aiSavedTab != 0) + iCurrentTab = Math.min(Math.max(aiSavedTab, 0), TabButtonGroup.length - 1); + bTabsDisabled = abTabsDisabled; if (bTabsDisabled) { iCurrentTab = TabButtonGroup.length - 1; @@ -89,7 +162,7 @@ class Quest_Journal extends MovieClip function SwitchPageToFront(aiTab: Number, abForceFade: Boolean): Void { - if (TopmostPage != PageArray[iCurrentTab]._parent) + if (TopmostPage != PageArray[iCurrentTab]._parent) { TopmostPage.gotoAndStop("hide"); PageArray[iCurrentTab]._parent.swapDepths(TopmostPage); @@ -99,6 +172,25 @@ class Quest_Journal extends MovieClip BottomBar_mc.LevelMeterRect._visible = iCurrentTab != 0; } + function classname():String { + return "class Quest_Journal" + } + + function handleVRButtonUpdate(update) + { + if(!showInputReadout) + return; + + //Debug.dump("update", update); + var stateString = VRInput.instance.controllerStateString(update); + Debug.log("stateString: " + stateString); + if(stateString.length != 0) { + TextPanel.TextArea.SetText(stateString); + } else { + TextPanel.TextArea.SetText(update.timestamp.toString()); + } + } + function handleInput(details: InputDetails, pathToFocus: Array): Boolean { var bHandledInput: Boolean = false; @@ -106,12 +198,18 @@ class Quest_Journal extends MovieClip bHandledInput = pathToFocus[0].handleInput(details, pathToFocus.slice(1)); } if (!bHandledInput && GlobalFunc.IsKeyPressed(details, false)) { + var triggerLeft = NavigationCode.GAMEPAD_L2; + var triggerRight = NavigationCode.GAMEPAD_R2; + if(PageArray[Quest_Journal.PAGE_SYSTEM].GetIsRemoteDevice()) { + triggerLeft = NavigationCode.GAMEPAD_L1; + triggerRight = NavigationCode.GAMEPAD_R1; + } if (details.navEquivalent === NavigationCode.TAB) { CloseMenu(); - } else if (details.navEquivalent === NavigationCode.GAMEPAD_L2) { + } else if (details.navEquivalent === triggerLeft) { if (!bTabsDisabled) { PageArray[iCurrentTab].endPage(); - iCurrentTab = iCurrentTab + (details.navEquivalent == NavigationCode.GAMEPAD_L2 ? -1 : 1); + iCurrentTab = iCurrentTab + (details.navEquivalent == triggerLeft ? -1 : 1); if (iCurrentTab == -1) { iCurrentTab = TabButtonGroup.length - 1; } @@ -121,10 +219,10 @@ class Quest_Journal extends MovieClip SwitchPageToFront(iCurrentTab, false); TabButtonGroup.setSelectedButton(TabButtonGroup.getButtonAt(iCurrentTab)); } - } else if (details.navEquivalent === NavigationCode.GAMEPAD_R2) { + } else if (details.navEquivalent === triggerRight) { if (!bTabsDisabled) { PageArray[iCurrentTab].endPage(); - iCurrentTab = iCurrentTab + (details.navEquivalent == NavigationCode.GAMEPAD_L2 ? -1 : 1); + iCurrentTab = iCurrentTab + (details.navEquivalent == triggerLeft ? -1 : 1); if (iCurrentTab == -1) { iCurrentTab = TabButtonGroup.length - 1; } @@ -141,10 +239,21 @@ class Quest_Journal extends MovieClip function CloseMenu(abForceClose: Boolean): Void { + //Debug.log(">>> Quest_Journal::CloseMenu"); + + var vrtools = skse["plugins"]["vrinput"]; + if(vrtools != undefined) + { + //vrtools.ShutoffButtonEventsToGame(false); + } + + VRInput.instance.teardown(); + if (abForceClose != true) { GameDelegate.call("PlaySound", ["UIJournalClose"]); } GameDelegate.call("CloseMenu", [iCurrentTab, QuestsFader.Page_mc.selectedQuestID, QuestsFader.Page_mc.selectedQuestInstance]); + //Debug.log("<<< Quest_Journal::CloseMenu"); } function onTabClick(event: Object): Void @@ -152,9 +261,9 @@ class Quest_Journal extends MovieClip if (bTabsDisabled) { return; } - + var iOldTab: Number = iCurrentTab; - + if (event.item == QuestsTab) { iCurrentTab = 0; } else if (event.item == StatsTab) { @@ -186,12 +295,24 @@ class Quest_Journal extends MovieClip function SetPlatform(aiPlatform: Number, abPS3Switch: Boolean): Void { + VRInput.instance.updatePlatform(aiPlatform); + + // Not sure if these are the correct mapping for next/prev tab + var nextTabArt = ButtonArtNames.lookup(skyui.util.Input.pickButtonArt(aiPlatform, {ViveArt:"radial_Either_Right", MoveArt:"PS3_Y",OculusArt:"OCC_B", WindowsMRArt:"radial_Either_Right"})); + var prevTabArt = ButtonArtNames.lookup(skyui.util.Input.pickButtonArt(aiPlatform, {ViveArt:"radial_Either_Left", MoveArt:"PS3_X", OculusArt:"OCC_Y", WindowsMRArt:"radial_Either_Left"})); + + // If we can't find the right button art by name, provide some defaults + if (nextTabArt == undefined) + nextTabArt = 281; // RT + if (prevTabArt == undefined) + prevTabArt = 280; // LT + if (aiPlatform == 0) { previousTabButton._visible = nextTabButton._visible = false; } else { previousTabButton._visible = nextTabButton._visible = true; - previousTabButton.gotoAndStop(280); // LT - nextTabButton.gotoAndStop(281); // RT + previousTabButton.gotoAndStop(prevTabArt); + nextTabButton.gotoAndStop(nextTabArt); } for (var i: String in PageArray) { @@ -200,7 +321,7 @@ class Quest_Journal extends MovieClip } } BottomBar_mc.setPlatform(aiPlatform, abPS3Switch); - + ConfigPanel.setPlatform(aiPlatform, abPS3Switch); } @@ -220,7 +341,7 @@ class Quest_Journal extends MovieClip StatsTab.disabled = abEnable; SystemTab.disabled = abEnable; } - + function ConfigPanelOpen(): Void { DisableTabs(true); @@ -230,7 +351,7 @@ class Quest_Journal extends MovieClip FocusHandler.instance.setFocus(ConfigPanel, 0); ConfigPanel.startPage(); } - + function ConfigPanelClose(): Void { ConfigPanel.endPage(); diff --git a/src/PauseMenu/QuestsPage.as b/src/PauseMenu/QuestsPage.as index d7c81eb5b..f7fffa5f1 100644 --- a/src/PauseMenu/QuestsPage.as +++ b/src/PauseMenu/QuestsPage.as @@ -47,6 +47,14 @@ class QuestsPage extends MovieClip _bottomBar = _parent._parent.BottomBar_mc; } + function OnShow() + { + bUpdated = false; + bHasMiscQuests = false; + TitleList.entryList = new Array(); + TitleList.InvalidateData(); + } + function onLoad() { QuestTitleText.SetText(" "); @@ -78,7 +86,7 @@ class QuestsPage extends MovieClip if (bAllowShowOnMap) _showOnMapButton = _bottomBar.buttonPanel.addButton({text: "$Show on Map", controls: _showOnMapControls}); _bottomBar.buttonPanel.updateButtons(true); - + switchFocusToTitles(); } @@ -106,20 +114,9 @@ class QuestsPage extends MovieClip { var bhandledInput: Boolean = false; if (GlobalFunc.IsKeyPressed(details)) { - if ((details.navEquivalent == NavigationCode.GAMEPAD_X || details.code == 77) && bAllowShowOnMap) + if ((details.navEquivalent == NavigationCode.GAMEPAD_X || details.code == 77) && bAllowShowOnMap) { - var quest: Object = undefined; - if (ObjectiveList.selectedEntry != undefined && ObjectiveList.selectedEntry.questTargetID != undefined) { - quest = ObjectiveList.selectedEntry; - } else { - quest = ObjectiveList.entryList[0]; - } - if (quest != undefined && quest.questTargetID != undefined) { - _parent._parent.CloseMenu(); - GameDelegate.call("ShowTargetOnMap", [quest.questTargetID]); - } else { - GameDelegate.call("PlaySound", ["UIMenuCancel"]); - } + onShowMap(); bhandledInput = true; } else if (TitleList.entryList.length > 0) { if (details.navEquivalent == NavigationCode.LEFT && FocusHandler.instance.getFocus(0) != TitleList) { @@ -137,6 +134,21 @@ class QuestsPage extends MovieClip return bhandledInput; } + function onShowMap() { + var quest: Object = undefined; + if (ObjectiveList.selectedEntry != undefined && ObjectiveList.selectedEntry.questTargetID != undefined) { + quest = ObjectiveList.selectedEntry; + } else { + quest = ObjectiveList.entryList[0]; + } + if (quest != undefined && quest.questTargetID != undefined) { + _parent._parent.CloseMenu(); + GameDelegate.call("ShowTargetOnMap", [quest.questTargetID]); + } else { + GameDelegate.call("PlaySound", ["UIMenuCancel"]); + } + } + private function isViewingMiscObjectives(): Boolean { return bHasMiscQuests && TitleList.selectedEntry.formID == 0; @@ -168,7 +180,10 @@ class QuestsPage extends MovieClip Divider.gotoAndStop("Right"); _toggleActiveButton._alpha = 100; ObjectiveList.selectedIndex = -1; - if (iPlatform != 0) { + if (iPlatform != Shared.Platforms.CONTROLLER_PC && + iPlatform != Shared.Platforms.CONTROLLER_VIVE && + iPlatform != Shared.Platforms.CONTROLLER_OCULUS && + iPlatform != Shared.Platforms.CONTROLLER_WINDOWS_MR) { ObjectiveList.disableSelection = true; } updateShowOnMapButtonAlpha(0); @@ -179,7 +194,10 @@ class QuestsPage extends MovieClip FocusHandler.instance.setFocus(ObjectiveList, 0); Divider.gotoAndStop("Left"); _toggleActiveButton._alpha = isViewingMiscObjectives() ? 100 : 50; - if (iPlatform != 0) { + if (iPlatform != Shared.Platforms.CONTROLLER_PC && + iPlatform != Shared.Platforms.CONTROLLER_VIVE && + iPlatform != Shared.Platforms.CONTROLLER_OCULUS && + iPlatform != Shared.Platforms.CONTROLLER_WINDOWS_MR) { ObjectiveList.disableSelection = false; } ObjectiveList.selectedIndex = 0; @@ -195,7 +213,9 @@ class QuestsPage extends MovieClip { var alpha: Number = 50; - if (bAllowShowOnMap && (a_entryIdx >= 0 && ObjectiveList.entryList[a_entryIdx].questTargetID != undefined) || (ObjectiveList.entryList.length > 0 && ObjectiveList.entryList[0].questTargetID != undefined)) { + if (bAllowShowOnMap && + (a_entryIdx >= 0 && ObjectiveList.entryList[a_entryIdx].questTargetID != undefined) || + (ObjectiveList.entryList.length > 0 && ObjectiveList.entryList[0].questTargetID != undefined)) { alpha = 100; } _toggleActiveButton._alpha = ((!TitleList.selectedEntry.completed) ? 100 : 50); @@ -236,7 +256,7 @@ class QuestsPage extends MovieClip var itimeCompleted: Number = undefined; var bCompleted = false; var bUncompleted = false; - + for (var i: Number = 0; i < TitleList.entryList.length; i++) { if (TitleList.entryList[i].formID == 0) { // Is a misc quest @@ -253,13 +273,13 @@ class QuestsPage extends MovieClip bUncompleted = true; } } - + if (itimeCompleted != undefined && bCompleted && bUncompleted) { // i.e. at least one completed and one uncompleted quest in the list TitleList.entryList.push({divider: true, completed: true, timeIndex: itimeCompleted}); } TitleList.entryList.sort(completedQuestSort); - + var isavedIndex: Number = 0; for (var i: Number = 0; i < TitleList.entryList.length; i++) { @@ -279,19 +299,19 @@ class QuestsPage extends MovieClip function completedQuestSort(aObj1: Object, aObj2: Object): Number { - if (!aObj1.completed && aObj2.completed) + if (!aObj1.completed && aObj2.completed) { return -1; } - if (aObj1.completed && !aObj2.completed) + if (aObj1.completed && !aObj2.completed) { return 1; } - if (aObj1.timeIndex < aObj2.timeIndex) + if (aObj1.timeIndex < aObj2.timeIndex) { return -1; } - if (aObj1.timeIndex > aObj2.timeIndex) + if (aObj1.timeIndex > aObj2.timeIndex) { return 1; } @@ -313,11 +333,13 @@ class QuestsPage extends MovieClip ObjectivesHeader._visible = !isViewingMiscObjectives(); ObjectiveList.selectedIndex = -1; ObjectiveList.scrollPosition = 0; - if (iPlatform != 0) { + if (iPlatform != Shared.Platforms.CONTROLLER_PC && + iPlatform != Shared.Platforms.CONTROLLER_VIVE && + iPlatform != Shared.Platforms.CONTROLLER_OCULUS && + iPlatform != Shared.Platforms.CONTROLLER_WINDOWS_MR) { ObjectiveList.disableSelection = true; } - _showOnMapButton._visible = true; updateShowOnMapButtonAlpha(0); } else { NoQuestsText.SetText("No Active Quests"); @@ -326,12 +348,18 @@ class QuestsPage extends MovieClip ObjectiveList.ClearList(); questTitleEndpieces._visible = false; ObjectivesHeader._visible = false; - - _showOnMapButton._visible = false; } + UpdateButtonVisiblity(); ObjectiveList.InvalidateData(); } + function UpdateButtonVisiblity(): Void + { + var bActive = TitleList.entryList.length > 0 && TitleList.selectedEntry != null; + _toggleActiveButton._visible = bActive && !TitleList.selectedEntry.completed; + _showOnMapButton._visible = bActive && !TitleList.selectedEntry.completed && bAllowShowOnMap; + } + function SetDescriptionText(): Void { var iHeaderyOffset: Number = 25; @@ -387,15 +415,10 @@ class QuestsPage extends MovieClip function SetPlatform(a_platform: Number, a_bPS3Switch: Boolean): Void { - if (a_platform == 0) { - _toggleActiveControls = {keyCode: 28}; // Enter - _showOnMapControls = {keyCode: 50}; // M - _deleteControls = {keyCode: 45}; // X - } else { - _toggleActiveControls = {keyCode: 276}; // 360_A - _showOnMapControls = {keyCode: 278}; // 360_X - _deleteControls = {keyCode: 278}; // 360_X - } + _toggleActiveControls = skyui.util.Input.pickControls(a_platform, + {PCArt:"Enter",XBoxArt:"360_A",PS3Art:"PS3_A",ViveArt:"trigger",MoveArt:"PS3_MOVE",OculusArt:"trigger",WindowsMRArt:"trigger"}); + _showOnMapControls = skyui.util.Input.pickControls(a_platform, + {PCArt:"M",XBoxArt:"360_X",PS3Art:"PS3_X",ViveArt:"radial_Either_Up",MoveArt:"PS3_A",OculusArt:"OCC_A",WindowsMRArt:"radial_Either_Up"}); iPlatform = a_platform; TitleList.SetPlatform(a_platform, a_bPS3Switch); diff --git a/src/PauseMenu/SettingsOptionItem.as b/src/PauseMenu/SettingsOptionItem.as index e91586c76..045177f74 100644 --- a/src/PauseMenu/SettingsOptionItem.as +++ b/src/PauseMenu/SettingsOptionItem.as @@ -18,6 +18,10 @@ class SettingsOptionItem extends MovieClip var scrollBar: ScrollBar; var textField: TextField; + var pScope = null; + var sFunction: String = ""; + var bRequiresRestart: Boolean = false; + function SettingsOptionItem() { super(); @@ -29,6 +33,12 @@ class SettingsOptionItem extends MovieClip textField.textAutoSize = "shrink"; } + function SetOnChangeCallback(apScope, asFunction) + { + pScope = apScope; + sFunction = asFunction; + } + function onLoad(): Void { ScrollBar_mc.setScrollProperties(0.7, 0, 20); @@ -145,6 +155,16 @@ class SettingsOptionItem extends MovieClip CheckBox_mc._alpha = abSelected ? 100 : 30; } + function get requiresRestart() + { + return bRequiresRestart; + } + + function set requiresRestart(abRequiresRestart) + { + bRequiresRestart = abRequiresRestart; + } + function handleInput(details: InputDetails, pathToFocus: Array): Boolean { var bhandledInput: Boolean = false; @@ -164,6 +184,9 @@ class SettingsOptionItem extends MovieClip case 1: if (details.navEquivalent == NavigationCode.LEFT || details.navEquivalent == NavigationCode.RIGHT) { bhandledInput = OptionStepper_mc.handleInput(details, pathToFocus); + } else if (details.navEquivalent == NavigationCode.ENTER) { + OptionStepper_mc.ToggleNextOrAround(); + bhandledInput = true; } break; @@ -261,6 +284,7 @@ class SettingsOptionItem extends MovieClip if (bSendChangeEvent) { DoOptionChange(); } + ProcessOnChangeCallback(); } function onScroll(event: Object): Void @@ -268,13 +292,21 @@ class SettingsOptionItem extends MovieClip if (bSendChangeEvent) { DoOptionChange(); } + ProcessOnChangeCallback(); } function DoOptionChange(): Void { - GameDelegate.call("OptionChange", [ID, value]); + GameDelegate.call("OptionChange", [ID, value], requiresRestart); GameDelegate.call("PlaySound", ["UIMenuPrevNext"]); _parent.onValueChange(MovieClip(this).itemIndex, value); + ProcessOnChangeCallback(); } + function ProcessOnChangeCallback() + { + if(pScope != null && pScope != undefined && sFunction != null && sFunction != undefined) { + pScope[sFunction].apply(pScope, [this]); + } + } } diff --git a/src/PauseMenu/StatsPage.as b/src/PauseMenu/StatsPage.as index 57d85ddbc..760228346 100644 --- a/src/PauseMenu/StatsPage.as +++ b/src/PauseMenu/StatsPage.as @@ -1,5 +1,8 @@ import gfx.managers.FocusHandler; import gfx.io.GameDelegate; +import gfx.ui.InputDetails; +import Shared.GlobalFunc; +import gfx.ui.NavigationCode; class StatsPage extends MovieClip { @@ -8,6 +11,8 @@ class StatsPage extends MovieClip var StatsList_mc: MovieClip; var _StatsList: MovieClip; var bUpdated: Boolean; + var iPlatform: Number; + var Divider: MovieClip; function StatsPage() { @@ -17,6 +22,22 @@ class StatsPage extends MovieClip bUpdated = false; } + function OnShow(): Void + { + bUpdated = false; + var STAT_ENTRYLISTINDEX = 2; + var STAT_STRIDE = 4; + var cursor = 0; + while(cursor < arguments.length) + { + CategoryList.entryList[arguments[cursor + STAT_ENTRYLISTINDEX]].stats.length = 0; + cursor = cursor + STAT_STRIDE; + } + CategoryList.entryList.length = 0; + CategoryList.InvalidateData(); + onLoad(); + } + function onLoad(): Void { CategoryList.entryList.push({text: "$GENERAL", stats: new Array(), savedHighlight: 0}); @@ -30,7 +51,7 @@ class StatsPage extends MovieClip CategoryList.addEventListener("listMovedDown", this, "onCategoryListMoveDown"); CategoryList.addEventListener("selectionChange", this, "onCategoryListMouseSelectionChange"); CategoryList.disableInput = true; // Bugfix for vanilla - _StatsList.disableSelection = true; + _StatsList.disableSelection = false; } function startPage(): Void @@ -56,20 +77,20 @@ class StatsPage extends MovieClip var STAT_ENTRYLISTINDEX = 2; var STAT_UNKNOWN = 3; var STAT_STRIDE = 4; - + for (var i: Number = 0; i < arguments.length; i += STAT_STRIDE) { var stat: Object = {text: "$" + arguments[i + STAT_TEXT], value: arguments[i + STAT_VALUE]}; CategoryList.entryList[arguments[i + STAT_ENTRYLISTINDEX]].stats.push(stat); } onCategoryHighlight(); - } + } function onCategoryHighlight(): Void { var stats: Array = CategoryList.selectedEntry.stats; _StatsList.ClearList(); _StatsList.scrollPosition = 0; - + for(var i: Number = 0; i < stats.length; i++) { _StatsList.entryList.push(stats[i]); } @@ -115,6 +136,48 @@ class StatsPage extends MovieClip { CategoryList.SetPlatform(aiPlatform, abPS3Switch); _StatsList.SetPlatform(aiPlatform, abPS3Switch); + iPlatform = aiPlatform; + } + + function handleInput(details: InputDetails, pathToFocus: Array): Boolean + { + var bhandledInput: Boolean = false; + if (GlobalFunc.IsKeyPressed(details)) { + if (_StatsList.entryList.length > 0) { + if (details.navEquivalent == NavigationCode.LEFT && FocusHandler.instance.getFocus(0) != CategoryList) { + switchFocusToCategoryList(); + bhandledInput = true; + } else if (details.navEquivalent == NavigationCode.RIGHT && FocusHandler.instance.getFocus(0) != _StatsList) { + switchFocusToStatsList(); + bhandledInput = true; + + } else if (details.navEquivalent == NavigationCode.DOWN && FocusHandler.instance.getFocus(0) == _StatsList) { + // Scroll down if the user has the stat list select and hits "down" + _StatsList.scrollPosition = _StatsList.scrollPosition + 1; + } else if (details.navEquivalent == NavigationCode.UP && FocusHandler.instance.getFocus(0) == _StatsList) { + // Scroll up if the user has the stat list select and hits "up" + _StatsList.scrollPosition = _StatsList.scrollPosition - 1; + } + } + } + + // Let other widgets try handling the event + if (!bhandledInput && pathToFocus != undefined && pathToFocus.length > 0) { + bhandledInput = pathToFocus[0].handleInput(details, pathToFocus.slice(1)); + } + return bhandledInput; + } + + private function switchFocusToStatsList(): Void + { + FocusHandler.instance.setFocus(_StatsList, 0); + Divider.gotoAndStop("Left"); + } + + private function switchFocusToCategoryList(): Void + { + FocusHandler.instance.setFocus(CategoryList, 0); + Divider.gotoAndStop("Right"); } } diff --git a/src/PauseMenu/SystemPage.as b/src/PauseMenu/SystemPage.as index 81da3c58f..954b9b23c 100644 --- a/src/PauseMenu/SystemPage.as +++ b/src/PauseMenu/SystemPage.as @@ -4,6 +4,10 @@ import gfx.ui.InputDetails; import Shared.GlobalFunc; import gfx.ui.NavigationCode; import gfx.managers.FocusHandler; +import skyui.defines.Input; +import skyui.VRInput; + +import skyui.util.Debug; class SystemPage extends MovieClip { @@ -21,18 +25,14 @@ class SystemPage extends MovieClip public static var HELP_LIST_STATE: Number = 11; public static var HELP_TEXT_STATE: Number = 12; public static var TRANSITIONING: Number = 13; - public static var MOD_CONFIG_STATE: Number = 14; - - public static var SAVE_INDEX: Number = 0; - public static var LOAD_INDEX: Number = 1; - public static var SETTINGS_INDEX: Number = 2; - public static var MOD_CONFIG_INDEX: Number = 3; - public static var CONTROLS_INDEX: Number = 4; - public static var HELP_INDEX: Number = 5; - public static var QUIT_INDEX: Number = 6; - + public static var CHARACTER_LOAD_STATE: Number = 14; + public static var CHARACTER_SELECTION_STATE: Number = 15; + + public static var MOD_MANAGER_BUTTON_INDEX: Number = 3; + public static var CONTROLS_BUTTON_INDEX: Number = 5 + var HelpButtonHolder: ButtonTextArtHolder; - + var BottomBar_mc: MovieClip; var CategoryList: MovieClip; var CategoryList_mc: MovieClip; @@ -52,26 +52,28 @@ class SystemPage extends MovieClip var SettingsPanel: MovieClip; var SystemDivider: MovieClip; var TopmostPanel: MovieClip; - + var ConfirmTextField: TextField; var ErrorText: TextField; var HelpText: TextField; var HelpTitleText: TextField; var VersionText: TextField; - + var bMenuClosing: Boolean; var bRemapMode: Boolean; var bSavingSettings: Boolean; var bSettingsChanged: Boolean; var bUpdated: Boolean; var bShowKinectTunerButton: Boolean; - + var iCurrentState: Number; var iDebounceRemapModeID: Number; var iHideErrorTextID: Number; var iPlatform: Number; var iSaveDelayTimerID: Number; var iSavingSettingsTimerID: Number; + var bDefaultButtonVisible: Boolean; + var bIsRemoteDevice: Boolean; private var _saveDisabledList: Array; @@ -80,6 +82,7 @@ class SystemPage extends MovieClip private var _kinectControls: Object; private var _acceptControls: Object; private var _cancelControls: Object; + private var _characterSelectionControls: Object; private var _acceptButton: MovieClip; private var _cancelButton: MovieClip; @@ -88,6 +91,13 @@ class SystemPage extends MovieClip private var _skyrimVersionMinor: Number; private var _skyrimVersionBuild: Number; + private var _showModMenu: Boolean; + private var _showControlsMenu: Boolean; + private var _deleteButton: Object; + + private var pageWasEnded: Boolean = true; + private var iTurnModeID: Number = undefined; + private var bJustRefreshedSettings: Boolean = false; function SystemPage() { @@ -110,39 +120,99 @@ class SystemPage extends MovieClip bSavingSettings = false; bShowKinectTunerButton = false; iPlatform = 0; + bDefaultButtonVisible = false; + _showModMenu = false; + _showControlsMenu = false; + } + + function GetIsRemoteDevice() { + return bIsRemoteDevice; } - function onLoad(): Void + function OnShow(): Void { - CategoryList.entryList.push({text: "$SAVE", index: SystemPage.SAVE_INDEX}); - CategoryList.entryList.push({text: "$LOAD", index: SystemPage.LOAD_INDEX}); - CategoryList.entryList.push({text: "$SETTINGS", index: SystemPage.SETTINGS_INDEX}); - CategoryList.entryList.push({text: "$CONTROLS", index: SystemPage.CONTROLS_INDEX}); - CategoryList.entryList.push({text: "$HELP", index: SystemPage.HELP_INDEX}); - CategoryList.entryList.push({text: "$QUIT", index: SystemPage.QUIT_INDEX}); + if(pageWasEnded == false) { + endPage(); + } - _saveDisabledList = CategoryList.entryList.slice(); // Make copy - _saveDisabledList.splice(4, 1); //[CategoryList.entryList[0], CategoryList.entryList[1], CategoryList.entryList[2], CategoryList.entryList[3], CategoryList.entryList[5]] + bMenuClosing = false; + bUpdated = false; + bRemapMode = false; + bSettingsChanged = false; + bSavingSettings = false; + bShowKinectTunerButton = false; + bDefaultButtonVisible = false; - CategoryList.InvalidateData(); + // Reset all panels and their animations (?) + var cursor = SystemPage.SAVE_LOAD_STATE; + while(cursor <= SystemPage.CHARACTER_SELECTION_STATE) { + GetPanelForState(cursor).gotoAndStop(1); + cursor++; + } - CategoryList.addEventListener("itemPress", this, "onCategoryButtonPress"); - CategoryList.addEventListener("listPress", this, "onCategoryListPress"); - CategoryList.addEventListener("listMovedUp", this, "onCategoryListMoveUp"); - CategoryList.addEventListener("listMovedDown", this, "onCategoryListMoveDown"); - CategoryList.addEventListener("selectionChange", this, "onCategoryListMouseSelectionChange"); - CategoryList.disableInput = true; // Bugfix for vanilla + SystemDivider.gotoAndStop("Right"); + HideErrorText(); + GameDelegate.call("ShouldShowMod", [], this, "SetShowMod"); + if(Shared.Platforms.IsUsingWands(iPlatform)) { + _showControlsMenu = false; + } else { + _showControlsMenu = true; + } + + /* CategoryList.clearList(); */ + CategoryList.entryList = new Array(); + CategoryList.entryList.push({text: "$QUICKSAVE"}); + CategoryList.entryList.push({text: "$SAVE"}); + CategoryList.entryList.push({text: "$LOAD"}); + CategoryList.entryList.push({text: "$SETTINGS"}); + CategoryList.entryList.push({text: "$MOD CONFIGURATION"}); + if(_showModMenu) { + CategoryList.entryList.push({text:"$MOD MANAGER"}); + } + if(_showControlsMenu) { + CategoryList.entryList.push({text: "$CONTROLS"}); + } + CategoryList.entryList.push({text: "$HELP"}); + CategoryList.entryList.push({text: "$QUIT"}); + + CategoryList.InvalidateData(); ConfirmPanel.handleInput = function () { return false; }; + if(HelpList.entryList.length != 0) { + HelpList.entryList = new Array(); + } + } + + static function IsOrbis(aiPlatform) + { + return aiPlatform == Shared.Platforms.CONTROLLER_ORBIS || aiPlatform == Shared.Platforms.CONTROLLER_ORBIS_MOVE; + } + + function onLoad() + { + OnShow(); SaveLoadListHolder.addEventListener("saveGameSelected", this, "ConfirmSaveGame"); SaveLoadListHolder.addEventListener("loadGameSelected", this, "ConfirmLoadGame"); + SaveLoadListHolder.addEventListener("saveListCharactersPopulated", this, "OnSaveListCharactersOpenSuccess"); SaveLoadListHolder.addEventListener("saveListPopulated", this, "OnSaveListOpenSuccess"); + SaveLoadListHolder.addEventListener("saveListOnBatchAdded", this, "OnSaveListBatchAdded"); + SaveLoadListHolder.addEventListener("OnCharacterSelected", this, "OnCharacterSelected"); + GameDelegate.addCallBack("OnSaveDataEventSaveSUCCESS", this, "OnSaveDataEventSaveSUCCESS"); + GameDelegate.addCallBack("OnSaveDataEventSaveCANCEL", this, "OnSaveDataEventSaveCANCEL"); + GameDelegate.addCallBack("OnSaveDataEventLoadCANCEL", this, "OnSaveDataEventLoadCANCEL"); SaveLoadListHolder.addEventListener("saveHighlighted", this, "onSaveHighlight"); SaveLoadListHolder.List_mc.addEventListener("listPress", this, "onSaveLoadListPress"); - SettingsList.entryList = [{text: "$Gameplay"}, {text: "$Display"}, {text: "$Audio"}]; + + CategoryList.addEventListener("itemPress", this,"onCategoryButtonPress"); + CategoryList.addEventListener("listPress", this,"onCategoryListPress"); + CategoryList.addEventListener("listMovedUp", this,"onCategoryListMoveUp"); + CategoryList.addEventListener("listMovedDown", this,"onCategoryListMoveDown"); + CategoryList.addEventListener("selectionChange", this,"onCategoryListMouseSelectionChange"); + this.CategoryList.disableInput = true; + SettingsList.entryList = [{text: "$Gameplay"}, {text: "$Display"}, {text: "$Audio"}, {text: "$VR"}, {text: "$VR Performance"}]; SettingsList.InvalidateData(); SettingsList.addEventListener("itemPress", this, "onSettingsCategoryPress"); SettingsList.disableInput = true; @@ -151,17 +221,27 @@ class SystemPage extends MovieClip GameDelegate.addCallBack("SettingsSaved", this, "onSettingsSaved"); GameDelegate.addCallBack("RefreshSystemButtons", this, "RefreshSystemButtons"); PCQuitList.entryList = [{text: "$Main Menu"}, {text: "$Desktop"}]; - PCQuitList.InvalidateData(); + PCQuitList.UpdateList(); PCQuitList.addEventListener("itemPress", this, "onPCQuitButtonPress"); HelpList.addEventListener("itemPress", this, "onHelpItemPress"); HelpList.disableInput = true; HelpTitleText.textAutoSize = "shrink"; BottomBar_mc = _parent._parent.BottomBar_mc; GameDelegate.addCallBack("BackOutFromLoadGame", this, "BackOutFromLoadGame"); + GameDelegate.addCallBack("SetRemoteDevice", this, "SetRemoteDevice"); + GameDelegate.addCallBack("UpdatePermissions", this, "UpdatePermissions"); + GameDelegate.addCallBack("ConfirmDeleteSave", this, "ConfirmDeleteSave"); + GameDelegate.addCallBack("StartDefaultSettingsConfirmState", this, "StartDefaultSettingsConfirmState"); + GameDelegate.addCallBack("UpdateVRPerformanceValues", this, "UpdateVRPerformanceValues"); + } + + function SetShowMod(bshow) { + _showModMenu = bshow; } function startPage(): Void { + pageWasEnded = false; CategoryList.disableInput = false; // Bugfix for vanilla if (!bUpdated) { currentState = SystemPage.MAIN_STATE; @@ -174,21 +254,12 @@ class SystemPage extends MovieClip _skyrimVersionBuild = versionArr[2]; GameDelegate.call("ShouldShowKinectTunerOption", [], this, "SetShouldShowKinectTunerOption"); - GameDelegate.call("SetSaveDisabled", _saveDisabledList); - - if (_global.skse != undefined) { - CategoryList.entryList.push({text: "$MOD CONFIGURATION", index: SystemPage.MOD_CONFIG_INDEX}); - CategoryList.entryList.sortOn("index"); - CategoryList.InvalidateData(); - } else { - CategoryList.entryList.sortOn("index"); - CategoryList.UpdateList(); - } + UpdatePermissions(); bUpdated = true; - return; + } else { + UpdateStateFocus(iCurrentState); } - UpdateStateFocus(iCurrentState); } function endPage(): Void @@ -196,6 +267,8 @@ class SystemPage extends MovieClip BottomBar_mc.buttonPanel.clearButtons(); CategoryList.disableInput = true; // Bugfix for vanilla + + pageWasEnded = true; } function get currentState(): Number @@ -205,6 +278,15 @@ class SystemPage extends MovieClip function set currentState(aiNewState: Number): Void { + if(aiNewState == undefined) + return; + + if(aiNewState == SystemPage.MAIN_STATE) { + SaveLoadListHolder.isShowingCharacterList = false; + } else if (aiNewState == SystemPage.SAVE_LOAD_STATE && this.SaveLoadListHolder.isShowingCharacterList) { + aiNewState = SystemPage.CHARACTER_SELECTION_STATE; + } + var Panel_mc: MovieClip = GetPanelForState(aiNewState); iCurrentState = aiNewState; if (Panel_mc != TopmostPanel) { @@ -212,8 +294,33 @@ class SystemPage extends MovieClip TopmostPanel = Panel_mc; } UpdateStateFocus(aiNewState); + GameDelegate.call("SetJournalMenuState", [aiNewState]); } + function OnSaveDataEventSaveSUCCESS() + { + if(SystemPage.IsOrbis(iPlatform)) + { + this.bMenuClosing = true; + this.EndState(); + } + } + + function OnSaveDataEventSaveCANCEL() + { + if(SystemPage.IsOrbis(iPlatform)) + { + this.HideErrorText(); + this.EndState(); + this.StartState(SystemPage.SAVE_LOAD_STATE); + } + } + + function OnSaveDataEventLoadCANCEL() + { + this.StartState(SystemPage.CHARACTER_SELECTION_STATE); + } + public function handleInput(details: InputDetails, pathToFocus: Array): Boolean { var bhandledInput: Boolean = false; @@ -232,11 +339,18 @@ class SystemPage extends MovieClip if ((details.navEquivalent == NavigationCode.GAMEPAD_L2 || details.navEquivalent == gfx.ui.NavigationCode.GAMEPAD_R2) && isConfirming()) { bhandledInput = true; } else if ((details.navEquivalent == NavigationCode.GAMEPAD_X || details.code == 88) && iCurrentState == SystemPage.SAVE_LOAD_STATE) { - ConfirmDeleteSave(); + if(SystemPage.IsOrbis(iPlatform)) + { + gfx.io.GameDelegate.call("ORBISDeleteSave",[]); + } else { + ConfirmDeleteSave(); + } bhandledInput = true; - } else if ((details.navEquivalent == NavigationCode.GAMEPAD_Y || details.code == 84) && (iCurrentState == SystemPage.OPTIONS_LISTS_STATE || iCurrentState == SystemPage.INPUT_MAPPING_STATE)) { - ConfirmTextField.SetText("$Reset settings to default values?"); - StartState(SystemPage.DEFAULT_SETTINGS_CONFIRM_STATE); + } else if ((details.navEquivalent == gfx.ui.NavigationCode.GAMEPAD_Y || details.code == 84) && iCurrentState == SystemPage.SAVE_LOAD_STATE && !SaveLoadListHolder.isSaving) { + StartState(SystemPage.CHARACTER_LOAD_STATE); + bhandledInput = true; + } else if ((details.navEquivalent == NavigationCode.GAMEPAD_Y || details.code == 84) && (iCurrentState == SystemPage.OPTIONS_LISTS_STATE || iCurrentState == SystemPage.INPUT_MAPPING_STATE)) { + StartDefaultSettingsConfirmState(); bhandledInput = true; } else if (bShowKinectTunerButton && details.navEquivalent == NavigationCode.GAMEPAD_R1 && iCurrentState == SystemPage.OPTIONS_LISTS_STATE) { GameDelegate.call("OpenKinectTuner", []); @@ -255,33 +369,57 @@ class SystemPage extends MovieClip function onAcceptPress(): Boolean { var bAcceptPressed: Boolean = true; - + switch (iCurrentState) { + case SystemPage.CHARACTER_SELECTION_STATE: + GameDelegate.call("PlaySound",["UIMenuOK"]); + GameDelegate.call("CharacterSelected",[SaveLoadListHolder.selectedIndex]); + break; + case SystemPage.SAVE_LOAD_CONFIRM_STATE: case SystemPage.TRANSITIONING: if (SaveLoadListHolder.List_mc.disableSelection) { GameDelegate.call("PlaySound", ["UIMenuOK"]); - bMenuClosing = true; - if (SaveLoadListHolder.isSaving) { - ConfirmPanel._visible = false; - if (iPlatform > 1) { - ErrorText.SetText("$Saving content. Please don\'t turn off your console."); + + if(SystemPage.IsOrbis(iPlatform)) + { + if(this.SaveLoadListHolder.isSaving) + { + this.iSaveDelayTimerID = setInterval(this,"DoSaveGame",1); + } + else + { + gfx.io.GameDelegate.call("LoadGame",[this.SaveLoadListHolder.selectedIndex]); + } + } + else + { + bMenuClosing = true; + if (SaveLoadListHolder.isSaving) { + ConfirmPanel._visible = false; + if (iPlatform > 1) { + ErrorText.SetText("$Saving content. Please don\'t turn off your console."); + } else { + ErrorText.SetText("$Saving..."); + } + iSaveDelayTimerID = setInterval(this, "DoSaveGame", 1); } else { - ErrorText.SetText("$Saving..."); + GameDelegate.call("LoadGame", [SaveLoadListHolder.selectedIndex]); } - iSaveDelayTimerID = setInterval(this, "DoSaveGame", 1); - } else { - GameDelegate.call("LoadGame", [SaveLoadListHolder.selectedIndex]); } } break; - + case SystemPage.QUIT_CONFIRM_STATE: + // Have skyui dll release any GFxValues it's holding before actually quitting + Debug.log(">>> Quest_Journal SystemPage.QUIT_CONFIRM_STATE"); + VRInput.instance.teardown(); GameDelegate.call("PlaySound", ["UIMenuOK"]); GameDelegate.call("QuitToMainMenu", []); bMenuClosing = true; + Debug.log("<<< Quest_Journal SystemPage.QUIT_CONFIRM_STATE"); break; - + case SystemPage.PC_QUIT_CONFIRM_STATE: if (PCQuitList.selectedIndex == 0) { GameDelegate.call("QuitToMainMenu", []); @@ -290,18 +428,19 @@ class SystemPage extends MovieClip GameDelegate.call("QuitToDesktop", []); } break; - + case SystemPage.DELETE_SAVE_CONFIRM_STATE: SaveLoadListHolder.DeleteSelectedSave(); if (SaveLoadListHolder.numSaves == 0) { GetPanelForState(SystemPage.SAVE_LOAD_STATE).gotoAndStop(1); GetPanelForState(SystemPage.DELETE_SAVE_CONFIRM_STATE).gotoAndStop(1); currentState = SystemPage.MAIN_STATE; + SystemDivider.gotoAndStop("Right"); } else { EndState(); } break; - + case SystemPage.DEFAULT_SETTINGS_CONFIRM_STATE: GameDelegate.call("PlaySound", ["UIMenuOK"]); if (ConfirmPanel.returnState == SystemPage.OPTIONS_LISTS_STATE) { @@ -311,23 +450,28 @@ class SystemPage extends MovieClip } EndState(); break; - + default: bAcceptPressed = false; break; } - return bAcceptPressed; + + return bAcceptPressed; } function onCancelPress(): Boolean { var bCancelPressed: Boolean = true; - + switch (iCurrentState) { + case SystemPage.CHARACTER_LOAD_STATE: + case SystemPage.CHARACTER_SELECTION_STATE: case SystemPage.SAVE_LOAD_STATE: + SaveLoadListHolder.ForceStopLoading(); + case SystemPage.PC_QUIT_LIST_STATE: case SystemPage.HELP_LIST_STATE: - case SystemPage.SAVE_LOAD_CONFIRM_STATE: + case SystemPage.SAVE_LOAD_CONFIRM_STATE: case SystemPage.QUIT_CONFIRM_STATE: case SystemPage.DEFAULT_SETTINGS_CONFIRM_STATE: case SystemPage.PC_QUIT_CONFIRM_STATE: @@ -335,21 +479,21 @@ class SystemPage extends MovieClip GameDelegate.call("PlaySound", ["UIMenuCancel"]); EndState(); break; - + case SystemPage.HELP_TEXT_STATE: GameDelegate.call("PlaySound", ["UIMenuCancel"]); EndState(); StartState(SystemPage.HELP_LIST_STATE); HelpListPanel.bCloseToMainState = true; break; - + case SystemPage.OPTIONS_LISTS_STATE: GameDelegate.call("PlaySound", ["UIMenuCancel"]); EndState(); StartState(SystemPage.SETTINGS_CATEGORY_STATE); SettingsPanel.bCloseToMainState = true; break; - + case SystemPage.INPUT_MAPPING_STATE: case SystemPage.SETTINGS_CATEGORY_STATE: GameDelegate.call("PlaySound", ["UIMenuCancel"]); @@ -365,7 +509,7 @@ class SystemPage extends MovieClip onSettingsSaved(); } break; - + default: bCancelPressed = false; break; @@ -392,6 +536,15 @@ class SystemPage extends MovieClip } } + function StartDefaultSettingsConfirmState(): Void + { + if(iCurrentState == SystemPage.OPTIONS_LISTS_STATE || iCurrentState == SystemPage.INPUT_MAPPING_STATE) + { + ConfirmTextField.SetText("$Reset settings to default values?"); + StartState(SystemPage.DEFAULT_SETTINGS_CONFIRM_STATE); + } + } + function onCategoryButtonPress(event: Object): Void { if (event.entry.disabled) { @@ -399,36 +552,52 @@ class SystemPage extends MovieClip return; } - if (iCurrentState == SystemPage.MAIN_STATE) + if (iCurrentState == SystemPage.MAIN_STATE) { - switch (event.entry.index) { - case SystemPage.SAVE_INDEX: - SaveLoadListHolder.isSaving = true; - GameDelegate.call("SAVE", [SaveLoadListHolder.List_mc.entryList, SaveLoadListHolder.batchSize]); + var categoryName = CategoryList.entryList[event.index].text; + + switch (categoryName) { + case "$QUICKSAVE": + GameDelegate.call("PlaySound", ["UIMenuOK"]); + GameDelegate.call("QuickSave", []); break; - - case SystemPage.LOAD_INDEX: + + case "$SAVE": + GameDelegate.call("UseCurrentCharacterFilter",[]); + SaveLoadListHolder.isSaving = true; + if (SystemPage.IsOrbis(iPlatform)) { + SaveLoadListHolder.PopulateEmptySaveList(); + } else { + GameDelegate.call("SAVE",[SaveLoadListHolder.List_mc.entryList, SaveLoadListHolder.batchSize]); + } + break; + + case "$LOAD": SaveLoadListHolder.isSaving = false; GameDelegate.call("LOAD", [SaveLoadListHolder.List_mc.entryList, SaveLoadListHolder.batchSize]); break; - - case SystemPage.SETTINGS_INDEX: + + case "$MOD MANAGER": + gfx.io.GameDelegate.call("ModManager",[]); + break; + + case "$SETTINGS": StartState(SystemPage.SETTINGS_CATEGORY_STATE); GameDelegate.call("PlaySound", ["UIMenuOK"]); break; - - case SystemPage.MOD_CONFIG_INDEX: + + case "$MOD CONFIGURATION": _root.QuestJournalFader.Menu_mc.ConfigPanelOpen(); break; - - case SystemPage.CONTROLS_INDEX: + + case "$CONTROLS": if (MappingList.entryList.length == 0) requestInputMappings(); StartState(SystemPage.INPUT_MAPPING_STATE); GameDelegate.call("PlaySound", ["UIMenuOK"]); break; - - case SystemPage.HELP_INDEX: + + case "$HELP": if (HelpList.entryList.length == 0) { GameDelegate.call("PopulateHelpTopics", [HelpList.entryList]); HelpList.entryList.sort(doABCSort); @@ -441,12 +610,12 @@ class SystemPage extends MovieClip GameDelegate.call("PlaySound", ["UIMenuOK"]); } break; - - case SystemPage.QUIT_INDEX: + + case "$QUIT": GameDelegate.call("PlaySound", ["UIMenuOK"]); GameDelegate.call("RequestIsOnPC", [], this, "populateQuitList"); break; - + default: GameDelegate.call("PlaySound", ["UIMenuCancel"]); break; @@ -466,6 +635,22 @@ class SystemPage extends MovieClip function doABCSort(aObj1: Object, aObj2: Object): Number { + if(aObj1.text.indexOf("VR ") >= 0 && aObj2.text.indexOf("VR ") >= 0) + { + if(aObj1.text < aObj2.text) { + return -1; + } + if(aObj1.text > aObj2.text) { + return 1; + } + } + if(aObj1.text.indexOf("VR ") >= 0) { + return -1; + } + if(aObj2.text.indexOf("VR ") >= 0) { + return 1; + } + if (aObj1.text < aObj2.text) { return -1; } @@ -498,14 +683,34 @@ class SystemPage extends MovieClip } } + function OnCharacterSelected() + { + if(!SystemPage.IsOrbis(iPlatform)) { + StartState(SystemPage.SAVE_LOAD_STATE); + } + } + + function OnSaveListCharactersOpenSuccess() + { + if(this.SaveLoadListHolder.numSaves > 0) { + GameDelegate.call("PlaySound",["UIMenuOK"]); + StartState(SystemPage.CHARACTER_SELECTION_STATE); + } else { + GameDelegate.call("PlaySound",["UIMenuCancel"]); + } + } + function OnSaveListOpenSuccess(): Void { if (SaveLoadListHolder.numSaves > 0) { GameDelegate.call("PlaySound", ["UIMenuOK"]); StartState(SystemPage.SAVE_LOAD_STATE); - return; + } else { + StartState(SystemPage.CHARACTER_LOAD_STATE); } - GameDelegate.call("PlaySound", ["UIMenuCancel"]); + } + + function OnSaveListBatchAdded() { } function ConfirmSaveGame(event: Object): Void @@ -515,11 +720,11 @@ class SystemPage extends MovieClip if (event.index == 0) { iCurrentState = SystemPage.SAVE_LOAD_CONFIRM_STATE; onAcceptPress(); - return; + } else { + ConfirmTextField.SetText("$Save over this game?"); + StartState(SystemPage.SAVE_LOAD_CONFIRM_STATE); + GameDelegate.call("PlaySound", ["UIMenuOK"]); } - ConfirmTextField.SetText("$Save over this game?"); - StartState(SystemPage.SAVE_LOAD_CONFIRM_STATE); - GameDelegate.call("PlaySound", ["UIMenuOK"]); } } @@ -527,14 +732,18 @@ class SystemPage extends MovieClip { clearInterval(iSaveDelayTimerID); GameDelegate.call("SaveGame", [SaveLoadListHolder.selectedIndex]); - _parent._parent.CloseMenu(); + if(!SystemPage.IsOrbis(iPlatform)) { + _parent._parent.CloseMenu(); + } } function onSaveHighlight(event: Object): Void { - if (iCurrentState == SystemPage.SAVE_LOAD_STATE) { - BottomBar_mc.deleteButton._alpha = ((event.index == -1) ? 50 : 100); - if (iPlatform == 0) + if (iCurrentState == SystemPage.SAVE_LOAD_STATE && !SaveLoadListHolder.isShowingCharacterList) { + if (_deleteButton != null) { + _deleteButton._alpha = ((event.index == -1) ? 50 : 100); + } + if (iPlatform == Shared.Platforms.CONTROLLER_PC) GameDelegate.call("PlaySound", ["UIMenuFocus"]); } } @@ -568,28 +777,78 @@ class SystemPage extends MovieClip function onSettingsCategoryPress(): Void { var List_mc: MovieClip = OptionsListsPanel.OptionsLists.List_mc; - + switch (SettingsList.selectedIndex) { case 0: - List_mc.entryList = [{text: "$Invert Y", movieType: 2}, {text: "$Look Sensitivity", movieType: 0}, {text: "$Vibration", movieType: 2}, {text: "$360 Controller", movieType: 2}, {text: "$Difficulty", movieType: 1, options: ["$Very Easy", "$Easy", "$Normal", "$Hard", "$Very Hard", "$Legendary"]}, {text: "$Show Floating Markers", movieType: 2}, {text: "$Save on Rest", movieType: 2}, {text: "$Save on Wait", movieType: 2}, {text: "$Save on Travel", movieType: 2}, {text: "$Save on Pause", movieType: 1, options: ["$5 Mins", "$10 Mins", "$15 Mins", "$30 Mins", "$45 Mins", "$60 Mins", "$Disabled"]}, {text: "$Use Kinect Commands", movieType: 2}]; - if (_skyrimVersion == 1 && _skyrimVersionMinor < 9) - List_mc.entryList[4].options.pop(); // Versions prior to 1.9.26 don't have the Legendary option + List_mc.entryList = [ + {text: "$Invert Y", movieType: 2}, + {text: "$Look Sensitivity", movieType: 0}, + {text: "$Vibration", movieType: 2}, + {text: "$360 Controller", movieType: 2}, + {text: "$Difficulty", movieType: 1, options: ["$Very Easy", "$Easy", "$Normal", "$Hard", "$Very Hard", "$Legendary"]}, + {text: "$Show Floating Markers", movieType: 2}, + {text: "$Save on Rest", movieType: 2}, + {text: "$Save on Wait", movieType: 2}, + {text: "$Save on Travel", movieType: 2}, + {text: "$Save on Pause", movieType: 1, options: ["$5 Mins", "$10 Mins", "$15 Mins", "$30 Mins", "$45 Mins", "$60 Mins", "$Disabled"]}, + {text: "$Use Kinect Commands", movieType: 2}]; GameDelegate.call("RequestGameplayOptions", [List_mc.entryList]); break; - + case 1: - List_mc.entryList = [{text: "$Brightness", movieType: 0}, {text: "$HUD Opacity", movieType: 0}, {text: "$Actor Fade", movieType: 0}, {text: "$Item Fade", movieType: 0}, {text: "$Object Fade", movieType: 0}, {text: "$Grass Fade", movieType: 0}, {text: "$Shadow Fade", movieType: 0}, {text: "$Light Fade", movieType: 0}, {text: "$Specularity Fade", movieType: 0}, {text: "$Tree LOD Fade", movieType: 0}, {text: "$Crosshair", movieType: 2}, {text: "$Dialogue Subtitles", movieType: 2}, {text: "$General Subtitles", movieType: 2}]; + List_mc.entryList = [ + {text: "$Brightness", movieType: 0}, + {text: "$HUD Opacity", movieType: 0}, + {text: "$Actor Fade", movieType: 0}, + {text: "$Item Fade", movieType: 0}, + {text: "$Object Fade", movieType: 0}, + {text: "$Grass Fade", movieType: 0}, + {text: "$Shadow Fade", movieType: 0}, + {text: "$Light Fade", movieType: 0}, + {text: "$Specularity Fade", movieType: 0}, + {text: "$Tree LOD Fade", movieType: 0}, + {text: "$Crosshair", movieType: 2}, + {text: "$Dialogue Subtitles", movieType: 2}, + {text: "$General Subtitles", movieType: 2}]; GameDelegate.call("RequestDisplayOptions", [List_mc.entryList]); break; - + case 2: List_mc.entryList = [{text: "$Master", movieType: 0}]; GameDelegate.call("RequestAudioOptions", [List_mc.entryList]); for (var i: String in List_mc.entryList) List_mc.entryList[i].movieType = 0; break; + + case 3: + List_mc.entryList = [ + {text:"$Turning Mode",movieType:1,options:["$Snap","$Smooth"]}, + {text:"$Snap Transition",movieType:1,options:["$Gradual","$Instant"]}, + {text:"$Angle Snap Amount",movieType:0}, + {text:"$Rotation Speed",movieType:0}, + {text:"$Movement Mode",movieType:1,options:["$Teleportation","$Direct Movement"]}, + {text:"$Direct Movement Mode",movieType:1,options:["$HMD Relative","$Wand Relative"]}, + {text:"$Compass Position",movieType:1,options:["$Compass Low","$Compass High","$Compass Off"]}, + {text:"$Main Hand",movieType:1,options:["$Right","$Left"]}, + {text:"$Show Hands While Sheathed",movieType:2}, + {text:"$Height",movieType:0}, + {text:"$Movement Speed",movieType:0}, + {text:"$Crosshair",movieType:2}, + {text:"$Physical Sneaking",movieType:2}, + {text:"$Realistic Swimming",movieType:2}, + {text:"$Realistic Shield Grip",movieType:2}, + {text:"$Realistic Bow",movieType:2}, + {text:"$FOV Filter While Turning",movieType:2}, + {text:"$FOV Filter While Moving",movieType:2}, + {text:"$FOV Filter Strength",movieType:0}]; + GameDelegate.call("RequestVROptions", [List_mc.entryList]); + break; + + case 4: + GameDelegate.call("RequestVRPerformanceOptions", [List_mc.entryList]); + break; } - + for (var i: Number = 0; i < List_mc.entryList.length; ){ if (List_mc.entryList[i].ID == undefined) { List_mc.entryList.splice(i, 1); @@ -597,17 +856,104 @@ class SystemPage extends MovieClip i++; } } - - if (iPlatform != 0) { + + if (iPlatform != Shared.Platforms.CONTROLLER_PC) { List_mc.selectedIndex = 0; } - + + List_mc.bAllowValueOverwrite = true; List_mc.InvalidateData(); + List_mc.bAllowValueOverwrite = false; SettingsPanel.bCloseToMainState = false; EndState(); StartState(SystemPage.OPTIONS_LISTS_STATE); GameDelegate.call("PlaySound", ["UIMenuOK"]); bSettingsChanged = true; + GameDelegate.call("RequestTurnModeID", [], this, "SetTurningModeID"); + + var i = 0; + var item = List_mc["Entry" + i]; + while(item != undefined) { + item.SetOnChangedCAllback(this, "OnOptionValueChanged"); + i++; + item = List_mc["Entry" + i]; + } + } + + function SetTurningModeID(afID) + { + iTurnModeID = afID; + } + + function OnOptionValueChanged(aObject) + { + if(aObject.ID == this.iTurnModeID) + { + GameDelegate.call("GetGradualSpeedData", [], this, "UpdateGradualSpeed"); + } + } + + function UpdateGradualSpeed(afValue, afDefaultValue, afGradualSpeedID) + { + if(SettingsList.selectedIndex == 3) { + + var List_mc: MovieClip = OptionsListsPanel.OptionsLists.List_mc; + if(List_mc != null && List_mc != undefined) { + var i = 0; + while(i < List_mc.entryList.length) { + if(List_mc.entryList[i].ID == afGradualSpeedID) { + List_mc.entryList[i].value = afValue; + List_mc.entryList[i].defaultVal = afDefaultValue; + if(List_mc.entryList[i].clipIndex != undefined) { + List_mc["Entry" + List_mc.entryList[i].clipIndex].value = afValue; + } + return; + } + i++; + } + } + } + } + + function UpdateVRPerformanceValues() + { + bJustRefreshedSettings = true; + if(SettingsList.selectedIndex == 4) + { + var List_mc: MovieClip = OptionsListsPanel.OptionsLists.List_mc; + if(List_mc != null && List_mc != undefined) { + + // Grab the value of the performance options + var optionValues = new Array(); + GameDelegate.call("RequestVRPerformanceOptions", [optionValues]); + + // Go through each item in the entry list + var i = 0; + while(i < List_mc.entryList.length) { + var optionIdx = -1; + var j = 0; + + // Try to find a matching entry in the optionsValues array + while(j < optionValues.length) { + if(optionValues[j].ID == List_mc.entryList[i].ID) { + optionIdx = j; + break; + } + j++ + } + + // If a matching entry is found, copy the current value into List_mc + if(optionIdx >= 0) { + List_mc.entryList[i].value = optionValues[optionIdx].value; + List_mc.entryList[i].defaultVal = optionValues[optionIdx].defaultVal; + } + i++; + } + List_mc.bAllowVAlueOverwrite = true; + List_mc.UpdateList(); + List_mc.bAllowVAlueOverwrite = false; + } + } } function ResetSettingsToDefaults(): Void @@ -619,6 +965,7 @@ class SystemPage extends MovieClip GameDelegate.call("OptionChange", [List_mc.entryList[i].ID, List_mc.entryList[i].value]); } } + GameDelegate.call("OnresetToDefault", []); List_mc.bAllowValueOverwrite = true; List_mc.UpdateList(); List_mc.bAllowValueOverwrite = false; @@ -626,7 +973,7 @@ class SystemPage extends MovieClip function onInputMappingPress(event: Object): Void { - if (bRemapMode == false && iCurrentState == SystemPage.INPUT_MAPPING_STATE) + if (bRemapMode == false && iCurrentState == SystemPage.INPUT_MAPPING_STATE) { MappingList.disableSelection = true; bRemapMode = true; @@ -691,6 +1038,7 @@ class SystemPage extends MovieClip function onHelpItemPress(): Void { GameDelegate.call("RequestHelpText", [HelpList.selectedEntry.index, HelpTitleText, HelpText]); + HelpText.text = Shared.ExtractPlatformText.Extract(HelpText.text, iPlatform); ApplyHelpTextButtonArt(); HelpListPanel.bCloseToMainState = false; EndState(); @@ -699,15 +1047,15 @@ class SystemPage extends MovieClip function ApplyHelpTextButtonArt(): Void { - var strTextWithButtons: String = HelpButtonHolder.CreateButtonArt(HelpText.textField); - if (strTextWithButtons != undefined) + var strTextWithButtons: String = HelpButtonHolder.CreateButtonArtCustomSize(HelpText.textField, 32); + if (strTextWithButtons != undefined) HelpText.htmlText = strTextWithButtons; } function populateQuitList(abOnPC: Boolean): Void { if (abOnPC) { - if (iPlatform != 0) { + if (iPlatform != Shared.Platforms.CONTROLLER_PC) { PCQuitList.selectedIndex = 0; } StartState(SystemPage.PC_QUIT_LIST_STATE); @@ -736,19 +1084,13 @@ class SystemPage extends MovieClip function SaveControls(): Void { - if (iSavingSettingsTimerID != undefined) { - clearInterval(iSavingSettingsTimerID); - delete(iSavingSettingsTimerID); - } + clearInterval(iSavingSettingsTimerID); GameDelegate.call("SaveControls", []); } function SaveSettings(): Void { - if (iSavingSettingsTimerID != undefined) { - clearInterval(iSavingSettingsTimerID); - delete(iSavingSettingsTimerID); - } + clearInterval(iSavingSettingsTimerID); GameDelegate.call("SaveSettings", []); } @@ -762,10 +1104,17 @@ class SystemPage extends MovieClip function RefreshSystemButtons() { - _saveDisabledList.push(true); - GameDelegate.call("SetSaveDisabled", _saveDisabledList); - _saveDisabledList.pop(); + var params = new Array(); + var i = 0; + while(i < CategoryList.entryList.length) { + if( i != CategoryList.entryList.length - 2) { + params.push(CategoryList.entryList[i]); + } + i++; + } + params.push(true); + GameDelegate.call("SetSaveDisabled", params) CategoryList.UpdateList(); } @@ -774,27 +1123,56 @@ class SystemPage extends MovieClip BottomBar_mc.buttonPanel.clearButtons(); switch (aiState) { + case SystemPage.CHARACTER_LOAD_STATE: + SaveLoadListHolder.isShowingCharacterList = true; + SystemDivider.gotoAndStop("Left"); + GameDelegate.call("PopulateCharacterList", [SaveLoadListHolder.List_mc.entryList, SaveLoadListHolder.batchSize]); + break; + + case SystemPage.CHARACTER_SELECTION_STATE: + BottomBar_mc.buttonPanel.addButton({text:"$Cancel", controls: _cancelControls}); + break; + case SystemPage.SAVE_LOAD_STATE: + SaveLoadListHolder.isShowingCharacterList = false; SystemDivider.gotoAndStop("Left"); - BottomBar_mc.buttonPanel.addButton({text: "$Delete", controls: _deleteControls}); // X or 360_X + _deleteButton = BottomBar_mc.buttonPanel.addButton({text: "$Delete", controls: _deleteControls}); // X or 360_X + if(SaveLoadListHolder.isSaving == false) + { + BottomBar_mc.buttonPanel.addButton({text:"$CharacterSelection",controls: _characterSelectionControls}); + } + BottomBar_mc.buttonPanel.addButton({text:"$Cancel",controls:this._cancelControls}); BottomBar_mc.buttonPanel.updateButtons(true); break; - + case SystemPage.INPUT_MAPPING_STATE: SystemDivider.gotoAndStop("Left"); + if(bIsRemoteDevice) { + bDefaultButtonVisible = false; + } else { + BottomBar_mc.buttonPanel.addButton({text:"$Defaults", controls: _defaultControls}); + bDefaultButtonVisible = true; + } + BottomBar_mc.buttonPanel.addButton({text:"$Cancel", controls: _cancelControls}); + BottomBar_mc.buttonPanel.updateButtons(true); + break; + case SystemPage.OPTIONS_LISTS_STATE: BottomBar_mc.buttonPanel.addButton({text: "$Defaults", controls: _defaultControls}); // T or 360_Y if (aiState == SystemPage.OPTIONS_LISTS_STATE && bShowKinectTunerButton && iPlatform == 2 && SettingsList.selectedIndex == 0) BottomBar_mc.buttonPanel.addButton({text: "$Kinect Tuner", controls: _kinectControls}); // K or RB + BottomBar_mc.buttonPanel.addButton({text:"$Cancel",controls:this._cancelControls}); BottomBar_mc.buttonPanel.updateButtons(true); break; - - case SystemPage.SETTINGS_CATEGORY_STATE: - case SystemPage.PC_QUIT_LIST_STATE: + + case SystemPage.HELP_TEXT_STATE: case SystemPage.HELP_LIST_STATE: + case SystemPage.SETTINGS_CATEGORY_STATE: + BottomBar_mc.buttonPanel.addButton({text:"$Cancel", controls:_cancelControls}); + BottomBar_mc.buttonPanel.updateButtons(true); SystemDivider.gotoAndStop("Left"); break; - + case SystemPage.SAVE_LOAD_CONFIRM_STATE: case SystemPage.QUIT_CONFIRM_STATE: case SystemPage.PC_QUIT_CONFIRM_STATE: @@ -814,31 +1192,38 @@ class SystemPage extends MovieClip BottomBar_mc.buttonPanel.clearButtons(); switch (iCurrentState) { + case SystemPage.CHARACTER_LOAD_STATE: + case SystemPage.CHARACTER_SELECTION_STATE: case SystemPage.SAVE_LOAD_STATE: case SystemPage.INPUT_MAPPING_STATE: - SystemDivider.gotoAndStop("Right"); + case SystemPage.HELP_TEXT_STATE: + if(!SystemPage.IsOrbis(iPlatform)) + { + SystemDivider.gotoAndStop("Right"); + } + break; case SystemPage.OPTIONS_LISTS_STATE: break; - + case SystemPage.HELP_LIST_STATE: HelpList.disableInput = true; if (HelpListPanel.bCloseToMainState != false) { SystemDivider.gotoAndStop("Right"); } break; - + case SystemPage.SETTINGS_CATEGORY_STATE: SettingsList.disableInput = true; if (SettingsPanel.bCloseToMainState != false) { SystemDivider.gotoAndStop("Right"); } break; - + case SystemPage.PC_QUIT_LIST_STATE: SystemDivider.gotoAndStop("Right"); break; } - if (iCurrentState != SystemPage.MAIN_STATE) + if (iCurrentState != SystemPage.MAIN_STATE) { GetPanelForState(iCurrentState).gotoAndPlay("end"); iCurrentState = SystemPage.TRANSITIONING; @@ -850,32 +1235,34 @@ class SystemPage extends MovieClip switch (aiState) { case SystemPage.MAIN_STATE: return PanelRect; - + case SystemPage.SETTINGS_CATEGORY_STATE: return SettingsPanel; - + case SystemPage.OPTIONS_LISTS_STATE: return OptionsListsPanel; - + case SystemPage.INPUT_MAPPING_STATE: return InputMappingPanel; - + + case SystemPage.CHARACTER_LOAD_STATE: + case SystemPage.CHARACTER_SELECTION_STATE: case SystemPage.SAVE_LOAD_STATE: return SaveLoadPanel; - + case SystemPage.SAVE_LOAD_CONFIRM_STATE: case SystemPage.PC_QUIT_CONFIRM_STATE: case SystemPage.QUIT_CONFIRM_STATE: case SystemPage.DELETE_SAVE_CONFIRM_STATE: case SystemPage.DEFAULT_SETTINGS_CONFIRM_STATE: return ConfirmPanel; - + case SystemPage.PC_QUIT_LIST_STATE: return PCQuitPanel; - + case SystemPage.HELP_LIST_STATE: return HelpListPanel; - + case SystemPage.HELP_TEXT_STATE: return HelpTextPanel; } @@ -884,43 +1271,46 @@ class SystemPage extends MovieClip function UpdateStateFocus(aiNewState: Number): Void { CategoryList.disableSelection = aiNewState != SystemPage.MAIN_STATE; - + switch (aiNewState) { case SystemPage.MAIN_STATE: FocusHandler.instance.setFocus(CategoryList, 0); break; - + case SystemPage.SETTINGS_CATEGORY_STATE: SettingsList.disableInput = false; FocusHandler.instance.setFocus(SettingsList, 0); break; - + case SystemPage.OPTIONS_LISTS_STATE: FocusHandler.instance.setFocus(OptionsListsPanel.OptionsLists.List_mc, 0); break; - + case SystemPage.INPUT_MAPPING_STATE: FocusHandler.instance.setFocus(MappingList, 0); break; - + case SystemPage.SAVE_LOAD_STATE: + case SystemPage.CHARACTER_LOAD_STATE: + case SystemPage.CHARACTER_SELECTION_STATE: FocusHandler.instance.setFocus(SaveLoadListHolder.List_mc, 0); SaveLoadListHolder.List_mc.disableSelection = false; break; - + case SystemPage.SAVE_LOAD_CONFIRM_STATE: case SystemPage.QUIT_CONFIRM_STATE: case SystemPage.PC_QUIT_CONFIRM_STATE: case SystemPage.DELETE_SAVE_CONFIRM_STATE: case SystemPage.DEFAULT_SETTINGS_CONFIRM_STATE: + ConfirmPanel._visible = true; FocusHandler.instance.setFocus(ConfirmPanel, 0); break; - + case SystemPage.PC_QUIT_LIST_STATE: FocusHandler.instance.setFocus(PCQuitList, 0); PCQuitList.disableSelection = false; break; - + case SystemPage.HELP_LIST_STATE: HelpList.disableInput = false; FocusHandler.instance.setFocus(HelpList, 0); @@ -932,29 +1322,34 @@ class SystemPage extends MovieClip } } + function Exists(apObject) + { + return apObject != null && apObject != undefined; + } + function SetPlatform(a_platform: Number, a_bPS3Switch: Boolean): Void { + if(bJustRefreshedSettings) { + bJustRefreshedSettings = false; + return; + } + BottomBar_mc.SetPlatform(a_platform, a_bPS3Switch); CategoryList.SetPlatform(a_platform, a_bPS3Switch); + // Setup the buttons by platform + _deleteControls = skyui.util.Input.pickControls(a_platform, {PCArt:"X", XBoxArt:"360_X", PS3Art:"PS3_X", ViveArt:"radial_Either_Right", MoveArt:"PS3_A", OculusArt:"OCC_A", WindowsMRArt:"radial_Either_Right"}); + _defaultControls = skyui.util.Input.pickControls(a_platform, {PCArt: "T", XBoxArt: "360_Y"}); + _kinectControls = skyui.util.Input.pickControls(a_platform, {PCArt:"K", XBoxArt:"360_RB"}); + _acceptControls = skyui.util.Input.pickControls(a_platform, {PCArt:"Enter", XBoxArt:"360_A", ViveArt:"trigger", MoveArt:"trigger",OculusArt: "trigger", WindowsMRArt:"trigger"}); + _cancelControls = skyui.util.Input.pickControls(a_platform, {PCArt:"Esc", XBoxArt:"360_B", PS3Art:"PS3_B", ViveArt:"grip", MoveArt:"PS3_B", OculusArt:"grab", WindowsMRArt:"grab"}); + _characterSelectionControls = skyui.util.Input.pickControls(a_platform, {PCArt:"T", XBoxArt:"360_Y", PS3Art:"PS3_Y", ViveArt:"radial_Either_Left", MoveArt:"PS3_A", OculusArt:"OCC_A", WindowsMRArt:"radial_Either_Left"}); - if (a_platform != 0) { + if (a_platform != Shared.Platforms.CONTROLLER_PC) { SettingsList.selectedIndex = 0; PCQuitList.selectedIndex = 0; HelpList.selectedIndex = 0; MappingList.selectedIndex = 0; - - _deleteControls = {keyCode: 278}; // 360_X - _defaultControls = {keyCode: 279}; // 360_Y - _kinectControls = {keyCode: 275}; // 360_RB - _acceptControls = {keyCode: 276}; // 360_A - _cancelControls = {keyCode: 277}; // 360_B - } else { - _deleteControls = {keyCode: 45}; // X - _defaultControls = {keyCode: 20}; // T - _kinectControls = {keyCode: 37}; // K - _acceptControls = {keyCode: 28}; // Enter - _cancelControls = {keyCode: 15}; // Tab } ConfirmPanel.buttonPanel.clearButtons(); @@ -975,12 +1370,58 @@ class SystemPage extends MovieClip bMenuClosing = false; onCancelPress(); } - + function SetShouldShowKinectTunerOption(abFlag: Boolean): Void { bShowKinectTunerButton = abFlag == true; } + function SetRemoteDevice(abISRemoteDevice) + { + bIsRemoteDevice = abISRemoteDevice; + if(bIsRemoteDevice) + { + MappingList.entryList.clear(); + } + } + + // It's not very clear what this function is supposed to do. + // This is a refactoring of what ships with SE, VR, and Skyui swfs. + // Instead of handling all possible permutations of the various settings that may + // affect the menu entry order, this simply puts together the correct list of + // items to send at runtime. + function UpdatePermissions() + { + var itemsList = CategoryList.entryList; + var itemsToSend = new Array(); + + // Which entries do we want to send? + var matchList = ["$QUICKSAVE", "$SAVE", "$LOAD", "$SETTINGS", "$MOD MANAGER", "$CONTROLS", "$QUIT"]; + + // Locate all entries specified by the matchList + for(var itemIdx = 0; itemIdx < itemsList.length; itemIdx++) { + var item = itemsList[itemIdx]; + + for(var matchIdx in matchList) { + if(matchList[matchIdx] == item.text) { + itemsToSend.push(item); + } + } + } + + // Send the data to the engine for... something... + GameDelegate.call("SetSaveDisabled", itemsToSend); + + // Make sure the help item is not disabled + for(var itemIdx in itemsList) { + if("$HELP" == itemsList[itemIdx].text) { + item[itemIdx].disabled = false; + } + } + + CategoryList.UpdateList(); + } + private function requestInputMappings(a_updateOnly: Boolean): Void { MappingList.entryList.splice(0); diff --git a/src/PauseMenu/quest_journal.fla b/src/PauseMenu/quest_journal.fla deleted file mode 100644 index 6940108fe..000000000 Binary files a/src/PauseMenu/quest_journal.fla and /dev/null differ diff --git a/src/PauseMenu/quest_journal/DOMDocument.xml b/src/PauseMenu/quest_journal/DOMDocument.xml new file mode 100644 index 000000000..7c64404f9 --- /dev/null +++ b/src/PauseMenu/quest_journal/DOMDocument.xml @@ -0,0 +1,489 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/ButtonArt.xml b/src/PauseMenu/quest_journal/LIBRARY/ButtonArt.xml new file mode 100644 index 000000000..6e78d524f --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/ButtonArt.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/ButtonBG.xml b/src/PauseMenu/quest_journal/LIBRARY/ButtonBG.xml new file mode 100644 index 000000000..fa99e8cc1 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/ButtonBG.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/ButtonPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/ButtonPanel.xml new file mode 100644 index 000000000..c8bd58fb2 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/ButtonPanel.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/DialogButton.xml b/src/PauseMenu/quest_journal/LIBRARY/DialogButton.xml new file mode 100644 index 000000000..922e69593 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/DialogButton.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TEXT + + + + + + + + + + + + + + + + + + + + TEXT + + + + + + + + + + + + + + + + + + + + TEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Divider.xml b/src/PauseMenu/quest_journal/LIBRARY/Divider.xml new file mode 100644 index 000000000..e247fed72 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Divider.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Graphic/ButtonBG Shape.xml b/src/PauseMenu/quest_journal/LIBRARY/Graphic/ButtonBG Shape.xml new file mode 100644 index 000000000..272e454a6 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Graphic/ButtonBG Shape.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/0.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/0.png new file mode 100644 index 000000000..9a5cd3953 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/0.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/1.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/1.png new file mode 100644 index 000000000..f2f450fad Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/1.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/2.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/2.png new file mode 100644 index 000000000..b84ae0c64 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/2.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/3.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/3.png new file mode 100644 index 000000000..3f7483458 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/3.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_A.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_A.png new file mode 100644 index 000000000..103e0da7a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_A.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_B.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_B.png new file mode 100644 index 000000000..3d3b276f1 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_B.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Back.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Back.png new file mode 100644 index 000000000..c3fb1a634 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Back.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_L3.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_L3.png new file mode 100644 index 000000000..840241ec7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_L3.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LB.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LB.png new file mode 100644 index 000000000..734aa54f5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LB.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LS.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LS.png new file mode 100644 index 000000000..48b32146c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LS.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LT.png new file mode 100644 index 000000000..8b0657b70 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LTRT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LTRT.png new file mode 100644 index 000000000..4829b28bf Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_LTRT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_R3.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_R3.png new file mode 100644 index 000000000..ebe30b594 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_R3.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RB.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RB.png new file mode 100644 index 000000000..00d3eff3c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RB.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RS.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RS.png new file mode 100644 index 000000000..d732297a5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RS.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RT.png new file mode 100644 index 000000000..72e97626f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_RT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Start.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Start.png new file mode 100644 index 000000000..854878b05 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Start.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_X.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_X.png new file mode 100644 index 000000000..845b5def5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_X.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Y.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Y.png new file mode 100644 index 000000000..1fe28296d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/360_Y.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/4.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/4.png new file mode 100644 index 000000000..d4ac08692 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/4.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/5.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/5.png new file mode 100644 index 000000000..51ca7b45d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/5.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/6.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/6.png new file mode 100644 index 000000000..eb99193e7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/6.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/7.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/7.png new file mode 100644 index 000000000..d5f8ece3d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/7.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/8.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/8.png new file mode 100644 index 000000000..bedbfc12b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/8.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/9.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/9.png new file mode 100644 index 000000000..2cacb7126 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/9.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/A.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/A.png new file mode 100644 index 000000000..2e9feac28 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/A.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/AD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/AD.png new file mode 100644 index 000000000..7b73f73ac Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/AD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/B.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/B.png new file mode 100644 index 000000000..ee8ce6239 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/B.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Backslash.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Backslash.png new file mode 100644 index 000000000..8cc518dbe Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Backslash.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Backspace.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Backspace.png new file mode 100644 index 000000000..8a6735a44 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Backspace.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Bracketleft.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Bracketleft.png new file mode 100644 index 000000000..e6cc1ef40 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Bracketleft.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Bracketright.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Bracketright.png new file mode 100644 index 000000000..27c4a9a74 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Bracketright.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/C.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/C.png new file mode 100644 index 000000000..3ba93ec9b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/C.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/CapsLock.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/CapsLock.png new file mode 100644 index 000000000..589f68c7c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/CapsLock.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Comma.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Comma.png new file mode 100644 index 000000000..902c7ece0 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Comma.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/D.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/D.png new file mode 100644 index 000000000..01e9ca814 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/D.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Delete.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Delete.png new file mode 100644 index 000000000..982a6c688 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Delete.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Down.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Down.png new file mode 100644 index 000000000..01469e6e5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Down.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/E.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/E.png new file mode 100644 index 000000000..c54326886 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/E.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/End.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/End.png new file mode 100644 index 000000000..8cb03c836 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/End.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Enter.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Enter.png new file mode 100644 index 000000000..470a27512 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Enter.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Equal.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Equal.png new file mode 100644 index 000000000..56329a91b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Equal.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Esc.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Esc.png new file mode 100644 index 000000000..3aee4f9e2 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Esc.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F.png new file mode 100644 index 000000000..313c36b6f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F1.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F1.png new file mode 100644 index 000000000..cb4c80b12 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F1.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F10.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F10.png new file mode 100644 index 000000000..01fdcb1ab Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F10.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F11.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F11.png new file mode 100644 index 000000000..44d2cf316 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F11.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F12.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F12.png new file mode 100644 index 000000000..bdc995641 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F12.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F2.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F2.png new file mode 100644 index 000000000..ce3f6975a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F2.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F3.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F3.png new file mode 100644 index 000000000..db34d0db3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F3.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F4.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F4.png new file mode 100644 index 000000000..78330868d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F4.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F5.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F5.png new file mode 100644 index 000000000..410d46ec9 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F5.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F6.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F6.png new file mode 100644 index 000000000..4583f725c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F6.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F7.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F7.png new file mode 100644 index 000000000..44e044bac Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F7.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F8.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F8.png new file mode 100644 index 000000000..1befa147f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F8.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F9.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F9.png new file mode 100644 index 000000000..53b85264e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/F9.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/G.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/G.png new file mode 100644 index 000000000..611f7a797 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/G.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/H.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/H.png new file mode 100644 index 000000000..86b72fc1b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/H.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Home.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Home.png new file mode 100644 index 000000000..528f8d673 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Home.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Hyphen.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Hyphen.png new file mode 100644 index 000000000..8e8ad18ae Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Hyphen.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/I.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/I.png new file mode 100644 index 000000000..5cb191d61 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/I.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Insert.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Insert.png new file mode 100644 index 000000000..11ada15b7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Insert.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/J.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/J.png new file mode 100644 index 000000000..b15c00a0a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/J.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/K.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/K.png new file mode 100644 index 000000000..bc78d9956 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/K.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Alt.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Alt.png new file mode 100644 index 000000000..10c8477ae Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Alt.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Ctrl.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Ctrl.png new file mode 100644 index 000000000..208ee4c17 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Ctrl.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Shift.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Shift.png new file mode 100644 index 000000000..f948a1329 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L-Shift.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L.png new file mode 100644 index 000000000..ec3f07913 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/L.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Left.png new file mode 100644 index 000000000..92000f6aa Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/M.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/M.png new file mode 100644 index 000000000..719df2848 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/M.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/M1M2.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/M1M2.png new file mode 100644 index 000000000..b80193747 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/M1M2.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU.png new file mode 100644 index 000000000..dc821e627 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_HOLD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_HOLD.png new file mode 100644 index 000000000..7d9fda03e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_HOLD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_LEFT.png new file mode 100644 index 000000000..86da3637c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_RIGHT.png new file mode 100644 index 000000000..94a20cb4b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MENU_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MOTION.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MOTION.png new file mode 100644 index 000000000..2568a8a68 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MR MOTION.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse1.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse1.png new file mode 100644 index 000000000..27a2c01ae Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse1.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse2.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse2.png new file mode 100644 index 000000000..7346690d7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse2.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse3.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse3.png new file mode 100644 index 000000000..a1169e583 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse3.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse4.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse4.png new file mode 100644 index 000000000..f4906dec7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse4.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse5.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse5.png new file mode 100644 index 000000000..bc6160bd4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse5.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse6.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse6.png new file mode 100644 index 000000000..034a1817d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse6.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse7.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse7.png new file mode 100644 index 000000000..77930d25f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse7.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse8.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse8.png new file mode 100644 index 000000000..3b14ca817 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Mouse8.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MouseMove.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MouseMove.png new file mode 100644 index 000000000..b60cb4176 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/MouseMove.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/N.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/N.png new file mode 100644 index 000000000..63ed44f0a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/N.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPad0.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPad0.png new file mode 100644 index 000000000..e41356cc0 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPad0.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPad9.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPad9.png new file mode 100644 index 000000000..2b240f1d3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPad9.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadDec.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadDec.png new file mode 100644 index 000000000..37bb38462 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadDec.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadDivide.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadDivide.png new file mode 100644 index 000000000..11ecdbb9b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadDivide.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadMinus.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadMinus.png new file mode 100644 index 000000000..37c964598 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadMinus.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadMult.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadMult.png new file mode 100644 index 000000000..8fe8547db Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadMult.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadPlus.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadPlus.png new file mode 100644 index 000000000..5f9c8832c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/NumPadPlus.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/O.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/O.png new file mode 100644 index 000000000..bab2ca837 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/O.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC MOTION.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC MOTION.png new file mode 100644 index 000000000..387b2b272 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC MOTION.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST.png new file mode 100644 index 000000000..3491e991b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST_LEFT.png new file mode 100644 index 000000000..d6d803a27 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST_RIGHT.png new file mode 100644 index 000000000..c5d528cfb Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC THUMB_REST_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_HOLD_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_HOLD_Left.png new file mode 100644 index 000000000..88f51dd91 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_HOLD_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_HOLD_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_HOLD_Right.png new file mode 100644 index 000000000..b0b71b779 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_HOLD_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_Left.png new file mode 100644 index 000000000..dc7e4e9cb Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_Right.png new file mode 100644 index 000000000..59056787f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_A_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_HOLD_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_HOLD_Left.png new file mode 100644 index 000000000..fe92f4704 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_HOLD_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_HOLD_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_HOLD_Right.png new file mode 100644 index 000000000..b2e999cd3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_HOLD_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_Left.png new file mode 100644 index 000000000..9be188e8b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_Right.png new file mode 100644 index 000000000..7a8544a2f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/OCC_B_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/P.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/P.png new file mode 100644 index 000000000..496566078 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/P.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A.png new file mode 100644 index 000000000..78dc33cf6 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB.png new file mode 100644 index 000000000..7c48dcf1a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB_LEFT.png new file mode 100644 index 000000000..4778dfd3b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB_RIGHT.png new file mode 100644 index 000000000..5b031b966 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_AB_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A_LEFT.png new file mode 100644 index 000000000..e24104c2b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A_RIGHT.png new file mode 100644 index 000000000..dd76d892f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_A_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B.png new file mode 100644 index 000000000..8f466935f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B_LEFT.png new file mode 100644 index 000000000..ddb8931b0 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B_RIGHT.png new file mode 100644 index 000000000..4ace12e0b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_B_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Back.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Back.png new file mode 100644 index 000000000..7db542daa Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Back.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_CON_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_CON_LEFT.png new file mode 100644 index 000000000..b5b7975a4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_CON_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_CON_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_CON_RIGHT.png new file mode 100644 index 000000000..917cafe40 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_CON_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_L3.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_L3.png new file mode 100644 index 000000000..fb946e44c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_L3.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LB.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LB.png new file mode 100644 index 000000000..0bb7bb74a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LB.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LBRB.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LBRB.png new file mode 100644 index 000000000..5e8545608 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LBRB.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LS.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LS.png new file mode 100644 index 000000000..21d1b0845 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LS.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LT.png new file mode 100644 index 000000000..37d4d4354 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LTRT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LTRT.png new file mode 100644 index 000000000..75917a009 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_LTRT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION.png new file mode 100644 index 000000000..156a8e4b4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION_LEFT.png new file mode 100644 index 000000000..255126c0d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION_RIGHT.png new file mode 100644 index 000000000..8d9594e23 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_MOTION_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV.png new file mode 100644 index 000000000..b3cdf2a29 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LEFT.png new file mode 100644 index 000000000..17c98dd99 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR.png new file mode 100644 index 000000000..335272048 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR_LEFT.png new file mode 100644 index 000000000..d4457d2ac Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR_RIGHT.png new file mode 100644 index 000000000..bf7851b6f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_LR_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_RIGHT.png new file mode 100644 index 000000000..830ebc0e6 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD.png new file mode 100644 index 000000000..61a5cdfbe Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD_LEFT.png new file mode 100644 index 000000000..d735d9a49 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD_RIGHT.png new file mode 100644 index 000000000..a8b5998d3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_NAV_UD_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING.png new file mode 100644 index 000000000..091850033 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING_LEFT.png new file mode 100644 index 000000000..b243ca552 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING_RIGHT.png new file mode 100644 index 000000000..94cd15ed4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_P_SWING_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_R3.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_R3.png new file mode 100644 index 000000000..bdb59df7c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_R3.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RB.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RB.png new file mode 100644 index 000000000..b0e0e33a4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RB.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RS.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RS.png new file mode 100644 index 000000000..9c2bac5e2 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RS.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RT.png new file mode 100644 index 000000000..a91936efe Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_RT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_SHARE.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_SHARE.png new file mode 100644 index 000000000..ae4083f95 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_SHARE.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Select.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Select.png new file mode 100644 index 000000000..471d9bc7b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Select.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Start.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Start.png new file mode 100644 index 000000000..927e97a71 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Start.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_TELEPORT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_TELEPORT.png new file mode 100644 index 000000000..d71f41d30 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_TELEPORT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X.png new file mode 100644 index 000000000..531e86cfc Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY.png new file mode 100644 index 000000000..3ca292440 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY_LEFT.png new file mode 100644 index 000000000..dc93a62a2 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY_RIGHT.png new file mode 100644 index 000000000..5adf81efb Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_XY_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X_LEFT.png new file mode 100644 index 000000000..c799297af Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X_RIGHT.png new file mode 100644 index 000000000..7c6725ed7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_X_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y.png new file mode 100644 index 000000000..f47935dc3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y_LEFT.png new file mode 100644 index 000000000..de2e3a70c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y_RIGHT.png new file mode 100644 index 000000000..a289d70e4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS3_Y_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move.png new file mode 100644 index 000000000..b9eb189ca Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_LEFT.png new file mode 100644 index 000000000..a197e6894 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_RIGHT.png new file mode 100644 index 000000000..4224ed5e6 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select.png new file mode 100644 index 000000000..b0ca1426b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select_LEFT.png new file mode 100644 index 000000000..776e115e5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select_RIGHT.png new file mode 100644 index 000000000..b6a8af538 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PS_Move_Select_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Pause.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Pause.png new file mode 100644 index 000000000..f53bfec3e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Pause.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Period.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Period.png new file mode 100644 index 000000000..d335ee45e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Period.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PgDn.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PgDn.png new file mode 100644 index 000000000..fee4b1a85 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PgDn.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PgUp.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PgUp.png new file mode 100644 index 000000000..15f8dec9e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/PgUp.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Q.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Q.png new file mode 100644 index 000000000..e38a3e1e4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Q.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Quotesingle.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Quotesingle.png new file mode 100644 index 000000000..ad85454a7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Quotesingle.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Alt.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Alt.png new file mode 100644 index 000000000..10c8477ae Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Alt.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Ctrl.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Ctrl.png new file mode 100644 index 000000000..208ee4c17 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Ctrl.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Shift.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Shift.png new file mode 100644 index 000000000..f948a1329 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R-Shift.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R.png new file mode 100644 index 000000000..cdeee36fc Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/R.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Right.png new file mode 100644 index 000000000..045f2e0f5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/S.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/S.png new file mode 100644 index 000000000..f53aff95d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/S.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/ScrollLock.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/ScrollLock.png new file mode 100644 index 000000000..1ab4892aa Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/ScrollLock.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Semicolon.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Semicolon.png new file mode 100644 index 000000000..e67df60f2 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Semicolon.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Slash.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Slash.png new file mode 100644 index 000000000..e295d0294 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Slash.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Space.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Space.png new file mode 100644 index 000000000..03b2b9e4f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Space.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/T.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/T.png new file mode 100644 index 000000000..9b43b0dee Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/T.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Tab.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Tab.png new file mode 100644 index 000000000..2d30a59a8 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Tab.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Tilde.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Tilde.png new file mode 100644 index 000000000..e60b38b12 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Tilde.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/U.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/U.png new file mode 100644 index 000000000..01abd21fe Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/U.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/UnknownKey.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/UnknownKey.png new file mode 100644 index 000000000..9270e887c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/UnknownKey.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Up.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Up.png new file mode 100644 index 000000000..61fc1dd59 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Up.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/V.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/V.png new file mode 100644 index 000000000..3fe23d9ee Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/V.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU.png new file mode 100644 index 000000000..9bf793af3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_HOLD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_HOLD.png new file mode 100644 index 000000000..494dd9fc2 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_HOLD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_LEFT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_LEFT.png new file mode 100644 index 000000000..1a62b24c4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_LEFT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_RIGHT.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_RIGHT.png new file mode 100644 index 000000000..7cc7cda3e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MENU_RIGHT.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MOTION.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MOTION.png new file mode 100644 index 000000000..bbac07bf5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/VIVE MOTION.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/W.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/W.png new file mode 100644 index 000000000..279bbc6d9 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/W.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Wheel.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Wheel.png new file mode 100644 index 000000000..c743e3050 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Wheel.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/X.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/X.png new file mode 100644 index 000000000..f2ba2cdfc Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/X.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Y.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Y.png new file mode 100644 index 000000000..d19ed7349 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Y.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Z.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Z.png new file mode 100644 index 000000000..b8fb36677 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/Z.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab.png new file mode 100644 index 000000000..6b68456f3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Hold.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Hold.png new file mode 100644 index 000000000..1a3eb6c15 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Hold.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Left.png new file mode 100644 index 000000000..e0f3d5c9d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Right.png new file mode 100644 index 000000000..1ba5b5e08 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grab_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip.png new file mode 100644 index 000000000..f0aa81c52 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Hold.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Hold.png new file mode 100644 index 000000000..56fb3f9ca Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Hold.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Left.png new file mode 100644 index 000000000..43f23c75b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Right.png new file mode 100644 index 000000000..23429ab19 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/grip_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Any.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Any.png new file mode 100644 index 000000000..f225f4ecf Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Any.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Any_Hold.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Any_Hold.png new file mode 100644 index 000000000..c01b26cd7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Any_Hold.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Center.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Center.png new file mode 100644 index 000000000..2e8636e1c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Center.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Down.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Down.png new file mode 100644 index 000000000..e63bd5483 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Down.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Left.png new file mode 100644 index 000000000..817827f77 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_LeftRight.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_LeftRight.png new file mode 100644 index 000000000..a13c619be Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_LeftRight.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_NoCenter.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_NoCenter.png new file mode 100644 index 000000000..2c704cd01 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_NoCenter.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_NoCenter_Hold.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_NoCenter_Hold.png new file mode 100644 index 000000000..c00abf60d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_NoCenter_Hold.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Right.png new file mode 100644 index 000000000..26e6e4f68 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Up.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Up.png new file mode 100644 index 000000000..513a5270f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_Up.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_UpDown.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_UpDown.png new file mode 100644 index 000000000..94878dfa2 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Either_UpDown.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Any.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Any.png new file mode 100644 index 000000000..431c0d24d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Any.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Center.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Center.png new file mode 100644 index 000000000..f428ec3e3 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Center.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Down.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Down.png new file mode 100644 index 000000000..a622f9db7 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Down.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_LR.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_LR.png new file mode 100644 index 000000000..660302297 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_LR.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Left.png new file mode 100644 index 000000000..6080b2d0c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_NoCenter.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_NoCenter.png new file mode 100644 index 000000000..96b4b7099 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_NoCenter.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Right.png new file mode 100644 index 000000000..242f08f13 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_UD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_UD.png new file mode 100644 index 000000000..0d260b741 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_UD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Up.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Up.png new file mode 100644 index 000000000..75892a9a2 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Left_Up.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Any.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Any.png new file mode 100644 index 000000000..b8313123e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Any.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Center.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Center.png new file mode 100644 index 000000000..47a64fb0c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Center.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Down.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Down.png new file mode 100644 index 000000000..f9f0350f4 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Down.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_LR.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_LR.png new file mode 100644 index 000000000..30b0b34e9 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_LR.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Left.png new file mode 100644 index 000000000..1bf3c220e Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_NoCenter.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_NoCenter.png new file mode 100644 index 000000000..9dc9a0ce9 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_NoCenter.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Right.png new file mode 100644 index 000000000..43caf4d07 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_UD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_UD.png new file mode 100644 index 000000000..6d7daa1e9 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_UD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Up.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Up.png new file mode 100644 index 000000000..33a07d45b Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/radial_Right_Up.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Any.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Any.png new file mode 100644 index 000000000..74e9c7260 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Any.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Down.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Down.png new file mode 100644 index 000000000..4ed823866 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Down.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_L.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_L.png new file mode 100644 index 000000000..b282dfb4f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_L.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_LR.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_LR.png new file mode 100644 index 000000000..b2e06445a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_LR.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Press.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Press.png new file mode 100644 index 000000000..d3b7e59a5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Press.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_R.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_R.png new file mode 100644 index 000000000..c35dae1d5 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_R.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_UD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_UD.png new file mode 100644 index 000000000..81ebf04bc Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_UD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Up.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Up.png new file mode 100644 index 000000000..d1329c19d Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Left_Up.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Any.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Any.png new file mode 100644 index 000000000..355f7f7a9 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Any.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Down.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Down.png new file mode 100644 index 000000000..51c6bdbee Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Down.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_L.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_L.png new file mode 100644 index 000000000..f6eed41bf Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_L.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_LR.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_LR.png new file mode 100644 index 000000000..4b3e784bd Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_LR.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Press.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Press.png new file mode 100644 index 000000000..918b7ba5a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Press.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_R.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_R.png new file mode 100644 index 000000000..b8900471c Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_R.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_UD.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_UD.png new file mode 100644 index 000000000..65a3be261 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_UD.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Up.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Up.png new file mode 100644 index 000000000..a57eea03a Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/thumb_Right_Up.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger.png new file mode 100644 index 000000000..abe552995 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Hold.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Hold.png new file mode 100644 index 000000000..99ab97684 Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Hold.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Left.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Left.png new file mode 100644 index 000000000..37f6cd14f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Left.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Right.png b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Right.png new file mode 100644 index 000000000..e2b90282f Binary files /dev/null and b/src/PauseMenu/quest_journal/LIBRARY/HelpIcons/trigger_Right.png differ diff --git a/src/PauseMenu/quest_journal/LIBRARY/InputMappingArt.xml b/src/PauseMenu/quest_journal/LIBRARY/InputMappingArt.xml new file mode 100644 index 000000000..e97bf0c86 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/InputMappingArt.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/InputMappingArtBG.xml b/src/PauseMenu/quest_journal/LIBRARY/InputMappingArtBG.xml new file mode 100644 index 000000000..58ab84ee0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/InputMappingArtBG.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/JournalBottomBarCenterReference.xml b/src/PauseMenu/quest_journal/LIBRARY/JournalBottomBarCenterReference.xml new file mode 100644 index 000000000..f60a53f80 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/JournalBottomBarCenterReference.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MappedButton.xml b/src/PauseMenu/quest_journal/LIBRARY/MappedButton.xml new file mode 100644 index 000000000..c9de4088c --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MappedButton.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ButtonArtBackground.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ButtonArtBackground.xml new file mode 100644 index 000000000..330abbe18 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ButtonArtBackground.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfigPanelFader.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfigPanelFader.xml new file mode 100644 index 000000000..716523199 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfigPanelFader.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfirmPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfirmPanel.xml new file mode 100644 index 000000000..a8ade1891 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfirmPanel.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfirmText.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfirmText.xml new file mode 100644 index 000000000..e460fd4c5 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ConfirmText.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + $Load this game? All unsaved progress will be lost. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/EquipIcon.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/EquipIcon.xml new file mode 100644 index 000000000..40086504e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/EquipIcon.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpList.xml new file mode 100644 index 000000000..ae4156098 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpList.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpListEntry.xml new file mode 100644 index 000000000..b6ce93bdf --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpListEntry.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HELP TOPIC + + + + + + + + + + + + + + + + + HELP TOPIC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpListPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpListPanel.xml new file mode 100644 index 000000000..1bfabddd5 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpListPanel.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextButtonArtHolder.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextButtonArtHolder.xml new file mode 100644 index 000000000..04eb99979 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextButtonArtHolder.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextHolder.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextHolder.xml new file mode 100644 index 000000000..0dc03e286 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextHolder.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + HELP TOPIC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextPanel.xml new file mode 100644 index 000000000..745dab711 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/HelpTextPanel.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingList.xml new file mode 100644 index 000000000..a815f84c6 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingList.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingListEntry.xml new file mode 100644 index 000000000..f48c7edd0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingListEntry.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingListScrollArrow.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingListScrollArrow.xml new file mode 100644 index 000000000..36f4c5e0d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingListScrollArrow.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingPanel.xml new file mode 100644 index 000000000..4c7fc1911 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/InputMappingPanel.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalBackground.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalBackground.xml new file mode 100644 index 000000000..2b0529300 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalBackground.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalBottomBar.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalBottomBar.xml new file mode 100644 index 000000000..7e35dd020 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalBottomBar.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Time, Date, Year + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalTab.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalTab.xml new file mode 100644 index 000000000..1dd42a52e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalTab.xml @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BUTTON TEXT + + + + + + + + + + + + + + + + + + + + BUTTON TEXT + + + + + + + + + + + + + + + + + + + + BUTTON TEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalTabEnd.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalTabEnd.xml new file mode 100644 index 000000000..0f04b0baf --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/JournalTabEnd.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/LevelMeterRect.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/LevelMeterRect.xml new file mode 100644 index 000000000..b1627a2a0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/LevelMeterRect.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + + + + $LEVEL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/LevelProgressBar.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/LevelProgressBar.xml new file mode 100644 index 000000000..7eb96e4f4 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/LevelProgressBar.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBar.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBar.xml new file mode 100644 index 000000000..c61d160a6 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBar.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBarBackground.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBarBackground.xml new file mode 100644 index 000000000..a53248d68 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBarBackground.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBarColor.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBarColor.xml new file mode 100644 index 000000000..29188d4e3 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterBarColor.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterMask.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterMask.xml new file mode 100644 index 000000000..6256495c8 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/MeterMask.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectiveListItem.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectiveListItem.xml new file mode 100644 index 000000000..4d7b235a1 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectiveListItem.xml @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + Objective Text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectiveScrollingList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectiveScrollingList.xml new file mode 100644 index 000000000..677321156 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectiveScrollingList.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectivesHeader.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectivesHeader.xml new file mode 100644 index 000000000..6d2475421 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ObjectivesHeader.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + $OBJECTIVES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionStepperArrowBtn.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionStepperArrowBtn.xml new file mode 100644 index 000000000..61850c0aa --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionStepperArrowBtn.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsLists.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsLists.xml new file mode 100644 index 000000000..36bea4c6d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsLists.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsList.xml new file mode 100644 index 000000000..53d662745 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsList.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsListEntry.xml new file mode 100644 index 000000000..9c89d1791 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsListEntry.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsPanel.xml new file mode 100644 index 000000000..3ad834a90 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/OptionsListsPanel.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitList.xml new file mode 100644 index 000000000..b9fefc320 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitList.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitListEntry.xml new file mode 100644 index 000000000..9f3df3e73 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitListEntry.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Label + + + + + + + + + + + + + + + + + + + + Label + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitPanel.xml new file mode 100644 index 000000000..72437f746 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PCQuitPanel.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PlayerInfoText.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PlayerInfoText.xml new file mode 100644 index 000000000..0596815e4 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/PlayerInfoText.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestJournalBase.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestJournalBase.xml new file mode 100644 index 000000000..0dea32768 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestJournalBase.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestJournalFader.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestJournalFader.xml new file mode 100644 index 000000000..6e5c3058d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestJournalFader.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleEndpieces.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleEndpieces.xml new file mode 100644 index 000000000..178b65b5e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleEndpieces.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleHolder.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleHolder.xml new file mode 100644 index 000000000..43aa6e27e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleHolder.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleList.xml new file mode 100644 index 000000000..f11f05e26 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleList.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntry.xml new file mode 100644 index 000000000..a0815d10d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntry.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QUEST TEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntryCentered.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntryCentered.xml new file mode 100644 index 000000000..76e009c30 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntryCentered.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECTED QUEST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntryDivider.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntryDivider.xml new file mode 100644 index 000000000..a8a79e152 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestTitleListEntryDivider.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestsFader.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestsFader.xml new file mode 100644 index 000000000..d24528c36 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestsFader.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestsPage.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestsPage.xml new file mode 100644 index 000000000..811719d38 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/QuestsPage.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Quest description text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TITLE + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadList.xml new file mode 100644 index 000000000..1f2f8ae2c --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadList.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadListEntry.xml new file mode 100644 index 000000000..e8223de65 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadListEntry.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 000 + + + + + + + + + + + + + + + + + + + + 000 + + + + + + + + + + + + + + + + + + + + + + + + Place Name + + + + + + + + + + + + + + + + + + + + Place Name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadPanel.xml new file mode 100644 index 000000000..d32ca799e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SaveLoadPanel.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ScreenshotHolder.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ScreenshotHolder.xml new file mode 100644 index 000000000..01bfc426d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ScreenshotHolder.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ScrollableText.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ScrollableText.xml new file mode 100644 index 000000000..d31ad7263 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/ScrollableText.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Help text goes here! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBox.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBox.xml new file mode 100644 index 000000000..e896526a4 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBox.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBoxBackground.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBoxBackground.xml new file mode 100644 index 000000000..d6a4b0b2c --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBoxBackground.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBoxCheck.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBoxCheck.xml new file mode 100644 index 000000000..beb53cdb1 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsCheckBoxCheck.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsList.xml new file mode 100644 index 000000000..5673cf74d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsList.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsListEntry.xml new file mode 100644 index 000000000..c53821aff --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsListEntry.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CATEGORY + + + + + + + + + + + + + + + + + + + + CATEGORY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsOptionStepper.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsOptionStepper.xml new file mode 100644 index 000000000..8988c1176 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsOptionStepper.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OPTION + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsPanel.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsPanel.xml new file mode 100644 index 000000000..9e0503191 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SettingsPanel.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListEntry.xml new file mode 100644 index 000000000..1a1db5366 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListEntry.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + CATEGORY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListEntryCentered.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListEntryCentered.xml new file mode 100644 index 000000000..401332440 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListEntryCentered.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + CATEGORY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListHolder.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListHolder.xml new file mode 100644 index 000000000..b96e373aa --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListHolder.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListList.xml new file mode 100644 index 000000000..c19b29072 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsCategoryListList.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsFader.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsFader.xml new file mode 100644 index 000000000..2196f4b84 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsFader.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsList.xml new file mode 100644 index 000000000..7501e5723 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsList.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsListEntry.xml new file mode 100644 index 000000000..5d403aae0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsListEntry.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + VALUE + + + + + + + + + + + + + + + + + + + + + + + + Category Name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsPage.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsPage.xml new file mode 100644 index 000000000..d0cbf274e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/StatsPage.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesList.xml new file mode 100644 index 000000000..ab5202592 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesList.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesListEntry.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesListEntry.xml new file mode 100644 index 000000000..f1cc3823d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesListEntry.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + CATEGORY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesListEntryCentered.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesListEntryCentered.xml new file mode 100644 index 000000000..3cd024cac --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoriesListEntryCentered.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + SELECTED CATEGORY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoryList.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoryList.xml new file mode 100644 index 000000000..6eddfa29d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemCategoryList.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemFader.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemFader.xml new file mode 100644 index 000000000..4e351d924 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemFader.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemPage.xml b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemPage.xml new file mode 100644 index 000000000..ba771e2dd --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/MovieClips/SystemPage.xml @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <version> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/BackgroundRect.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/BackgroundRect.xml new file mode 100644 index 000000000..c4ed25fab --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/BackgroundRect.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Endpieces_DLC01.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Endpieces_DLC01.xml new file mode 100644 index 000000000..663cae9d0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Endpieces_DLC01.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Endpieces_DLC02.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Endpieces_DLC02.xml new file mode 100644 index 000000000..ca6f04e4d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Endpieces_DLC02.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/MeterBackground.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/MeterBackground.xml new file mode 100644 index 000000000..afe2b2941 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/MeterBackground.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 122.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 122.xml new file mode 100644 index 000000000..a29bd09e1 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 122.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 398.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 398.xml new file mode 100644 index 000000000..95fa789e8 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 398.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 400.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 400.xml new file mode 100644 index 000000000..0c42e6cad --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 400.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 407.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 407.xml new file mode 100644 index 000000000..ebf45f1e0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 407.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 409.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 409.xml new file mode 100644 index 000000000..e2af535d5 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 409.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 411.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 411.xml new file mode 100644 index 000000000..ded491d9c --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 411.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 414.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 414.xml new file mode 100644 index 000000000..fc3040ec6 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 414.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 417.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 417.xml new file mode 100644 index 000000000..6b98a8d57 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 417.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 432.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 432.xml new file mode 100644 index 000000000..4119d5fe0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 432.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 433.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 433.xml new file mode 100644 index 000000000..ecffaf48e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 433.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 435.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 435.xml new file mode 100644 index 000000000..1f6c40f2c --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 435.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 439.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 439.xml new file mode 100644 index 000000000..2fa3da219 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 439.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 440.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 440.xml new file mode 100644 index 000000000..8aa603fb5 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 440.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 441.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 441.xml new file mode 100644 index 000000000..712f77efd --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 441.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 442.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 442.xml new file mode 100644 index 000000000..6f787fb96 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 442.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 443.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 443.xml new file mode 100644 index 000000000..23b72fe9e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 443.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 444.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 444.xml new file mode 100644 index 000000000..da4070899 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 444.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 445.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 445.xml new file mode 100644 index 000000000..a57ce5815 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 445.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 446.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 446.xml new file mode 100644 index 000000000..957ec73b4 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 446.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 447.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 447.xml new file mode 100644 index 000000000..f19a87d97 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 447.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 468.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 468.xml new file mode 100644 index 000000000..22eef24a7 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 468.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 493.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 493.xml new file mode 100644 index 000000000..5e2580b08 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 493.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 499.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 499.xml new file mode 100644 index 000000000..e2d9d6cec --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 499.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 505.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 505.xml new file mode 100644 index 000000000..cab31a3e6 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 505.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 507.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 507.xml new file mode 100644 index 000000000..a6147e9c3 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 507.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 541.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 541.xml new file mode 100644 index 000000000..2f92977de --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 541.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 548.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 548.xml new file mode 100644 index 000000000..fd9f38107 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 548.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 552.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 552.xml new file mode 100644 index 000000000..daebec7c0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 552.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 556.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 556.xml new file mode 100644 index 000000000..c30f9f0e5 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 556.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 558.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 558.xml new file mode 100644 index 000000000..a8afbb793 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 558.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 560.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 560.xml new file mode 100644 index 000000000..225e491ac --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 560.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 562.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 562.xml new file mode 100644 index 000000000..76acb426e --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 562.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 569.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 569.xml new file mode 100644 index 000000000..f59771d06 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 569.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 571.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 571.xml new file mode 100644 index 000000000..3df999b13 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 571.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 573.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 573.xml new file mode 100644 index 000000000..d4b157c09 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 573.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 575.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 575.xml new file mode 100644 index 000000000..9885cec47 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 575.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 577.xml b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 577.xml new file mode 100644 index 000000000..a08612cb0 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/Shapes/Shape 577.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/TextArea.xml b/src/PauseMenu/quest_journal/LIBRARY/TextArea.xml new file mode 100644 index 000000000..5167bf12b --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/TextArea.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBar.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBar.xml new file mode 100644 index 000000000..b468dbefc --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBar.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBarOption_thumb_shape.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBarOption_thumb_shape.xml new file mode 100644 index 000000000..3be147343 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBarOption_thumb_shape.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_cap_shape.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_cap_shape.xml new file mode 100644 index 000000000..6374a95af --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_cap_shape.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_thumb_shape.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_thumb_shape.xml new file mode 100644 index 000000000..d0a003fb1 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_thumb_shape.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_track_shape.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_track_shape.xml new file mode 100644 index 000000000..50cc40cfd --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarGraphics/scrollBar_track_shape.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarOption_thumb.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarOption_thumb.xml new file mode 100644 index 000000000..8652fca0d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBarOption_thumb.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_downArrow.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_downArrow.xml new file mode 100644 index 000000000..55bcf29a5 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_downArrow.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_thumb.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_thumb.xml new file mode 100644 index 000000000..c8ddba00f --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_thumb.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_track.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_track.xml new file mode 100644 index 000000000..c5b07fd9d --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_track.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_upArrow.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_upArrow.xml new file mode 100644 index 000000000..7a852cdef --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarAssets/scrollBar_upArrow.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/LIBRARY/scrollBarOption.xml b/src/PauseMenu/quest_journal/LIBRARY/scrollBarOption.xml new file mode 100644 index 000000000..44991f216 --- /dev/null +++ b/src/PauseMenu/quest_journal/LIBRARY/scrollBarOption.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + +]]> + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/META-INF/metadata.xml b/src/PauseMenu/quest_journal/META-INF/metadata.xml new file mode 100644 index 000000000..a5d3353ab --- /dev/null +++ b/src/PauseMenu/quest_journal/META-INF/metadata.xml @@ -0,0 +1,110 @@ + + + + + Adobe Flash CS4 Professional + 2011-12-12T12:48:35Z + 2021-10-30T15:01:56+08:00 + 2021-10-30T15:01:56+08:00 + + + application/vnd.adobe.fla + + + + xmp.iid:E307A1A1EBC5E811BD99E8D9DEB06D6C + xmp.did:86B470DFAE24E1118A1BB716BAE455BA + xmp.did:86B470DFAE24E1118A1BB716BAE455BA + + xmp.did:94C3E5734A39EC11BF58C9ACE5BFC4EF + xmp.iid:96C3E5734A39EC11BF58C9ACE5BFC4EF + xmp.did:86B470DFAE24E1118A1BB716BAE455BA + + + + saved + xmp.iid:86B470DFAE24E1118A1BB716BAE455BA + 2011-12-12T12:56:07Z + Adobe Flash CS4 Professional + / + + + created + xmp.iid:05BD622883B5E8119DB9A3102D19C3D5 + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:6731F41887B5E8119DB9A3102D19C3D5 + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:1A0E510B1AC3E811A10D972EADDA1FE9 + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:A3EC38F82BC3E811A10D972EADDA1FE9 + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:F64EA5A9A0C3E811A10D972EADDA1FE9 + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:E307A1A1EBC5E811BD99E8D9DEB06D6C + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:94C3E5734A39EC11BF58C9ACE5BFC4EF + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:96C3E5734A39EC11BF58C9ACE5BFC4EF + 2011-12-12T12:48:35Z + Adobe Flash Professional CS6 - build 481 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/MobileSettings.xml b/src/PauseMenu/quest_journal/MobileSettings.xml new file mode 100644 index 000000000..e69de29bb diff --git a/src/PauseMenu/quest_journal/PublishSettings.xml b/src/PauseMenu/quest_journal/PublishSettings.xml new file mode 100644 index 000000000..a9ba9211c --- /dev/null +++ b/src/PauseMenu/quest_journal/PublishSettings.xml @@ -0,0 +1,206 @@ + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + ../../build/quest_journal.swf + quest_journal.exe + quest_journal.app + quest_journal.html + quest_journal.gif + quest_journal.jpg + quest_journal.png + quest_journal.mov + quest_journal.smil + ../../build/quest_journal.swc + + + 0 + 12,0,0,0;11,2,0,0;11,1,0,0;10,3,0,0;10,2,153,0;10,1,52,0;9,0,124,0;8,0,24,0;7,0,14,0;6,0,79,0;5,0,58,0;4,0,32,0;3,0,8,0;2,0,1,12;1,0,0,1; + 1 + 1 + quest_journal.xfl_content.html + quest_journal.xfl_alternate.html + 0 + + 1280 + 720 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 4 + 0 + 0 + 1 + 0 + C:\Users\odie\AppData\Local\Adobe\Flash CS6\en_US\Configuration\HTML\Default.html + 1 + + + + + 0 + 0 + 0 + 80 + 0 + 0 + 7 + 0 + 7 + 0 + 15 + FlashPlayer11.2 + 2 + 1 + ../Common;../CLIK;.;$(LocalData)/Classes + + CONFIG::FLASH_AUTHORING="true"; + 0 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + 0 + 4 + 0 + AS3 + 1 + 1 + 0 + 15 + 0 + 0 + 4 + rsl + wrap + $(AppConfig)/ActionScript 3.0/rsls/loader_animation.swf + + + $(AppConfig)/ActionScript 3.0/libs + merge + + + $(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc + rsl + http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz + http://fpdownload.adobe.com/pub/swz/crossdomain.xml + textLayout_2.0.0.232.swz + + + + + $(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc + + http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz + http://fpdownload.adobe.com/pub/swz/crossdomain.xml + textLayout_2.0.0.232.swz + + + + + 1280 + 720 + 0 + 4718592 + 0 + 80 + 1 + + + 1 + 0 + 1 + 0 + 0 + 100000 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + 1280 + 720 + 0 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + 0 + + 128 + + + 255 + + + + 1280 + 720 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + 24-bit with Alpha + 255 + + + + 1280 + 720 + 1 + 0 + + + 00000000 + 0 + 0 + 0 + 0 + 1 + + + \ No newline at end of file diff --git a/src/PauseMenu/quest_journal/bin/M 372 1539004978.dat b/src/PauseMenu/quest_journal/bin/M 372 1539004978.dat new file mode 100644 index 000000000..819d13e4e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 372 1539004978.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 373 1539004978.dat b/src/PauseMenu/quest_journal/bin/M 373 1539004978.dat new file mode 100644 index 000000000..c690df3f2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 373 1539004978.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 374 1539004978.dat b/src/PauseMenu/quest_journal/bin/M 374 1539004978.dat new file mode 100644 index 000000000..d93d9d06d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 374 1539004978.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 375 1539004978.dat b/src/PauseMenu/quest_journal/bin/M 375 1539004978.dat new file mode 100644 index 000000000..fae55d88f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 375 1539004978.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 376 1539004978.dat b/src/PauseMenu/quest_journal/bin/M 376 1539004978.dat new file mode 100644 index 000000000..fd62a0359 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 376 1539004978.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 377 1539004978.dat b/src/PauseMenu/quest_journal/bin/M 377 1539004978.dat new file mode 100644 index 000000000..6b442d8fd Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 377 1539004978.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 378 1539004978.dat b/src/PauseMenu/quest_journal/bin/M 378 1539004978.dat new file mode 100644 index 000000000..c019be559 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 378 1539004978.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 379 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 379 1539004979.dat new file mode 100644 index 000000000..0f8b16b33 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 379 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 380 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 380 1539004979.dat new file mode 100644 index 000000000..a4486503f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 380 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 381 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 381 1539004979.dat new file mode 100644 index 000000000..964620c86 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 381 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 382 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 382 1539004979.dat new file mode 100644 index 000000000..c5ee759a3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 382 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 383 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 383 1539004979.dat new file mode 100644 index 000000000..5599529b7 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 383 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 384 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 384 1539004979.dat new file mode 100644 index 000000000..76476dac9 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 384 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 385 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 385 1539004979.dat new file mode 100644 index 000000000..5b1dee040 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 385 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 386 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 386 1539004979.dat new file mode 100644 index 000000000..75c6a3dc0 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 386 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 387 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 387 1539004979.dat new file mode 100644 index 000000000..d34246836 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 387 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 388 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 388 1539004979.dat new file mode 100644 index 000000000..9118d5a88 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 388 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 389 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 389 1539004979.dat new file mode 100644 index 000000000..d4741d572 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 389 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 390 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 390 1539004979.dat new file mode 100644 index 000000000..8dd76c2da Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 390 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 391 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 391 1539004979.dat new file mode 100644 index 000000000..b9dd5075f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 391 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 392 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 392 1539004979.dat new file mode 100644 index 000000000..fd858d02c Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 392 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 393 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 393 1539004979.dat new file mode 100644 index 000000000..0581bb470 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 393 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 394 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 394 1539004979.dat new file mode 100644 index 000000000..3ad503c68 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 394 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 395 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 395 1539004979.dat new file mode 100644 index 000000000..e83d90e03 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 395 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 396 1539004979.dat b/src/PauseMenu/quest_journal/bin/M 396 1539004979.dat new file mode 100644 index 000000000..65794fe7e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 396 1539004979.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 397 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 397 1539004980.dat new file mode 100644 index 000000000..4d5e2dd01 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 397 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 398 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 398 1539004980.dat new file mode 100644 index 000000000..cb00a23b8 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 398 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 399 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 399 1539004980.dat new file mode 100644 index 000000000..f1c7716e5 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 399 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 400 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 400 1539004980.dat new file mode 100644 index 000000000..4d151fa31 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 400 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 401 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 401 1539004980.dat new file mode 100644 index 000000000..709f75ed2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 401 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 402 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 402 1539004980.dat new file mode 100644 index 000000000..197ac3996 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 402 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 403 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 403 1539004980.dat new file mode 100644 index 000000000..fc9e67ecd Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 403 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 404 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 404 1539004980.dat new file mode 100644 index 000000000..d8d908888 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 404 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 405 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 405 1539004980.dat new file mode 100644 index 000000000..5821ed152 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 405 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 406 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 406 1539004980.dat new file mode 100644 index 000000000..3e0ef9ac4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 406 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 407 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 407 1539004980.dat new file mode 100644 index 000000000..a86d8bcb8 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 407 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 408 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 408 1539004980.dat new file mode 100644 index 000000000..ca131954a Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 408 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 409 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 409 1539004980.dat new file mode 100644 index 000000000..8fa45e975 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 409 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 410 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 410 1539004980.dat new file mode 100644 index 000000000..e2ef32d58 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 410 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 411 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 411 1539004980.dat new file mode 100644 index 000000000..2a215654b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 411 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 412 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 412 1539004980.dat new file mode 100644 index 000000000..b30236a60 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 412 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 413 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 413 1539004980.dat new file mode 100644 index 000000000..da870e13f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 413 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 414 1539004980.dat b/src/PauseMenu/quest_journal/bin/M 414 1539004980.dat new file mode 100644 index 000000000..3bc19aac2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 414 1539004980.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 415 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 415 1539004981.dat new file mode 100644 index 000000000..67599b8d5 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 415 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 416 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 416 1539004981.dat new file mode 100644 index 000000000..d8c376e38 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 416 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 417 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 417 1539004981.dat new file mode 100644 index 000000000..787b184ac Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 417 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 418 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 418 1539004981.dat new file mode 100644 index 000000000..9adc2aa89 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 418 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 419 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 419 1539004981.dat new file mode 100644 index 000000000..862f1a390 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 419 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 420 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 420 1539004981.dat new file mode 100644 index 000000000..564f8b45f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 420 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 421 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 421 1539004981.dat new file mode 100644 index 000000000..f9cee8608 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 421 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 422 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 422 1539004981.dat new file mode 100644 index 000000000..60785239a Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 422 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 423 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 423 1539004981.dat new file mode 100644 index 000000000..bb42ad026 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 423 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 424 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 424 1539004981.dat new file mode 100644 index 000000000..271d158a2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 424 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 425 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 425 1539004981.dat new file mode 100644 index 000000000..a371fc237 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 425 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 426 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 426 1539004981.dat new file mode 100644 index 000000000..774d6f4f6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 426 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 427 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 427 1539004981.dat new file mode 100644 index 000000000..05acaa2d4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 427 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 428 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 428 1539004981.dat new file mode 100644 index 000000000..d2eaf625b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 428 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 429 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 429 1539004981.dat new file mode 100644 index 000000000..ae2489e88 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 429 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 430 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 430 1539004981.dat new file mode 100644 index 000000000..4c7b19149 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 430 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 431 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 431 1539004981.dat new file mode 100644 index 000000000..3f1bab568 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 431 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 432 1539004981.dat b/src/PauseMenu/quest_journal/bin/M 432 1539004981.dat new file mode 100644 index 000000000..40aa7648e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 432 1539004981.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 433 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 433 1539004982.dat new file mode 100644 index 000000000..6e2b25b5b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 433 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 434 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 434 1539004982.dat new file mode 100644 index 000000000..b625a8083 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 434 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 435 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 435 1539004982.dat new file mode 100644 index 000000000..71006c579 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 435 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 436 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 436 1539004982.dat new file mode 100644 index 000000000..090689490 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 436 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 437 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 437 1539004982.dat new file mode 100644 index 000000000..00b3caeeb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 437 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 438 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 438 1539004982.dat new file mode 100644 index 000000000..83f2eb259 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 438 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 439 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 439 1539004982.dat new file mode 100644 index 000000000..41a1fef18 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 439 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 440 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 440 1539004982.dat new file mode 100644 index 000000000..b6756bdf6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 440 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 441 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 441 1539004982.dat new file mode 100644 index 000000000..df4f439ce Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 441 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 442 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 442 1539004982.dat new file mode 100644 index 000000000..94946d606 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 442 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 443 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 443 1539004982.dat new file mode 100644 index 000000000..e0fc0d629 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 443 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 444 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 444 1539004982.dat new file mode 100644 index 000000000..ec9ea582d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 444 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 445 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 445 1539004982.dat new file mode 100644 index 000000000..3416fe9be Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 445 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 446 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 446 1539004982.dat new file mode 100644 index 000000000..091819e51 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 446 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 447 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 447 1539004982.dat new file mode 100644 index 000000000..c426e6d0e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 447 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 448 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 448 1539004982.dat new file mode 100644 index 000000000..bfc67fd04 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 448 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 449 1539004982.dat b/src/PauseMenu/quest_journal/bin/M 449 1539004982.dat new file mode 100644 index 000000000..92f3d484d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 449 1539004982.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 450 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 450 1539004983.dat new file mode 100644 index 000000000..91b12ef91 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 450 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 451 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 451 1539004983.dat new file mode 100644 index 000000000..81a904205 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 451 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 452 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 452 1539004983.dat new file mode 100644 index 000000000..effc7c4dc Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 452 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 453 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 453 1539004983.dat new file mode 100644 index 000000000..468e3cb67 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 453 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 454 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 454 1539004983.dat new file mode 100644 index 000000000..f1e3b9195 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 454 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 455 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 455 1539004983.dat new file mode 100644 index 000000000..975e92608 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 455 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 456 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 456 1539004983.dat new file mode 100644 index 000000000..bf60fd7d4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 456 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 457 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 457 1539004983.dat new file mode 100644 index 000000000..aafbe92ec Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 457 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 458 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 458 1539004983.dat new file mode 100644 index 000000000..0f95a4fe5 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 458 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 459 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 459 1539004983.dat new file mode 100644 index 000000000..d65fd6270 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 459 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 460 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 460 1539004983.dat new file mode 100644 index 000000000..7286c0381 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 460 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 461 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 461 1539004983.dat new file mode 100644 index 000000000..48890a299 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 461 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 462 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 462 1539004983.dat new file mode 100644 index 000000000..95f3e4da9 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 462 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 463 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 463 1539004983.dat new file mode 100644 index 000000000..894f8b9f2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 463 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 464 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 464 1539004983.dat new file mode 100644 index 000000000..75084cc90 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 464 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 465 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 465 1539004983.dat new file mode 100644 index 000000000..fddf1df8b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 465 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 466 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 466 1539004983.dat new file mode 100644 index 000000000..ed5c39792 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 466 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 467 1539004983.dat b/src/PauseMenu/quest_journal/bin/M 467 1539004983.dat new file mode 100644 index 000000000..b06cf17e6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 467 1539004983.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 468 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 468 1539004984.dat new file mode 100644 index 000000000..8889a1e9d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 468 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 469 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 469 1539004984.dat new file mode 100644 index 000000000..bb6f35212 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 469 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 470 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 470 1539004984.dat new file mode 100644 index 000000000..d37106cb9 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 470 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 471 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 471 1539004984.dat new file mode 100644 index 000000000..905209b98 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 471 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 472 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 472 1539004984.dat new file mode 100644 index 000000000..b72d38d12 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 472 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 473 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 473 1539004984.dat new file mode 100644 index 000000000..03b37485d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 473 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 474 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 474 1539004984.dat new file mode 100644 index 000000000..0f568ff90 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 474 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 475 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 475 1539004984.dat new file mode 100644 index 000000000..1506d6897 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 475 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 476 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 476 1539004984.dat new file mode 100644 index 000000000..4cc6be3e0 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 476 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 477 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 477 1539004984.dat new file mode 100644 index 000000000..b0c205c65 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 477 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 478 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 478 1539004984.dat new file mode 100644 index 000000000..b5b5a68b9 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 478 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 479 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 479 1539004984.dat new file mode 100644 index 000000000..b7f8d255d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 479 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 480 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 480 1539004984.dat new file mode 100644 index 000000000..8824eadf7 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 480 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 481 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 481 1539004984.dat new file mode 100644 index 000000000..9f5cfa1c0 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 481 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 482 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 482 1539004984.dat new file mode 100644 index 000000000..3b6e0627a Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 482 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 483 1539004984.dat b/src/PauseMenu/quest_journal/bin/M 483 1539004984.dat new file mode 100644 index 000000000..f5797fc78 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 483 1539004984.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 484 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 484 1539004985.dat new file mode 100644 index 000000000..c8befd211 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 484 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 485 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 485 1539004985.dat new file mode 100644 index 000000000..75d32b1d2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 485 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 486 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 486 1539004985.dat new file mode 100644 index 000000000..7f6a42d3e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 486 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 487 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 487 1539004985.dat new file mode 100644 index 000000000..b8d0b1332 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 487 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 488 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 488 1539004985.dat new file mode 100644 index 000000000..e67f6ccaf Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 488 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 489 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 489 1539004985.dat new file mode 100644 index 000000000..561e8dab7 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 489 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 490 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 490 1539004985.dat new file mode 100644 index 000000000..cb3758747 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 490 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 491 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 491 1539004985.dat new file mode 100644 index 000000000..d361ea8c4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 491 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 492 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 492 1539004985.dat new file mode 100644 index 000000000..8ef1606b1 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 492 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 493 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 493 1539004985.dat new file mode 100644 index 000000000..6100f4321 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 493 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 494 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 494 1539004985.dat new file mode 100644 index 000000000..f8645e325 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 494 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 495 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 495 1539004985.dat new file mode 100644 index 000000000..9f6e5f0fc Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 495 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 496 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 496 1539004985.dat new file mode 100644 index 000000000..55675a1ea Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 496 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 497 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 497 1539004985.dat new file mode 100644 index 000000000..de3d163f4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 497 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 498 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 498 1539004985.dat new file mode 100644 index 000000000..e21093c0b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 498 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 499 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 499 1539004985.dat new file mode 100644 index 000000000..056c2b732 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 499 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 500 1539004985.dat b/src/PauseMenu/quest_journal/bin/M 500 1539004985.dat new file mode 100644 index 000000000..5a2dbecf4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 500 1539004985.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 501 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 501 1539004986.dat new file mode 100644 index 000000000..a11e9589f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 501 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 502 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 502 1539004986.dat new file mode 100644 index 000000000..b21526dc3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 502 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 503 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 503 1539004986.dat new file mode 100644 index 000000000..9ffc447a2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 503 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 504 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 504 1539004986.dat new file mode 100644 index 000000000..6a63e2adb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 504 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 505 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 505 1539004986.dat new file mode 100644 index 000000000..06e936feb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 505 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 506 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 506 1539004986.dat new file mode 100644 index 000000000..e8bd8a2ec Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 506 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 507 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 507 1539004986.dat new file mode 100644 index 000000000..21c7fdc7e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 507 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 508 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 508 1539004986.dat new file mode 100644 index 000000000..98b15b896 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 508 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 509 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 509 1539004986.dat new file mode 100644 index 000000000..aa47694d6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 509 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 510 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 510 1539004986.dat new file mode 100644 index 000000000..3e5060716 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 510 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 511 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 511 1539004986.dat new file mode 100644 index 000000000..f140ba71b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 511 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 512 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 512 1539004986.dat new file mode 100644 index 000000000..2caddfe60 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 512 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 513 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 513 1539004986.dat new file mode 100644 index 000000000..c83101525 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 513 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 514 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 514 1539004986.dat new file mode 100644 index 000000000..8d3ae0455 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 514 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 515 1539004986.dat b/src/PauseMenu/quest_journal/bin/M 515 1539004986.dat new file mode 100644 index 000000000..aa3b09664 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 515 1539004986.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 516 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 516 1539004987.dat new file mode 100644 index 000000000..18f71d3e4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 516 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 517 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 517 1539004987.dat new file mode 100644 index 000000000..108cdb8cd Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 517 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 518 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 518 1539004987.dat new file mode 100644 index 000000000..e7c801759 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 518 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 519 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 519 1539004987.dat new file mode 100644 index 000000000..e42ddbc21 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 519 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 520 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 520 1539004987.dat new file mode 100644 index 000000000..79168c983 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 520 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 521 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 521 1539004987.dat new file mode 100644 index 000000000..0866df225 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 521 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 522 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 522 1539004987.dat new file mode 100644 index 000000000..f4d11cf52 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 522 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 523 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 523 1539004987.dat new file mode 100644 index 000000000..01542a034 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 523 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 524 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 524 1539004987.dat new file mode 100644 index 000000000..8e4d30638 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 524 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 525 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 525 1539004987.dat new file mode 100644 index 000000000..b1036fc97 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 525 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 526 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 526 1539004987.dat new file mode 100644 index 000000000..6b43c48ad Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 526 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 527 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 527 1539004987.dat new file mode 100644 index 000000000..a532bf682 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 527 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 528 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 528 1539004987.dat new file mode 100644 index 000000000..b97cb0e9a Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 528 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 529 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 529 1539004987.dat new file mode 100644 index 000000000..77d489b9b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 529 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 530 1539004987.dat b/src/PauseMenu/quest_journal/bin/M 530 1539004987.dat new file mode 100644 index 000000000..b9e6c8052 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 530 1539004987.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 531 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 531 1539004988.dat new file mode 100644 index 000000000..e7c135126 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 531 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 532 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 532 1539004988.dat new file mode 100644 index 000000000..c38ad41ee Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 532 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 533 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 533 1539004988.dat new file mode 100644 index 000000000..312c9d3ed Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 533 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 534 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 534 1539004988.dat new file mode 100644 index 000000000..501550b27 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 534 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 535 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 535 1539004988.dat new file mode 100644 index 000000000..25e7de925 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 535 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 536 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 536 1539004988.dat new file mode 100644 index 000000000..bf95a010f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 536 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 537 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 537 1539004988.dat new file mode 100644 index 000000000..88e980d38 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 537 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 538 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 538 1539004988.dat new file mode 100644 index 000000000..66ca8cc1f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 538 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 539 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 539 1539004988.dat new file mode 100644 index 000000000..7c65f4c7b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 539 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 540 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 540 1539004988.dat new file mode 100644 index 000000000..e50a90b14 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 540 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 541 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 541 1539004988.dat new file mode 100644 index 000000000..5bfdf3557 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 541 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 542 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 542 1539004988.dat new file mode 100644 index 000000000..6717bad1a Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 542 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 543 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 543 1539004988.dat new file mode 100644 index 000000000..c57c214dd Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 543 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 544 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 544 1539004988.dat new file mode 100644 index 000000000..1646fecba Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 544 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 545 1539004988.dat b/src/PauseMenu/quest_journal/bin/M 545 1539004988.dat new file mode 100644 index 000000000..03ca56140 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 545 1539004988.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 546 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 546 1539004989.dat new file mode 100644 index 000000000..b438e00eb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 546 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 547 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 547 1539004989.dat new file mode 100644 index 000000000..0c68eba65 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 547 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 548 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 548 1539004989.dat new file mode 100644 index 000000000..879bda88b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 548 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 549 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 549 1539004989.dat new file mode 100644 index 000000000..ef9086059 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 549 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 550 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 550 1539004989.dat new file mode 100644 index 000000000..b4de4edb2 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 550 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 551 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 551 1539004989.dat new file mode 100644 index 000000000..97f5f5612 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 551 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 552 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 552 1539004989.dat new file mode 100644 index 000000000..047190ba9 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 552 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 553 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 553 1539004989.dat new file mode 100644 index 000000000..62d38cbfb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 553 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 554 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 554 1539004989.dat new file mode 100644 index 000000000..0da20ebd6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 554 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 555 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 555 1539004989.dat new file mode 100644 index 000000000..2fd7b66d6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 555 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 556 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 556 1539004989.dat new file mode 100644 index 000000000..72d581969 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 556 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 557 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 557 1539004989.dat new file mode 100644 index 000000000..1c79d7514 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 557 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 558 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 558 1539004989.dat new file mode 100644 index 000000000..440ea8623 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 558 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 559 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 559 1539004989.dat new file mode 100644 index 000000000..9f29e606a Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 559 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 560 1539004989.dat b/src/PauseMenu/quest_journal/bin/M 560 1539004989.dat new file mode 100644 index 000000000..9a50f9cfe Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 560 1539004989.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 561 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 561 1539004990.dat new file mode 100644 index 000000000..1236262ad Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 561 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 562 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 562 1539004990.dat new file mode 100644 index 000000000..63f99d266 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 562 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 563 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 563 1539004990.dat new file mode 100644 index 000000000..385c26aab Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 563 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 564 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 564 1539004990.dat new file mode 100644 index 000000000..2a7c5d90e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 564 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 565 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 565 1539004990.dat new file mode 100644 index 000000000..5b74b6bd6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 565 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 566 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 566 1539004990.dat new file mode 100644 index 000000000..2935b016b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 566 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 567 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 567 1539004990.dat new file mode 100644 index 000000000..af7ad223e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 567 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 568 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 568 1539004990.dat new file mode 100644 index 000000000..b625a8083 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 568 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 569 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 569 1539004990.dat new file mode 100644 index 000000000..71006c579 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 569 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 570 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 570 1539004990.dat new file mode 100644 index 000000000..4a99225d3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 570 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 571 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 571 1539004990.dat new file mode 100644 index 000000000..00b3caeeb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 571 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 572 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 572 1539004990.dat new file mode 100644 index 000000000..902cf6095 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 572 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 573 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 573 1539004990.dat new file mode 100644 index 000000000..40dda3a29 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 573 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 574 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 574 1539004990.dat new file mode 100644 index 000000000..b7c84f77d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 574 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 575 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 575 1539004990.dat new file mode 100644 index 000000000..6dea43ce6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 575 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 576 1539004990.dat b/src/PauseMenu/quest_journal/bin/M 576 1539004990.dat new file mode 100644 index 000000000..da77c407d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 576 1539004990.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 577 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 577 1539004991.dat new file mode 100644 index 000000000..b542cbc38 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 577 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 578 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 578 1539004991.dat new file mode 100644 index 000000000..08d94d6c6 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 578 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 579 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 579 1539004991.dat new file mode 100644 index 000000000..12e0375b3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 579 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 580 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 580 1539004991.dat new file mode 100644 index 000000000..c64faeb22 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 580 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 581 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 581 1539004991.dat new file mode 100644 index 000000000..5456fccc3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 581 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 582 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 582 1539004991.dat new file mode 100644 index 000000000..3f3877ef3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 582 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 583 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 583 1539004991.dat new file mode 100644 index 000000000..198b9c66f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 583 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 584 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 584 1539004991.dat new file mode 100644 index 000000000..02fc40d82 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 584 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 585 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 585 1539004991.dat new file mode 100644 index 000000000..6eafd4221 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 585 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 586 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 586 1539004991.dat new file mode 100644 index 000000000..959d383bc Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 586 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 587 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 587 1539004991.dat new file mode 100644 index 000000000..c574c6380 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 587 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 588 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 588 1539004991.dat new file mode 100644 index 000000000..fb4213681 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 588 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 589 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 589 1539004991.dat new file mode 100644 index 000000000..36f55e073 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 589 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 590 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 590 1539004991.dat new file mode 100644 index 000000000..0185d92e3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 590 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 591 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 591 1539004991.dat new file mode 100644 index 000000000..8edc14c63 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 591 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 592 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 592 1539004991.dat new file mode 100644 index 000000000..1031a9c03 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 592 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 593 1539004991.dat b/src/PauseMenu/quest_journal/bin/M 593 1539004991.dat new file mode 100644 index 000000000..1e3644d0b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 593 1539004991.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 594 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 594 1539004992.dat new file mode 100644 index 000000000..53c1192ef Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 594 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 595 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 595 1539004992.dat new file mode 100644 index 000000000..6c0d91590 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 595 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 596 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 596 1539004992.dat new file mode 100644 index 000000000..e69f20331 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 596 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 597 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 597 1539004992.dat new file mode 100644 index 000000000..931f7bdb9 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 597 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 598 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 598 1539004992.dat new file mode 100644 index 000000000..ddfdefe83 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 598 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 599 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 599 1539004992.dat new file mode 100644 index 000000000..17e63665a Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 599 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 600 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 600 1539004992.dat new file mode 100644 index 000000000..d947138fb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 600 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 601 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 601 1539004992.dat new file mode 100644 index 000000000..7e580a8b8 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 601 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 602 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 602 1539004992.dat new file mode 100644 index 000000000..2a5a3c5bb Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 602 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 603 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 603 1539004992.dat new file mode 100644 index 000000000..c52a5fc29 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 603 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 604 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 604 1539004992.dat new file mode 100644 index 000000000..a8235b791 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 604 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 605 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 605 1539004992.dat new file mode 100644 index 000000000..ffc81e26c Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 605 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 606 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 606 1539004992.dat new file mode 100644 index 000000000..00a1c050b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 606 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 607 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 607 1539004992.dat new file mode 100644 index 000000000..b55c79cac Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 607 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 608 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 608 1539004992.dat new file mode 100644 index 000000000..ba32b4ad4 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 608 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 609 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 609 1539004992.dat new file mode 100644 index 000000000..d639b58c0 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 609 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 610 1539004992.dat b/src/PauseMenu/quest_journal/bin/M 610 1539004992.dat new file mode 100644 index 000000000..a2fd410b3 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 610 1539004992.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 611 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 611 1539004993.dat new file mode 100644 index 000000000..098eb1c93 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 611 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 612 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 612 1539004993.dat new file mode 100644 index 000000000..2e49b5f06 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 612 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 613 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 613 1539004993.dat new file mode 100644 index 000000000..8f61dfe20 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 613 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 614 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 614 1539004993.dat new file mode 100644 index 000000000..70ea2dac7 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 614 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 615 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 615 1539004993.dat new file mode 100644 index 000000000..53950649f Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 615 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 616 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 616 1539004993.dat new file mode 100644 index 000000000..827320d9e Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 616 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 617 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 617 1539004993.dat new file mode 100644 index 000000000..1002c8a6b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 617 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 618 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 618 1539004993.dat new file mode 100644 index 000000000..aebb310a9 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 618 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 619 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 619 1539004993.dat new file mode 100644 index 000000000..ecf178f76 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 619 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 620 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 620 1539004993.dat new file mode 100644 index 000000000..e27bc63e8 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 620 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 621 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 621 1539004993.dat new file mode 100644 index 000000000..4b45bed6b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 621 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 622 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 622 1539004993.dat new file mode 100644 index 000000000..cd1d6ee6d Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 622 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 623 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 623 1539004993.dat new file mode 100644 index 000000000..4dd8fed76 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 623 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/M 624 1539004993.dat b/src/PauseMenu/quest_journal/bin/M 624 1539004993.dat new file mode 100644 index 000000000..93325099b Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/M 624 1539004993.dat differ diff --git a/src/PauseMenu/quest_journal/bin/SymDepend.cache b/src/PauseMenu/quest_journal/bin/SymDepend.cache new file mode 100644 index 000000000..f14665036 Binary files /dev/null and b/src/PauseMenu/quest_journal/bin/SymDepend.cache differ diff --git a/src/PauseMenu/quest_journal/quest_journal.xfl b/src/PauseMenu/quest_journal/quest_journal.xfl new file mode 100644 index 000000000..860a820ec --- /dev/null +++ b/src/PauseMenu/quest_journal/quest_journal.xfl @@ -0,0 +1 @@ +PROXY-CS5 \ No newline at end of file diff --git a/src/Resources/buttonArt.fla b/src/Resources/buttonArt.fla deleted file mode 100644 index 3fd8f2315..000000000 Binary files a/src/Resources/buttonArt.fla and /dev/null differ diff --git a/src/Resources/buttonArt/DOMDocument.xml b/src/Resources/buttonArt/DOMDocument.xml new file mode 100644 index 000000000..a8a61d881 --- /dev/null +++ b/src/Resources/buttonArt/DOMDocument.xml @@ -0,0 +1,536 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArt.xml b/src/Resources/buttonArt/LIBRARY/ButtonArt.xml new file mode 100644 index 000000000..4fcb2490a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArt.xml @@ -0,0 +1,6530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundBig.xml b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundBig.xml new file mode 100644 index 000000000..cd4c7585c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundBig.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundLarge.xml b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundLarge.xml new file mode 100644 index 000000000..49fd9dd37 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundLarge.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundLeft.xml b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundLeft.xml new file mode 100644 index 000000000..1a570a734 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundLeft.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundMedium.xml b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundMedium.xml new file mode 100644 index 000000000..720842ee9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundMedium.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundRight.xml b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundRight.xml new file mode 100644 index 000000000..d00e28192 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundRight.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundRound.xml b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundRound.xml new file mode 100644 index 000000000..3b54b344f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundRound.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundSmall.xml b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundSmall.xml new file mode 100644 index 000000000..4ebfc4b46 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/ButtonArtBackgrounds/BackgroundSmall.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/Back.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/Back.xml new file mode 100644 index 000000000..81575d410 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/Back.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/LB.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/LB.xml new file mode 100644 index 000000000..76f017066 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/LB.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/LS.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/LS.xml new file mode 100644 index 000000000..1be36818e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/LS.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/LSPress.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/LSPress.xml new file mode 100644 index 000000000..de60160d8 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/LSPress.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/LT.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/LT.xml new file mode 100644 index 000000000..25c469db0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/LT.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/RB.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/RB.xml new file mode 100644 index 000000000..63f00ff5c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/RB.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/RS.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/RS.xml new file mode 100644 index 000000000..fec509c51 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/RS.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/RSPress.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/RSPress.xml new file mode 100644 index 000000000..d087269be --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/RSPress.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/360/RT.xml b/src/Resources/buttonArt/LIBRARY/Controller/360/RT.xml new file mode 100644 index 000000000..a795bb25c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/360/RT.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/Circle.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Circle.xml new file mode 100644 index 000000000..049912752 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Circle.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/L1.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/L1.xml new file mode 100644 index 000000000..f353b79bf --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/L1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/L2.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/L2.xml new file mode 100644 index 000000000..3f5aac14d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/L2.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/L3.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/L3.xml new file mode 100644 index 000000000..2234c84e9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/L3.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/PS3X.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/PS3X.xml new file mode 100644 index 000000000..76e5bc7ba --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/PS3X.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/R1.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/R1.xml new file mode 100644 index 000000000..0aee93f28 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/R1.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/R2.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/R2.xml new file mode 100644 index 000000000..8d0de07fa --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/R2.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/R3.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/R3.xml new file mode 100644 index 000000000..d328377b0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/R3.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/Select.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Select.xml new file mode 100644 index 000000000..406879f3b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Select.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/Square.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Square.xml new file mode 100644 index 000000000..f43095924 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Square.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/PS3/Triangle.xml b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Triangle.xml new file mode 100644 index 000000000..9b56b78df --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/PS3/Triangle.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Controller/Start.xml b/src/Resources/buttonArt/LIBRARY/Controller/Start.xml new file mode 100644 index 000000000..d2abfbf88 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Controller/Start.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Alt.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Alt.xml new file mode 100644 index 000000000..41af88643 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Alt.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Backspace.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Backspace.xml new file mode 100644 index 000000000..1aaef0c07 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Backspace.xml @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/BackspaceWithArrow.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/BackspaceWithArrow.xml new file mode 100644 index 000000000..405071ec1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/BackspaceWithArrow.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Caps.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Caps.xml new file mode 100644 index 000000000..c61effcd9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Caps.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Ctrl.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Ctrl.xml new file mode 100644 index 000000000..c3daaf065 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Ctrl.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Del.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Del.xml new file mode 100644 index 000000000..6a32edc01 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Del.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/End.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/End.xml new file mode 100644 index 000000000..7007e28b6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/End.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Enter.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Enter.xml new file mode 100644 index 000000000..00c7f62ce --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Enter.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/EnterWithArrow.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/EnterWithArrow.xml new file mode 100644 index 000000000..60c82112f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/EnterWithArrow.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Esc.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Esc.xml new file mode 100644 index 000000000..dd91ce789 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Esc.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F1.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F1.xml new file mode 100644 index 000000000..4abedb87a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F1.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F10.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F10.xml new file mode 100644 index 000000000..5ad5153ea --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F10.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F11.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F11.xml new file mode 100644 index 000000000..a5cd19fad --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F11.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F12.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F12.xml new file mode 100644 index 000000000..274791428 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F12.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F2.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F2.xml new file mode 100644 index 000000000..8e83fdd3d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F2.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F3.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F3.xml new file mode 100644 index 000000000..bdb864432 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F3.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F4.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F4.xml new file mode 100644 index 000000000..0e4a43f2e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F4.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F5.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F5.xml new file mode 100644 index 000000000..e7cc7a480 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F5.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F6.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F6.xml new file mode 100644 index 000000000..e8d68797f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F6.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F7.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F7.xml new file mode 100644 index 000000000..ff59340a1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F7.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F8.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F8.xml new file mode 100644 index 000000000..c3f1316fc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F8.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/F9.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F9.xml new file mode 100644 index 000000000..50967812a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/F9.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Home.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Home.xml new file mode 100644 index 000000000..e2b43e991 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Home.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Ins.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Ins.xml new file mode 100644 index 000000000..e92d02eb0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Ins.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/LAlt.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/LAlt.xml new file mode 100644 index 000000000..223124090 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/LAlt.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/LCtrl.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/LCtrl.xml new file mode 100644 index 000000000..1f7f5c857 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/LCtrl.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/NumLck.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/NumLck.xml new file mode 100644 index 000000000..a7ecbe3d9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/NumLck.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Pause.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Pause.xml new file mode 100644 index 000000000..b07977da9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Pause.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/PgDn.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/PgDn.xml new file mode 100644 index 000000000..1d48ca806 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/PgDn.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/PgUp.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/PgUp.xml new file mode 100644 index 000000000..53dbbd1d6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/PgUp.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/PrtSc.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/PrtSc.xml new file mode 100644 index 000000000..37f2ad1a9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/PrtSc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/RAlt.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/RAlt.xml new file mode 100644 index 000000000..e0f3209a9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/RAlt.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/RCtrl.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/RCtrl.xml new file mode 100644 index 000000000..6557705c0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/RCtrl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/ScrLck.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/ScrLck.xml new file mode 100644 index 000000000..11e760b6c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/ScrLck.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Shift.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Shift.xml new file mode 100644 index 000000000..37b19f0a3 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Shift.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/ShiftWithArrow.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/ShiftWithArrow.xml new file mode 100644 index 000000000..01d5c9ba4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/ShiftWithArrow.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Space.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Space.xml new file mode 100644 index 000000000..786c19fe4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Space.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/FunctionKeys/Tab.xml b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Tab.xml new file mode 100644 index 000000000..4fb534aeb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/FunctionKeys/Tab.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/A.xml b/src/Resources/buttonArt/LIBRARY/Letters/A.xml new file mode 100644 index 000000000..28ea5ac96 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/A.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/B.xml b/src/Resources/buttonArt/LIBRARY/Letters/B.xml new file mode 100644 index 000000000..51b53ca05 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/B.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/C.xml b/src/Resources/buttonArt/LIBRARY/Letters/C.xml new file mode 100644 index 000000000..983c5bad6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/C.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/D.xml b/src/Resources/buttonArt/LIBRARY/Letters/D.xml new file mode 100644 index 000000000..2cc74b2fb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/D.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/E.xml b/src/Resources/buttonArt/LIBRARY/Letters/E.xml new file mode 100644 index 000000000..bb3b70458 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/E.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/F.xml b/src/Resources/buttonArt/LIBRARY/Letters/F.xml new file mode 100644 index 000000000..1662b5b15 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/F.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/G.xml b/src/Resources/buttonArt/LIBRARY/Letters/G.xml new file mode 100644 index 000000000..39cfe66ad --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/G.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/H.xml b/src/Resources/buttonArt/LIBRARY/Letters/H.xml new file mode 100644 index 000000000..a38d05047 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/H.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/I.xml b/src/Resources/buttonArt/LIBRARY/Letters/I.xml new file mode 100644 index 000000000..29ec022da --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/I.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/J.xml b/src/Resources/buttonArt/LIBRARY/Letters/J.xml new file mode 100644 index 000000000..556d104b9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/J.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/K.xml b/src/Resources/buttonArt/LIBRARY/Letters/K.xml new file mode 100644 index 000000000..f632a3d9d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/K.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/L.xml b/src/Resources/buttonArt/LIBRARY/Letters/L.xml new file mode 100644 index 000000000..d74b84782 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/L.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/M.xml b/src/Resources/buttonArt/LIBRARY/Letters/M.xml new file mode 100644 index 000000000..c35621bff --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/M.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/N.xml b/src/Resources/buttonArt/LIBRARY/Letters/N.xml new file mode 100644 index 000000000..bae444676 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/N.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/O.xml b/src/Resources/buttonArt/LIBRARY/Letters/O.xml new file mode 100644 index 000000000..1b77c2039 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/O.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/P.xml b/src/Resources/buttonArt/LIBRARY/Letters/P.xml new file mode 100644 index 000000000..187cff46d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/P.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/Q.xml b/src/Resources/buttonArt/LIBRARY/Letters/Q.xml new file mode 100644 index 000000000..7be777df0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/Q.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/R.xml b/src/Resources/buttonArt/LIBRARY/Letters/R.xml new file mode 100644 index 000000000..a6bec49aa --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/R.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/S.xml b/src/Resources/buttonArt/LIBRARY/Letters/S.xml new file mode 100644 index 000000000..0b720bb63 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/S.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/T.xml b/src/Resources/buttonArt/LIBRARY/Letters/T.xml new file mode 100644 index 000000000..f7d1d1dc0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/T.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/U.xml b/src/Resources/buttonArt/LIBRARY/Letters/U.xml new file mode 100644 index 000000000..874e1b882 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/U.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/V.xml b/src/Resources/buttonArt/LIBRARY/Letters/V.xml new file mode 100644 index 000000000..a715982d1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/V.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/W.xml b/src/Resources/buttonArt/LIBRARY/Letters/W.xml new file mode 100644 index 000000000..66e62669c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/W.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/X.xml b/src/Resources/buttonArt/LIBRARY/Letters/X.xml new file mode 100644 index 000000000..2ed8cbd93 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/X.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/Y.xml b/src/Resources/buttonArt/LIBRARY/Letters/Y.xml new file mode 100644 index 000000000..13606c40e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/Y.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Letters/Z.xml b/src/Resources/buttonArt/LIBRARY/Letters/Z.xml new file mode 100644 index 000000000..064ed5b8f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Letters/Z.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M1.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M1.xml new file mode 100644 index 000000000..3be847fa9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M1.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M2.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M2.xml new file mode 100644 index 000000000..319b9c2d4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M2.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M3.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M3.xml new file mode 100644 index 000000000..700336d5b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M3.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M4.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M4.xml new file mode 100644 index 000000000..6267043d5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M4.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M5.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M5.xml new file mode 100644 index 000000000..d0c4fc533 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M5.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M6.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M6.xml new file mode 100644 index 000000000..51ef88375 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M6.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M7.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M7.xml new file mode 100644 index 000000000..0bce8648e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M7.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M8.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M8.xml new file mode 100644 index 000000000..36be02512 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseButtons/M8.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseMove.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseMove.xml new file mode 100644 index 000000000..d6a458f54 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseMove.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheel.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheel.xml new file mode 100644 index 000000000..d88c1f623 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheel.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheelDown.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheelDown.xml new file mode 100644 index 000000000..bdcb624f6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheelDown.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheelUp.xml b/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheelUp.xml new file mode 100644 index 000000000..2297eead1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Mouse/MouseWheel/MouseWheelUp.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Double_Up.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Double_Up.xml new file mode 100644 index 000000000..0b4202780 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Double_Up.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Up.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Up.xml new file mode 100644 index 000000000..52e7088f7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Up.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Up_Arrow.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Up_Arrow.xml new file mode 100644 index 000000000..f67ab81c2 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Action_Up_Arrow.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON BASE CIRCLE.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON BASE CIRCLE.xml new file mode 100644 index 000000000..6ab1272e6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON BASE CIRCLE.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON BASE SQUARE.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON BASE SQUARE.xml new file mode 100644 index 000000000..c217efb60 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON BASE SQUARE.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 1.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 1.xml new file mode 100644 index 000000000..8e53d1354 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 1.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 2.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 2.xml new file mode 100644 index 000000000..6fed694ce --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 2.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 3.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 3.xml new file mode 100644 index 000000000..3dc2abf09 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 3.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 4.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 4.xml new file mode 100644 index 000000000..6ab9efe19 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC BUTTON MOD BASE 4.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC CONTROLLER MC.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC CONTROLLER MC.xml new file mode 100644 index 000000000..f4d3054b2 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC CONTROLLER MC.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC CONTROLLER.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC CONTROLLER.xml new file mode 100644 index 000000000..0eded4f0c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC CONTROLLER.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC MOTION.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC MOTION.xml new file mode 100644 index 000000000..c0a4323cc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC MOTION.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUM REST RIGHT BASE.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUM REST RIGHT BASE.xml new file mode 100644 index 000000000..2ce06c0da --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUM REST RIGHT BASE.xml @@ -0,0 +1,1235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB REST BASE.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB REST BASE.xml new file mode 100644 index 000000000..3b9a71169 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB REST BASE.xml @@ -0,0 +1,1196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB REST LEFT BASE.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB REST LEFT BASE.xml new file mode 100644 index 000000000..2fe4df177 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB REST LEFT BASE.xml @@ -0,0 +1,1232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST.xml new file mode 100644 index 000000000..543c9136b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST_LEFT.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST_LEFT.xml new file mode 100644 index 000000000..22b6b769b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST_LEFT.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST_RIGHT.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST_RIGHT.xml new file mode 100644 index 000000000..a8f46d393 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC THUMB_REST_RIGHT.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_A.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_A.xml new file mode 100644 index 000000000..9f08f72a3 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_A.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + A + + + + + + + + + + + + + + + + + + + + + A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_A_HOLD.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_A_HOLD.xml new file mode 100644 index 000000000..6b9204e6c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_A_HOLD.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_B.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_B.xml new file mode 100644 index 000000000..fecc5c292 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_B.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + B + + + + + + + + + + + + + + + + + + + + + B + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_B_HOLD.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_B_HOLD.xml new file mode 100644 index 000000000..9633c0169 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_B_HOLD.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_X.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_X.xml new file mode 100644 index 000000000..e0d1b485e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_X.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + X + + + + + + + + + + + + + + + + + + + + + X + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_X_HOLD.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_X_HOLD.xml new file mode 100644 index 000000000..0cad53017 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_X_HOLD.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_Y.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_Y.xml new file mode 100644 index 000000000..584865aac --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_Y.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + Y + + + + + + + + + + + + + + + + + + + + + Y + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_Y_HOLD.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_Y_HOLD.xml new file mode 100644 index 000000000..b2644e818 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/OCC_Y_HOLD.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 163.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 163.xml new file mode 100644 index 000000000..e4db63f97 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 163.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 164.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 164.xml new file mode 100644 index 000000000..75ca06ced --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 164.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 170.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 170.xml new file mode 100644 index 000000000..690789f0f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 170.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 171.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 171.xml new file mode 100644 index 000000000..d65509685 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 171.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 258.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 258.xml new file mode 100644 index 000000000..affc69c6d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 258.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 259.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 259.xml new file mode 100644 index 000000000..55df64837 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 259.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 260.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 260.xml new file mode 100644 index 000000000..1fd812700 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 260.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 261.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 261.xml new file mode 100644 index 000000000..ab139a96b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 261.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 262.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 262.xml new file mode 100644 index 000000000..1d63796d8 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 262.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 264.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 264.xml new file mode 100644 index 000000000..c2eb930da --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 264.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 266.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 266.xml new file mode 100644 index 000000000..b6db7b5a2 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 266.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 267.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 267.xml new file mode 100644 index 000000000..43ed8dc8a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 267.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 268.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 268.xml new file mode 100644 index 000000000..751ddaf95 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 268.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 270.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 270.xml new file mode 100644 index 000000000..e937b68e5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 270.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 271.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 271.xml new file mode 100644 index 000000000..77b0119c9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 271.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 272.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 272.xml new file mode 100644 index 000000000..0e8485674 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 272.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 273.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 273.xml new file mode 100644 index 000000000..c0c94ed1a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 273.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 274.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 274.xml new file mode 100644 index 000000000..0849054c1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 274.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 275.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 275.xml new file mode 100644 index 000000000..e09b6473f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 275.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 276.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 276.xml new file mode 100644 index 000000000..d08920e1e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 276.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 277.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 277.xml new file mode 100644 index 000000000..b55b5c6b9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 277.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 278.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 278.xml new file mode 100644 index 000000000..68acc46bc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 278.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 279.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 279.xml new file mode 100644 index 000000000..b20755e7b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 279.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 280.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 280.xml new file mode 100644 index 000000000..3800c4772 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 280.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 281.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 281.xml new file mode 100644 index 000000000..319fac348 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 281.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 282.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 282.xml new file mode 100644 index 000000000..3b722b519 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 282.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 284.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 284.xml new file mode 100644 index 000000000..64a1c9260 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 284.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 285.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 285.xml new file mode 100644 index 000000000..966a64465 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 285.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 286.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 286.xml new file mode 100644 index 000000000..d59a8eeea --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 286.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 287.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 287.xml new file mode 100644 index 000000000..4e6667020 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 287.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 288.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 288.xml new file mode 100644 index 000000000..d208edd1b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 288.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 289.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 289.xml new file mode 100644 index 000000000..75b1bc455 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 289.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 290.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 290.xml new file mode 100644 index 000000000..706b0fa3c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 290.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 291.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 291.xml new file mode 100644 index 000000000..cd138a6ee --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 291.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 292.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 292.xml new file mode 100644 index 000000000..732c77ccd --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 292.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 293.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 293.xml new file mode 100644 index 000000000..ac3fb2b82 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 293.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 294.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 294.xml new file mode 100644 index 000000000..e6f508c44 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 294.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 295.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 295.xml new file mode 100644 index 000000000..061048300 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 295.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 296.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 296.xml new file mode 100644 index 000000000..c2ce56241 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 296.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 297.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 297.xml new file mode 100644 index 000000000..03b6455f5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 297.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 298.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 298.xml new file mode 100644 index 000000000..c06b4795e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 298.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 299.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 299.xml new file mode 100644 index 000000000..6b68c0164 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 299.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 302.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 302.xml new file mode 100644 index 000000000..c9c65c54d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 302.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 304.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 304.xml new file mode 100644 index 000000000..6824049c1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 304.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 305.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 305.xml new file mode 100644 index 000000000..9a4f9245f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 305.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 306.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 306.xml new file mode 100644 index 000000000..8c86c42f7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 306.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 307.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 307.xml new file mode 100644 index 000000000..d5e1378be --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 307.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 308.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 308.xml new file mode 100644 index 000000000..7844e51b5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 308.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 309.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 309.xml new file mode 100644 index 000000000..a1fddafee --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 309.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 310.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 310.xml new file mode 100644 index 000000000..77ed9ad5c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 310.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 311.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 311.xml new file mode 100644 index 000000000..e23cb35e6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 311.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 312.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 312.xml new file mode 100644 index 000000000..f0c584b58 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 312.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 313.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 313.xml new file mode 100644 index 000000000..379c243e1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 313.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 314.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 314.xml new file mode 100644 index 000000000..7174f0f92 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 314.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 315.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 315.xml new file mode 100644 index 000000000..a720835eb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 315.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 316.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 316.xml new file mode 100644 index 000000000..6f2f0d8f6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 316.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 318.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 318.xml new file mode 100644 index 000000000..e2479a245 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 318.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 319.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 319.xml new file mode 100644 index 000000000..31d3bad95 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 319.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 320.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 320.xml new file mode 100644 index 000000000..b7df6430c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 320.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 321.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 321.xml new file mode 100644 index 000000000..1e8a7a9f2 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 321.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 322.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 322.xml new file mode 100644 index 000000000..f39bae8ab --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 322.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 323.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 323.xml new file mode 100644 index 000000000..0c73b33d0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 323.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 324.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 324.xml new file mode 100644 index 000000000..62f908ff9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 324.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 325.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 325.xml new file mode 100644 index 000000000..513166318 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 325.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 326.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 326.xml new file mode 100644 index 000000000..f2202ac64 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 326.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 327.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 327.xml new file mode 100644 index 000000000..d1ef8cbf4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 327.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 328.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 328.xml new file mode 100644 index 000000000..500d5b8eb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 328.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 329.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 329.xml new file mode 100644 index 000000000..f285777bf --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 329.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 330.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 330.xml new file mode 100644 index 000000000..cccc96e6d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 330.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 331.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 331.xml new file mode 100644 index 000000000..9949306a4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 331.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 332.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 332.xml new file mode 100644 index 000000000..a995fb7c9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 332.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 333.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 333.xml new file mode 100644 index 000000000..148a3873f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 333.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 334.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 334.xml new file mode 100644 index 000000000..e8091022a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 334.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 335.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 335.xml new file mode 100644 index 000000000..6dffbdb14 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 335.xml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 336.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 336.xml new file mode 100644 index 000000000..cdd377096 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 336.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 337.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 337.xml new file mode 100644 index 000000000..bc0ac2b6c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 337.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 338.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 338.xml new file mode 100644 index 000000000..4b0f19ecc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 338.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 339.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 339.xml new file mode 100644 index 000000000..73e1efc52 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 339.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 340.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 340.xml new file mode 100644 index 000000000..e993f2929 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 340.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 341.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 341.xml new file mode 100644 index 000000000..0ff1b841b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 341.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 342.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 342.xml new file mode 100644 index 000000000..ecb6d4964 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 342.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 343.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 343.xml new file mode 100644 index 000000000..415956908 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 343.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 344.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 344.xml new file mode 100644 index 000000000..825a2cb69 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 344.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 345.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 345.xml new file mode 100644 index 000000000..a47608cf5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 345.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 346.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 346.xml new file mode 100644 index 000000000..9c14c9d1b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 346.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 347.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 347.xml new file mode 100644 index 000000000..7e9b49d08 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 347.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 348.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 348.xml new file mode 100644 index 000000000..c7c0cfd3a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 348.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 349.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 349.xml new file mode 100644 index 000000000..319fe4d00 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 349.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 350.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 350.xml new file mode 100644 index 000000000..71e97ccad --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 350.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 351.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 351.xml new file mode 100644 index 000000000..8514e8091 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 351.xml @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 352.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 352.xml new file mode 100644 index 000000000..2ee57eecd --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 352.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 353.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 353.xml new file mode 100644 index 000000000..615162786 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 353.xml @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 354.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 354.xml new file mode 100644 index 000000000..6af2604ca --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 354.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 355.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 355.xml new file mode 100644 index 000000000..61f9f6e85 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 355.xml @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 356.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 356.xml new file mode 100644 index 000000000..725188223 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 356.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 357.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 357.xml new file mode 100644 index 000000000..a7ba9d0bc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 357.xml @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 358.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 358.xml new file mode 100644 index 000000000..90ad21459 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 358.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 359.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 359.xml new file mode 100644 index 000000000..fee2614cc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 359.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 36.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 36.xml new file mode 100644 index 000000000..09e5dcd9e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 36.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 360.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 360.xml new file mode 100644 index 000000000..f01fccbeb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 360.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 361.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 361.xml new file mode 100644 index 000000000..a8a515758 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 361.xml @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 362.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 362.xml new file mode 100644 index 000000000..3ecc26dc0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 362.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 363.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 363.xml new file mode 100644 index 000000000..39b7e630f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 363.xml @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 364.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 364.xml new file mode 100644 index 000000000..886702e6c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 364.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 365.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 365.xml new file mode 100644 index 000000000..1b0016d8c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 365.xml @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 366.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 366.xml new file mode 100644 index 000000000..6d34e426f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 366.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 367.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 367.xml new file mode 100644 index 000000000..75311308f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 367.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 368.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 368.xml new file mode 100644 index 000000000..0c55de509 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 368.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 369.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 369.xml new file mode 100644 index 000000000..34e685a9a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 369.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 370.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 370.xml new file mode 100644 index 000000000..287a9d2e7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 370.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 371.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 371.xml new file mode 100644 index 000000000..c148fc006 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 371.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 372.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 372.xml new file mode 100644 index 000000000..904abbfe4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 372.xml @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 373.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 373.xml new file mode 100644 index 000000000..c2699875b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 373.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 374.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 374.xml new file mode 100644 index 000000000..9ecb38d84 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 374.xml @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 375.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 375.xml new file mode 100644 index 000000000..4910afb97 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 375.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 376.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 376.xml new file mode 100644 index 000000000..88add82b9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 376.xml @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 377.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 377.xml new file mode 100644 index 000000000..23b916a2e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 377.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 378.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 378.xml new file mode 100644 index 000000000..bad20aba0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 378.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 379.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 379.xml new file mode 100644 index 000000000..dfcaf1a8a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 379.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 380.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 380.xml new file mode 100644 index 000000000..a42f1c2b5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 380.xml @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 381.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 381.xml new file mode 100644 index 000000000..0c85c27a3 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 381.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 382.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 382.xml new file mode 100644 index 000000000..0759e1dd0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 382.xml @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 383.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 383.xml new file mode 100644 index 000000000..4161fba66 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 383.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 384.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 384.xml new file mode 100644 index 000000000..f01f9e829 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 384.xml @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 385.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 385.xml new file mode 100644 index 000000000..fbc56c920 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 385.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 386.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 386.xml new file mode 100644 index 000000000..a6db2fe1a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 386.xml @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 387.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 387.xml new file mode 100644 index 000000000..1599a7344 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 387.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 388.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 388.xml new file mode 100644 index 000000000..cc3ac8395 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 388.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 389.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 389.xml new file mode 100644 index 000000000..d7bff3ee8 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 389.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 390.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 390.xml new file mode 100644 index 000000000..7fe190fb6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 390.xml @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 391.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 391.xml new file mode 100644 index 000000000..7aabbf3a0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 391.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 392.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 392.xml new file mode 100644 index 000000000..dbe7be597 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 392.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 393.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 393.xml new file mode 100644 index 000000000..4ac8b6d40 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 393.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 394.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 394.xml new file mode 100644 index 000000000..56acbcb10 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 394.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 395.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 395.xml new file mode 100644 index 000000000..0d9c9323f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 395.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 396.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 396.xml new file mode 100644 index 000000000..1711448e7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 396.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 397.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 397.xml new file mode 100644 index 000000000..a93e9bb44 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 397.xml @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 398.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 398.xml new file mode 100644 index 000000000..64b348b2b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 398.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 399.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 399.xml new file mode 100644 index 000000000..9d5448ad9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 399.xml @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 400.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 400.xml new file mode 100644 index 000000000..b859d7ddb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 400.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 401.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 401.xml new file mode 100644 index 000000000..ad3f9c6ef --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 401.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 402.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 402.xml new file mode 100644 index 000000000..51bbbc6f2 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 402.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 403.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 403.xml new file mode 100644 index 000000000..b6fc57b77 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 403.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 404.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 404.xml new file mode 100644 index 000000000..1fa54cfb5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 404.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 406.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 406.xml new file mode 100644 index 000000000..a628c2086 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 406.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 407.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 407.xml new file mode 100644 index 000000000..8d39100e7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 407.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 409.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 409.xml new file mode 100644 index 000000000..cdf8bbd57 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 409.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 412.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 412.xml new file mode 100644 index 000000000..05f63558a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 412.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 413.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 413.xml new file mode 100644 index 000000000..9a92acb14 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 413.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 414.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 414.xml new file mode 100644 index 000000000..9ae50ed65 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 414.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 415.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 415.xml new file mode 100644 index 000000000..affc43bba --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 415.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 417.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 417.xml new file mode 100644 index 000000000..5009e2506 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 417.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + Grip + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 420.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 420.xml new file mode 100644 index 000000000..a070ea521 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 420.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 421.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 421.xml new file mode 100644 index 000000000..9979763d0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 421.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 422.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 422.xml new file mode 100644 index 000000000..09a0c734b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 422.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 423.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 423.xml new file mode 100644 index 000000000..0c7d612e4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 423.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + Grab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 424.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 424.xml new file mode 100644 index 000000000..67b889387 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 424.xml @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 425.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 425.xml new file mode 100644 index 000000000..5aa798758 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 425.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 426.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 426.xml new file mode 100644 index 000000000..19cac4d5b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 426.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 427.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 427.xml new file mode 100644 index 000000000..af431c004 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 427.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 428.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 428.xml new file mode 100644 index 000000000..d1e524cb0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 428.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 429.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 429.xml new file mode 100644 index 000000000..2f672fa8d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 429.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 430.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 430.xml new file mode 100644 index 000000000..50f8214e8 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 430.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 431.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 431.xml new file mode 100644 index 000000000..6293b2f40 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 431.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 432.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 432.xml new file mode 100644 index 000000000..fb5f2b7ff --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 432.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 433.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 433.xml new file mode 100644 index 000000000..88bb64086 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 433.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 434.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 434.xml new file mode 100644 index 000000000..4f4e9a3fe --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 434.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 435.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 435.xml new file mode 100644 index 000000000..06a637c5e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 435.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 436.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 436.xml new file mode 100644 index 000000000..8d1e68ced --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 436.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 437.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 437.xml new file mode 100644 index 000000000..90f02f44f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 437.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 438.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 438.xml new file mode 100644 index 000000000..41b05bb7a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 438.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 439.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 439.xml new file mode 100644 index 000000000..637508228 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 439.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 440.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 440.xml new file mode 100644 index 000000000..b75c5186a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 440.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 441.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 441.xml new file mode 100644 index 000000000..57d52f64d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 441.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 442.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 442.xml new file mode 100644 index 000000000..f4d942195 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 442.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 443.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 443.xml new file mode 100644 index 000000000..ade157386 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 443.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 445.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 445.xml new file mode 100644 index 000000000..a5da3f230 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 445.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 446.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 446.xml new file mode 100644 index 000000000..1153603ee --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 446.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 447.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 447.xml new file mode 100644 index 000000000..216b9fc87 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 447.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 448.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 448.xml new file mode 100644 index 000000000..dce9eab8f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 448.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 449.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 449.xml new file mode 100644 index 000000000..fb05a18d9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 449.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 451.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 451.xml new file mode 100644 index 000000000..8274a053a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 451.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 452.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 452.xml new file mode 100644 index 000000000..fccc36507 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 452.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 453.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 453.xml new file mode 100644 index 000000000..cee95a726 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 453.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 454.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 454.xml new file mode 100644 index 000000000..0807adf28 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 454.xml @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 455.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 455.xml new file mode 100644 index 000000000..20f7ad81b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 455.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 457.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 457.xml new file mode 100644 index 000000000..aa3291ced --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 457.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 458.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 458.xml new file mode 100644 index 000000000..2596e1027 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 458.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 459.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 459.xml new file mode 100644 index 000000000..d6dd90b4d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 459.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 460.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 460.xml new file mode 100644 index 000000000..bc49b3720 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 460.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 462.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 462.xml new file mode 100644 index 000000000..2c626ca27 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 462.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 465.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 465.xml new file mode 100644 index 000000000..6d7571cc4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 465.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 466.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 466.xml new file mode 100644 index 000000000..317a804ab --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 466.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 467.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 467.xml new file mode 100644 index 000000000..7137f2198 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 467.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 468.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 468.xml new file mode 100644 index 000000000..8a418d552 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 468.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 469.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 469.xml new file mode 100644 index 000000000..857328b5f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 469.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 470.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 470.xml new file mode 100644 index 000000000..34d2ced99 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 470.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 471.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 471.xml new file mode 100644 index 000000000..22e6efc26 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 471.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 472.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 472.xml new file mode 100644 index 000000000..3334807cc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 472.xml @@ -0,0 +1,477 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 473.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 473.xml new file mode 100644 index 000000000..e90d348b3 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 473.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 474.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 474.xml new file mode 100644 index 000000000..726ab1a2b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 474.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 475.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 475.xml new file mode 100644 index 000000000..647339579 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 475.xml @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 476.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 476.xml new file mode 100644 index 000000000..e87e317d3 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 476.xml @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 477.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 477.xml new file mode 100644 index 000000000..518637d90 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 477.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 478.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 478.xml new file mode 100644 index 000000000..8ffa5b25e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 478.xml @@ -0,0 +1,476 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 479.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 479.xml new file mode 100644 index 000000000..98d14d339 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 479.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 480.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 480.xml new file mode 100644 index 000000000..b8a978854 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 480.xml @@ -0,0 +1,283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 481.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 481.xml new file mode 100644 index 000000000..5d0fe9fc1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 481.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 482.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 482.xml new file mode 100644 index 000000000..76b8939b7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 482.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 483.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 483.xml new file mode 100644 index 000000000..513132e58 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 483.xml @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 484.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 484.xml new file mode 100644 index 000000000..5a2fb9432 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 484.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 485.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 485.xml new file mode 100644 index 000000000..4ef60377f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 485.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 486.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 486.xml new file mode 100644 index 000000000..34bc4e641 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 486.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 487.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 487.xml new file mode 100644 index 000000000..97d72cf50 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 487.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 488.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 488.xml new file mode 100644 index 000000000..66a0da32b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 488.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 489.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 489.xml new file mode 100644 index 000000000..d7eca5bee --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 489.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 490.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 490.xml new file mode 100644 index 000000000..f5045fcf9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 490.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 491.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 491.xml new file mode 100644 index 000000000..3d581733c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 491.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 492.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 492.xml new file mode 100644 index 000000000..31756c9fe --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 492.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 493.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 493.xml new file mode 100644 index 000000000..979aa3fd6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 493.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 494.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 494.xml new file mode 100644 index 000000000..3cf8ce35c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 494.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 495.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 495.xml new file mode 100644 index 000000000..3cebfd56f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 495.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 496.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 496.xml new file mode 100644 index 000000000..2b943970c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 496.xml @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 497.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 497.xml new file mode 100644 index 000000000..becaffeae --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 497.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 498.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 498.xml new file mode 100644 index 000000000..3dafeab62 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 498.xml @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 499.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 499.xml new file mode 100644 index 000000000..0adbc3509 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 499.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 500.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 500.xml new file mode 100644 index 000000000..c736e40cb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 500.xml @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 501.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 501.xml new file mode 100644 index 000000000..ad408ded4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 501.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 502.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 502.xml new file mode 100644 index 000000000..5e0144b22 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 502.xml @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 503.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 503.xml new file mode 100644 index 000000000..79312338e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 503.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 504.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 504.xml new file mode 100644 index 000000000..4b6e72601 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 504.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 505.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 505.xml new file mode 100644 index 000000000..e960da70a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 505.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 506.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 506.xml new file mode 100644 index 000000000..09f1b1451 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 506.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 507.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 507.xml new file mode 100644 index 000000000..562945d1a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 507.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 508.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 508.xml new file mode 100644 index 000000000..5ef5d2115 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 508.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 509.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 509.xml new file mode 100644 index 000000000..0fb1468ee --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 509.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 510.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 510.xml new file mode 100644 index 000000000..0fdca9884 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 510.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 511.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 511.xml new file mode 100644 index 000000000..9b3808cc5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 511.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 512.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 512.xml new file mode 100644 index 000000000..82031dcdb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 512.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 513.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 513.xml new file mode 100644 index 000000000..bc482ceb5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 513.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 514.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 514.xml new file mode 100644 index 000000000..3481d0c30 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 514.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 515.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 515.xml new file mode 100644 index 000000000..5c509b276 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 515.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 516.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 516.xml new file mode 100644 index 000000000..0cde7de1f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 516.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 517.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 517.xml new file mode 100644 index 000000000..e92de8246 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 517.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 518.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 518.xml new file mode 100644 index 000000000..e30b89172 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 518.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 519.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 519.xml new file mode 100644 index 000000000..de66e8c8b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 519.xml @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 520.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 520.xml new file mode 100644 index 000000000..c54f2060e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 520.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 521.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 521.xml new file mode 100644 index 000000000..0c0bfe5d6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 521.xml @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 522.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 522.xml new file mode 100644 index 000000000..6025f57b4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 522.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 523.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 523.xml new file mode 100644 index 000000000..f591aa338 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 523.xml @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 524.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 524.xml new file mode 100644 index 000000000..28ff2c805 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 524.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 525.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 525.xml new file mode 100644 index 000000000..f9e5c8379 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 525.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 526.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 526.xml new file mode 100644 index 000000000..d3aae92c7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 526.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 527.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 527.xml new file mode 100644 index 000000000..cf6ed0d09 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 527.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 528.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 528.xml new file mode 100644 index 000000000..38d539214 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 528.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 529.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 529.xml new file mode 100644 index 000000000..72f18bf3e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 529.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 530.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 530.xml new file mode 100644 index 000000000..64e9d12ec --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 530.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 531.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 531.xml new file mode 100644 index 000000000..57d51e3d2 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 531.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 532.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 532.xml new file mode 100644 index 000000000..348b4ad7c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 532.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 533.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 533.xml new file mode 100644 index 000000000..23c6509cd --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 533.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 534.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 534.xml new file mode 100644 index 000000000..b9d9ae2e0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 534.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 535.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 535.xml new file mode 100644 index 000000000..eb1c84f16 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 535.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 536.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 536.xml new file mode 100644 index 000000000..9935ecba4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 536.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 537.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 537.xml new file mode 100644 index 000000000..2a6240229 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 537.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 538.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 538.xml new file mode 100644 index 000000000..25d260ae9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 538.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 539.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 539.xml new file mode 100644 index 000000000..a927d96f1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 539.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 540.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 540.xml new file mode 100644 index 000000000..875cb8301 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 540.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 541.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 541.xml new file mode 100644 index 000000000..7ce992ddd --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 541.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 543.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 543.xml new file mode 100644 index 000000000..cf4dccbf0 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 543.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 544.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 544.xml new file mode 100644 index 000000000..71142fecc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 544.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 545.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 545.xml new file mode 100644 index 000000000..30814d2ef --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 545.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 546.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 546.xml new file mode 100644 index 000000000..bac985a46 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 546.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 547.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 547.xml new file mode 100644 index 000000000..177f9cd6b --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 547.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 548.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 548.xml new file mode 100644 index 000000000..2031bb0ef --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 548.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 549.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 549.xml new file mode 100644 index 000000000..5215b8984 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 549.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 550.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 550.xml new file mode 100644 index 000000000..e3e26a0d9 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 550.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 551.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 551.xml new file mode 100644 index 000000000..919c46cb3 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 551.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 552.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 552.xml new file mode 100644 index 000000000..41f55cfb1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 552.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 553.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 553.xml new file mode 100644 index 000000000..5c8cf3025 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 553.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 555.xml b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 555.xml new file mode 100644 index 000000000..e5177f2d5 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Named Icons/Symbol 555.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP0.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP0.xml new file mode 100644 index 000000000..213a487bf --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP0.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP1.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP1.xml new file mode 100644 index 000000000..c10d63953 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP1.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP2.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP2.xml new file mode 100644 index 000000000..66a7aa788 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP2.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP3.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP3.xml new file mode 100644 index 000000000..8d870f7a2 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP3.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP4.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP4.xml new file mode 100644 index 000000000..f9b966dcd --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP4.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP5.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP5.xml new file mode 100644 index 000000000..83e8c07b1 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP5.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP6.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP6.xml new file mode 100644 index 000000000..9e9b20c3c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP6.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP7.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP7.xml new file mode 100644 index 000000000..b9100a070 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP7.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP8.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP8.xml new file mode 100644 index 000000000..b42bdd2bd --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP8.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NP9.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NP9.xml new file mode 100644 index 000000000..eb5c3cbc4 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NP9.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NPAsterisk.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NPAsterisk.xml new file mode 100644 index 000000000..9e2fb2f80 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NPAsterisk.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NPEnter.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NPEnter.xml new file mode 100644 index 000000000..b9a3e4342 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NPEnter.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NPForwardSlash.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NPForwardSlash.xml new file mode 100644 index 000000000..06b05a837 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NPForwardSlash.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NPMinus.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NPMinus.xml new file mode 100644 index 000000000..393ccdc41 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NPMinus.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NPPeriod.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NPPeriod.xml new file mode 100644 index 000000000..172022001 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NPPeriod.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/NumberPad/NPPlus.xml b/src/Resources/buttonArt/LIBRARY/NumberPad/NPPlus.xml new file mode 100644 index 000000000..5b42be202 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/NumberPad/NPPlus.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/0.xml b/src/Resources/buttonArt/LIBRARY/Numbers/0.xml new file mode 100644 index 000000000..ef1b5f8c8 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/0.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/1.xml b/src/Resources/buttonArt/LIBRARY/Numbers/1.xml new file mode 100644 index 000000000..03f643bec --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/2.xml b/src/Resources/buttonArt/LIBRARY/Numbers/2.xml new file mode 100644 index 000000000..584f7767f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/2.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/3.xml b/src/Resources/buttonArt/LIBRARY/Numbers/3.xml new file mode 100644 index 000000000..c8c490dcf --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/3.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/4.xml b/src/Resources/buttonArt/LIBRARY/Numbers/4.xml new file mode 100644 index 000000000..837735a73 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/4.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/5.xml b/src/Resources/buttonArt/LIBRARY/Numbers/5.xml new file mode 100644 index 000000000..30652968a --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/5.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/6.xml b/src/Resources/buttonArt/LIBRARY/Numbers/6.xml new file mode 100644 index 000000000..3a6173457 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/6.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/7.xml b/src/Resources/buttonArt/LIBRARY/Numbers/7.xml new file mode 100644 index 000000000..0407f7dbb --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/7.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/8.xml b/src/Resources/buttonArt/LIBRARY/Numbers/8.xml new file mode 100644 index 000000000..2140db5e6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/8.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Numbers/9.xml b/src/Resources/buttonArt/LIBRARY/Numbers/9.xml new file mode 100644 index 000000000..aaca1e62d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Numbers/9.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Amersand.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Amersand.xml new file mode 100644 index 000000000..9c1b0d487 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Amersand.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Arrow.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Arrow.xml new file mode 100644 index 000000000..46df363cc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Arrow.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Asterisk.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Asterisk.xml new file mode 100644 index 000000000..1c594a267 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Asterisk.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/At.xml b/src/Resources/buttonArt/LIBRARY/Symbols/At.xml new file mode 100644 index 000000000..19494bc74 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/At.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/BackSlash.xml b/src/Resources/buttonArt/LIBRARY/Symbols/BackSlash.xml new file mode 100644 index 000000000..73e59bdda --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/BackSlash.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/BrokenBar.xml b/src/Resources/buttonArt/LIBRARY/Symbols/BrokenBar.xml new file mode 100644 index 000000000..5588f5a07 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/BrokenBar.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Caret.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Caret.xml new file mode 100644 index 000000000..b98c4f801 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Caret.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Colon.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Colon.xml new file mode 100644 index 000000000..b4be344b7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Colon.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Comma.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Comma.xml new file mode 100644 index 000000000..8ad7255ab --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Comma.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Dollar Sign.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Dollar Sign.xml new file mode 100644 index 000000000..14a6bc782 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Dollar Sign.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Equals.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Equals.xml new file mode 100644 index 000000000..e8ba8557e --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Equals.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Exclamation.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Exclamation.xml new file mode 100644 index 000000000..ea37d1396 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Exclamation.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/ForwardSlash.xml b/src/Resources/buttonArt/LIBRARY/Symbols/ForwardSlash.xml new file mode 100644 index 000000000..fbdd38491 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/ForwardSlash.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Grave.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Grave.xml new file mode 100644 index 000000000..1f3982c1f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Grave.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/GreaterThan.xml b/src/Resources/buttonArt/LIBRARY/Symbols/GreaterThan.xml new file mode 100644 index 000000000..f81b4e929 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/GreaterThan.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/LeftCurlyBracket.xml b/src/Resources/buttonArt/LIBRARY/Symbols/LeftCurlyBracket.xml new file mode 100644 index 000000000..7f013d75c --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/LeftCurlyBracket.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/LeftParenthesis.xml b/src/Resources/buttonArt/LIBRARY/Symbols/LeftParenthesis.xml new file mode 100644 index 000000000..9d89781e8 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/LeftParenthesis.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/LeftSquareBracket.xml b/src/Resources/buttonArt/LIBRARY/Symbols/LeftSquareBracket.xml new file mode 100644 index 000000000..4651824fd --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/LeftSquareBracket.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/LessThan.xml b/src/Resources/buttonArt/LIBRARY/Symbols/LessThan.xml new file mode 100644 index 000000000..3c8f9c221 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/LessThan.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Minus.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Minus.xml new file mode 100644 index 000000000..0986ff406 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Minus.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Negation.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Negation.xml new file mode 100644 index 000000000..9db587b51 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Negation.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Number.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Number.xml new file mode 100644 index 000000000..d7b981b4f --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Number.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Percent.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Percent.xml new file mode 100644 index 000000000..d52de26a7 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Percent.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Period.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Period.xml new file mode 100644 index 000000000..a593a7c32 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Period.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Plus Original.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Plus Original.xml new file mode 100644 index 000000000..dcb376c95 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Plus Original.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Plus.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Plus.xml new file mode 100644 index 000000000..c5d150788 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Plus.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Pound.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Pound.xml new file mode 100644 index 000000000..6b61bef87 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Pound.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Question.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Question.xml new file mode 100644 index 000000000..ccf712919 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Question.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Quotation.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Quotation.xml new file mode 100644 index 000000000..8abb51d92 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Quotation.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/RightCurlyBracket.xml b/src/Resources/buttonArt/LIBRARY/Symbols/RightCurlyBracket.xml new file mode 100644 index 000000000..9a1dba67d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/RightCurlyBracket.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/RightParenthesis.xml b/src/Resources/buttonArt/LIBRARY/Symbols/RightParenthesis.xml new file mode 100644 index 000000000..6e12759ae --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/RightParenthesis.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/RightSquareBracket.xml b/src/Resources/buttonArt/LIBRARY/Symbols/RightSquareBracket.xml new file mode 100644 index 000000000..5f248c6cc --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/RightSquareBracket.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/SemiColon.xml b/src/Resources/buttonArt/LIBRARY/Symbols/SemiColon.xml new file mode 100644 index 000000000..8eb301584 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/SemiColon.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/SingleQuote.xml b/src/Resources/buttonArt/LIBRARY/Symbols/SingleQuote.xml new file mode 100644 index 000000000..0af2e2457 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/SingleQuote.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Tilde.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Tilde.xml new file mode 100644 index 000000000..8798d32d6 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Tilde.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Underscore.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Underscore.xml new file mode 100644 index 000000000..b1032de14 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Underscore.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/Unknown.xml b/src/Resources/buttonArt/LIBRARY/Symbols/Unknown.xml new file mode 100644 index 000000000..fe0a8e513 --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/Unknown.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/LIBRARY/Symbols/VerticalBar.xml b/src/Resources/buttonArt/LIBRARY/Symbols/VerticalBar.xml new file mode 100644 index 000000000..a22b25c6d --- /dev/null +++ b/src/Resources/buttonArt/LIBRARY/Symbols/VerticalBar.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/META-INF/metadata.xml b/src/Resources/buttonArt/META-INF/metadata.xml new file mode 100644 index 000000000..73f2073e2 --- /dev/null +++ b/src/Resources/buttonArt/META-INF/metadata.xml @@ -0,0 +1,104 @@ + + + + + Adobe Flash CS4 Professional + 2012-07-28T23:24:59+01:00 + 2021-11-10T22:16:41+08:00 + 2021-11-10T22:16:41+08:00 + + + application/vnd.adobe.fla + + + + xmp.iid:651B82C62F42EC119843FECE3E3F8DD6 + xmp.did:F216964DEFD8E111AD4AF18A9CE578B4 + xmp.did:F216964DEFD8E111AD4AF18A9CE578B4 + + xmp.did:48EE966A3042EC119843FECE3E3F8DD6 + xmp.iid:48EE966A3042EC119843FECE3E3F8DD6 + xmp.did:F216964DEFD8E111AD4AF18A9CE578B4 + + + + created + xmp.iid:F216964DEFD8E111AD4AF18A9CE578B4 + 2012-07-28T23:25:16+01:00 + Adobe Flash CS4 Professional + + + created + xmp.iid:224A94E383B6E81191FEDF04AA088F4B + 2012-07-28T23:24:59+01:00 + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:7129409B99B6E811ADBA847149D102AF + 2012-07-28T23:24:59+01:00 + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:6444DFC80CB7E811ABE4CA8355120988 + 2012-07-28T23:24:59+01:00 + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:0AD9144C31C1E811A10D972EADDA1FE9 + 2012-07-28T23:24:59+01:00 + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:BEDFC9FC82C5E811BD99E8D9DEB06D6C + 2012-07-28T23:24:59+01:00 + Adobe Flash Professional CS6 - build 481 + + + created + xmp.iid:651B82C62F42EC119843FECE3E3F8DD6 + 2012-07-28T23:24:59+01:00 + Adobe Flash Professional CS6 - build 481 + + + saved + xmp.iid:48EE966A3042EC119843FECE3E3F8DD6 + 2021-11-10T22:16:41+08:00 + Adobe Flash Professional CS6 - build 481 + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/MobileSettings.xml b/src/Resources/buttonArt/MobileSettings.xml new file mode 100644 index 000000000..e69de29bb diff --git a/src/Resources/buttonArt/PublishSettings.xml b/src/Resources/buttonArt/PublishSettings.xml new file mode 100644 index 000000000..fdf959e23 --- /dev/null +++ b/src/Resources/buttonArt/PublishSettings.xml @@ -0,0 +1,210 @@ + + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + ..\..\build\skyui\buttonArt.swf + buttonArt.exe + buttonArt.app + buttonArt.html + buttonArts.gif + buttonArt.jpg + buttonArt.png + buttonArt.mov + buttonArt.smil + ..\..\build\skyui\buttonArt.swc + + + 0 + 10,0,2,0;12,0,0,0;11,2,0,0;11,1,0,0;10,3,0,0;10,2,153,0;10,1,52,0;9,0,124,0;8,0,24,0;7,0,14,0;6,0,79,0;5,0,58,0;4,0,32,0;3,0,8,0;2,0,1,12;1,0,0,1; + 1 + 1 + buttonArt.xfl_content.html + buttonArt.xfl_alternate.html + 0 + + 550 + 400 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 4 + 0 + 0 + 1 + 0 + C:\Users\Owner\AppData\Local\Adobe\Flash CS4\en\Configuration\HTML\Default.html + 1 + + + + + 0 + 0 + 0 + 80 + 0 + 0 + 7 + 0 + 7 + 0 + 15 + FlashPlayer11.2 + 2 + 1 + $(LocalData)\Classes + . + CONFIG::FLASH_AUTHORING="true"; + 0 + + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + 2 + 4 + 4096 + AS3 + 1 + 1 + 0 + 15 + 1 + 0 + 4102 + rsl + wrap + $(AppConfig)/ActionScript 3.0/rsls/loader_animation.swf + + + $(AppConfig)/ActionScript 3.0/libs + merge + + + . + external + + + $(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc + rsl + http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz + http://fpdownload.adobe.com/pub/swz/crossdomain.xml + textLayout_2.0.0.232.swz + + + + + $(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc + + http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz + http://fpdownload.adobe.com/pub/swz/crossdomain.xml + textLayout_2.0.0.232.swz + + + + + 550 + 400 + 0 + 4718592 + 0 + 80 + 1 + + + 1 + 0 + 1 + 0 + 0 + 100000 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + + + 550 + 400 + 0 + 1 + 1 + + 1 + 0 + 1 + 0 + 0 + + 128 + + + 255 + + + + 550 + 400 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + 24-bit with Alpha + 255 + + + + 550 + 400 + 1 + 0 + + + 00000000 + 0 + 0 + 0 + 0 + 1 + + + \ No newline at end of file diff --git a/src/Resources/buttonArt/bin/SymDepend.cache b/src/Resources/buttonArt/bin/SymDepend.cache new file mode 100644 index 000000000..b5732fd04 Binary files /dev/null and b/src/Resources/buttonArt/bin/SymDepend.cache differ diff --git a/src/Resources/buttonArt/buttonArt.xfl b/src/Resources/buttonArt/buttonArt.xfl new file mode 100644 index 000000000..860a820ec --- /dev/null +++ b/src/Resources/buttonArt/buttonArt.xfl @@ -0,0 +1 @@ +PROXY-CS5 \ No newline at end of file diff --git a/src/Resources/icons_effect_psychosteve.fla b/src/Resources/icons_effect_psychosteve.fla index 853466b76..8e06a46d2 100644 Binary files a/src/Resources/icons_effect_psychosteve.fla and b/src/Resources/icons_effect_psychosteve.fla differ diff --git a/src/version.as b/src/version.as index e547fca87..c25136246 100644 --- a/src/version.as +++ b/src/version.as @@ -18,12 +18,12 @@ // 4.0 15 // 4.1 16 -public static var SKYUI_RELEASE_IDX: Number = 16; +public static var SKYUI_RELEASE_IDX: Number = 2018; -public static var SKYUI_VERSION_MAJOR: Number = 4; -public static var SKYUI_VERSION_MINOR: Number = 1; +public static var SKYUI_VERSION_MAJOR: Number = 5; +public static var SKYUI_VERSION_MINOR: Number = 2; -public static var SKYUI_VERSION_STRING: String = (SKYUI_VERSION_MAJOR + "." + SKYUI_VERSION_MINOR); +public static var SKYUI_VERSION_STRING: String = (SKYUI_VERSION_MAJOR + "." + SKYUI_VERSION_MINOR + " SE"); //public static var SKYUI_VERSION_ALPHA: Number = 7; //public static var SKYUI_VERSION_STRING: String = (SKYUI_VERSION_MAJOR + "." + SKYUI_VERSION_MINOR + "-alpha" + SKYUI_VERSION_ALPHA);