diff --git a/installer/core/Interface/Translations/SoulsyHUD_czech.txt b/installer/core/Interface/Translations/SoulsyHUD_czech.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_czech.txt and b/installer/core/Interface/Translations/SoulsyHUD_czech.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_english.txt b/installer/core/Interface/Translations/SoulsyHUD_english.txt index 1bf933bf..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_english.txt and b/installer/core/Interface/Translations/SoulsyHUD_english.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_french.txt b/installer/core/Interface/Translations/SoulsyHUD_french.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_french.txt and b/installer/core/Interface/Translations/SoulsyHUD_french.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_german.txt b/installer/core/Interface/Translations/SoulsyHUD_german.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_german.txt and b/installer/core/Interface/Translations/SoulsyHUD_german.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_italian.txt b/installer/core/Interface/Translations/SoulsyHUD_italian.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_italian.txt and b/installer/core/Interface/Translations/SoulsyHUD_italian.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_japanese.txt b/installer/core/Interface/Translations/SoulsyHUD_japanese.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_japanese.txt and b/installer/core/Interface/Translations/SoulsyHUD_japanese.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_polish.txt b/installer/core/Interface/Translations/SoulsyHUD_polish.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_polish.txt and b/installer/core/Interface/Translations/SoulsyHUD_polish.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_russian.txt b/installer/core/Interface/Translations/SoulsyHUD_russian.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_russian.txt and b/installer/core/Interface/Translations/SoulsyHUD_russian.txt differ diff --git a/installer/core/Interface/Translations/SoulsyHUD_spanish.txt b/installer/core/Interface/Translations/SoulsyHUD_spanish.txt index 34d8c49a..fa8fb8c8 100644 Binary files a/installer/core/Interface/Translations/SoulsyHUD_spanish.txt and b/installer/core/Interface/Translations/SoulsyHUD_spanish.txt differ diff --git a/installer/core/mcm/config/SoulsyHUD/config.json b/installer/core/mcm/config/SoulsyHUD/config.json index 2791446c..eaa02b26 100644 --- a/installer/core/mcm/config/SoulsyHUD/config.json +++ b/installer/core/mcm/config/SoulsyHUD/config.json @@ -1,642 +1,655 @@ { - "modName": "SoulsyHUD", - "displayName": "SoulsyHUD", - "minMcmVersion": 11, - "cursorFillMode": "topToBottom", - "pages": [ - { - "pageDisplayName": "$SoulsyHUD_Settings_Page", - "cursorFillMode": "topToBottom", - "content": [ - { - "text": "$SoulsyHUD_Controls_KeysHeader", - "type": "header" - }, - { - "id": "uPowerCycleKey:Controls", - "text": "$SoulsyHUD_Controls_PowerCycleKey_Text", - "help": "$SoulsyHUD_Controls_PowerCycleKey_Help", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uLeftCycleKey:Controls", - "text": "$SoulsyHUD_Controls_LeftCycleKey_Text", - "help": "$SoulsyHUD_Controls_LeftCycleKey_Help", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uRightCycleKey:Controls", - "text": "$SoulsyHUD_Controls_RightCycleKey_Text", - "help": "$SoulsyHUD_Controls_RightCycleKey_Help", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "text": "$SoulsyHUD_Controls_ModifiersHeader", - "type": "header" - }, - { - "id": "uHowToCycle:Controls", - "text": "$SoulsyHUD_Controls_Advance_Text", - "help": "$SoulsyHUD_Controls_Advance_Help", - "type": "enum", - "valueOptions": { - "options": [ - "$SoulsyHUD_Cycle_Enum_Hotkey", - "$SoulsyHUD_Cycle_Enum_LongPress", - "$SoulsyHUD_Cycle_Enum_Mod" - ], - "sourceType": "ModSettingInt", - "defaultValue": 0 - } - }, - { - "type": "hiddenToggle", - "text": "hidden toggle for cycle modifier hotkey", - "groupControl": 1, - "valueOptions": { - "sourceType": "PropertyValueBool", - "propertyName": "pCycleNeedsModifier" - } - }, - { - "id": "iCycleModifierKey:Controls", - "text": "$SoulsyHUD_Controls_CycleModifierKey_Text", - "help": "$SoulsyHUD_Controls_CycleModifierKey_Help", - "groupCondition": 1, - "groupBehavior": "skip", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uHowToggleInMenus:Controls", - "text": "$SoulsyHUD_Controls_Menus_Text", - "help": "$SoulsyHUD_Controls_Menus_Help", - "type": "enum", - "valueOptions": { - "options": [ - "$SoulsyHUD_Menu_Enum_Hotkey", - "$SoulsyHUD_Menu_Enum_LongPress", - "$SoulsyHUD_Menu_Enum_Mod" - ], - "sourceType": "ModSettingInt", - "defaultValue": 0 - } - }, - { - "type": "hiddenToggle", - "text": "menu modifier hotkey", - "groupControl": 2, - "valueOptions": { - "sourceType": "PropertyValueBool", - "propertyName": "pMenuNeedsModifier" - } - }, - { - "id": "iMenuModifierKey:Controls", - "text": "$SoulsyHUD_Controls_MenuModifierKey_Text", - "help": "$SoulsyHUD_Controls_MenuModifierKey_Help", - "ignoreConflicts": true, - "groupCondition": 2, - "groupBehavior": "skip", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "bLinkToFavorites:Options", - "text": "$SoulsyHUD_Options_Favoriting_Text", - "help": "$SoulsyHUD_Options_Favoriting_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingBool" - } - }, - { - "id": "uHowToUnequip:Controls", - "text": "$SoulsyHUD_Controls_Unarmed_Text", - "help": "$SoulsyHUD_Controls_Unarmed_Help", - "type": "enum", - "valueOptions": { - "options": [ - "$SoulsyHUD_Unarmed_Enum_None", - "$SoulsyHUD_Unarmed_Enum_LongPress", - "$SoulsyHUD_Unarmed_Enum_Mod", - "$SoulsyHUD_Unarmed_Enum_Add", - "$SoulsyHUD_Unarmed_Enum_Hotkey" - ], - "sourceType": "ModSettingInt", - "defaultValue": 0 - } - }, - { - "type": "hiddenToggle", - "text": "hidden toggle for unequip modifier hotkey", - "groupControl": 3, - "valueOptions": { - "sourceType": "PropertyValueBool", - "propertyName": "pEnableUnequipModifier" - } - }, - { - "id": "iUnequipModifierKey:Controls", - "text": "$SoulsyHUD_Controls_UnequipModifierKey_Text", - "help": "$SoulsyHUD_Controls_UnequipModifierKey_Help", - "groupCondition": 3, - "groupBehavior": "skip", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "type": "hiddenToggle", - "text": "hidden toggle for unequip dedicated hotkey", - "groupControl": 4, - "valueOptions": { - "sourceType": "PropertyValueBool", - "propertyName": "pEnableUnequipHotkey" - } - }, - { - "id": "iUnequipHotkey:Controls", - "text": "$SoulsyHUD_Controls_UnequipHotkey_Text", - "help": "$SoulsyHUD_Controls_UnequipHotkey_Help", - "groupCondition": 4, - "groupBehavior": "skip", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "type": "hiddenToggle", - "text": "hidden toggle for long-press-to-match setting", - "groupControl": 5, - "valueOptions": { - "sourceType": "PropertyValueBool", - "propertyName": "pEnableLongPressMatchOption" - } - }, - { - "id": "bLongPressMatches:Controls", - "text": "$SoulsyHUD_LongPressToMatch_Text", - "help": "$SoulsyHUD_LongPressToMatch_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingBool" - }, - "groupCondition": 5, - "groupBehavior": "skip" - }, - { - "text": "$SoulsyHUD_Controls_Consumables_Header", - "type": "header", - "position": 1 - }, - { - "id": "bGroupPotions:Options", - "text": "$SoulsyHUD_Controls_GroupPotions_Text", - "help": "$SoulsyHUD_Controls_GroupPotions_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uUtilityCycleKey:Controls", - "text": "$SoulsyHUD_Controls_UtilityCycleKey_Text", - "help": "$SoulsyHUD_Controls_UtilityCycleKey_Help", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uHowToActivate:Controls", - "text": "$SoulsyHUD_Activate_When_Text", - "help": "$SoulsyHUD_Activate_When_Help", - "type": "enum", - "valueOptions": { - "options": [ - "$SoulsyHUD_Activate_Enum_Hotkey", - "$SoulsyHUD_Activate_Enum_LongPress", - "$SoulsyHUD_Activate_Enum_Mod" - ], - "sourceType": "ModSettingInt", - "defaultValue": 0 - } - }, - { - "type": "hiddenToggle", - "text": "hidden toggle for utility activate modifier", - "groupControl": 6, - "valueOptions": { - "sourceType": "PropertyValueBool", - "propertyName": "pEnableActivateModifier" - } - }, - { - "id": "iUtilityActivateModifier:Controls", - "text": "$SoulsyHUD_Controls_ActivateModifier_Text", - "help": "$SoulsyHUD_Controls_ActivateModifier_Help", - "groupCondition": 6, - "groupBehavior": "skip", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "type": "hiddenToggle", - "text": "hidden toggle for utility hotkey", - "groupControl": 7, - "valueOptions": { - "sourceType": "PropertyValueBool", - "propertyName": "pEnableActivateHotkey" - } - }, - { - "id": "uUtilityActivateKey:Controls", - "text": "$SoulsyHUD_Controls_ActivateKey_Text", - "help": "$SoulsyHUD_Controls_ActivateKey_Help", - "groupCondition": 7, - "groupBehavior": "skip", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "bCycleAmmo:Options", - "text": "$SoulsyHUD_Options_CycleAmmo_Text", - "help": "$SoulsyHUD_Options_CycleAmmo_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "text": "$SoulsyHUD_Gameplay_FeelHeader", - "type": "header" - }, - { - "id": "uEquipDelay:Options", - "text": "$SoulsyHUD_Options_EquipDelay_Text", - "help": "$SoulsyHUD_Options_EquipDelay_Help", - "type": "slider", - "valueOptions": { - "min": 0, - "max": 2500, - "step": 50, - "sourceType": "ModSettingInt" - } - }, - { - "id": "uLongPressMillis:Options", - "text": "$SoulsyHUD_Options_LongPress_Text", - "help": "$SoulsyHUD_Options_LongPress_Help", - "type": "slider", - "valueOptions": { - "min": 750, - "max": 2500, - "step": 50, - "sourceType": "ModSettingInt" - } - }, - { - "id": "bCyclingSlowsTime:Options", - "text": "$SoulsyHUD_Options_SlowTime_Text", - "help": "$SoulsyHUD_Options_SlowTime_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uSlowTimeFactor:Options", - "text": "$SoulsyHUD_Options_HowSlow_Text", - "help": "$SoulsyHUD_Options_HowSlow_Help", - "type": "slider", - "valueOptions": { - "min": 10, - "max": 90, - "step": 1, - "sourceType": "ModSettingInt" - } - } - ] - }, - { - "pageDisplayName": "$SoulsyHUD_Display_Page", - "cursorFillMode": "topToBottom", - "content": [ - { - "text": "$SoulsyHUD_Display_Header", - "type": "header" - }, - { - "id": "uAnchorLocation:Options", - "text": "$SoulsyHUD_Options_AnchorLoc_Text", - "type": "enum", - "help": "$SoulsyHUD_Options_AnchorLoc_Help", - "valueOptions": { - "options": [ - "$SoulsyHUD_AnchorLoc_None", - "$SoulsyHUD_AnchorLoc_TopLeft", - "$SoulsyHUD_AnchorLoc_TopRight", - "$SoulsyHUD_AnchorLoc_BottomLeft", - "$SoulsyHUD_AnchorLoc_BottomRight", - "$SoulsyHUD_AnchorLoc_Center", - "$SoulsyHUD_AnchorLoc_CenterTop", - "$SoulsyHUD_AnchorLoc_CenterBottom", - "$SoulsyHUD_AnchorLoc_LeftCenter", - "$SoulsyHUD_AnchorLoc_RightCenter" - ], - "sourceType": "ModSettingInt", - "defaultValue": 0 - } - }, - { - "id": "bAutoFade:Options", - "text": "$SoulsyHUD_Options_Fade_Text", - "help": "$SoulsyHUD_Options_Fade_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uFadeTime:Options", - "text": "$SoulsyHUD_Options_FadeTime_Text", - "help": "$SoulsyHUD_Options_FadeTime_Help", - "type": "slider", - "valueOptions": { - "min": 0, - "max": 5000, - "step": 100, - "sourceType": "ModSettingInt" - } - }, - { - "id": "fMaxAlpha:Options", - "text": "$SoulsyHUD_Options_MaxAlpha_Text", - "help": "$SoulsyHUD_Options_MaxAlpha_Help", - "type": "slider", - "valueOptions": { - "min": 0.2, - "max": 1.0, - "step": 0.01, - "sourceType": "ModSettingFloat", - "formatString": "{2}" - } - }, - { - "id": "uShowHideKey:Controls", - "text": "$SoulsyHUD_Controls_ShowHideKey_Text", - "help": "$SoulsyHUD_Controls_ShowHideKey_Help", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "bColorizeIcons:Options", - "text": "$SoulsyHUD_Options_Colorize_Text", - "help": "$SoulsyHUD_Options_Colorize_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "uControllerKind:Options", - "text": "$SoulsyHUD_Options_Controller_Text", - "type": "enum", - "help": "$SoulsyHUD_Options_Controller_Help", - "valueOptions": { - "options": ["$SoulsyHUD_Controls_PS", "$SoulsyHUD_Controls_Xbox"], - "sourceType": "ModSettingInt", - "defaultValue": 0 - } - }, - { - "id": "uRefreshKey:Controls", - "text": "$SoulsyHUD_Controls_RefreshKey_Text", - "help": "$SoulsyHUD_Controls_RefreshKey_Help", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "sSKSEIdentifier:Options", - "text": "$SoulsyHUD_ModIdString_Text", - "help": "$SoulsyHUD_ModIdString_Help", - "type": "input", - "valueOptions": { - "sourceType": "ModSettingString" - } - }, - { - "id": "bDebugMode:Options", - "text": "$SoulsyHUD_Options_Debug_Text", - "help": "$SoulsyHUD_Options_Debug_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "text": "$SoulsyHUD_Maintenance_Header", - "type": "header", - "position": 1 - }, - { - "text": "$SoulsyHUD_Clear_Text", - "help": "$SoulsyHUD_Clear_Help", - "type": "text", - "valueOptions": { - "value": "clear" - }, - "action": { - "type": "CallFunction", - "function": "ClearCyclesPapyrus" - } - }, - { - "text": "$SoulsyHUD_CycleContents_Header", - "type": "header" - }, - { - "id": "pCycleToShow", - "text": "$SoulsyHUD_ChooseCycle_Text", - "help": "$SoulsyHUD_ChooseCycle_Help", - "type": "enum", - "valueOptions": { - "options": [ - "$SoulsyHUD_CycleEnum_Powers", - "$SoulsyHUD_CycleEnum_Utilities", - "$SoulsyHUD_CycleEnum_LeftHand", - "$SoulsyHUD_CycleEnum_RightHand" - ], - "sourceType": "PropertyValueInt", - "propertyName": "pCycleToShow", - "defaultValue": 0 - }, - "action": { - "type": "CallFunction", - "function": "ShowCycleEntries", - "params": ["{value}"] - } - }, - { - "id": "cycleDisplay", - "text": "$SoulsyHUD_ChosenCycle_Text", - "help": "$SoulsyHUD_ChosenCycle_Help", - "type": "menu", - "valueOptions": { - "options": [" ", " "], - "sourceType": "PropertyValueInt", - "propertyName": "pCycleItemShown", - "defaultValue": 0 - } - } - ] - }, - { - "pageDisplayName": "$SoulsyHUD_EquipSets_Page", - "cursorFillMode": "topToBottom", - "content": [ - { - "text": "$SoulsyHUD_EquipSets_Header", - "type": "header" - }, - { - "id": "iEquipSetCycleKey:Controls", - "text": "$SoulsyHUD_Controls_EquipSetCycleKey_Text", - "help": "$SoulsyHUD_Controls_EquipSetCycleKey_Help", - "type": "keymap", - "valueOptions": { - "sourceType": "ModSettingInt" - } - }, - { - "id": "bEquipSetsUnequip:Options", - "text": "$SoulsyHUD_EquipSetsUnequip_Text", - "help": "$SoulsyHUD_EquipSetsUnequip_Help", - "type": "toggle", - "valueOptions": { - "sourceType": "ModSettingBool" - } - }, - { - "id": "sLastUsedSetName:Equipsets", - "text": "$SoulsyHUD_EquipSetName_Text", - "help": "$SoulsyHUD_EquipSetName_Help", - "type": "input", - "valueOptions": { - "sourceType": "ModSettingString" - } - }, - { - "text": "$SoulsyHUD_NewEquipSet_Text", - "help": "$SoulsyHUD_NewEquipSet_Help", - "type": "text", - "action": { - "type": "CallFunction", - "function": "CreateEquipSet" - } - }, - { - "text": "$SoulsyHUD_UpdateASet_Header", - "type": "header" - }, - { - "id": "pEquipSetMenuSelection", - "text": "$SoulsyHUD_EquipSetList_Text", - "help": "$SoulsyHUD_EquipSetList_Help", - "type": "menu", - "valueOptions": { - "options": ["$SoulsyHUD_NoEquipSets", " "], - "sourceType": "PropertyValueString", - "propertyName": "pEquipSetMenuSelection" - } - }, - { - "id": "sLastEditedSetName:Equipsets", - "text": "$SoulsyHUD_SelectedEquipSetName_Text", - "help": "$SoulsyHUD_SelectedEquipSetName_Help", - "type": "input" - }, - { - "id": "renameEquipSet", - "text": "$SoulsyHUD_RenameSet_Text", - "help": "$SoulsyHUD_RenameSet_Help", - "type": "text", - "action": { - "type": "CallFunction", - "function": "RenameEquipSet" - } - }, - { - "id": "updateEquipSet", - "text": "$SoulsyHUD_UpdateSet_Text", - "help": "$SoulsyHUD_UpdateSet_Help", - "type": "text", - "action": { - "type": "CallFunction", - "function": "UpdateEquipSet" - } - }, - { - "id": "removeEquipSet", - "text": "$SoulsyHUD_RemoveSet_Text", - "help": "$SoulsyHUD_RemoveSet_Help", - "type": "text", - "action": { - "type": "CallFunction", - "function": "RemoveEquipSet" - } - }, - { - "text": "$SoulsyHUD_SelectedSet_Header", - "type": "header", - "position": 1 - }, - { - "id": "pIconSourceSelection", - "text": "$SoulsyHUD_EquipSetItemList_Text", - "help": "$SoulsyHUD_EquipSetItemList_Help", - "type": "menu", - "valueOptions": { - "options": ["$SoulsyHUD_NoItems", " "], - "sourceType": "PropertyValueString", - "propertyName": "pIconSourceSelection" - } - }, - { - "id": "useSelectedItemAsIcon", - "text": "$SoulsyHUD_UseItemAsIcon_Text", - "help": "$SoulsyHUD_UseItemAsIcon_Help", - "type": "text", - "action": { - "type": "CallFunction", - "function": "UseSelectionAsIcon" - } + "modName": "SoulsyHUD", + "displayName": "SoulsyHUD", + "minMcmVersion": 11, + "cursorFillMode": "topToBottom", + "pages": [ + { + "pageDisplayName": "$SoulsyHUD_Settings_Page", + "cursorFillMode": "topToBottom", + "content": [ + { + "text": "$SoulsyHUD_Controls_KeysHeader", + "type": "header" + }, + { + "id": "uPowerCycleKey:Controls", + "text": "$SoulsyHUD_Controls_PowerCycleKey_Text", + "help": "$SoulsyHUD_Controls_PowerCycleKey_Help", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uLeftCycleKey:Controls", + "text": "$SoulsyHUD_Controls_LeftCycleKey_Text", + "help": "$SoulsyHUD_Controls_LeftCycleKey_Help", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uRightCycleKey:Controls", + "text": "$SoulsyHUD_Controls_RightCycleKey_Text", + "help": "$SoulsyHUD_Controls_RightCycleKey_Help", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "text": "$SoulsyHUD_Controls_ModifiersHeader", + "type": "header" + }, + { + "id": "uHowToCycle:Controls", + "text": "$SoulsyHUD_Controls_Advance_Text", + "help": "$SoulsyHUD_Controls_Advance_Help", + "type": "enum", + "valueOptions": { + "options": [ + "$SoulsyHUD_Cycle_Enum_Hotkey", + "$SoulsyHUD_Cycle_Enum_LongPress", + "$SoulsyHUD_Cycle_Enum_Mod" + ], + "sourceType": "ModSettingInt", + "defaultValue": 0 + } + }, + { + "type": "hiddenToggle", + "text": "hidden toggle for cycle modifier hotkey", + "groupControl": 1, + "valueOptions": { + "sourceType": "PropertyValueBool", + "propertyName": "pCycleNeedsModifier" + } + }, + { + "id": "iCycleModifierKey:Controls", + "text": "$SoulsyHUD_Controls_CycleModifierKey_Text", + "help": "$SoulsyHUD_Controls_CycleModifierKey_Help", + "groupCondition": 1, + "groupBehavior": "skip", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uHowToggleInMenus:Controls", + "text": "$SoulsyHUD_Controls_Menus_Text", + "help": "$SoulsyHUD_Controls_Menus_Help", + "type": "enum", + "valueOptions": { + "options": [ + "$SoulsyHUD_Menu_Enum_Hotkey", + "$SoulsyHUD_Menu_Enum_LongPress", + "$SoulsyHUD_Menu_Enum_Mod" + ], + "sourceType": "ModSettingInt", + "defaultValue": 0 + } + }, + { + "type": "hiddenToggle", + "text": "menu modifier hotkey", + "groupControl": 2, + "valueOptions": { + "sourceType": "PropertyValueBool", + "propertyName": "pMenuNeedsModifier" + } + }, + { + "id": "iMenuModifierKey:Controls", + "text": "$SoulsyHUD_Controls_MenuModifierKey_Text", + "help": "$SoulsyHUD_Controls_MenuModifierKey_Help", + "ignoreConflicts": true, + "groupCondition": 2, + "groupBehavior": "skip", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "bLinkToFavorites:Options", + "text": "$SoulsyHUD_Options_Favoriting_Text", + "help": "$SoulsyHUD_Options_Favoriting_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingBool" + } + }, + { + "id": "uHowToUnequip:Controls", + "text": "$SoulsyHUD_Controls_Unarmed_Text", + "help": "$SoulsyHUD_Controls_Unarmed_Help", + "type": "enum", + "valueOptions": { + "options": [ + "$SoulsyHUD_Unarmed_Enum_None", + "$SoulsyHUD_Unarmed_Enum_LongPress", + "$SoulsyHUD_Unarmed_Enum_Mod", + "$SoulsyHUD_Unarmed_Enum_Add", + "$SoulsyHUD_Unarmed_Enum_Hotkey" + ], + "sourceType": "ModSettingInt", + "defaultValue": 0 + } + }, + { + "type": "hiddenToggle", + "text": "hidden toggle for unequip modifier hotkey", + "groupControl": 3, + "valueOptions": { + "sourceType": "PropertyValueBool", + "propertyName": "pEnableUnequipModifier" + } + }, + { + "id": "iUnequipModifierKey:Controls", + "text": "$SoulsyHUD_Controls_UnequipModifierKey_Text", + "help": "$SoulsyHUD_Controls_UnequipModifierKey_Help", + "groupCondition": 3, + "groupBehavior": "skip", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "type": "hiddenToggle", + "text": "hidden toggle for unequip dedicated hotkey", + "groupControl": 4, + "valueOptions": { + "sourceType": "PropertyValueBool", + "propertyName": "pEnableUnequipHotkey" + } + }, + { + "id": "iUnequipHotkey:Controls", + "text": "$SoulsyHUD_Controls_UnequipHotkey_Text", + "help": "$SoulsyHUD_Controls_UnequipHotkey_Help", + "groupCondition": 4, + "groupBehavior": "skip", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "type": "hiddenToggle", + "text": "hidden toggle for long-press-to-match setting", + "groupControl": 5, + "valueOptions": { + "sourceType": "PropertyValueBool", + "propertyName": "pEnableLongPressMatchOption" + } + }, + { + "id": "bLongPressMatches:Controls", + "text": "$SoulsyHUD_LongPressToMatch_Text", + "help": "$SoulsyHUD_LongPressToMatch_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingBool" + }, + "groupCondition": 5, + "groupBehavior": "skip" + }, + { + "text": "$SoulsyHUD_Controls_Consumables_Header", + "type": "header", + "position": 1 + }, + { + "id": "bGroupPotions:Options", + "text": "$SoulsyHUD_Controls_GroupPotions_Text", + "help": "$SoulsyHUD_Controls_GroupPotions_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uUtilityCycleKey:Controls", + "text": "$SoulsyHUD_Controls_UtilityCycleKey_Text", + "help": "$SoulsyHUD_Controls_UtilityCycleKey_Help", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uHowToActivate:Controls", + "text": "$SoulsyHUD_Activate_When_Text", + "help": "$SoulsyHUD_Activate_When_Help", + "type": "enum", + "valueOptions": { + "options": [ + "$SoulsyHUD_Activate_Enum_Hotkey", + "$SoulsyHUD_Activate_Enum_LongPress", + "$SoulsyHUD_Activate_Enum_Mod" + ], + "sourceType": "ModSettingInt", + "defaultValue": 0 + } + }, + { + "type": "hiddenToggle", + "text": "hidden toggle for utility activate modifier", + "groupControl": 6, + "valueOptions": { + "sourceType": "PropertyValueBool", + "propertyName": "pEnableActivateModifier" + } + }, + { + "id": "iUtilityActivateModifier:Controls", + "text": "$SoulsyHUD_Controls_ActivateModifier_Text", + "help": "$SoulsyHUD_Controls_ActivateModifier_Help", + "groupCondition": 6, + "groupBehavior": "skip", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "type": "hiddenToggle", + "text": "hidden toggle for utility hotkey", + "groupControl": 7, + "valueOptions": { + "sourceType": "PropertyValueBool", + "propertyName": "pEnableActivateHotkey" + } + }, + { + "id": "uUtilityActivateKey:Controls", + "text": "$SoulsyHUD_Controls_ActivateKey_Text", + "help": "$SoulsyHUD_Controls_ActivateKey_Help", + "groupCondition": 7, + "groupBehavior": "skip", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "bCycleAmmo:Options", + "text": "$SoulsyHUD_Options_CycleAmmo_Text", + "help": "$SoulsyHUD_Options_CycleAmmo_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "text": "$SoulsyHUD_Gameplay_FeelHeader", + "type": "header" + }, + { + "id": "uEquipDelay:Options", + "text": "$SoulsyHUD_Options_EquipDelay_Text", + "help": "$SoulsyHUD_Options_EquipDelay_Help", + "type": "slider", + "valueOptions": { + "min": 0, + "max": 2500, + "step": 50, + "sourceType": "ModSettingInt" + } + }, + { + "id": "uLongPressMillis:Options", + "text": "$SoulsyHUD_Options_LongPress_Text", + "help": "$SoulsyHUD_Options_LongPress_Help", + "type": "slider", + "valueOptions": { + "min": 750, + "max": 2500, + "step": 50, + "sourceType": "ModSettingInt" + } + }, + { + "id": "bCyclingSlowsTime:Options", + "text": "$SoulsyHUD_Options_SlowTime_Text", + "help": "$SoulsyHUD_Options_SlowTime_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uSlowTimeFactor:Options", + "text": "$SoulsyHUD_Options_HowSlow_Text", + "help": "$SoulsyHUD_Options_HowSlow_Help", + "type": "slider", + "valueOptions": { + "min": 10, + "max": 90, + "step": 1, + "sourceType": "ModSettingInt" + } + } + ] + }, + { + "pageDisplayName": "$SoulsyHUD_Display_Page", + "cursorFillMode": "topToBottom", + "content": [ + { + "text": "$SoulsyHUD_Display_Header", + "type": "header" + }, + { + "id": "uAnchorLocation:Options", + "text": "$SoulsyHUD_Options_AnchorLoc_Text", + "type": "enum", + "help": "$SoulsyHUD_Options_AnchorLoc_Help", + "valueOptions": { + "options": [ + "$SoulsyHUD_AnchorLoc_None", + "$SoulsyHUD_AnchorLoc_TopLeft", + "$SoulsyHUD_AnchorLoc_TopRight", + "$SoulsyHUD_AnchorLoc_BottomLeft", + "$SoulsyHUD_AnchorLoc_BottomRight", + "$SoulsyHUD_AnchorLoc_Center", + "$SoulsyHUD_AnchorLoc_CenterTop", + "$SoulsyHUD_AnchorLoc_CenterBottom", + "$SoulsyHUD_AnchorLoc_LeftCenter", + "$SoulsyHUD_AnchorLoc_RightCenter" + ], + "sourceType": "ModSettingInt", + "defaultValue": 0 + } + }, + { + "id": "bAutoFade:Options", + "text": "$SoulsyHUD_Options_Fade_Text", + "help": "$SoulsyHUD_Options_Fade_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uFadeTime:Options", + "text": "$SoulsyHUD_Options_FadeTime_Text", + "help": "$SoulsyHUD_Options_FadeTime_Help", + "type": "slider", + "valueOptions": { + "min": 0, + "max": 5000, + "step": 100, + "sourceType": "ModSettingInt" + } + }, + { + "id": "fMaxAlpha:Options", + "text": "$SoulsyHUD_Options_MaxAlpha_Text", + "help": "$SoulsyHUD_Options_MaxAlpha_Help", + "type": "slider", + "valueOptions": { + "min": 0.2, + "max": 1.0, + "step": 0.01, + "sourceType": "ModSettingFloat", + "formatString": "{2}" + } + }, + { + "id": "fMinAlpha:Options", + "text": "$SoulsyHUD_Options_MinAlpha_Text", + "help": "$SoulsyHUD_Options_MinAlpha_Help", + "type": "slider", + "valueOptions": { + "min": 0.0, + "max": 1.0, + "step": 0.01, + "sourceType": "ModSettingFloat", + "formatString": "{2}" + } + }, + { + "id": "uShowHideKey:Controls", + "text": "$SoulsyHUD_Controls_ShowHideKey_Text", + "help": "$SoulsyHUD_Controls_ShowHideKey_Help", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "bColorizeIcons:Options", + "text": "$SoulsyHUD_Options_Colorize_Text", + "help": "$SoulsyHUD_Options_Colorize_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "uControllerKind:Options", + "text": "$SoulsyHUD_Options_Controller_Text", + "type": "enum", + "help": "$SoulsyHUD_Options_Controller_Help", + "valueOptions": { + "options": ["$SoulsyHUD_Controls_PS", "$SoulsyHUD_Controls_Xbox"], + "sourceType": "ModSettingInt", + "defaultValue": 0 + } + }, + { + "id": "uRefreshKey:Controls", + "text": "$SoulsyHUD_Controls_RefreshKey_Text", + "help": "$SoulsyHUD_Controls_RefreshKey_Help", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "sSKSEIdentifier:Options", + "text": "$SoulsyHUD_ModIdString_Text", + "help": "$SoulsyHUD_ModIdString_Help", + "type": "input", + "valueOptions": { + "sourceType": "ModSettingString" + } + }, + { + "id": "bDebugMode:Options", + "text": "$SoulsyHUD_Options_Debug_Text", + "help": "$SoulsyHUD_Options_Debug_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "text": "$SoulsyHUD_Maintenance_Header", + "type": "header", + "position": 1 + }, + { + "text": "$SoulsyHUD_Clear_Text", + "help": "$SoulsyHUD_Clear_Help", + "type": "text", + "valueOptions": { + "value": "clear" + }, + "action": { + "type": "CallFunction", + "function": "ClearCyclesPapyrus" + } + }, + { + "text": "$SoulsyHUD_CycleContents_Header", + "type": "header" + }, + { + "id": "pCycleToShow", + "text": "$SoulsyHUD_ChooseCycle_Text", + "help": "$SoulsyHUD_ChooseCycle_Help", + "type": "enum", + "valueOptions": { + "options": [ + "$SoulsyHUD_CycleEnum_Powers", + "$SoulsyHUD_CycleEnum_Utilities", + "$SoulsyHUD_CycleEnum_LeftHand", + "$SoulsyHUD_CycleEnum_RightHand" + ], + "sourceType": "PropertyValueInt", + "propertyName": "pCycleToShow", + "defaultValue": 0 + }, + "action": { + "type": "CallFunction", + "function": "ShowCycleEntries", + "params": ["{value}"] + } + }, + { + "id": "cycleDisplay", + "text": "$SoulsyHUD_ChosenCycle_Text", + "help": "$SoulsyHUD_ChosenCycle_Help", + "type": "menu", + "valueOptions": { + "options": [" ", " "], + "sourceType": "PropertyValueInt", + "propertyName": "pCycleItemShown", + "defaultValue": 0 + } + } + ] + }, + { + "pageDisplayName": "$SoulsyHUD_EquipSets_Page", + "cursorFillMode": "topToBottom", + "content": [ + { + "text": "$SoulsyHUD_EquipSets_Header", + "type": "header" + }, + { + "id": "iEquipSetCycleKey:Controls", + "text": "$SoulsyHUD_Controls_EquipSetCycleKey_Text", + "help": "$SoulsyHUD_Controls_EquipSetCycleKey_Help", + "type": "keymap", + "valueOptions": { + "sourceType": "ModSettingInt" + } + }, + { + "id": "bEquipSetsUnequip:Options", + "text": "$SoulsyHUD_EquipSetsUnequip_Text", + "help": "$SoulsyHUD_EquipSetsUnequip_Help", + "type": "toggle", + "valueOptions": { + "sourceType": "ModSettingBool" + } + }, + { + "id": "sLastUsedSetName:Equipsets", + "text": "$SoulsyHUD_EquipSetName_Text", + "help": "$SoulsyHUD_EquipSetName_Help", + "type": "input", + "valueOptions": { + "sourceType": "ModSettingString" + } + }, + { + "text": "$SoulsyHUD_NewEquipSet_Text", + "help": "$SoulsyHUD_NewEquipSet_Help", + "type": "text", + "action": { + "type": "CallFunction", + "function": "CreateEquipSet" + } + }, + { + "text": "$SoulsyHUD_UpdateASet_Header", + "type": "header" + }, + { + "id": "pEquipSetMenuSelection", + "text": "$SoulsyHUD_EquipSetList_Text", + "help": "$SoulsyHUD_EquipSetList_Help", + "type": "menu", + "valueOptions": { + "options": ["$SoulsyHUD_NoEquipSets", " "], + "sourceType": "PropertyValueString", + "propertyName": "pEquipSetMenuSelection" + } + }, + { + "id": "sLastEditedSetName:Equipsets", + "text": "$SoulsyHUD_SelectedEquipSetName_Text", + "help": "$SoulsyHUD_SelectedEquipSetName_Help", + "type": "input" + }, + { + "id": "renameEquipSet", + "text": "$SoulsyHUD_RenameSet_Text", + "help": "$SoulsyHUD_RenameSet_Help", + "type": "text", + "action": { + "type": "CallFunction", + "function": "RenameEquipSet" + } + }, + { + "id": "updateEquipSet", + "text": "$SoulsyHUD_UpdateSet_Text", + "help": "$SoulsyHUD_UpdateSet_Help", + "type": "text", + "action": { + "type": "CallFunction", + "function": "UpdateEquipSet" + } + }, + { + "id": "removeEquipSet", + "text": "$SoulsyHUD_RemoveSet_Text", + "help": "$SoulsyHUD_RemoveSet_Help", + "type": "text", + "action": { + "type": "CallFunction", + "function": "RemoveEquipSet" + } + }, + { + "text": "$SoulsyHUD_SelectedSet_Header", + "type": "header", + "position": 1 + }, + { + "id": "pIconSourceSelection", + "text": "$SoulsyHUD_EquipSetItemList_Text", + "help": "$SoulsyHUD_EquipSetItemList_Help", + "type": "menu", + "valueOptions": { + "options": ["$SoulsyHUD_NoItems", " "], + "sourceType": "PropertyValueString", + "propertyName": "pIconSourceSelection" + } + }, + { + "id": "useSelectedItemAsIcon", + "text": "$SoulsyHUD_UseItemAsIcon_Text", + "help": "$SoulsyHUD_UseItemAsIcon_Help", + "type": "text", + "action": { + "type": "CallFunction", + "function": "UseSelectionAsIcon" + } + } + ] } - ] - } - ] + ] } diff --git a/installer/core/mcm/config/SoulsyHUD/settings.ini b/installer/core/mcm/config/SoulsyHUD/settings.ini index 8397784b..37d80d47 100644 --- a/installer/core/mcm/config/SoulsyHUD/settings.ini +++ b/installer/core/mcm/config/SoulsyHUD/settings.ini @@ -24,6 +24,7 @@ uLongPressMillis = 1250 bAutoFade = 1 uFadeTime = 2000 fMaxAlpha = 1.0 +fMinAlpha = 0.0 uLongPressTime = 1000 uControllerKind = 0 bCyclingSlowsTime = 0 diff --git a/src/controller/control.rs b/src/controller/control.rs index a467bc0e..6b4b98c1 100644 --- a/src/controller/control.rs +++ b/src/controller/control.rs @@ -166,6 +166,7 @@ impl Controller { } setMaxAlpha(settings.max_alpha()); + setMinAlpha(settings.min_alpha()); if !settings.autofade() { if self.cycles.hud_visible() { diff --git a/src/controller/settings.rs b/src/controller/settings.rs index 469acf48..c4a06b45 100644 --- a/src/controller/settings.rs +++ b/src/controller/settings.rs @@ -113,6 +113,8 @@ pub struct UserSettings { fade_time: u32, /// Max alpha: the most transparent the HUD goes. max_alpha: f32, + /// Min alpha: the least transparent the HUD gets. + min_alpha: f32, /// Whether to slow down time when cycling cycling_slows_time: bool, @@ -161,6 +163,7 @@ impl Default for UserSettings { long_press_ms: 1250, // in milliseconds autofade: true, max_alpha: 1.0, + min_alpha: 0.0, fade_time: 2000, // in milliseconds controller_kind: 0, // PS5 cycling_slows_time: false, @@ -261,6 +264,7 @@ impl UserSettings { self.autofade = read_from_ini(self.autofade, "bAutoFade", options); self.fade_time = u32::clamp(read_from_ini(self.fade_time, "uFadeTime", options), 0, 2500); self.max_alpha = read_from_ini(self.max_alpha, "fMaxAlpha", options); + self.min_alpha = read_from_ini(self.min_alpha, "fMinAlpha", options); self.controller_kind = u32::clamp( read_from_ini(self.controller_kind, "uControllerKind", options), @@ -436,6 +440,9 @@ impl UserSettings { pub fn max_alpha(&self) -> f32 { self.max_alpha } + pub fn min_alpha(&self) -> f32 { + self.min_alpha + } pub fn controller_kind(&self) -> u32 { u32::clamp(self.controller_kind, 0, 2) } @@ -663,6 +670,8 @@ impl std::fmt::Display for UserSettings { long_press_ms: {} ms autofade: {} fade_time: {} ms + max alpha: {} + min alpha: {} controller_kind: {} cycling_slows_time: {} slow_time_factor: {} % @@ -696,6 +705,8 @@ impl std::fmt::Display for UserSettings { self.long_press_ms, self.autofade, self.fade_time, + self.max_alpha, + self.min_alpha, self.controller_kind, self.cycling_slows_time, self.slow_time_factor, diff --git a/src/lib.rs b/src/lib.rs index 15b8e808..fbc37c94 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -559,6 +559,8 @@ pub mod plugin { fn startAlphaTransition(fade_in: bool, alpha: f32); /// Set the max alpha value the HUD is allowed to reach. From user settings. fn setMaxAlpha(max: f32); + /// Set the min alpha value the HUD is allowed to reach. From user settings. + fn setMinAlpha(max: f32); } // A verbose shim between Rust and the PlayerCharacter type. diff --git a/src/renderer/ui_renderer.cpp b/src/renderer/ui_renderer.cpp index f915c3f0..af74b1f6 100644 --- a/src/renderer/ui_renderer.cpp +++ b/src/renderer/ui_renderer.cpp @@ -38,6 +38,7 @@ namespace ui auto gHudAlpha = 0.0f; // this is the current alpha auto gGoalAlpha = 1.0f; // our goal if we're fading auto gMaxAlpha = 1.0f; // the least transparent we allow ourselves to be (user setting) + auto gMinAlpha = 0.0f; // the most transparent auto doFadeIn = true; auto gFullFadeDuration = 3.0f; // seconds auto gFadeDurRemaining = 2.0f; // seconds @@ -834,7 +835,7 @@ namespace ui void showBriefly() { - if (gDoingBriefPeek || gHudAlpha >= gMaxAlpha || (doFadeIn == true && gHudAlpha > 0.0f)) { return; } + if (gDoingBriefPeek || gHudAlpha >= gMaxAlpha || (doFadeIn == true && gHudAlpha > gMinAlpha)) { return; } gDoingBriefPeek = true; startAlphaTransition(true, gMaxAlpha); @@ -842,15 +843,21 @@ namespace ui void setMaxAlpha(float max) { - gMaxAlpha = std::clamp(std::abs(max), 0.2f, 1.0f); + gMaxAlpha = std::clamp(std::abs(max), gMinAlpha, 1.0f); if (gHudAlpha > gMaxAlpha) { gHudAlpha = gMaxAlpha; } } + void setMinAlpha(float min) + { + gMinAlpha = std::clamp(std::abs(min), 0.0f, gMaxAlpha); + if (gHudAlpha < gMinAlpha) { gHudAlpha = gMinAlpha; } + } + void startAlphaTransition(const bool becomeVisible, const float goal) { - gGoalAlpha = std::clamp(goal, 0.0f, gMaxAlpha); + gGoalAlpha = std::clamp(goal, gMinAlpha, gMaxAlpha); if (becomeVisible && gHudAlpha >= gMaxAlpha) { return; } - if (!becomeVisible && gHudAlpha == 0.0f) { return; } + if (!becomeVisible && gHudAlpha <= gMinAlpha) { return; } rlog::trace("startAlphaTransition() called with in={} and goal={}; gHudAlpha={};"sv, becomeVisible, gGoalAlpha, @@ -912,7 +919,7 @@ namespace ui gDoingBriefPeek = false; } // The auto-fade case here. - if ((gHudAlpha > 0.0f && !gIsFading) || (gIsFading && doFadeIn)) { startAlphaTransition(false, 0.0f); } + if ((gHudAlpha > gMinAlpha && !gIsFading) || (gIsFading && doFadeIn)) { startAlphaTransition(false, 0.0f); } } else if (helpers::hudShouldAutoFadeIn()) { @@ -939,8 +946,6 @@ namespace ui void advanceTransition(float timeDelta) { - // This fading code is triggered by the toggle hud shortcut even if autofade - // is off. This is maybe the only place where bug #44 might be caused. if (doFadeIn && gIsFading) { if (gHudAlpha >= gMaxAlpha) @@ -958,9 +963,9 @@ namespace ui if (delayBeforeFadeout > 0.0f) { delayBeforeFadeout -= timeDelta; } else { - if (gHudAlpha <= 0.0f) + if (gHudAlpha <= gMinAlpha) { - gHudAlpha = 0.0f; + gHudAlpha = gMinAlpha; gFadeDurRemaining = 0.0f; gIsFading = false; } diff --git a/src/renderer/ui_renderer.h b/src/renderer/ui_renderer.h index 4828ef14..82bb98a7 100644 --- a/src/renderer/ui_renderer.h +++ b/src/renderer/ui_renderer.h @@ -25,6 +25,7 @@ namespace ui void makeFadeDecision(); void showBriefly(); void setMaxAlpha(float max); + void setMinAlpha(float min); void startTimer(Action which, uint32_t duration); void stopTimer(Action which);