Showing preview only (4,950K chars total). Download the full file or copy to clipboard to get everything.
Repository: Odie/skyui-vr
Branch: master
Commit: bbe0c3264e60
Files: 993
Total size: 4.5 MB
Directory structure:
gitextract_9k0d2l5e/
├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── build/
│ ├── .gitignore
│ ├── exported/
│ │ ├── skyui/
│ │ │ └── .gitkeep
│ │ └── widgets/
│ │ └── skyui/
│ │ └── .gitkeep
│ └── skyui/
│ └── config.txt
├── dist/
│ ├── .gitignore
│ ├── Data/
│ │ ├── Interface/
│ │ │ ├── Translations/
│ │ │ │ ├── SkyUI_czech.txt
│ │ │ │ ├── SkyUI_english.txt
│ │ │ │ ├── SkyUI_french.txt
│ │ │ │ ├── SkyUI_german.txt
│ │ │ │ ├── SkyUI_italian.txt
│ │ │ │ ├── SkyUI_japanese.txt
│ │ │ │ ├── SkyUI_polish.txt
│ │ │ │ ├── SkyUI_russian.txt
│ │ │ │ └── SkyUI_spanish.txt
│ │ │ └── skyui/
│ │ │ ├── config.txt
│ │ │ └── res/
│ │ │ └── mcm_logo.dds
│ │ ├── Readme - SkyUI.txt
│ │ ├── Scripts/
│ │ │ ├── Headers/
│ │ │ │ ├── SKI_ConfigBase.psc
│ │ │ │ └── SKI_QuestBase.psc
│ │ │ └── Source/
│ │ │ ├── SKI_ActiveEffectsWidget.psc
│ │ │ ├── SKI_ConfigBase.psc
│ │ │ ├── SKI_ConfigManager.psc
│ │ │ ├── SKI_ConfigMenu.psc
│ │ │ ├── SKI_FavoritesManager.psc
│ │ │ ├── SKI_Main.psc
│ │ │ ├── SKI_PlayerInventoryHook.psc
│ │ │ ├── SKI_PlayerLoadGameAlias.psc
│ │ │ ├── SKI_QF_ConfigManagerInstance.psc
│ │ │ ├── SKI_QuestBase.psc
│ │ │ ├── SKI_SettingsManager.psc
│ │ │ ├── SKI_WidgetBase.psc
│ │ │ └── SKI_WidgetManager.psc
│ │ ├── SkyUI_SE.esp
│ │ └── fomod/
│ │ ├── info.xml
│ │ └── script.cs
│ ├── Examples/
│ │ └── MCM/
│ │ ├── ConfigMenuTemplate.psc
│ │ ├── ExampleConfigMenu.esp
│ │ └── ExampleConfigMenu.psc
│ ├── bsascript.txt
│ ├── filegroup_all.txt
│ ├── filegroup_interface.txt
│ ├── filegroup_misc.txt
│ ├── filegroup_scripts.txt
│ ├── make_all.pl
│ ├── make_archive.pl
│ └── make_scripts.pl
├── misc/
│ ├── ArrowCount/
│ │ ├── Interface/
│ │ │ └── exported/
│ │ │ └── widgets/
│ │ │ └── skyui/
│ │ │ └── arrowcount.swf
│ │ └── Scripts/
│ │ └── Source/
│ │ └── PN_ArrowCountWidget.psc
│ ├── Configs/
│ │ ├── 5760x1080, by Ismelda/
│ │ │ └── skyui.cfg
│ │ ├── 5760x2160, by Ismelda/
│ │ │ └── skyui.cfg
│ │ └── ValueWeight Column/
│ │ └── skyui.cfg
│ ├── Flash Util/
│ │ ├── SkyUI - make_all.jsfl
│ │ ├── SkyUI - make_archive (fast).jsfl
│ │ ├── SkyUI - make_archive.jsfl
│ │ ├── build-all.jsfl
│ │ └── skyui_runscript.bat
│ ├── Icon Themes/
│ │ ├── Celtic, by GreatClone/
│ │ │ ├── skyui_icons_cat.swf
│ │ │ └── skyui_icons_inv.swf
│ │ ├── Curved, by T3T/
│ │ │ ├── skyui_icons_cat.swf
│ │ │ └── skyui_icons_inv.swf
│ │ └── Straight, by T3T/
│ │ ├── skyui_icons_cat.swf
│ │ └── skyui_icons_inv.swf
│ ├── Original Translates/
│ │ ├── Translate_ENGLISH.txt
│ │ ├── Translate_FRENCH.txt
│ │ ├── Translate_GERMAN.txt
│ │ ├── Translate_ITALIAN.txt
│ │ ├── Translate_Japanese.txt
│ │ ├── Translate_RUSSIAN.txt
│ │ ├── Translate_SPANISH.txt
│ │ ├── Translate_czech.txt
│ │ └── translate_polish.txt
│ ├── PrimaryNeeds/
│ │ ├── Interface/
│ │ │ └── exported/
│ │ │ └── widgets/
│ │ │ └── pnx/
│ │ │ └── statusicons.swf
│ │ ├── PrimaryNeeds.esp
│ │ └── Scripts/
│ │ ├── PN_FoodEffect.pex
│ │ ├── PN_IconWidget.pex
│ │ ├── PN_NeedsManager.pex
│ │ └── Source/
│ │ ├── PN_FoodEffect.psc
│ │ ├── PN_IconWidget.psc
│ │ └── PN_NeedsManager.psc
│ ├── Translations/
│ │ ├── SkyUI_Translations.txt
│ │ └── make_translations.pl
│ ├── cp-built-files
│ ├── decompile-pex
│ ├── pack-release
│ ├── rename-png
│ └── reorder-psc
├── sksevr_plugin/
│ ├── .editorconfig
│ ├── .gitignore
│ ├── README.md
│ ├── build.ini
│ ├── build.py
│ ├── lib/
│ │ └── openvr_api.lib
│ ├── lua/
│ │ ├── MainEntry.lua
│ │ ├── defaults-general.lua
│ │ ├── defaults-knuckles.lua
│ │ ├── defaults-oculus.lua
│ │ ├── defaults-vive.lua
│ │ ├── defaults-wmr.lua
│ │ └── inspect.lua
│ ├── lua-tests/
│ │ └── core_spec.lua
│ ├── luajit.vcxproj
│ ├── plugin/
│ │ ├── ControllerStateHook.cpp
│ │ ├── ControllerStateHook.h
│ │ ├── FormDB.cpp
│ │ ├── FormDB.h
│ │ ├── Globals.h
│ │ ├── Keyboard.cpp
│ │ ├── Keyboard.h
│ │ ├── PapyrusUIFix.cpp
│ │ ├── PapyrusUIFix.h
│ │ ├── ScaleformExtendedDataFix.cpp
│ │ ├── ScaleformExtendedDataFix.h
│ │ ├── Settings.cpp
│ │ ├── Settings.h
│ │ ├── VRHookAPI.h
│ │ ├── exports.def
│ │ ├── guicon.cpp
│ │ ├── guicon.h
│ │ ├── lua_glue.cpp
│ │ ├── lua_glue.h
│ │ ├── main.cpp
│ │ ├── plugin.vcxproj
│ │ ├── plugin.vcxproj.filters
│ │ └── scripts/
│ │ └── ExportPlugin.psc
│ ├── plugin.sln
│ └── tools/
│ └── run-lua-tests
└── src/
├── .gitignore
├── CLIK/
│ ├── Mouse.as
│ ├── Selection.as
│ ├── Stage.as
│ ├── System/
│ │ └── capabilities.as
│ └── gfx/
│ ├── controls/
│ │ ├── Button.as
│ │ ├── ButtonBar.as
│ │ ├── ButtonGroup.as
│ │ ├── CoreList.as
│ │ ├── OptionStepper.as
│ │ ├── RadioButton.as
│ │ ├── ScrollBar.as
│ │ ├── ScrollIndicator.as
│ │ ├── ScrollingList.as
│ │ ├── Slider.as
│ │ ├── TextArea.as
│ │ └── TextInput.as
│ ├── core/
│ │ └── UIComponent.as
│ ├── data/
│ │ └── DataProvider.as
│ ├── events/
│ │ └── EventDispatcher.as
│ ├── io/
│ │ └── GameDelegate.as
│ ├── managers/
│ │ ├── FocusHandler.as
│ │ └── InputDelegate.as
│ ├── ui/
│ │ ├── InputDetails.as
│ │ └── NavigationCode.as
│ └── utils/
│ ├── Constraints.as
│ └── Locale.as
├── Common/
│ ├── Components/
│ │ ├── BlinkOnDemandMeter.as
│ │ ├── BlinkOnEmptyMeter.as
│ │ ├── CrossPlatformButtons.as
│ │ ├── DeltaMeter.as
│ │ ├── Meter.as
│ │ └── UniformTimeMeter.as
│ ├── MouseRotationInputCatcher.as
│ ├── QuantitySlider.as
│ ├── SaveLoadPanel.as
│ ├── Shared/
│ │ ├── BSScrollingList.as
│ │ ├── ButtonChange.as
│ │ ├── ButtonTextArtHolder.as
│ │ ├── CenteredScrollingList.as
│ │ ├── ExtractPlatformText.as
│ │ ├── GlobalFunc.as
│ │ ├── ListFilterer.as
│ │ ├── Macros.as
│ │ ├── PlatformChangeUser.as
│ │ └── Platforms.as
│ ├── mx/
│ │ └── transitions/
│ │ └── Tween.as
│ ├── skse.as
│ └── skyui/
│ ├── VRInput.as
│ ├── components/
│ │ ├── BottomBarMappedButton.as
│ │ ├── ButtonPanel.as
│ │ ├── MappedButton.as
│ │ ├── MaskedTextArea.as
│ │ ├── Meter.as
│ │ ├── SearchWidget.as
│ │ ├── Slider.as
│ │ ├── TabBar.as
│ │ ├── colorswatch/
│ │ │ ├── ColorSquare.as
│ │ │ └── ColorSwatch.as
│ │ ├── dialog/
│ │ │ ├── BasicDialog.as
│ │ │ └── ColumnSelectDialog.as
│ │ └── list/
│ │ ├── BSList.as
│ │ ├── BasicEnumeration.as
│ │ ├── BasicList.as
│ │ ├── BasicListEntry.as
│ │ ├── ButtonList.as
│ │ ├── ButtonListEntry.as
│ │ ├── ColumnDescriptor.as
│ │ ├── ColumnLayoutData.as
│ │ ├── EntryClipManager.as
│ │ ├── FilteredEnumeration.as
│ │ ├── IEntryEnumeration.as
│ │ ├── IListProcessor.as
│ │ ├── ListLayout.as
│ │ ├── ListLayoutManager.as
│ │ ├── ListState.as
│ │ ├── ScrollingList.as
│ │ ├── SortedListHeader.as
│ │ ├── TabularList.as
│ │ └── TabularListEntry.as
│ ├── defines/
│ │ ├── Actor.as
│ │ ├── Armor.as
│ │ ├── ButtonArtNames.as
│ │ ├── Form.as
│ │ ├── Input.as
│ │ ├── Inventory.as
│ │ ├── Item.as
│ │ ├── Magic.as
│ │ ├── Material.as
│ │ ├── Screen.as
│ │ └── Weapon.as
│ ├── filter/
│ │ ├── IFilter.as
│ │ ├── ItemTypeFilter.as
│ │ ├── NameFilter.as
│ │ └── SortFilter.as
│ ├── props/
│ │ ├── CompoundProperty.as
│ │ ├── ItemFilter.as
│ │ ├── PropertyDataExtender.as
│ │ └── PropertyLookup.as
│ └── util/
│ ├── ColorFunctions.as
│ ├── ConfigManager.as
│ ├── Debug.as
│ ├── DialogManager.as
│ ├── EffectIconMap.as
│ ├── GlobalFunctions.as
│ ├── Hash.as
│ ├── Input.as
│ ├── MarkupParser.as
│ ├── Translator.as
│ └── Tween.as
├── CraftingMenu/
│ ├── CraftingDataSetter.as
│ ├── CraftingIconSetter.as
│ ├── CraftingListEntry.as
│ ├── CraftingLists.as
│ ├── CraftingMenu.as
│ ├── CustomAlchemyDataSetter.as
│ ├── CustomConstructDataSetter.as
│ ├── EnchantingBar.as
│ ├── IconTabList.as
│ ├── IconTabListEntry.as
│ └── craftingmenu.fla
├── Enderal/
│ ├── ButtonGrid.as
│ ├── ButtonGridEntry.as
│ ├── DataLoader.as
│ ├── SkillMenu.as
│ ├── SkillMenu.fla
│ ├── SkillMenu.swf
│ ├── SkillMenuData.txt
│ ├── SkillTreeEntry.as
│ └── SkillTreeView.as
├── FavoritesMenu/
│ ├── FavoritesIconSetter.as
│ ├── FavoritesListEntry.as
│ ├── FavoritesMenu.as
│ ├── FilterDataExtender.as
│ ├── GroupButton.as
│ ├── GroupDataExtender.as
│ └── favoritesmenu.fla
├── HUDWidgets/
│ ├── WidgetLoader.as
│ ├── activeeffects.fla
│ ├── arrowcount.fla
│ ├── meter.fla
│ ├── minimap.fla
│ ├── pnx/
│ │ └── widgets/
│ │ └── StatusIconWidget.as
│ ├── skyui/
│ │ └── widgets/
│ │ ├── WidgetBase.as
│ │ ├── activeeffects/
│ │ │ ├── ActiveEffect.as
│ │ │ ├── ActiveEffectsGroup.as
│ │ │ └── ActiveEffectsWidget.as
│ │ ├── arrowcount/
│ │ │ └── ArrowCountWidget.as
│ │ ├── meter/
│ │ │ └── MeterWidget.as
│ │ ├── minimap/
│ │ │ └── MiniMapWidget.as
│ │ └── status/
│ │ └── StatusWidget.as
│ ├── status.fla
│ ├── statusicons.fla
│ └── widgetloader.fla
├── ItemMenus/
│ ├── BarterDataSetter.as
│ ├── BarterMenu.as
│ ├── BottomBar.as
│ ├── CategoryList.as
│ ├── CategoryListEntry.as
│ ├── ContainerMenu.as
│ ├── GiftMenu.as
│ ├── InventoryDataSetter.as
│ ├── InventoryIconSetter.as
│ ├── InventoryListEntry.as
│ ├── InventoryLists.as
│ ├── InventoryMenu.as
│ ├── ItemCard.as
│ ├── ItemMenu.as
│ ├── ItemcardDataExtender.as
│ ├── MagicDataSetter.as
│ ├── MagicIconSetter.as
│ ├── MagicMenu.as
│ ├── bartermenu.fla
│ ├── bottombar.fla
│ ├── containermenu.fla
│ ├── giftmenu.fla
│ ├── inventorylists.fla
│ ├── inventorymenu.fla
│ ├── itemcard.fla
│ └── magicmenu.fla
├── MapMenu/
│ ├── Map/
│ │ ├── LocalMap.as
│ │ ├── LocationFinder.as
│ │ ├── LocationListEntry.as
│ │ ├── MapMarker.as
│ │ ├── MapMenu.as
│ │ └── MarkerDescription.as
│ └── map.fla
├── MessageBox/
│ ├── MessageBox.as
│ └── messagebox.fla
├── ModConfigPanel/
│ ├── ColorDialog.as
│ ├── ConfigPanel.as
│ ├── MenuDialog.as
│ ├── MessageDialog.as
│ ├── ModListPanel.as
│ ├── MultiColumnScrollBar.as
│ ├── MultiColumnScrollingList.as
│ ├── OptionDialog.as
│ ├── OptionsListEntry.as
│ ├── ParticleEmitter.as
│ ├── SkyUISplash.as
│ ├── SliderDialog.as
│ ├── SnowEffect.as
│ ├── TextLoader.as
│ ├── TextLoader.fla
│ ├── configpanel.fla
│ ├── mcm_splash.fla
│ └── skyui_splash.fla
├── PauseMenu/
│ ├── InputMappingArt.as
│ ├── InputMappingList.as
│ ├── JournalBottomBar.as
│ ├── JournalSaveLoadList.as
│ ├── ObjectiveScrollingList.as
│ ├── OptionsList.as
│ ├── QuestCenteredList.as
│ ├── Quest_Journal.as
│ ├── QuestsPage.as
│ ├── SettingsOptionItem.as
│ ├── StatsList.as
│ ├── StatsPage.as
│ ├── SystemPage.as
│ └── quest_journal/
│ ├── DOMDocument.xml
│ ├── LIBRARY/
│ │ ├── ButtonArt.xml
│ │ ├── ButtonBG.xml
│ │ ├── ButtonPanel.xml
│ │ ├── DialogButton.xml
│ │ ├── Divider.xml
│ │ ├── Graphic/
│ │ │ └── ButtonBG Shape.xml
│ │ ├── InputMappingArt.xml
│ │ ├── InputMappingArtBG.xml
│ │ ├── JournalBottomBarCenterReference.xml
│ │ ├── MappedButton.xml
│ │ ├── MovieClips/
│ │ │ ├── ButtonArtBackground.xml
│ │ │ ├── ConfigPanelFader.xml
│ │ │ ├── ConfirmPanel.xml
│ │ │ ├── ConfirmText.xml
│ │ │ ├── EquipIcon.xml
│ │ │ ├── HelpList.xml
│ │ │ ├── HelpListEntry.xml
│ │ │ ├── HelpListPanel.xml
│ │ │ ├── HelpTextButtonArtHolder.xml
│ │ │ ├── HelpTextHolder.xml
│ │ │ ├── HelpTextPanel.xml
│ │ │ ├── InputMappingList.xml
│ │ │ ├── InputMappingListEntry.xml
│ │ │ ├── InputMappingListScrollArrow.xml
│ │ │ ├── InputMappingPanel.xml
│ │ │ ├── JournalBackground.xml
│ │ │ ├── JournalBottomBar.xml
│ │ │ ├── JournalTab.xml
│ │ │ ├── JournalTabEnd.xml
│ │ │ ├── LevelMeterRect.xml
│ │ │ ├── LevelProgressBar.xml
│ │ │ ├── MeterBar.xml
│ │ │ ├── MeterBarBackground.xml
│ │ │ ├── MeterBarColor.xml
│ │ │ ├── MeterMask.xml
│ │ │ ├── ObjectiveListItem.xml
│ │ │ ├── ObjectiveScrollingList.xml
│ │ │ ├── ObjectivesHeader.xml
│ │ │ ├── OptionStepperArrowBtn.xml
│ │ │ ├── OptionsLists.xml
│ │ │ ├── OptionsListsList.xml
│ │ │ ├── OptionsListsListEntry.xml
│ │ │ ├── OptionsListsPanel.xml
│ │ │ ├── PCQuitList.xml
│ │ │ ├── PCQuitListEntry.xml
│ │ │ ├── PCQuitPanel.xml
│ │ │ ├── PlayerInfoText.xml
│ │ │ ├── QuestJournalBase.xml
│ │ │ ├── QuestJournalFader.xml
│ │ │ ├── QuestTitleEndpieces.xml
│ │ │ ├── QuestTitleHolder.xml
│ │ │ ├── QuestTitleList.xml
│ │ │ ├── QuestTitleListEntry.xml
│ │ │ ├── QuestTitleListEntryCentered.xml
│ │ │ ├── QuestTitleListEntryDivider.xml
│ │ │ ├── QuestsFader.xml
│ │ │ ├── QuestsPage.xml
│ │ │ ├── SaveLoadList.xml
│ │ │ ├── SaveLoadListEntry.xml
│ │ │ ├── SaveLoadPanel.xml
│ │ │ ├── ScreenshotHolder.xml
│ │ │ ├── ScrollableText.xml
│ │ │ ├── SettingsCheckBox.xml
│ │ │ ├── SettingsCheckBoxBackground.xml
│ │ │ ├── SettingsCheckBoxCheck.xml
│ │ │ ├── SettingsList.xml
│ │ │ ├── SettingsListEntry.xml
│ │ │ ├── SettingsOptionStepper.xml
│ │ │ ├── SettingsPanel.xml
│ │ │ ├── StatsCategoryListEntry.xml
│ │ │ ├── StatsCategoryListEntryCentered.xml
│ │ │ ├── StatsCategoryListHolder.xml
│ │ │ ├── StatsCategoryListList.xml
│ │ │ ├── StatsFader.xml
│ │ │ ├── StatsList.xml
│ │ │ ├── StatsListEntry.xml
│ │ │ ├── StatsPage.xml
│ │ │ ├── SystemCategoriesList.xml
│ │ │ ├── SystemCategoriesListEntry.xml
│ │ │ ├── SystemCategoriesListEntryCentered.xml
│ │ │ ├── SystemCategoryList.xml
│ │ │ ├── SystemFader.xml
│ │ │ └── SystemPage.xml
│ │ ├── Shapes/
│ │ │ ├── BackgroundRect.xml
│ │ │ ├── Endpieces_DLC01.xml
│ │ │ ├── Endpieces_DLC02.xml
│ │ │ ├── MeterBackground.xml
│ │ │ ├── Shape 122.xml
│ │ │ ├── Shape 398.xml
│ │ │ ├── Shape 400.xml
│ │ │ ├── Shape 407.xml
│ │ │ ├── Shape 409.xml
│ │ │ ├── Shape 411.xml
│ │ │ ├── Shape 414.xml
│ │ │ ├── Shape 417.xml
│ │ │ ├── Shape 432.xml
│ │ │ ├── Shape 433.xml
│ │ │ ├── Shape 435.xml
│ │ │ ├── Shape 439.xml
│ │ │ ├── Shape 440.xml
│ │ │ ├── Shape 441.xml
│ │ │ ├── Shape 442.xml
│ │ │ ├── Shape 443.xml
│ │ │ ├── Shape 444.xml
│ │ │ ├── Shape 445.xml
│ │ │ ├── Shape 446.xml
│ │ │ ├── Shape 447.xml
│ │ │ ├── Shape 468.xml
│ │ │ ├── Shape 493.xml
│ │ │ ├── Shape 499.xml
│ │ │ ├── Shape 505.xml
│ │ │ ├── Shape 507.xml
│ │ │ ├── Shape 541.xml
│ │ │ ├── Shape 548.xml
│ │ │ ├── Shape 552.xml
│ │ │ ├── Shape 556.xml
│ │ │ ├── Shape 558.xml
│ │ │ ├── Shape 560.xml
│ │ │ ├── Shape 562.xml
│ │ │ ├── Shape 569.xml
│ │ │ ├── Shape 571.xml
│ │ │ ├── Shape 573.xml
│ │ │ ├── Shape 575.xml
│ │ │ └── Shape 577.xml
│ │ ├── TextArea.xml
│ │ ├── scrollBar.xml
│ │ ├── scrollBarAssets/
│ │ │ ├── scrollBarGraphics/
│ │ │ │ ├── scrollBarOption_thumb_shape.xml
│ │ │ │ ├── scrollBar_cap_shape.xml
│ │ │ │ ├── scrollBar_thumb_shape.xml
│ │ │ │ └── scrollBar_track_shape.xml
│ │ │ ├── scrollBarOption_thumb.xml
│ │ │ ├── scrollBar_downArrow.xml
│ │ │ ├── scrollBar_thumb.xml
│ │ │ ├── scrollBar_track.xml
│ │ │ └── scrollBar_upArrow.xml
│ │ └── scrollBarOption.xml
│ ├── META-INF/
│ │ └── metadata.xml
│ ├── MobileSettings.xml
│ ├── PublishSettings.xml
│ ├── bin/
│ │ └── SymDepend.cache
│ └── quest_journal.xfl
├── Resources/
│ ├── Assets/
│ │ ├── maskedtextarea.fla
│ │ ├── meter.fla
│ │ └── scrollbar.fla
│ ├── buttonArt/
│ │ ├── DOMDocument.xml
│ │ ├── LIBRARY/
│ │ │ ├── ButtonArt.xml
│ │ │ ├── ButtonArtBackgrounds/
│ │ │ │ ├── BackgroundBig.xml
│ │ │ │ ├── BackgroundLarge.xml
│ │ │ │ ├── BackgroundLeft.xml
│ │ │ │ ├── BackgroundMedium.xml
│ │ │ │ ├── BackgroundRight.xml
│ │ │ │ ├── BackgroundRound.xml
│ │ │ │ └── BackgroundSmall.xml
│ │ │ ├── Controller/
│ │ │ │ ├── 360/
│ │ │ │ │ ├── Back.xml
│ │ │ │ │ ├── LB.xml
│ │ │ │ │ ├── LS.xml
│ │ │ │ │ ├── LSPress.xml
│ │ │ │ │ ├── LT.xml
│ │ │ │ │ ├── RB.xml
│ │ │ │ │ ├── RS.xml
│ │ │ │ │ ├── RSPress.xml
│ │ │ │ │ └── RT.xml
│ │ │ │ ├── PS3/
│ │ │ │ │ ├── Circle.xml
│ │ │ │ │ ├── L1.xml
│ │ │ │ │ ├── L2.xml
│ │ │ │ │ ├── L3.xml
│ │ │ │ │ ├── PS3X.xml
│ │ │ │ │ ├── R1.xml
│ │ │ │ │ ├── R2.xml
│ │ │ │ │ ├── R3.xml
│ │ │ │ │ ├── Select.xml
│ │ │ │ │ ├── Square.xml
│ │ │ │ │ └── Triangle.xml
│ │ │ │ └── Start.xml
│ │ │ ├── FunctionKeys/
│ │ │ │ ├── Alt.xml
│ │ │ │ ├── Backspace.xml
│ │ │ │ ├── BackspaceWithArrow.xml
│ │ │ │ ├── Caps.xml
│ │ │ │ ├── Ctrl.xml
│ │ │ │ ├── Del.xml
│ │ │ │ ├── End.xml
│ │ │ │ ├── Enter.xml
│ │ │ │ ├── EnterWithArrow.xml
│ │ │ │ ├── Esc.xml
│ │ │ │ ├── F1.xml
│ │ │ │ ├── F10.xml
│ │ │ │ ├── F11.xml
│ │ │ │ ├── F12.xml
│ │ │ │ ├── F2.xml
│ │ │ │ ├── F3.xml
│ │ │ │ ├── F4.xml
│ │ │ │ ├── F5.xml
│ │ │ │ ├── F6.xml
│ │ │ │ ├── F7.xml
│ │ │ │ ├── F8.xml
│ │ │ │ ├── F9.xml
│ │ │ │ ├── Home.xml
│ │ │ │ ├── Ins.xml
│ │ │ │ ├── LAlt.xml
│ │ │ │ ├── LCtrl.xml
│ │ │ │ ├── NumLck.xml
│ │ │ │ ├── Pause.xml
│ │ │ │ ├── PgDn.xml
│ │ │ │ ├── PgUp.xml
│ │ │ │ ├── PrtSc.xml
│ │ │ │ ├── RAlt.xml
│ │ │ │ ├── RCtrl.xml
│ │ │ │ ├── ScrLck.xml
│ │ │ │ ├── Shift.xml
│ │ │ │ ├── ShiftWithArrow.xml
│ │ │ │ ├── Space.xml
│ │ │ │ └── Tab.xml
│ │ │ ├── Letters/
│ │ │ │ ├── A.xml
│ │ │ │ ├── B.xml
│ │ │ │ ├── C.xml
│ │ │ │ ├── D.xml
│ │ │ │ ├── E.xml
│ │ │ │ ├── F.xml
│ │ │ │ ├── G.xml
│ │ │ │ ├── H.xml
│ │ │ │ ├── I.xml
│ │ │ │ ├── J.xml
│ │ │ │ ├── K.xml
│ │ │ │ ├── L.xml
│ │ │ │ ├── M.xml
│ │ │ │ ├── N.xml
│ │ │ │ ├── O.xml
│ │ │ │ ├── P.xml
│ │ │ │ ├── Q.xml
│ │ │ │ ├── R.xml
│ │ │ │ ├── S.xml
│ │ │ │ ├── T.xml
│ │ │ │ ├── U.xml
│ │ │ │ ├── V.xml
│ │ │ │ ├── W.xml
│ │ │ │ ├── X.xml
│ │ │ │ ├── Y.xml
│ │ │ │ └── Z.xml
│ │ │ ├── Mouse/
│ │ │ │ ├── MouseButtons/
│ │ │ │ │ ├── M1.xml
│ │ │ │ │ ├── M2.xml
│ │ │ │ │ ├── M3.xml
│ │ │ │ │ ├── M4.xml
│ │ │ │ │ ├── M5.xml
│ │ │ │ │ ├── M6.xml
│ │ │ │ │ ├── M7.xml
│ │ │ │ │ └── M8.xml
│ │ │ │ ├── MouseMove.xml
│ │ │ │ └── MouseWheel/
│ │ │ │ ├── MouseWheel.xml
│ │ │ │ ├── MouseWheelDown.xml
│ │ │ │ └── MouseWheelUp.xml
│ │ │ ├── Named Icons/
│ │ │ │ ├── Action_Double_Up.xml
│ │ │ │ ├── Action_Up.xml
│ │ │ │ ├── Action_Up_Arrow.xml
│ │ │ │ ├── OCC BUTTON BASE CIRCLE.xml
│ │ │ │ ├── OCC BUTTON BASE SQUARE.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 1.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 2.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 3.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 4.xml
│ │ │ │ ├── OCC CONTROLLER MC.xml
│ │ │ │ ├── OCC CONTROLLER.xml
│ │ │ │ ├── OCC MOTION.xml
│ │ │ │ ├── OCC THUM REST RIGHT BASE.xml
│ │ │ │ ├── OCC THUMB REST BASE.xml
│ │ │ │ ├── OCC THUMB REST LEFT BASE.xml
│ │ │ │ ├── OCC THUMB_REST.xml
│ │ │ │ ├── OCC THUMB_REST_LEFT.xml
│ │ │ │ ├── OCC THUMB_REST_RIGHT.xml
│ │ │ │ ├── OCC_A.xml
│ │ │ │ ├── OCC_A_HOLD.xml
│ │ │ │ ├── OCC_B.xml
│ │ │ │ ├── OCC_B_HOLD.xml
│ │ │ │ ├── OCC_X.xml
│ │ │ │ ├── OCC_X_HOLD.xml
│ │ │ │ ├── OCC_Y.xml
│ │ │ │ ├── OCC_Y_HOLD.xml
│ │ │ │ ├── Symbol 163.xml
│ │ │ │ ├── Symbol 164.xml
│ │ │ │ ├── Symbol 170.xml
│ │ │ │ ├── Symbol 171.xml
│ │ │ │ ├── Symbol 258.xml
│ │ │ │ ├── Symbol 259.xml
│ │ │ │ ├── Symbol 260.xml
│ │ │ │ ├── Symbol 261.xml
│ │ │ │ ├── Symbol 262.xml
│ │ │ │ ├── Symbol 264.xml
│ │ │ │ ├── Symbol 266.xml
│ │ │ │ ├── Symbol 267.xml
│ │ │ │ ├── Symbol 268.xml
│ │ │ │ ├── Symbol 270.xml
│ │ │ │ ├── Symbol 271.xml
│ │ │ │ ├── Symbol 272.xml
│ │ │ │ ├── Symbol 273.xml
│ │ │ │ ├── Symbol 274.xml
│ │ │ │ ├── Symbol 275.xml
│ │ │ │ ├── Symbol 276.xml
│ │ │ │ ├── Symbol 277.xml
│ │ │ │ ├── Symbol 278.xml
│ │ │ │ ├── Symbol 279.xml
│ │ │ │ ├── Symbol 280.xml
│ │ │ │ ├── Symbol 281.xml
│ │ │ │ ├── Symbol 282.xml
│ │ │ │ ├── Symbol 284.xml
│ │ │ │ ├── Symbol 285.xml
│ │ │ │ ├── Symbol 286.xml
│ │ │ │ ├── Symbol 287.xml
│ │ │ │ ├── Symbol 288.xml
│ │ │ │ ├── Symbol 289.xml
│ │ │ │ ├── Symbol 290.xml
│ │ │ │ ├── Symbol 291.xml
│ │ │ │ ├── Symbol 292.xml
│ │ │ │ ├── Symbol 293.xml
│ │ │ │ ├── Symbol 294.xml
│ │ │ │ ├── Symbol 295.xml
│ │ │ │ ├── Symbol 296.xml
│ │ │ │ ├── Symbol 297.xml
│ │ │ │ ├── Symbol 298.xml
│ │ │ │ ├── Symbol 299.xml
│ │ │ │ ├── Symbol 302.xml
│ │ │ │ ├── Symbol 304.xml
│ │ │ │ ├── Symbol 305.xml
│ │ │ │ ├── Symbol 306.xml
│ │ │ │ ├── Symbol 307.xml
│ │ │ │ ├── Symbol 308.xml
│ │ │ │ ├── Symbol 309.xml
│ │ │ │ ├── Symbol 310.xml
│ │ │ │ ├── Symbol 311.xml
│ │ │ │ ├── Symbol 312.xml
│ │ │ │ ├── Symbol 313.xml
│ │ │ │ ├── Symbol 314.xml
│ │ │ │ ├── Symbol 315.xml
│ │ │ │ ├── Symbol 316.xml
│ │ │ │ ├── Symbol 318.xml
│ │ │ │ ├── Symbol 319.xml
│ │ │ │ ├── Symbol 320.xml
│ │ │ │ ├── Symbol 321.xml
│ │ │ │ ├── Symbol 322.xml
│ │ │ │ ├── Symbol 323.xml
│ │ │ │ ├── Symbol 324.xml
│ │ │ │ ├── Symbol 325.xml
│ │ │ │ ├── Symbol 326.xml
│ │ │ │ ├── Symbol 327.xml
│ │ │ │ ├── Symbol 328.xml
│ │ │ │ ├── Symbol 329.xml
│ │ │ │ ├── Symbol 330.xml
│ │ │ │ ├── Symbol 331.xml
│ │ │ │ ├── Symbol 332.xml
│ │ │ │ ├── Symbol 333.xml
│ │ │ │ ├── Symbol 334.xml
│ │ │ │ ├── Symbol 335.xml
│ │ │ │ ├── Symbol 336.xml
│ │ │ │ ├── Symbol 337.xml
│ │ │ │ ├── Symbol 338.xml
│ │ │ │ ├── Symbol 339.xml
│ │ │ │ ├── Symbol 340.xml
│ │ │ │ ├── Symbol 341.xml
│ │ │ │ ├── Symbol 342.xml
│ │ │ │ ├── Symbol 343.xml
│ │ │ │ ├── Symbol 344.xml
│ │ │ │ ├── Symbol 345.xml
│ │ │ │ ├── Symbol 346.xml
│ │ │ │ ├── Symbol 347.xml
│ │ │ │ ├── Symbol 348.xml
│ │ │ │ ├── Symbol 349.xml
│ │ │ │ ├── Symbol 350.xml
│ │ │ │ ├── Symbol 351.xml
│ │ │ │ ├── Symbol 352.xml
│ │ │ │ ├── Symbol 353.xml
│ │ │ │ ├── Symbol 354.xml
│ │ │ │ ├── Symbol 355.xml
│ │ │ │ ├── Symbol 356.xml
│ │ │ │ ├── Symbol 357.xml
│ │ │ │ ├── Symbol 358.xml
│ │ │ │ ├── Symbol 359.xml
│ │ │ │ ├── Symbol 36.xml
│ │ │ │ ├── Symbol 360.xml
│ │ │ │ ├── Symbol 361.xml
│ │ │ │ ├── Symbol 362.xml
│ │ │ │ ├── Symbol 363.xml
│ │ │ │ ├── Symbol 364.xml
│ │ │ │ ├── Symbol 365.xml
│ │ │ │ ├── Symbol 366.xml
│ │ │ │ ├── Symbol 367.xml
│ │ │ │ ├── Symbol 368.xml
│ │ │ │ ├── Symbol 369.xml
│ │ │ │ ├── Symbol 370.xml
│ │ │ │ ├── Symbol 371.xml
│ │ │ │ ├── Symbol 372.xml
│ │ │ │ ├── Symbol 373.xml
│ │ │ │ ├── Symbol 374.xml
│ │ │ │ ├── Symbol 375.xml
│ │ │ │ ├── Symbol 376.xml
│ │ │ │ ├── Symbol 377.xml
│ │ │ │ ├── Symbol 378.xml
│ │ │ │ ├── Symbol 379.xml
│ │ │ │ ├── Symbol 380.xml
│ │ │ │ ├── Symbol 381.xml
│ │ │ │ ├── Symbol 382.xml
│ │ │ │ ├── Symbol 383.xml
│ │ │ │ ├── Symbol 384.xml
│ │ │ │ ├── Symbol 385.xml
│ │ │ │ ├── Symbol 386.xml
│ │ │ │ ├── Symbol 387.xml
│ │ │ │ ├── Symbol 388.xml
│ │ │ │ ├── Symbol 389.xml
│ │ │ │ ├── Symbol 390.xml
│ │ │ │ ├── Symbol 391.xml
│ │ │ │ ├── Symbol 392.xml
│ │ │ │ ├── Symbol 393.xml
│ │ │ │ ├── Symbol 394.xml
│ │ │ │ ├── Symbol 395.xml
│ │ │ │ ├── Symbol 396.xml
│ │ │ │ ├── Symbol 397.xml
│ │ │ │ ├── Symbol 398.xml
│ │ │ │ ├── Symbol 399.xml
│ │ │ │ ├── Symbol 400.xml
│ │ │ │ ├── Symbol 401.xml
│ │ │ │ ├── Symbol 402.xml
│ │ │ │ ├── Symbol 403.xml
│ │ │ │ ├── Symbol 404.xml
│ │ │ │ ├── Symbol 406.xml
│ │ │ │ ├── Symbol 407.xml
│ │ │ │ ├── Symbol 409.xml
│ │ │ │ ├── Symbol 412.xml
│ │ │ │ ├── Symbol 413.xml
│ │ │ │ ├── Symbol 414.xml
│ │ │ │ ├── Symbol 415.xml
│ │ │ │ ├── Symbol 417.xml
│ │ │ │ ├── Symbol 420.xml
│ │ │ │ ├── Symbol 421.xml
│ │ │ │ ├── Symbol 422.xml
│ │ │ │ ├── Symbol 423.xml
│ │ │ │ ├── Symbol 424.xml
│ │ │ │ ├── Symbol 425.xml
│ │ │ │ ├── Symbol 426.xml
│ │ │ │ ├── Symbol 427.xml
│ │ │ │ ├── Symbol 428.xml
│ │ │ │ ├── Symbol 429.xml
│ │ │ │ ├── Symbol 430.xml
│ │ │ │ ├── Symbol 431.xml
│ │ │ │ ├── Symbol 432.xml
│ │ │ │ ├── Symbol 433.xml
│ │ │ │ ├── Symbol 434.xml
│ │ │ │ ├── Symbol 435.xml
│ │ │ │ ├── Symbol 436.xml
│ │ │ │ ├── Symbol 437.xml
│ │ │ │ ├── Symbol 438.xml
│ │ │ │ ├── Symbol 439.xml
│ │ │ │ ├── Symbol 440.xml
│ │ │ │ ├── Symbol 441.xml
│ │ │ │ ├── Symbol 442.xml
│ │ │ │ ├── Symbol 443.xml
│ │ │ │ ├── Symbol 445.xml
│ │ │ │ ├── Symbol 446.xml
│ │ │ │ ├── Symbol 447.xml
│ │ │ │ ├── Symbol 448.xml
│ │ │ │ ├── Symbol 449.xml
│ │ │ │ ├── Symbol 451.xml
│ │ │ │ ├── Symbol 452.xml
│ │ │ │ ├── Symbol 453.xml
│ │ │ │ ├── Symbol 454.xml
│ │ │ │ ├── Symbol 455.xml
│ │ │ │ ├── Symbol 457.xml
│ │ │ │ ├── Symbol 458.xml
│ │ │ │ ├── Symbol 459.xml
│ │ │ │ ├── Symbol 460.xml
│ │ │ │ ├── Symbol 462.xml
│ │ │ │ ├── Symbol 465.xml
│ │ │ │ ├── Symbol 466.xml
│ │ │ │ ├── Symbol 467.xml
│ │ │ │ ├── Symbol 468.xml
│ │ │ │ ├── Symbol 469.xml
│ │ │ │ ├── Symbol 470.xml
│ │ │ │ ├── Symbol 471.xml
│ │ │ │ ├── Symbol 472.xml
│ │ │ │ ├── Symbol 473.xml
│ │ │ │ ├── Symbol 474.xml
│ │ │ │ ├── Symbol 475.xml
│ │ │ │ ├── Symbol 476.xml
│ │ │ │ ├── Symbol 477.xml
│ │ │ │ ├── Symbol 478.xml
│ │ │ │ ├── Symbol 479.xml
│ │ │ │ ├── Symbol 480.xml
│ │ │ │ ├── Symbol 481.xml
│ │ │ │ ├── Symbol 482.xml
│ │ │ │ ├── Symbol 483.xml
│ │ │ │ ├── Symbol 484.xml
│ │ │ │ ├── Symbol 485.xml
│ │ │ │ ├── Symbol 486.xml
│ │ │ │ ├── Symbol 487.xml
│ │ │ │ ├── Symbol 488.xml
│ │ │ │ ├── Symbol 489.xml
│ │ │ │ ├── Symbol 490.xml
│ │ │ │ ├── Symbol 491.xml
│ │ │ │ ├── Symbol 492.xml
│ │ │ │ ├── Symbol 493.xml
│ │ │ │ ├── Symbol 494.xml
│ │ │ │ ├── Symbol 495.xml
│ │ │ │ ├── Symbol 496.xml
│ │ │ │ ├── Symbol 497.xml
│ │ │ │ ├── Symbol 498.xml
│ │ │ │ ├── Symbol 499.xml
│ │ │ │ ├── Symbol 500.xml
│ │ │ │ ├── Symbol 501.xml
│ │ │ │ ├── Symbol 502.xml
│ │ │ │ ├── Symbol 503.xml
│ │ │ │ ├── Symbol 504.xml
│ │ │ │ ├── Symbol 505.xml
│ │ │ │ ├── Symbol 506.xml
│ │ │ │ ├── Symbol 507.xml
│ │ │ │ ├── Symbol 508.xml
│ │ │ │ ├── Symbol 509.xml
│ │ │ │ ├── Symbol 510.xml
│ │ │ │ ├── Symbol 511.xml
│ │ │ │ ├── Symbol 512.xml
│ │ │ │ ├── Symbol 513.xml
│ │ │ │ ├── Symbol 514.xml
│ │ │ │ ├── Symbol 515.xml
│ │ │ │ ├── Symbol 516.xml
│ │ │ │ ├── Symbol 517.xml
│ │ │ │ ├── Symbol 518.xml
│ │ │ │ ├── Symbol 519.xml
│ │ │ │ ├── Symbol 520.xml
│ │ │ │ ├── Symbol 521.xml
│ │ │ │ ├── Symbol 522.xml
│ │ │ │ ├── Symbol 523.xml
│ │ │ │ ├── Symbol 524.xml
│ │ │ │ ├── Symbol 525.xml
│ │ │ │ ├── Symbol 526.xml
│ │ │ │ ├── Symbol 527.xml
│ │ │ │ ├── Symbol 528.xml
│ │ │ │ ├── Symbol 529.xml
│ │ │ │ ├── Symbol 530.xml
│ │ │ │ ├── Symbol 531.xml
│ │ │ │ ├── Symbol 532.xml
│ │ │ │ ├── Symbol 533.xml
│ │ │ │ ├── Symbol 534.xml
│ │ │ │ ├── Symbol 535.xml
│ │ │ │ ├── Symbol 536.xml
│ │ │ │ ├── Symbol 537.xml
│ │ │ │ ├── Symbol 538.xml
│ │ │ │ ├── Symbol 539.xml
│ │ │ │ ├── Symbol 540.xml
│ │ │ │ ├── Symbol 541.xml
│ │ │ │ ├── Symbol 543.xml
│ │ │ │ ├── Symbol 544.xml
│ │ │ │ ├── Symbol 545.xml
│ │ │ │ ├── Symbol 546.xml
│ │ │ │ ├── Symbol 547.xml
│ │ │ │ ├── Symbol 548.xml
│ │ │ │ ├── Symbol 549.xml
│ │ │ │ ├── Symbol 550.xml
│ │ │ │ ├── Symbol 551.xml
│ │ │ │ ├── Symbol 552.xml
│ │ │ │ ├── Symbol 553.xml
│ │ │ │ └── Symbol 555.xml
│ │ │ ├── NumberPad/
│ │ │ │ ├── NP0.xml
│ │ │ │ ├── NP1.xml
│ │ │ │ ├── NP2.xml
│ │ │ │ ├── NP3.xml
│ │ │ │ ├── NP4.xml
│ │ │ │ ├── NP5.xml
│ │ │ │ ├── NP6.xml
│ │ │ │ ├── NP7.xml
│ │ │ │ ├── NP8.xml
│ │ │ │ ├── NP9.xml
│ │ │ │ ├── NPAsterisk.xml
│ │ │ │ ├── NPEnter.xml
│ │ │ │ ├── NPForwardSlash.xml
│ │ │ │ ├── NPMinus.xml
│ │ │ │ ├── NPPeriod.xml
│ │ │ │ └── NPPlus.xml
│ │ │ ├── Numbers/
│ │ │ │ ├── 0.xml
│ │ │ │ ├── 1.xml
│ │ │ │ ├── 2.xml
│ │ │ │ ├── 3.xml
│ │ │ │ ├── 4.xml
│ │ │ │ ├── 5.xml
│ │ │ │ ├── 6.xml
│ │ │ │ ├── 7.xml
│ │ │ │ ├── 8.xml
│ │ │ │ └── 9.xml
│ │ │ └── Symbols/
│ │ │ ├── Amersand.xml
│ │ │ ├── Arrow.xml
│ │ │ ├── Asterisk.xml
│ │ │ ├── At.xml
│ │ │ ├── BackSlash.xml
│ │ │ ├── BrokenBar.xml
│ │ │ ├── Caret.xml
│ │ │ ├── Colon.xml
│ │ │ ├── Comma.xml
│ │ │ ├── Dollar Sign.xml
│ │ │ ├── Equals.xml
│ │ │ ├── Exclamation.xml
│ │ │ ├── ForwardSlash.xml
│ │ │ ├── Grave.xml
│ │ │ ├── GreaterThan.xml
│ │ │ ├── LeftCurlyBracket.xml
│ │ │ ├── LeftParenthesis.xml
│ │ │ ├── LeftSquareBracket.xml
│ │ │ ├── LessThan.xml
│ │ │ ├── Minus.xml
│ │ │ ├── Negation.xml
│ │ │ ├── Number.xml
│ │ │ ├── Percent.xml
│ │ │ ├── Period.xml
│ │ │ ├── Plus Original.xml
│ │ │ ├── Plus.xml
│ │ │ ├── Pound.xml
│ │ │ ├── Question.xml
│ │ │ ├── Quotation.xml
│ │ │ ├── RightCurlyBracket.xml
│ │ │ ├── RightParenthesis.xml
│ │ │ ├── RightSquareBracket.xml
│ │ │ ├── SemiColon.xml
│ │ │ ├── SingleQuote.xml
│ │ │ ├── Tilde.xml
│ │ │ ├── Underscore.xml
│ │ │ ├── Unknown.xml
│ │ │ └── VerticalBar.xml
│ │ ├── META-INF/
│ │ │ └── metadata.xml
│ │ ├── MobileSettings.xml
│ │ ├── PublishSettings.xml
│ │ ├── bin/
│ │ │ └── SymDepend.cache
│ │ └── buttonArt.xfl
│ ├── buttonArtSymbols.fla
│ ├── fonts_en_snk.fla
│ ├── gfxfontlib.fla
│ ├── icons_category_celtic.fla
│ ├── icons_category_curved.fla
│ ├── icons_category_psychosteve.fla
│ ├── icons_category_straight.fla
│ ├── icons_effect_psychosteve.fla
│ ├── icons_item_celtic.fla
│ ├── icons_item_curved.fla
│ ├── icons_item_psychosteve.fla
│ ├── mapMarkerArt.fla
│ ├── mcm.psd
│ ├── skyui_icons.fla
│ ├── skyui_icons_psychosteve.fla
│ └── skyui_icons_straight.fla
└── version.as
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
compile-error.txt
================================================
FILE: .gitmodules
================================================
[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
================================================
FILE: LICENSE
================================================
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.
================================================
FILE: README.md
================================================
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
--------------------
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.
### 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.
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.
================================================
FILE: build/.gitignore
================================================
*.swf
fontconfig.txt
!/fonts_console.swf
!/fonts_en.swf
!/gfxfontlib.swf
!/fontconfig.txt
================================================
FILE: build/exported/skyui/.gitkeep
================================================
================================================
FILE: build/exported/widgets/skyui/.gitkeep
================================================
================================================
FILE: build/skyui/config.txt
================================================
; =====================================================================================================================
[Input]
; =====================================================================================================================
controls.pc.search = 57 ; SPACE
controls.pc.switchTab = 56 ; ALT
controls.pc.equipMode = 42 ; LSHIFT
controls.gamepad.switchTab = 271 ; BACK
controls.gamepad.prevColumn = 274 ; LEFT_SHOULDER
controls.gamepad.nextColumn = 275 ; RIGHT_SHOULDER
controls.gamepad.sortOrder = 272 ; LEFT_THUMB
; =====================================================================================================================
[SearchBox]
; =====================================================================================================================
autoupdate.enable = true
autoupdate.delay = 0
; =====================================================================================================================
[ItemInfo]
; =====================================================================================================================
itemcard.align = center
itemcard.xOffset = 0
itemcard.yOffset = 0
; =====================================================================================================================
[ItemList]
; =====================================================================================================================
quantityMenu.minCount = 6 ; Number of items required to trigger quantity dialog. 0 is disabled
; =====================================================================================================================
[Appearance]
; =====================================================================================================================
icons.category.source = 'skyui/icons_category_psychosteve.swf'
icons.item.source = 'skyui/icons_item_psychosteve.swf'
icons.item.noColor = false
icons.item.showStolen = true
colors.text.enabled = 0xffffff
colors.stolen.enabled = 0xffffff
colors.negative.enabled = 0xff0000
colors.text.disabled = 0x4c4c4c
colors.stolen.disabled = 0x4c4c4c
colors.negative.disabled = 0x800000
; =====================================================================================================================
[ListLayout]
; =====================================================================================================================
vars.a_textBorder.value = <0, 0, 1.1, 0> ; left right top bottom
vars.n_iconSize.value = 18
defaults.entryWidth = 530
; Default text format defaults -------------------------------------------------------
defaults.entry.textFormat.font = '$EverywhereMediumFont'
defaults.entry.textFormat.align = right
defaults.entry.textFormat.bold = false
defaults.entry.textFormat.italic = false
defaults.entry.textFormat.underline = false
defaults.entry.textFormat.size = 18
defaults.entry.textFormat.letterSpacing = 0.8
defaults.entry.textFormat.kerning = false
defaults.entry.textFormat.leftMargin = 0
defaults.entry.textFormat.rightMargin = 0
defaults.entry.textFormat.indent = 0
defaults.entry.textFormat.leading = 0
defaults.label.textFormat.font = '$EverywhereMediumFont'
defaults.label.textFormat.align = right
defaults.label.textFormat.bold = false
defaults.label.textFormat.italic = false
defaults.label.textFormat.underline = false
defaults.label.textFormat.size = 16
defaults.label.textFormat.letterSpacing = 0.8
defaults.label.textFormat.kerning = false
defaults.label.textFormat.leftMargin = 0
defaults.label.textFormat.rightMargin = 0
defaults.label.textFormat.indent = 0
defaults.label.textFormat.leading = 0
; ICONS -------------------------------------------------------
columns.equipColumn.type = EQUIP_ICON
columns.equipColumn.passive = true
columns.equipColumn.states = 1
columns.equipColumn.indent = -28
columns.equipColumn.icon.size = n_iconSize
columns.equipColumn.border = <0, 10, 3, 3> ; left right top bottom
columns.equipColumn.state1.label.text = ' '
columns.iconColumn.type = ITEM_ICON
columns.iconColumn.states = 2
columns.iconColumn.icon.size = n_iconSize
columns.iconColumn.border = <0, 3, 3, 3> ; left right top bottom
columns.iconColumn.state1.label.text = ' '
columns.iconColumn.state1.sortAttributes = <type, formType, subType, weightClass, material, infoDamage, infoArmor, infoSchoolName, actorValue, resistance, skillLevel, magnitude, duration, isRead, text>
columns.iconColumn.state1.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.iconColumn.state2.label.text = ' '
columns.iconColumn.state2.label.arrowDown = true
columns.iconColumn.state2.sortAttributes = <type, formType, subType, weightClass, material, infoDamage, infoArmor, infoSchoolName, actorValue, resistance, skillLevel, magnitude, duration, isRead, text>
columns.iconColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | CASEINSENSITIVE}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | CASEINSENSITIVE}>
; ITEM NAME COLUMN -------------------------------------------------------
columns.itemNameColumn.type = NAME
columns.itemNameColumn.name = '$NAME'
columns.itemNameColumn.states = 4
columns.itemNameColumn.weight = 1.0
columns.itemNameColumn.border = a_textBorder
columns.itemNameColumn.label.textFormat.align = left
columns.itemNameColumn.state1.label.text = '$NAME'
columns.itemNameColumn.state1.entry.text = @text
columns.itemNameColumn.state1.sortOptions = {ASCENDING | CASEINSENSITIVE}
columns.itemNameColumn.state2.label.text = '$EQUIPPED'
columns.itemNameColumn.state2.entry.text = @text
columns.itemNameColumn.state2.sortAttributes = <isEquipped, equipState, text>
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 = <isStolen, text>
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 = <isEnchanted, text>
columns.itemNameColumn.state4.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ARMOR RATING COLUMN -------------------------------------------------------
columns.arColumn.type = TEXT
columns.arColumn.name = '$ARMOR'
columns.arColumn.states = 2
columns.arColumn.width = 0.09
columns.arColumn.border = a_textBorder
columns.arColumn.state1.label.text = '$ARM'
columns.arColumn.state1.label.arrowDown = true
columns.arColumn.state1.entry.text = @infoArmor
columns.arColumn.state1.sortAttributes = <infoArmor, text>
columns.arColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.arColumn.state2.label.text = '$ARM'
columns.arColumn.state2.entry.text = @infoArmor
columns.arColumn.state2.sortAttributes = <infoArmor, text>
columns.arColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; SUBTYPE COLUMN -------------------------------------------------------
columns.subTypeColumn.type = TEXT
columns.subTypeColumn.name = '$TYPE'
columns.subTypeColumn.states = 2
columns.subTypeColumn.width = 0.15
columns.subTypeColumn.border = a_textBorder
columns.subTypeColumn.state1.label.text = '$TYPE'
columns.subTypeColumn.state1.entry.text = @subTypeDisplay
columns.subTypeColumn.state1.sortAttributes = <subTypeDisplay, text>
columns.subTypeColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.subTypeColumn.state2.label.text = '$TYPE'
columns.subTypeColumn.state2.entry.text = @subTypeDisplay
columns.subTypeColumn.state2.label.arrowDown = true
columns.subTypeColumn.state2.sortAttributes = <subTypeDisplay, text>
columns.subTypeColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; MATERIAL COLUMN -------------------------------------------------------
columns.materialColumn.type = TEXT
columns.materialColumn.name = '$MATERIAL'
columns.materialColumn.states = 2
columns.materialColumn.width = 0.10
columns.materialColumn.border = a_textBorder
columns.materialColumn.hidden = true
columns.materialColumn.state1.label.text = '$MAT'
columns.materialColumn.state1.entry.text = @materialDisplay
columns.materialColumn.state1.sortAttributes = <materialDisplay, text>
columns.materialColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.materialColumn.state2.label.text = '$MAT'
columns.materialColumn.state2.entry.text = @materialDisplay
columns.materialColumn.state2.label.arrowDown = true
columns.materialColumn.state2.sortAttributes = <materialDisplay, text>
columns.materialColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; CLASS COLUMN -------------------------------------------------------
columns.classColumn.type = TEXT
columns.classColumn.name = '$CLASS'
columns.classColumn.states = 2
columns.classColumn.width = 0.10
columns.classColumn.border = a_textBorder
columns.classColumn.state1.label.text = '$CLASS'
columns.classColumn.state1.entry.text = @weightClassDisplay
columns.classColumn.state1.sortAttributes = <weightClassDisplay, text>
columns.classColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.classColumn.state2.label.text = '$CLASS'
columns.classColumn.state2.entry.text = @weightClassDisplay
columns.classColumn.state2.label.arrowDown = true
columns.classColumn.state2.sortAttributes = <weightClassDisplay, text>
columns.classColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; MAGNITUDE COLUMN -------------------------------------------------------
columns.magnitudeColumn.type = TEXT
columns.magnitudeColumn.name = '$MAGNITUDE'
columns.magnitudeColumn.states = 2
columns.magnitudeColumn.width = 0.09
columns.magnitudeColumn.border = a_textBorder
columns.magnitudeColumn.state1.label.text = '$MAG'
columns.magnitudeColumn.state1.label.arrowDown = true
columns.magnitudeColumn.state1.entry.text = @magnitude
columns.magnitudeColumn.state1.sortAttributes = <magnitude, text>
columns.magnitudeColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magnitudeColumn.state2.label.text = '$MAG'
columns.magnitudeColumn.state2.entry.text = @magnitude
columns.magnitudeColumn.state2.sortAttributes = <magnitude, text>
columns.magnitudeColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; DURATION COLUMN -------------------------------------------------------
columns.durationColumn.type = TEXT
columns.durationColumn.name = '$TIME'
columns.durationColumn.states = 2
columns.durationColumn.width = 0.09
columns.durationColumn.border = a_textBorder
columns.durationColumn.state1.label.text = '$TIME'
columns.durationColumn.state1.label.arrowDown = true
columns.durationColumn.state1.entry.text = @duration
columns.durationColumn.state1.sortAttributes = <duration, text>
columns.durationColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.durationColumn.state2.label.text = '$TIME'
columns.durationColumn.state2.entry.text = @duration
columns.durationColumn.state2.sortAttributes = <duration, text>
columns.durationColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; MAGIC MAGNITUDE COLUMN -------------------------------------------------------
columns.magicMagnitudeColumn.type = TEXT
columns.magicMagnitudeColumn.name = '$MAGNITUDE'
columns.magicMagnitudeColumn.states = 2
columns.magicMagnitudeColumn.width = 0.15
columns.magicMagnitudeColumn.border = a_textBorder
columns.magicMagnitudeColumn.state1.label.text = '$MAG'
columns.magicMagnitudeColumn.state1.label.arrowDown = true
columns.magicMagnitudeColumn.state1.entry.text = @magnitude
columns.magicMagnitudeColumn.state1.sortAttributes = <magnitude, text>
columns.magicMagnitudeColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magicMagnitudeColumn.state2.label.text = '$MAG'
columns.magicMagnitudeColumn.state2.entry.text = @magnitude
columns.magicMagnitudeColumn.state2.sortAttributes = <magnitude, text>
columns.magicMagnitudeColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; MAGIC DURATION COLUMN -------------------------------------------------------
columns.magicDurationColumn.type = TEXT
columns.magicDurationColumn.name = '$TIME'
columns.magicDurationColumn.states = 2
columns.magicDurationColumn.width = 0.15
columns.magicDurationColumn.border = a_textBorder
columns.magicDurationColumn.state1.label.text = '$TIME'
columns.magicDurationColumn.state1.label.arrowDown = true
columns.magicDurationColumn.state1.entry.text = @duration
columns.magicDurationColumn.state1.sortAttributes = <duration, text>
columns.magicDurationColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magicDurationColumn.state2.label.text = '$TIME'
columns.magicDurationColumn.state2.entry.text = @duration
columns.magicDurationColumn.state2.sortAttributes = <duration, text>
columns.magicDurationColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; DAMAGE COLUMN -------------------------------------------------------
columns.damageColumn.type = TEXT
columns.damageColumn.name = '$DAMAGE'
columns.damageColumn.states = 2
columns.damageColumn.width = 0.09
columns.damageColumn.border = a_textBorder
columns.damageColumn.state1.label.text = '$DAM'
columns.damageColumn.state1.label.arrowDown = true
columns.damageColumn.state1.entry.text = @infoDamage
columns.damageColumn.state1.sortAttributes = <infoDamage, text>
columns.damageColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.damageColumn.state2.label.text = '$DAM'
columns.damageColumn.state2.entry.text = @infoDamage
columns.damageColumn.state2.sortAttributes = <infoDamage, text>
columns.damageColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; WEIGHT COLUMN -------------------------------------------------------
columns.weightColumn.type = TEXT
columns.weightColumn.name = '$WEIGHT'
columns.weightColumn.states = 2
columns.weightColumn.width = 0.09
columns.weightColumn.border = a_textBorder
columns.weightColumn.state1.label.text = '$WGT'
columns.weightColumn.state1.label.arrowDown = true
columns.weightColumn.state1.entry.text = @infoWeight
columns.weightColumn.state1.sortAttributes = <infoWeight, text>
columns.weightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.weightColumn.state2.label.text = '$WGT'
columns.weightColumn.state2.entry.text = @infoWeight
columns.weightColumn.state2.sortAttributes = <infoWeight, text>
columns.weightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; VALUE COLUMN -------------------------------------------------------
columns.valueColumn.type = TEXT
columns.valueColumn.name = '$VALUE'
columns.valueColumn.states = 2
columns.valueColumn.width = 0.09
columns.valueColumn.border = a_textBorder
columns.valueColumn.state1.label.text = '$VAL'
columns.valueColumn.state1.label.arrowDown = true
columns.valueColumn.state1.entry.text = @infoValue
columns.valueColumn.state1.sortAttributes = <infoValue, text>
columns.valueColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.valueColumn.state2.label.text = '$VAL'
columns.valueColumn.state2.entry.text = @infoValue
columns.valueColumn.state2.sortAttributes = <infoValue, text>
columns.valueColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; VALUE/WEIGHT COLUMN -------------------------------------------------------
columns.valueWeightColumn.type = TEXT
columns.valueWeightColumn.name = '$VALUE/WEIGHT'
columns.valueWeightColumn.states = 2
columns.valueWeightColumn.width = 0.09
columns.valueWeightColumn.border = a_textBorder
columns.valueWeightColumn.hidden = true
columns.valueWeightColumn.state1.label.text = '$V/W'
columns.valueWeightColumn.state1.label.arrowDown = true
columns.valueWeightColumn.state1.entry.text = @infoValueWeight
columns.valueWeightColumn.state1.sortAttributes = <infoValueWeight, text>
columns.valueWeightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.valueWeightColumn.state2.label.text = '$V/W'
columns.valueWeightColumn.state2.entry.text = @infoValueWeight
columns.valueWeightColumn.state2.sortAttributes = <infoValueWeight, text>
columns.valueWeightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; MAGIC NAME COLUMN -------------------------------------------------------
columns.magicNameColumn.type = NAME
columns.magicNameColumn.name = '$NAME'
columns.magicNameColumn.states = 2
columns.magicNameColumn.weight = 1.0
columns.magicNameColumn.border = a_textBorder
columns.magicNameColumn.label.textFormat.align = left
columns.magicNameColumn.state1.label.text = '$NAME'
columns.magicNameColumn.state1.entry.text = @text
columns.magicNameColumn.state1.sortOptions = {ASCENDING | CASEINSENSITIVE}
columns.magicNameColumn.state2.label.text = '$FAVORITE'
columns.magicNameColumn.state2.entry.text = @text
columns.magicNameColumn.state2.sortAttributes = <favorite, text>
columns.magicNameColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magicNameColumn.state2.playerOnly = true
; SPELL COST COLUMN -------------------------------------------
columns.spellCostColumn.type = TEXT
columns.spellCostColumn.name = '$SPELL COST'
columns.spellCostColumn.states = 2
columns.spellCostColumn.width = 0.15
columns.spellCostColumn.border = a_textBorder
columns.spellCostColumn.state1.label.text = '$COST'
columns.spellCostColumn.state1.label.arrowDown = true
columns.spellCostColumn.state1.entry.text = @spellCostDisplay
columns.spellCostColumn.state1.sortAttributes = <infoSpellCost, text>
columns.spellCostColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.spellCostColumn.state2.label.text = '$COST'
columns.spellCostColumn.state2.label.arrowDown = false
columns.spellCostColumn.state2.entry.text = @spellCostDisplay
columns.spellCostColumn.state2.sortAttributes = <infoSpellCost, text>
columns.spellCostColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; WORD 1 COLUMN -------------------------------------------
columns.word0Column.type = TEXT
columns.word0Column.name = '$FIRST WORD'
columns.word0Column.states = 2
columns.word0Column.width = 0.2
columns.word0Column.border = a_textBorder
columns.word0Column.state1.label.text = '$FIRST WORD'
columns.word0Column.state1.label.arrowDown = true
columns.word0Column.state1.entry.text = @word0
columns.word0Column.state1.sortAttributes = <word0Recharge, text>
columns.word0Column.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word0Column.state1.colorAttribute = word0Color
columns.word0Column.state2.label.text = '$FIRST WORD'
columns.word0Column.state2.label.arrowDown = false
columns.word0Column.state2.entry.text = @word0
columns.word0Column.state2.sortAttributes = <word0Recharge, text>
columns.word0Column.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word0Column.state2.colorAttribute = word0Color
; WORD 2 COLUMN -------------------------------------------
columns.word1Column.type = TEXT
columns.word1Column.name = '$SECOND WORD'
columns.word1Column.states = 2
columns.word1Column.width = 0.2
columns.word1Column.border = a_textBorder
columns.word1Column.state1.label.text = '$SECOND WORD'
columns.word1Column.state1.label.arrowDown = true
columns.word1Column.state1.entry.text = @word1
columns.word1Column.state1.sortAttributes = <word1Recharge, text>
columns.word1Column.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word1Column.state1.colorAttribute = word1Color
columns.word1Column.state2.label.text = '$SECOND WORD'
columns.word1Column.state2.label.arrowDown = false
columns.word1Column.state2.entry.text = @word1
columns.word1Column.state2.sortAttributes = <word1Recharge, text>
columns.word1Column.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word1Column.state2.colorAttribute = word1Color
; WORD 3 COLUMN -------------------------------------------
columns.word2Column.type = TEXT
columns.word2Column.name = '$THIRD WORD'
columns.word2Column.states = 2
columns.word2Column.width = 0.2
columns.word2Column.border = a_textBorder
columns.word2Column.state1.label.text = '$THIRD WORD'
columns.word2Column.state1.label.arrowDown = true
columns.word2Column.state1.entry.text = @word2
columns.word2Column.state1.sortAttributes = <word2Recharge, text>
columns.word2Column.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word2Column.state1.colorAttribute = word2Color
columns.word2Column.state2.label.text = '$THIRD WORD'
columns.word2Column.state2.label.arrowDown = false
columns.word2Column.state2.entry.text = @word2
columns.word2Column.state2.sortAttributes = <word2Recharge, text>
columns.word2Column.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word2Column.state2.colorAttribute = word2Color
; SCHOOL COLUMN -------------------------------------------
columns.schoolColumn.type = TEXT
columns.schoolColumn.name = '$SCHOOL'
columns.schoolColumn.states = 2
columns.schoolColumn.width = 0.15
columns.schoolColumn.border = a_textBorder
columns.schoolColumn.state1.label.text = '$SCHOOL'
columns.schoolColumn.state1.label.arrowDown = false
columns.schoolColumn.state1.entry.text = @infoSchoolName
columns.schoolColumn.state1.sortAttributes = <infoSchoolName, text>
columns.schoolColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.schoolColumn.state2.label.text = '$SCHOOL'
columns.schoolColumn.state2.label.arrowDown = true
columns.schoolColumn.state2.entry.text = @infoSchoolName
columns.schoolColumn.state2.sortAttributes = <infoSchoolName, text>
columns.schoolColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; LEVEL COLUMN -------------------------------------------
columns.levelColumn.type = TEXT
columns.levelColumn.name = '$SKILL LEVEL'
columns.levelColumn.states = 2
columns.levelColumn.width = 0.15
columns.levelColumn.border = a_textBorder
columns.levelColumn.state1.label.text = '$LEVEL'
columns.levelColumn.state1.label.arrowDown = false
columns.levelColumn.state1.entry.text = @infoCastLevel
columns.levelColumn.state1.sortAttributes = <skillLevel, text>
columns.levelColumn.state1.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.levelColumn.state2.label.text = '$LEVEL'
columns.levelColumn.state2.label.arrowDown = true
columns.levelColumn.state2.entry.text = @infoCastLevel
columns.levelColumn.state2.sortAttributes = <skillLevel, text>
columns.levelColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; TIME REMAINING COLUMN -------------------------------------------
columns.timeRemainingColumn.type = TEXT
columns.timeRemainingColumn.name = '$TIME LEFT'
columns.timeRemainingColumn.states = 2
columns.timeRemainingColumn.width = 0.333
columns.timeRemainingColumn.label.textFormat.align = center
columns.timeRemainingColumn.entry.textFormat.align = center
columns.timeRemainingColumn.state1.label.text = '$TIME LEFT'
columns.timeRemainingColumn.state1.label.arrowDown = false
columns.timeRemainingColumn.state1.entry.text = @timeRemainingDisplay
columns.timeRemainingColumn.state1.sortAttributes = <timeRemaining, text>
columns.timeRemainingColumn.state1.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.timeRemainingColumn.state2.label.text = '$TIME LEFT'
columns.timeRemainingColumn.state2.label.arrowDown = true
columns.timeRemainingColumn.state2.entry.text = @timeRemainingDisplay
columns.timeRemainingColumn.state2.sortAttributes = <timeRemaining, text>
columns.timeRemainingColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; EFFECT ITEM COLUMN -------------------------------------------
columns.effectItemColumn.type = TEXT
columns.effectItemColumn.name = '$SOURCE'
columns.effectItemColumn.states = 2
columns.effectItemColumn.width = 0.333
columns.effectItemColumn.label.textFormat.align = right
columns.effectItemColumn.entry.textFormat.align = right
columns.effectItemColumn.state1.label.text = '$SOURCE'
columns.effectItemColumn.state1.label.arrowDown = false
columns.effectItemColumn.state1.entry.text = @cardName
columns.effectItemColumn.state1.sortAttributes = <cardName, text>
columns.effectItemColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.effectItemColumn.state2.label.text = '$SOURCE'
columns.effectItemColumn.state2.label.arrowDown = true
columns.effectItemColumn.state2.entry.text = @cardName
columns.effectItemColumn.state2.sortAttributes = <cardName, text>
columns.effectItemColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; CRAFT NAME COLUMN -------------------------------------------------------
columns.craftNameColumn.type = NAME
columns.craftNameColumn.name = '$NAME'
columns.craftNameColumn.states = 1
columns.craftNameColumn.weight = 1.0
columns.craftNameColumn.border = a_textBorder
columns.craftNameColumn.label.textFormat.align = left
columns.craftNameColumn.state1.label.text = '$NAME'
columns.craftNameColumn.state1.entry.text = @text
columns.craftNameColumn.state1.sortAttributes = <text>
columns.craftNameColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}>
; DISENCHANT EFFECT COLUMN -------------------------------------------------------
columns.disenchantEffectColumn.type = TEXT
columns.disenchantEffectColumn.name = '$EFFECT'
columns.disenchantEffectColumn.states = 2
columns.disenchantEffectColumn.width = 0.4
columns.disenchantEffectColumn.label.textFormat.align = right
columns.disenchantEffectColumn.entry.textFormat.align = right
columns.disenchantEffectColumn.state1.label.text = '$EFFECT'
columns.disenchantEffectColumn.state1.label.arrowDown = false
columns.disenchantEffectColumn.state1.entry.text = @effectName
columns.disenchantEffectColumn.state1.sortAttributes = <effectName, value, text>
columns.disenchantEffectColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.disenchantEffectColumn.state2.label.text = '$EFFECT'
columns.disenchantEffectColumn.state2.label.arrowDown = true
columns.disenchantEffectColumn.state2.entry.text = @effectName
columns.disenchantEffectColumn.state2.sortAttributes = <effectName, value, text>
columns.disenchantEffectColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; SOUL SIZE COLUMN -------------------------------------------------------
columns.soulSizeColumn.type = TEXT
columns.soulSizeColumn.name = '$HK19'
columns.soulSizeColumn.states = 2
columns.soulSizeColumn.width = 0.15
columns.soulSizeColumn.label.textFormat.align = right
columns.soulSizeColumn.entry.textFormat.align = right
columns.soulSizeColumn.state1.label.text = '$HK19'
columns.soulSizeColumn.state1.label.arrowDown = false
columns.soulSizeColumn.state1.entry.text = @soulSizeDisplay
columns.soulSizeColumn.state1.sortAttributes = <soulSize, text>
columns.soulSizeColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.soulSizeColumn.state2.label.text = '$HK19'
columns.soulSizeColumn.state2.label.arrowDown = true
columns.soulSizeColumn.state2.entry.text = @soulSizeDisplay
columns.soulSizeColumn.state2.sortAttributes = <soulSize, text>
columns.soulSizeColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ALCHEMY WEIGHT COLUMN -------------------------------------------------------
columns.alchWeightColumn.type = TEXT
columns.alchWeightColumn.name = '$WEIGHT'
columns.alchWeightColumn.states = 2
columns.alchWeightColumn.width = 0.14
columns.alchWeightColumn.border = a_textBorder
columns.alchWeightColumn.state1.label.text = '$WGT'
columns.alchWeightColumn.state1.label.arrowDown = true
columns.alchWeightColumn.state1.entry.text = @infoWeight
columns.alchWeightColumn.state1.sortAttributes = <infoWeight, text>
columns.alchWeightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.alchWeightColumn.state2.label.text = '$WGT'
columns.alchWeightColumn.state2.entry.text = @infoWeight
columns.alchWeightColumn.state2.sortAttributes = <infoWeight, text>
columns.alchWeightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ALCHEMY VALUE COLUMN -------------------------------------------------------
columns.alchValueColumn.type = TEXT
columns.alchValueColumn.name = '$VALUE'
columns.alchValueColumn.states = 2
columns.alchValueColumn.width = 0.14
columns.alchValueColumn.border = a_textBorder
columns.alchValueColumn.state1.label.text = '$VAL'
columns.alchValueColumn.state1.label.arrowDown = true
columns.alchValueColumn.state1.entry.text = @infoValue
columns.alchValueColumn.state1.sortAttributes = <infoValue, text>
columns.alchValueColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.alchValueColumn.state2.label.text = '$VAL'
columns.alchValueColumn.state2.entry.text = @infoValue
columns.alchValueColumn.state2.sortAttributes = <infoValue, text>
columns.alchValueColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ALCHEMY VALUE/WEIGHT COLUMN -------------------------------------------------------
columns.alchValueWeightColumn.type = TEXT
columns.alchValueWeightColumn.name = '$VALUE/WEIGHT'
columns.alchValueWeightColumn.states = 2
columns.alchValueWeightColumn.width = 0.14
columns.alchValueWeightColumn.border = a_textBorder
columns.alchValueWeightColumn.hidden = true
columns.alchValueWeightColumn.state1.label.text = '$V/W'
columns.alchValueWeightColumn.state1.label.arrowDown = true
columns.alchValueWeightColumn.state1.entry.text = @infoValueWeight
columns.alchValueWeightColumn.state1.sortAttributes = <infoValueWeight, text>
columns.alchValueWeightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.alchValueWeightColumn.state2.label.text = '$V/W'
columns.alchValueWeightColumn.state2.entry.text = @infoValueWeight
columns.alchValueWeightColumn.state2.sortAttributes = <infoValueWeight, text>
columns.alchValueWeightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ITEM VIEWS -------------------------------------------------------
views.defaultItemView.primaryColumn = itemNameColumn
views.defaultItemView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, weightColumn, valueColumn, valueWeightColumn>
views.weaponView.primaryColumn = itemNameColumn
views.weaponView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, materialColumn, damageColumn, weightColumn, valueColumn, valueWeightColumn>
views.weaponView.category = <Inventory.FILTERFLAG_INV_WEAPONS, Inventory.FILTERFLAG_CONTAINER_WEAPONS>
views.armorView.primaryColumn = itemNameColumn
views.armorView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, classColumn, materialColumn, arColumn, weightColumn, valueColumn, valueWeightColumn>
views.armorView.category = <Inventory.FILTERFLAG_INV_ARMOR, Inventory.FILTERFLAG_CONTAINER_ARMOR>
views.magicItemView.primaryColumn = itemNameColumn
views.magicItemView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, magnitudeColumn, durationColumn, weightColumn, valueColumn, valueWeightColumn>
views.magicItemView.category = <Inventory.FILTERFLAG_INV_POTIONS, Inventory.FILTERFLAG_INV_SCROLLS, Inventory.FILTERFLAG_CONTAINER_POTIONS, Inventory.FILTERFLAG_CONTAINER_SCROLLS>
views.keysView.primaryColumn = itemNameColumn
views.keysView.columns = <equipColumn, iconColumn, itemNameColumn, weightColumn, valueColumn, valueWeightColumn>
views.keysView.category = <Inventory.FILTERFLAG_INV_KEYS, Inventory.FILTERFLAG_CONTAINER_KEYS>
; MAGIC VIEWS -------------------------------------------------------
views.defaultMagicView.primaryColumn = magicNameColumn
views.defaultMagicView.columns = <equipColumn, iconColumn, magicNameColumn, levelColumn, magicMagnitudeColumn, magicDurationColumn, spellCostColumn>
views.allMagicView.primaryColumn = magicNameColumn
views.allMagicView.columns = <equipColumn, iconColumn, magicNameColumn, schoolColumn, levelColumn, spellCostColumn>
views.allMagicView.category = <Inventory.FILTERFLAG_MAGIC_ALL, Inventory.FILTERFLAG_MAGIC_FAVORITES>
views.shoutsView.primaryColumn = magicNameColumn
views.shoutsView.columns = <equipColumn, iconColumn, magicNameColumn, word0Column, word1Column, word2Column>
views.shoutsView.category = Inventory.FILTERFLAG_MAGIC_SHOUTS
views.powersView.primaryColumn = magicNameColumn
views.powersView.columns = <equipColumn, iconColumn, magicNameColumn, magicDurationColumn, spellCostColumn>
views.powersView.category = Inventory.FILTERFLAG_MAGIC_POWERS
views.activeEffectView.primaryColumn = magicNameColumn
views.activeEffectView.columns = <equipColumn, iconColumn, magicNameColumn, timeRemainingColumn, effectItemColumn>
views.activeEffectView.category = Inventory.FILTERFLAG_MAGIC_ACTIVEEFFECTS
; CRAFTING VIEWS -------------------------------------------------------
views.defaultCraftingView.primaryColumn = craftNameColumn
views.defaultCraftingView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, weightColumn, valueColumn, valueWeightColumn>
views.disenchantView.primaryColumn = craftNameColumn
views.disenchantView.columns = <equipColumn, iconColumn, craftNameColumn, disenchantEffectColumn, subTypeColumn, weightColumn, valueColumn, valueWeightColumn>
views.disenchantView.category = Inventory.FILTERFLAG_ENCHANTING_DISENCHANT
views.enchantItemView.primaryColumn = craftNameColumn
views.enchantItemView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, materialColumn, weightColumn, valueColumn, valueWeightColumn>
views.enchantItemView.category = Inventory.FILTERFLAG_ENCHANTING_ITEM
views.enchantEnchantmentView.primaryColumn = craftNameColumn
views.enchantEnchantmentView.columns = <equipColumn, iconColumn, craftNameColumn>
views.enchantEnchantmentView.category = Inventory.FILTERFLAG_ENCHANTING_ENCHANTMENT
views.enchantSoulView.primaryColumn = craftNameColumn
views.enchantSoulView.columns = <equipColumn, iconColumn, craftNameColumn, soulSizeColumn, weightColumn, valueColumn, valueWeightColumn>
views.enchantSoulView.category = Inventory.FILTERFLAG_ENCHANTING_SOULGEM
views.craftWeaponView.primaryColumn = craftNameColumn
views.craftWeaponView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, materialColumn, damageColumn, weightColumn, valueColumn, valueWeightColumn>
views.craftWeaponView.category = <Inventory.FILTERFLAG_CUST_CRAFT_WEAPONS, Inventory.FILTERFLAG_CUST_CRAFT_AMMO>
views.craftArmorView.primaryColumn = craftNameColumn
views.craftArmorView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, classColumn, materialColumn, arColumn, weightColumn, valueColumn, valueWeightColumn>
views.craftArmorView.category = Inventory.FILTERFLAG_CUST_CRAFT_ARMOR
views.alchemyView.primaryColumn = craftNameColumn
views.alchemyView.columns = <equipColumn, iconColumn, craftNameColumn, alchWeightColumn, alchValueColumn, alchValueWeightColumn>
; LAYOUTS -------------------------------------------------------
layouts.itemListLayout.name = 'ItemListLayout'
layouts.itemListLayout.views = <weaponView, armorView, magicItemView, keysView, defaultItemView>
layouts.magicListLayout.name = 'MagicListLayout'
layouts.magicListLayout.views = <shoutsView, powersView, activeEffectView, allMagicView, defaultMagicView>
layouts.enchantListLayout.name = 'EnchantListLayout'
layouts.enchantListLayout.views = <disenchantView, enchantItemView, enchantEnchantmentView, enchantSoulView, defaultCraftingView>
layouts.constructListLayout.name = 'ConstructListLayout'
layouts.constructListLayout.views = <craftWeaponView, craftArmorView, defaultCraftingView>
layouts.smithingListLayout.name = 'SmithingListLayout'
layouts.smithingListLayout.views = <defaultCraftingView>
layouts.alchemyListLayout.name = 'AlchemyListLayout'
layouts.alchemyListLayout.views = <alchemyView>
================================================
FILE: dist/.gitignore
================================================
*.pex
*.swf
*.bak
*.bsa
*.bsl
Archive.log
================================================
FILE: dist/Data/Interface/skyui/config.txt
================================================
; =====================================================================================================================
[Input]
; =====================================================================================================================
controls.pc.search = 57 ; SPACE
controls.pc.switchTab = 56 ; ALT
controls.pc.equipMode = 42 ; LSHIFT
controls.gamepad.switchTab = 271 ; BACK
controls.gamepad.prevColumn = 274 ; LEFT_SHOULDER
controls.gamepad.nextColumn = 275 ; RIGHT_SHOULDER
controls.gamepad.sortOrder = 272 ; LEFT_THUMB
; =====================================================================================================================
[SearchBox]
; =====================================================================================================================
autoupdate.enable = true
autoupdate.delay = 0
; =====================================================================================================================
[ItemInfo]
; =====================================================================================================================
itemcard.align = center
itemcard.xOffset = 0
itemcard.yOffset = 0
; =====================================================================================================================
[ItemList]
; =====================================================================================================================
quantityMenu.minCount = 6 ; Number of items required to trigger quantity dialog. 0 is disabled
; =====================================================================================================================
[Appearance]
; =====================================================================================================================
icons.category.source = 'skyui/icons_category_psychosteve.swf'
icons.item.source = 'skyui/icons_item_psychosteve.swf'
icons.item.noColor = false
icons.item.showStolen = true
colors.text.enabled = 0xffffff
colors.stolen.enabled = 0xffffff
colors.negative.enabled = 0xff0000
colors.text.disabled = 0x4c4c4c
colors.stolen.disabled = 0x4c4c4c
colors.negative.disabled = 0x800000
; =====================================================================================================================
[ListLayout]
; =====================================================================================================================
vars.a_textBorder.value = <0, 0, 1.1, 0> ; left right top bottom
vars.n_iconSize.value = 18
defaults.entryWidth = 530
; Default text format defaults -------------------------------------------------------
defaults.entry.textFormat.font = '$EverywhereMediumFont'
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.letterSpacing = 0.8
defaults.entry.textFormat.kerning = false
defaults.entry.textFormat.leftMargin = 0
defaults.entry.textFormat.rightMargin = 0
defaults.entry.textFormat.indent = 0
defaults.entry.textFormat.leading = 0
defaults.label.textFormat.font = '$EverywhereMediumFont'
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.letterSpacing = 0.8
defaults.label.textFormat.kerning = false
defaults.label.textFormat.leftMargin = 0
defaults.label.textFormat.rightMargin = 0
defaults.label.textFormat.indent = 0
defaults.label.textFormat.leading = 0
; ICONS -------------------------------------------------------
columns.equipColumn.type = EQUIP_ICON
columns.equipColumn.passive = true
columns.equipColumn.states = 1
columns.equipColumn.indent = -28
columns.equipColumn.icon.size = n_iconSize
columns.equipColumn.border = <0, 10, 3, 3> ; left right top bottom
columns.equipColumn.state1.label.text = ' '
columns.iconColumn.type = ITEM_ICON
columns.iconColumn.states = 2
columns.iconColumn.icon.size = n_iconSize
columns.iconColumn.border = <0, 3, 3, 3> ; left right top bottom
columns.iconColumn.state1.label.text = ' '
columns.iconColumn.state1.sortAttributes = <type, formType, subType, weightClass, material, infoDamage, infoArmor, infoSchoolName, actorValue, resistance, skillLevel, magnitude, duration, isRead, text>
columns.iconColumn.state1.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.iconColumn.state2.label.text = ' '
columns.iconColumn.state2.label.arrowDown = true
columns.iconColumn.state2.sortAttributes = <type, formType, subType, weightClass, material, infoDamage, infoArmor, infoSchoolName, actorValue, resistance, skillLevel, magnitude, duration, isRead, text>
columns.iconColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | CASEINSENSITIVE}, {DESCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {ASCENDING | NUMERIC}, {DESCENDING | NUMERIC}, {DESCENDING | CASEINSENSITIVE}>
; ITEM NAME COLUMN -------------------------------------------------------
columns.itemNameColumn.type = NAME
columns.itemNameColumn.name = '$NAME'
columns.itemNameColumn.states = 4
columns.itemNameColumn.weight = 1.0
columns.itemNameColumn.border = a_textBorder
columns.itemNameColumn.label.textFormat.align = left
columns.itemNameColumn.state1.label.text = '$NAME'
columns.itemNameColumn.state1.entry.text = @text
columns.itemNameColumn.state1.sortAttributes = <newItem, text>
columns.itemNameColumn.state1.sortOptions = {ASCENDING | CASEINSENSITIVE}
columns.itemNameColumn.state2.label.text = '$EQUIPPED'
columns.itemNameColumn.state2.entry.text = @text
columns.itemNameColumn.state2.sortAttributes = <newItem, isEquipped, equipState, text>
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 = <newItem, isStolen, text>
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 = <newItem, isEnchanted, text>
columns.itemNameColumn.state4.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ARMOR RATING COLUMN -------------------------------------------------------
columns.arColumn.type = TEXT
columns.arColumn.name = '$ARMOR'
columns.arColumn.states = 2
columns.arColumn.width = 0.09
columns.arColumn.border = a_textBorder
columns.arColumn.state1.label.text = '$ARM'
columns.arColumn.state1.label.arrowDown = true
columns.arColumn.state1.entry.text = @infoArmor
columns.arColumn.state1.sortAttributes = <infoArmor, text>
columns.arColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.arColumn.state2.label.text = '$ARM'
columns.arColumn.state2.entry.text = @infoArmor
columns.arColumn.state2.sortAttributes = <infoArmor, text>
columns.arColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; SUBTYPE COLUMN -------------------------------------------------------
columns.subTypeColumn.type = TEXT
columns.subTypeColumn.name = '$TYPE'
columns.subTypeColumn.states = 2
columns.subTypeColumn.width = 0.15
columns.subTypeColumn.border = a_textBorder
columns.subTypeColumn.state1.label.text = '$TYPE'
columns.subTypeColumn.state1.entry.text = @subTypeDisplay
columns.subTypeColumn.state1.sortAttributes = <subTypeDisplay, text>
columns.subTypeColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.subTypeColumn.state2.label.text = '$TYPE'
columns.subTypeColumn.state2.entry.text = @subTypeDisplay
columns.subTypeColumn.state2.label.arrowDown = true
columns.subTypeColumn.state2.sortAttributes = <subTypeDisplay, text>
columns.subTypeColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; MATERIAL COLUMN -------------------------------------------------------
columns.materialColumn.type = TEXT
columns.materialColumn.name = '$MATERIAL'
columns.materialColumn.states = 2
columns.materialColumn.width = 0.10
columns.materialColumn.border = a_textBorder
columns.materialColumn.hidden = true
columns.materialColumn.state1.label.text = '$MAT'
columns.materialColumn.state1.entry.text = @materialDisplay
columns.materialColumn.state1.sortAttributes = <materialDisplay, text>
columns.materialColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.materialColumn.state2.label.text = '$MAT'
columns.materialColumn.state2.entry.text = @materialDisplay
columns.materialColumn.state2.label.arrowDown = true
columns.materialColumn.state2.sortAttributes = <materialDisplay, text>
columns.materialColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; CLASS COLUMN -------------------------------------------------------
columns.classColumn.type = TEXT
columns.classColumn.name = '$CLASS'
columns.classColumn.states = 2
columns.classColumn.width = 0.10
columns.classColumn.border = a_textBorder
columns.classColumn.state1.label.text = '$CLASS'
columns.classColumn.state1.entry.text = @weightClassDisplay
columns.classColumn.state1.sortAttributes = <weightClassDisplay, text>
columns.classColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.classColumn.state2.label.text = '$CLASS'
columns.classColumn.state2.entry.text = @weightClassDisplay
columns.classColumn.state2.label.arrowDown = true
columns.classColumn.state2.sortAttributes = <weightClassDisplay, text>
columns.classColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; MAGNITUDE COLUMN -------------------------------------------------------
columns.magnitudeColumn.type = TEXT
columns.magnitudeColumn.name = '$MAGNITUDE'
columns.magnitudeColumn.states = 2
columns.magnitudeColumn.width = 0.09
columns.magnitudeColumn.border = a_textBorder
columns.magnitudeColumn.state1.label.text = '$MAG'
columns.magnitudeColumn.state1.label.arrowDown = true
columns.magnitudeColumn.state1.entry.text = @magnitude
columns.magnitudeColumn.state1.sortAttributes = <magnitude, text>
columns.magnitudeColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magnitudeColumn.state2.label.text = '$MAG'
columns.magnitudeColumn.state2.entry.text = @magnitude
columns.magnitudeColumn.state2.sortAttributes = <magnitude, text>
columns.magnitudeColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; DURATION COLUMN -------------------------------------------------------
columns.durationColumn.type = TEXT
columns.durationColumn.name = '$TIME'
columns.durationColumn.states = 2
columns.durationColumn.width = 0.09
columns.durationColumn.border = a_textBorder
columns.durationColumn.state1.label.text = '$TIME'
columns.durationColumn.state1.label.arrowDown = true
columns.durationColumn.state1.entry.text = @duration
columns.durationColumn.state1.sortAttributes = <duration, text>
columns.durationColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.durationColumn.state2.label.text = '$TIME'
columns.durationColumn.state2.entry.text = @duration
columns.durationColumn.state2.sortAttributes = <duration, text>
columns.durationColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; MAGIC MAGNITUDE COLUMN -------------------------------------------------------
columns.magicMagnitudeColumn.type = TEXT
columns.magicMagnitudeColumn.name = '$MAGNITUDE'
columns.magicMagnitudeColumn.states = 2
columns.magicMagnitudeColumn.width = 0.15
columns.magicMagnitudeColumn.border = a_textBorder
columns.magicMagnitudeColumn.state1.label.text = '$MAG'
columns.magicMagnitudeColumn.state1.label.arrowDown = true
columns.magicMagnitudeColumn.state1.entry.text = @magnitude
columns.magicMagnitudeColumn.state1.sortAttributes = <magnitude, text>
columns.magicMagnitudeColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magicMagnitudeColumn.state2.label.text = '$MAG'
columns.magicMagnitudeColumn.state2.entry.text = @magnitude
columns.magicMagnitudeColumn.state2.sortAttributes = <magnitude, text>
columns.magicMagnitudeColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; MAGIC DURATION COLUMN -------------------------------------------------------
columns.magicDurationColumn.type = TEXT
columns.magicDurationColumn.name = '$TIME'
columns.magicDurationColumn.states = 2
columns.magicDurationColumn.width = 0.15
columns.magicDurationColumn.border = a_textBorder
columns.magicDurationColumn.state1.label.text = '$TIME'
columns.magicDurationColumn.state1.label.arrowDown = true
columns.magicDurationColumn.state1.entry.text = @duration
columns.magicDurationColumn.state1.sortAttributes = <duration, text>
columns.magicDurationColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magicDurationColumn.state2.label.text = '$TIME'
columns.magicDurationColumn.state2.entry.text = @duration
columns.magicDurationColumn.state2.sortAttributes = <duration, text>
columns.magicDurationColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; DAMAGE COLUMN -------------------------------------------------------
columns.damageColumn.type = TEXT
columns.damageColumn.name = '$DAMAGE'
columns.damageColumn.states = 2
columns.damageColumn.width = 0.09
columns.damageColumn.border = a_textBorder
columns.damageColumn.state1.label.text = '$DAM'
columns.damageColumn.state1.label.arrowDown = true
columns.damageColumn.state1.entry.text = @infoDamage
columns.damageColumn.state1.sortAttributes = <infoDamage, text>
columns.damageColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.damageColumn.state2.label.text = '$DAM'
columns.damageColumn.state2.entry.text = @infoDamage
columns.damageColumn.state2.sortAttributes = <infoDamage, text>
columns.damageColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; WEIGHT COLUMN -------------------------------------------------------
columns.weightColumn.type = TEXT
columns.weightColumn.name = '$WEIGHT'
columns.weightColumn.states = 2
columns.weightColumn.width = 0.09
columns.weightColumn.border = a_textBorder
columns.weightColumn.state1.label.text = '$WGT'
columns.weightColumn.state1.label.arrowDown = true
columns.weightColumn.state1.entry.text = @infoWeight
columns.weightColumn.state1.sortAttributes = <infoWeight, text>
columns.weightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.weightColumn.state2.label.text = '$WGT'
columns.weightColumn.state2.entry.text = @infoWeight
columns.weightColumn.state2.sortAttributes = <infoWeight, text>
columns.weightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; VALUE COLUMN -------------------------------------------------------
columns.valueColumn.type = TEXT
columns.valueColumn.name = '$VALUE'
columns.valueColumn.states = 2
columns.valueColumn.width = 0.09
columns.valueColumn.border = a_textBorder
columns.valueColumn.state1.label.text = '$VAL'
columns.valueColumn.state1.label.arrowDown = true
columns.valueColumn.state1.entry.text = @infoValue
columns.valueColumn.state1.sortAttributes = <infoValue, text>
columns.valueColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.valueColumn.state2.label.text = '$VAL'
columns.valueColumn.state2.entry.text = @infoValue
columns.valueColumn.state2.sortAttributes = <infoValue, text>
columns.valueColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; VALUE/WEIGHT COLUMN -------------------------------------------------------
columns.valueWeightColumn.type = TEXT
columns.valueWeightColumn.name = '$VALUE/WEIGHT'
columns.valueWeightColumn.states = 2
columns.valueWeightColumn.width = 0.09
columns.valueWeightColumn.border = a_textBorder
columns.valueWeightColumn.hidden = true
columns.valueWeightColumn.state1.label.text = '$V/W'
columns.valueWeightColumn.state1.label.arrowDown = true
columns.valueWeightColumn.state1.entry.text = @infoValueWeight
columns.valueWeightColumn.state1.sortAttributes = <infoValueWeight, text>
columns.valueWeightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.valueWeightColumn.state2.label.text = '$V/W'
columns.valueWeightColumn.state2.entry.text = @infoValueWeight
columns.valueWeightColumn.state2.sortAttributes = <infoValueWeight, text>
columns.valueWeightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; MAGIC NAME COLUMN -------------------------------------------------------
columns.magicNameColumn.type = NAME
columns.magicNameColumn.name = '$NAME'
columns.magicNameColumn.states = 2
columns.magicNameColumn.weight = 1.0
columns.magicNameColumn.border = a_textBorder
columns.magicNameColumn.label.textFormat.align = left
columns.magicNameColumn.state1.label.text = '$NAME'
columns.magicNameColumn.state1.entry.text = @text
columns.magicNameColumn.state1.sortOptions = {ASCENDING | CASEINSENSITIVE}
columns.magicNameColumn.state2.label.text = '$FAVORITE'
columns.magicNameColumn.state2.entry.text = @text
columns.magicNameColumn.state2.sortAttributes = <favorite, text>
columns.magicNameColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.magicNameColumn.state2.playerOnly = true
; SPELL COST COLUMN -------------------------------------------
columns.spellCostColumn.type = TEXT
columns.spellCostColumn.name = '$SPELL COST'
columns.spellCostColumn.states = 2
columns.spellCostColumn.width = 0.15
columns.spellCostColumn.border = a_textBorder
columns.spellCostColumn.state1.label.text = '$COST'
columns.spellCostColumn.state1.label.arrowDown = true
columns.spellCostColumn.state1.entry.text = @spellCostDisplay
columns.spellCostColumn.state1.sortAttributes = <infoSpellCost, text>
columns.spellCostColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.spellCostColumn.state2.label.text = '$COST'
columns.spellCostColumn.state2.label.arrowDown = false
columns.spellCostColumn.state2.entry.text = @spellCostDisplay
columns.spellCostColumn.state2.sortAttributes = <infoSpellCost, text>
columns.spellCostColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; WORD 1 COLUMN -------------------------------------------
columns.word0Column.type = TEXT
columns.word0Column.name = '$FIRST WORD'
columns.word0Column.states = 2
columns.word0Column.width = 0.2
columns.word0Column.border = a_textBorder
columns.word0Column.state1.label.text = '$FIRST WORD'
columns.word0Column.state1.label.arrowDown = true
columns.word0Column.state1.entry.text = @word0
columns.word0Column.state1.sortAttributes = <word0Recharge, text>
columns.word0Column.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word0Column.state1.colorAttribute = word0Color
columns.word0Column.state2.label.text = '$FIRST WORD'
columns.word0Column.state2.label.arrowDown = false
columns.word0Column.state2.entry.text = @word0
columns.word0Column.state2.sortAttributes = <word0Recharge, text>
columns.word0Column.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word0Column.state2.colorAttribute = word0Color
; WORD 2 COLUMN -------------------------------------------
columns.word1Column.type = TEXT
columns.word1Column.name = '$SECOND WORD'
columns.word1Column.states = 2
columns.word1Column.width = 0.2
columns.word1Column.border = a_textBorder
columns.word1Column.state1.label.text = '$SECOND WORD'
columns.word1Column.state1.label.arrowDown = true
columns.word1Column.state1.entry.text = @word1
columns.word1Column.state1.sortAttributes = <word1Recharge, text>
columns.word1Column.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word1Column.state1.colorAttribute = word1Color
columns.word1Column.state2.label.text = '$SECOND WORD'
columns.word1Column.state2.label.arrowDown = false
columns.word1Column.state2.entry.text = @word1
columns.word1Column.state2.sortAttributes = <word1Recharge, text>
columns.word1Column.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word1Column.state2.colorAttribute = word1Color
; WORD 3 COLUMN -------------------------------------------
columns.word2Column.type = TEXT
columns.word2Column.name = '$THIRD WORD'
columns.word2Column.states = 2
columns.word2Column.width = 0.2
columns.word2Column.border = a_textBorder
columns.word2Column.state1.label.text = '$THIRD WORD'
columns.word2Column.state1.label.arrowDown = true
columns.word2Column.state1.entry.text = @word2
columns.word2Column.state1.sortAttributes = <word2Recharge, text>
columns.word2Column.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word2Column.state1.colorAttribute = word2Color
columns.word2Column.state2.label.text = '$THIRD WORD'
columns.word2Column.state2.label.arrowDown = false
columns.word2Column.state2.entry.text = @word2
columns.word2Column.state2.sortAttributes = <word2Recharge, text>
columns.word2Column.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.word2Column.state2.colorAttribute = word2Color
; SCHOOL COLUMN -------------------------------------------
columns.schoolColumn.type = TEXT
columns.schoolColumn.name = '$SCHOOL'
columns.schoolColumn.states = 2
columns.schoolColumn.width = 0.15
columns.schoolColumn.border = a_textBorder
columns.schoolColumn.state1.label.text = '$SCHOOL'
columns.schoolColumn.state1.label.arrowDown = false
columns.schoolColumn.state1.entry.text = @infoSchoolName
columns.schoolColumn.state1.sortAttributes = <infoSchoolName, text>
columns.schoolColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.schoolColumn.state2.label.text = '$SCHOOL'
columns.schoolColumn.state2.label.arrowDown = true
columns.schoolColumn.state2.entry.text = @infoSchoolName
columns.schoolColumn.state2.sortAttributes = <infoSchoolName, text>
columns.schoolColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; LEVEL COLUMN -------------------------------------------
columns.levelColumn.type = TEXT
columns.levelColumn.name = '$SKILL LEVEL'
columns.levelColumn.states = 2
columns.levelColumn.width = 0.15
columns.levelColumn.border = a_textBorder
columns.levelColumn.state1.label.text = '$LEVEL'
columns.levelColumn.state1.label.arrowDown = false
columns.levelColumn.state1.entry.text = @infoCastLevel
columns.levelColumn.state1.sortAttributes = <skillLevel, text>
columns.levelColumn.state1.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.levelColumn.state2.label.text = '$LEVEL'
columns.levelColumn.state2.label.arrowDown = true
columns.levelColumn.state2.entry.text = @infoCastLevel
columns.levelColumn.state2.sortAttributes = <skillLevel, text>
columns.levelColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; TIME REMAINING COLUMN -------------------------------------------
columns.timeRemainingColumn.type = TEXT
columns.timeRemainingColumn.name = '$TIME LEFT'
columns.timeRemainingColumn.states = 2
columns.timeRemainingColumn.width = 0.333
columns.timeRemainingColumn.label.textFormat.align = center
columns.timeRemainingColumn.entry.textFormat.align = center
columns.timeRemainingColumn.state1.label.text = '$TIME LEFT'
columns.timeRemainingColumn.state1.label.arrowDown = false
columns.timeRemainingColumn.state1.entry.text = @timeRemainingDisplay
columns.timeRemainingColumn.state1.sortAttributes = <timeRemaining, text>
columns.timeRemainingColumn.state1.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.timeRemainingColumn.state2.label.text = '$TIME LEFT'
columns.timeRemainingColumn.state2.label.arrowDown = true
columns.timeRemainingColumn.state2.entry.text = @timeRemainingDisplay
columns.timeRemainingColumn.state2.sortAttributes = <timeRemaining, text>
columns.timeRemainingColumn.state2.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; EFFECT ITEM COLUMN -------------------------------------------
columns.effectItemColumn.type = TEXT
columns.effectItemColumn.name = '$SOURCE'
columns.effectItemColumn.states = 2
columns.effectItemColumn.width = 0.333
columns.effectItemColumn.label.textFormat.align = right
columns.effectItemColumn.entry.textFormat.align = right
columns.effectItemColumn.state1.label.text = '$SOURCE'
columns.effectItemColumn.state1.label.arrowDown = false
columns.effectItemColumn.state1.entry.text = @cardName
columns.effectItemColumn.state1.sortAttributes = <cardName, text>
columns.effectItemColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
columns.effectItemColumn.state2.label.text = '$SOURCE'
columns.effectItemColumn.state2.label.arrowDown = true
columns.effectItemColumn.state2.entry.text = @cardName
columns.effectItemColumn.state2.sortAttributes = <cardName, text>
columns.effectItemColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {ASCENDING | CASEINSENSITIVE}>
; CRAFT NAME COLUMN -------------------------------------------------------
columns.craftNameColumn.type = NAME
columns.craftNameColumn.name = '$NAME'
columns.craftNameColumn.states = 1
columns.craftNameColumn.weight = 1.0
columns.craftNameColumn.border = a_textBorder
columns.craftNameColumn.label.textFormat.align = left
columns.craftNameColumn.state1.label.text = '$NAME'
columns.craftNameColumn.state1.entry.text = @text
columns.craftNameColumn.state1.sortAttributes = <text>
columns.craftNameColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}>
; DISENCHANT EFFECT COLUMN -------------------------------------------------------
columns.disenchantEffectColumn.type = TEXT
columns.disenchantEffectColumn.name = '$EFFECT'
columns.disenchantEffectColumn.states = 2
columns.disenchantEffectColumn.width = 0.4
columns.disenchantEffectColumn.label.textFormat.align = right
columns.disenchantEffectColumn.entry.textFormat.align = right
columns.disenchantEffectColumn.state1.label.text = '$EFFECT'
columns.disenchantEffectColumn.state1.label.arrowDown = false
columns.disenchantEffectColumn.state1.entry.text = @effectName
columns.disenchantEffectColumn.state1.sortAttributes = <effectName, value, text>
columns.disenchantEffectColumn.state1.sortOptions = <{ASCENDING | CASEINSENSITIVE}, {DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.disenchantEffectColumn.state2.label.text = '$EFFECT'
columns.disenchantEffectColumn.state2.label.arrowDown = true
columns.disenchantEffectColumn.state2.entry.text = @effectName
columns.disenchantEffectColumn.state2.sortAttributes = <effectName, value, text>
columns.disenchantEffectColumn.state2.sortOptions = <{DESCENDING | CASEINSENSITIVE}, {DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; SOUL SIZE COLUMN -------------------------------------------------------
columns.soulSizeColumn.type = TEXT
columns.soulSizeColumn.name = '$HK19'
columns.soulSizeColumn.states = 2
columns.soulSizeColumn.width = 0.15
columns.soulSizeColumn.label.textFormat.align = right
columns.soulSizeColumn.entry.textFormat.align = right
columns.soulSizeColumn.state1.label.text = '$HK19'
columns.soulSizeColumn.state1.label.arrowDown = false
columns.soulSizeColumn.state1.entry.text = @soulSizeDisplay
columns.soulSizeColumn.state1.sortAttributes = <soulSize, text>
columns.soulSizeColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.soulSizeColumn.state2.label.text = '$HK19'
columns.soulSizeColumn.state2.label.arrowDown = true
columns.soulSizeColumn.state2.entry.text = @soulSizeDisplay
columns.soulSizeColumn.state2.sortAttributes = <soulSize, text>
columns.soulSizeColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ALCHEMY WEIGHT COLUMN -------------------------------------------------------
columns.alchWeightColumn.type = TEXT
columns.alchWeightColumn.name = '$WEIGHT'
columns.alchWeightColumn.states = 2
columns.alchWeightColumn.width = 0.14
columns.alchWeightColumn.border = a_textBorder
columns.alchWeightColumn.state1.label.text = '$WGT'
columns.alchWeightColumn.state1.label.arrowDown = true
columns.alchWeightColumn.state1.entry.text = @infoWeight
columns.alchWeightColumn.state1.sortAttributes = <infoWeight, text>
columns.alchWeightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.alchWeightColumn.state2.label.text = '$WGT'
columns.alchWeightColumn.state2.entry.text = @infoWeight
columns.alchWeightColumn.state2.sortAttributes = <infoWeight, text>
columns.alchWeightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ALCHEMY VALUE COLUMN -------------------------------------------------------
columns.alchValueColumn.type = TEXT
columns.alchValueColumn.name = '$VALUE'
columns.alchValueColumn.states = 2
columns.alchValueColumn.width = 0.14
columns.alchValueColumn.border = a_textBorder
columns.alchValueColumn.state1.label.text = '$VAL'
columns.alchValueColumn.state1.label.arrowDown = true
columns.alchValueColumn.state1.entry.text = @infoValue
columns.alchValueColumn.state1.sortAttributes = <infoValue, text>
columns.alchValueColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.alchValueColumn.state2.label.text = '$VAL'
columns.alchValueColumn.state2.entry.text = @infoValue
columns.alchValueColumn.state2.sortAttributes = <infoValue, text>
columns.alchValueColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ALCHEMY VALUE/WEIGHT COLUMN -------------------------------------------------------
columns.alchValueWeightColumn.type = TEXT
columns.alchValueWeightColumn.name = '$VALUE/WEIGHT'
columns.alchValueWeightColumn.states = 2
columns.alchValueWeightColumn.width = 0.14
columns.alchValueWeightColumn.border = a_textBorder
columns.alchValueWeightColumn.hidden = true
columns.alchValueWeightColumn.state1.label.text = '$V/W'
columns.alchValueWeightColumn.state1.label.arrowDown = true
columns.alchValueWeightColumn.state1.entry.text = @infoValueWeight
columns.alchValueWeightColumn.state1.sortAttributes = <infoValueWeight, text>
columns.alchValueWeightColumn.state1.sortOptions = <{DESCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
columns.alchValueWeightColumn.state2.label.text = '$V/W'
columns.alchValueWeightColumn.state2.entry.text = @infoValueWeight
columns.alchValueWeightColumn.state2.sortAttributes = <infoValueWeight, text>
columns.alchValueWeightColumn.state2.sortOptions = <{ASCENDING | NUMERIC}, {ASCENDING | CASEINSENSITIVE}>
; ITEM VIEWS -------------------------------------------------------
views.defaultItemView.primaryColumn = itemNameColumn
views.defaultItemView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, weightColumn, valueColumn, valueWeightColumn>
views.weaponView.primaryColumn = itemNameColumn
views.weaponView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, materialColumn, damageColumn, weightColumn, valueColumn, valueWeightColumn>
views.weaponView.category = <Inventory.FILTERFLAG_INV_WEAPONS, Inventory.FILTERFLAG_CONTAINER_WEAPONS>
views.armorView.primaryColumn = itemNameColumn
views.armorView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, classColumn, materialColumn, arColumn, weightColumn, valueColumn, valueWeightColumn>
views.armorView.category = <Inventory.FILTERFLAG_INV_ARMOR, Inventory.FILTERFLAG_CONTAINER_ARMOR>
views.magicItemView.primaryColumn = itemNameColumn
views.magicItemView.columns = <equipColumn, iconColumn, itemNameColumn, subTypeColumn, magnitudeColumn, durationColumn, weightColumn, valueColumn, valueWeightColumn>
views.magicItemView.category = <Inventory.FILTERFLAG_INV_POTIONS, Inventory.FILTERFLAG_INV_SCROLLS, Inventory.FILTERFLAG_CONTAINER_POTIONS, Inventory.FILTERFLAG_CONTAINER_SCROLLS>
views.keysView.primaryColumn = itemNameColumn
views.keysView.columns = <equipColumn, iconColumn, itemNameColumn, weightColumn, valueColumn, valueWeightColumn>
views.keysView.category = <Inventory.FILTERFLAG_INV_KEYS, Inventory.FILTERFLAG_CONTAINER_KEYS>
; MAGIC VIEWS -------------------------------------------------------
views.defaultMagicView.primaryColumn = magicNameColumn
views.defaultMagicView.columns = <equipColumn, iconColumn, magicNameColumn, levelColumn, magicMagnitudeColumn, magicDurationColumn, spellCostColumn>
views.allMagicView.primaryColumn = magicNameColumn
views.allMagicView.columns = <equipColumn, iconColumn, magicNameColumn, schoolColumn, levelColumn, spellCostColumn>
views.allMagicView.category = <Inventory.FILTERFLAG_MAGIC_ALL, Inventory.FILTERFLAG_MAGIC_FAVORITES>
views.shoutsView.primaryColumn = magicNameColumn
views.shoutsView.columns = <equipColumn, iconColumn, magicNameColumn, word0Column, word1Column, word2Column>
views.shoutsView.category = Inventory.FILTERFLAG_MAGIC_SHOUTS
views.powersView.primaryColumn = magicNameColumn
views.powersView.columns = <equipColumn, iconColumn, magicNameColumn, magicDurationColumn, spellCostColumn>
views.powersView.category = Inventory.FILTERFLAG_MAGIC_POWERS
views.activeEffectView.primaryColumn = magicNameColumn
views.activeEffectView.columns = <equipColumn, iconColumn, magicNameColumn, timeRemainingColumn, effectItemColumn>
views.activeEffectView.category = Inventory.FILTERFLAG_MAGIC_ACTIVEEFFECTS
; CRAFTING VIEWS -------------------------------------------------------
views.defaultCraftingView.primaryColumn = craftNameColumn
views.defaultCraftingView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, weightColumn, valueColumn, valueWeightColumn>
views.disenchantView.primaryColumn = craftNameColumn
views.disenchantView.columns = <equipColumn, iconColumn, craftNameColumn, disenchantEffectColumn, subTypeColumn, weightColumn, valueColumn, valueWeightColumn>
views.disenchantView.category = Inventory.FILTERFLAG_ENCHANTING_DISENCHANT
views.enchantItemView.primaryColumn = craftNameColumn
views.enchantItemView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, materialColumn, weightColumn, valueColumn, valueWeightColumn>
views.enchantItemView.category = Inventory.FILTERFLAG_ENCHANTING_ITEM
views.enchantEnchantmentView.primaryColumn = craftNameColumn
views.enchantEnchantmentView.columns = <equipColumn, iconColumn, craftNameColumn>
views.enchantEnchantmentView.category = Inventory.FILTERFLAG_ENCHANTING_ENCHANTMENT
views.enchantSoulView.primaryColumn = craftNameColumn
views.enchantSoulView.columns = <equipColumn, iconColumn, craftNameColumn, soulSizeColumn, weightColumn, valueColumn, valueWeightColumn>
views.enchantSoulView.category = Inventory.FILTERFLAG_ENCHANTING_SOULGEM
views.craftWeaponView.primaryColumn = craftNameColumn
views.craftWeaponView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, materialColumn, damageColumn, weightColumn, valueColumn, valueWeightColumn>
views.craftWeaponView.category = <Inventory.FILTERFLAG_CUST_CRAFT_WEAPONS, Inventory.FILTERFLAG_CUST_CRAFT_AMMO>
views.craftArmorView.primaryColumn = craftNameColumn
views.craftArmorView.columns = <equipColumn, iconColumn, craftNameColumn, subTypeColumn, classColumn, materialColumn, arColumn, weightColumn, valueColumn, valueWeightColumn>
views.craftArmorView.category = Inventory.FILTERFLAG_CUST_CRAFT_ARMOR
views.alchemyView.primaryColumn = craftNameColumn
views.alchemyView.columns = <equipColumn, iconColumn, craftNameColumn, alchWeightColumn, alchValueColumn, alchValueWeightColumn>
; LAYOUTS -------------------------------------------------------
layouts.itemListLayout.name = 'ItemListLayout'
layouts.itemListLayout.views = <weaponView, armorView, magicItemView, keysView, defaultItemView>
layouts.magicListLayout.name = 'MagicListLayout'
layouts.magicListLayout.views = <shoutsView, powersView, activeEffectView, allMagicView, defaultMagicView>
layouts.enchantListLayout.name = 'EnchantListLayout'
layouts.enchantListLayout.views = <disenchantView, enchantItemView, enchantEnchantmentView, enchantSoulView, defaultCraftingView>
layouts.constructListLayout.name = 'ConstructListLayout'
layouts.constructListLayout.views = <craftWeaponView, craftArmorView, defaultCraftingView>
layouts.smithingListLayout.name = 'SmithingListLayout'
layouts.smithingListLayout.views = <defaultCraftingView>
layouts.alchemyListLayout.name = 'AlchemyListLayout'
layouts.alchemyListLayout.views = <alchemyView>
================================================
FILE: dist/Data/Readme - SkyUI.txt
================================================
########################################################################################################################################
_______ _ _ __ __ _ _ _____
|______ |____/ \_/ | | |
______| | \_ | |_____| __|__
########################################################################################################################################
Team: snakster, Mardoxx, T3T
Contributors: ianpatt, behippo, Kratos, psychosteve, MisterPete, GreatClone, gibbed, PurpleLunchBox, Verteiron, Gopher, Indie
Version: 4.1
Download: http://skyrim.nexusmods.com/mods/3863
http://steamcommunity.com/sharedfiles/filedetails/?id=8122
Source code: https://github.com/schlangster/skyui
########################################################################################################################################
The following mods/utilities are required for SkyUI:
* The Skyrim Script Extender (SKSE), version 1.6.16 or newer
http://skse.silverlock.org/
########################################################################################################################################
1. Introduction
2. Changelog
3. Installation
4. Uninstallation
5. Troubleshooting
6. Mod Author Guide
7. Credits & Acknowledgements
8. Contact
9. Permissions
########################################################################################################################################
========================================================================================================================================
1. Introduction
========================================================================================================================================
SkyUI is a mod that aims to improve Skyrim's User Interface by making it easier to use with mouse and keyboard,
less wasteful of available screen space, and nicer to look at.
We do all that while keeping true to the style of the original UI, so new and old components are integrated seamlessly.
It is not our goal to re-create the complete interface from scratch.
Instead we try to identify and change areas that need improvement, while leaving the things that are already good alone.
Further general objectives and design concepts are:
* Finding a good balance between 'dumbed down' and 'information overkill'.
* Easy installation and setup.
* Blending features in as well as possible - players shouldn't feel reminded that they're using a mod.
* Support for user customization.
Since improving the whole UI is a big undertaking, we only release single menus at a time as progress is made.
The first menu we addressed was the Inventory. In version 2.0, we included new Barter, Container and Magic menus.
Version 3.0 introduced an in-game configuration menu for mods. The most recent addition was the Favorites menu in version 4.0.
For a more detailed description, please see our mod description on Skyrim Nexus.
========================================================================================================================================
2. Changelog
========================================================================================================================================
------------------------------------------------------------
4.1:
[General]
- Updated SKSE version requirement to 1.6.16.
[FavoritesMenu]
- Included ammo in Gear category.
- Transforming into a Vampire Lord no longer resets group data.
- Changing the load order index of a mod no longer removes its items from any groups.
- Fixed issues when equipping a two-handed weapon that's already equipped via Group Use.
- Fixed issue with 'Unequip Armor' flag, which would incorrectly unequip an armor piece if it's already worn.
- Fixed Group Use crashes with 2 identical weapons.
- Enabled group hotkey rebinding for gamepads.
------------------------------------------------------------
4.0:
[General]
- Updated SKSE version requirement to 1.6.15.
[ModConfigurationMenu]
- Enabled nested translations for option and value text (uses the same format as SetInfoText).
- Added OPTION_FLAG_HIDDEN to hide an option.
- Added OPTION_FLAG_WITH_UNMAP. When set for keymap options, it enables an unmap button that'll send keycode -1.
- Improved menu registration process to avoid missing menus on the first save load. For real this time.
- Enabled basic HTML formatting for option label text. Example: "<font color='#FF0000'>$Hello</font>".
- Fixed an issue with gamepad/keyboard navigation where the wrong entry was selected when scrolling.
[MapMenu]
- Fixed issue where search widget wasn't being completely disabled when hidden.
[ActiveEffectsWidget]
- With SKSE 1.6.15, inactive effects are now filtered out.
- Added a configurable minimum time left to hide long lasting effects like blessings until they are about to expire.
[FavoritesMenu]
- Initial release
------------------------------------------------------------
3.4:
[ModConfigurationMenu]
- Fixed issue that could prevent certain MCM mods from registering correctly (i.e. Wet and Cold).
------------------------------------------------------------
3.3:
[General]
- Reverted batch load size to default to avoid delays with lots of saves.
- Fixed map.swf filename in conflict warning message.
- Fixed "Disable positioning" option.
[ModConfigurationMenu]
- Reverted menu registration code back to 3.1 until I have more time to resolve all issues with the new method.
[HUDWidgetLoader]
- Fixed bug that kept health bar permanently visible (or hidden).
------------------------------------------------------------
3.2:
[General]
- Updated SKSE version requirement to 1.6.9.
- Inventory and magic menus now remember and restore last selected column and sorting state.
- Added emblem to indicate read books/scrolls.
- Fixed several Dragonborn icons.
- Improved visbility of equip icons.
- Fixed an issue in the NMM installer that could cause a crash when trying to force the installation.
- Fixed issue where closing a menu before any checks are able to complete would cause false error messages to appear.
- Optimized memory usage of config menu buffers.
- Increased config timeout delay from 1 to 3 seconds.
- Added error message to detect invalid Papyrus .ini settings.
- Updated quest_journal.swf to support legendary difficulty that has been added in Skyrim 1.9.
[ModConfigurationMenu]
- Added a repair console command that forces all menus to re-register: setStage SKI_ConfigManagerInstance 1
- Improved SetInfoText to support nested translation strings. See MCM API reference for details.
- Added an new method to organize options as states. Fully backward compatible. See state MCM state option guide for details.
- Fixed issue where it would take several reloads until all menus registered successfully when running a lot of mods.
[MapMenu]
- Initial release
[ActiveEffectsWidget]
- Initial release
[HUDWidgetLoader]
- Initial release
------------------------------------------------------------
3.1:
[General]
- Added MCM option to select the category icon theme. Includes all themes from version 2.2 (Celtic, Curved, Straight).
- Added MCM options to configure some gamepad mappings manually. This should resolve conflicts with custom controlmaps.
- Added MCM option to disable icon colors.
- Added NMM installer script that detects/reports the most common installation problems.
- Added runtime check for missing SKSE scripts.
- Updated SKSE version requirement to 1.6.6. Fixes the non-functional localization.
- Fixed leather strips type identifier.
- Fixed minor mistakes in the config.
- Fixed issues with PropertyDataExtender to allow custom config.txt overrides.
- Fixed MCM logo hat madness.
- Made some error messages clearer.
------------------------------------------------------------
3.0:
[General]
- Added more columns to item lists and a drop-down menu to show/hide them.
- Added a new icon theme by Psychosteve (support for the old themes had to be dropped because they are no longer maintained).
- Added type column to group items of the same category into sub-types.
- Added dynamic icon coloring.
- Added option to configure the minimum stack size that triggers the quantity select dialog.
- Added dynamic icon art to bottom bar so it matches the current control mapping.
- Replaced NMM installer with an in-game configuration menu.
- Replaced old error messages with regular message boxes and added more safety checks for outdated SkyUI components.
- Fixed various minor issues and improved performance.
- Consolidated package format to BSA+ESP.
[ContainerMenu]
- Added support for GiftMenu.
- Improved input scheme for mouse and keyboard (no more R to Take All and Store, mouse click for Give/Take etc.).
[BarterMenu]
- Added carry weight display to bottom bar.
[MagicMenu]
- Fixed locked words being shown as unlocked if one word is known.
- Fixed an issue that could cause crashes for spells with missing effect data.
[ModConfigurationMenu]
- Initial release. Mod authors, see https://github.com/schlangster/skyui/wiki for documentation.
------------------------------------------------------------
2.1:
[General]
- Added compatiblity for the Skyrim version 1.4.21.
- Added multi-language support for Czech, English, French, German, Italian, Polish, Russian and Spanish.
- Added several options to the installer (font size, separate V/W column, special resolution).
- Added a BAIN Conversion File (BCF) including an installation wizard for better Wyre Bash support. Thanks to Lojack!
- Fixed a bug where selling/dropping/storing stacked items could cause the selected entry to jump to the bottom of the list.
- The last selected category, entry and scroll position are now saved and restored when re-opening the inventory/magic menu.
- Sorting parameters are now preserved if possible when switching through categories.
- Improved the SKSE version check so it will also display a warning when using outdated versions.
- Most features of our SKSE plugins have been reworked and are now integrated in SKSE itself.
- Various other tweaks and minor fixes.
[InventoryMenu]
- Fixed a rare bug that could cause crashes after recharging an item.
[MagicMenu]
- Fixed skill level sorting.
- Added 'Favorite' as a sort option.
[ContainerMenu]
- Fixed stealing text for Russian game version.
- Fixed overlapping of to steal/to place text for large itemcards.
------------------------------------------------------------
2.0:
[InventoryMenu]
- Fixed enchantment mini-icon so it's no longer displayed for enchanted weapons only.
- Fixed missing sort options for name field in the favorites category.
- Fixed backspace cancelling the search.
- Fixed searching for non-English languages (i.e. Russian).
- Improved sorting system. Null/invalid values are now always at the bottom.
- Empty categories are greyed out and no longer selectable by mouse or during keyboard/controller navigation.
- Included a bundled version of Gibbed's Container Categorization SKSE plugin. Thanks for giving us permission to use it!
[MagicMenu]
- Initial release
[BarterMenu]
- Initial release
[ContainerMenu]
- Initial release
------------------------------------------------------------
1.1:
[InventoryMenu]
- Updated Gibbed's interface extensions plugin to support the latest Skyrim version 1.3.10.0.
- Improved support for XBOX360 controller: LB/RB can now be used to change the active column; Left Stick changes the sorting order.
- Made SKSE warning message less intrusive; it's only shown once after each game restart now.
- Fixed LT/RT equip bug with XBOX360 controller.
- Fixed bug where 3D model/item card would not update in certain situations (dropping an item, charging an item, etc.).
- Removed custom fontconfig.txt to avoid font problems with other font mods, or with the Russian version of the game.
- Optimized column layout so it only shows states and information that make sense for the active category.
- Updated T3T's straight icon theme to include new inventory icons.
- Updated GreatClone's icon theme to the latest version. Now includes inventory icons as well, and category icons have been improved.
- Fixed wrong inventory icon for spell tomes.
- Various minor tweaks and fixes.
------------------------------------------------------------
1.0:
[InventoryMenu]
- Initial release
========================================================================================================================================
3. Installation
========================================================================================================================================
------------------------------------------------------------
IMPORTANT:
If you were using SkyUI 2.2 or older,
you MUST remove it before installing the new version.
See section 4 for instructions.
------------------------------------------------------------
There are several ways to install SkyUI:
- Subscribe to SkyUI on Steam Workshop.
- Let the Nexus Mod Manager (NMM) download and install the archive for you.
- Download the archive manually and install it with NMM.
- Download and install the archive manually.
Pick the method you prefer.
------------------------------------------------------------
a) Subscribe on Steam Workshop
------------------------------------------------------------
1. Go to http://steamcommunity.com/sharedfiles/filedetails/?id=8122 and click subscribe.
2. The next time you start the Skyrim Launcher, SkyUI will be downloaded and installed automatically.
OR
------------------------------------------------------------
b) Automated Download with NMM
------------------------------------------------------------
1. Click the 'Download with manager' button on top of the file.
2. SkyUI will appear in in NMM's Mods list once it's downloaded. Double-click the SkyUI entry to activate it.
OR
------------------------------------------------------------
c) Manual Download with NMM
------------------------------------------------------------
1. Start NMM and click on 'Mods'.
2. In the left icon bar, click on 'Add Mod From File' and select the downloaded archive file.
3. SkyUI will now appear in the list. Double-click the entry to activate it.
OR
------------------------------------------------------------
d) Manual Installation
------------------------------------------------------------
1. Locate the 'Data/' folder in your Skyrim installation directory.
Typically it's found at 'Program Files/Steam/steamapps/common/skyrim/Data/'.
2. Extract the contents of the downloaded archive file to the 'Data/' folder.
3. In the Skyrim Launcher, select 'Data Files' and enable 'SkyUI.esp'.
========================================================================================================================================
4. Uninstallation
========================================================================================================================================
The uninstallation method depends on which SkyUI version you were using before and how you installed it.
Any SkyUI version older than 3.0 (this includes alpha builds) has to be removed before upgrading.
For details, see the following instructions that match your current SkyUI version/installation method.
------------------------------------------------------------
NMM installation / Any SkyUI version
------------------------------------------------------------
In NMM's mod list, search for the SkyUI entry and deactivate the mod.
------------------------------------------------------------
Steam workshop / Any SkyUI version
------------------------------------------------------------
Unsubscribe from the mod and deactivate it in Skyrim Launcher (if you haven't already).
There, you can also completely remove it by highlighting it and pressing 'Delete Selected'.
------------------------------------------------------------
Manual installation / SkyUI 2.2 or older
------------------------------------------------------------
If you installed the SkyUI files manually, then you also have to remove them manually.
So view the contents of the SkyUI archive you are using, locate each file at its install location and remove it.
To revert your interface folder to its original state, you can delete the 'Interface/' directory from Skyrim's 'Data/' folder
and then use Steam to restore any original files you removed in the process by following these steps:
(Backup your interface folder before deleting it in case anything goes wrong)
1. Locate Skyrim in Steam's game library.
2. Open the properties dialog and select the 'Local files' tab.
3. Verify integrity of game cache.
Be aware, that this will break any other mods that installed files to the interface folder. You will have to re-install them.
------------------------------------------------------------
Manual installation / SkyUI 3.0 and newer
------------------------------------------------------------
1. Locate the 'Data/' folder in your Skyrim installation directory.
It's typically found at 'Program Files/Steam/steamapps/common/skyrim/Data/'.
2. Delete 'SkyUI.esp' and 'SkyUI.bsa' from the data folder.
------------------------------------------------------------
SkyUI 3.0 alpha versions
------------------------------------------------------------
Before removing any files, it is recommended to make a 'clean' save game with SkyUI deactivated.
1. Start the Skyrim Launcher and select 'Data Files'.
2. Search 'SkyUI.esp' and uncheck it.
(If you don't have this file, there's no need for a clean save anyway and you can skip it)
3. In-game, load your latest save, then save the game again.
4. This new save game is now cleaned of SkyUI data.
You can now proceed to uninstall the files.
The 3.0 alpha packages contained loose script files required by mod authors to create configuration menus.
Make absolutely sure to remove these files, because they will override any newer scripts in SkyUI.bsa.
1. Locate the 'Scripts/' folder in your Skyrim data directory.
It's typically found at 'Program Files/Steam/steamapps/common/skyrim/Data/Scripts/'.
2. Delete any script files (.pex) that start with SKI_, for example
SKI_ConfigBase.pex, SKI_Main.pex, etc.
3. Delete 'SkyUI.esp' and 'SkyUI.bsa' from the data folder if present.
========================================================================================================================================
5. Troubleshooting
========================================================================================================================================
------------------------------------------------------------
Problem: There's an error message, reporting "SKYUI ERROR CODE X"...
See https://github.com/schlangster/skyui/wiki/SkyUI-Errors for potential problems and their solutions.
------------------------------------------------------------
Problem: There are dollar signs ($) in front of all words in the main menu (and in lots of other places, too)!
This happens if you accidently removed 'Data/Interface/Translate_<language>.txt'.
To restore it, use Steam to verify the integrity of Skyrim's game-cache
(Steam -> Library -> Properties of Skyrim -> Local files tab -> Verify integrity of game cache).
------------------------------------------------------------
Problem: There are mods missing from my MCM list. Is there anything I can do about it?
Before starting to reinstall mods, you can try to run a repair script we added in SkyUI 3.2.
To do this, open the console and enter "setStage SKI_ConfigManagerInstance 1" (without the quotes).
If your problem wasn't listed here, ask for help in the Nexus comments.
========================================================================================================================================
6. Mod Author Guide
========================================================================================================================================
Since version 3.0, SkyUI provides a Mod Configuration Menu framework that can be utilized by other mods.
If you're a mod author interested in using it, have a look at the documentation:
https://github.com/schlangster/skyui/wiki
========================================================================================================================================
7. Credits & Acknowledgements
========================================================================================================================================
Besides the SkyUI team itself, there are other people as well who helped significantly to make this mod a reality.
In the following they are listed by name, including a list of their contributions.
Kratos:
Was a core member of the SkyUI team until version 2.1 and as such contributed significantly to the project in various areas.
ianpatt:
Added lots of new functions to the Skyrim Script Extender, that greatly helped us during development and enabled new features that
would otherwise be impossible.
behippo:
Helped improving/advancing the interface extensions plugin by decoding the game classes and giving us access to them through SKSE.
Gibbed:
Created the 'gibbed interface extensions' SKSE plugin, which makes more game data available for display in the inventory.
Also allowed us to bundle his container categorization plugin. As of version 2.1, both these plugins have been included in SKSE
itself.
Indie:
Created our trailer and helps with QA and user support.
GreatClone:
Created an amazing set of alternative category icons.
Gopher:
Did most of the work on the NMM installer, created an installation tutorial video and promoted SkyUI on his YouTube channel.
Lojack:
Created a BCF (including an installation wizard) for SkyUI to improve the installation experience for Wyre Bash users.
Also added an auto-conversion feature to Wyre Bash itself so this BCF is automatically applied.
Ismelda:
Provided configs for very high resolutions used with multi-monitor setups.
Wakeupbrandon:
His mock-up inspired the overall layout of the new inventory.
MisterPete:
Implemented new column types for improved sorting.
Psychosteve:
Created our new primary icon theme for version 3.0.
He also created the Active Effect icons that have been added in version 3.2.
Pelinor:
The creator of MCM for Fallout: New Vegas. Allowed us to use his original logo.
SkyUI is utilizing TweenLite, a high-performance tweening library (http://www.greensock.com/tweenlite/).
Thanks to Jack Doyle and his team for creating it and allowing us to use it under their No Charge license.
Thanks to all the testers, who helped a great deal with improving the overall quality of this mod:
ToJKa, HellKnight, xporc, MadCat221, Ismelda, Gribbles, freesta, Cartrodus, TheCastle,
NewRaven, T-qb, V4N0, Noritep, claudekennilol, dj2005, llfbandit, webrunner, 352, Erelde, tejon, Sagittarius22
(in random order)
Thanks to all translators who helped localizing SkyUI to different languages, among them being:
Sagittarius22, LLFBandit, xporc (French)
xlwarrior, aloot (Spanish)
Starfis (Czech)
Rhaegal, aloot (Italian)
patryk110 (Polish)
vova2112 (Russian)
Last but not least, thanks to the whole SKSE team, because without their Script Extender creating this mod wouldn't have been possible.
========================================================================================================================================
8. Contact
========================================================================================================================================
For direct contact, send a PM to schlangster at
http://www.skyrimnexus.com/
or
http://forums.bethsoft.com/
If you need help, please leave a comment on our Nexus page instead of contacting me directly.
========================================================================================================================================
9. Permissions
========================================================================================================================================
Some assets in SkyUI belong to other authors.
You will need to seek permission from these authors before you can use their assets.
You are not allowed to upload this file to other sites unless given permission by me to do so.
You are not allowed to convert this file to work on other games.
You must get permission from me before you are allowed to modify my files for bug fixes and improvements.
You must get permission from me before you are allowed to use any of the assets in this file.
================================================
FILE: dist/Data/Scripts/Headers/SKI_ConfigBase.psc
================================================
scriptname SKI_ConfigBase extends SKI_QuestBase
;##################################################################################################
; API Version: 3
;##################################################################################################
;
; Base script for custom config menus.
;
; This file contains the public interface of SKI_ConfigBase so you're able to extend it.
; For documentation, see https://github.com/schlangster/skyui/wiki/MCM-API-Reference.
;
; DO NOT MODIFY THIS SCRIPT!
; DO NOT RECOMPILE THIS SCRIPT!
;
;##################################################################################################
; CONSTANTS ---------------------------------------------------------------------------------------
int property OPTION_FLAG_NONE = 0x00 autoReadonly
int property OPTION_FLAG_DISABLED = 0x01 autoReadonly
int property OPTION_FLAG_HIDDEN = 0x02 autoReadonly ; Version 3
int property OPTION_FLAG_WITH_UNMAP = 0x04 autoReadonly ; Version 3
int property LEFT_TO_RIGHT = 1 autoReadonly
int property TOP_TO_BOTTOM = 2 autoReadonly
; PROPERTIES ------------------------------------------------------------------------- Version 1 --
string property ModName auto
string[] property Pages auto
string property CurrentPage
string function get()
Guard()
return ""
endFunction
endProperty
; EVENTS ----------------------------------------------------------------------------- Version 1 --
event OnConfigInit()
{Called when this config menu is initialized}
Guard()
endEvent
event OnConfigRegister()
{Called when this config menu registered at the control panel}
Guard()
endEvent
event OnConfigOpen()
{Called when this config menu is opened}
Guard()
endEvent
event OnConfigClose()
{Called when this config menu is closed}
Guard()
endEvent
event OnVersionUpdate(int a_version)
{Called when a version update of this script has been detected}
Guard()
endEvent
event OnPageReset(string a_page)
{Called when a new page is selected, including the initial empty page}
Guard()
endEvent
event OnOptionHighlight(int a_option)
{Called when highlighting an option}
Guard()
endEvent
event OnOptionSelect(int a_option)
{Called when a non-interactive option has been selected}
Guard()
endEvent
event OnOptionDefault(int a_option)
{Called when resetting an option to its default value}
Guard()
endEvent
event OnOptionSliderOpen(int a_option)
{Called when a slider option has been selected}
Guard()
endEvent
event OnOptionSliderAccept(int a_option, float a_value)
{Called when a new slider value has been accepted}
Guard()
endEvent
event OnOptionMenuOpen(int a_option)
{Called when a menu option has been selected}
Guard()
endEvent
event OnOptionMenuAccept(int a_option, int a_index)
{Called when a menu entry has been accepted}
Guard()
endEvent
event OnOptionColorOpen(int a_option)
{Called when a color option has been selected}
Guard()
endEvent
event OnOptionColorAccept(int a_option, int a_color)
{Called when a new color has been accepted}
Guard()
endEvent
event OnOptionKeyMapChange(int a_option, int a_keyCode, string a_conflictControl, string a_conflictName)
{Called when a key has been remapped}
Guard()
endEvent
; EVENTS ----------------------------------------------------------------------------- Version 2 --
event OnHighlightST()
{Called when highlighting a state option}
Guard()
endEvent
event OnSelectST()
{Called when a non-interactive state option has been selected}
Guard()
endEvent
event OnDefaultST()
{Called when resetting a state option to its default value}
Guard()
endEvent
event OnSliderOpenST()
{Called when a slider state option has been selected}
Guard()
endEvent
event OnSliderAcceptST(float a_value)
{Called when a new slider state value has been accepted}
Guard()
endEvent
event OnMenuOpenST()
{Called when a menu state option has been selected}
Guard()
endEvent
event OnMenuAcceptST(int a_index)
{Called when a menu entry has been accepted for this state option}
Guard()
endEvent
event OnColorOpenST()
{Called when a color state option has been selected}
Guard()
endEvent
event OnColorAcceptST(int a_color)
{Called when a new color has been accepted for this state option}
Guard()
endEvent
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
{Called when a key has been remapped for this state option}
Guard()
endEvent
; FUNCTIONS -------------------------------------------------------------------------- Version 1 --
int function GetVersion()
{Returns version of this script. Override if necessary}
Guard()
endFunction
string function GetCustomControl(int a_keyCode)
{Returns the name of a custom control mapped to given keyCode, or "" if the key is not in use by this config. Override if necessary}
Guard()
endFunction
function ForcePageReset()
{Forces a full reset of the current page}
Guard()
endFunction
function SetTitleText(string a_text)
{Sets the title text of the control panel}
Guard()
endFunction
function SetInfoText(string a_text)
{Sets the text for the info text field below the option panel}
Guard()
endFunction
function SetCursorPosition(int a_position)
{Sets the position of the cursor used for the option setters}
Guard()
endFunction
function SetCursorFillMode(int a_fillMode)
{Sets the fill direction of the cursor used for the option setters}
Guard()
endFunction
int function AddEmptyOption()
{Adds an empty option, which can be used for padding instead of manually re-positioning the cursor}
Guard()
endFunction
int function AddHeaderOption(string a_text, int a_flags = 0)
{Adds a header option to group several options together}
Guard()
endFunction
int function AddTextOption(string a_text, string a_value, int a_flags = 0)
{Adds a generic text/value option}
Guard()
endFunction
int function AddToggleOption(string a_text, bool a_checked, int a_flags = 0)
{Adds a check box option that can be toggled on and off}
Guard()
endfunction
int function AddSliderOption(string a_text, float a_value, string a_formatString = "{0}", int a_flags = 0)
{Adds an option that opens a slider dialog when selected}
Guard()
endFunction
int function AddMenuOption(string a_text, string a_value, int a_flags = 0)
{Adds an option that opens a menu dialog when selected}
Guard()
endFunction
int function AddColorOption(string a_text, int a_color, int a_flags = 0)
{Adds an option that opens a color swatch dialog when selected}
Guard()
endFunction
int function AddKeyMapOption(string a_text, int a_keyCode, int a_flags = 0)
{Adds a key mapping option}
Guard()
endFunction
function LoadCustomContent(string a_source, float a_x = 0.0, float a_y = 0.0)
{Loads an external file into the option panel}
Guard()
endFunction
function UnloadCustomContent()
{Clears any custom content and re-enables the original option list}
Guard()
endFunction
function SetOptionFlags(int a_option, int a_flags, bool a_noUpdate = false)
{Sets the option flags}
Guard()
endFunction
function SetTextOptionValue(int a_option, string a_value, bool a_noUpdate = false)
{Sets the value(s) of an existing option}
Guard()
endFunction
function SetToggleOptionValue(int a_option, bool a_checked, bool a_noUpdate = false)
{Sets the value(s) of an existing option}
Guard()
endfunction
function SetSliderOptionValue(int a_option, float a_value, string a_formatString = "{0}", bool a_noUpdate = false)
{Sets the value(s) of an existing option}
Guard()
endFunction
function SetMenuOptionValue(int a_option, string a_value, bool a_noUpdate = false)
{Sets the value(s) of an existing option}
Guard()
endFunction
function SetColorOptionValue(int a_option, int a_color, bool a_noUpdate = false)
{Sets the value(s) of an existing option}
Guard()
endFunction
function SetKeyMapOptionValue(int a_option, int a_keyCode, bool a_noUpdate = false)
{Sets the value(s) of an existing option}
Guard()
endFunction
function SetSliderDialogStartValue(float a_value)
{Sets slider dialog parameter(s)}
Guard()
endFunction
function SetSliderDialogDefaultValue(float a_value)
{Sets slider dialog parameter(s)}
Guard()
endFunction
function SetSliderDialogRange(float a_minValue, float a_maxValue)
{Sets slider dialog parameter(s)}
Guard()
endFunction
function SetSliderDialogInterval(float a_value)
{Sets slider dialog parameter(s)}
Guard()
endFunction
function SetMenuDialogStartIndex(int a_value)
{Sets menu dialog parameter(s)}
Guard()
endFunction
function SetMenuDialogDefaultIndex(int a_value)
{Sets menu dialog parameter(s)}
Guard()
endFunction
function SetMenuDialogOptions(string[] a_options)
{Sets menu dialog parameter(s)}
Guard()
endFunction
function SetColorDialogStartColor(int a_color)
{Sets menu color parameter(s)}
Guard()
endFunction
function SetColorDialogDefaultColor(int a_color)
{Sets menu color parameter(s)}
Guard()
endFunction
bool function ShowMessage(string a_message, bool a_withCancel = true, string a_acceptLabel = "$Accept", string a_cancelLabel = "$Cancel")
{Shows a message dialog and waits until the user has closed it}
Guard()
endFunction
; FUNCTIONS -------------------------------------------------------------------------- Version 2 --
function AddTextOptionST(string a_stateName, string a_text, string a_value, int a_flags = 0)
{Adds a generic text/value state option}
Guard()
endFunction
function AddToggleOptionST(string a_stateName, string a_text, bool a_checked, int a_flags = 0)
{Adds a check box state option that can be toggled on and off}
Guard()
endfunction
function AddSliderOptionST(string a_stateName, string a_text, float a_value, string a_formatString = "{0}", int a_flags = 0)
{Adds a state option that opens a slider dialog when selected}
Guard()
endFunction
function AddMenuOptionST(string a_stateName, string a_text, string a_value, int a_flags = 0)
{Adds a state option that opens a menu dialog when selected}
Guard()
endFunction
function AddColorOptionST(string a_stateName, string a_text, int a_color, int a_flags = 0)
{Adds a state option that opens a color swatch dialog when selected}
Guard()
endFunction
function AddKeyMapOptionST(string a_stateName, string a_text, int a_keyCode, int a_flags = 0)
{Adds a key mapping state option}
Guard()
endFunction
function SetOptionFlagsST(int a_flags, bool a_noUpdate = false, string a_stateName = "")
{Sets the state option flags}
Guard()
endFunction
function SetTextOptionValueST(string a_value, bool a_noUpdate = false, string a_stateName = "")
{Sets the value(s) of an existing state option}
Guard()
endFunction
function SetToggleOptionValueST(bool a_checked, bool a_noUpdate = false, string a_stateName = "")
{Sets the value(s) of an existing state option}
Guard()
endFunction
function SetSliderOptionValueST(float a_value, string a_formatString = "{0}", bool a_noUpdate = false, string a_stateName = "")
{Sets the value(s) of an existing state option}
Guard()
endFunction
function SetMenuOptionValueST(string a_value, bool a_noUpdate = false, string a_stateName = "")
{Sets the value(s) of an existing state option}
Guard()
endFunction
function SetColorOptionValueST(int a_color, bool a_noUpdate = false, string a_stateName = "")
{Sets the value(s) of an existing state option}
Guard()
endFunction
function SetKeyMapOptionValueST(int a_keyCode, bool a_noUpdate = false, string a_stateName = "")
{Sets the value(s) of an existing state option}
Guard()
endFunction
; -------------------------------------------------------------------------------------------------
function Guard()
Debug.MessageBox("SKI_ConfigBase: Don't recompile this script!")
endFunction
================================================
FILE: dist/Data/Scripts/Headers/SKI_QuestBase.psc
================================================
scriptname SKI_QuestBase extends Quest hidden
;##################################################################################################
; API Version: 1
;##################################################################################################
;
; Base script for SkyUI quest scripts.
;
; This file contains the public interface of SKI_QuestBase so you're able to extend it.
;
; DO NOT MODIFY THIS SCRIPT!
; DO NOT RECOMPILE THIS SCRIPT!
;
;##################################################################################################
event OnInit()
endEvent
; -------------------------------------------------------------------------------------------------
; Version Tracking
;
; Quest implements
; GetVersion, to return the static version number
; OnVersionUpdate to handle the updating
; Update process is triggered by calling CheckVersion()
int property CurrentVersion auto hidden
function CheckVersion()
Guard()
endFunction
int function GetVersion()
Guard()
endFunction
event OnVersionUpdate(int a_version)
Guard()
endEvent
; -------------------------------------------------------------------------------------------------
; Reload Events
;
; Helper to add reload event to quest script.
; 1. Create quest
; 2. Add player alias to quest
; 3. Attach SKI_PlayerLoadGameAlias to player alias
event OnGameReload()
endEvent
function Guard()
Debug.MessageBox("SKI_QuestBase: Don't recompile this script!")
endFunction
================================================
FILE: dist/Data/Scripts/Source/SKI_ActiveEffectsWidget.psc
================================================
scriptname SKI_ActiveEffectsWidget extends SKI_WidgetBase
; SCRIPT VERSION ----------------------------------------------------------------------------------
;
; History
;
; 1: - Initial version
;
; 2: - Updated hudModes
;
; 3: - Added MinimumTimeLeft
int function GetVersion()
return 3
endFunction
; PRIVATE VARIABLES -------------------------------------------------------------------------------
; -- Version 1 --
; Make sure defaults match those in ConfigMenuInstance
bool _enabled = false
float _effectSize = 48.0
int _groupEffectCount = 8
string _orientation = "vertical"
; -- Version 3 --
int _minimumTimeLeft = 180
; PROPERTIES --------------------------------------------------------------------------------------
bool Property Enabled
{Whether the active effects are displayed or not}
bool function get()
return _enabled
endFunction
function set(bool a_val)
_enabled = a_val
if (Ready)
UI.InvokeBool(HUD_MENU, WidgetRoot + ".setEnabled", _enabled)
endIf
endFunction
endProperty
float property EffectSize
{Size of each effect icon in pixels at a resolution of 1280x720}
float function get()
return _effectSize
endFunction
function set(float a_val)
_effectSize = a_val
if (Ready)
UI.InvokeFloat(HUD_MENU, WidgetRoot + ".setEffectSize", _effectSize)
endIf
endFunction
endProperty
int property GroupEffectCount
{Maximum number of widgets displayed until a new group (column, or row) is created}
int function get()
return _groupEffectCount
endFunction
function set(int a_val)
_groupEffectCount = a_val
if (Ready)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setGroupEffectCount", _groupEffectCount)
endIf
endFunction
endProperty
string property Orientation
{The axis in which new effects will be added to after the total number of effects > GroupEffectCount}
string function get()
return _orientation
endFunction
function set(string a_val)
_orientation = a_val
if (Ready)
UI.InvokeString(HUD_MENU, WidgetRoot + ".setOrientation", _orientation)
endIf
endFunction
endProperty
int property MinimumTimeLeft
{The minimum time left for an effect to be displayed}
int function get()
return _minimumTimeLeft
endFunction
function set(int a_val)
_minimumTimeLeft = a_val
if (Ready)
UI.InvokeInt(HUD_MENU, WidgetRoot + ".setMinTimeLeft", _minimumTimeLeft)
endIf
endFunction
endProperty
; INITIALIZATION ----------------------------------------------------------------------------------
; @implements SKI_QuestBase
event OnVersionUpdate(int a_version)
; Version 2
if (a_version >= 2 && CurrentVersion < 2)
Debug.Trace(self + ": Updating to script version 2")
string[] hudModes = new string[6]
hudModes[0] = "All"
hudModes[1] = "StealthMode"
hudModes[2] = "Favor"
hudModes[3] = "Swimming"
hudModes[4] = "HorseMode"
hudModes[5] = "WarHorseMode"
Modes = hudModes
endIf
endEvent
; EVENTS ------------------------------------------------------------------------------------------
; @override SKI_WidgetBase
event OnWidgetReset()
parent.OnWidgetReset()
; Init numbers
float[] numberArgs = new float[4]
numberArgs[0] = _enabled as float
numberArgs[1] = _effectSize
numberArgs[2] = _groupEffectCount as float
numberArgs[3] = _minimumTimeLeft as float
UI.InvokeFloatA(HUD_MENU, WidgetRoot + ".initNumbers", numberArgs)
; Init strings
string[] stringArgs = new string[1]
stringArgs[0] = _orientation
UI.InvokeStringA(HUD_MENU, WidgetRoot + ".initStrings", stringArgs)
; Init commit
UI.Invoke(HUD_MENU, WidgetRoot + ".initCommit")
endEvent
; FUNCTIONS ---------------------------------------------------------------------------------------
; @overrides SKI_WidgetBase
string function GetWidgetSource()
return "skyui/activeeffects.swf"
endFunction
; @overrides SKI_WidgetBase
string function GetWidgetType()
return "SKI_ActiveEffectsWidget"
endFunction
================================================
FILE: dist/Data/Scripts/Source/SKI_ConfigBase.psc
================================================
scriptname SKI_ConfigBase extends SKI_QuestBase
; CONSTANTS ---------------------------------------------------------------------------------------
string property JOURNAL_MENU = "Journal Menu" autoReadonly
string property MENU_ROOT = "_root.ConfigPanelFader.configPanel" autoReadonly
int property STATE_DEFAULT = 0 autoReadonly
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
int property OPTION_TYPE_TEXT = 0x02 autoReadonly
int property OPTION_TYPE_TOGGLE = 0x03 autoReadonly
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
int property OPTION_FLAG_HIDDEN = 0x02 autoReadonly
int property OPTION_FLAG_WITH_UNMAP = 0x04 autoReadonly
int property LEFT_TO_RIGHT = 1 autoReadonly
int property TOP_TO_BOTTOM = 2 autoReadonly
; PRIVATE VARIABLES -------------------------------------------------------------------------------
SKI_ConfigManager _configManager
bool _initialized = false
int _configID = -1
string _currentPage = ""
int _currentPageNum = 0 ; 0 for "", real pages start at 1
; Keep track of what we're doing at the moment for stupidity checks
int _state = 0
int _cursorPosition = 0
int _cursorFillMode = 1 ;LEFT_TO_RIGHT
; Local buffers
int[] _optionFlagsBuf ; byte 1 type, byte 2 flags
string[] _textBuf
string[] _strValueBuf
float[] _numValueBuf
float[] _sliderParams
int[] _menuParams
int[] _colorParams
int _activeOption = -1
string _infoText
string _inputStartText
bool _messageResult = false
bool _waitForMessage = false
string[] _stateOptionMap
; PROPERTIES --------------------------------------------------------------------------------------
string property ModName auto
string[] property Pages auto
string property CurrentPage
string function get()
return _currentPage
endFunction
endProperty
; INITIALIZATION ----------------------------------------------------------------------------------
event OnInit()
OnGameReload()
endEvent
; @implements SKI_QuestBase
event OnGameReload()
if (!_initialized)
_initialized = true
; Buffer alloc/free on config open/close
;_optionFlagsBuf = new int[128]
;_textBuf = new string[128]
;_strValueBuf = new string[128]
;_numValueBuf = new float[128]
; 0 startValue
; 1 defaultValue
; 2 minValue
; 3 maxValue
; 4 interval
_sliderParams = new float[5]
; 0 startIndex
; 1 defaultIndex
_menuParams = new int[2]
; 0 currentColor
; 1 defaultColor
_colorParams = new int[2]
OnConfigInit()
Debug.Trace(self + " INITIALIZED")
endIf
RegisterForModEvent("SKICP_configManagerReady", "OnConfigManagerReady")
RegisterForModEvent("SKICP_configManagerReset", "OnConfigManagerReset")
CheckVersion()
endEvent
; EVENTS ------------------------------------------------------------------------------------------
; @interface
event OnConfigInit()
{Called when this config menu is initialized}
endEvent
; @interface
event OnConfigRegister()
{Called when this config menu registered at the control panel}
endEvent
; @interface
event OnConfigOpen()
{Called when this config menu is opened}
endEvent
; @interface
event OnConfigClose()
{Called when this config menu is closed}
endEvent
; @interface(SKI_QuestBase)
event OnVersionUpdate(int a_version)
{Called when a version update of this script has been detected}
endEvent
; @interface
event OnPageReset(string a_page)
{Called when a new page is selected, including the initial empty page}
endEvent
; @interface
event OnOptionHighlight(int a_option)
{Called when highlighting an option}
endEvent
; @interface
event OnOptionSelect(int a_option)
{Called when a non-interactive option has been selected}
endEvent
; @interface
event OnOptionDefault(int a_option)
{Called when resetting an option to its default value}
endEvent
; @interface
event OnOptionSliderOpen(int a_option)
{Called when a slider option has been selected}
endEvent
; @interface
event OnOptionSliderAccept(int a_option, float a_value)
{Called when a new slider value has been accepted}
endEvent
; @interface
event OnOptionMenuOpen(int a_option)
{Called when a menu option has been selected}
endEvent
; @interface
event OnOptionMenuAccept(int a_option, int a_index)
{Called when a menu entry has been accepted}
endEvent
; @interface
event OnOptionColorOpen(int a_option)
{Called when a color option has been selected}
endEvent
; @interface
event OnOptionColorAccept(int a_option, int a_color)
{Called when a new color has been accepted}
endEvent
; @interface
event OnOptionKeyMapChange(int a_option, int a_keyCode, string a_conflictControl, string a_conflictName)
{Called when a key has been remapped}
endEvent
; @interface
event OnHighlightST()
{Called when highlighting a state option}
endEvent
; @interface
event OnSelectST()
{Called when a non-interactive state option has been selected}
endEvent
; @interface
event OnDefaultST()
{Called when resetting a state option to its default value}
endEvent
; @interface
event OnSliderOpenST()
{Called when a slider state option has been selected}
endEvent
; @interface
event OnSliderAcceptST(float a_value)
{Called when a new slider state value has been accepted}
endEvent
; @interface
event OnMenuOpenST()
{Called when a menu state option has been selected}
endEvent
; @interface
event OnMenuAcceptST(int a_index)
{Called when a menu entry has been accepted for this state option}
endEvent
; @interface
event OnColorOpenST()
{Called when a color state option has been selected}
endEvent
; @interface
event OnColorAcceptST(int a_color)
{Called when a new color has been accepted for this state option}
endEvent
; @interface
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
{Called when a key has been remapped for this state option}
endEvent
event OnConfigManagerReset(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
_configManager = none
endEvent
event OnConfigManagerReady(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
SKI_ConfigManager newManager = a_sender as SKI_ConfigManager
; Already registered?
if (_configManager == newManager || newManager == none)
return
endIf
_configID = newManager.RegisterMod(self, ModName)
; Success
if (_configID >= 0)
_configManager = newManager
OnConfigRegister()
Debug.Trace(self + ": Registered " + ModName + " at MCM.")
endIf
endEvent
event OnMessageDialogClose(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
_messageResult = a_numArg as bool
_waitForMessage = false
endEvent
; FUNCTIONS ---------------------------------------------------------------------------------------
; @interface(SKI_QuestBase)
int function GetVersion()
{Returns version of this script}
return 1
endFunction
; @interface
string function GetCustomControl(int a_keyCode)
{Returns the name of a custom control mapped to given keyCode, or "" if the key is not in use by this config}
return ""
endFunction
; @interface
function ForcePageReset()
{Forces a full reset of the current page}
UI.Invoke(JOURNAL_MENU, MENU_ROOT + ".forcePageReset")
endFunction
; @interface
function SetTitleText(string a_text)
UI.InvokeString(JOURNAL_MENU, MENU_ROOT + ".setTitleText", a_text)
endFunction
; @interface
function SetInfoText(string a_text)
_infoText = a_text
endFunction
; @interface
function SetCursorPosition(int a_position)
if (a_position < 128)
_cursorPosition = a_position
endIf
endFunction
; @interface
function SetCursorFillMode(int a_fillMode)
if (a_fillMode == LEFT_TO_RIGHT || a_fillMode == TOP_TO_BOTTOM)
_cursorFillMode = a_fillMode
endIf
endFunction
; @interface
int function AddEmptyOption()
return AddOption(OPTION_TYPE_EMPTY, none, none, 0, 0)
endFunction
; @interface
int function AddHeaderOption(string a_text, int a_flags = 0)
return AddOption(OPTION_TYPE_HEADER, a_text, none, 0, a_flags)
endFunction
; @interface
int function AddTextOption(string a_text, string a_value, int a_flags = 0)
return AddOption(OPTION_TYPE_TEXT, a_text, a_value, 0, a_flags)
endFunction
; @interface
int function AddToggleOption(string a_text, bool a_checked, int a_flags = 0)
return AddOption(OPTION_TYPE_TOGGLE, a_text, none, a_checked as int, a_flags)
endfunction
; @interface
int function AddSliderOption(string a_text, float a_value, string a_formatString = "{0}", int a_flags = 0)
return AddOption(OPTION_TYPE_SLIDER, a_text, a_formatString, a_value, a_flags)
endFunction
; @interface
int function AddMenuOption(string a_text, string a_value, int a_flags = 0)
return AddOption(OPTION_TYPE_MENU, a_text, a_value, 0, a_flags)
endFunction
; @interface
int function AddColorOption(string a_text, int a_color, int a_flags = 0)
return AddOption(OPTION_TYPE_COLOR, a_text, none, a_color, a_flags)
endFunction
; @interface
int function AddKeyMapOption(string a_text, int a_keyCode, int a_flags = 0)
return AddOption(OPTION_TYPE_KEYMAP, a_text, none, a_keyCode, a_flags)
endFunction
; @interface
function AddTextOptionST(string a_stateName, string a_text, string a_value, int a_flags = 0)
AddOptionST(a_stateName, OPTION_TYPE_TEXT, a_text, a_value, 0, a_flags)
endFunction
; @interface
function AddToggleOptionST(string a_stateName, string a_text, bool a_checked, int a_flags = 0)
AddOptionST(a_stateName, OPTION_TYPE_TOGGLE, a_text, none, a_checked as int, a_flags)
endfunction
; @interface
function AddSliderOptionST(string a_stateName, string a_text, float a_value, string a_formatString = "{0}", int a_flags = 0)
AddOptionST(a_stateName, OPTION_TYPE_SLIDER, a_text, a_formatString, a_value, a_flags)
endFunction
; @interface
function AddMenuOptionST(string a_stateName, string a_text, string a_value, int a_flags = 0)
AddOptionST(a_stateName, OPTION_TYPE_MENU, a_text, a_value, 0, a_flags)
endFunction
; @interface
function AddColorOptionST(string a_stateName, string a_text, int a_color, int a_flags = 0)
AddOptionST(a_stateName, OPTION_TYPE_COLOR, a_text, none, a_color, a_flags)
endFunction
; @interface
function AddKeyMapOptionST(string a_stateName, string a_text, int a_keyCode, int a_flags = 0)
AddOptionST(a_stateName, OPTION_TYPE_KEYMAP, a_text, none, a_keyCode, a_flags)
endFunction
; @interface
function LoadCustomContent(string a_source, float a_x = 0.0, float a_y = 0.0)
float[] params = new float[2]
params[0] = a_x
params[1] = a_y
UI.InvokeFloatA(JOURNAL_MENU, MENU_ROOT + ".setCustomContentParams", params)
UI.InvokeString(JOURNAL_MENU, MENU_ROOT + ".loadCustomContent", a_source)
endFunction
; @interface
function UnloadCustomContent()
UI.Invoke(JOURNAL_MENU, MENU_ROOT + ".unloadCustomContent")
endFunction
; @interface
function SetOptionFlags(int a_option, int a_flags, bool a_noUpdate = false)
if (_state == STATE_RESET)
Error("Cannot set option flags while in OnPageReset(). Pass flags to AddOption instead")
return
endIf
int index = a_option % 0x100
; Update flags buffer
int oldFlags = _optionFlagsBuf[index] as int
oldFlags %= 0x100 ; Clear upper bytes, keep type
oldFlags += a_flags * 0x100 ; Set new flags
; Update display
int[] params = new int[2]
params[0] = index
params[1] = a_flags
UI.InvokeIntA(JOURNAL_MENU, MENU_ROOT + ".setOptionFlags", params)
if (!a_noUpdate)
UI.Invoke(JOURNAL_MENU, MENU_ROOT + ".invalidateOptionData")
endIf
endFunction
; @interface
function SetTextOptionValue(int a_option, string a_value, bool a_noUpdate = false)
int index = a_option % 0x100
int type = _optionFlagsBuf[index] % 0x100
if (type != OPTION_TYPE_TEXT)
int pageIdx = ((a_option / 0x100) as int) - 1
if (pageIdx != -1)
Error("Option type mismatch. Expected text option, page \"" + Pages[pageIdx] + "\", index " + index)
else
Error("Option type mismatch. Expected text option, page \"\", index " + index)
endIf
return
endIf
SetOptionStrValue(index, a_value, a_noUpdate)
endFunction
; @interface
function SetToggleOptionValue(int a_option, bool a_checked, bool a_noUpdate = false)
int index = a_option % 0x100
int type = _optionFlagsBuf[index] % 0x100
if (type != OPTION_TYPE_TOGGLE)
int pageIdx = ((a_option / 0x100) as int) - 1
if (pageIdx != -1)
Error("Option type mismatch. Expected toggle option, page \"" + Pages[pageIdx] + "\", index " + index)
else
Error("Option type mismatch. Expected toggle option, page \"\", index " + index)
endIf
return
endIf
SetOptionNumValue(index, a_checked as int, a_noUpdate)
endfunction
; @interface
function SetSliderOptionValue(int a_option, float a_value, string a_formatString = "{0}", bool a_noUpdate = false)
int index = a_option % 0x100
int type = _optionFlagsBuf[index] % 0x100
if (type != OPTION_TYPE_SLIDER)
int pageIdx = ((a_option / 0x100) as int) - 1
if (pageIdx != -1)
Error("Option type mismatch. Expected slider option, page \"" + Pages[pageIdx] + "\", index " + index)
else
Error("Option type mismatch. Expected slider option, page \"\", index " + index)
endIf
return
endIf
SetOptionValues(index, a_formatString, a_value, a_noUpdate)
endFunction
; @interface
function SetMenuOptionValue(int a_option, string a_value, bool a_noUpdate = false)
int index = a_option % 0x100
int type = _optionFlagsBuf[index] % 0x100
if (type != OPTION_TYPE_MENU)
int pageIdx = ((a_option / 0x100) as int) - 1
if (pageIdx != -1)
Error("Option type mismatch. Expected menu option, page \"" + Pages[pageIdx] + "\", index " + index)
else
Error("Option type mismatch. Expected menu option, page \"\", index " + index)
endIf
return
endIf
SetOptionStrValue(index, a_value, a_noUpdate)
endFunction
; @interface
function SetColorOptionValue(int a_option, int a_color, bool a_noUpdate = false)
int index = a_option % 0x100
int type = _optionFlagsBuf[index] % 0x100
if (type != OPTION_TYPE_COLOR)
int pageIdx = ((a_option / 0x100) as int) - 1
if (pageIdx != -1)
Error("Option type mismatch. Expected color option, page \"" + Pages[pageIdx] + "\", index " + index)
else
Error("Option type mismatch. Expected color option, page \"\", index " + index)
endIf
return
endIf
SetOptionNumValue(index, a_color, a_noUpdate)
endFunction
; @interface
function SetKeyMapOptionValue(int a_option, int a_keyCode, bool a_noUpdate = false)
int index = a_option % 0x100
int type = _optionFlagsBuf[index] % 0x100
if (type != OPTION_TYPE_KEYMAP)
int pageIdx = ((a_option / 0x100) as int) - 1
if (pageIdx != -1)
Error("Option type mismatch. Expected keymap option, page \"" + Pages[pageIdx] + "\", index " + index)
else
Error("Option type mismatch. Expected keymap option, page \"\", index " + index)
endIf
return
endIf
SetOptionNumValue(index, a_keyCode, a_noUpdate)
endFunction
; @interface
function SetOptionFlagsST(int a_flags, bool a_noUpdate = false, string a_stateName = "")
if (_state == STATE_RESET)
Error("Cannot set option flags while in OnPageReset(). Pass flags to AddOption instead")
return
endIf
int index = GetStateOptionIndex(a_stateName)
if (index < 0)
Error("Cannot use SetOptionFlagsST outside a valid option state")
return
endIf
SetOptionFlags(index, a_flags, a_noUpdate)
endFunction
; @interface
function SetTextOptionValueST(string a_value, bool a_noUpdate = false, string a_stateName = "")
int index = GetStateOptionIndex(a_stateName)
if (index < 0)
Error("Cannot use SetTextOptionValueST outside a valid option state")
return
endIf
SetTextOptionValue(index, a_value, a_noUpdate)
endFunction
; @interface
function SetToggleOptionValueST(bool a_checked, bool a_noUpdate = false, string a_stateName = "")
int index = GetStateOptionIndex(a_stateName)
if (index < 0)
Error("Cannot use SetToggleOptionValueST outside a valid option state")
return
endIf
SetToggleOptionValue(index, a_checked, a_noUpdate)
endFunction
; @interface
function SetSliderOptionValueST(float a_value, string a_formatString = "{0}", bool a_noUpdate = false, string a_stateName = "")
int index = GetStateOptionIndex(a_stateName)
if (index < 0)
Error("Cannot use SetSliderOptionValueST outside a valid option state")
return
endIf
SetSliderOptionValue(index, a_value, a_formatString, a_noUpdate)
endFunction
; @interface
function SetMenuOptionValueST(string a_value, bool a_noUpdate = false, string a_stateName = "")
int index = GetStateOptionIndex(a_stateName)
if (index < 0)
Error("Cannot use SetMenuOptionValueST outside a valid option state")
return
endIf
SetMenuOptionValue(index, a_value, a_noUpdate)
endFunction
; @interface
function SetColorOptionValueST(int a_color, bool a_noUpdate = false, string a_stateName = "")
int index = GetStateOptionIndex(a_stateName)
if (index < 0)
Error("Cannot use SetColorOptionValueST outside a valid option state")
return
endIf
SetColorOptionValue(index, a_color, a_noUpdate)
endFunction
; @interface
function SetKeyMapOptionValueST(int a_keyCode, bool a_noUpdate = false, string a_stateName = "")
int index = GetStateOptionIndex(a_stateName)
if (index < 0)
Error("Cannot use SetKeyMapOptionValueST outside a valid option state")
return
endIf
SetKeyMapOptionValue(index, a_keyCode, a_noUpdate)
endFunction
; @interface
function SetSliderDialogStartValue(float a_value)
if (_state != STATE_SLIDER)
Error("Cannot set slider dialog params while outside OnOptionSliderOpen()")
return
endIf
_sliderParams[0] = a_value
endFunction
; @interface
function SetSliderDialogDefaultValue(float a_value)
if (_state != STATE_SLIDER)
Error("Cannot set slider dialog params while outside OnOptionSliderOpen()")
return
endIf
_sliderParams[1] = a_value
endFunction
; @interface
function SetSliderDialogRange(float a_minValue, float a_maxValue)
if (_state != STATE_SLIDER)
Error("Cannot set slider dialog params while outside OnOptionSliderOpen()")
return
endIf
_sliderParams[2] = a_minValue
_sliderParams[3] = a_maxValue
endFunction
; @interface
function SetSliderDialogInterval(float a_value)
if (_state != STATE_SLIDER)
Error("Cannot set slider dialog params while outside OnOptionSliderOpen()")
return
endIf
_sliderParams[4] = a_value
endFunction
; @interface
function SetMenuDialogStartIndex(int a_value)
if (_state != STATE_MENU)
Error("Cannot set menu dialog params while outside OnOptionMenuOpen()")
return
endIf
_menuParams[0] = a_value
endFunction
; @interface
function SetMenuDialogDefaultIndex(int a_value)
if (_state != STATE_MENU)
Error("Cannot set menu dialog params while outside OnOptionMenuOpen()")
return
endIf
_menuParams[1] = a_value
endFunction
; @interface
function SetMenuDialogOptions(string[] a_options)
if (_state != STATE_MENU)
Error("Cannot set menu dialog params while outside OnOptionMenuOpen()")
return
endIf
UI.InvokeStringA(JOURNAL_MENU, MENU_ROOT + ".setMenuDialogOptions", a_options)
endFunction
; @interface
function SetColorDialogStartColor(int a_color)
if (_state != STATE_COLOR)
Error("Cannot set color dialog params while outside OnOptionColorOpen()")
return
endIf
_colorParams[0] = a_color
endFunction
; @interface
function SetColorDialogDefaultColor(int a_color)
if (_state != STATE_COLOR)
Error("Cannot set color dialog params while outside OnOptionColorOpen()")
return
endIf
_colorParams[1] = a_color
endFunction
; @interface
bool function ShowMessage(string a_message, bool a_withCancel = true, string a_acceptLabel = "$Accept", string a_cancelLabel = "$Cancel")
if (_waitForMessage)
Error("Called ShowMessage() while another message was already open")
return false
endIf
_waitForMessage = true
_messageResult = false
string[] params = new string[3]
params[0] = a_message
params[1] = a_acceptLabel
if (a_withCancel)
params[2] = a_cancelLabel
else
params[2] = ""
endIf
RegisterForModEvent("SKICP_messageDialogClosed", "OnMessageDialogClose")
UI.InvokeStringA(JOURNAL_MENU, MENU_ROOT + ".showMessageDialog", params)
; Wait for result
while (_waitForMessage)
Utility.WaitMenuMode(0.1)
endWhile
UnregisterForModEvent("SKICP_messageDialogClosed")
return _messageResult
endFunction
function Error(string a_msg)
Debug.Trace(self + " ERROR: " + a_msg)
endFunction
function OpenConfig()
; Alloc
_optionFlagsBuf = new int[128]
_textBuf = new string[128]
_strValueBuf = new string[128]
_numValueBuf = new float[128]
_stateOptionMap = new string[128]
SetPage("", -1)
OnConfigOpen()
UI.InvokeStringA(JOURNAL_MENU, MENU_ROOT + ".setPageNames", Pages)
endFunction
function CloseConfig()
OnConfigClose()
ClearOptionBuffers()
_waitForMessage = false
; Free
_optionFlagsBuf = new int[1]
_textBuf = new string[1]
_strValueBuf = new string[1]
_numValueBuf = new float[1]
_stateOptionMap = new string[1]
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)
_state = STATE_DEFAULT
WriteOptionBuffers()
endFunction
int function AddOption(int a_optionType, string a_text, string a_strValue, float a_numValue, int a_flags)
if (_state != STATE_RESET)
Error("Cannot add option " + a_text + " outside of OnPageReset()")
return -1
endIf
int pos = _cursorPosition
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
endFunction
function AddOptionST(string a_stateName, int a_optionType, string a_text, string a_strValue, float a_numValue, int a_flags)
if (_stateOptionMap.find(a_stateName) != -1)
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
endIf
if (_stateOptionMap[index] != "")
Error("State option index " + index + " already in use")
return
endIf
_stateOptionMap[index] = a_stateName
endFunction
int function GetStateOptionIndex(string a_stateName)
if (a_stateName == "")
a_stateName = GetState()
endIf
if (a_stateName == "")
return -1
endIf
return _stateOptionMap.find(a_stateName)
endFunction
function WriteOptionBuffers()
string menu = JOURNAL_MENU
string root = MENU_ROOT
int t = OPTION_TYPE_EMPTY
int i = 0
int optionCount = 0;
; Tell UI where to cut off the buffer
i = 0
while (i < 128)
if (_optionFlagsBuf[i] != t)
optionCount = i + 1
endif
i += 1
endWhile
UI.InvokeIntA(menu, root + ".setOptionFlagsBuffer", _optionFlagsBuf)
UI.InvokeStringA(menu, root + ".setOptionTextBuffer", _textBuf)
UI.InvokeStringA(menu, root + ".setOptionStrValueBuffer", _strValueBuf)
UI.InvokeFloatA(menu, root + ".setOptionNumValueBuffer", _numValueBuf)
UI.InvokeInt(menu, root + ".flushOptionBuffers", optionCount)
endFunction
function ClearOptionBuffers()
int t = OPTION_TYPE_EMPTY
int i = 0
while (i < 128)
_optionFlagsBuf[i] = t
_textBuf[i] = ""
_strValueBuf[i] = ""
_numValueBuf[i] = 0
; Also clear state map as it's tied to the buffers
_stateOptionMap[i] = ""
i += 1
endWhile
_cursorPosition = 0
_cursorFillMode = LEFT_TO_RIGHT
endFunction
function SetOptionStrValue(int a_index, string a_strValue, bool a_noUpdate)
if (_state == STATE_RESET)
Error("Cannot modify option data while in OnPageReset()")
return
endIf
string menu = JOURNAL_MENU
string root = MENU_ROOT
UI.SetInt(menu, root + ".optionCursorIndex", a_index)
UI.SetString(menu, root + ".optionCursor.strValue", a_strValue)
if (!a_noUpdate)
UI.Invoke(menu, root + ".invalidateOptionData")
endIf
endFunction
function SetOptionNumValue(int a_index, float a_numValue, bool a_noUpdate)
if (_state == STATE_RESET)
Error("Cannot modify option data while in OnPageReset()")
return
endIf
string menu = JOURNAL_MENU
string root = MENU_ROOT
UI.SetInt(menu, root + ".optionCursorIndex", a_index)
UI.SetFloat(menu, root + ".optionCursor.numValue", a_numValue)
if (!a_noUpdate)
UI.Invoke(menu, root + ".invalidateOptionData")
endIf
endFunction
function SetOptionValues(int a_index, string a_strValue, float a_numValue, bool a_noUpdate)
if (_state == STATE_RESET)
Error("Cannot modify option data while in OnPageReset()")
return
endIf
string menu = JOURNAL_MENU
string root = MENU_ROOT
UI.SetInt(menu, root + ".optionCursorIndex", a_index)
UI.SetString(menu, root + ".optionCursor.strValue", a_strValue)
UI.SetFloat(menu, root + ".optionCursor.numValue", a_numValue)
if (!a_noUpdate)
UI.Invoke(menu, root + ".invalidateOptionData")
endIf
endFunction
function RequestSliderDialogData(int a_index)
_activeOption = a_index + _currentPageNum * 0x100
; Defaults
_sliderParams[0] = 0
_sliderParams[1] = 0
_sliderParams[2] = 0
_sliderParams[3] = 1
_sliderParams[4] = 1
_state = STATE_SLIDER
string optionState = _stateOptionMap[a_index]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnSliderOpenST()
gotoState(oldState)
else
OnOptionSliderOpen(_activeOption)
endIf
_state = STATE_DEFAULT
UI.InvokeFloatA(JOURNAL_MENU, MENU_ROOT + ".setSliderDialogParams", _sliderParams)
endFunction
function RequestMenuDialogData(int a_index)
_activeOption = a_index + _currentPageNum * 0x100
; Defaults
_menuParams[0] = -1
_menuParams[1] = -1
_state = STATE_MENU
string optionState = _stateOptionMap[a_index]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnMenuOpenST()
gotoState(oldState)
else
OnOptionMenuOpen(_activeOption)
endIf
_state = STATE_DEFAULT
UI.InvokeIntA(JOURNAL_MENU, MENU_ROOT + ".setMenuDialogParams", _menuParams)
endFunction
function RequestColorDialogData(int a_index)
_activeOption = a_index + _currentPageNum * 0x100
; Defaults
_colorParams[0] = -1
_colorParams[1] = -1
_state = STATE_COLOR
string optionState = _stateOptionMap[a_index]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnColorOpenST()
gotoState(oldState)
else
OnOptionColorOpen(_activeOption)
endIf
_state = STATE_DEFAULT
UI.InvokeIntA(JOURNAL_MENU, MENU_ROOT + ".setColorDialogParams", _colorParams)
endFunction
function SetSliderValue(float a_value)
string optionState = _stateOptionMap[_activeOption % 0x100]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnSliderAcceptST(a_value)
gotoState(oldState)
else
OnOptionSliderAccept(_activeOption, a_value)
endIf
_activeOption = -1
endFunction
function SetMenuIndex(int a_index)
string optionState = _stateOptionMap[_activeOption % 0x100]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnMenuAcceptST(a_index)
gotoState(oldState)
else
OnOptionMenuAccept(_activeOption, a_index)
endIf
_activeOption = -1
endFunction
function SetColorValue(int a_color)
string optionState = _stateOptionMap[_activeOption % 0x100]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnColorAcceptST(a_color)
gotoState(oldState)
else
OnOptionColorAccept(_activeOption, a_color)
endIf
_activeOption = -1
endFunction
function SelectOption(int a_index)
string optionState = _stateOptionMap[a_index]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnSelectST()
gotoState(oldState)
else
int option = a_index + _currentPageNum * 0x100
OnOptionSelect(option)
endIf
endFunction
function ResetOption(int a_index)
string optionState = _stateOptionMap[a_index]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnDefaultST()
gotoState(oldState)
else
int option = a_index + _currentPageNum * 0x100
OnOptionDefault(option)
endIf
endFunction
function HighlightOption(int a_index)
_infoText = ""
if (a_index != -1)
string optionState = _stateOptionMap[a_index]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnHighlightST()
gotoState(oldState)
else
int option = a_index + _currentPageNum * 0x100
OnOptionHighlight(option)
endIf
endIf
UI.InvokeString(JOURNAL_MENU, MENU_ROOT + ".setInfoText", _infoText)
endFunction
function RemapKey(int a_index, int a_keyCode, string a_conflictControl, string a_conflictName)
string optionState = _stateOptionMap[a_index]
if (optionState != "")
string oldState = GetState()
gotoState(optionState)
OnKeyMapChangeST(a_keyCode, a_conflictControl, a_conflictName)
gotoState(oldState)
else
int option = a_index + _currentPageNum * 0x100
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
================================================
FILE: dist/Data/Scripts/Source/SKI_ConfigManager.psc
================================================
scriptname SKI_ConfigManager extends SKI_QuestBase hidden
; SCRIPT VERSION ----------------------------------------------------------------------------------
;
; History
;
; 1: - Initial version
;
; 2: - Added lock for API functions
;
; 3: - Removed lock again until I have time to test it properly
;
; 4: - Added redundancy for registration process
int function GetVersion()
return 4
endFunction
; CONSTANTS ---------------------------------------------------------------------------------------
string property JOURNAL_MENU = "Journal Menu" autoReadonly
string property MENU_ROOT = "_root.ConfigPanelFader.configPanel" autoReadonly
; PRIVATE VARIABLES -------------------------------------------------------------------------------
; -- Version 1 --
SKI_ConfigBase[] _modConfigs
string[] _modNames
int _curConfigID = 0
int _configCount = 0
SKI_ConfigBase _activeConfig
; -- Version 2 --
; keep those for now
bool _lockInit = false
bool _locked = false
; -- Version 4 --
bool _cleanupFlag = false
int _addCounter = 0
int _updateCounter = 0
; INITIALIZATION ----------------------------------------------------------------------------------
event OnInit()
_modConfigs = new SKI_ConfigBase[128]
_modNames = new string[128]
OnGameReload()
endEvent
; @implements SKI_QuestBase
event OnGameReload()
RegisterForModEvent("SKICP_modSelected", "OnModSelect")
RegisterForModEvent("SKICP_pageSelected", "OnPageSelect")
RegisterForModEvent("SKICP_optionHighlighted", "OnOptionHighlight")
RegisterForModEvent("SKICP_optionSelected", "OnOptionSelect")
RegisterForModEvent("SKICP_optionDefaulted", "OnOptionDefault")
RegisterForModEvent("SKICP_keymapChanged", "OnKeymapChange")
RegisterForModEvent("SKICP_sliderSelected", "OnSliderSelect")
RegisterForModEvent("SKICP_sliderAccepted", "OnSliderAccept")
RegisterForModEvent("SKICP_menuSelected", "OnMenuSelect")
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)
; no longer used but better safe than sorry
_lockInit = true
_cleanupFlag = true
CleanUp()
SendModEvent("SKICP_configManagerReady")
_updateCounter = 0
RegisterForSingleUpdate(5)
endEvent
; EVENTS ------------------------------------------------------------------------------------------
event OnUpdate()
if (_cleanupFlag)
CleanUp()
endIf
if (_addCounter > 0)
Debug.Notification("MCM: Registered " + _addCounter + " new menu(s).")
_addCounter = 0
endIf
SendModEvent("SKICP_configManagerReady")
if (_updateCounter < 6)
_updateCounter += 1
RegisterForSingleUpdate(5)
else
RegisterForSingleUpdate(30)
endIf
endEvent
event OnMenuOpen(string a_menuName)
GotoState("BUSY")
_activeConfig = none
UI.InvokeStringA(JOURNAL_MENU, MENU_ROOT + ".setModNames", _modNames);
endEvent
event OnMenuClose(string a_menuName)
GotoState("")
if (_activeConfig)
_activeConfig.CloseConfig()
endIf
_activeConfig = none
endEvent
event OnModSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int configIndex = a_numArg as int
if (configIndex > -1)
; We can clean the buffers of the previous menu now
if (_activeConfig)
_activeConfig.CloseConfig()
endIf
_activeConfig = _modConfigs[configIndex]
_activeConfig.OpenConfig()
endIf
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnPageSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
string page = a_strArg
int index = a_numArg as int
_activeConfig.SetPage(page, index)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnOptionHighlight(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int optionIndex = a_numArg as int
_activeConfig.HighlightOption(optionIndex)
endEvent
event OnOptionSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int optionIndex = a_numArg as int
_activeConfig.SelectOption(optionIndex)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnOptionDefault(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int optionIndex = a_numArg as int
_activeConfig.ResetOption(optionIndex)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnKeymapChange(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int optionIndex = a_numArg as int
int keyCode = UI.GetInt(JOURNAL_MENU, MENU_ROOT + ".selectedKeyCode")
; First test vanilla controls
string conflictControl = Input.GetMappedControl(keyCode)
string conflictName = ""
; Then test mod controls
int i = 0
while (conflictControl == "" && i < _modConfigs.length)
if (_modConfigs[i] != none)
conflictControl = _modConfigs[i].GetCustomControl(keyCode)
if (conflictControl != "")
conflictName = _modNames[i]
endIf
endIf
i += 1
endWhile
_activeConfig.RemapKey(optionIndex, keyCode, conflictControl, conflictName)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnSliderSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int optionIndex = a_numArg as int
_activeConfig.RequestSliderDialogData(optionIndex)
endEvent
event OnSliderAccept(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
float value = a_numArg
_activeConfig.SetSliderValue(value)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnMenuSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int optionIndex = a_numArg as int
_activeConfig.RequestMenuDialogData(optionIndex)
endEvent
event OnMenuAccept(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int value = a_numArg as int
_activeConfig.SetMenuIndex(value)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnColorSelect(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int optionIndex = a_numArg as int
_activeConfig.RequestColorDialogData(optionIndex)
endEvent
event OnColorAccept(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
int color = a_numArg as int
_activeConfig.SetColorValue(color)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
event OnDialogCancel(string a_eventName, string a_strArg, float a_numArg, Form a_sender)
UI.InvokeBool(JOURNAL_MENU, MENU_ROOT + ".unlock", true)
endEvent
; FUNCTIONS ---------------------------------------------------------------------------------------
; @interface
int function RegisterMod(SKI_ConfigBase a_menu, string a_modName)
GotoState("BUSY")
;Log("Registering config menu: " + a_menu + "(" + a_modName + ")")
if (_configCount >= 128)
GotoState("")
return -1
endIf
; Already registered?
int i = 0
while (i < _modConfigs.length)
if (_modConfigs[i] == a_menu)
GotoState("")
return i
endIf
i += 1
endWhile
; New registration
int configID = NextID()
if (configID == -1)
GotoState("")
return -1
endIf
_modConfigs[configID] = a_menu
_modNames[configID] = a_modName
_configCount += 1
; Track mods added in the current cycle so we don't have to display one message per mod
_addCounter += 1
GotoState("")
return configID
endFunction
; @interface
int function UnregisterMod(SKI_ConfigBase a_menu)
GotoState("BUSY")
;Log("Unregistering config menu: " + a_menu)
int i = 0
while (i < _modConfigs.length)
if (_modConfigs[i] == a_menu)
_modConfigs[i] = none
_modNames[i] = ""
_configCount -= 1
GotoState("")
return i
endIf
i += 1
endWhile
GotoState("")
return -1
endFunction
; @interface
function ForceReset()
Log("Forcing config manager reset...")
SendModEvent("SKICP_configManagerReset")
GotoState("BUSY")
int i = 0
while (i < _modConfigs.length)
_modConfigs[i] = none
_modNames[i] = ""
i += 1
endWhile
_curConfigID = 0
_configCount = 0
GotoState("")
SendModEvent("SKICP_configManagerReady")
endFunction
function CleanUp()
GotoState("BUSY")
_cleanupFlag = false
_configCount = 0
int i = 0
while (i < _modConfigs.length)
if (_modConfigs[i] == none || _modConfigs[i].GetFormID() == 0)
_modConfigs[i] = none
_modNames[i] = ""
else
_configCount += 1
endIf
i += 1
endWhile
GotoState("")
endFunction
int function NextID()
int startIdx = _curConfigID
while (_modConfigs[_curConfigID] != none)
_curConfigID += 1
if (_curConfigID >= 128)
_curConfigID = 0
endIf
if (_curConfigID == startIdx)
return -1 ; Just to be sure.
endIf
endWhile
return _curConfigID
endFunction
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 ---------------------------------------------------------------------------------------
state BUSY
int function RegisterMod(SKI_ConfigBase a_menu, string a_modName)
return -2
endFunction
int function UnregisterMod(SKI_ConfigBase a_menu)
return -2
endFunction
function ForceReset()
endFunction
function CleanUp()
endFunction
endState
================================================
FILE: dist/Data/Scripts/Source/SKI_ConfigMenu.psc
================================================
scriptname SKI_ConfigMenu extends SKI_ConfigBase
; SCRIPT VERSION ----------------------------------------------------------------------------------
;
; History
;
; 1: - Initial version
;
; 2: - Added category icon theme option
; - Added noIconColor option
; - Added controls section for gamepad
;
; 3: - Added disable 3D item positioning option
;
; 4: - Converted script to use state options
; - Added map menu version check
; - Added active effects widget configuration
;
; 5: - Fixed 3DItemDisablePositioning
;
; 6: - Added favorites menu options
;
; 7: - Changed page layout
;
; 8: - Removed unsupported icon themes
int function GetVersion()
return 9
endFunction
; PRIVATE VARIABLES -------------------------------------------------------------------------------
; -- Version 1 --
; Lists
string[] _alignments
string[] _alignmentValues
string[] _sizes
; State
int _itemlistFontSizeIdx = 1
int _itemlistQuantityMinCount = 6
int _itemcardAlignIdx = 2
float _itemcardXOffset = 0.0
float _itemcardYOffset = 0.0
float _3DItemXOffset = 0.0
float _3DItemYOffset = 0.0
float _3DItemScale = 1.5
int _searchKey = 57
int _switchTabKey = 56
int _equipModeKey = 42
; Internal
float _itemXBase
float _itemXBaseW
; -- Version 2 --
; Lists
string[] _categoryIconThemeShortNames
string[] _categoryIconThemeLongNames
string[] _categoryIconThemeValues
; State
int _categoryIconThemeIdx = 0
bool _itemlistNoIconColors = false
int _switchTabButton = 271 ; BACK
int _prevColumnButton = 274 ; LEFT_SHOULDER
int _nextColumnButton = 275 ; RIGHT_SHOULDER
int _sortOrderButton = 272 ; LEFT_THUMB
; -- Version 3 --
; State
bool _3DItemDisablePositioning = false
; Internal
float _fInventory3DItemPosXWide
float _fInventory3DItemPosX
float _fMagic3DItemPosXWide
float _fMagic3DItemPosX
; Flags
int _3DItemFlags
; -- Version 4 --
; Lists
string[] _orientations
string[] _orientationValues
string[] _vertAlignments
string[] _vertAlignmentValues
float[] _effectWidgetIconSizeValues
float[] _alignmentBaseOffsets
float[] _vertAlignmentBaseOffsets
; State
int _effectWidgetIconSizeIdx = 1 ; medium
int _effectWidgetVAnchorIdx = 0 ; top
int _effectWidgetHAnchorIdx = 1 ; right
int _effectWidgetGroupCount = 8
int _effectWidgetOrientationIdx = 1 ; vertical
float _effectWidgetXOffset = 0.0
float _effectWidgetYOffset = 0.0
; Flags
int _effectWidgetFlags
; -- Version 5 --
; Internal
float _fInventory3DItemPosZWide
float _fInventory3DItemPosZ
float _fMagic3DItemPosZWide
float _fMagic3DItemPosZ
float _fInventory3DItemPosScaleWide
float _fMagic3DItemPosScaleWide
float _fInventory3DItemPosScale
float _fMagic3DItemPosScale
; -- Version 6 --
; Lists
string[] _favGroupNames
; State
int _favCurGroupIdx = 0
; PROPERTIES --------------------------------------------------------------------------------------
; -- Version 1 --
SKI_SettingsManager property SKI_SettingsManagerInstance auto
SKI_Main property SKI_MainInstance auto
; -- Version 4 --
SKI_ActiveEffectsWidget property SKI_ActiveEffectsWidgetInstance auto
; -- Version 6 --
SKI_FavoritesManager property SKI_FavoritesManagerInstance auto
; INITIALIZATION ----------------------------------------------------------------------------------
; @overrides SKI_ConfigBase
event OnConfigInit()
; Translate strings to display in UI
_alignments = new string[3]
_alignments[0] = "$Left"
_alignments[1] = "$Right"
_alignments[2] = "$Center"
_sizes = new string[3]
_sizes[0] = "$Small"
_sizes[1] = "$Medium"
_sizes[2] = "$Large"
; Strings used as variable values
_alignmentValues = new string[3]
_alignmentValues[0] = "left"
_alignmentValues[1] = "right"
_alignmentValues[2] = "center"
ApplySettings()
endEvent
; @implements SKI_QuestBase
event OnGameReload()
parent.OnGameReload()
ApplySettings()
endEvent
; @implements SKI_QuestBase
event OnVersionUpdate(int a_version)
; Version 2
if (a_version >= 2 && CurrentVersion < 2)
Debug.Trace(self + ": Updating to script version 2")
_categoryIconThemeShortNames = new string[4]
_categoryIconThemeShortNames[0] = "SKYUI V3"
_categoryIconThemeShortNames[1] = "CELTIC"
_categoryIconThemeShortNames[2] = "CURVED"
_categoryIconThemeShortNames[3] = "STRAIGHT"
_categoryIconThemeLongNames = new string[4]
_categoryIconThemeLongNames[0] = "SkyUI V3, 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"
; Have been renamed, so clear old overrides and set new ones
SKI_SettingsManagerInstance.ClearOverride("Input$controls$search")
SKI_SettingsManagerInstance.ClearOverride("Input$controls$switchTab")
SKI_SettingsManagerInstance.ClearOverride("Input$controls$equipMode")
SKI_SettingsManagerInstance.SetOverride("Input$controls$pc$search", _searchKey)
SKI_SettingsManagerInstance.SetOverride("Input$controls$pc$switchTab", _switchTabKey)
SKI_SettingsManagerInstance.SetOverride("Input$controls$pc$equipMode", _equipModeKey)
endIf
if (a_version >= 3 && CurrentVersion < 3)
Debug.Trace(self + ": Updating to script version 3")
_3DItemFlags = OPTION_FLAG_NONE
;The below all reset to true with version 3.2
;SKI_MainInstance.InventoryMenuCheckEnabled
;SKI_MainInstance.MagicMenuCheckEnabled
;SKI_MainInstance.BarterMenuCheckEnabled
;SKI_MainInstance.ContainerMenuCheckEnabled
;SKI_MainInstance.GiftMenuCheckEnabled
endIf
if (a_version >= 4 && CurrentVersion < 4)
Debug.Trace(self + ": Updating to script version 4")
_orientations = new string[2]
_orientations[0] = "$Horizontal"
_orientations[1] = "$Vertical"
_orientationValues = new string[2]
_orientationValues[0] = "horizontal"
_orientationValues[1] = "vertical"
_vertAlignments = new string[3]
_vertAlignments[0] = "$Top"
_vertAlignments[1] = "$Bottom"
_vertAlignments[2] = "$Center"
_vertAlignmentValues = new string[3]
_vertAlignmentValues[0] = "top"
_vertAlignmentValues[1] = "bottom"
_vertAlignmentValues[2] = "center"
_effectWidgetIconSizeValues = new float[3]
_effectWidgetIconSizeValues[0] = 32.0
_effectWidgetIconSizeValues[1] = 48.0
_effectWidgetIconSizeValues[2] = 64.0
_alignmentBaseOffsets = new float[3]
_alignmentBaseOffsets[0] = 0.0
_alignmentBaseOffsets[1] = 1280.0
_alignmentBaseOffsets[2] = 640.0
_vertAlignmentBaseOffsets = new float[3]
_vertAlignmentBaseOffsets[0] = 0.0
_vertAlignmentBaseOffsets[1] = 720.0
_vertAlignmentBaseOffsets[2] = 360.0
_effectWidgetFlags = OPTION_FLAG_NONE
; Sync widget default values
SKI_ActiveEffectsWidgetInstance.Enabled = true
SKI_ActiveEffectsWidgetInstance.EffectSize = _effectWidgetIconSizeValues[_effectWidgetIconSizeIdx]
SKI_ActiveEffectsWidgetInstance.HAnchor = _alignmentValues[_effectWidgetHAnchorIdx]
SKI_ActiveEffectsWidgetInstance.VAnchor = _vertAlignmentValues[_effectWidgetVAnchorIdx]
SKI_ActiveEffectsWidgetInstance.GroupEffectCount = _effectWidgetGroupCount
SKI_ActiveEffectsWidgetInstance.Orientation = _orientationValues[_effectWidgetOrientationIdx]
SKI_ActiveEffectsWidgetInstance.X = _alignmentBaseOffsets[_effectWidgetHAnchorIdx] + _effectWidgetXOffset
SKI_ActiveEffectsWidgetInstance.Y = _vertAlignmentBaseOffsets[_effectWidgetVAnchorIdx] + _effectWidgetYOffset
endIf
if (a_version >= 5 && CurrentVersion < 5)
Debug.Trace(self + ": Updating to script version 5")
endIf
if (a_version >= 6 && CurrentVersion < 6)
Debug.Trace(self + ": Updating to script version 6")
Pages = new string[3]
Pages[0] = "$General"
Pages[1] = "$Favorite Groups"
Pages[2] = "$Advanced"
_favGroupNames = new string[8]
_favGroupNames[0] = "$Group {1}"
_favGroupNames[1] = "$Group {2}"
_favGroupNames[2] = "$Group {3}"
_favGroupNames[3] = "$Group {4}"
_favGroupNames[4] = "$Group {5}"
_favGroupNames[5] = "$Group {6}"
_favGroupNames[6] = "$Group {7}"
_favGroupNames[7] = "$Group {8}"
endIf
if (a_version >= 7 && CurrentVersion < 7)
Debug.Trace(self + ": Updating to script version 7")
Pages = new string[3]
Pages[0] = "$General"
Pages[1] = "$Controls"
Pages[2] = "$Advanced"
endIf
if (a_version >= 8 && CurrentVersion < 8)
Debug.Trace(self + ": Updating to script version 8")
_categoryIconThemeShortNames = new string[1]
_categoryIconThemeShortNames[0] = "SKYUI V5"
_categoryIconThemeLongNames = new string[1]
_categoryIconThemeLongNames[0] = "SkyUI V5, by PsychoSteve"
_categoryIconThemeValues = new string[1]
_categoryIconThemeValues[0] = "skyui\\icons_category_psychosteve.swf"
_categoryIconThemeIdx = 0
SKI_SettingsManagerInstance.ClearOverride("Appearance$icons$category$source")
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
; EVENTS ------------------------------------------------------------------------------------------
; @implements SKI_ConfigBase
event OnPageReset(string a_page)
; Load custom .swf for animated logo
if (a_page == "")
LoadCustomContent("skyui/skyui_splash.swf")
return
else
UnloadCustomContent()
endIf
; -------------------------------------------------------
if (a_page == "$General")
SetCursorFillMode(TOP_TO_BOTTOM)
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])
AddToggleOptionST("ITEMLIST_NO_ICON_COLORS", "$Disable Icon Colors", _itemlistNoIconColors)
AddEmptyOption()
AddHeaderOption("$Active Effects HUD")
AddToggleOptionST("EFFECT_WIDGET_ENABLED", "$Enabled", SKI_ActiveEffectsWidgetInstance.Enabled)
AddTextOptionST("EFFECT_WIDGET_ICON_SIZE","$Icon Size", _sizes[_effectWidgetIconSizeIdx], _effectWidgetFlags)
AddSliderOptionST("EFFECT_WIDGET_MIN_TIME_LEFT", "$Minimum Time Left", SKI_ActiveEffectsWidgetInstance.MinimumTimeLeft, "{0} s", _effectWidgetFlags)
SetCursorPosition(1)
AddHeaderOption("$Favorites Menu")
AddToggleOptionST("FAV_MENU_HELP_ENABLED", "$Show Button Help", SKI_FavoritesManagerInstance.ButtonHelpEnabled)
AddEmptyOption()
int ARMOR_FLAG = SKI_FavoritesManagerInstance.GROUP_FLAG_UNEQUIP_ARMOR
int HANDS_FLAG = SKI_FavoritesManagerInstance.GROUP_FLAG_UNEQUIP_HANDS
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))
; -------------------------------------------------------
elseIf (a_page == "$Controls")
bool isGamepad = Game.UsingGamepad()
SetCursorFillMode(TOP_TO_BOTTOM)
AddHeaderOption("$Item List")
if (! isGamepad)
AddKeyMapOptionST("SEARCH_KEY", "$Search", _searchKey)
AddKeyMapOptionST("SWITCH_TAB_KEY", "$Switch Tab", _switchTabKey)
AddKeyMapOptionST("EQUIP_MODE_KEY", "$Equip Mode", _equipModeKey)
else
AddKeyMapOptionST("SEARCH_KEY", "$Search", _searchKey, OPTION_FLAG_DISABLED)
AddKeyMapOptionST("SWITCH_TAB_BUTTON", "$Switch Tab", _switchTabButton)
AddKeyMapOptionST("PREV_COLUMN_BUTTON", "$Previous Column", _prevColumnButton)
AddKeyMapOptionST("NEXT_COLUMN_BUTTON", "$Next Column", _nextColumnButton)
AddKeyMapOptionST("SORT_ORDER_BUTTON", "$Order", _sortOrderButton)
endIf
if (! isGamepad)
AddEmptyOption()
AddHeaderOption("$Favorites Menu")
AddKeyMapOptionST("FAV_GROUP_ADD_KEY", "{$Group}/{$Ungroup}", SKI_FavoritesManagerInstance.GroupAddKey)
AddKeyMapOptionST("FAV_GROUP_USE_KEY", "$Group Use", SKI_FavoritesManagerInstance.GroupUseKey)
AddKeyMapOptionST("FAV_SET_ICON_KEY", "$Set Group Icon", SKI_FavoritesManagerInstance.SetIconKey)
AddKeyMapOptionST("FAV_EQUIP_STATE_KEY", "$Save Equip State", SKI_FavoritesManagerInstance.SaveEquipStateKey)
AddKeyMapOptionST("FAV_TOGGLE_FOCUS", "$Toggle Focus", SKI_FavoritesManagerInstance.ToggleFocusKey)
endIf
SetCursorPosition(1)
int[] groupHotkeys = SKI_FavoritesManagerInstance.GetGroupHotkeys()
AddHeaderOption("$Favorite Groups")
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY1", "$Group {1}", groupHotkeys[0], OPTION_FLAG_WITH_UNMAP)
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY2", "$Group {2}", groupHotkeys[1], OPTION_FLAG_WITH_UNMAP)
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY3", "$Group {3}", groupHotkeys[2], OPTION_FLAG_WITH_UNMAP)
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY4", "$Group {4}", groupHotkeys[3], OPTION_FLAG_WITH_UNMAP)
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY5", "$Group {5}", groupHotkeys[4], OPTION_FLAG_WITH_UNMAP)
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY6", "$Group {6}", groupHotkeys[5], OPTION_FLAG_WITH_UNMAP)
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY7", "$Group {7}", groupHotkeys[6], OPTION_FLAG_WITH_UNMAP)
AddKeyMapOptionST("FAV_GROUP_USE_HOTKEY8", "$Group {8}", groupHotkeys[7], OPTION_FLAG_WITH_UNMAP)
; -------------------------------------------------------
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)
AddSliderOptionST("XD_ITEM_SCALE", "$Scale", _3DItemScale, "{1}", _3DItemFlags)
AddToggleOptionST("XD_ITEM_POSITIONING", "$Disable Positioning", _3DItemDisablePositioning)
AddEmptyOption()
AddHeaderOption("$Active Effects HUD")
AddTextOptionST("EFFECT_WIDGET_ORIENTATION", "$Orientation", _orientations[_effectWidgetOrientationIdx], _effectWidgetFlags)
AddTextOptionST("EFFECT_WIDGET_HORIZONTAL_ANCHOR", "$Horizontal Anchor", _alignments[_effectWidgetHAnchorIdx], _effectWidgetFlags)
AddTextOptionST("EFFECT_WIDGET_VERTICAL_ANCHOR", "$Vertical Anchor", _vertAlignments[_effectWidgetVAnchorIdx], _effectWidgetFlags)
AddSliderOptionST("EFFECT_WIDGET_GROUP_COUNT", "$Icon Group Count", SKI_ActiveEffectsWidgetInstance.GroupEffectCount, "{0}", _effectWidgetFlags)
AddSliderOptionST("EFFECT_WIDGET_XOFFSET", "$Horizontal Offset", _effectWidgetXOffset, "{0}", _effectWidgetFlags)
AddSliderOptionST("EFFECT_WIDGET_YOFFSET", "$Vertical Offset", _effectWidgetYOffset, "{0}", _effectWidgetFlags)
SetCursorPosition(1)
AddHeaderOption("$Item Card")
AddTextOptionST("ITEMCARD_ALIGN", "$Align", _alignments[_itemcardAlignIdx])
AddSliderOptionST("ITEMCARD_XOFFSET", "$Horizontal Offset", _itemcardXOffset)
AddSliderOptionST("ITEMCARD_YOFFSET", "$Vertical Offset", _itemcardYOffset)
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_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
; STATE OPTIONS -----------------------------------------------------------------------------------
state FAV_GROUP_ADD_KEY ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
if (! ValidateKey(a_keyCode, false))
return
endIf
SKI_FavoritesManagerInstance.GroupAddKey = a_keyCode
RefreshFavoriteHotkeys()
endEvent
event OnDefaultST()
SKI_FavoritesManagerInstance.GroupAddKey = 33
RefreshFavoriteHotkeys()
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{F}")
endEvent
endState
state FAV_GROUP_USE_KEY ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
if (! ValidateKey(a_keyCode, false))
return
endIf
SKI_FavoritesManagerInstance.GroupUseKey = a_keyCode
RefreshFavoriteHotkeys()
endEvent
event OnDefaultST()
SKI_FavoritesManagerInstance.GroupUseKey = 19
RefreshFavoriteHotkeys()
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{R}")
endEvent
endState
state FAV_SET_ICON_KEY ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
if (! ValidateKey(a_keyCode, false))
return
endIf
SKI_FavoritesManagerInstance.SetIconKey = a_keyCode
RefreshFavoriteHotkeys()
endEvent
event OnDefaultST()
SKI_FavoritesManagerInstance.SetIconKey = 56
RefreshFavoriteHotkeys()
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{LAlt}")
endEvent
endState
state FAV_EQUIP_STATE_KEY ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
if (! ValidateKey(a_keyCode, false))
return
endIf
SKI_FavoritesManagerInstance.SaveEquipStateKey = a_keyCode
RefreshFavoriteHotkeys()
endEvent
event OnDefaultST()
SKI_FavoritesManagerInstance.SaveEquipStateKey = 20
RefreshFavoriteHotkeys()
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{T}")
endEvent
endState
state FAV_TOGGLE_FOCUS ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
if (! ValidateKey(a_keyCode, false))
return
endIf
SKI_FavoritesManagerInstance.ToggleFocusKey = a_keyCode
RefreshFavoriteHotkeys()
endEvent
event OnDefaultST()
SKI_FavoritesManagerInstance.ToggleFocusKey = 57
RefreshFavoriteHotkeys()
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{Space}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY1 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(0, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(0, 59)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{F1}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY2 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(1, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(1, 60)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{F2}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY3 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(2, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(2, 61)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{F3}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY4 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(3, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(3, 62)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{F4}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY5 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(4, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(4, -1)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{$Off}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY6 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(5, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(5, -1)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{$Off}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY7 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(6, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(6, -1)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{$Off}")
endEvent
endState
state FAV_GROUP_USE_HOTKEY8 ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
SetFavoritesGroupHotkey(7, a_keyCode, a_conflictControl, a_conflictName)
endEvent
event OnDefaultST()
SetFavoritesGroupHotkey(7, -1)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{$Off}")
endEvent
endState
state FAV_MENU_HELP_ENABLED ; TOGGLE
event OnSelectST()
bool newVal = !SKI_FavoritesManagerInstance.ButtonHelpEnabled
SKI_FavoritesManagerInstance.ButtonHelpEnabled = newVal
SetToggleOptionValueST(newVal)
endEvent
event OnDefaultST()
SKI_FavoritesManagerInstance.ButtonHelpEnabled = true
SetToggleOptionValueST(true)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{$On}")
endEvent
endState
state FAV_GROUP_SELECT ; MENU
event OnMenuOpenST()
SetMenuDialogStartIndex(_favCurGroupIdx)
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(_favGroupNames)
endEvent
event OnMenuAcceptST(int a_index)
_favCurGroupIdx = a_index
SetCurrentFavoriteGroup(_favCurGroupIdx)
SetMenuOptionValueST(_favGroupNames[_favCurGroupIdx])
endEvent
event OnDefaultST()
_favCurGroupIdx = 0
SetCurrentFavoriteGroup(_favCurGroupIdx)
SetTextOptionValueST(_favCurGroupIdx+1)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO6")
endEvent
endState
state FAV_GROUP_UNEQUIP_ARMOR ; TOGGLE
event OnSelectST()
int ARMOR_FLAG = SKI_FavoritesManagerInstance.GROUP_FLAG_UNEQUIP_ARMOR
bool newVal = !SKI_FavoritesManagerInstance.GetGroupFlag(_favCurGroupIdx, ARMOR_FLAG)
SKI_FavoritesManagerInstance.SetGroupFlag(_favCurGroupIdx, ARMOR_FLAG, newVal)
SetToggleOptionValueST(newVal)
endEvent
event OnDefaultST()
int ARMOR_FLAG = SKI_FavoritesManagerInstance.GROUP_FLAG_UNEQUIP_ARMOR
SKI_FavoritesManagerInstance.SetGroupFlag(_favCurGroupIdx, ARMOR_FLAG, false)
SetToggleOptionValueST(false)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO7{$Off}")
endEvent
endState
state FAV_GROUP_UNEQUIP_HANDS ; TOGGLE
event OnSelectST()
int HANDS_FLAG = SKI_FavoritesManagerInstance.GROUP_FLAG_UNEQUIP_HANDS
bool newVal = !SKI_FavoritesManagerInstance.GetGroupFlag(_favCurGroupIdx, HANDS_FLAG)
SKI_FavoritesManagerInstance.SetGroupFlag(_favCurGroupIdx, HANDS_FLAG, newVal)
SetToggleOptionValueST(newVal)
endEvent
event OnDefaultST()
int HANDS_FLAG = SKI_FavoritesManagerInstance.GROUP_FLAG_UNEQUIP_ARMOR
SKI_FavoritesManagerInstance.SetGroupFlag(_favCurGroupIdx, HANDS_FLAG, false)
SetToggleOptionValueST(false)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO8{$Off}")
endEvent
endState
; -------------------------------------------------------
state ITEMLIST_FONT_SIZE ; TEXT
event OnSelectST()
if (_itemlistFontSizeIdx < _sizes.length - 1)
_itemlistFontSizeIdx += 1
else
_itemlistFontSizeIdx = 0
endif
SetTextOptionValueST(_sizes[_itemlistFontSizeIdx])
ApplyItemListFontSize()
endEvent
event OnDefaultST()
_itemlistFontSizeIdx = 1
SetTextOptionValueST(_sizes[_itemlistFontSizeIdx])
ApplyItemListFontSize()
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{" + _sizes[1] + "}")
endEvent
endState
state ITEMLIST_QUANTITY_MIN_COUNT ; SLIDER
event OnSliderOpenST()
SetSliderDialogStartValue(_itemlistQuantityMinCount)
SetSliderDialogDefaultValue(6)
SetSliderDialogRange(0, 100)
SetSliderDialogInterval(1)
endEvent
event OnSliderAcceptST(float a_value)
_itemlistQuantityMinCount = a_value as int
SetSliderOptionValueST(_itemlistQuantityMinCount)
SKI_SettingsManagerInstance.SetOverride("ItemList$quantityMenu$minCount", _itemlistQuantityMinCount)
endEvent
event OnDefaultST()
_itemlistQuantityMinCount = 6
SetSliderOptionValueST(_itemlistQuantityMinCount)
SKI_SettingsManagerInstance.SetOverride("ItemList$quantityMenu$minCount", _itemlistQuantityMinCount)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO2{6}")
endEvent
endState
state ITEMLIST_CATEGORY_ICON_THEME ; MENU
event OnMenuOpenST()
SetMenuDialogStartIndex(_categoryIconThemeIdx)
SetMenuDialogDefaultIndex(0)
SetMenuDialogOptions(_categoryIconThemeLongNames)
endEvent
event OnMenuAcceptST(int a_index)
_categoryIconThemeIdx = a_index
SetMenuOptionValueST(_categoryIconThemeShortNames[_categoryIconThemeIdx])
SKI_SettingsManagerInstance.SetOverride("Appearance$icons$category$source", _categoryIconThemeValues[_categoryIconThemeIdx])
endEvent
event OnDefaultST()
_categoryIconThemeIdx = 0
SetTextOptionValueST(_categoryIconThemeShortNames[_categoryIconThemeIdx])
SKI_SettingsManagerInstance.SetOverride("Appearance$icons$category$source", _categoryIconThemeValues[_categoryIconThemeIdx])
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{" + _categoryIconThemeShortNames[0] + "}")
endEvent
endState
state ITEMLIST_NO_ICON_COLORS ; TOGGLE
event OnSelectST()
_itemListNoIconColors = !_itemlistNoIconColors
SetToggleOptionValueST(_itemlistNoIconColors)
SKI_SettingsManagerInstance.SetOverride("Appearance$icons$item$noColor", _itemlistNoIconColors)
endEvent
event OnDefaultST()
_itemlistNoIconColors = false
SetToggleOptionValueST(_itemlistNoIconColors)
SKI_SettingsManagerInstance.SetOverride("Appearance$icons$item$noColor", _itemlistNoIconColors)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{$Off}")
endEvent
endState
; -------------------------------------------------------
state EFFECT_WIDGET_ENABLED ; TOGGLE
event OnSelectST()
bool newVal = !SKI_ActiveEffectsWidgetInstance.Enabled
SKI_ActiveEffectsWidgetInstance.Enabled = newVal
if (newVal)
_effectWidgetFlags = OPTION_FLAG_NONE
else
_effectWidgetFlags = OPTION_FLAG_DISABLED
endIf
SetOptionFlagsST(_effectWidgetFlags, true, "EFFECT_WIDGET_ICON_SIZE")
SetOptionFlagsST(_effectWidgetFlags, true, "EFFECT_WIDGET_MIN_TIME_LEFT")
SetToggleOptionValueST(newVal)
endEvent
event OnDefaultST()
SKI_ActiveEffectsWidgetInstance.Enabled = true
_effectWidgetFlags = OPTION_FLAG_NONE
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
event OnSelectST()
if (_effectWidgetIconSizeIdx < _sizes.length - 1)
_effectWidgetIconSizeIdx += 1
else
_effectWidgetIconSizeIdx = 0
endIf
SKI_ActiveEffectsWidgetInstance.EffectSize = _effectWidgetIconSizeValues[_effectWidgetIconSizeIdx]
SetTextOptionValueST(_sizes[_effectWidgetIconSizeIdx])
endEvent
event OnDefaultST()
_effectWidgetIconSizeIdx = 1
SKI_ActiveEffectsWidgetInstance.EffectSize = _effectWidgetIconSizeValues[_effectWidgetIconSizeIdx]
SetTextOptionValueST(_sizes[_effectWidgetIconSizeIdx])
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{" + _sizes[1] + "}")
endEvent
endState
state EFFECT_WIDGET_ORIENTATION ; TEXT
event OnSelectST()
if (_effectWidgetOrientationIdx < _orientations.length - 1)
_effectWidgetOrientationIdx += 1
else
_effectWidgetOrientationIdx = 0
endIf
SKI_ActiveEffectsWidgetInstance.Orientation = _orientationValues[_effectWidgetOrientationIdx]
SetTextOptionValueST(_orientations[_effectWidgetOrientationIdx])
endEvent
event OnDefaultST()
_effectWidgetOrientationIdx = 1
SKI_ActiveEffectsWidgetInstance.Orientation = _orientationValues[_effectWidgetOrientationIdx]
SetTextOptionValueST(_orientations[_effectWidgetOrientationIdx])
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{" + _orientations[1] + "}")
endEvent
endState
state EFFECT_WIDGET_HORIZONTAL_ANCHOR ; TEXT
event OnSelectST()
if (_effectWidgetHAnchorIdx < _alignments.length - 1)
_effectWidgetHAnchorIdx += 1
else
_effectWidgetHAnchorIdx = 0
endIf
SKI_ActiveEffectsWidgetInstance.HAnchor = _alignmentValues[_effectWidgetHAnchorIdx]
SKI_ActiveEffectsWidgetInstance.X = _alignmentBaseOffsets[_effectWidgetHAnchorIdx] + _effectWidgetXOffset
SetTextOptionValueST(_alignments[_effectWidgetHAnchorIdx])
endEvent
event OnDefaultST()
_effectWidgetVAnchorIdx = 1
SKI_ActiveEffectsWidgetInstance.X = _alignmentBaseOffsets[_effectWidgetHAnchorIdx] + _effectWidgetXOffset
SetTextOptionValueST(_alignments[_effectWidgetHAnchorIdx])
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{" + _alignments[1] + "}")
endEvent
endState
state EFFECT_WIDGET_VERTICAL_ANCHOR ; TEXT
event OnSelectST()
if (_effectWidgetVAnchorIdx < _vertAlignments.length - 1)
_effectWidgetVAnchorIdx += 1
else
_effectWidgetVAnchorIdx = 0
endIf
SKI_ActiveEffectsWidgetInstance.VAnchor = _vertAlignmentValues[_effectWidgetVAnchorIdx]
SKI_ActiveEffectsWidgetInstance.Y = _vertAlignmentBaseOffsets[_effectWidgetVAnchorIdx] + _effectWidgetYOffset
SetTextOptionValueST(_vertAlignments[_effectWidgetVAnchorIdx])
endEvent
event OnDefaultST()
_effectWidgetVAnchorIdx = 0
SKI_ActiveEffectsWidgetInstance.Y = _vertAlignmentBaseOffsets[_effectWidgetVAnchorIdx] + _effectWidgetYOffset
SetTextOptionValueST(_vertAlignments[_effectWidgetVAnchorIdx])
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{" + _vertAlignments[0] + "}")
endEvent
endState
state EFFECT_WIDGET_MIN_TIME_LEFT ; SLIDER
event OnSliderOpenST()
SetSliderDialogStartValue(SKI_ActiveEffectsWidgetInstance.MinimumTimeLeft)
SetSliderDialogDefaultValue(180)
SetSliderDialogRange(0, 600)
SetSliderDialogInterval(10)
endEvent
event OnSliderAcceptST(float a_value)
SKI_ActiveEffectsWidgetInstance.MinimumTimeLeft = a_value as int
SetSliderOptionValueST(a_value as int, "{0} s")
endEvent
event OnDefaultST()
SKI_ActiveEffectsWidgetInstance.MinimumTimeLeft = 180
SetSliderOptionValueST(180)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO5{180}")
endEvent
endState
state EFFECT_WIDGET_GROUP_COUNT ; SLIDER
event OnSliderOpenST()
SetSliderDialogStartValue(SKI_ActiveEffectsWidgetInstance.GroupEffectCount)
SetSliderDialogDefaultValue(8)
SetSliderDialogRange(1, 16)
SetSliderDialogInterval(1)
endEvent
event OnSliderAcceptST(float a_value)
SKI_ActiveEffectsWidgetInstance.GroupEffectCount = a_value as int
SetSliderOptionValueST(a_value as int)
endEvent
event OnDefaultST()
SKI_ActiveEffectsWidgetInstance.GroupEffectCount = 8
SetSliderOptionValueST(8)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{8}")
endEvent
endState
state EFFECT_WIDGET_XOFFSET ; SLIDER
event OnSliderOpenST()
SetSliderDialogStartValue(_effectWidgetXOffset)
SetSliderDialogDefaultValue(0)
SetSliderDialogRange(-1280, 1280)
SetSliderDialogInterval(1)
endEvent
event OnSliderAcceptST(float a_value)
_effectWidgetXOffset = a_value
SKI_ActiveEffectsWidgetInstance.X = _alignmentBaseOffsets[_effectWidgetHAnchorIdx] + _effectWidgetXOffset
SetSliderOptionValueST(_effectWidgetXOffset)
endEvent
event OnDefaultST()
_effectWidgetXOffset = 0.0
SKI_ActiveEffectsWidgetInstance.X = _alignmentBaseOffsets[_effectWidgetHAnchorIdx] + _effectWidgetXOffset
SetSliderOptionValueST(_effectWidgetXOffset)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{0}")
endEvent
endState
state EFFECT_WIDGET_YOFFSET ; SLIDER
event OnSliderOpenST()
SetSliderDialogStartValue(_effectWidgetYOffset)
SetSliderDialogDefaultValue(0)
SetSliderDialogRange(-720, 720)
SetSliderDialogInterval(1)
endEvent
event OnSliderAcceptST(float a_value)
_effectWidgetYOffset = a_value
SKI_ActiveEffectsWidgetInstance.Y = _vertAlignmentBaseOffsets[_effectWidgetVAnchorIdx] + _effectWidgetYOffset
SetSliderOptionValueST(_effectWidgetYOffset)
endEvent
event OnDefaultST()
_effectWidgetYOffset = 0.0
SKI_ActiveEffectsWidgetInstance.Y = _vertAlignmentBaseOffsets[_effectWidgetVAnchorIdx] + _effectWidgetYOffset
SetSliderOptionValueST(_effectWidgetYOffset)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{0}")
endEvent
endState
; -------------------------------------------------------
state SEARCH_KEY ; KEYMAP
event OnKeyMapChangeST(int a_keyCode, string a_conflictControl, string a_conflictName)
if (! ValidateKey(a_keyCode, false))
return
endIf
SwapItemListKey(a_keyCode, _searchKey)
_searchKey = a_keyCode
SetKeyMapOptionValueST(_searchKey)
SKI_SettingsManagerInstance.SetOverride("Input$controls$pc$search", _searchKey)
endEvent
event OnDefaultST()
_searchKey = 57
SetKeyMapOptionValueST(_searchKey)
SKI_SettingsManagerInstance.SetOverride("Input$controls$pc$search", _searchKey)
endEvent
event OnHighlightST()
SetInfoText("$SKI_INFO1{Space}")
endEvent
endState
state SWITCH_TAB_KEY ; KEYMAP
event OnKeyMapChangeS
gitextract_9k0d2l5e/
├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── build/
│ ├── .gitignore
│ ├── exported/
│ │ ├── skyui/
│ │ │ └── .gitkeep
│ │ └── widgets/
│ │ └── skyui/
│ │ └── .gitkeep
│ └── skyui/
│ └── config.txt
├── dist/
│ ├── .gitignore
│ ├── Data/
│ │ ├── Interface/
│ │ │ ├── Translations/
│ │ │ │ ├── SkyUI_czech.txt
│ │ │ │ ├── SkyUI_english.txt
│ │ │ │ ├── SkyUI_french.txt
│ │ │ │ ├── SkyUI_german.txt
│ │ │ │ ├── SkyUI_italian.txt
│ │ │ │ ├── SkyUI_japanese.txt
│ │ │ │ ├── SkyUI_polish.txt
│ │ │ │ ├── SkyUI_russian.txt
│ │ │ │ └── SkyUI_spanish.txt
│ │ │ └── skyui/
│ │ │ ├── config.txt
│ │ │ └── res/
│ │ │ └── mcm_logo.dds
│ │ ├── Readme - SkyUI.txt
│ │ ├── Scripts/
│ │ │ ├── Headers/
│ │ │ │ ├── SKI_ConfigBase.psc
│ │ │ │ └── SKI_QuestBase.psc
│ │ │ └── Source/
│ │ │ ├── SKI_ActiveEffectsWidget.psc
│ │ │ ├── SKI_ConfigBase.psc
│ │ │ ├── SKI_ConfigManager.psc
│ │ │ ├── SKI_ConfigMenu.psc
│ │ │ ├── SKI_FavoritesManager.psc
│ │ │ ├── SKI_Main.psc
│ │ │ ├── SKI_PlayerInventoryHook.psc
│ │ │ ├── SKI_PlayerLoadGameAlias.psc
│ │ │ ├── SKI_QF_ConfigManagerInstance.psc
│ │ │ ├── SKI_QuestBase.psc
│ │ │ ├── SKI_SettingsManager.psc
│ │ │ ├── SKI_WidgetBase.psc
│ │ │ └── SKI_WidgetManager.psc
│ │ ├── SkyUI_SE.esp
│ │ └── fomod/
│ │ ├── info.xml
│ │ └── script.cs
│ ├── Examples/
│ │ └── MCM/
│ │ ├── ConfigMenuTemplate.psc
│ │ ├── ExampleConfigMenu.esp
│ │ └── ExampleConfigMenu.psc
│ ├── bsascript.txt
│ ├── filegroup_all.txt
│ ├── filegroup_interface.txt
│ ├── filegroup_misc.txt
│ ├── filegroup_scripts.txt
│ ├── make_all.pl
│ ├── make_archive.pl
│ └── make_scripts.pl
├── misc/
│ ├── ArrowCount/
│ │ ├── Interface/
│ │ │ └── exported/
│ │ │ └── widgets/
│ │ │ └── skyui/
│ │ │ └── arrowcount.swf
│ │ └── Scripts/
│ │ └── Source/
│ │ └── PN_ArrowCountWidget.psc
│ ├── Configs/
│ │ ├── 5760x1080, by Ismelda/
│ │ │ └── skyui.cfg
│ │ ├── 5760x2160, by Ismelda/
│ │ │ └── skyui.cfg
│ │ └── ValueWeight Column/
│ │ └── skyui.cfg
│ ├── Flash Util/
│ │ ├── SkyUI - make_all.jsfl
│ │ ├── SkyUI - make_archive (fast).jsfl
│ │ ├── SkyUI - make_archive.jsfl
│ │ ├── build-all.jsfl
│ │ └── skyui_runscript.bat
│ ├── Icon Themes/
│ │ ├── Celtic, by GreatClone/
│ │ │ ├── skyui_icons_cat.swf
│ │ │ └── skyui_icons_inv.swf
│ │ ├── Curved, by T3T/
│ │ │ ├── skyui_icons_cat.swf
│ │ │ └── skyui_icons_inv.swf
│ │ └── Straight, by T3T/
│ │ ├── skyui_icons_cat.swf
│ │ └── skyui_icons_inv.swf
│ ├── Original Translates/
│ │ ├── Translate_ENGLISH.txt
│ │ ├── Translate_FRENCH.txt
│ │ ├── Translate_GERMAN.txt
│ │ ├── Translate_ITALIAN.txt
│ │ ├── Translate_Japanese.txt
│ │ ├── Translate_RUSSIAN.txt
│ │ ├── Translate_SPANISH.txt
│ │ ├── Translate_czech.txt
│ │ └── translate_polish.txt
│ ├── PrimaryNeeds/
│ │ ├── Interface/
│ │ │ └── exported/
│ │ │ └── widgets/
│ │ │ └── pnx/
│ │ │ └── statusicons.swf
│ │ ├── PrimaryNeeds.esp
│ │ └── Scripts/
│ │ ├── PN_FoodEffect.pex
│ │ ├── PN_IconWidget.pex
│ │ ├── PN_NeedsManager.pex
│ │ └── Source/
│ │ ├── PN_FoodEffect.psc
│ │ ├── PN_IconWidget.psc
│ │ └── PN_NeedsManager.psc
│ ├── Translations/
│ │ ├── SkyUI_Translations.txt
│ │ └── make_translations.pl
│ ├── cp-built-files
│ ├── decompile-pex
│ ├── pack-release
│ ├── rename-png
│ └── reorder-psc
├── sksevr_plugin/
│ ├── .editorconfig
│ ├── .gitignore
│ ├── README.md
│ ├── build.ini
│ ├── build.py
│ ├── lib/
│ │ └── openvr_api.lib
│ ├── lua/
│ │ ├── MainEntry.lua
│ │ ├── defaults-general.lua
│ │ ├── defaults-knuckles.lua
│ │ ├── defaults-oculus.lua
│ │ ├── defaults-vive.lua
│ │ ├── defaults-wmr.lua
│ │ └── inspect.lua
│ ├── lua-tests/
│ │ └── core_spec.lua
│ ├── luajit.vcxproj
│ ├── plugin/
│ │ ├── ControllerStateHook.cpp
│ │ ├── ControllerStateHook.h
│ │ ├── FormDB.cpp
│ │ ├── FormDB.h
│ │ ├── Globals.h
│ │ ├── Keyboard.cpp
│ │ ├── Keyboard.h
│ │ ├── PapyrusUIFix.cpp
│ │ ├── PapyrusUIFix.h
│ │ ├── ScaleformExtendedDataFix.cpp
│ │ ├── ScaleformExtendedDataFix.h
│ │ ├── Settings.cpp
│ │ ├── Settings.h
│ │ ├── VRHookAPI.h
│ │ ├── exports.def
│ │ ├── guicon.cpp
│ │ ├── guicon.h
│ │ ├── lua_glue.cpp
│ │ ├── lua_glue.h
│ │ ├── main.cpp
│ │ ├── plugin.vcxproj
│ │ ├── plugin.vcxproj.filters
│ │ └── scripts/
│ │ └── ExportPlugin.psc
│ ├── plugin.sln
│ └── tools/
│ └── run-lua-tests
└── src/
├── .gitignore
├── CLIK/
│ ├── Mouse.as
│ ├── Selection.as
│ ├── Stage.as
│ ├── System/
│ │ └── capabilities.as
│ └── gfx/
│ ├── controls/
│ │ ├── Button.as
│ │ ├── ButtonBar.as
│ │ ├── ButtonGroup.as
│ │ ├── CoreList.as
│ │ ├── OptionStepper.as
│ │ ├── RadioButton.as
│ │ ├── ScrollBar.as
│ │ ├── ScrollIndicator.as
│ │ ├── ScrollingList.as
│ │ ├── Slider.as
│ │ ├── TextArea.as
│ │ └── TextInput.as
│ ├── core/
│ │ └── UIComponent.as
│ ├── data/
│ │ └── DataProvider.as
│ ├── events/
│ │ └── EventDispatcher.as
│ ├── io/
│ │ └── GameDelegate.as
│ ├── managers/
│ │ ├── FocusHandler.as
│ │ └── InputDelegate.as
│ ├── ui/
│ │ ├── InputDetails.as
│ │ └── NavigationCode.as
│ └── utils/
│ ├── Constraints.as
│ └── Locale.as
├── Common/
│ ├── Components/
│ │ ├── BlinkOnDemandMeter.as
│ │ ├── BlinkOnEmptyMeter.as
│ │ ├── CrossPlatformButtons.as
│ │ ├── DeltaMeter.as
│ │ ├── Meter.as
│ │ └── UniformTimeMeter.as
│ ├── MouseRotationInputCatcher.as
│ ├── QuantitySlider.as
│ ├── SaveLoadPanel.as
│ ├── Shared/
│ │ ├── BSScrollingList.as
│ │ ├── ButtonChange.as
│ │ ├── ButtonTextArtHolder.as
│ │ ├── CenteredScrollingList.as
│ │ ├── ExtractPlatformText.as
│ │ ├── GlobalFunc.as
│ │ ├── ListFilterer.as
│ │ ├── Macros.as
│ │ ├── PlatformChangeUser.as
│ │ └── Platforms.as
│ ├── mx/
│ │ └── transitions/
│ │ └── Tween.as
│ ├── skse.as
│ └── skyui/
│ ├── VRInput.as
│ ├── components/
│ │ ├── BottomBarMappedButton.as
│ │ ├── ButtonPanel.as
│ │ ├── MappedButton.as
│ │ ├── MaskedTextArea.as
│ │ ├── Meter.as
│ │ ├── SearchWidget.as
│ │ ├── Slider.as
│ │ ├── TabBar.as
│ │ ├── colorswatch/
│ │ │ ├── ColorSquare.as
│ │ │ └── ColorSwatch.as
│ │ ├── dialog/
│ │ │ ├── BasicDialog.as
│ │ │ └── ColumnSelectDialog.as
│ │ └── list/
│ │ ├── BSList.as
│ │ ├── BasicEnumeration.as
│ │ ├── BasicList.as
│ │ ├── BasicListEntry.as
│ │ ├── ButtonList.as
│ │ ├── ButtonListEntry.as
│ │ ├── ColumnDescriptor.as
│ │ ├── ColumnLayoutData.as
│ │ ├── EntryClipManager.as
│ │ ├── FilteredEnumeration.as
│ │ ├── IEntryEnumeration.as
│ │ ├── IListProcessor.as
│ │ ├── ListLayout.as
│ │ ├── ListLayoutManager.as
│ │ ├── ListState.as
│ │ ├── ScrollingList.as
│ │ ├── SortedListHeader.as
│ │ ├── TabularList.as
│ │ └── TabularListEntry.as
│ ├── defines/
│ │ ├── Actor.as
│ │ ├── Armor.as
│ │ ├── ButtonArtNames.as
│ │ ├── Form.as
│ │ ├── Input.as
│ │ ├── Inventory.as
│ │ ├── Item.as
│ │ ├── Magic.as
│ │ ├── Material.as
│ │ ├── Screen.as
│ │ └── Weapon.as
│ ├── filter/
│ │ ├── IFilter.as
│ │ ├── ItemTypeFilter.as
│ │ ├── NameFilter.as
│ │ └── SortFilter.as
│ ├── props/
│ │ ├── CompoundProperty.as
│ │ ├── ItemFilter.as
│ │ ├── PropertyDataExtender.as
│ │ └── PropertyLookup.as
│ └── util/
│ ├── ColorFunctions.as
│ ├── ConfigManager.as
│ ├── Debug.as
│ ├── DialogManager.as
│ ├── EffectIconMap.as
│ ├── GlobalFunctions.as
│ ├── Hash.as
│ ├── Input.as
│ ├── MarkupParser.as
│ ├── Translator.as
│ └── Tween.as
├── CraftingMenu/
│ ├── CraftingDataSetter.as
│ ├── CraftingIconSetter.as
│ ├── CraftingListEntry.as
│ ├── CraftingLists.as
│ ├── CraftingMenu.as
│ ├── CustomAlchemyDataSetter.as
│ ├── CustomConstructDataSetter.as
│ ├── EnchantingBar.as
│ ├── IconTabList.as
│ ├── IconTabListEntry.as
│ └── craftingmenu.fla
├── Enderal/
│ ├── ButtonGrid.as
│ ├── ButtonGridEntry.as
│ ├── DataLoader.as
│ ├── SkillMenu.as
│ ├── SkillMenu.fla
│ ├── SkillMenu.swf
│ ├── SkillMenuData.txt
│ ├── SkillTreeEntry.as
│ └── SkillTreeView.as
├── FavoritesMenu/
│ ├── FavoritesIconSetter.as
│ ├── FavoritesListEntry.as
│ ├── FavoritesMenu.as
│ ├── FilterDataExtender.as
│ ├── GroupButton.as
│ ├── GroupDataExtender.as
│ └── favoritesmenu.fla
├── HUDWidgets/
│ ├── WidgetLoader.as
│ ├── activeeffects.fla
│ ├── arrowcount.fla
│ ├── meter.fla
│ ├── minimap.fla
│ ├── pnx/
│ │ └── widgets/
│ │ └── StatusIconWidget.as
│ ├── skyui/
│ │ └── widgets/
│ │ ├── WidgetBase.as
│ │ ├── activeeffects/
│ │ │ ├── ActiveEffect.as
│ │ │ ├── ActiveEffectsGroup.as
│ │ │ └── ActiveEffectsWidget.as
│ │ ├── arrowcount/
│ │ │ └── ArrowCountWidget.as
│ │ ├── meter/
│ │ │ └── MeterWidget.as
│ │ ├── minimap/
│ │ │ └── MiniMapWidget.as
│ │ └── status/
│ │ └── StatusWidget.as
│ ├── status.fla
│ ├── statusicons.fla
│ └── widgetloader.fla
├── ItemMenus/
│ ├── BarterDataSetter.as
│ ├── BarterMenu.as
│ ├── BottomBar.as
│ ├── CategoryList.as
│ ├── CategoryListEntry.as
│ ├── ContainerMenu.as
│ ├── GiftMenu.as
│ ├── InventoryDataSetter.as
│ ├── InventoryIconSetter.as
│ ├── InventoryListEntry.as
│ ├── InventoryLists.as
│ ├── InventoryMenu.as
│ ├── ItemCard.as
│ ├── ItemMenu.as
│ ├── ItemcardDataExtender.as
│ ├── MagicDataSetter.as
│ ├── MagicIconSetter.as
│ ├── MagicMenu.as
│ ├── bartermenu.fla
│ ├── bottombar.fla
│ ├── containermenu.fla
│ ├── giftmenu.fla
│ ├── inventorylists.fla
│ ├── inventorymenu.fla
│ ├── itemcard.fla
│ └── magicmenu.fla
├── MapMenu/
│ ├── Map/
│ │ ├── LocalMap.as
│ │ ├── LocationFinder.as
│ │ ├── LocationListEntry.as
│ │ ├── MapMarker.as
│ │ ├── MapMenu.as
│ │ └── MarkerDescription.as
│ └── map.fla
├── MessageBox/
│ ├── MessageBox.as
│ └── messagebox.fla
├── ModConfigPanel/
│ ├── ColorDialog.as
│ ├── ConfigPanel.as
│ ├── MenuDialog.as
│ ├── MessageDialog.as
│ ├── ModListPanel.as
│ ├── MultiColumnScrollBar.as
│ ├── MultiColumnScrollingList.as
│ ├── OptionDialog.as
│ ├── OptionsListEntry.as
│ ├── ParticleEmitter.as
│ ├── SkyUISplash.as
│ ├── SliderDialog.as
│ ├── SnowEffect.as
│ ├── TextLoader.as
│ ├── TextLoader.fla
│ ├── configpanel.fla
│ ├── mcm_splash.fla
│ └── skyui_splash.fla
├── PauseMenu/
│ ├── InputMappingArt.as
│ ├── InputMappingList.as
│ ├── JournalBottomBar.as
│ ├── JournalSaveLoadList.as
│ ├── ObjectiveScrollingList.as
│ ├── OptionsList.as
│ ├── QuestCenteredList.as
│ ├── Quest_Journal.as
│ ├── QuestsPage.as
│ ├── SettingsOptionItem.as
│ ├── StatsList.as
│ ├── StatsPage.as
│ ├── SystemPage.as
│ └── quest_journal/
│ ├── DOMDocument.xml
│ ├── LIBRARY/
│ │ ├── ButtonArt.xml
│ │ ├── ButtonBG.xml
│ │ ├── ButtonPanel.xml
│ │ ├── DialogButton.xml
│ │ ├── Divider.xml
│ │ ├── Graphic/
│ │ │ └── ButtonBG Shape.xml
│ │ ├── InputMappingArt.xml
│ │ ├── InputMappingArtBG.xml
│ │ ├── JournalBottomBarCenterReference.xml
│ │ ├── MappedButton.xml
│ │ ├── MovieClips/
│ │ │ ├── ButtonArtBackground.xml
│ │ │ ├── ConfigPanelFader.xml
│ │ │ ├── ConfirmPanel.xml
│ │ │ ├── ConfirmText.xml
│ │ │ ├── EquipIcon.xml
│ │ │ ├── HelpList.xml
│ │ │ ├── HelpListEntry.xml
│ │ │ ├── HelpListPanel.xml
│ │ │ ├── HelpTextButtonArtHolder.xml
│ │ │ ├── HelpTextHolder.xml
│ │ │ ├── HelpTextPanel.xml
│ │ │ ├── InputMappingList.xml
│ │ │ ├── InputMappingListEntry.xml
│ │ │ ├── InputMappingListScrollArrow.xml
│ │ │ ├── InputMappingPanel.xml
│ │ │ ├── JournalBackground.xml
│ │ │ ├── JournalBottomBar.xml
│ │ │ ├── JournalTab.xml
│ │ │ ├── JournalTabEnd.xml
│ │ │ ├── LevelMeterRect.xml
│ │ │ ├── LevelProgressBar.xml
│ │ │ ├── MeterBar.xml
│ │ │ ├── MeterBarBackground.xml
│ │ │ ├── MeterBarColor.xml
│ │ │ ├── MeterMask.xml
│ │ │ ├── ObjectiveListItem.xml
│ │ │ ├── ObjectiveScrollingList.xml
│ │ │ ├── ObjectivesHeader.xml
│ │ │ ├── OptionStepperArrowBtn.xml
│ │ │ ├── OptionsLists.xml
│ │ │ ├── OptionsListsList.xml
│ │ │ ├── OptionsListsListEntry.xml
│ │ │ ├── OptionsListsPanel.xml
│ │ │ ├── PCQuitList.xml
│ │ │ ├── PCQuitListEntry.xml
│ │ │ ├── PCQuitPanel.xml
│ │ │ ├── PlayerInfoText.xml
│ │ │ ├── QuestJournalBase.xml
│ │ │ ├── QuestJournalFader.xml
│ │ │ ├── QuestTitleEndpieces.xml
│ │ │ ├── QuestTitleHolder.xml
│ │ │ ├── QuestTitleList.xml
│ │ │ ├── QuestTitleListEntry.xml
│ │ │ ├── QuestTitleListEntryCentered.xml
│ │ │ ├── QuestTitleListEntryDivider.xml
│ │ │ ├── QuestsFader.xml
│ │ │ ├── QuestsPage.xml
│ │ │ ├── SaveLoadList.xml
│ │ │ ├── SaveLoadListEntry.xml
│ │ │ ├── SaveLoadPanel.xml
│ │ │ ├── ScreenshotHolder.xml
│ │ │ ├── ScrollableText.xml
│ │ │ ├── SettingsCheckBox.xml
│ │ │ ├── SettingsCheckBoxBackground.xml
│ │ │ ├── SettingsCheckBoxCheck.xml
│ │ │ ├── SettingsList.xml
│ │ │ ├── SettingsListEntry.xml
│ │ │ ├── SettingsOptionStepper.xml
│ │ │ ├── SettingsPanel.xml
│ │ │ ├── StatsCategoryListEntry.xml
│ │ │ ├── StatsCategoryListEntryCentered.xml
│ │ │ ├── StatsCategoryListHolder.xml
│ │ │ ├── StatsCategoryListList.xml
│ │ │ ├── StatsFader.xml
│ │ │ ├── StatsList.xml
│ │ │ ├── StatsListEntry.xml
│ │ │ ├── StatsPage.xml
│ │ │ ├── SystemCategoriesList.xml
│ │ │ ├── SystemCategoriesListEntry.xml
│ │ │ ├── SystemCategoriesListEntryCentered.xml
│ │ │ ├── SystemCategoryList.xml
│ │ │ ├── SystemFader.xml
│ │ │ └── SystemPage.xml
│ │ ├── Shapes/
│ │ │ ├── BackgroundRect.xml
│ │ │ ├── Endpieces_DLC01.xml
│ │ │ ├── Endpieces_DLC02.xml
│ │ │ ├── MeterBackground.xml
│ │ │ ├── Shape 122.xml
│ │ │ ├── Shape 398.xml
│ │ │ ├── Shape 400.xml
│ │ │ ├── Shape 407.xml
│ │ │ ├── Shape 409.xml
│ │ │ ├── Shape 411.xml
│ │ │ ├── Shape 414.xml
│ │ │ ├── Shape 417.xml
│ │ │ ├── Shape 432.xml
│ │ │ ├── Shape 433.xml
│ │ │ ├── Shape 435.xml
│ │ │ ├── Shape 439.xml
│ │ │ ├── Shape 440.xml
│ │ │ ├── Shape 441.xml
│ │ │ ├── Shape 442.xml
│ │ │ ├── Shape 443.xml
│ │ │ ├── Shape 444.xml
│ │ │ ├── Shape 445.xml
│ │ │ ├── Shape 446.xml
│ │ │ ├── Shape 447.xml
│ │ │ ├── Shape 468.xml
│ │ │ ├── Shape 493.xml
│ │ │ ├── Shape 499.xml
│ │ │ ├── Shape 505.xml
│ │ │ ├── Shape 507.xml
│ │ │ ├── Shape 541.xml
│ │ │ ├── Shape 548.xml
│ │ │ ├── Shape 552.xml
│ │ │ ├── Shape 556.xml
│ │ │ ├── Shape 558.xml
│ │ │ ├── Shape 560.xml
│ │ │ ├── Shape 562.xml
│ │ │ ├── Shape 569.xml
│ │ │ ├── Shape 571.xml
│ │ │ ├── Shape 573.xml
│ │ │ ├── Shape 575.xml
│ │ │ └── Shape 577.xml
│ │ ├── TextArea.xml
│ │ ├── scrollBar.xml
│ │ ├── scrollBarAssets/
│ │ │ ├── scrollBarGraphics/
│ │ │ │ ├── scrollBarOption_thumb_shape.xml
│ │ │ │ ├── scrollBar_cap_shape.xml
│ │ │ │ ├── scrollBar_thumb_shape.xml
│ │ │ │ └── scrollBar_track_shape.xml
│ │ │ ├── scrollBarOption_thumb.xml
│ │ │ ├── scrollBar_downArrow.xml
│ │ │ ├── scrollBar_thumb.xml
│ │ │ ├── scrollBar_track.xml
│ │ │ └── scrollBar_upArrow.xml
│ │ └── scrollBarOption.xml
│ ├── META-INF/
│ │ └── metadata.xml
│ ├── MobileSettings.xml
│ ├── PublishSettings.xml
│ ├── bin/
│ │ └── SymDepend.cache
│ └── quest_journal.xfl
├── Resources/
│ ├── Assets/
│ │ ├── maskedtextarea.fla
│ │ ├── meter.fla
│ │ └── scrollbar.fla
│ ├── buttonArt/
│ │ ├── DOMDocument.xml
│ │ ├── LIBRARY/
│ │ │ ├── ButtonArt.xml
│ │ │ ├── ButtonArtBackgrounds/
│ │ │ │ ├── BackgroundBig.xml
│ │ │ │ ├── BackgroundLarge.xml
│ │ │ │ ├── BackgroundLeft.xml
│ │ │ │ ├── BackgroundMedium.xml
│ │ │ │ ├── BackgroundRight.xml
│ │ │ │ ├── BackgroundRound.xml
│ │ │ │ └── BackgroundSmall.xml
│ │ │ ├── Controller/
│ │ │ │ ├── 360/
│ │ │ │ │ ├── Back.xml
│ │ │ │ │ ├── LB.xml
│ │ │ │ │ ├── LS.xml
│ │ │ │ │ ├── LSPress.xml
│ │ │ │ │ ├── LT.xml
│ │ │ │ │ ├── RB.xml
│ │ │ │ │ ├── RS.xml
│ │ │ │ │ ├── RSPress.xml
│ │ │ │ │ └── RT.xml
│ │ │ │ ├── PS3/
│ │ │ │ │ ├── Circle.xml
│ │ │ │ │ ├── L1.xml
│ │ │ │ │ ├── L2.xml
│ │ │ │ │ ├── L3.xml
│ │ │ │ │ ├── PS3X.xml
│ │ │ │ │ ├── R1.xml
│ │ │ │ │ ├── R2.xml
│ │ │ │ │ ├── R3.xml
│ │ │ │ │ ├── Select.xml
│ │ │ │ │ ├── Square.xml
│ │ │ │ │ └── Triangle.xml
│ │ │ │ └── Start.xml
│ │ │ ├── FunctionKeys/
│ │ │ │ ├── Alt.xml
│ │ │ │ ├── Backspace.xml
│ │ │ │ ├── BackspaceWithArrow.xml
│ │ │ │ ├── Caps.xml
│ │ │ │ ├── Ctrl.xml
│ │ │ │ ├── Del.xml
│ │ │ │ ├── End.xml
│ │ │ │ ├── Enter.xml
│ │ │ │ ├── EnterWithArrow.xml
│ │ │ │ ├── Esc.xml
│ │ │ │ ├── F1.xml
│ │ │ │ ├── F10.xml
│ │ │ │ ├── F11.xml
│ │ │ │ ├── F12.xml
│ │ │ │ ├── F2.xml
│ │ │ │ ├── F3.xml
│ │ │ │ ├── F4.xml
│ │ │ │ ├── F5.xml
│ │ │ │ ├── F6.xml
│ │ │ │ ├── F7.xml
│ │ │ │ ├── F8.xml
│ │ │ │ ├── F9.xml
│ │ │ │ ├── Home.xml
│ │ │ │ ├── Ins.xml
│ │ │ │ ├── LAlt.xml
│ │ │ │ ├── LCtrl.xml
│ │ │ │ ├── NumLck.xml
│ │ │ │ ├── Pause.xml
│ │ │ │ ├── PgDn.xml
│ │ │ │ ├── PgUp.xml
│ │ │ │ ├── PrtSc.xml
│ │ │ │ ├── RAlt.xml
│ │ │ │ ├── RCtrl.xml
│ │ │ │ ├── ScrLck.xml
│ │ │ │ ├── Shift.xml
│ │ │ │ ├── ShiftWithArrow.xml
│ │ │ │ ├── Space.xml
│ │ │ │ └── Tab.xml
│ │ │ ├── Letters/
│ │ │ │ ├── A.xml
│ │ │ │ ├── B.xml
│ │ │ │ ├── C.xml
│ │ │ │ ├── D.xml
│ │ │ │ ├── E.xml
│ │ │ │ ├── F.xml
│ │ │ │ ├── G.xml
│ │ │ │ ├── H.xml
│ │ │ │ ├── I.xml
│ │ │ │ ├── J.xml
│ │ │ │ ├── K.xml
│ │ │ │ ├── L.xml
│ │ │ │ ├── M.xml
│ │ │ │ ├── N.xml
│ │ │ │ ├── O.xml
│ │ │ │ ├── P.xml
│ │ │ │ ├── Q.xml
│ │ │ │ ├── R.xml
│ │ │ │ ├── S.xml
│ │ │ │ ├── T.xml
│ │ │ │ ├── U.xml
│ │ │ │ ├── V.xml
│ │ │ │ ├── W.xml
│ │ │ │ ├── X.xml
│ │ │ │ ├── Y.xml
│ │ │ │ └── Z.xml
│ │ │ ├── Mouse/
│ │ │ │ ├── MouseButtons/
│ │ │ │ │ ├── M1.xml
│ │ │ │ │ ├── M2.xml
│ │ │ │ │ ├── M3.xml
│ │ │ │ │ ├── M4.xml
│ │ │ │ │ ├── M5.xml
│ │ │ │ │ ├── M6.xml
│ │ │ │ │ ├── M7.xml
│ │ │ │ │ └── M8.xml
│ │ │ │ ├── MouseMove.xml
│ │ │ │ └── MouseWheel/
│ │ │ │ ├── MouseWheel.xml
│ │ │ │ ├── MouseWheelDown.xml
│ │ │ │ └── MouseWheelUp.xml
│ │ │ ├── Named Icons/
│ │ │ │ ├── Action_Double_Up.xml
│ │ │ │ ├── Action_Up.xml
│ │ │ │ ├── Action_Up_Arrow.xml
│ │ │ │ ├── OCC BUTTON BASE CIRCLE.xml
│ │ │ │ ├── OCC BUTTON BASE SQUARE.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 1.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 2.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 3.xml
│ │ │ │ ├── OCC BUTTON MOD BASE 4.xml
│ │ │ │ ├── OCC CONTROLLER MC.xml
│ │ │ │ ├── OCC CONTROLLER.xml
│ │ │ │ ├── OCC MOTION.xml
│ │ │ │ ├── OCC THUM REST RIGHT BASE.xml
│ │ │ │ ├── OCC THUMB REST BASE.xml
│ │ │ │ ├── OCC THUMB REST LEFT BASE.xml
│ │ │ │ ├── OCC THUMB_REST.xml
│ │ │ │ ├── OCC THUMB_REST_LEFT.xml
│ │ │ │ ├── OCC THUMB_REST_RIGHT.xml
│ │ │ │ ├── OCC_A.xml
│ │ │ │ ├── OCC_A_HOLD.xml
│ │ │ │ ├── OCC_B.xml
│ │ │ │ ├── OCC_B_HOLD.xml
│ │ │ │ ├── OCC_X.xml
│ │ │ │ ├── OCC_X_HOLD.xml
│ │ │ │ ├── OCC_Y.xml
│ │ │ │ ├── OCC_Y_HOLD.xml
│ │ │ │ ├── Symbol 163.xml
│ │ │ │ ├── Symbol 164.xml
│ │ │ │ ├── Symbol 170.xml
│ │ │ │ ├── Symbol 171.xml
│ │ │ │ ├── Symbol 258.xml
│ │ │ │ ├── Symbol 259.xml
│ │ │ │ ├── Symbol 260.xml
│ │ │ │ ├── Symbol 261.xml
│ │ │ │ ├── Symbol 262.xml
│ │ │ │ ├── Symbol 264.xml
│ │ │ │ ├── Symbol 266.xml
│ │ │ │ ├── Symbol 267.xml
│ │ │ │ ├── Symbol 268.xml
│ │ │ │ ├── Symbol 270.xml
│ │ │ │ ├── Symbol 271.xml
│ │ │ │ ├── Symbol 272.xml
│ │ │ │ ├── Symbol 273.xml
│ │ │ │ ├── Symbol 274.xml
│ │ │ │ ├── Symbol 275.xml
│ │ │ │ ├── Symbol 276.xml
│ │ │ │ ├── Symbol 277.xml
│ │ │ │ ├── Symbol 278.xml
│ │ │ │ ├── Symbol 279.xml
│ │ │ │ ├── Symbol 280.xml
│ │ │ │ ├── Symbol 281.xml
│ │ │ │ ├── Symbol 282.xml
│ │ │ │ ├── Symbol 284.xml
│ │ │ │ ├── Symbol 285.xml
│ │ │ │ ├── Symbol 286.xml
│ │ │ │ ├── Symbol 287.xml
│ │ │ │ ├── Symbol 288.xml
│ │ │ │ ├── Symbol 289.xml
│ │ │ │ ├── Symbol 290.xml
│ │ │ │ ├── Symbol 291.xml
│ │ │ │ ├── Symbol 292.xml
│ │ │ │ ├── Symbol 293.xml
│ │ │ │ ├── Symbol 294.xml
│ │ │ │ ├── Symbol 295.xml
│ │ │ │ ├── Symbol 296.xml
│ │ │ │ ├── Symbol 297.xml
│ │ │ │ ├── Symbol 298.xml
│ │ │ │ ├── Symbol 299.xml
│ │ │ │ ├── Symbol 302.xml
│ │ │ │ ├── Symbol 304.xml
│ │ │ │ ├── Symbol 305.xml
│ │ │ │ ├── Symbol 306.xml
│ │ │ │ ├── Symbol 307.xml
│ │ │ │ ├── Symbol 308.xml
│ │ │ │ ├── Symbol 309.xml
│ │ │ │ ├── Symbol 310.xml
│ │ │ │ ├── Symbol 311.xml
│ │ │ │ ├── Symbol 312.xml
│ │ │ │ ├── Symbol 313.xml
│ │ │ │ ├── Symbol 314.xml
│ │ │ │ ├── Symbol 315.xml
│ │ │ │ ├── Symbol 316.xml
│ │ │ │ ├── Symbol 318.xml
│ │ │ │ ├── Symbol 319.xml
│ │ │ │ ├── Symbol 320.xml
│ │ │ │ ├── Symbol 321.xml
│ │ │ │ ├── Symbol 322.xml
│ │ │ │ ├── Symbol 323.xml
│ │ │ │ ├── Symbol 324.xml
│ │ │ │ ├── Symbol 325.xml
│ │ │ │ ├── Symbol 326.xml
│ │ │ │ ├── Symbol 327.xml
│ │ │ │ ├── Symbol 328.xml
│ │ │ │ ├── Symbol 329.xml
│ │ │ │ ├── Symbol 330.xml
│ │ │ │ ├── Symbol 331.xml
│ │ │ │ ├── Symbol 332.xml
│ │ │ │ ├── Symbol 333.xml
│ │ │ │ ├── Symbol 334.xml
│ │ │ │ ├── Symbol 335.xml
│ │ │ │ ├── Symbol 336.xml
│ │ │ │ ├── Symbol 337.xml
│ │ │ │ ├── Symbol 338.xml
│ │ │ │ ├── Symbol 339.xml
│ │ │ │ ├── Symbol 340.xml
│ │ │ │ ├── Symbol 341.xml
│ │ │ │ ├── Symbol 342.xml
│ │ │ │ ├── Symbol 343.xml
│ │ │ │ ├── Symbol 344.xml
│ │ │ │ ├── Symbol 345.xml
│ │ │ │ ├── Symbol 346.xml
│ │ │ │ ├── Symbol 347.xml
│ │ │ │ ├── Symbol 348.xml
│ │ │ │ ├── Symbol 349.xml
│ │ │ │ ├── Symbol 350.xml
│ │ │ │ ├── Symbol 351.xml
│ │ │ │ ├── Symbol 352.xml
│ │ │ │ ├── Symbol 353.xml
│ │ │ │ ├── Symbol 354.xml
│ │ │ │ ├── Symbol 355.xml
│ │ │ │ ├── Symbol 356.xml
│ │ │ │ ├── Symbol 357.xml
│ │ │ │ ├── Symbol 358.xml
│ │ │ │ ├── Symbol 359.xml
│ │ │ │ ├── Symbol 36.xml
│ │ │ │ ├── Symbol 360.xml
│ │ │ │ ├── Symbol 361.xml
│ │ │ │ ├── Symbol 362.xml
│ │ │ │ ├── Symbol 363.xml
│ │ │ │ ├── Symbol 364.xml
│ │ │ │ ├── Symbol 365.xml
│ │ │ │ ├── Symbol 366.xml
│ │ │ │ ├── Symbol 367.xml
│ │ │ │ ├── Symbol 368.xml
│ │ │ │ ├── Symbol 369.xml
│ │ │ │ ├── Symbol 370.xml
│ │ │ │ ├── Symbol 371.xml
│ │ │ │ ├── Symbol 372.xml
│ │ │ │ ├── Symbol 373.xml
│ │ │ │ ├── Symbol 374.xml
│ │ │ │ ├── Symbol 375.xml
│ │ │ │ ├── Symbol 376.xml
│ │ │ │ ├── Symbol 377.xml
│ │ │ │ ├── Symbol 378.xml
│ │ │ │ ├── Symbol 379.xml
│ │ │ │ ├── Symbol 380.xml
│ │ │ │ ├── Symbol 381.xml
│ │ │ │ ├── Symbol 382.xml
│ │ │ │ ├── Symbol 383.xml
│ │ │ │ ├── Symbol 384.xml
│ │ │ │ ├── Symbol 385.xml
│ │ │ │ ├── Symbol 386.xml
│ │ │ │ ├── Symbol 387.xml
│ │ │ │ ├── Symbol 388.xml
│ │ │ │ ├── Symbol 389.xml
│ │ │ │ ├── Symbol 390.xml
│ │ │ │ ├── Symbol 391.xml
│ │ │ │ ├── Symbol 392.xml
│ │ │ │ ├── Symbol 393.xml
│ │ │ │ ├── Symbol 394.xml
│ │ │ │ ├── Symbol 395.xml
│ │ │ │ ├── Symbol 396.xml
│ │ │ │ ├── Symbol 397.xml
│ │ │ │ ├── Symbol 398.xml
│ │ │ │ ├── Symbol 399.xml
│ │ │ │ ├── Symbol 400.xml
│ │ │ │ ├── Symbol 401.xml
│ │ │ │ ├── Symbol 402.xml
│ │ │ │ ├── Symbol 403.xml
│ │ │ │ ├── Symbol 404.xml
│ │ │ │ ├── Symbol 406.xml
│ │ │ │ ├── Symbol 407.xml
│ │ │ │ ├── Symbol 409.xml
│ │ │ │ ├── Symbol 412.xml
│ │ │ │ ├── Symbol 413.xml
│ │ │ │ ├── Symbol 414.xml
│ │ │ │ ├── Symbol 415.xml
│ │ │ │ ├── Symbol 417.xml
│ │ │ │ ├── Symbol 420.xml
│ │ │ │ ├── Symbol 421.xml
│ │ │ │ ├── Symbol 422.xml
│ │ │ │ ├── Symbol 423.xml
│ │ │ │ ├── Symbol 424.xml
│ │ │ │ ├── Symbol 425.xml
│ │ │ │ ├── Symbol 426.xml
│ │ │ │ ├── Symbol 427.xml
│ │ │ │ ├── Symbol 428.xml
│ │ │ │ ├── Symbol 429.xml
│ │ │ │ ├── Symbol 430.xml
│ │ │ │ ├── Symbol 431.xml
│ │ │ │ ├── Symbol 432.xml
│ │ │ │ ├── Symbol 433.xml
│ │ │ │ ├── Symbol 434.xml
│ │ │ │ ├── Symbol 435.xml
│ │ │ │ ├── Symbol 436.xml
│ │ │ │ ├── Symbol 437.xml
│ │ │ │ ├── Symbol 438.xml
│ │ │ │ ├── Symbol 439.xml
│ │ │ │ ├── Symbol 440.xml
│ │ │ │ ├── Symbol 441.xml
│ │ │ │ ├── Symbol 442.xml
│ │ │ │ ├── Symbol 443.xml
│ │ │ │ ├── Symbol 445.xml
│ │ │ │ ├── Symbol 446.xml
│ │ │ │ ├── Symbol 447.xml
│ │ │ │ ├── Symbol 448.xml
│ │ │ │ ├── Symbol 449.xml
│ │ │ │ ├── Symbol 451.xml
│ │ │ │ ├── Symbol 452.xml
│ │ │ │ ├── Symbol 453.xml
│ │ │ │ ├── Symbol 454.xml
│ │ │ │ ├── Symbol 455.xml
│ │ │ │ ├── Symbol 457.xml
│ │ │ │ ├── Symbol 458.xml
│ │ │ │ ├── Symbol 459.xml
│ │ │ │ ├── Symbol 460.xml
│ │ │ │ ├── Symbol 462.xml
│ │ │ │ ├── Symbol 465.xml
│ │ │ │ ├── Symbol 466.xml
│ │ │ │ ├── Symbol 467.xml
│ │ │ │ ├── Symbol 468.xml
│ │ │ │ ├── Symbol 469.xml
│ │ │ │ ├── Symbol 470.xml
│ │ │ │ ├── Symbol 471.xml
│ │ │ │ ├── Symbol 472.xml
│ │ │ │ ├── Symbol 473.xml
│ │ │ │ ├── Symbol 474.xml
│ │ │ │ ├── Symbol 475.xml
│ │ │ │ ├── Symbol 476.xml
│ │ │ │ ├── Symbol 477.xml
│ │ │ │ ├── Symbol 478.xml
│ │ │ │ ├── Symbol 479.xml
│ │ │ │ ├── Symbol 480.xml
│ │ │ │ ├── Symbol 481.xml
│ │ │ │ ├── Symbol 482.xml
│ │ │ │ ├── Symbol 483.xml
│ │ │ │ ├── Symbol 484.xml
│ │ │ │ ├── Symbol 485.xml
│ │ │ │ ├── Symbol 486.xml
│ │ │ │ ├── Symbol 487.xml
│ │ │ │ ├── Symbol 488.xml
│ │ │ │ ├── Symbol 489.xml
│ │ │ │ ├── Symbol 490.xml
│ │ │ │ ├── Symbol 491.xml
│ │ │ │ ├── Symbol 492.xml
│ │ │ │ ├── Symbol 493.xml
│ │ │ │ ├── Symbol 494.xml
│ │ │ │ ├── Symbol 495.xml
│ │ │ │ ├── Symbol 496.xml
│ │ │ │ ├── Symbol 497.xml
│ │ │ │ ├── Symbol 498.xml
│ │ │ │ ├── Symbol 499.xml
│ │ │ │ ├── Symbol 500.xml
│ │ │ │ ├── Symbol 501.xml
│ │ │ │ ├── Symbol 502.xml
│ │ │ │ ├── Symbol 503.xml
│ │ │ │ ├── Symbol 504.xml
│ │ │ │ ├── Symbol 505.xml
│ │ │ │ ├── Symbol 506.xml
│ │ │ │ ├── Symbol 507.xml
│ │ │ │ ├── Symbol 508.xml
│ │ │ │ ├── Symbol 509.xml
│ │ │ │ ├── Symbol 510.xml
│ │ │ │ ├── Symbol 511.xml
│ │ │ │ ├── Symbol 512.xml
│ │ │ │ ├── Symbol 513.xml
│ │ │ │ ├── Symbol 514.xml
│ │ │ │ ├── Symbol 515.xml
│ │ │ │ ├── Symbol 516.xml
│ │ │ │ ├── Symbol 517.xml
│ │ │ │ ├── Symbol 518.xml
│ │ │ │ ├── Symbol 519.xml
│ │ │ │ ├── Symbol 520.xml
│ │ │ │ ├── Symbol 521.xml
│ │ │ │ ├── Symbol 522.xml
│ │ │ │ ├── Symbol 523.xml
│ │ │ │ ├── Symbol 524.xml
│ │ │ │ ├── Symbol 525.xml
│ │ │ │ ├── Symbol 526.xml
│ │ │ │ ├── Symbol 527.xml
│ │ │ │ ├── Symbol 528.xml
│ │ │ │ ├── Symbol 529.xml
│ │ │ │ ├── Symbol 530.xml
│ │ │ │ ├── Symbol 531.xml
│ │ │ │ ├── Symbol 532.xml
│ │ │ │ ├── Symbol 533.xml
│ │ │ │ ├── Symbol 534.xml
│ │ │ │ ├── Symbol 535.xml
│ │ │ │ ├── Symbol 536.xml
│ │ │ │ ├── Symbol 537.xml
│ │ │ │ ├── Symbol 538.xml
│ │ │ │ ├── Symbol 539.xml
│ │ │ │ ├── Symbol 540.xml
│ │ │ │ ├── Symbol 541.xml
│ │ │ │ ├── Symbol 543.xml
│ │ │ │ ├── Symbol 544.xml
│ │ │ │ ├── Symbol 545.xml
│ │ │ │ ├── Symbol 546.xml
│ │ │ │ ├── Symbol 547.xml
│ │ │ │ ├── Symbol 548.xml
│ │ │ │ ├── Symbol 549.xml
│ │ │ │ ├── Symbol 550.xml
│ │ │ │ ├── Symbol 551.xml
│ │ │ │ ├── Symbol 552.xml
│ │ │ │ ├── Symbol 553.xml
│ │ │ │ └── Symbol 555.xml
│ │ │ ├── NumberPad/
│ │ │ │ ├── NP0.xml
│ │ │ │ ├── NP1.xml
│ │ │ │ ├── NP2.xml
│ │ │ │ ├── NP3.xml
│ │ │ │ ├── NP4.xml
│ │ │ │ ├── NP5.xml
│ │ │ │ ├── NP6.xml
│ │ │ │ ├── NP7.xml
│ │ │ │ ├── NP8.xml
│ │ │ │ ├── NP9.xml
│ │ │ │ ├── NPAsterisk.xml
│ │ │ │ ├── NPEnter.xml
│ │ │ │ ├── NPForwardSlash.xml
│ │ │ │ ├── NPMinus.xml
│ │ │ │ ├── NPPeriod.xml
│ │ │ │ └── NPPlus.xml
│ │ │ ├── Numbers/
│ │ │ │ ├── 0.xml
│ │ │ │ ├── 1.xml
│ │ │ │ ├── 2.xml
│ │ │ │ ├── 3.xml
│ │ │ │ ├── 4.xml
│ │ │ │ ├── 5.xml
│ │ │ │ ├── 6.xml
│ │ │ │ ├── 7.xml
│ │ │ │ ├── 8.xml
│ │ │ │ └── 9.xml
│ │ │ └── Symbols/
│ │ │ ├── Amersand.xml
│ │ │ ├── Arrow.xml
│ │ │ ├── Asterisk.xml
│ │ │ ├── At.xml
│ │ │ ├── BackSlash.xml
│ │ │ ├── BrokenBar.xml
│ │ │ ├── Caret.xml
│ │ │ ├── Colon.xml
│ │ │ ├── Comma.xml
│ │ │ ├── Dollar Sign.xml
│ │ │ ├── Equals.xml
│ │ │ ├── Exclamation.xml
│ │ │ ├── ForwardSlash.xml
│ │ │ ├── Grave.xml
│ │ │ ├── GreaterThan.xml
│ │ │ ├── LeftCurlyBracket.xml
│ │ │ ├── LeftParenthesis.xml
│ │ │ ├── LeftSquareBracket.xml
│ │ │ ├── LessThan.xml
│ │ │ ├── Minus.xml
│ │ │ ├── Negation.xml
│ │ │ ├── Number.xml
│ │ │ ├── Percent.xml
│ │ │ ├── Period.xml
│ │ │ ├── Plus Original.xml
│ │ │ ├── Plus.xml
│ │ │ ├── Pound.xml
│ │ │ ├── Question.xml
│ │ │ ├── Quotation.xml
│ │ │ ├── RightCurlyBracket.xml
│ │ │ ├── RightParenthesis.xml
│ │ │ ├── RightSquareBracket.xml
│ │ │ ├── SemiColon.xml
│ │ │ ├── SingleQuote.xml
│ │ │ ├── Tilde.xml
│ │ │ ├── Underscore.xml
│ │ │ ├── Unknown.xml
│ │ │ └── VerticalBar.xml
│ │ ├── META-INF/
│ │ │ └── metadata.xml
│ │ ├── MobileSettings.xml
│ │ ├── PublishSettings.xml
│ │ ├── bin/
│ │ │ └── SymDepend.cache
│ │ └── buttonArt.xfl
│ ├── buttonArtSymbols.fla
│ ├── fonts_en_snk.fla
│ ├── gfxfontlib.fla
│ ├── icons_category_celtic.fla
│ ├── icons_category_curved.fla
│ ├── icons_category_psychosteve.fla
│ ├── icons_category_straight.fla
│ ├── icons_effect_psychosteve.fla
│ ├── icons_item_celtic.fla
│ ├── icons_item_curved.fla
│ ├── icons_item_psychosteve.fla
│ ├── mapMarkerArt.fla
│ ├── mcm.psd
│ ├── skyui_icons.fla
│ ├── skyui_icons_psychosteve.fla
│ └── skyui_icons_straight.fla
└── version.as
SYMBOL INDEX (145 symbols across 19 files)
FILE: dist/Data/fomod/script.cs
class Script (line 14) | class Script : SkyrimBaseScript {
method OnActivate (line 59) | public static bool OnActivate()
method DetectProblems (line 77) | static void DetectProblems()
method GenerateReport (line 112) | static void GenerateReport()
method PrintReport (line 192) | static void PrintReport(string line)
method InitializeComponents (line 197) | static void InitializeComponents()
method installButton_Click (line 265) | static void installButton_Click(object sender, EventArgs e)
method refreshButton_Click (line 271) | static void refreshButton_Click(object sender, EventArgs e)
method cancelButton_Click (line 277) | static void cancelButton_Click(object sender, EventArgs e)
method mainInstallForm_Load (line 283) | static void mainInstallForm_Load(object sender, EventArgs e)
method IsPluginActive (line 288) | static bool IsPluginActive(String pluginName)
FILE: sksevr_plugin/build.py
function search_arguments (line 9) | def search_arguments(needle):
function configuration (line 20) | def configuration():
function root_path (line 24) | def root_path():
function read_ini (line 28) | def read_ini():
function read_paths (line 35) | def read_paths():
function build_path (line 39) | def build_path():
function skyrim_path (line 43) | def skyrim_path():
function papyrus_compiler_path (line 47) | def papyrus_compiler_path():
function skyrim_compiled_scripts_path (line 51) | def skyrim_compiled_scripts_path():
function skyrim_scripts_path (line 55) | def skyrim_scripts_path():
function scripts_path (line 59) | def scripts_path():
function compiled_scripts_path (line 63) | def compiled_scripts_path():
function msbuild_path (line 67) | def msbuild_path():
function run_command (line 71) | def run_command(command):
function compile_plugin (line 89) | def compile_plugin():
function compile_scripts (line 105) | def compile_scripts():
function build (line 126) | def build():
function copy_plugin (line 131) | def copy_plugin():
function copy_files (line 139) | def copy_files(source, destination):
function copy_script_sources (line 146) | def copy_script_sources():
function copy_compiled_scripts (line 152) | def copy_compiled_scripts():
function install (line 158) | def install():
FILE: sksevr_plugin/plugin/ControllerStateHook.cpp
type ControllerStateHook (line 27) | namespace ControllerStateHook {
function ControllerStateCB (line 35) | bool ControllerStateCB(vr::TrackedDeviceIndex_t unControllerDeviceInde...
function equalGFxValue (line 54) | bool equalGFxValue(const GFxValue& lhs, const GFxValue& rhs)
type ScaleformCallback (line 84) | struct ScaleformCallback {
function DispatchControllerState (line 98) | void DispatchControllerState(vr::ETrackedControllerRole controllerHand...
class VRInputScaleform_RegisterInputHandler (line 129) | class VRInputScaleform_RegisterInputHandler : public GFxFunctionHandler
method Invoke (line 132) | virtual void Invoke(Args* args)
class VRInputScaleform_UnregisterInputHandler (line 162) | class VRInputScaleform_UnregisterInputHandler : public GFxFunctionHandler
method Invoke (line 165) | virtual void Invoke(Args* args)
function GetControllerName (line 182) | std::string GetControllerName(vr::COpenVRContext* vrContext, vr::ETrac...
class VRInputScaleform_ControllerType (line 194) | class VRInputScaleform_ControllerType : public GFxFunctionHandler
method Invoke (line 197) | virtual void Invoke(Args* args)
function RegisterScaleformFuncs (line 220) | bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) {
function contains (line 252) | bool contains(std::unordered_set<std::string>& set, const char* key) {
class CleanControllerHookOnMenuClose (line 259) | class CleanControllerHookOnMenuClose : public BSTEventSink<MenuOpenClo...
method EventResult (line 261) | EventResult ReceiveEvent(MenuOpenCloseEvent* evn, EventDispatcher<Me...
function Init (line 308) | void Init() {
FILE: sksevr_plugin/plugin/ControllerStateHook.h
function namespace (line 3) | namespace ControllerStateHook{
FILE: sksevr_plugin/plugin/FormDB.cpp
type FormDB (line 19) | namespace FormDB {
function Form_SetInt (line 22) | void Form_SetInt(UInt32 formID, const char* fieldName, SInt32 val) {
function Form_SetInt (line 40) | void Form_SetInt(TESForm* form, BSFixedString fieldName, SInt32 val) {
function Papyrus_Form_SetInt (line 50) | void Papyrus_Form_SetInt(StaticFunctionTag*, TESForm* form, BSFixedStr...
function SInt32 (line 60) | SInt32 Form_GetInt(UInt32 formID, const char* fieldName, SInt32 defaul...
function SInt32 (line 82) | SInt32 Form_GetInt(TESForm* form, BSFixedString fieldName, SInt32 defa...
function SInt32 (line 94) | SInt32 Papyrus_Form_GetInt(StaticFunctionTag*, TESForm* form, BSFixedS...
function Form_SetBool (line 113) | void Form_SetBool(UInt32 formID, const char* fieldName, bool val) {
function Form_SetBool (line 126) | void Form_SetBool(TESForm* form, BSFixedString fieldName, bool val) {
function Papyrus_Form_SetBool (line 136) | void Papyrus_Form_SetBool(StaticFunctionTag*, TESForm* form, BSFixedSt...
function Form_GetBool (line 146) | bool Form_GetBool(UInt32 formID, const char* fieldName, bool default) {
function Form_GetBool (line 168) | bool Form_GetBool(TESForm* form, BSFixedString fieldName, bool default) {
function Papyrus_Form_GetBool (line 180) | bool Papyrus_Form_GetBool(StaticFunctionTag*, TESForm* form, BSFixedSt...
function Form_RemoveField (line 192) | void Form_RemoveField(UInt32 formID, const char* fieldName) {
function Form_RemoveField (line 203) | void Form_RemoveField(TESForm* form, BSFixedString fieldName) {
function Papyrus_Form_RemoveField (line 213) | void Papyrus_Form_RemoveField(StaticFunctionTag*, TESForm* form, BSFix...
function Form_RemoveAllFields (line 222) | void Form_RemoveAllFields(UInt32 formID) {
function Form_RemoveAllFields (line 232) | void Form_RemoveAllFields(TESForm* form) {
function Papyrus_Form_RemoveAllFields (line 241) | void Papyrus_Form_RemoveAllFields(StaticFunctionTag*, TESForm* form) {
function RegisterPapyrusFuncs (line 250) | bool RegisterPapyrusFuncs(VMClassRegistry* registry) {
function InitGlobalLuaVM (line 261) | bool InitGlobalLuaVM() {
class Scaleform_RemoveField (line 276) | class Scaleform_RemoveField : public GFxFunctionHandler
method Invoke (line 279) | virtual void Invoke(Args* args)
function RegisterScaleformFuncs (line 291) | bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) {
function InventoryMarkNew (line 297) | void InventoryMarkNew(GFxMovieView* view, GFxValue* object, InventoryE...
function RegisterScaleformInventoryHooks (line 308) | void RegisterScaleformInventoryHooks(SKSEScaleformInterface* infc) {
FILE: sksevr_plugin/plugin/FormDB.h
function namespace (line 8) | namespace FormDB {
FILE: sksevr_plugin/plugin/Keyboard.cpp
type Keyboard (line 20) | namespace Keyboard {
function WaitForKeyboardInput (line 27) | void WaitForKeyboardInput(GFxValue desc, GFxValue currentText, GFxValu...
class Scaleform_ShowVirtualKeyboard (line 98) | class Scaleform_ShowVirtualKeyboard : public GFxFunctionHandler
method Invoke (line 101) | virtual void Invoke(Args* args)
function RegisterScaleformFuncs (line 128) | bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) {
function RegisterScaleformHooks (line 135) | void RegisterScaleformHooks(SKSEScaleformInterface* infc) {
FILE: sksevr_plugin/plugin/Keyboard.h
function namespace (line 5) | namespace Keyboard {
FILE: sksevr_plugin/plugin/PapyrusUIFix.cpp
type PapyrusUIFix (line 14) | namespace PapyrusUIFix
class UIInvokeDelegate (line 30) | class UIInvokeDelegate : public UIDelegate_v1, public ISKSEObject
method UIInvokeDelegate (line 33) | UIInvokeDelegate(const char* nameBuf, const char* targetBuf) :
method UIInvokeDelegate (line 38) | explicit UIInvokeDelegate(SerializationTag tag) {
method UInt32 (line 43) | virtual UInt32 ClassVersion() const { return 1; }
method Run (line 45) | virtual void Run() override
method Dispose (line 62) | virtual void Dispose() override
method Save (line 67) | virtual bool Save(SKSESerializationInterface* intfc)
method Load (line 86) | virtual bool Load(SKSESerializationInterface* intfc, UInt32 version)
function SetT (line 121) | void SetT(StaticFunctionTag* thisInput, BSFixedString menuName, BSFixe...
function InvokeArgT (line 141) | void InvokeArgT(StaticFunctionTag* thisInput, BSFixedString menuName, ...
function InvokeArrayT (line 158) | void InvokeArrayT(StaticFunctionTag* thisInput, BSFixedString menuName...
function RegisterPapyrusFuncs (line 181) | bool RegisterPapyrusFuncs(VMClassRegistry* registry) {
FILE: sksevr_plugin/plugin/PapyrusUIFix.h
function namespace (line 5) | namespace PapyrusUIFix
FILE: sksevr_plugin/plugin/ScaleformExtendedDataFix.cpp
type ExtendDataFix (line 8) | namespace ExtendDataFix {
function AttachAmmoFlags (line 13) | void AttachAmmoFlags(GFxMovieView* view, GFxValue* pFxVal, InventoryEn...
function RegisterScaleformInventoryHooks (line 35) | void RegisterScaleformInventoryHooks(SKSEScaleformInterface* infc) {
FILE: sksevr_plugin/plugin/ScaleformExtendedDataFix.h
function namespace (line 5) | namespace ExtendDataFix{
FILE: sksevr_plugin/plugin/Settings.cpp
type Settings (line 18) | namespace Settings {
function GetBool (line 20) | bool GetBool(lua_State* L, const char* path, bool default) {
function GetDouble (line 24) | double GetDouble(lua_State* L, const char* path, double default) {
function GetString (line 28) | std::string GetString(lua_State* L, const char* path, std::string defa...
function load_settings_file (line 32) | bool load_settings_file(lua_State* L, const char* path) {
function loadLuaConfig (line 46) | bool loadLuaConfig(const char* settingFilePath = nullptr)
function deepCopyTable (line 72) | bool deepCopyTable(lua_State* L, int index, GFxMovieView* movie, GFxVa...
function deepCopyValue (line 139) | bool deepCopyValue(lua_State* L, int index, GFxMovieView* movie, GFxVa...
class Scaleform_IniGet (line 182) | class Scaleform_IniGet : public GFxFunctionHandler
method Invoke (line 185) | virtual void Invoke(Args* args)
class Scaleform_IniGetWithDefaults (line 206) | class Scaleform_IniGetWithDefaults : public GFxFunctionHandler
method Invoke (line 209) | virtual void Invoke(Args* args)
class Scaleform_IniGetBool (line 248) | class Scaleform_IniGetBool : public GFxFunctionHandler
method Invoke (line 251) | virtual void Invoke(Args* args)
class Scaleform_IniGetNumber (line 269) | class Scaleform_IniGetNumber : public GFxFunctionHandler
method Invoke (line 272) | virtual void Invoke(Args* args)
class Scaleform_IniGetString (line 290) | class Scaleform_IniGetString : public GFxFunctionHandler
method Invoke (line 293) | virtual void Invoke(Args* args)
function RegisterScaleformFuncs (line 311) | bool RegisterScaleformFuncs(GFxMovieView* view, GFxValue* plugin) {
FILE: sksevr_plugin/plugin/Settings.h
function namespace (line 5) | namespace Settings {
FILE: sksevr_plugin/plugin/VRHookAPI.h
type vr (line 18) | typedef vr::EVRCompositorError (*WaitGetPoses_CB)(VR_ARRAY_COUNT(unRende...
function class (line 21) | class OpenVRHookManagerAPI
function OpenVRHookManagerAPI (line 37) | inline OpenVRHookManagerAPI* RequestOpenVRHookManagerObject()
FILE: sksevr_plugin/plugin/guicon.cpp
function RedirectIOToConsole (line 11) | bool RedirectIOToConsole()
FILE: sksevr_plugin/plugin/lua_glue.cpp
type lua (line 6) | namespace lua {
function dll_path (line 7) | std::filesystem::path dll_path() {
function lua_State (line 28) | lua_State* lua_new_with_libs() {
function lua_prepend_package_path (line 37) | int lua_prepend_package_path(lua_State* L, const char* path) {
function lua_State (line 57) | lua_State* lua_new_skyui_state() {
function lua_pop_to_level (line 76) | void lua_pop_to_level(lua_State* L, int targetLevel) {
function lua_table_is_array (line 87) | bool lua_table_is_array(lua_State* L, int tableIdx) {
function lua_print_value (line 119) | void lua_print_value(lua_State* L, int index) {
function lua_print_value_recursive (line 163) | void lua_print_value_recursive(lua_State* L, int index) {
function lua_table_get_by_path (line 178) | bool lua_table_get_by_path(lua_State* L, int tableIdx, const char* pat...
function lua_settings_get_by_path_with_defaults (line 193) | bool lua_settings_get_by_path_with_defaults(lua_State* L, int tableIdx...
function lua_table_get_bool_by_path (line 209) | bool lua_table_get_bool_by_path(lua_State* L, int tableIdx, const char...
function lua_table_get_double_by_path (line 219) | double lua_table_get_double_by_path(lua_State* L, int tableIdx, const ...
function lua_table_get_string_by_path (line 229) | std::string lua_table_get_string_by_path(lua_State* L, int tableIdx, c...
FILE: sksevr_plugin/plugin/lua_glue.h
function namespace (line 11) | namespace lua {
FILE: sksevr_plugin/plugin/main.cpp
function WaitForDebugger (line 23) | void WaitForDebugger(bool should_break = false) {
function SKSEPlugin_Query (line 32) | bool SKSEPlugin_Query(const SKSEInterface * skse, PluginInfo * info) {
function SKSEPlugin_Load (line 63) | bool SKSEPlugin_Load(const SKSEInterface * skse) {
Condensed preview — 993 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,149K chars).
[
{
"path": ".gitignore",
"chars": 18,
"preview": "compile-error.txt\n"
},
{
"path": ".gitmodules",
"chars": 342,
"preview": "[submodule \"sksevr_plugin/skse\"]\n\tpath = sksevr_plugin/skse\n\turl = git@github.com:Odie/sksevr-mirror.git\n[submodule \"sks"
},
{
"path": "LICENSE",
"chars": 1068,
"preview": "MIT License\n\nCopyright (c) 2012 schlangster\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
},
{
"path": "README.md",
"chars": 1664,
"preview": "SkyUI - VR\n----------\n\nThis repository hosts the source and the packaged releases for a working\nversion of SkyUI (and MC"
},
{
"path": "build/.gitignore",
"chars": 90,
"preview": "\n*.swf\nfontconfig.txt\n!/fonts_console.swf\n!/fonts_en.swf\n!/gfxfontlib.swf\n!/fontconfig.txt"
},
{
"path": "build/exported/skyui/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "build/exported/widgets/skyui/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "build/skyui/config.txt",
"chars": 37448,
"preview": "; =====================================================================================================================\n"
},
{
"path": "dist/.gitignore",
"chars": 43,
"preview": "\n*.pex\n*.swf\n*.bak\n*.bsa\n*.bsl\nArchive.log\n"
},
{
"path": "dist/Data/Interface/skyui/config.txt",
"chars": 37540,
"preview": "; =====================================================================================================================\n"
},
{
"path": "dist/Data/Readme - SkyUI.txt",
"chars": 24623,
"preview": "########################################################################################################################"
},
{
"path": "dist/Data/Scripts/Headers/SKI_ConfigBase.psc",
"chars": 11654,
"preview": "scriptname SKI_ConfigBase extends SKI_QuestBase\n\n;######################################################################"
},
{
"path": "dist/Data/Scripts/Headers/SKI_QuestBase.psc",
"chars": 1457,
"preview": "scriptname SKI_QuestBase extends Quest hidden\n\n;########################################################################"
},
{
"path": "dist/Data/Scripts/Source/SKI_ActiveEffectsWidget.psc",
"chars": 3889,
"preview": "scriptname SKI_ActiveEffectsWidget extends SKI_WidgetBase\n\n; SCRIPT VERSION --------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_ConfigBase.psc",
"chars": 32230,
"preview": "scriptname SKI_ConfigBase extends SKI_QuestBase\n\n; CONSTANTS -----------------------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_ConfigManager.psc",
"chars": 9685,
"preview": "scriptname SKI_ConfigManager extends SKI_QuestBase hidden \n\n; SCRIPT VERSION -------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_ConfigMenu.psc",
"chars": 60506,
"preview": "scriptname SKI_ConfigMenu extends SKI_ConfigBase\r\n\r\n; SCRIPT VERSION ---------------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_FavoritesManager.psc",
"chars": 30468,
"preview": "scriptname SKI_FavoritesManager extends SKI_QuestBase\n\nimport Math\n\n; SCRIPT VERSION -----------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_Main.psc",
"chars": 10053,
"preview": "scriptname SKI_Main extends SKI_QuestBase\n\n; CONSTANTS -----------------------------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_PlayerInventoryHook.psc",
"chars": 2674,
"preview": "scriptname SKI_PlayerInventoryHook extends ReferenceAlias\n\n;; Interface for FormDB\nFunction SetInt(Form form, string fie"
},
{
"path": "dist/Data/Scripts/Source/SKI_PlayerLoadGameAlias.psc",
"chars": 246,
"preview": "scriptname SKI_PlayerLoadGameAlias extends ReferenceAlias\n\n ; EVENTS ---------------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_QF_ConfigManagerInstance.psc",
"chars": 632,
"preview": ";BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment\n;NEXT FRAGMENT INDEX 1\nScriptname SKI_QF_Co"
},
{
"path": "dist/Data/Scripts/Source/SKI_QuestBase.psc",
"chars": 1007,
"preview": "scriptname SKI_QuestBase extends Quest hidden\n\n; -----------------------------------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_SettingsManager.psc",
"chars": 3324,
"preview": "scriptname SKI_SettingsManager extends SKI_QuestBase \n\n; CONSTANTS ----------------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_WidgetBase.psc",
"chars": 7472,
"preview": "scriptname SKI_WidgetBase extends SKI_QuestBase\n\n; CONSTANTS -----------------------------------------------------------"
},
{
"path": "dist/Data/Scripts/Source/SKI_WidgetManager.psc",
"chars": 4607,
"preview": "scriptname SKI_WidgetManager extends SKI_QuestBase\n\n; CONSTANTS --------------------------------------------------------"
},
{
"path": "dist/Data/fomod/script.cs",
"chars": 9470,
"preview": "\nusing System;\nusing fomm.Scripting;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing"
},
{
"path": "dist/Examples/MCM/ConfigMenuTemplate.psc",
"chars": 2585,
"preview": "scriptname MyConfigMenu extends SKI_ConfigBase\n\n; SCRIPT VERSION -------------------------------------------------------"
},
{
"path": "dist/Examples/MCM/ExampleConfigMenu.psc",
"chars": 7237,
"preview": "scriptname ExampleConfigMenu extends SKI_ConfigBase\n\n; SCRIPT VERSION --------------------------------------------------"
},
{
"path": "dist/bsascript.txt",
"chars": 205,
"preview": "Log: Archive.log\nNew Archive\nCheck: Menus\nCheck: Misc\nCheck: Retain Directory Names\nCheck: Retain File Names\nSet File Gr"
},
{
"path": "dist/filegroup_all.txt",
"chars": 1979,
"preview": "Interface\\bartermenu.swf\nInterface\\containermenu.swf\nInterface\\inventorymenu.swf\nInterface\\magicmenu.swf\nInterface\\quest"
},
{
"path": "dist/filegroup_interface.txt",
"chars": 1143,
"preview": "Interface\\bartermenu.swf\nInterface\\containermenu.swf\nInterface\\inventorymenu.swf\nInterface\\magicmenu.swf\nInterface\\quest"
},
{
"path": "dist/filegroup_misc.txt",
"chars": 18,
"preview": "Readme - SkyUI.txt"
},
{
"path": "dist/filegroup_scripts.txt",
"chars": 895,
"preview": "Scripts\\SKI_ActiveEffectsWidget.pex\nScripts\\SKI_ConfigBase.pex\nScripts\\SKI_ConfigManager.pex\nScripts\\SKI_ConfigMenu.pex\n"
},
{
"path": "dist/make_all.pl",
"chars": 104,
"preview": "#!/usr/bin/perl\n\nsystem(\"make_scripts.pl\", \"1\") == 0 or die;\nsystem(\"make_archive.pl\", \"1\") == 0 or die;"
},
{
"path": "dist/make_archive.pl",
"chars": 1828,
"preview": "#!/usr/bin/perl\n\nuse File::Basename;\nuse File::Copy;\nuse File::Path;\n\nsub error\n{\n\tprint\t\"\\n=========================\\n\\"
},
{
"path": "dist/make_scripts.pl",
"chars": 1525,
"preview": "#!/usr/bin/perl\n\nuse File::Basename;\nuse File::Copy;\nuse File::Path;\n\nsub error\n{\n\tprint\t\"\\n=========================\\n\\"
},
{
"path": "misc/ArrowCount/Scripts/Source/PN_ArrowCountWidget.psc",
"chars": 1408,
"preview": "scriptname PN_ArrowCountWidget extends SKI_WidgetBase \n\n; PRIVATE VARIABLES -------------------------------------------"
},
{
"path": "misc/Configs/5760x1080, by Ismelda/skyui.cfg",
"chars": 26595,
"preview": "; =====================================================================================================================\n"
},
{
"path": "misc/Configs/5760x2160, by Ismelda/skyui.cfg",
"chars": 26595,
"preview": "; =====================================================================================================================\n"
},
{
"path": "misc/Configs/ValueWeight Column/skyui.cfg",
"chars": 26724,
"preview": "; =====================================================================================================================\n"
},
{
"path": "misc/Flash Util/SkyUI - make_all.jsfl",
"chars": 58,
"preview": "FLfile.runCommandLine(\"skyui_runscript.bat make_all.pl\");"
},
{
"path": "misc/Flash Util/SkyUI - make_archive (fast).jsfl",
"chars": 64,
"preview": "FLfile.runCommandLine(\"skyui_runscript.bat make_archive.pl 1\");"
},
{
"path": "misc/Flash Util/SkyUI - make_archive.jsfl",
"chars": 62,
"preview": "FLfile.runCommandLine(\"skyui_runscript.bat make_archive.pl\");"
},
{
"path": "misc/Flash Util/build-all.jsfl",
"chars": 1478,
"preview": "var srcDir = \"file:///E:/dev/skyui/src/\"\nvar flaFiles = [\n\t\"CraftingMenu/craftingmenu.fla\",\n\t//\"FavoritesMenu/favorites"
},
{
"path": "misc/Flash Util/skyui_runscript.bat",
"chars": 325,
"preview": "\n:: Change this path to the location of your the dist/ directory.\n:: Example:\n::\t\tC:\\Users\\MyName\\Projects\\Modding\\SkyUI"
},
{
"path": "misc/PrimaryNeeds/Scripts/Source/PN_FoodEffect.psc",
"chars": 479,
"preview": "scriptname PN_FoodEffect extends ActiveMagicEffect \n\n\n; PROPERTIES ----------------------------------------------------"
},
{
"path": "misc/PrimaryNeeds/Scripts/Source/PN_IconWidget.psc",
"chars": 2716,
"preview": "scriptname PN_IconWidget extends SKI_WidgetBase \n\n; PRIVATE VARIABLES -------------------------------------------------"
},
{
"path": "misc/PrimaryNeeds/Scripts/Source/PN_NeedsManager.psc",
"chars": 10697,
"preview": "scriptname PN_NeedsManager extends Quest \n\n; PRIVATE VARIABLES --------------------------------------------------------"
},
{
"path": "misc/Translations/SkyUI_Translations.txt",
"chars": 27946,
"preview": "Language\tEnglish\tFrench\tGerman\tItalian\tSpanish\tCzech\tPolish\tRussian\tJapanese\n$ALL\tALL\tTOUS\tALLE\tTUTTO\tTODO\tVŠECHNO\tWSZYS"
},
{
"path": "misc/Translations/make_translations.pl",
"chars": 992,
"preview": "#!/usr/bin/perl\n\nsub error\n{\n\tprint\t\"\\n=========================\\n\\n\"\n\t\t.\t\"ERROR: $_[0]\\n\";\n\tgetc(STDIN);\n\texit(1);\n}\n\nm"
},
{
"path": "misc/cp-built-files",
"chars": 4022,
"preview": "#!/usr/bin/env ruby\n\n# This utility copys the newly built files in ../build to the\n# `destination_dir`. It's also possib"
},
{
"path": "misc/decompile-pex",
"chars": 1163,
"preview": "#! env ruby\n\ndef toWinPath(wslPath)\n\tcmd = \"wslpath -w '#{wslPath}'\"\n\treturn `#{cmd}`.strip\nend\n\n# This utility decompil"
},
{
"path": "misc/pack-release",
"chars": 1374,
"preview": "#!/usr/bin/env ruby\n#\n\nrequire('pathname')\nrequire('fileutils')\nrequire('tmpdir')\n\n\n# Make sure we can find where the fi"
},
{
"path": "misc/rename-png",
"chars": 1326,
"preview": "#! env ruby\n\ndef toWinPath(wslPath)\n\tcmd = \"wslpath -w '#{wslPath}'\"\n\treturn `#{cmd}`.strip\nend\n\n# This is a one-off uti"
},
{
"path": "misc/reorder-psc",
"chars": 4726,
"preview": "#! env ruby\n\n# Reorder/rewrite the psc file so content is sorted into the same order\n# by entity/construct name. This i"
},
{
"path": "sksevr_plugin/.editorconfig",
"chars": 147,
"preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 3\nend_of_line = lf\ntrim_trailing_whitespace = true\ni"
},
{
"path": "sksevr_plugin/.gitignore",
"chars": 47,
"preview": "*.user\n*.suo\n\n**/.vs\n\n/Build\nlua-tests/luacov*\n"
},
{
"path": "sksevr_plugin/README.md",
"chars": 1529,
"preview": "# Skyrim SKSE plugin example\n\nThis has been adapted from [this example](https://github.com/xanderdunn/skaar/releases/tag"
},
{
"path": "sksevr_plugin/build.ini",
"chars": 167,
"preview": "[Paths]\nskyrim=C:\\Program Files (x86)\\Steam\\steamapps\\common\\Skyrim\nmsbuild=C:\\Program Files (x86)\\Microsoft Visual Stud"
},
{
"path": "sksevr_plugin/build.py",
"chars": 3671,
"preview": "import configparser\nimport os\nimport shutil\nimport subprocess\nimport sys\n\n\n\ndef search_arguments(needle):\n found = Fal"
},
{
"path": "sksevr_plugin/lua/MainEntry.lua",
"chars": 6845,
"preview": "function file_exists(name)\n local f=io.open(name,\"r\")\n if f~=nil then\n io.close(f)\n return true\n "
},
{
"path": "sksevr_plugin/lua/defaults-general.lua",
"chars": 1274,
"preview": "Settings = {\n\t-- On a per-menu basis, change the keybind used to activate the search function.\n\t-- We're just using a bu"
},
{
"path": "sksevr_plugin/lua/defaults-knuckles.lua",
"chars": 361,
"preview": "Settings = {\n\tBarterMenu = {\n\t\tsearch = {\"thumbstick\", \"clicked\"}\n\t},\n\tContainerMenu = {\n\t\tsearch = {\"thumbstick\", \"clic"
},
{
"path": "sksevr_plugin/lua/defaults-oculus.lua",
"chars": 433,
"preview": "Settings = {\n\tBarterMenu = {\n\t\tsearch = {\"leftHand\", \"thumbstick\", \"clicked\"}\n\t},\n\tContainerMenu = {\n\t\tsearch = {\"leftHa"
},
{
"path": "sksevr_plugin/lua/defaults-vive.lua",
"chars": 407,
"preview": "Settings = {\n\tBarterMenu = {\n\t\tsearch = {\"touchpad\", \"clicked\", \"bottom\"}\n\t},\n\tContainerMenu = {\n\t\tsearch = {\"touchpad\","
},
{
"path": "sksevr_plugin/lua/defaults-wmr.lua",
"chars": 397,
"preview": "Settings = {\n\tBarterMenu = {\n\t\tsearch = {\"application menu\", \"clicked\"}\n\t},\n\tContainerMenu = {\n\t\tsearch = {\"application "
},
{
"path": "sksevr_plugin/lua/inspect.lua",
"chars": 9542,
"preview": "local inspect ={\n _VERSION = 'inspect.lua 3.1.0',\n _URL = 'http://github.com/kikito/inspect.lua',\n _DESCRIPTION ="
},
{
"path": "sksevr_plugin/lua-tests/core_spec.lua",
"chars": 4456,
"preview": "require(\"MainEntry\")\n\ndescribe(\"FormDB\", function()\n\tit(\"should be a top level table\", function()\n\t\tassert.truthy(_G[\"Fo"
},
{
"path": "sksevr_plugin/luajit.vcxproj",
"chars": 8673,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "sksevr_plugin/plugin/ControllerStateHook.cpp",
"chars": 12114,
"preview": "/* ControllerStateHook\n *\n * Does 2 things:\n * - Hooks into Controller State update calls made by the engine via SkyrimV"
},
{
"path": "sksevr_plugin/plugin/ControllerStateHook.h",
"chars": 135,
"preview": "#pragma once\n\nnamespace ControllerStateHook{\n void Init();\n bool RegisterScaleformFuncs(GFxMovieView * view, GFxValu"
},
{
"path": "sksevr_plugin/plugin/FormDB.cpp",
"chars": 11344,
"preview": "#include <filesystem>\n#include <assert.h>\n\n#include \"FormDB.h\"\n#include \"skse64/GameForms.h\"\n#include \"skse64/ScaleformV"
},
{
"path": "sksevr_plugin/plugin/FormDB.h",
"chars": 665,
"preview": "#include \"skse64/PapyrusNativeFunctions.h\"\n#include \"skse64/PluginAPI.h\"\n\n#include \"lua_glue.h\"\n\nextern lua_State* g_lua"
},
{
"path": "sksevr_plugin/plugin/Globals.h",
"chars": 261,
"preview": "#pragma once\n#include \"skse64/PluginAPI.h\"\nextern PluginHandle g_pluginHandle;\nextern SKSEPapyrusInterface* g_papyrus;\ne"
},
{
"path": "sksevr_plugin/plugin/Keyboard.cpp",
"chars": 5501,
"preview": "#include \"skse64/PluginAPI.h\"\n#include \"skse64/ScaleformValue.h\"\n#include \"skse64/ScaleformMovie.h\"\n#include \"skse64/Sca"
},
{
"path": "sksevr_plugin/plugin/Keyboard.h",
"chars": 216,
"preview": "#pragma once\n\n#include \"skse64/PluginAPI.h\"\n\nnamespace Keyboard {\n void Init();\n bool RegisterScaleformFuncs(GFxMovi"
},
{
"path": "sksevr_plugin/plugin/PapyrusUIFix.cpp",
"chars": 5441,
"preview": "#include \"PapyrusUIFix.h\"\n\n#include \"skse64/GameMenus.h\"\n#include \"skse64/ScaleformCallbacks.h\"\n#include \"skse64/Scalefo"
},
{
"path": "sksevr_plugin/plugin/PapyrusUIFix.h",
"chars": 134,
"preview": "#pragma once\n\n#include \"skse64/PapyrusObjects.h\"\n\nnamespace PapyrusUIFix\n{\n bool RegisterPapyrusFuncs(VMClassRegistry*"
},
{
"path": "sksevr_plugin/plugin/ScaleformExtendedDataFix.cpp",
"chars": 1116,
"preview": "\n#include \"ScaleformExtendedDataFix.h\"\n#include \"skse64/ScaleformValue.h\"\n#include \"skse64/ScaleformExtendedData.h\"\n#inc"
},
{
"path": "sksevr_plugin/plugin/ScaleformExtendedDataFix.h",
"chars": 143,
"preview": "#pragma once\n\n#include \"skse64/PluginAPI.h\"\n\nnamespace ExtendDataFix{\n void RegisterScaleformInventoryHooks(SKSEScalef"
},
{
"path": "sksevr_plugin/plugin/Settings.cpp",
"chars": 9540,
"preview": "#include <fstream>\n#include <sstream>\n#include <algorithm>\n#include <map>\n#include <vector>\n#include <functional>\n#inclu"
},
{
"path": "sksevr_plugin/plugin/Settings.h",
"chars": 427,
"preview": "#pragma once\n\n#include \"skse64/PluginAPI.h\"\n\nnamespace Settings {\n bool loadLuaConfig(const char* settingFilePath = nu"
},
{
"path": "sksevr_plugin/plugin/VRHookAPI.h",
"chars": 2218,
"preview": "/* VRHookAPI.h\n * \n * Part of SkyrimVRTools.\n * Provides ability to register callbacks to get Controller States whenever"
},
{
"path": "sksevr_plugin/plugin/exports.def",
"chars": 60,
"preview": "LIBRARY\t\"SkyUI-VR\"\nEXPORTS\nSKSEPlugin_Query\nSKSEPlugin_Load\n"
},
{
"path": "sksevr_plugin/plugin/guicon.cpp",
"chars": 1722,
"preview": "#include <windows.h>\n#include <stdio.h>\n#include <fcntl.h>\n#include <io.h>\n#include <iostream>\n#include <fstream>\n\n// ma"
},
{
"path": "sksevr_plugin/plugin/guicon.h",
"chars": 42,
"preview": "#pragma once\n\nbool RedirectIOToConsole();\n"
},
{
"path": "sksevr_plugin/plugin/lua_glue.cpp",
"chars": 7332,
"preview": "#include \"lua_glue.h\"\n#include <assert.h>\n#include <filesystem>\n#include \"FormDB.h\"\n\nnamespace lua {\n std::filesystem:"
},
{
"path": "sksevr_plugin/plugin/lua_glue.h",
"chars": 959,
"preview": "#pragma once\n#include <filesystem>\n\nextern \"C\" {\n#include <lua.h>\n#include <lualib.h>\n#include <lauxlib.h>\n#include \"lua"
},
{
"path": "sksevr_plugin/plugin/main.cpp",
"chars": 3827,
"preview": "#include \"skse64/PluginAPI.h\" // super\n#include \"skse64_common/skse_version.h\" // What version of SKSE is "
},
{
"path": "sksevr_plugin/plugin/plugin.vcxproj",
"chars": 8340,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
},
{
"path": "sksevr_plugin/plugin/plugin.vcxproj.filters",
"chars": 1395,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "sksevr_plugin/plugin/scripts/ExportPlugin.psc",
"chars": 70,
"preview": "ScriptName ExportPlugin Hidden\n\nfloat Function MyTest() global native\n"
},
{
"path": "sksevr_plugin/plugin.sln",
"chars": 3948,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3170"
},
{
"path": "sksevr_plugin/tools/run-lua-tests",
"chars": 137,
"preview": "#!/usr/bin/bash\n\nSCRIPT_PATH=`dirname \"$(realpath $0)\"`\n\ncd $SCRIPT_PATH/../lua-tests\nbusted --coverage -m \"$SCRIPT_PATH"
},
{
"path": "src/.gitignore",
"chars": 34,
"preview": ".flashProjectProperties\n.snippets\n"
},
{
"path": "src/CLIK/Mouse.as",
"chars": 515,
"preview": "//****************************************************************************\n// ActionScript Standard Library\n// Mous"
},
{
"path": "src/CLIK/Selection.as",
"chars": 1340,
"preview": "//****************************************************************************\n// ActionScript Standard Library\n// Sele"
},
{
"path": "src/CLIK/Stage.as",
"chars": 805,
"preview": "//****************************************************************************\n// ActionScript Standard Library\n// Stage"
},
{
"path": "src/CLIK/System/capabilities.as",
"chars": 2031,
"preview": "//****************************************************************************\n// ActionScript Standard Library\n// Syst"
},
{
"path": "src/CLIK/gfx/controls/Button.as",
"chars": 13018,
"preview": "dynamic class gfx.controls.Button extends gfx.core.UIComponent\n{\n\tvar state: String = \"up\";\n\tvar toggle: Boolean = false"
},
{
"path": "src/CLIK/gfx/controls/ButtonBar.as",
"chars": 8607,
"preview": "dynamic class gfx.controls.ButtonBar extends gfx.core.UIComponent\n{\n\tvar _itemRenderer: String = \"Button\";\n\tvar _spacing"
},
{
"path": "src/CLIK/gfx/controls/ButtonGroup.as",
"chars": 2247,
"preview": "dynamic class gfx.controls.ButtonGroup extends gfx.events.EventDispatcher\n{\n\tvar name: String = \"buttonGroup\";\n\tvar chil"
},
{
"path": "src/CLIK/gfx/controls/CoreList.as",
"chars": 7554,
"preview": "dynamic class gfx.controls.CoreList extends gfx.core.UIComponent\n{\n\tvar soundMap = {theme: \"default\", focusIn: \"focusIn\""
},
{
"path": "src/CLIK/gfx/controls/OptionStepper.as",
"chars": 5467,
"preview": "class gfx.controls.OptionStepper extends gfx.core.UIComponent\n{\n\tvar soundMap = {theme: \"default\", focusIn: \"focusIn\", "
},
{
"path": "src/CLIK/gfx/controls/RadioButton.as",
"chars": 337,
"preview": "dynamic class gfx.controls.RadioButton extends gfx.controls.Button\n{\n\tvar _group;\n\tvar _name;\n\n\tfunction RadioButton()\n\t"
},
{
"path": "src/CLIK/gfx/controls/ScrollBar.as",
"chars": 7221,
"preview": "dynamic class gfx.controls.ScrollBar extends gfx.controls.ScrollIndicator\n{\n\tvar trackScrollPageSize: Number = 1;\n\tvar _"
},
{
"path": "src/CLIK/gfx/controls/ScrollIndicator.as",
"chars": 5335,
"preview": "dynamic class gfx.controls.ScrollIndicator extends gfx.core.UIComponent\n{\n\tvar direction: String = \"vertical\";\n\tvar soun"
},
{
"path": "src/CLIK/gfx/controls/ScrollingList.as",
"chars": 11335,
"preview": "dynamic class gfx.controls.ScrollingList extends gfx.controls.CoreList\n{\n\tvar wrapping: String = \"normal\";\n\tvar autoRowC"
},
{
"path": "src/CLIK/gfx/controls/Slider.as",
"chars": 6573,
"preview": "dynamic class gfx.controls.Slider extends gfx.core.UIComponent\n{\n\tvar liveDragging: Boolean = false;\n\tvar state: String "
},
{
"path": "src/CLIK/gfx/controls/TextArea.as",
"chars": 6461,
"preview": "dynamic class gfx.controls.TextArea extends gfx.controls.TextInput\n{\n\tvar soundMap = {theme: \"default\", focusIn: \"focusI"
},
{
"path": "src/CLIK/gfx/controls/TextInput.as",
"chars": 7109,
"preview": "dynamic class gfx.controls.TextInput extends gfx.core.UIComponent\n{\n\tvar defaultText: String = \"\";\n\tvar soundMap = {them"
},
{
"path": "src/CLIK/gfx/core/UIComponent.as",
"chars": 6320,
"preview": "dynamic class gfx.core.UIComponent extends MovieClip\n{\n\tvar initialized: Boolean = false;\n\tvar enableInitCallback: Boole"
},
{
"path": "src/CLIK/gfx/data/DataProvider.as",
"chars": 1874,
"preview": "dynamic class gfx.data.DataProvider extends Array\n{\n\tvar isDataProvider: Boolean = true;\n\tvar cleanUpEvents;\n\tvar dispat"
},
{
"path": "src/CLIK/gfx/events/EventDispatcher.as",
"chars": 3629,
"preview": "class gfx.events.EventDispatcher\n{\n\tstatic var _instance;\n\t\n\tvar _listeners;\n\n\tfunction EventDispatcher()\n\t{\n\t}\n\n\tstati"
},
{
"path": "src/CLIK/gfx/io/GameDelegate.as",
"chars": 1450,
"preview": "import flash.external.ExternalInterface;\n\nclass gfx.io.GameDelegate\n{\n\tstatic var responseHash = {};\n\tstatic var callBa"
},
{
"path": "src/CLIK/gfx/managers/FocusHandler.as",
"chars": 5733,
"preview": "import skyui.util.Debug;\n\ndynamic class gfx.managers.FocusHandler\n{\n\tstatic var _instance = gfx.managers.FocusHandler.in"
},
{
"path": "src/CLIK/gfx/managers/InputDelegate.as",
"chars": 5685,
"preview": "/* Class InputDelegate\n *\n * This is where keydown/keyup events are normally passed to the UI.\n * We attach some suppli"
},
{
"path": "src/CLIK/gfx/ui/InputDetails.as",
"chars": 918,
"preview": "class gfx.ui.InputDetails\n{\n /* PROPERTIES */\n \n\tpublic var code: Number;\n\tpublic var controllerIdx: Number;\n\tpublic "
},
{
"path": "src/CLIK/gfx/ui/NavigationCode.as",
"chars": 1126,
"preview": "class gfx.ui.NavigationCode\n{\n\tstatic var UP: String = \"up\";\n\tstatic var DOWN: String = \"down\";\n\tstatic var LEFT: Strin"
},
{
"path": "src/CLIK/gfx/utils/Constraints.as",
"chars": 3857,
"preview": "dynamic class gfx.utils.Constraints\n{\n\tstatic var LEFT: Number = 1;\n\tstatic var RIGHT: Number = 2;\n\tstatic var TOP: Numb"
},
{
"path": "src/CLIK/gfx/utils/Locale.as",
"chars": 129,
"preview": "dynamic class gfx.utils.Locale\n{\n\n\tfunction Locale()\n\t{\n\t}\n\n\tstatic function getTranslatedString(value)\n\t{\n\t\treturn valu"
},
{
"path": "src/Common/Components/BlinkOnDemandMeter.as",
"chars": 488,
"preview": "class Components.BlinkOnDemandMeter extends Components.Meter\n{\n\tvar BlinkMovieClip: MovieClip;\n\tvar meterMovieClip: Mov"
},
{
"path": "src/Common/Components/BlinkOnEmptyMeter.as",
"chars": 510,
"preview": "class Components.BlinkOnEmptyMeter extends Components.Meter\n{\n\tvar iCurrentPercent: Number;\n\tvar iEmpty: Number;\n\tvar m"
},
{
"path": "src/Common/Components/CrossPlatformButtons.as",
"chars": 2601,
"preview": "// TODO!!! Doesn't look like this file is use at all by skyui.\n// Consider removing this file completely.\n\nimport Shared"
},
{
"path": "src/Common/Components/DeltaMeter.as",
"chars": 757,
"preview": "import Shared.GlobalFunc;\n\nclass Components.DeltaMeter extends Components.Meter\n{\n\tvar DeltaEmpty: Number;\n\tvar DeltaFu"
},
{
"path": "src/Common/Components/Meter.as",
"chars": 2007,
"preview": "import Shared.GlobalFunc;\n\nclass Components.Meter\n{\n\tvar CurrentPercent: Number;\n\tvar Empty: Number;\n\tvar EmptySpeed: Nu"
},
{
"path": "src/Common/Components/UniformTimeMeter.as",
"chars": 1408,
"preview": "import Shared.GlobalFunc;\nimport gfx.io.GameDelegate;\n\nclass Components.UniformTimeMeter extends Components.Meter\n{\n\tva"
},
{
"path": "src/Common/MouseRotationInputCatcher.as",
"chars": 1081,
"preview": "class MouseRotationInputCatcher extends MovieClip\n{\n\tstatic var PROCESS_ROTATION_DELAY: Number = 150;\n\t\n\tvar iProcessRo"
},
{
"path": "src/Common/QuantitySlider.as",
"chars": 929,
"preview": "import gfx.ui.InputDetails;\nimport gfx.ui.NavigationCode;\nimport Shared.GlobalFunc;\n\nclass QuantitySlider extends gfx.co"
},
{
"path": "src/Common/SaveLoadPanel.as",
"chars": 10615,
"preview": "import gfx.events.EventDispatcher;\nimport gfx.io.GameDelegate;\n\nclass SaveLoadPanel extends MovieClip\n{\n\tstatic var SCRE"
},
{
"path": "src/Common/Shared/BSScrollingList.as",
"chars": 11677,
"preview": "import Shared.GlobalFunc;\nimport gfx.ui.InputDetails;\nimport gfx.ui.NavigationCode;\nimport gfx.events.EventDispatcher;\n\n"
},
{
"path": "src/Common/Shared/ButtonChange.as",
"chars": 1287,
"preview": "import gfx.events.EventDispatcher;\n\nclass Shared.ButtonChange extends gfx.events.EventDispatcher\n{\n\t// Not sure why this"
},
{
"path": "src/Common/Shared/ButtonTextArtHolder.as",
"chars": 2436,
"preview": "import gfx.io.GameDelegate;\nimport flash.display.BitmapData;\n\nclass Shared.ButtonTextArtHolder extends MovieClip\n{\n\tvar"
},
{
"path": "src/Common/Shared/CenteredScrollingList.as",
"chars": 8385,
"preview": "import Shared.ListFilterer;\n\nclass Shared.CenteredScrollingList extends Shared.BSScrollingList\n{\n\tvar EntriesA: Array;\n"
},
{
"path": "src/Common/Shared/ExtractPlatformText.as",
"chars": 3329,
"preview": "class Shared.ExtractPlatformText\n{\n\tfunction ExtractPlatformText()\n\t{\n\t}\n\tstatic function IsWhitespace(str)\n\t{\n\t\treturn "
},
{
"path": "src/Common/Shared/GlobalFunc.as",
"chars": 7816,
"preview": "class Shared.GlobalFunc\n{\n\tstatic var RegisteredTextFields: Object = new Object();\n\tstatic var RegisteredMovieClips: Obj"
},
{
"path": "src/Common/Shared/ListFilterer.as",
"chars": 3060,
"preview": "import gfx.events.EventDispatcher;\n\nclass Shared.ListFilterer\n{\n\tvar EntryMatchesFunc: Function;\n\tvar _filterArray: Arr"
},
{
"path": "src/Common/Shared/Macros.as",
"chars": 377,
"preview": "import gfx.io.GameDelegate;\n\nclass Shared.Macros\n{\n function Macros()\n {\n }\n static function BSOUTPUT(asMessage)"
},
{
"path": "src/Common/Shared/PlatformChangeUser.as",
"chars": 526,
"preview": "import Shared.ButtonChange;\nimport Shared.PlatformChangeUser.PlatformChange;\n\nclass Shared.PlatformChangeUser extends Mo"
},
{
"path": "src/Common/Shared/Platforms.as",
"chars": 876,
"preview": "class Shared.Platforms\n{\n static var CONTROLLER_PC = 0;\n static var CONTROLLER_PCGAMEPAD = 1;\n static var CONTROLL"
},
{
"path": "src/Common/mx/transitions/Tween.as",
"chars": 4877,
"preview": "class mx.transitions.Tween\n{\n var obj;\n var prop;\n var begin;\n var useSeconds;\n var _time;\n var prevTime;\n "
},
{
"path": "src/Common/skse.as",
"chars": 1456,
"preview": "intrinsic class skse\n{\n\tstatic function Log(a_string:String):Void;\n\tstatic function AllowTextInput(a_flag:Boolean):Void"
},
{
"path": "src/Common/skyui/VRInput.as",
"chars": 34757,
"preview": "// The VRInput class is a namespace that holds all functions related\n// to construction, manipulation, transformation of"
},
{
"path": "src/Common/skyui/components/BottomBarMappedButton.as",
"chars": 2199,
"preview": "import skyui.components.MappedButton;\nimport skyui.util.GlobalFunctions;\nimport skyui.defines.Screen;\n\n// Specialized v"
},
{
"path": "src/Common/skyui/components/ButtonPanel.as",
"chars": 2606,
"preview": "class skyui.components.ButtonPanel extends MovieClip\n{\n /* PRIVATE VARIABLES */\t\n\t\n\t// Number of buttons that are actu"
},
{
"path": "src/Common/skyui/components/MappedButton.as",
"chars": 3986,
"preview": "import Shared.ButtonChange;\nimport gfx.controls.Button;\nimport skyui.defines.Input;\nimport skyui.util.GlobalFunctions;\n"
},
{
"path": "src/Common/skyui/components/MaskedTextArea.as",
"chars": 4346,
"preview": "import Shared.GlobalFunc;\n\nimport gfx.core.UIComponent;\nimport gfx.utils.Constraints;\n\nimport TextField.StyleSheet;\n\ncl"
},
{
"path": "src/Common/skyui/components/Meter.as",
"chars": 11391,
"preview": "import skyui.util.ColorFunctions;\nimport Shared.GlobalFunc;\nimport flash.geom.Transform;\nimport flash.geom.ColorTransfor"
},
{
"path": "src/Common/skyui/components/SearchWidget.as",
"chars": 5555,
"preview": "import flash.utils.Timer;\nimport gfx.events.EventDispatcher;\nimport gfx.managers.FocusHandler;\nimport gfx.ui.Navigation"
},
{
"path": "src/Common/skyui/components/Slider.as",
"chars": 2156,
"preview": "import gfx.ui.InputDetails;\nimport gfx.controls.Button;\nimport gfx.utils.Constraints;\nimport gfx.ui.NavigationCode;\n\ncl"
},
{
"path": "src/Common/skyui/components/TabBar.as",
"chars": 3331,
"preview": "import gfx.events.EventDispatcher;\n\nimport skyui.filter.ItemSortingFilter;\n\n\nclass skyui.components.TabBar extends Movi"
},
{
"path": "src/Common/skyui/components/colorswatch/ColorSquare.as",
"chars": 938,
"preview": "import gfx.controls.Button;\n\nimport flash.geom.ColorTransform;\nimport flash.geom.Transform;\n\nimport skyui.util.ColorFunc"
},
{
"path": "src/Common/skyui/components/colorswatch/ColorSwatch.as",
"chars": 5349,
"preview": "import gfx.controls.ButtonGroup;\nimport Shared.GlobalFunc;\nimport gfx.managers.FocusHandler;\nimport gfx.ui.InputDetails"
},
{
"path": "src/Common/skyui/components/dialog/BasicDialog.as",
"chars": 2591,
"preview": "import gfx.events.EventDispatcher;\nimport mx.transitions.Tween;\nimport mx.transitions.easing.None;\nimport mx.utils.Dele"
},
{
"path": "src/Common/skyui/components/dialog/ColumnSelectDialog.as",
"chars": 2853,
"preview": "import gfx.io.GameDelegate;\nimport gfx.managers.FocusHandler;\nimport gfx.ui.NavigationCode;\nimport gfx.ui.InputDetails;"
},
{
"path": "src/Common/skyui/components/list/BSList.as",
"chars": 1188,
"preview": "/*\n * Basic list API expected by the game.\n */\n\n// @abstract\nclass skyui.components.list.BSList extends MovieClip\n{\n "
},
{
"path": "src/Common/skyui/components/list/BasicEnumeration.as",
"chars": 907,
"preview": "import skyui.components.list.IEntryEnumeration;\n\n\nclass skyui.components.list.BasicEnumeration implements IEntryEnumera"
},
{
"path": "src/Common/skyui/components/list/BasicList.as",
"chars": 9460,
"preview": "import gfx.events.EventDispatcher;\nimport gfx.ui.NavigationCode;\nimport Shared.GlobalFunc;\nimport gfx.io.GameDelegate;\n"
},
{
"path": "src/Common/skyui/components/list/BasicListEntry.as",
"chars": 1614,
"preview": "import skyui.components.list.BasicList;\nimport skyui.components.list.ListState;\n\n\nclass skyui.components.list.BasicList"
},
{
"path": "src/Common/skyui/components/list/ButtonList.as",
"chars": 4485,
"preview": "import gfx.ui.NavigationCode;\nimport Shared.GlobalFunc;\n\nimport skyui.components.list.BasicList;\n\n/*\n * A simple, gene"
},
{
"path": "src/Common/skyui/components/list/ButtonListEntry.as",
"chars": 2153,
"preview": "import skyui.components.list.BasicList;\nimport skyui.components.list.ListState;\nimport skyui.components.list.BasicListE"
},
{
"path": "src/Common/skyui/components/list/ColumnDescriptor.as",
"chars": 166,
"preview": "class skyui.components.list.ColumnDescriptor\n{\n\tpublic var identifier: String;\n\tpublic var longName: String;\n\tpublic va"
},
{
"path": "src/Common/skyui/components/list/ColumnLayoutData.as",
"chars": 1055,
"preview": "class skyui.components.list.ColumnLayoutData\n{\n\tpublic var type: Number = -1;\n\n\t// Entry -----------------------------"
},
{
"path": "src/Common/skyui/components/list/EntryClipManager.as",
"chars": 1512,
"preview": "import skyui.components.list.BasicList;\nimport skyui.components.list.IEntryClipBuilder;\n\n\nclass skyui.components.list.E"
},
{
"path": "src/Common/skyui/components/list/FilteredEnumeration.as",
"chars": 1713,
"preview": "import skyui.filter.IFilter;\nimport skyui.components.list.BasicEnumeration;\n\n\nclass skyui.components.list.FilteredEnume"
},
{
"path": "src/Common/skyui/components/list/IEntryEnumeration.as",
"chars": 863,
"preview": "/*\n * An enumeration of list entries.\n *\n * This is meant to provide an abstraction over a list of things\n * so we h"
},
{
"path": "src/Common/skyui/components/list/IListProcessor.as",
"chars": 141,
"preview": "import skyui.components.list.BasicList;\n\n\ninterface skyui.components.list.IListProcessor\n{\n\tfunction processList(a_list"
},
{
"path": "src/Common/skyui/components/list/ListLayout.as",
"chars": 16205,
"preview": "import gfx.events.EventDispatcher;\n\nimport skyui.components.list.ColumnLayoutData;\nimport skyui.components.list.ColumnD"
},
{
"path": "src/Common/skyui/components/list/ListLayoutManager.as",
"chars": 1762,
"preview": "import skyui.util.ConfigManager;\nimport skyui.components.list.ListLayout;\n\nclass skyui.components.list.ListLayoutManage"
},
{
"path": "src/Common/skyui/components/list/ListState.as",
"chars": 351,
"preview": "import skyui.components.list.BasicList;\n\n/*\n * Used to dynamically add additional properties to a list that are passed\n"
},
{
"path": "src/Common/skyui/components/list/ScrollingList.as",
"chars": 10740,
"preview": "import gfx.events.EventDispatcher;\nimport gfx.ui.NavigationCode;\nimport gfx.ui.InputDetails;\nimport Shared.GlobalFunc;\n"
},
{
"path": "src/Common/skyui/components/list/SortedListHeader.as",
"chars": 3648,
"preview": "import gfx.events.EventDispatcher;\n\nimport skyui.components.list.ListLayout;\n\nclass skyui.components.list.SortedListHea"
},
{
"path": "src/Common/skyui/components/list/TabularList.as",
"chars": 4228,
"preview": "import Shared.GlobalFunc;\nimport gfx.ui.NavigationCode;\nimport gfx.ui.InputDetails;\n\nimport skyui.defines.Input;\nimport"
},
{
"path": "src/Common/skyui/components/list/TabularListEntry.as",
"chars": 5343,
"preview": "import skyui.components.list.TabularList;\nimport skyui.components.list.ListLayout;\nimport skyui.components.list.ListSta"
},
{
"path": "src/Common/skyui/defines/Actor.as",
"chars": 8417,
"preview": "class skyui.defines.Actor\n{\n\tpublic static var AV_NONE: Number = 0xFFFFFFFF;\n\t\n\tpublic static var AV_AGGRESSION: Number"
},
{
"path": "src/Common/skyui/defines/Armor.as",
"chars": 3886,
"preview": "class skyui.defines.Armor\n{\n\tpublic static var WEIGHT_LIGHT: Number\t\t= 0;\n\tpublic static var WEIGHT_HEAVY: Number\t\t= 1;"
},
{
"path": "src/Common/skyui/defines/ButtonArtNames.as",
"chars": 7014,
"preview": "// Provides a mapping from keyname => keycode\n// The keyCodes correspond directly to the animation/timeline frames in Bu"
},
{
"path": "src/Common/skyui/defines/Form.as",
"chars": 9670,
"preview": "class skyui.defines.Form\n{\n\tpublic static var TYPE_NONE: Number\t\t\t\t= 0;\n\n\tpublic static var TYPE_EFFECTSETTING: Number\t"
},
{
"path": "src/Common/skyui/defines/Input.as",
"chars": 2527,
"preview": "import Shared.Platforms;\nimport skyui.util.Debug;\n\nclass skyui.defines.Input\n{\n\tstatic var DEVICE_KEYBOARD: Number\t= 0;"
},
{
"path": "src/Common/skyui/defines/Inventory.as",
"chars": 4852,
"preview": "class skyui.defines.Inventory\n{\n\tpublic static var ICT_NONE: Number\t\t\t\t= 0;\n\tpublic static var ICT_ARMOR: Number\t\t\t\t= 1"
},
{
"path": "src/Common/skyui/defines/Item.as",
"chars": 3091,
"preview": "class skyui.defines.Item\n{\n\tpublic static var OTHER: Number\t\t\t\t= undefined;\n\n\tpublic static var POTION_HEALTH: Number\t\t\t"
},
{
"path": "src/Common/skyui/defines/Magic.as",
"chars": 3445,
"preview": "class skyui.defines.Magic\n{\n\t// Archetype\n\tpublic static var ARCHETYPE_VALUEMOD: Number = 0;\n\tpublic static var ARCHETY"
},
{
"path": "src/Common/skyui/defines/Material.as",
"chars": 1946,
"preview": "class skyui.defines.Material\n{\n\tpublic static var AETHERIUM: Number\t\t\t= 0;\n\tpublic static var ARTIFACT: Number\t\t\t= 1;\n\t"
},
{
"path": "src/Common/skyui/defines/Screen.as",
"chars": 97,
"preview": "class skyui.defines.Screen\n{\n\tstatic public var width = 1280;\n\tstatic public var height = 720;\n}\n"
},
{
"path": "src/Common/skyui/defines/Weapon.as",
"chars": 1863,
"preview": "class skyui.defines.Weapon\n{\n\tpublic static var ANIM_HANDTOHANDMELEE: Number\t= 0;\n\tpublic static var ANIM_ONEHANDSWORD:"
},
{
"path": "src/Common/skyui/filter/IFilter.as",
"chars": 128,
"preview": "interface skyui.filter.IFilter\n{\n\t// Apply filter on the given array\n\tpublic function applyFilter(filteredList: Array):"
},
{
"path": "src/Common/skyui/filter/ItemTypeFilter.as",
"chars": 2344,
"preview": "import gfx.events.EventDispatcher;\n\nimport skyui.filter.IFilter;\n\n\nclass skyui.filter.ItemTypeFilter implements IFilter"
},
{
"path": "src/Common/skyui/filter/NameFilter.as",
"chars": 1868,
"preview": "import gfx.events.EventDispatcher;\n\nimport skyui.util.GlobalFunctions;\n\n\nclass skyui.filter.NameFilter implements skyui"
},
{
"path": "src/Common/skyui/filter/SortFilter.as",
"chars": 1743,
"preview": "import gfx.events.EventDispatcher;\n\nimport skyui.filter.IFilter;\n\n\nclass skyui.filter.SortFilter implements skyui.filte"
},
{
"path": "src/Common/skyui/props/CompoundProperty.as",
"chars": 2239,
"preview": "import skyui.props.ItemFilter;\n\n// Combine multiple properties into one property (used for flexible sorting)\nclass skyu"
},
{
"path": "src/Common/skyui/props/ItemFilter.as",
"chars": 1034,
"preview": "// For now this is a just a simple associative array of required values\nclass skyui.props.ItemFilter\n{\t\n\tvar reqs:Objec"
},
{
"path": "src/Common/skyui/props/PropertyDataExtender.as",
"chars": 3395,
"preview": "import gfx.io.GameDelegate;\n\nimport skyui.components.list.BasicList;\nimport skyui.components.list.IListProcessor;\nimpor"
},
{
"path": "src/Common/skyui/props/PropertyLookup.as",
"chars": 5717,
"preview": "import skyui.props.ItemFilter;\n\nclass skyui.props.PropertyLookup\n{\n\tprivate static var dataMemberLimit = 200;\n\tprivate "
},
{
"path": "src/Common/skyui/util/ColorFunctions.as",
"chars": 6013,
"preview": "class skyui.util.ColorFunctions\n{\t\n /* CONSTANTS */\n\tprivate static var RAD_TO_DEG: Number\t\t= 57.295779513082;\n\tprivate"
},
{
"path": "src/Common/skyui/util/ConfigManager.as",
"chars": 11054,
"preview": "import flash.utils.*;\nimport gfx.events.EventDispatcher;\n\nimport skyui.components.list.ListLayout;\nimport skyui.util.Gl"
},
{
"path": "src/Common/skyui/util/Debug.as",
"chars": 5501,
"preview": "import Date;\n\nclass skyui.util.Debug\n{\n /* PRIVATE VARIABLES */\n\tprivate static var _buffer: Array = [];\n\n\tprivate sta"
},
{
"path": "src/Common/skyui/util/DialogManager.as",
"chars": 979,
"preview": "import gfx.managers.FocusHandler;\nimport gfx.events.EventDispatcher;\nimport skyui.components.dialog.BasicDialog;\n\n\nclas"
},
{
"path": "src/Common/skyui/util/EffectIconMap.as",
"chars": 12357,
"preview": "import skyui.defines.Magic;\nimport skyui.defines.Actor;\n\n\nclass skyui.util.EffectIconMap\n{\n\tprivate static var _archety"
},
{
"path": "src/Common/skyui/util/GlobalFunctions.as",
"chars": 6621,
"preview": "import skyui.defines.Input;\n\nclass skyui.util.GlobalFunctions\n{\n /* PUBLIC FUNCTIONS */\n\n\tpublic static function extra"
}
]
// ... and 793 more files (download for full content)
About this extraction
This page contains the full source code of the Odie/skyui-vr GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 993 files (4.5 MB), approximately 1.2M tokens, and a symbol index with 145 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.