diff --git a/.env.example b/.env.example index 1dff6bcbe..462d25559 100644 --- a/.env.example +++ b/.env.example @@ -1,26 +1,26 @@ # Path to MO2 mods directory. # Used to set default values for INSTALL_PATH, PAPYRUS_INCLUDE -XSE_TESV_MODS_PATH= +XSE_TES5_MODS_PATH= # Path to SkyrimSE game directory. # Used to set default values for PAPYRUS_PATH, PAPYRUS_GAMESOURCE -XSE_TESV_GAME_PATH= +XSE_TES5_GAME_PATH= # Path to Spriggit.CLI.exe SPRIGGIT_PATH= # Path to PapyrusCompiler.exe -# Default: "%XSE_TESV_GAME_PATH%\Papyrus Compiler" +# Default: "%XSE_TES5_GAME_PATH%\Papyrus Compiler" PAPYRUS_PATH= # Installation Path (if not overridden on cmd line) -# Deault: "%XSE_TESV_MODS_PATH%\SL-Dev" +# Deault: "%XSE_TES5_MODS_PATH%\SL-Dev" INSTALL_PATH= # Enable automatic install after build (0|1) # Default: 0 AUTO_INSTALL= # Path to directory conatining papyrus dependencies -# Default: "%XSE_TESV_MODS_PATH%" +# Default: "%XSE_TES5_MODS_PATH%" PAPYRUS_INCLUDE= # Path to directory containing game's `Source\Scripts` folder -# Default: "%XSE_TESV_GAME_PATH%\Data" +# Default: "%XSE_TES5_GAME_PATH%\Data" PAPYRUS_GAMESOURCE= \ No newline at end of file diff --git a/dist/Interface/Translations/SexLab_CHINESE.txt b/dist/Interface/Translations/SexLab_CHINESE.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_CHINESE.txt +++ b/dist/Interface/Translations/SexLab_CHINESE.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_CZECH.txt b/dist/Interface/Translations/SexLab_CZECH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_CZECH.txt +++ b/dist/Interface/Translations/SexLab_CZECH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_DANISH.txt b/dist/Interface/Translations/SexLab_DANISH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_DANISH.txt +++ b/dist/Interface/Translations/SexLab_DANISH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_ENGLISH.txt b/dist/Interface/Translations/SexLab_ENGLISH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_ENGLISH.txt +++ b/dist/Interface/Translations/SexLab_ENGLISH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_FINNISH.txt b/dist/Interface/Translations/SexLab_FINNISH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_FINNISH.txt +++ b/dist/Interface/Translations/SexLab_FINNISH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_FRENCH.txt b/dist/Interface/Translations/SexLab_FRENCH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_FRENCH.txt +++ b/dist/Interface/Translations/SexLab_FRENCH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_GERMAN.txt b/dist/Interface/Translations/SexLab_GERMAN.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_GERMAN.txt +++ b/dist/Interface/Translations/SexLab_GERMAN.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_GREEK.txt b/dist/Interface/Translations/SexLab_GREEK.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_GREEK.txt +++ b/dist/Interface/Translations/SexLab_GREEK.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_ITALIAN.txt b/dist/Interface/Translations/SexLab_ITALIAN.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_ITALIAN.txt +++ b/dist/Interface/Translations/SexLab_ITALIAN.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_JAPANESE.txt b/dist/Interface/Translations/SexLab_JAPANESE.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_JAPANESE.txt +++ b/dist/Interface/Translations/SexLab_JAPANESE.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_NORWEGIAN.txt b/dist/Interface/Translations/SexLab_NORWEGIAN.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_NORWEGIAN.txt +++ b/dist/Interface/Translations/SexLab_NORWEGIAN.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_POLISH.txt b/dist/Interface/Translations/SexLab_POLISH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_POLISH.txt +++ b/dist/Interface/Translations/SexLab_POLISH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_RUSSIAN.txt b/dist/Interface/Translations/SexLab_RUSSIAN.txt index 1437ec686..01f6f6ff4 100644 --- a/dist/Interface/Translations/SexLab_RUSSIAN.txt +++ b/dist/Interface/Translations/SexLab_RUSSIAN.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Показать сцены на карте $SSL_bShowInMapHighlight Если включено и Игрок не являющейся частью анимации, но анимация рядом с Игроком, сцены SexLab будут показаны на карте как квест дополнительного типа $SSL_bSetAnimSpeedByEnjoyment Изменять скорость анимации $SSL_bSetAnimSpeedByEnjoymentHighlight Изменять скорость анимации в зависимости от степени возбуждения. На данный момент 0.8~1.2 +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Использование мебели: NPC $SSL_FurnitureNPCHighlight Как NPC используют мебель. Если быть более точным, будут ли NPC использовать мебель, если она доступна и при каких условиях. $SSL_AskNotSub Спрашивать (если игрок не покорный) @@ -310,6 +316,10 @@ $SSL_WolfVoice01 [SL] Волк Обычный # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Горячие клавиши +$SSL_bUseSceneMenu Use Scene Menu +# TODO: $SSL_bUseSceneMenuHighlight +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Глобальные горячие клавиши @@ -317,8 +327,8 @@ $SSL_iTargetActor Выбрать персонажа $SSL_iTargetActorHighlight Направьте перекрестие прицела на персонажа и нажмите эту клавишу, после чего дождитесь сообщения о том, что персонаж выбран. После этого вам станут доступны новые возможности в меню SexLab - к примеру, вы сможете просмотреть сведения о статистике выбранного персонажа, изменить тип его голоса и т.д. $SSL_iToggleFreeCamera Режим "свободная камера" $SSL_iToggleFreeCameraHighlight Включает/отключает режим свободной камеры, что равносильно использованию консольной команды "TFC". Эта клавиша может быть использована в любых сценах, вне зависимости от их типа. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +# TODO: $SSL_iToggleThreadControl +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Управление сценой @@ -328,12 +338,18 @@ $SSL_iKeyLeft Уменьшить скорость / Влево $SSL_iKeyRight Увеличить скорость / Вправо $SSL_iKeyAdvance Продолжить сцену / Выбрать $SSL_iKeyEnd Закончить сцену -$SSL_iKeyExtra1 Открыть меню / Переключить цель для смещения -$SSL_iKeyExtra2 Экстра / Повернуть сцену +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Модификатор $SSL_iKeyReset Инвертирование действия + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Таймеры/Раздевание @@ -444,9 +460,7 @@ $SSL_bGameEnabled Enable Enjoyment Game $SSL_bGameEnabledHighlight Toggles the enjoyment minigame inspired from SLSO's implementation. # ------ General Configs -# TODO: $SSL_bFallbackToTagsForDetection $SSL_bFallbackToTagsForDetection Allow Fallback to Position Tags -# TODO: $SSL_bFallbackToTagsForDetectionHighlight $SSL_bFallbackToTagsForDetectionHighlight Toggles fallback to position tags for interactions detection when the internal physics-based real-time collision type guessing is not available. $SSL_bNoStaminaEndsScene No Stamina Ends Scene $SSL_bNoStaminaEndsSceneHighlight Ends the scene automatically when the actor's stamina is depleted. diff --git a/dist/Interface/Translations/SexLab_SPANISH.txt b/dist/Interface/Translations/SexLab_SPANISH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_SPANISH.txt +++ b/dist/Interface/Translations/SexLab_SPANISH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_SWEDISH.txt b/dist/Interface/Translations/SexLab_SWEDISH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_SWEDISH.txt +++ b/dist/Interface/Translations/SexLab_SWEDISH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/SexLab_TURKISH.txt b/dist/Interface/Translations/SexLab_TURKISH.txt index fbe4359f8..c340f7746 100644 --- a/dist/Interface/Translations/SexLab_TURKISH.txt +++ b/dist/Interface/Translations/SexLab_TURKISH.txt @@ -239,6 +239,12 @@ $SSL_bShowInMap Show Scenes on Map $SSL_bShowInMapHighlight Get a miscellaneous quest marker for each scene playing nearby (except the ones you are participating in yourself). $SSL_bSetAnimSpeedByEnjoyment Enjoyment affected Animation Speed $SSL_bSetAnimSpeedByEnjoymentHighlight Base animation speed changes depending on actor enjoyment (+/-20%). +$SSL_AdjustStage Adjust Stage Only +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +$SSL_fAdjustStepSize Offset Step Size +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. +$SSL_bHideHUD Hide Game HUD +$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. $SSL_FurnitureNPC Furniture Use: NPC $SSL_FurnitureNPCHighlight Decide how NPC use Furniture. Specifically, decide if NPC use the furniture scenes over regular ones, when available. $SSL_AskNotSub Ask (Unless Submissive) @@ -310,15 +316,17 @@ $SSL_WolfVoice01 [SL] Wolf Default # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Player Hotkeys +$SSL_bUseSceneMenu Use Scene Menu +$SSL_bUseSceneMenuHighlight Toggles the use of the native in-scene menu and enjoyment bars.\nDisable this only if the scene menu causes crashes or you prefer legacy SL's hotkey approach. + # ------ Global SexLab Hotkeys $SSL_GlobalHotkeys Global SexLab Hotkeys $SSL_iTargetActor Target Actor For Edit $SSL_iTargetActorHighlight After pressing this hotkey, place your crosshairs in game over an actor until your receive a notification that the actor is targeted, afterwards the actor will be available for editing purposes in various menu pages. $SSL_iToggleFreeCamera Toggle Free Camera Mode -$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey it enabled at all times regardless of animation. -$SSL_bHideHUD Hide Game HUD -$SSL_bHideHUDHighlight Hides the elements from game's HUD, not the scene HUD. +$SSL_iToggleFreeCameraHighlight Toggles the camera mode into a free flying camera state, same as entering TFC into console, this hotkey is enabled at all times regardless of animation. +$SSL_iToggleThreadControl Toggle Thread Control # ------ Scene Manipulation $SSL_SceneManipulation Scene Manipulation @@ -328,12 +336,18 @@ $SSL_iKeyLeft Decrease Speed / Left $SSL_iKeyRight Increase Speed / Right $SSL_iKeyAdvance Advance Scene / Select $SSL_iKeyEnd End Scene / Close Menu / Back -$SSL_iKeyExtra1 Open Menu / Swap Menu Tab -$SSL_iKeyExtra2 Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action + +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +$SSL_iChangePositions Change Positions +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +$SSL_iOffsetAdjustModeHighlight Hotkey to switch between the 5 offset adjust modes when in scene.\nNone: Offset adjustments are disabled (default).\nPOS-XY: L/R keys adjust position's X, U/D adjust Y.\nPOS-RZ: L/R adjust pos's Rotation, U/D adjust Z.\nSCENE-XY: L/R adjust scene's X, U/D adjust Y (furniture scene only).\nSCENE-RZ: L/R adjust scene's Rotation, U/D adjust Z (furniture only). +$SSL_iToggleAdjustStage Toggle Adjust Stage +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Timers & Stripping diff --git a/dist/Interface/Translations/translate.py b/dist/Interface/Translations/translate.py index b34162efc..d6bb57d19 100644 --- a/dist/Interface/Translations/translate.py +++ b/dist/Interface/Translations/translate.py @@ -1,6 +1,6 @@ import shutil -from os import listdir -from os.path import isfile, join +from pathlib import Path +import sys languages = [ "CHINESE", @@ -24,15 +24,23 @@ "RUSSIAN", ] -path = "Interface\\Translations" -f_english = [f for f in listdir(path) if isfile(join(path, f)) and f.endswith("ENGLISH.txt")] +script_dir = Path(__file__).parent.resolve() +if script_dir.name == "Translations": + translations_dir = script_dir +else: + translations_dir = script_dir / "Interface" / "Translations" -if len(f_english) < 1: - print("Missing Translation_ENGLISH.txt in directory") - exit() +if not translations_dir.exists(): + print(f"Error: Could not find Translations directory at {translations_dir}") + sys.exit(1) -f_raw = f_english[0].replace("ENGLISH.txt", "") -en_path = join(path, f_english[0]) +f_english = list(translations_dir.glob("*ENGLISH.txt")) +if not f_english: + print(f"Missing ENGLISH.txt in {translations_dir}") + sys.exit(1) + +en_path = f_english[0] +f_raw = en_path.name.replace("ENGLISH.txt", "") def parse_file(file_path): with open(file_path, 'r', encoding='utf-16le') as file: @@ -58,7 +66,7 @@ def copy_new_keys(file_path): l_file.write(line) for l in languages: - new_path = join(path, f_raw + l + ".txt") + new_path = translations_dir / (f_raw + l + ".txt") print(f"Processing {new_path}") if l in translated_languages: print(f"Copying new keys to {l}") diff --git a/dist/SKSE/Plugins/SexLab.ini b/dist/SKSE/Plugins/SexLab.ini index b0808b89e..b22979815 100644 --- a/dist/SKSE/Plugins/SexLab.ini +++ b/dist/SKSE/Plugins/SexLab.ini @@ -4,7 +4,7 @@ fFurnitureScanRadius = 750.0 fMinScale = 0.88 bAllowDead = 0 fAdjustStepSizeIncrement = 0.1 -bAdjustNodes = 1 +bAdjustNodes = 0 fGhostModeAlpha = 0.6 fFurnitureSquare = 32.0 fFurnitureSquareHeight = 128.0 diff --git a/dist/Source/Scripts/SexLabUtil.psc b/dist/Source/Scripts/SexLabUtil.psc index 86f546420..f704d9926 100644 --- a/dist/Source/Scripts/SexLabUtil.psc +++ b/dist/Source/Scripts/SexLabUtil.psc @@ -112,6 +112,47 @@ String[] Function MergeSplitTags(String asTags, String asTagsSuppress, bool abRe EndIf EndFunction +string function ActorName(Actor ActorRef) global + return ActorRef.GetLeveledActorBase().GetName() +endFunction + +string[] function ActorNames(Actor[] ActorRefs) global + string[] ret = PapyrusUtil.StringArray(ActorRefs.Length) + int i = 0 + while (i < ActorRefs.Length) + ret[i] = ActorName(ActorRefs[i]) + i += 1 + endwhile + return ret +EndFunction + +float Function CalcPathingTargetDistance(int k) global + If (k==2||k==3||k==9||k==11||k==12||k==32||k==31||k==34||k==35||k==40||k==41||k==47) + return 300.0 + ElseIf (k==18||k==24||k==27||k==38||k==46) + return 400.0 + ElseIf (k==14||k==26||k==36) + return 800.0 + EndIf + return 128.0 +EndFunction + +Function ToggleFreeCamera(bool KeepEnabled = false) global + If (Game.GetCameraState() == 3) + If (!KeepEnabled) + MiscUtil.ToggleFreeCamera() + EndIf + return + Else + While (Game.GetCameraState() == 0) + Game.ForceThirdPerson() + Utility.Wait(0.2) + EndWhile + MiscUtil.SetFreeCameraSpeed(GetConfig().AutoSUCSM) + MiscUtil.ToggleFreeCamera() + EndIf +EndFunction + String Function GetTranslation(String asStr) global native ; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ; @@ -149,20 +190,6 @@ sslThreadController function QuickStart(actor a1, actor a2 = none, actor a3 = no return SexLab.QuickStart(a1, a2, a3, a4, a5, victim, hook, animationTags) endFunction -string function ActorName(Actor ActorRef) global - return ActorRef.GetLeveledActorBase().GetName() -endFunction - -string[] function ActorNames(Actor[] ActorRefs) global - string[] ret = PapyrusUtil.StringArray(ActorRefs.Length) - int i = 0 - while (i < ActorRefs.Length) - ret[i] = ActorName(ActorRefs[i]) - i += 1 - endwhile - return ret -EndFunction - int Function GetSex(Actor akActor) global return SexLabRegistry.GetSex(akActor, false) EndFunction diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index c8167866f..43d3e35e2 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -24,6 +24,10 @@ int Function GetSex() return _sex EndFunction +int Function GetRaceID() + return _raceID +EndFunction + bool Function GetIsDead() return _livestatus == LIVESTATUS_DEAD EndFunction @@ -68,11 +72,6 @@ Function ModEnjoymentMult(float afSet, bool bAdjust) EndIf EndFunction -; for compatibility with SLSO-based mods -int Function GetFullEnjoyment() - return _FullEnjoyment -EndFunction - ; ------------------------------------------------------- ; ; --- Interactions Info --- ; ; ------------------------------------------------------- ; @@ -100,10 +99,17 @@ bool Function IsOralComplex() || _CurrentInteractions[_Thread.aDeepthroat] || _CurrentInteractions[_Thread.pDeepthroat]) EndFunction -bool Function IsMouthBusy() - return (_CurrentInteractions[_Thread.aOral] || _CurrentInteractions[_Thread.aLickingShaft] \ - || _CurrentInteractions[_Thread.aDeepthroat] || _CurrentInteractions[_Thread.aSuckingToes] \ - || _CurrentInteractions[_Thread.pAnimObjFace]) +bool Function ShouldMouthOpen() + bool condNonCrotch = (_CurrentInteractions[_Thread.aSuckingToes] || _CurrentInteractions[_Thread.pAnimObjFace]) + bool condCrotch = (_CurrentInteractions[_Thread.aOral] || _CurrentInteractions[_Thread.aLickingShaft] || _CurrentInteractions[_Thread.aDeepthroat]) + If (!condNonCrotch && !condCrotch) + return false + ElseIf (condNonCrotch) + return true + EndIf + bool FemInNonGayScene = ((_sex==1 || _sex==4) && !_HomoTypes[2]) + bool NonFemInGayScene = ((_sex==0 || _sex==2 || _sex==3) && (_HomoTypes[0] || _HomoTypes[4])) + return (FemInNonGayScene || NonFemInGayScene) EndFunction bool Function IsAnalPenetrated() @@ -270,6 +276,7 @@ Actor Property ActorRef EndProperty int _sex +int _raceID bool _victim int _livestatus @@ -334,7 +341,7 @@ bool Property OpenMouth If (ForceOpenMouth) return true EndIf - return IsMouthBusy() + return ShouldMouthOpen() EndFunction Function Set(bool abSet) ForceOpenMouth = abSet @@ -365,12 +372,17 @@ float _LastOrgasm Auto State Empty bool Function SetActor(Actor ProspectRef) - If (ProspectRef == _PlayerRef) - Game.DisablePlayerControls(abMovement=false, abFighting=true, abCamSwitch=false, abLooking=false, \ - abSneaking=false, abMenu=false, abActivate=true, abJournalTabs=false, aiDisablePOVType=0) - EndIf ForceRefTo(ProspectRef) _ActorRef = ProspectRef + If (_ActorRef == _PlayerRef) + If (Game.GetCameraState() == 0) + Game.ForceThirdPerson() + EndIf + Game.DisablePlayerControls(abMovement=true, abFighting=true, abCamSwitch=true, abLooking=false, \ + abSneaking=true, abMenu=false, abActivate=true, abJournalTabs=false, aiDisablePOVType=0) + Else + _ActorRef.SetDontMove(true) + EndIf If (_ActorRef.IsDead()) _livestatus = LIVESTATUS_DEAD _killer = _ActorRef.GetKiller() @@ -379,8 +391,8 @@ Auto State Empty Else _livestatus = LIVESTATUS_ALIVE EndIf - _sex = SexLabRegistry.GetSex(ProspectRef, true) - + _sex = SexLabRegistry.GetSex(_ActorRef, true) + _raceID = SexLabRegistry.GetRaceID(_ActorRef) TrackedEvent(TRACK_ADDED) GoToState(STATE_SETUP) return true @@ -396,6 +408,7 @@ Auto State Empty _Thread.RequestStatisticUpdate(_ActorRef, _StartedAt) EndIf If (_ActorRef == _PlayerRef) + Game.ForceThirdPerson() Game.EnablePlayerControls() EndIf Parent.Clear() @@ -449,13 +462,17 @@ State Ready Utility.Wait(interval) EndWhile EndIf + If(_Config.AutoTFC) + SexLabUtil.ToggleFreeCamera(true) + EndIf Else _Config.CheckBardAudience(_ActorRef, true) If(akPathTo && DoPathToCenter) ObjectReference target = akPathTo as ObjectReference - float target_distance = 128.0 + float target_distance = SexLabUtil.CalcPathingTargetDistance(_raceID) float distance = _ActorRef.GetDistance(target) If(distance > target_distance && distance <= 6144.0) + _ActorRef.SetDontMove(false) float fallback_timer = 15.0 float prev_dist = distance + 1.0 _ActorRef.SetFactionRank(_AnimatingFaction, 2) @@ -475,20 +492,6 @@ State Ready _AnimVarIsNPC = _ActorRef.GetAnimationVariableInt("IsNPC") _AnimVarbHumanoidFootIKDisable = _ActorRef.GetAnimationVariableBool("bHumanoidFootIKDisable") GoToState(STATE_PAUSED) - ; Code below executed in STATE_PAUSED as it should be part of event, not ReadyActor() to avoid delays - ; By compulsion, it's executed in OnDoPrepare() here due to no OnStateBegin() event in that state - LockActor() - If (_sex <= 2) - If (DoUndress) - DoUndress = false - If (_sex == 0) - Debug.SendAnimationEvent(_ActorRef, "Arrok_Undress_G1") - Else - Debug.SendAnimationEvent(_ActorRef, "Arrok_Undress_G1") - EndIf - Utility.Wait(0.6) - EndIf - EndIf If (asStringArg != "skip") _Thread.PrepareDone() EndIf @@ -550,8 +553,36 @@ EndFunction /; State Paused - ; Only called once the first time the main thread enters animating state - Function ReadyActor(int aiStripData, int aiPositionGenders) + Function LockActor() + Debug.SendAnimationEvent(_ActorRef, "IdleFurnitureExit") + Debug.SendAnimationEvent(_ActorRef, "AnimObjectUnequip") + Debug.SendAnimationEvent(_ActorRef, "IdleStop") + LockActorImpl() + _ActorRef.SetAnimationVariableInt("IsNPC", 0) + _ActorRef.SetAnimationVariableBool("bHumanoidFootIKDisable", 1) + SendDefaultAnimEvent() + Log("Locked Actor: " + GetActorName()) + _ActorLocked = True + EndFunction + Function TryLockAndUnpause() + LockActor() + GoToState(STATE_PLAYING) + EndFunction + + bool Function InitiateUndressing() + If (_sex <= 2) + If (DoUndress) + If (_sex == 0) + Debug.SendAnimationEvent(_ActorRef, "SexLab_MaleUndress") + Else + Debug.SendAnimationEvent(_ActorRef, "SexLab_FemaleUndress") + EndIf + return true + EndIf + EndIf + return false + EndFunction + bool Function ReadyActor(int aiStripData, int aiPositionGenders) _stripData = aiStripData _useStrapon = _sex == 1 && Math.LogicalAnd(aiPositionGenders, 0x2) == 0 If (_sex <= 2) @@ -559,9 +590,9 @@ State Paused ResolveStrapon() _ActorRef.QueueNiNodeUpdate() EndIf - ;Utility.Wait(0.5) ; Wait for schlong to update Debug.SendAnimationEvent(_ActorRef, "SOSBend0") RegisterForModEvent("SSL_READY_Thread" + _Thread.tid, "OnStartPlaying") + return true EndFunction Event OnStartPlaying(string asEventName, string asStringArg, float afNumArg, form akSender) @@ -571,6 +602,10 @@ State Paused TrackedEvent(TRACK_START) _StartedAt = SexLabUtil.GetCurrentGameRealTime() _LastOrgasm = _StartedAt + If (_sex != 1 && _sex != 4) + Utility.Wait(0.5) ; extra async call to ensure erection + Debug.SendAnimationEvent(_ActorRef, "SOSBend0") + EndIf EndEvent Function SetStrapon(Form ToStrapon) @@ -579,28 +614,10 @@ State Paused Function ResolveStrapon(bool force = false) ResolveStraponImpl() EndFunction - - Function LockActor() - If (_ActorRef == _PlayerRef) - If (Game.GetCameraState() == 0) - Game.ForceThirdPerson() - EndIf - Game.DisablePlayerControls(abMovement=true, abFighting=true, abCamSwitch=true, abLooking=false, \ - abSneaking=true, abMenu=false, abActivate=true, abJournalTabs=false, aiDisablePOVType=0) - If(_Config.AutoTFC) - MiscUtil.SetFreeCameraState(true) - MiscUtil.SetFreeCameraSpeed(_Config.AutoSUCSM) - EndIf + Function RemoveStrapon() + If(_Strapon && !_HadStrapon) + _ActorRef.RemoveItem(_Strapon, 1, true) EndIf - Debug.SendAnimationEvent(_ActorRef, "IdleFurnitureExit") - Debug.SendAnimationEvent(_ActorRef, "AnimObjectUnequip") - Debug.SendAnimationEvent(_ActorRef, "IdleStop") - LockActorImpl() - _ActorRef.SetAnimationVariableInt("IsNPC", 0) - _ActorRef.SetAnimationVariableBool("bHumanoidFootIKDisable", 1) - SendDefaultAnimEvent() - Log("Locked Actor: " + GetActorName()) - _ActorLocked = True EndFunction Function UnlockActor() @@ -608,28 +625,15 @@ State Paused _ActorRef.SetAnimationVariableBool("bHumanoidFootIKDisable", _AnimVarbHumanoidFootIKDisable) If (_ActorRef == _PlayerRef) MiscUtil.SetFreeCameraState(false) - Game.EnablePlayerControls(abMovement=true, abFighting=false, abCamSwitch=true, abLooking=true, \ - abSneaking=true, abMenu=true, abActivate=false, abJournalTabs=true, aiDisablePOVType=0) EndIf UnlockActorImpl() Log("Unlocked Actor: " + GetActorName()) _ActorLocked = False EndFunction - - Function TryLockAndUnpause() - LockActor() - GoToState(STATE_PLAYING) - EndFunction Function TryPauseAndUnlock() UnlockActor() EndFunction - Function RemoveStrapon() - If(_Strapon && !_HadStrapon) - _ActorRef.RemoveItem(_Strapon, 1, true) - EndIf - EndFunction - Function Clear() If (_sex <= 2) Redress() @@ -644,7 +648,6 @@ State Paused _Thread.SetAnimationPlaybackSpeed(1.0) UnregisterForModEvent("SSL_ORGASM_Thread" + _Thread.tid) StoreExcitementState("Backup") - UnregisterEnjGameKeys() sslBaseExpression.CloseMouth(_ActorRef) _ActorRef.ClearExpressionOverride() _ActorRef.ResetExpressionOverrides() @@ -660,8 +663,13 @@ State Paused EndFunction EndState -Function ReadyActor(int aiStripData, int aiPositionGenders) +bool Function InitiateUndressing() + Error("Cannot undress actors outside of idle state", "InitiateUndressing()") + return false +EndFunction +bool Function ReadyActor(int aiStripData, int aiPositionGenders) Error("Cannot ready outside of idle state", "ReadyActor()") + return false EndFunction Event OnStartPlaying(string asEventName, string asStringArg, float afNumArg, form akSender) Error("Playing request outside of idle state", "OnStartPlaying()") @@ -706,16 +714,16 @@ float Property UPDATE_INTERVAL = 0.250 AutoReadOnly Hidden float _LoopDelay float _LoopLovenseDelay -float _LoopEnjoymentDelay - bool _LovenseGenital bool _LovenseAnal bool[] _CurrentInteractions +bool[] _HomoTypes State Animating Event OnBeginState() RegisterForModEvent("SSL_ORGASM_Thread" + _Thread.tid, "OnOrgasm") + _HomoTypes = _Thread.CheckActiveHomoTypes() UpdateBaseEnjoymentCalculations() _LoopLovenseDelay = 0 _LovenseGenital = false @@ -747,10 +755,7 @@ State Animating return EndIf _CurrentInteractions = _Thread.ListDetectedInteractionsInternal(_ActorRef) - If (_LoopEnjoymentDelay >= _EnjoymentDelay) - _LoopEnjoymentDelay = 0 - UpdateEffectiveEnjoymentCalculations() - EndIf + UpdateEffectiveEnjoymentCalculations() int strength = CalcReaction() If (_LoopDelay >= _VoiceDelay && !IsSilent) _LoopDelay = 0.0 @@ -760,41 +765,10 @@ State Animating EndIf RefreshExpressionEx(strength) If (_LoopLovenseDelay <= 0) - If (_ActorRef == _PlayerRef && sslLovense.IsLovenseInstalled()) - int lovenseStrength = sslSystemConfig.GetSettingInt("iLovenseStrength") - bool LovenseGenital = IsGenitalInteraction() - bool LovenseAnal = IsAnalPenetrated() - If (!LovenseGenital && !LovenseAnal && (_LovenseGenital || _LovenseAnal)) - sslLovense.StopAllActions() - Else - If (LovenseGenital) - If (!_LovenseGenital) - sslLovense.StartGenitalAction(lovenseStrength) - EndIf - ElseIf (_LovenseGenital) - sslLovense.StopGenitalAction(!LovenseAnal) - EndIf - If (LovenseAnal) - If (!_LovenseAnal) - sslLovense.StartAnalAction(lovenseStrength) - EndIf - ElseIf (_LovenseAnal) - sslLovense.StopAnalAction(!LovenseGenital) - EndIf - EndIf - _LovenseGenital = LovenseGenital - _LovenseAnal = LovenseAnal - EndIf + RefreshLovenseActions() Else _LoopLovenseDelay -= UPDATE_INTERVAL EndIf - If ((_FullEnjoyment >= 100) && (_Config.SeparateOrgasms || _Config.InternalEnjoymentEnabled)) - DoOrgasm() - EndIf - bool NoStaminaEndScenario = (_Config.NoStaminaEndsScene && !_victim && _ActorRef.GetActorValuePercentage("Stamina") < 0.10) - If NoStaminaEndScenario - _Thread.EnjBasedSkipToLastStage(true) - EndIf ; Loop _LoopDelay += UPDATE_INTERVAL _LoopEnjoymentDelay += UPDATE_INTERVAL @@ -818,10 +792,39 @@ State Animating String expression = GetActorExpression() If (expression && _Config.UseExpressions && _livestatus == LIVESTATUS_ALIVE) sslBaseExpression.ApplyExpression(expression, _ActorRef, afStrength) - If (_Config.DebugMode) - Log("Expression? " + expression + "; Strength? " + afStrength + "; OpenMouth? " + OpenMouth, "sslBaseExpression.ApplyExpression()") + EndIf + If (_Config.DebugMode) + Log("Expression? " + expression + "; Strength? " + afStrength + "; OpenMouth? " + OpenMouth, "sslBaseExpression.ApplyExpression()") + EndIf + EndFunction + + Function RefreshLovenseActions() + If ((_ActorRef != _PlayerRef) || (!sslLovense.IsLovenseInstalled())) + return + EndIf + int lovenseStrength = sslSystemConfig.GetSettingInt("iLovenseStrength") + bool LovenseGenital = IsGenitalInteraction() + bool LovenseAnal = IsAnalPenetrated() + If (!LovenseGenital && !LovenseAnal && (_LovenseGenital || _LovenseAnal)) + sslLovense.StopAllActions() + Else + If (LovenseGenital) + If (!_LovenseGenital) + sslLovense.StartGenitalAction(lovenseStrength) + EndIf + ElseIf (_LovenseGenital) + sslLovense.StopGenitalAction(!LovenseAnal) + EndIf + If (LovenseAnal) + If (!_LovenseAnal) + sslLovense.StartAnalAction(lovenseStrength) + EndIf + ElseIf (_LovenseAnal) + sslLovense.StopAnalAction(!LovenseGenital) EndIf EndIf + _LovenseGenital = LovenseGenital + _LovenseAnal = LovenseAnal EndFunction Function PlayLouder(Sound SFX, ObjectReference FromRef, float Volume) @@ -886,21 +889,23 @@ State Animating _LastOrgasm = SexLabUtil.GetCurrentGameRealTime() _OrgasmCount += 1 ; Enjoyment - _FullEnjoyment = 0 - _arousalBase = 0 - SexlabStatistics.SetStatistic(_ActorRef, 17, _arousalBase) - _EnjFactor = _BaseFactor - If (_sex == 0 || _sex == 3) - If (_OrgasmCount > _Config.MaxNoPainOrgasmMale) - _FullEnjoyment -= (_OrgasmCount - _Config.MaxNoPainOrgasmMale) * 20 - EndIf - _Thread.EnjBasedSkipToLastStage(_Config.MaleOrgasmEndsScene) - Else - If (_OrgasmCount > _Config.MaxNoPainOrgasmFemale) - _FullEnjoyment -= (_OrgasmCount - _Config.MaxNoPainOrgasmFemale) * 20 + If (_bEnjEnabled) + _FullEnjoyment = 0 + _arousalBase = 0 + SexlabStatistics.SetStatistic(_ActorRef, 17, _arousalBase) + _EnjFactor = _BaseFactor + If (_sex == 0 || _sex == 3) + If (_OrgasmCount > _Config.MaxNoPainOrgasmMale) + _FullEnjoyment -= (_OrgasmCount - _Config.MaxNoPainOrgasmMale) * 20 + EndIf + _Thread.EnjBasedSkipToLastStage(_Config.MaleOrgasmEndsScene) + Else + If (_OrgasmCount > _Config.MaxNoPainOrgasmFemale) + _FullEnjoyment -= (_OrgasmCount - _Config.MaxNoPainOrgasmFemale) * 20 + EndIf EndIf + UpdateEffectiveEnjoymentCalculations() EndIf - UpdateEffectiveEnjoymentCalculations() RegisterForSingleUpdate(UPDATE_INTERVAL) _hasOrgasm = false Log(GetActorName() + ": Orgasms[" + _OrgasmCount + "] FullEnjoyment [" + _FullEnjoyment + "]") @@ -914,28 +919,6 @@ State Animating _ActorRef.QueueNiNodeUpdate() EndFunction - Event OnKeyDown(int KeyCode) - If (Utility.IsInMenuMode() || !_Config.GameEnabled) - return - EndIf - If (KeyCode == _Config.GamePauseKey) && Input.IsKeyPressed(_Config.GameUtilityKey) - _bGamePaused = !_bGamePaused - Log("[EnjGame] Game paused: " + _bGamePaused) - EndIf - If !_bGamePaused - If (KeyCode == _Config.GameRaiseEnjKey) - _Thread.ProcessEnjGameArg("Stamina", _ActorRef, _EnjGamePartner) - ElseIf (KeyCode == _Config.GameHoldbackKey) - _Thread.ProcessEnjGameArg("Magicka", _ActorRef, _EnjGamePartner) - ElseIf (KeyCode == _Config.GameSelectNextPos) - If _EnjGamePartner - int newIdx = _Thread.GameNextPartnerIdx(_ActorRef, _EnjGamePartner, Input.IsKeyPressed(_Config.GameUtilityKey)) - _EnjGamePartner = _Thread.GameChangePartner(_ActorRef, newIdx) - EndIf - EndIf - EndIf - EndEvent - Function TryPauseAndUnlock() GoToState(STATE_PAUSED) UnlockActor() @@ -968,6 +951,10 @@ endFunction Function RefreshExpressionEx(float afStrength) Error("Cannot refresh expression outside of playing state", "RefreshExpressionEx()") EndFunction +Function RefreshLovenseActions() + Error("Cannot process lovense actions outside of playing state", "RefreshLovenseActions()") +EndFunction + function DoOrgasm(bool Forced = false) Error("Cannot create an orgasm outside of playing state", "DoOrgasm()") endFunction @@ -1096,11 +1083,13 @@ Function Initialize() _victim = false _CanOrgasm = true _hasOrgasm = false + _DoUndress = true _AllowRedress = true ForceOpenMouth = false _ActorLocked = false ; Integers _sex = -1 + _raceID = -1 _livestatus = 0 _PathingFlag = 0 _OrgasmCount = 0 @@ -1110,6 +1099,7 @@ Function Initialize() _StartedAt = 0.0 ; Array _CurrentInteractions = Utility.CreateBoolArray(_Thread.SUPPORTED_INTER_COUNT, false) + _HomoTypes = Utility.CreateBoolArray(5, false) ResetEnjoymentVariables() EndFunction @@ -1170,6 +1160,7 @@ Function UpdateEnjoyment(float afEnjoyment) native ; Defaults float _EnjoymentDelay +float _LoopEnjoymentDelay ; Base bool _bEnjEnabled bool _CrtMaleHugePP @@ -1189,13 +1180,12 @@ float _PainInterDecayBackup float _PainInterCur int _FullEnjoyment ; Game -bool _bGamePaused -Actor _EnjGamePartner float _lastHoldBack Function ResetEnjoymentVariables() ; Defaults - _EnjoymentDelay = 1.5 + _EnjoymentDelay = 0.8 + _LoopEnjoymentDelay = 0.0 ; Base _bEnjEnabled = False _CrtMaleHugePP = False @@ -1215,22 +1205,19 @@ Function ResetEnjoymentVariables() _PainInterCur = 0 _FullEnjoyment = 0 ; Game - _bGamePaused = False - _EnjGamePartner = None _lastHoldBack = 0.0 EndFunction Function UpdateBaseEnjoymentCalculations() - If (!_Config.InternalEnjoymentEnabled || !_Config.SeparateOrgasms || GetIsDead()) + If (!_Config.InternalEnjoymentEnabled || !_Config.SeparateOrgasms || GetIsDead() || !_Thread.HasPlayer) return EndIf + ResetEnjoymentVariables() _bEnjEnabled = True StoreExcitementState("Restore") - RegisterEnjGameKeys() - _EnjGamePartner = _Thread.GameChangePartner(_ActorRef) _CrtMaleHugePP = _Thread.CrtMaleHugePP() _ConSubStatus = _Thread.IdentifyConsentSubStatus() - bool SameSexThread = _Thread.SameSexThread() + bool SameSexThread = (_HomoTypes[1] || _HomoTypes[2] || _HomoTypes[3]) bool WithLover = _Thread.ActorIsWithLover(_ActorRef) _arousalBase = PapyrusUtil.ClampFloat(SexlabStatistics.GetStatistic(_ActorRef, 17), 0.0, 100.0) _PainContext = CalcContextPain() @@ -1242,9 +1229,19 @@ Function UpdateBaseEnjoymentCalculations() EndFunction Function UpdateEffectiveEnjoymentCalculations() - If (!_bEnjEnabled) + If ((!_bEnjEnabled) || (_LoopEnjoymentDelay < _EnjoymentDelay)) return EndIf + If (_FullEnjoyment >= 100) + DoOrgasm() + return + EndIf + bool NoStaminaEndScenario = (_Config.NoStaminaEndsScene && !_victim && _ActorRef.GetActorValuePercentage("Stamina") < 0.10) + If (NoStaminaEndScenario) + _Thread.EnjBasedSkipToLastStage(true) + return + EndIf + _LoopEnjoymentDelay = 0.0 _InterFactor = _Thread.CalculateInteractionFactor(_ActorRef, _CurrentInteractions) _FullEnjoyment = CalcEffectiveEnjoyment() as int UpdateEnjoyment(_FullEnjoyment as float) @@ -1283,7 +1280,7 @@ float Function CalcContextEnjFactor(bool SameSexThread, bool WithLover) ;arousal EnjMult += (_arousalBase / 50) ;creature - if (SexLabRegistry.GetRaceID(_ActorRef) > 0) + if (_raceID > 0) return (EnjMult + 0.5) EndIf ;relation @@ -1389,21 +1386,25 @@ float Function EnjFindConSubStatusMult() EndFunction int function CalcReaction() - int ret = Math.Abs(_FullEnjoyment) as int - return PapyrusUtil.ClampInt(ret, 0, 100) + If (_bEnjEnabled) + int ret = Math.Abs(_FullEnjoyment) as int + return PapyrusUtil.ClampInt(ret, 0, 100) + EndIf + return 50 EndFunction bool Function WaitForOrgasm() - If _Config.InternalEnjoymentEnabled - bool EnjScenario = (_Config.HighEnjOrgasmWait && ((_FullEnjoyment > 80 && _OrgasmCount == 0) || (_FullEnjoyment > 100))) - bool PlayerSceanrio = (_Config.PlayerMustOrgasm && (_ActorRef == _PlayerRef) && _OrgasmCount == 0) - bool DomScenario = (_Config.DomMustOrgasm && !_victim && _OrgasmCount == 0 && \ - (_ConSubStatus == _Thread.CONSENT_CONSUB || _ConSubStatus == _Thread.CONSENT_NONCONSUB)) - If (EnjScenario || DomScenario || PlayerSceanrio) - return true - EndIf + If (!_bEnjEnabled) + return False EndIf - return false + bool EnjScenario = (_Config.HighEnjOrgasmWait && (_FullEnjoyment > 80)) + bool PlayerSceanrio = (_Config.PlayerMustOrgasm && (_ActorRef == _PlayerRef) && _OrgasmCount == 0) + bool DomScenario = (_Config.DomMustOrgasm && !_victim && _OrgasmCount == 0 && \ + (_ConSubStatus == _Thread.CONSENT_CONSUB || _ConSubStatus == _Thread.CONSENT_NONCONSUB)) + If (EnjScenario || DomScenario || PlayerSceanrio) + return True + EndIf + return False EndFunction Function StoreExcitementState(String arg = "") @@ -1425,10 +1426,12 @@ Function StoreExcitementState(String arg = "") EndFunction Function RegisterRaiseEnjAttempt() - ; IDEA: expose timeCycle as a UI bar with a to and fro moving needle + If (_ActorRef != _PlayerRef) + return + EndIf If (_lastHoldBack > 0.0) + ; IDEA: expose timeCycle as a UI bar with a to and fro moving needle float timePassed = SexLabUtil.GetCurrentGameRealTime() - _lastHoldBack - ; As enjoyment gets higher, the "green zone" gets narrower ; At 80 Enj (2.0s timeCycle): Window is 25% of the bar (0.375 to 0.625) ; At 100 Enj (0.8s timeCycle): Window is 15% of the bar (0.425 to 0.575) @@ -1436,7 +1439,6 @@ Function RegisterRaiseEnjAttempt() float difficultyOffset = 0.125 - ((_FullEnjoyment - 80.0) * 0.00375) float windowStart = timeCycle * (0.5 - difficultyOffset) float windowEnd = timeCycle * (0.5 + difficultyOffset) - If (timePassed >= windowStart) && (timePassed <= windowEnd) _FullEnjoyment += 2 _ActorRef.RestoreActorValue("Stamina", _Config.GameStaminaCost) @@ -1449,35 +1451,18 @@ Function RegisterRaiseEnjAttempt() _FullEnjoyment -= 50 _EnjFactor = (_BaseFactor/2) EndIf - _ActorRef.DamageActorValue("Stamina", 2 * _Config.GameStaminaCost) - _ActorRef.DamageActorValue("Magicka", 2 * _Config.GameMagickaCost) + If (!SexLabUtil.IsGodModeEnabled()) + _ActorRef.DamageActorValue("Stamina", 2 * _Config.GameStaminaCost) + _ActorRef.DamageActorValue("Magicka", 2 * _Config.GameMagickaCost) + EndIf EndIf EndIf _lastHoldBack = SexLabUtil.GetCurrentGameRealTime() EndFunction -Function RegisterEnjGameKeys() - If (!_Config.GameEnabled || (_ActorRef != _PlayerRef)) - return - EndIf - RegisterForKey(_Config.GameUtilityKey) - RegisterForKey(_Config.GamePauseKey) - RegisterForKey(_Config.GameRaiseEnjKey) - RegisterForKey(_Config.GameHoldbackKey) - RegisterForKey(_Config.GameSelectNextPos) -EndFunction - -Function UnregisterEnjGameKeys() - UnregisterForKey(_Config.GameUtilityKey) - UnregisterForKey(_Config.GamePauseKey) - UnregisterForKey(_Config.GameRaiseEnjKey) - UnregisterForKey(_Config.GameHoldbackKey) - UnregisterForKey(_Config.GameSelectNextPos) -EndFunction - Function DebugBaseCalcVariables() string BaseCalcLog = "[ENJ] EnjFactor: " + _EnjFactor + ", BaseArousal: " + _arousalBase + ", SameSexThread: " \ - + _Thread.SameSexThread() + ", Sexuality: " + SexlabStatistics.GetSexuality(_ActorRef) + ", ConSubStatus: " \ + + (_HomoTypes[2]||_HomoTypes[3]||_HomoTypes[4]) + ", Sexuality: " + SexlabStatistics.GetSexuality(_ActorRef) + ", ConSubStatus: " \ + _ConSubStatus + ", IsVictim: " + _victim + ", HugePP: " + _CrtMaleHugePP + ", ContextPain: " + _PainContext as int Log(BaseCalcLog) EndFunction @@ -1643,6 +1628,21 @@ endFunction function SetStartAnimationEvent(string EventName, float PlayTime) endFunction +int function GetPain() + if (_FullEnjoyment < 0) + return Math.Abs(_FullEnjoyment) as int + endIf + return 0 +endFunction + +; for compatibility with SLSO-based mods +int function GetFullEnjoyment() + return _FullEnjoyment +endFunction +function BonusEnjoyment(Actor akActor = none, int AdjustBy = 0) + return _Thread.AdjustEnjoyment(akActor, AdjustBy) +endFunction + function OrgasmEffect() DoOrgasm() endFunction diff --git a/dist/Source/Scripts/sslConfigMenu.psc b/dist/Source/Scripts/sslConfigMenu.psc index a1dfe995b..6c4aaeb3b 100644 --- a/dist/Source/Scripts/sslConfigMenu.psc +++ b/dist/Source/Scripts/sslConfigMenu.psc @@ -368,7 +368,10 @@ Function AnimationSettings() AddStateOptionBool("bRedressVictim", "$SSL_bRedressVictim") AddStateOptionBool("bDisableTeleport", "$SSL_bDisableTeleport") AddStateOptionBool("bShowInMap", "$SSL_bShowInMap") + AddStateOptionBool("bHideHUD", "$SSL_bHideHUD") AddStateOptionBool("bSetAnimSpeedByEnjoyment", "$SSL_bSetAnimSpeedByEnjoyment") + AddStateOptionBool("bAdjustStage", "$SSL_AdjustStage") + AddStateOptionSlider("fAdjustStepSize", "$SSL_fAdjustStepSize", 0.5, 0, 5, 0.1, "{1}") AddMenuOptionST("FurnitureNPC", "$SSL_FurnitureNPC", _NPCFurnOpt[sslSystemConfig.GetSettingInt("iNPCBed")]) AddMenuOptionST("FurniturePlayer", "$SSL_FurniturePlayer", _PlFurnOpt[sslSystemConfig.GetSettingInt("iAskBed")]) EndFunction @@ -836,11 +839,11 @@ Function EnjoymentSettings() AddStateOptionBool("bGameSpamDelayPenalty", "$SSL_bGameSpamDelayPenalty", game_flag) AddHeaderOption("Game Hotkeys", game_header) - AddStateOptionKey("iGameUtilityKey", "$SSL_iGameUtilityKey", true, true, abDisable=game_flag) + AddStateOptionKey("iKeyMod", "$SSL_iGameUtilityKey", true, true, abDisable=game_flag) AddStateOptionKey("iGamePauseKey", "$SSL_iGamePauseKey", true, true, abDisable=game_flag) AddStateOptionKey("iGameRaiseEnjKey", "$SSL_iGameRaiseEnjKey", true, true, abDisable=game_flag) AddStateOptionKey("iGameHoldbackKey", "$SSL_iGameHoldbackKey", true, true, abDisable=game_flag) - AddStateOptionKey("iGameSelectNextPos", "$SSL_iGameSelectNextPos", true, true, abDisable=game_flag) + AddStateOptionKey("iTargetActor", "$SSL_iGameSelectNextPos", true, true, abDisable=game_flag) AddEmptyOption() AddStateOptionSlider("fPainHugePPMult", "$SSL_fPainHugePPMult", 0.5, 0, 2, 0.1, "{1}", enj_flag) @@ -960,6 +963,17 @@ State CleanSystem EndEvent EndState +State ForceRegisterVoices + Event OnSelectST() + ModEvent.Send(ModEvent.Create("SexLabSlotVoices")) + ModEvent.Send(ModEvent.Create("SexLabSlotExpressions")) + SetOptionFlagsST(OPTION_FLAG_DISABLED) + EndEvent + Event OnHighlightST() + SetInfoText("$SSL_ForceRegisterVoicesHighlight") + EndEvent +EndState + State RebuildStraponList Event OnSelectST() Config.LoadStrapons() @@ -1325,7 +1339,7 @@ Event OnMenuAcceptST(int aiIndex) sslSystemConfig.SetSettingInt("iAskBed", aiIndex) SetMenuOptionValueST(_PlFurnOpt[aiIndex]) ElseIf (s[0] == "FurnitureNPC") - sslSystemConfig.SetSettingInt("iAskBedNPC", aiIndex) + sslSystemConfig.SetSettingInt("iNPCBed", aiIndex) SetMenuOptionValueST(_NpcFurnOpt[aiIndex]) EndIf EndEvent @@ -1468,37 +1482,52 @@ EndEvent ; ------------------------------------------------------- ; function PlayerHotkeys() - SetCursorFillMode(LEFT_TO_RIGHT) + SetCursorFillMode(TOP_TO_BOTTOM) AddHeaderOption("$SSL_GlobalHotkeys") - AddEmptyOption() AddStateOptionKey("iTargetActor", "$SSL_iTargetActor", needsRegister = true) - AddStateOptionKey("iToggleFreeCamera", "$SSL_iToggleFreeCamera", needsRegister = true) - ;AddStateOptionBool("bHideHUD", "$SSL_bHideHUD") + AddStateOptionKey("iToggleThreadControl", "$SSL_iToggleThreadControl", needsRegister = true) AddHeaderOption("$SSL_SceneManipulation") - AddEmptyOption() AddStateOptionKey("iKeyUp", "$SSL_iKeyUp", true, true) - AddStateOptionKey("iKeyExtra2", "$SSL_iKeyExtra2", true, true) ;open SL menu AddStateOptionKey("iKeyDown", "$SSL_iKeyDown", true, true) - AddStateOptionKey("iKeyMod", "$SSL_iKeyMod", true, true) ;modifier AddStateOptionKey("iKeyLeft", "$SSL_iKeyLeft", true, true) - AddStateOptionKey("iKeyReset", "$SSL_iKeyReset", true, true) ;inverse action AddStateOptionKey("iKeyRight", "$SSL_iKeyRight", true, true) - AddStateOptionKey("iMoveScene", "$SSL_iMoveScene", true, true) AddStateOptionKey("iKeyAdvance", "$SSL_iKeyAdvance", true, true) - AddStateOptionKey("iChangeAnimation", "$SSL_iChangeAnimation", true, true) AddStateOptionKey("iKeyEnd", "$SSL_iKeyEnd", true, true) -endFunction + AddStateOptionKey("iKeyMenu", "$SSL_iKeyMenu", true, true) ;open SL menu + AddStateOptionKey("iKeyMod", "$SSL_iKeyMod", true, true) ;modifier + AddStateOptionKey("iKeyReset", "$SSL_iKeyReset", true, true) ;inverse action -State ForceRegisterVoices - Event OnSelectST() - ModEvent.Send(ModEvent.Create("SexLabSlotVoices")) - ModEvent.Send(ModEvent.Create("SexLabSlotExpressions")) - SetOptionFlagsST(OPTION_FLAG_DISABLED) - EndEvent + SetCursorPosition(1) + + AddEmptyOption() + AddStateOptionKey("iToggleFreeCamera", "$SSL_iToggleFreeCamera", needsRegister = true) + AddToggleOptionST("UseSceneMenu", "$SSL_bUseSceneMenu", Config.UseSceneMenu) + bool menu_flag = Config.UseSceneMenu + + AddHeaderOption("$SSL_LegacyHotkeys") + AddStateOptionKey("iChangeAnimation", "$SSL_iChangeAnimation", true, true) + AddStateOptionKey("iMoveScene", "$SSL_iMoveScene", true, true) + AddStateOptionKey("iChangePositions", "$SSL_iChangePositions", true, true, abDisable=menu_flag) + AddStateOptionKey("iOffsetAdjustMode", "$SSL_iOffsetAdjustMode", true, true, abDisable=menu_flag) + AddStateOptionKey("iToggleAdjustStage", "$SSL_iToggleAdjustStage", true, true, abDisable=menu_flag) + AddStateOptionKey("iRestoreOffsets", "$SSL_iRestoreOffsets", true, true, abDisable=menu_flag) +EndFunction + +State UseSceneMenu + Event OnSelectST() + Config.UseSceneMenu = !Config.UseSceneMenu + SetToggleOptionValueST(Config.UseSceneMenu) + ForcePageReset() + EndEvent + Event OnDefaultST() + Config.UseSceneMenu = True + SetToggleOptionValueST(Config.UseSceneMenu) + ForcePageReset() + EndEvent Event OnHighlightST() - SetInfoText("$SSL_ForceRegisterVoicesHighlight") + SetInfoText("$SSL_bUseSceneMenuHighlight") EndEvent EndState diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index 6f6d57d0e..ef6008e47 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -258,6 +258,38 @@ bool property SubmissiveTarget hidden SetSettingBool("bSubmissiveTarget", aSet) EndFunction EndProperty +bool property AdjustStage Hidden + bool Function Get() + return GetSettingBool("bAdjustStage") + EndFunction + Function Set(bool abSet) + SetSettingBool("bAdjustStage", abSet) + EndFunction +EndProperty +float property AdjustStepSize hidden + float Function Get() + return GetSettingFlt("fAdjustStepSize") + EndFunction + Function Set(float afSet) + SetSettingFlt("fAdjustStepSize", afSet) + EndFunction +EndProperty +bool property UseSceneMenu hidden + bool Function Get() + return GetSettingBool("bUseSceneMenu") + EndFunction + Function Set(bool aSet) + SetSettingBool("bUseSceneMenu", aSet) + EndFunction +EndProperty +bool property HideHUD hidden + bool Function Get() + return GetSettingBool("bHideHUD") + EndFunction + Function Set(bool aSet) + SetSettingBool("bHideHUD", aSet) + EndFunction +EndProperty ; Integers int property AskBed hidden @@ -330,29 +362,20 @@ int property LipsSoundTime hidden EndProperty ; Scene Control Keys -; TODO: Add support for legacy keybinds where possible -bool property AdjustTargetStage Hidden - bool Function Get() - return GetSettingBool("bAdjustTargetStage") - EndFunction - Function Set(bool abSet) - SetSettingBool("bAdjustTargetStage", abSet) - EndFunction -EndProperty -int property AdjustStage hidden +int property ModifierKey hidden int Function Get() - return GetSettingInt("iAdjustStage") + return GetSettingInt("iKeyMod") EndFunction Function Set(int aiSet) - SetSettingInt("iAdjustStage", aiSet) + SetSettingInt("iKeyMod", aiSet) EndFunction EndProperty int property AdvanceAnimation hidden int Function Get() - return GetSettingInt("iAdvanceAnimation") + return GetSettingInt("iKeyAdvance") EndFunction Function Set(int aiSet) - SetSettingInt("iAdvanceAnimation", aiSet) + SetSettingInt("iKeyAdvance", aiSet) EndFunction EndProperty int property ChangeAnimation hidden @@ -371,52 +394,38 @@ int property ChangePositions hidden SetSettingInt("iChangePositions", aiSet) EndFunction EndProperty -int property AdjustChange hidden - int Function Get() - return GetSettingInt("iAdjustChange") - EndFunction - Function Set(int aiSet) - SetSettingInt("iAdjustChange", aiSet) - EndFunction -EndProperty -int property AdjustForward hidden - int Function Get() - return GetSettingInt("iAdjustForward") - EndFunction - Function Set(int aiSet) - SetSettingInt("iAdjustForward", aiSet) - EndFunction -EndProperty -int property AdjustSideways hidden +int property MoveScene hidden int Function Get() - return GetSettingInt("iAdjustSideways") + return GetSettingInt("iMoveScene") EndFunction Function Set(int aiSet) - SetSettingInt("iAdjustSideways", aiSet) + SetSettingInt("iMoveScene", aiSet) EndFunction EndProperty -int property AdjustUpward hidden +int property EndAnimation hidden int Function Get() - return GetSettingInt("iAdjustUpward") + return GetSettingInt("iKeyEnd") EndFunction Function Set(int aiSet) - SetSettingInt("iAdjustUpward", aiSet) + SetSettingInt("iKeyEnd", aiSet) EndFunction EndProperty -int property RealignActors hidden + +; Offset Adjustment Keys +int property OffsetAdjustMode hidden int Function Get() - return GetSettingInt("iRealignActors") + return GetSettingInt("iOffsetAdjustMode") EndFunction Function Set(int aiSet) - SetSettingInt("iRealignActors", aiSet) + SetSettingInt("iOffsetAdjustMode", aiSet) EndFunction EndProperty -int property MoveScene hidden +int property ToggleAdjustStage hidden int Function Get() - return GetSettingInt("iMoveScene") + return GetSettingInt("iToggleAdjustStage") EndFunction Function Set(int aiSet) - SetSettingInt("iMoveScene", aiSet) + SetSettingInt("iToggleAdjustStage", aiSet) EndFunction EndProperty int property RestoreOffsets hidden @@ -427,40 +436,40 @@ int property RestoreOffsets hidden SetSettingInt("iRestoreOffsets", aiSet) EndFunction EndProperty -int property RotateScene hidden +int property DirectionUp hidden int Function Get() - return GetSettingInt("iRotateScene") + return GetSettingInt("iKeyUp") EndFunction Function Set(int aiSet) - SetSettingInt("iRotateScene", aiSet) + SetSettingInt("iKeyUp", aiSet) EndFunction EndProperty -int property EndAnimation hidden +int property DirectionDown hidden int Function Get() - return GetSettingInt("iEndAnimation") + return GetSettingInt("iKeyDown") EndFunction Function Set(int aiSet) - SetSettingInt("iEndAnimation", aiSet) + SetSettingInt("iKeyDown", aiSet) EndFunction EndProperty -int property AdjustSchlong hidden +int property DirectionLeft hidden int Function Get() - return GetSettingInt("iAdjustSchlong") + return GetSettingInt("iKeyLeft") EndFunction Function Set(int aiSet) - SetSettingInt("iAdjustSchlong", aiSet) + SetSettingInt("iKeyLeft", aiSet) EndFunction EndProperty -int property Backwards hidden +int property DirectionRight hidden int Function Get() - return GetSettingInt("iBackwards") + return GetSettingInt("iKeyRight") EndFunction Function Set(int aiSet) - SetSettingInt("iBackwards", aiSet) + SetSettingInt("iKeyRight", aiSet) EndFunction EndProperty -; Misc Keys +; Global Keys int property ToggleFreeCamera hidden int Function Get() return GetSettingInt("iToggleFreeCamera") @@ -469,6 +478,14 @@ int property ToggleFreeCamera hidden SetSettingInt("iToggleFreeCamera", aiSet) EndFunction EndProperty +int property ToggleThreadControl hidden + int Function Get() + return GetSettingInt("iToggleThreadControl") + EndFunction + Function Set(int aiSet) + SetSettingInt("iToggleThreadControl", aiSet) + EndFunction +EndProperty int property TargetActor hidden int Function Get() return GetSettingInt("iTargetActor") @@ -477,14 +494,6 @@ int property TargetActor hidden SetSettingInt("iTargetActor", aiSet) EndFunction EndProperty -bool property HideHUD hidden - bool Function Get() - return GetSettingBool("bHideHUD") - EndFunction - Function Set(bool aSet) - SetSettingBool("bHideHUD", aSet) - EndFunction -EndProperty ; Floats float property CumTimer hidden @@ -679,61 +688,53 @@ Event OnKeyDown(int keyCode) If (Utility.IsInMenuMode()) return ElseIf (keyCode == ToggleFreeCamera) - ToggleFreeCamera() - ElseIf (keyCode == TargetActor) - If (_ActiveControl && !_ActiveControl.HasPlayer) - DisableThreadControl(_ActiveControl) - Else - SetTargetActor() - EndIf + SexLabUtil.ToggleFreeCamera() + ElseIf (keyCode == TargetActor && !_ActiveControl) + SetTargetActor(_CrosshairRef, true) + ElseIf (keyCode == ToggleThreadControl) + ToggleThreadControl() EndIf EndEvent -Function SetTargetActor() - If (!_CrosshairRef) +Function SetTargetActor(Actor akActor = None, bool abThreadControl = false) + If (!akActor || akActor == Game.GetPlayer()) return EndIf - TargetRef = _CrosshairRef - SelectedSpell.Cast(TargetRef, TargetRef) - Debug.Notification("SexLab Target Selected: " + TargetRef.GetLeveledActorBase().GetName()) - ; Attempt to grab control of their animation? - sslThreadController TargetThread = ThreadSlots.GetActorController(TargetRef) - If (TargetThread && !TargetThread.HasPlayer && TargetThread.GetStatus() == TargetThread.STATUS_INSCENE && \ - !ThreadSlots.GetActorController(Game.GetPlayer()) && TakeThreadControl.Show()) - GetThreadControl(TargetThread) + TargetRef = akActor + If (abThreadControl) + ToggleThreadControl() EndIf EndFunction -Function ToggleFreeCamera() - If (Game.GetCameraState() != 3) - MiscUtil.SetFreeCameraSpeed(AutoSUCSM) +Function ToggleThreadControl() + If (_ActiveControl) + DisableThreadControl(_ActiveControl) + return + EndIf + Actor akTarget = None + If (Game.GetPlayer().IsInFaction(AnimatingFaction)) + akTarget = Game.GetPlayer() + ElseIf (TargetRef) + akTarget = TargetRef + Else + return + EndIf + Debug.Notification("SexLab target selected: " + SexLabUtil.ActorName(akTarget)) + SelectedSpell.Cast(akTarget) + SexLabThread TargetThread = ThreadSlots.GetThreadByActor(akTarget) + If (TargetThread && TargetThread.GetStatus() == TargetThread.STATUS_INSCENE) + Log("AttemptThreadControl(), Attempting thread control for actor: " + SexLabUtil.ActorName(akTarget)) + If (TakeThreadControl.Show()) + GetThreadControl(TargetThread as sslThreadController) + If (UseSceneMenu) ;Comeback: Reasses need after UI update + _ActiveControl.RealignActors() + EndIf + EndIf EndIf - MiscUtil.ToggleFreeCamera() EndFunction -bool function BackwardsPressed() - return Input.GetNumKeysPressed() > 1 && MirrorPress(Backwards) -endFunction - -bool function AdjustStagePressed() - return (!AdjustTargetStage && Input.GetNumKeysPressed() > 1 && MirrorPress(AdjustStage)) \ - || (AdjustTargetStage && !(Input.GetNumKeysPressed() > 1 && MirrorPress(AdjustStage))) -endFunction - -bool function IsAdjustStagePressed() - return Input.GetNumKeysPressed() > 1 && MirrorPress(AdjustStage) -endFunction - -bool function MirrorPress(int mirrorkey) - if mirrorkey == 42 || mirrorkey == 54 ; Shift - return Input.IsKeyPressed(42) || Input.IsKeyPressed(54) - elseif mirrorkey == 29 || mirrorkey == 157 ; Ctrl - return Input.IsKeyPressed(29) || Input.IsKeyPressed(157) - elseif mirrorkey == 56 || mirrorkey == 184 ; Alt - return Input.IsKeyPressed(56) || Input.IsKeyPressed(184) - else - return Input.IsKeyPressed(mirrorkey) - endIf +bool function ModifierPressed() + return Input.GetNumKeysPressed() > 1 && Input.IsKeyPressed(ModifierKey) endFunction ; ------------------------------------------------------- ; @@ -764,6 +765,8 @@ Function GetThreadControl(sslThreadController TargetThread) player.SheatheWeapon() endIf Game.SetPlayerAIDriven() + player.SetFactionRank(AnimatingFaction, 0) + player.EvaluatePackage() EndIf _ActiveControl.EnableHotkeys(true) EndFunction @@ -772,12 +775,16 @@ Function DisableThreadControl(sslThreadController TargetThread) If (!_ActiveControl || _ActiveControl != TargetThread) return EndIf + TargetRef = None ; Release players thread control _ActiveControl.DisableHotkeys() _ActiveControl.AutoAdvance = true ; Unlock players movement iff they arent owned by the thread If (!_ActiveControl.HasPlayer) + Game.GetPlayer().SetFactionRank(AnimatingFaction, -1) + Game.GetPlayer().EvaluatePackage() Game.SetPlayerAIDriven(false) + Game.EnablePlayerControls() EndIf _ActiveControl = none Endfunction @@ -1002,7 +1009,7 @@ Function Reload() UnregisterForAllKeys() RegisterForKey(ToggleFreeCamera) RegisterForKey(TargetActor) - RegisterForKey(EndAnimation) + RegisterForKey(ToggleThreadControl) AddRemoveMatchmakerSpells() DisableThreadControl(_ActiveControl) @@ -1236,10 +1243,10 @@ bool Property GameEnabled hidden EndProperty int Property GameUtilityKey hidden int Function Get() - return GetSettingInt("iGameUtilityKey") + return GetSettingInt("iKeyMod") EndFunction Function Set(int aiSet) - SetSettingInt("iGameUtilityKey", aiSet) + SetSettingInt("iKeyMod", aiSet) EndFunction EndProperty int Property GamePauseKey hidden @@ -1268,10 +1275,10 @@ int Property GameHoldbackKey hidden EndProperty int Property GameSelectNextPos hidden int Function Get() - return GetSettingInt("iGameSelectNextPos") + return GetSettingInt("iTargetActor") EndFunction Function Set(int aiSet) - SetSettingInt("iGameSelectNextPos", aiSet) + SetSettingInt("iTargetActor", aiSet) EndFunction EndProperty int Property GameStaminaCost hidden @@ -1349,7 +1356,6 @@ Message property CheckSexLabUtil Hidden EndFunction EndProperty - Faction property AnimatingFaction Hidden Faction Function Get() return Game.GetFormFromFile(0xE50F, "SexLab.esm") as Faction @@ -1890,6 +1896,96 @@ bool function SetOpenMouthExpression(bool isFemale, int value) return true endFunction +int property AdjustChange hidden + int Function Get() + return GetSettingInt("iAdjustChange") + EndFunction + Function Set(int aiSet) + SetSettingInt("iAdjustChange", aiSet) + EndFunction +EndProperty +int property AdjustForward hidden + int Function Get() + return GetSettingInt("iAdjustForward") + EndFunction + Function Set(int aiSet) + SetSettingInt("iAdjustForward", aiSet) + EndFunction +EndProperty +int property AdjustSideways hidden + int Function Get() + return GetSettingInt("iAdjustSideways") + EndFunction + Function Set(int aiSet) + SetSettingInt("iAdjustSideways", aiSet) + EndFunction +EndProperty +int property AdjustUpward hidden + int Function Get() + return GetSettingInt("iAdjustUpward") + EndFunction + Function Set(int aiSet) + SetSettingInt("iAdjustUpward", aiSet) + EndFunction +EndProperty +int property RealignActors hidden + int Function Get() + return GetSettingInt("iRealignActors") + EndFunction + Function Set(int aiSet) + SetSettingInt("iRealignActors", aiSet) + EndFunction +EndProperty +int property RotateScene hidden + int Function Get() + return GetSettingInt("iRotateScene") + EndFunction + Function Set(int aiSet) + SetSettingInt("iRotateScene", aiSet) + EndFunction +EndProperty +int property AdjustSchlong hidden + int Function Get() + return GetSettingInt("iAdjustSchlong") + EndFunction + Function Set(int aiSet) + SetSettingInt("iAdjustSchlong", aiSet) + EndFunction +EndProperty +int property Backwards hidden + int Function Get() + return GetSettingInt("iBackwards") + EndFunction + Function Set(int aiSet) + SetSettingInt("iBackwards", aiSet) + EndFunction +EndProperty + +bool function BackwardsPressed() + return Input.GetNumKeysPressed() > 1 && MirrorPress(Backwards) +endFunction + +bool function AdjustStagePressed() + return (!AdjustStage && Input.GetNumKeysPressed() > 1 && MirrorPress(ToggleAdjustStage)) \ + || (AdjustStage && !(Input.GetNumKeysPressed() > 1 && MirrorPress(ToggleAdjustStage))) +endFunction + +bool function IsAdjustStagePressed() + return Input.GetNumKeysPressed() > 1 && MirrorPress(ToggleAdjustStage) +endFunction + +bool function MirrorPress(int mirrorkey) + if mirrorkey == 42 || mirrorkey == 54 ; Shift + return Input.IsKeyPressed(42) || Input.IsKeyPressed(54) + elseif mirrorkey == 29 || mirrorkey == 157 ; Ctrl + return Input.IsKeyPressed(29) || Input.IsKeyPressed(157) + elseif mirrorkey == 56 || mirrorkey == 184 ; Alt + return Input.IsKeyPressed(56) || Input.IsKeyPressed(184) + else + return Input.IsKeyPressed(mirrorkey) + endIf +endFunction + ; ------------------------------------------------------- ; ; --- Functions --- ; ; ------------------------------------------------------- ; diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index f71b6e089..9ad6b213d 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -14,17 +14,34 @@ scriptname sslThreadController extends sslThreadModel ; ----------------------------------------------------------------------------- ; ; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ; -Message Property RepositionInfoMsg Auto -{[Ok, Cancel, Don't show again]} +Function EnableHotkeys(bool forced = false) + If(!HasPlayer && !forced) + return + EndIf + If (Config.UseSceneMenu) + EnableMenuEvents() + EndIf + EnableTraditionalHotkeys() +EndFunction +Function DisableHotkeys() + ; If free cam is active here will glitch out controls? + MiscUtil.SetFreeCameraState(false) + If (Config.UseSceneMenu) + DisableMenuEvents() + EndIf + DisableTraditionalHotkeys() +EndFunction -bool _SkipHotkeyEvents -int _AutoAdvanceCache +; ------------------------------------------------------- ; +; --- Menu Events --- ; +; ------------------------------------------------------- ; String[] _MenuEvents +int _AutoAdvanceCache -Function EnableHotkeys(bool forced = false) - If(!HasPlayer && !forced || !TryOpenSceneMenu()) +Function EnableMenuEvents() + If (!TryOpenSceneMenu()) return EndIf _AutoAdvanceCache = -1 @@ -42,19 +59,15 @@ Function EnableHotkeys(bool forced = false) RegisterForModEvent(_MenuEvents[i], "MenuEvent") i += 1 EndWhile - EnableTraditionalHotkeys() EndFunction -Function DisableHotkeys() +Function DisableMenuEvents() int i = 0 While (i < _MenuEvents.Length) UnregisterForModEvent(_MenuEvents[i]) i += 1 EndWhile - ; If free cam is active here will glitch out controls? - MiscUtil.SetFreeCameraState(false) TryCloseSceneMenu() - DisableTraditionalHotkeys() EndFunction Event MenuEvent(string asEventName, string asStringArg, float afNumArg, form akSender) @@ -95,6 +108,13 @@ Event MenuEvent(string asEventName, string asStringArg, float afNumArg, form akS EndIf EndEvent +; ------------------------------------------------------- ; +; --- Executed Functions [Menu Events] --- ; +; ------------------------------------------------------- ; + +Message Property RepositionInfoMsg Auto +{[Ok, Cancel, Don't show again]} + Function PickRandomScene(String asNewScene) String[] sceneSet = GetPlayingScenes() If(sceneSet.Length < 2) @@ -130,24 +150,23 @@ Function MoveScene() StorageUtil.SetIntValue(none, "SEXLAB_REPOSITIONMSG_INFO", 1) EndIf EndIf - sslActorAlias PlayerSlot = ActorAlias(PlayerRef) - If (HasPlayer) - PlayerSlot.TryPauseAndUnlock() - Else - Game.DisablePlayerControls(false, true, false, false, true) - EndIf int n = 0 While(n < Positions.Length) ActorAlias[n].GoToState(ActorAlias[n].STATE_PAUSED) + If (ActorAlias[n] == ActorAlias(PlayerRef)) + ActorAlias[n].TryPauseAndUnlock() + EndIf n += 1 EndWhile + Game.SetPlayerAIDriven(false) + Game.EnablePlayerControls() Utility.Wait(1) int t = 0 While(t < 60 && !Input.IsKeyPressed(Config.MoveScene)) Utility.Wait(0.5) t += 1 EndWhile - Game.DisablePlayerControls() ; make sure player isnt moving before resync + Game.SetPlayerAIDriven() ; make sure player isnt moving before resync float x = PlayerRef.X float y = PlayerRef.Y float z = PlayerRef.Z @@ -163,10 +182,11 @@ Function MoveScene() ActorAlias[j].TryLockAndUnpause() j += 1 EndWhile + CenterOnObject(PlayerRef) If (!HasPlayer) - Game.EnablePlayerControls() + MoveActorsAwayFromPlayer(true) + Config.DisableThreadControl(self) EndIf - CenterOnObject(PlayerRef) EndFunction Function UpdateAnnotations(string asString) @@ -188,68 +208,348 @@ int Function GetOffsetIdx(String asOffsetType) return types.Find(asOffsetType) EndFunction -Function SetSceneOffset(float afOffsetValue, String asOffsetType) +Function SetSceneOffset(float afOffsetValue, String asOffsetType, bool abIncrement = false) String activeScene = GetActiveScene() int idx = GetOffsetIdx(asOffsetType) + If (abIncrement) + afOffsetValue += SexLabRegistry.GetSceneOffset(activeScene)[idx] + EndIf SexLabRegistry.SetSceneOffset(activeScene, afOffsetValue, idx) ResetStage() EndFunction -Function SetStageOffset(Actor akAffectedActor, float afOffsetValue, String asOffsetType) +Function SetStageOffset(Actor akAffectedActor, float afOffsetValue, String asOffsetType, bool abIncrement = false) int idx = GetOffsetIdx(asOffsetType) int n = GetPositions().Find(akAffectedActor) String activeScene = GetActiveScene() String activeStage = "" - If (sslSystemConfig.GetSettingBool("bAdjustTargetStage")) + If (Config.AdjustStage) activeStage = GetActiveStage() EndIf + If (abIncrement) + afOffsetValue += SexLabRegistry.GetStageOffset(activeScene, activeStage, n)[idx] + EndIf SexLabRegistry.SetStageOffset(activeScene, activeStage, n, afOffsetValue, idx) UpdatePlacement(akAffectedActor) EndFunction +; ------------------------------------------------------- ; +; --- Traditional Hotkeys --- ; +; ------------------------------------------------------- ; + +int[] Hotkeys +int Property kChangeAnimation = 0 AutoReadOnly +int Property kMoveScene = 1 AutoReadOnly +int Property kModifierKey = 2 AutoReadOnly +int Property kChangeTargetActor = 3 AutoReadOnly +int Property kGamePause = 4 AutoReadOnly +int Property kGameRaiseEnj = 5 AutoReadOnly +int Property kGameHoldback = 6 AutoReadOnly +int Property kAdvanceAnimation = 7 AutoReadOnly +int Property kEndAnimation = 8 AutoReadOnly +int Property kChangePositions = 9 AutoReadOnly +int Property kOffsetAdjustMode = 10 AutoReadOnly +int Property kToggleAdjustStage = 11 AutoReadOnly +int Property kRestoreOffsets = 12 AutoReadOnly +int Property kDirectionUp = 13 AutoReadOnly +int Property kDirectionDown = 14 AutoReadOnly +int Property kDirectionLeft = 15 AutoReadOnly +int Property kDirectionRight = 16 AutoReadOnly + +int Property AdjMode_None = 0 AutoReadOnly +int Property AdjMode_PosXY = 1 AutoReadOnly +int Property AdjMode_PosRZ = 2 AutoReadOnly +int Property AdjMode_SceneXY = 3 AutoReadOnly +int Property AdjMode_SceneRZ = 4 AutoReadOnly + +Actor _AdjustActor = None ; The actor currently selected for adjustments +int _AdjustMode = 0 ; Determines offsets adjustment mode +bool _SkipHotkeyEvents = False +bool _EnjGamePaused = False + Function EnableTraditionalHotkeys() - RegisterForKey(Config.ChangeAnimation) - RegisterForKey(Config.MoveScene) + InitLegacyHotkeys() + RegisterForKey(Hotkeys[kChangeAnimation]) + RegisterForKey(Hotkeys[kMoveScene]) + RegisterForKey(Hotkeys[kModifierKey]) + RegisterForKey(Hotkeys[kChangeTargetActor]) + If (Config.GameEnabled && HasPlayer) + RegisterForKey(Hotkeys[kGamePause]) + RegisterForKey(Hotkeys[kGameRaiseEnj]) + RegisterForKey(Hotkeys[kGameHoldback]) + GetAdjustPos() + EndIf + If (!Config.UseSceneMenu) + RegisterForKey(Hotkeys[kAdvanceAnimation]) + RegisterForKey(Hotkeys[kEndAnimation]) + RegisterForKey(Hotkeys[kChangePositions]) + RegisterForKey(Hotkeys[kOffsetAdjustMode]) + RegisterForKey(Hotkeys[kToggleAdjustStage]) + RegisterForKey(Hotkeys[kRestoreOffsets]) + RegisterForKey(Hotkeys[kDirectionUp]) + RegisterForKey(Hotkeys[kDirectionDown]) + RegisterForKey(Hotkeys[kDirectionLeft]) + RegisterForKey(Hotkeys[kDirectionRight]) + EndIf EndFunction Function DisableTraditionalHotkeys() - UnregisterForKey(Config.ChangeAnimation) - UnregisterForKey(Config.MoveScene) + int i = 0 + While (i < Hotkeys.Length) + UnregisterForKey(Hotkeys[i]) + i += 1 + EndWhile EndFunction -Event OnKeyDown(int KeyCode) - If(Utility.IsInMenuMode() || _SkipHotkeyEvents) +Event OnKeyDown(int aiKey) + If (Utility.IsInMenuMode() || _SkipHotkeyEvents || (aiKey == Hotkeys[kModifierKey])) return EndIf _SkipHotkeyEvents = true - If(KeyCode == Config.ChangeAnimation) - ChangeAnimation(Input.IsKeyPressed(Config.GameUtilityKey)) - ElseIf(KeyCode == Config.MoveScene) + ; QoL+Shared + bool abModifier = Config.ModifierPressed() + If (aiKey == Hotkeys[kChangeAnimation]) + PickRandomScene("") + ElseIf (aiKey == Hotkeys[kMoveScene]) MoveScene() + ElseIf (aiKey == Hotkeys[kChangeTargetActor]) + ChangeTargetActor(abModifier) + EndIf + ; EnjGame + If (Config.GameEnabled && HasPlayer) + If ((aiKey == Hotkeys[kGamePause]) && abModifier) + _EnjGamePaused = !_EnjGamePaused + Log("[EnjGame] Game paused: " + _EnjGamePaused) + EndIf + If (!_EnjGamePaused) + If (aiKey == Hotkeys[kGameRaiseEnj]) + ProcessEnjGameArg("Stamina", _AdjustActor) + ElseIf (aiKey == Hotkeys[kGameHoldback]) + ProcessEnjGameArg("Magicka", _AdjustActor) + EndIf + EndIf + EndIf + ; Legacy + If (Config.UseSceneMenu) + _SkipHotkeyEvents = false + return + EndIf + If (aiKey == Hotkeys[kAdvanceAnimation]) + AdvanceStage(abModifier) + ElseIf (aiKey == Hotkeys[kEndAnimation]) + EndAnimation() + ElseIf (aiKey == Hotkeys[kChangePositions]) + ChangePositions(abModifier) + ElseIf (aiKey == Hotkeys[kOffsetAdjustMode]) + CycleOffsetAdjustModes(abModifier) + ElseIf (aiKey == Hotkeys[kToggleAdjustStage]) + Config.AdjustStage = !Config.AdjustStage + ElseIf (aiKey == Hotkeys[kRestoreOffsets]) + RestoreOffsets() + EndIf + If (_AdjustMode > AdjMode_None) + string[] asOffsetType = DetermineOffsetAdjustInputType(aiKey) + HandleOffsetAdjustment(asOffsetType) EndIf _SkipHotkeyEvents = false EndEvent -Function ChangeAnimation(bool backwards = false) - string[] Scenes = GetPlayingScenes() - If(Scenes.Length < 2) +Function InitLegacyHotkeys() + Hotkeys = new int[17] + ;QoL + Hotkeys[kChangeAnimation] = Config.ChangeAnimation + Hotkeys[kMoveScene] = Config.MoveScene + ;Shared (EnjGame + Legacy) + Hotkeys[kModifierKey] = Config.ModifierKey + Hotkeys[kChangeTargetActor] = Config.TargetActor + ;EnjGame + Hotkeys[kGamePause] = Config.GamePauseKey + Hotkeys[kGameRaiseEnj] = Config.GameRaiseEnjKey + Hotkeys[kGameHoldback] = Config.GameHoldbackKey + ;Legacy + Hotkeys[kAdvanceAnimation] = Config.AdvanceAnimation + Hotkeys[kEndAnimation] = Config.EndAnimation + Hotkeys[kChangePositions] = Config.ChangePositions + Hotkeys[kOffsetAdjustMode] = Config.OffsetAdjustMode + Hotkeys[kToggleAdjustStage] = Config.ToggleAdjustStage + Hotkeys[kRestoreOffsets] = Config.RestoreOffsets + Hotkeys[kDirectionUp] = Config.DirectionUp + Hotkeys[kDirectionDown] = Config.DirectionDown + Hotkeys[kDirectionLeft] = Config.DirectionLeft + Hotkeys[kDirectionRight] = Config.DirectionRight +EndFunction + +; ------------------------------------------------------- ; +; --- Executed Functions [Legacy Hotkeys] --- ; +; ------------------------------------------------------- ; + +Function AdvanceStage(bool abBackwards = false) + If (!abBackwards) + GoToStage(Stage + 1) + ElseIf (Stage > 1) + GoToStage(Stage - 1) + EndIf +EndFunction + +Function ChangePositions(bool abBackwards = false) + int posLen = Positions.Length + If (posLen < 2) + return + EndIf + String activeScene = GetActiveScene() + int curIdx = GetAdjustPos() + Actor curPos = GetIdxPosition(curIdx) + int step = 1 + If (abBackwards) + step = -1 + EndIf + int newIdx = (curIdx + step) + int i = 0 + While (i < posLen - 1) + If (newIdx >= posLen) + newIdx = 0 + ElseIf (newIdx < 0) + newIdx = posLen - 1 + EndIf + If (SexLabRegistry.CanFillPosition(activeScene, curIdx, GetIdxPosition(newIdx)) && \ + SexLabRegistry.CanFillPosition(activeScene, newIdx, curPos)) + Actor tmpActor = Positions[curIdx] + Positions[curIdx] = Positions[newIdx] + Positions[newIdx] = tmpActor + sslActorAlias tmpAlias = ActorAlias[curIdx] + ActorAlias[curIdx] = ActorAlias[newIdx] + ActorAlias[newIdx] = tmpAlias + SendThreadEvent("PositionChange") + ResetStage() + return + EndIf + newIdx += step + i += 1 + EndWhile + Debug.Notification("Selected actor cannot switch positions") +EndFunction + +Function CycleOffsetAdjustModes(bool abBackwards = false) + int modesCount = 5 + int step = 1 + If (abBackwards) + step = -1 + EndIf + _AdjustMode += step + If (_AdjustMode >= modesCount) + _AdjustMode = 0 + ElseIf (_AdjustMode < 0) + _AdjustMode = (modesCount - 1) + EndIf + If (_AdjustMode == AdjMode_None) + Debug.Notification("SexLab: Disabled offset adjustments") return EndIf - UnregisterForUpdate() - int current = Scenes.Find(GetActiveScene()) - String newScene - If (!Config.AdjustStagePressed()) - newScene = Scenes[sslUtility.IndexTravel(current, Scenes.Length, backwards)] + ;TODO: allign/recenter camera along with world coordinates directions + If (_AdjustMode == AdjMode_PosXY) + Debug.Notification("SexLab: Adjusting Position X-Y") + ElseIf (_AdjustMode == AdjMode_PosRZ) + Debug.Notification("SexLab: Adjusting Position R-Z") + ElseIf (_AdjustMode == AdjMode_SceneXY) + Debug.Notification("SexLab: Adjusting Scene X-Y") + ElseIf (_AdjustMode == AdjMode_SceneRZ) + Debug.Notification("SexLab: Adjusting Scene R-Z") + EndIf +EndFunction + +string[] Function DetermineOffsetAdjustInputType(int aiKey) + string[] ret = Utility.CreateStringArray(2, "") + If ((aiKey != Hotkeys[kDirectionUp]) && (aiKey != Hotkeys[kDirectionDown]) && \ + (aiKey != Hotkeys[kDirectionLeft]) && (aiKey != Hotkeys[kDirectionRight])) + return ret + EndIf + bool abAdjustingRZ = (_AdjustMode == AdjMode_PosRZ) || (_AdjustMode == AdjMode_SceneRZ) + If (aiKey == Hotkeys[kDirectionLeft]) + ret[0] = "-" + ret[1] = "R" + If (!abAdjustingRZ) + ret[1] = "X" + EndIf + ElseIf (aiKey == Hotkeys[kDirectionRight]) + ret[1] = "R" + If (!abAdjustingRZ) + ret[1] = "X" + EndIf + ElseIf (aiKey == Hotkeys[kDirectionUp]) + ret[1] = "Z" + If (!abAdjustingRZ) + ret[1] = "Y" + EndIf + ElseIf (aiKey == Hotkeys[kDirectionDown]) + ret[0] = "-" + ret[1] = "Z" + If (!abAdjustingRZ) + ret[1] = "Y" + EndIf + EndIf + return ret +EndFunction + +Function HandleOffsetAdjustment(String[] asOffsetType) + If (asOffsetType[1] == "") + return + EndIf + float afValue = Config.AdjustStepSize + If (asOffsetType[0] == "-") + afValue = -afValue + EndIf + bool abAdjustingPos = (_AdjustMode == AdjMode_PosXY) || (_AdjustMode == AdjMode_PosRZ) + If (abAdjustingPos) + SetStageOffset(_AdjustActor, afValue, asOffsetType[1], true) Else - int r = Utility.RandomInt(0, Scenes.Length - 1) - While(r == current) - r = Utility.RandomInt(0, Scenes.Length - 1) - EndWhile - newScene = Scenes[r] + SetSceneOffset(afValue, asOffsetType[1], true) + EndIf +EndFunction + +Function RestoreOffsets() + SexLabRegistry.ResetSceneOffset(GetActiveScene()) + SexLabRegistry.ResetStageOffsetA(GetActiveScene(), GetActiveStage()) + RealignActors() +EndFunction + +int Function GetAdjustPos() + If (_AdjustActor) + return GetPositionIdx(_AdjustActor) + EndIf + int AdjustIdx = -1 + If (Config.TargetRef) + AdjustIdx = GetPositionIdx(Config.TargetRef) + Else + If (HasPlayer) + AdjustIdx = IndexTravelComplex(GetPositionIdx(PlayerRef)) + Else + AdjustIdx = (GetPositions().Length > 1) as int + EndIf + EndIf + _AdjustActor = GetIdxPosition(AdjustIdx) + Config.SetTargetActor(_AdjustActor) + return AdjustIdx +EndFunction + +Function ChangeTargetActor(bool abBackwards = false) + If (Positions.Length < 2) + return + EndIf + int curIdx = GetAdjustPos() + int newIdx = IndexTravelComplex(curIdx, abBackwards) + _AdjustActor = GetIdxPosition(newIdx) + Config.SetTargetActor(_AdjustActor) + Config.SelectedSpell.Cast(_AdjustActor) ; SFX for visual feedback + PlayHotkeyFX(0, !abBackwards) + Log("ChangeTargetActor(), currently focused actor: " + SexLabUtil.ActorName(_AdjustActor)) +EndFunction + +Function PlayHotkeyFX(int i, bool abBackwards) + If (abBackwards) + Config.HotkeyDown[i].Play(PlayerRef) + Else + Config.HotkeyUp[i].Play(PlayerRef) EndIf - Log("Changing running scene from " + GetActiveScene() + " to " + newScene) - SendThreadEvent("AnimationChange") - ResetScene(newScene) EndFunction ; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ; @@ -263,22 +563,20 @@ EndFunction ; ----------------------------------------------------------------------------- ; ; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ; -sslActorAlias AdjustAlias ; The actor currently selected for position adjustments - -int[] Hotkeys -int Property kAdvanceAnimation = 0 AutoReadOnly -int Property kChangeAnimation = 1 AutoReadOnly -int Property kChangePositions = 2 AutoReadOnly -int Property kAdjustChange = 3 AutoReadOnly +;int[] Hotkeys +;int Property kAdvanceAnimation = 0 AutoReadOnly +;int Property kChangeAnimation = 1 AutoReadOnly +;int Property kChangePositions = 2 AutoReadOnly +;int Property kAdjustChange = 3 AutoReadOnly int Property kAdjustForward = 4 AutoReadOnly int Property kAdjustSideways = 5 AutoReadOnly int Property kAdjustUpward = 6 AutoReadOnly -int Property kRealignActors = 7 AutoReadOnly -int Property kRestoreOffsets = 8 AutoReadOnly -int Property kMoveScene = 9 AutoReadOnly +;int Property kRealignActors = 7 AutoReadOnly +;int Property kRestoreOffsets = 8 AutoReadOnly +;int Property kMoveScene = 9 AutoReadOnly int Property kRotateScene = 10 AutoReadOnly -int Property kEndAnimation = 11 AutoReadOnly -int Property kAdjustSchlong = 12 AutoReadOnly +;int Property kEndAnimation = 11 AutoReadOnly +;int Property kAdjustSchlong = 12 AutoReadOnly ;/ Event OnKeyDown(int KeyCode) If(Utility.IsInMenuMode() || _SkipHotkeyEvents) @@ -320,32 +618,9 @@ Event OnKeyDown(int KeyCode) _SkipHotkeyEvents = false EndEvent /; -int Function GetAdjustPos() - int AdjustPos = -1 - if AdjustAlias && AdjustAlias.ActorRef - AdjustPos = Positions.Find(AdjustAlias.ActorRef) - endIf - if AdjustPos == -1 && Config.TargetRef - AdjustPos = Positions.Find(Config.TargetRef) - endIf - if AdjustPos == -1 - AdjustPos = (ActorCount > 1) as int - endIf - if Positions[AdjustPos] != PlayerRef - Config.TargetRef = Positions[AdjustPos] - endIf - AdjustAlias = PositionAlias(AdjustPos) - return AdjustPos -EndFunction -Function AdvanceStage(bool backwards = false) - If(!backwards) - GoToStage(Stage + 1) - Elseif(Config.IsAdjustStagePressed()) - GoToStage(1) - ElseIf(Stage > 1) - GoToStage(Stage - 1) - EndIf +Function ChangeAnimation(bool backwards = false) + return PickRandomScene("") EndFunction Function AdjustCoordinate(bool abBackwards, bool abStageOnly, float afValue, int aiKeyIdx, int aiOffsetType) @@ -417,64 +692,7 @@ Function RotateScene(bool backwards = false) EndFunction Function AdjustChange(bool backwards = false) - If(Positions.Length <= 1) - return - EndIf - int i = GetAdjustPos() - i = sslUtility.IndexTravel(i, ActorCount, backwards) - If(Positions[i] != PlayerRef) - Config.TargetRef = Positions[i] - EndIf - AdjustAlias = ActorAlias[i] - Config.SelectedSpell.Cast(Positions[i]) ; SFX for visual feedback - PlayHotkeyFX(0, !backwards) - String msg = "Adjusting Position For: " + AdjustAlias.GetActorName() - Debug.Notification(msg) - SexLabUtil.PrintConsole(msg) -EndFunction - -Function RestoreOffsets() - SexLabRegistry.ResetStageOffsetA(GetActiveScene(), GetActiveStage()) - RealignActors() -EndFunction - -Function ChangePositions(bool backwards = false) - If(Positions.Length < 2) - return - EndIf - String activeScene = GetActiveScene() - Actor actor_adj = AdjustAlias.GetActorReference() - int i_adj = GetAdjustPos() - int i = i_adj + 1 - While(i < Positions.Length + i_adj) - If(i >= Positions.Length) - i -= Positions.Length - EndIf - If(SexLabRegistry.CanFillPosition(activeScene, i_adj, Positions[i]) && \ - SexLabRegistry.CanFillPosition(activeScene, i, actor_adj)) - Actor tmpAct = Positions[i_adj] - Positions[i_adj] = Positions[i] - Positions[i] = tmpAct - - sslActorAlias tmpAli = ActorAlias[i_adj] - ActorAlias[i_adj] = ActorAlias[i] - ActorAlias[i] = tmpAli - - SendThreadEvent("PositionChange") - ResetStage() - return - EndIf - i += 1 - EndWhile - Debug.Notification("Selected actor cannot switch positions") -EndFunction - -Function PlayHotkeyFX(int i, bool backwards) - if backwards - Config.HotkeyDown[i].Play(PlayerRef) - else - Config.HotkeyUp[i].Play(PlayerRef) - endIf + ChangeTargetActor(backwards) EndFunction float Function GetAnimationRunTime() diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index 3cdb511f9..b47e8219a 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -57,6 +57,9 @@ EndFunction int Function GetPositionIdx(Actor akActor) return _Positions.Find(akActor) EndFunction +Actor Function GetIdxPosition(int n) + return _Positions[n] +EndFunction int Function GetActorSex(Actor akActor) return GetNthPositionSex(GetPositionIdx(akActor)) @@ -892,21 +895,51 @@ State Making_M LeadIn = LeadIn && _LeadInScenes.Find(activeScene) > -1 Log("Thread validated, playing animation: " + activeScene + ", " + SexLabRegistry.GetSceneName(activeScene), "StartThread()") SendThreadEvent("AnimationStarting") + If (!UndressAndStripActors(activeScene)) + EndAnimation() + return + EndIf + GoToState(STATE_PLAYING) + EndFunction + + bool Function UndressAndStripActors(string activeScene) + bool WaitForUndress = false + int i = 0 + While (i < _Positions.Length) + ActorAlias[i].LockActor() + WaitForUndress= (ActorAlias[i].InitiateUndressing() || WaitForUndress) + i += 1 + EndWhile + If (WaitForUndress) + Utility.Wait(2.5) + EndIf If (HasPlayer) If (sslSystemConfig.GetSettingInt("iUseFade") > 0) Config.ApplyFade() EndIf Else If (Config.ShowInMap && PlayerRef.GetDistance(CenterRef) > 750) - SetObjectiveDisplayed(0, True) + SetObjectiveDisplayed(0, true) EndIf EndIf - GoToState(STATE_PLAYING) + int[] strips_ = SexLabRegistry.GetStripDataA(activeScene, "") + int[] sex_ = SexLabRegistry.GetPositionSexA(activeScene) + int j = 0 + While (j < _Positions.Length) + If (!ActorAlias[j].ReadyActor(strips_[j], sex_[j])) + return false + EndIf + j += 1 + EndWhile + If (WaitForUndress) + Utility.Wait(1.5) + EndIf + return true EndFunction Function EndAnimation(bool Quickly = false) _prepareAsyncCount = -2147483648 - Initialize() + GoToState(STATE_END) EndFunction int Function GetStatus() @@ -963,6 +996,10 @@ EndFunction Function ContinueSetup(bool abContinue) Log("ContinueSetup() can only be called during setup", "ContinueSetup()") EndFunction +bool Function UndressAndStripActors(string activeScene) + Log("Actors can be undressed only during setup", "UndressAndStripActors()") + return false +EndFunction Function CreateInstance(Actor[] akSubmissives, String[] asPrimaryScenes, String[] asLeadInScenes, String[] asCustomScenes, int aiFurnitureStatus) native String[] Function GetLeadInScenes() native @@ -1000,14 +1037,6 @@ EndProperty State Animating Event OnBeginState() SetFurnitureIgnored(true) - String activeScene = GetActiveScene() - int[] strips_ = SexLabRegistry.GetStripDataA(activeScene, "") - int[] sex_ = SexLabRegistry.GetPositionSexA(activeScene) - int i = 0 - While (i < _Positions.Length) - ActorAlias[i].ReadyActor(strips_[i], sex_[i]) - i += 1 - EndWhile _SFXTimer = Config.SFXDelay _animationSyncCount = 0 SendModEvent("SSL_READY_Thread" + tid) @@ -1083,7 +1112,7 @@ State Animating SendThreadEvent("OrgasmStart") TriggerOrgasm() EndIf - ElseIf (ctype == Config.CLIMAXTYPE_SCENE) + ElseIf ((ctype == Config.CLIMAXTYPE_SCENE) || (!HasPlayer)) int[] cactors = SexLabRegistry.GetClimaxingActors(GetActiveScene(), asNewStage) If (cactors.Length > 0) SendThreadEvent("OrgasmStart") @@ -1321,7 +1350,6 @@ State Animating Event OnEndState() UnregisterForUpdate() - UnregisterCollision() SetFurnitureIgnored(false) EndEvent EndState @@ -1415,6 +1443,8 @@ State Ending Event OnBeginState() Config.DisableThreadControl(self as sslThreadController) SendModEvent("SSL_CLEAR_Thread" + tid, "", 1.0) + MoveActorsAwayFromPlayer() + UnregisterCollision() If(IsObjectiveDisplayed(0)) SetObjectiveDisplayed(0, False) EndIf @@ -1505,6 +1535,63 @@ Function SetFurnitureIgnored(bool disabling = true) CenterRef.SetNoFavorAllowed(disabling) EndFunction +int Function IndexTravelComplex(int curIdx, bool abReverse = false, Actor akSkip = None) + int posLen = _Positions.Length + If (posLen > 1) + int step = 1 + If (abReverse) + step = -1 + EndIf + int newIdx = (curIdx + step) + int i = 0 + While (i < posLen) + If (newIdx >= posLen) + newIdx = 0 + ElseIf (newIdx < 0) + newIdx = (posLen - 1) + EndIf + If (newIdx != curIdx) && (akSkip == None || _Positions[newIdx] != akSkip) + return newIdx + EndIf + newIdx += step + i += 1 + EndWhile + EndIf + return curIdx +EndFunction + +Function MoveActorsAwayFromPlayer(bool MovePlayer = false) + float adjOffset = 35.0 + int moveDir = -1 + int i = 0 + while (i < _Positions.Length) + Actor curActor = _Positions[i] + If (curActor != PlayerRef) + If (curActor.GetDistance(PlayerRef) < 50.0) + If (MovePlayer) + PlayerRef.SetPosition(PlayerRef.X + 70, PlayerRef.Y, PlayerRef.Z) + return + Else + moveDir += 1 + EndIf + float newX = curActor.X + float newY = curActor.Y + If (moveDir == 0) + newY += adjOffset + ElseIf (moveDir == 1) + newX += adjOffset + ElseIf (moveDir == 2) + newY -= adjOffset + ElseIf (moveDir == 3) + newX -= adjOffset + EndIf + curActor.SetPosition(newX, newY, curActor.Z) + EndIf + EndIf + i += 1 + EndWhile +EndFunction + ; ------------------------------------------------------- ; ; --- Function Declarations --- ; ; ------------------------------------------------------- ; @@ -1633,7 +1720,7 @@ bool[] Function ListDetectedInteractionsInternal(Actor akPosition, Actor akPartn return ListDetectedPhysicsInteractionsInternal(akPosition, akPartner) EndIf ;COMEBACK: Re-assess the need for the fallback with new typing update - If (Config.FallbackToTagsForDetection && HasSceneTag("RimTagged")) + If (Config.FallbackToTagsForDetection && HasSceneTag("PosTagged")) return ListDetectedPosTagsInteractionsInternal(akPosition) EndIf ;If all else fails, returns pAnal, which has the highest enj factor @@ -1866,17 +1953,17 @@ Faction Property PlayerMarriedFaction Auto ; -------------------------------------------------- ; float Function CalculateInteractionFactor(Actor akPosition, bool[] interActive) - float factorTotal = 0.5 + float factorTotal = 0.25 float[] factorValues = sslSystemConfig.GetEnjoymentFactors() int len = interActive.Length int i = 0 While (i < len) If (interActive[i]) ; velFactor: [Range: 1.0 to 2.0] - ; factorValue: [Default: 1 to 12] [Adjusted: 0.583 to 4.25] - ; factorType: [Result: 0.583 to 8.5] + ; factorValue: [Default: 1 to 12] [Adjusted: 0.2 to 2.4] + ; factorType: [Result: 0.2 to 4.8] float velFactor = CalcInterVelocityFactor(akPosition, i) - float adjustedFactor = 0.25 + (factorValues[i] / 3.0) + float adjustedFactor = 0.25 + (factorValues[i] / 5.0) factorTotal += (adjustedFactor * velFactor) ;Log("InterFactor: TYPE: " + i + ", Value: " + factorValues[i] + ", Adjusted: " + adjustedFactor) EndIf @@ -1943,17 +2030,18 @@ int Function IdentifyConsentSubStatus() return ConSubStatus EndFunction -bool Function SameSexThread() - bool SameSexThread = False - int MaleCount = sslActorLibrary.CountMale(_Positions) - int FemCount = sslActorLibrary.CountFemale(_Positions) - int FutaCount = sslActorLibrary.CountFuta(_Positions) - int CrtMaleCount = sslActorLibrary.CountCrtMale(_Positions) - int CrtFemaleCount = sslActorLibrary.CountCrtFemale(_Positions) - If (_Positions.Length != 1 && ((MaleCount + CrtMaleCount == _Positions.Length) || (FemCount + CrtFemaleCount == _Positions.Length) || (FutaCount == _Positions.Length))) - SameSexThread = true ; returns False for solo scenes +bool[] Function CheckActiveHomoTypes() + int PosCount = _Positions.Length + int[] SexCount = sslActorLibrary.CountSexAll(_Positions) + bool[] HomoTypes = Utility.CreateBoolArray(5, False) + HomoTypes[0] = (PosCount == 1) ;solo + If (PosCount > 1) + HomoTypes[1] = (SexCount[0] + SexCount[3] == PosCount) ;males + HomoTypes[2] = (SexCount[1] + SexCount[4] == PosCount) ;females + HomoTypes[3] = (SexCount[2] == PosCount) ;futa + HomoTypes[4] = (SexCount[0] + SexCount[2] + SexCount[3] == PosCount) ;futa with males EndIf - return SameSexThread + return HomoTypes EndFunction bool Function CrtMaleHugePP() @@ -2035,9 +2123,9 @@ bool[] Function CheckSpecificStageTags(string asScene, string asStage) ret[7] = SexLabRegistry.IsStageTag(asScene, asStage, "Standing") ret[8] = SexLabRegistry.IsStageTag(asScene, asStage, "Forced") ret[9] = SexLabRegistry.IsStageTag(asScene, asStage, "Unconscious") - ret[10] = SexLabRegistry.IsStageTag(asScene, asStage, "RimTagged") - ret[11] = SexLabRegistry.IsStageTag(asScene, asStage, "RimFast") - ret[12] = SexLabRegistry.IsStageTag(asScene, asStage, "RimSlow") + ret[10] = SexLabRegistry.IsStageTag(asScene, asStage, "PosTagged") + ret[11] = SexLabRegistry.IsStageTag(asScene, asStage, "PosFast") + ret[12] = SexLabRegistry.IsStageTag(asScene, asStage, "PosSlow") return ret EndFunction @@ -2071,104 +2159,42 @@ EndFunction ; --- Enjoyment Game --- ; ; ---------------------------------------------- ; -Function GameAdjustEnj(Actor akActor, Actor akPartner, int AdjustBy = 0) - If (AdjustBy != 0) - AdjustEnjoyment(akPartner, AdjustBy) +Function GameRaiseEnjoyment(Actor akTarget) + If (SexLabUtil.IsGodModeEnabled()) + AdjustEnjoyment(akTarget, 1) return - Else - float arousalstat = PapyrusUtil.ClampFloat(SexlabStatistics.GetStatistic(akPartner, 17), 0.0, 100.0) - AdjustBy = PapyrusUtil.ClampInt((arousalstat as int / 50), 1, 2) - int basesex = GetActorSex(akPartner) - If (basesex != 0 || basesex != 3) - AdjustBy += GetOrgasmCount(akPartner) - EndIf - AdjustEnjoyment(akPartner, AdjustBy) + ElseIf (PlayerRef.GetActorValue("Stamina") > Config.GameStaminaCost) + PlayerRef.DamageActorValue("Stamina", Config.GameStaminaCost) + AdjustEnjoyment(akTarget, 1) EndIf EndFunction -Function GameRaiseEnjoyment(Actor akActor, Actor akPartner) - If (akActor.GetActorValuePercentage("Stamina") > 0.10) - akActor.DamageActorValue("Stamina", Config.GameStaminaCost) - GameAdjustEnj(akActor, akPartner) - EndIf -EndFunction - -Function GameHoldback(Actor akActor, Actor akPartner) - If (akActor.GetActorValuePercentage("Magicka") > 0.10) - akActor.DamageActorValue("Magicka", Config.GameMagickaCost) - GameAdjustEnj(akActor, akPartner, -1) +Function GameHoldback(Actor akTarget) + If (SexLabUtil.IsGodModeEnabled()) + AdjustEnjoyment(akTarget, -1) + return + ElseIf (PlayerRef.GetActorValue("Magicka") > Config.GameMagickaCost) + PlayerRef.DamageActorValue("Magicka", Config.GameMagickaCost) + AdjustEnjoyment(akTarget, -1) EndIf EndFunction -Function ProcessEnjGameArg(String arg, Actor akPlayer, Actor akPartner) - Actor targetActor = None - If (_Positions.Length == 1 || Input.IsKeyPressed(Config.GameUtilityKey)) - targetActor = akPlayer ;change self/player enj - ElseIf (_Positions.Length > 1) - targetActor = akPartner ;change partner enj - EndIf - If (arg == "Magicka") ;HoldbackKey - GameHoldback(akPlayer, targetActor) - ElseIf (arg == "Stamina") ;RaiseEnjKey - If ((Config.GameRequiredOnHighEnj) && (GetEnjoyment(targetActor) > 80) && (targetActor == akPlayer)) - ActorAlias[GetPositionIdx(targetActor)].RegisterRaiseEnjAttempt() - Else - GameRaiseEnjoyment(akPlayer, targetActor) - EndIf +Function ProcessEnjGameArg(String arg, Actor akPartner) + Actor akTarget = None + If (Input.IsKeyPressed(Config.ModifierKey)) + akTarget = akPartner ;change partner enj + Else + akTarget = PlayerRef ;change self/player enj EndIf -EndFunction - -Actor Function GameChangePartner(Actor akActor, int idx = -1) - Actor akPartner = None - Actor tempRef = None - If (_Positions.Length > 1) - If (idx < 0) - int idxPartner = sslUtility.IndexTravel(GetPositionIdx(akActor), _Positions.Length) - akPartner = ActorAlias[idxPartner].GetActorRef() - If (akActor == PlayerRef) - Log("[EnjGame] " + akActor.GetDisplayName() + "'s current partner is " + akPartner.GetDisplayName()) - EndIf + If (arg == "Magicka") + GameHoldback(akTarget) + ElseIf (arg == "Stamina") + If ((Config.GameRequiredOnHighEnj) && (GetEnjoyment(PlayerRef) > 80)) + ActorAlias[GetPositionIdx(PlayerRef)].RegisterRaiseEnjAttempt() Else - tempRef = ActorAlias[idx].GetActorRef() - If (tempRef == None || tempRef == akPartner || tempRef == akActor || tempRef == PlayerRef) - return akPartner - EndIf - akPartner = tempRef - If (akActor == PlayerRef) - Log("[EnjGame] " + akActor.GetDisplayName() + " changed focus to " + akPartner.GetDisplayName()) - EndIf - Config.SelectedSpell.Cast(akPartner, akPartner) + GameRaiseEnjoyment(akTarget) EndIf EndIf - return akPartner -EndFunction - -int Function GameNextPartnerIdx(Actor akActor, Actor akPartner, bool abReverse) - int PartnerIdx = GetPositionIdx(akPartner) - If (Positions.Length <= 2) - return PartnerIdx - EndIf - int ActorIdx = GetPositionIdx(akActor) - int step = 1 - If (abReverse) - step = -1 - EndIf - int NewIdx = (PartnerIdx + step) - int PosLen = Positions.Length - int i = 0 - While (i < PosLen) - If (NewIdx >= PosLen) - NewIdx = 0 - ElseIf (NewIdx < 0) - NewIdx = PosLen - 1 - EndIf - If (NewIdx != ActorIdx) && (NewIdx != PartnerIdx) - return NewIdx - EndIf - NewIdx += step - i += 1 - EndWhile - return PartnerIdx EndFunction Function EnjBasedSkipToLastStage(bool abSkip) @@ -3012,6 +3038,14 @@ Function SetBedding(int flag = 0) SetBedFlag(flag) EndFunction +int Function GetPain(Actor ActorRef) + sslActorAlias ref = ActorAlias(ActorRef) + If (!ref) + return 0 + EndIf + return ref.GetPain() +EndFunction + bool property DisableOrgasms hidden bool Function Get() bool ret = false diff --git a/dist/Source/Scripts/sslThreadSlots.psc b/dist/Source/Scripts/sslThreadSlots.psc index 46fe39151..83cc86110 100644 --- a/dist/Source/Scripts/sslThreadSlots.psc +++ b/dist/Source/Scripts/sslThreadSlots.psc @@ -99,6 +99,7 @@ Function StopThread(sslThreadController Slot) If (Slot.GetStatus() != Slot.STATUS_IDLE) sslLog.Log("Stopping thread " + Slot + " in state " + Slot.GetState()) EndIf + Slot.EndAnimation() Slot.Initialize() EndFunction diff --git a/dist/meshes/actors/character/animations/SexLab/FNIS_SexLab_List.txt b/dist/meshes/actors/character/animations/SexLab/FNIS_SexLab_List.txt new file mode 100644 index 000000000..a1aff981a --- /dev/null +++ b/dist/meshes/actors/character/animations/SexLab/FNIS_SexLab_List.txt @@ -0,0 +1,2 @@ +b SexLab_FemaleUndress SexLab_FemaleUndress.hkx +b SexLab_MaleUndress SexLab_MaleUndress.hkx diff --git a/dist/meshes/actors/character/animations/SexLab/Arrok_FemaleUndress.hkx b/dist/meshes/actors/character/animations/SexLab/SexLab_FemaleUndress.hkx similarity index 100% rename from dist/meshes/actors/character/animations/SexLab/Arrok_FemaleUndress.hkx rename to dist/meshes/actors/character/animations/SexLab/SexLab_FemaleUndress.hkx diff --git a/dist/meshes/actors/character/animations/SexLab/Arrok_MaleUndress.hkx b/dist/meshes/actors/character/animations/SexLab/SexLab_MaleUndress.hkx similarity index 100% rename from dist/meshes/actors/character/animations/SexLab/Arrok_MaleUndress.hkx rename to dist/meshes/actors/character/animations/SexLab/SexLab_MaleUndress.hkx diff --git a/dist/meshes/actors/character/behaviors/FNIS_SexLab_Behavior.hkx b/dist/meshes/actors/character/behaviors/FNIS_SexLab_Behavior.hkx new file mode 100644 index 000000000..d439ac2b0 Binary files /dev/null and b/dist/meshes/actors/character/behaviors/FNIS_SexLab_Behavior.hkx differ diff --git a/scripts/ML/main.py b/scripts/ML/main.py index c7c716255..a286f8573 100644 --- a/scripts/ML/main.py +++ b/scripts/ML/main.py @@ -187,5 +187,10 @@ def _build_arg_parser() -> argparse.ArgumentParser: out_dir = Path(args.out_dir) if args.out_dir else None model_path = _run_training(mods_path=args.mods_path, out_dir=out_dir) - ini_path = Path(args.ini_path) if args.ini_path else Path("dist/SKSE/SexLab/LinearModel.ini") + if args.ini_path: + ini_path = Path(args.ini_path) + else: + repo_root = Path(__file__).resolve().parents[2] + ini_path = repo_root / "dist" / "SKSE" / "SexLab" / "LinearModel.ini" + unify_ini_files(model_path, ini_path) diff --git a/src/Thread/Interface/SceneMenu.cpp b/src/Thread/Interface/SceneMenu.cpp index ef4a2088b..09d97ec77 100644 --- a/src/Thread/Interface/SceneMenu.cpp +++ b/src/Thread/Interface/SceneMenu.cpp @@ -54,8 +54,6 @@ namespace Thread::Interface UpdatePositions(); UpdateActiveScene(); input->AddEventSink(this); - controls->ToggleControls(RE::ControlMap::UEFlag::kActivate, false, false); - controls->ToggleControls(RE::ControlMap::UEFlag::kMovement, false, false); if (Settings::bHideHUD) { RE::UIMessageQueue::GetSingleton()->AddMessage(RE::HUDMenu::MENU_NAME, RE::UI_MESSAGE_TYPE::kHide, nullptr); } @@ -64,8 +62,6 @@ namespace Thread::Interface case Type::kHide: logger::info("SceneMenu closed."); RE::UIMessageQueue::GetSingleton()->AddMessage(RE::HUDMenu::MENU_NAME, RE::UI_MESSAGE_TYPE::kShow, nullptr); - controls->ToggleControls(RE::ControlMap::UEFlag::kActivate, true, false); - controls->ToggleControls(RE::ControlMap::UEFlag::kMovement, true, false); controls->AllowTextInput(false); input->RemoveEventSink(this); threadInstance = nullptr; diff --git a/src/UserData/Settings.cpp b/src/UserData/Settings.cpp index 7c61e7ea9..5d5143601 100644 --- a/src/UserData/Settings.cpp +++ b/src/UserData/Settings.cpp @@ -142,8 +142,8 @@ Settings::KeyType Settings::GetKeyType(uint32_t a_keyCode) return KeyType::Select; if (a_keyCode == get(Settings::iKeyEnd)) return KeyType::End; - if (a_keyCode == get(Settings::iKeyExtra2)) - return KeyType::Extra2; + if (a_keyCode == get(Settings::iKeyMenu)) + return KeyType::Menu; if (a_keyCode == get(Settings::iKeyMod)) return KeyType::Modes; if (a_keyCode == get(Settings::iKeyReset)) @@ -169,8 +169,8 @@ uint32_t Settings::GetKeyCode(KeyType a_keyType) return get(Settings::iKeyAdvance); case KeyType::End: return get(Settings::iKeyEnd); - case KeyType::Extra2: - return get(Settings::iKeyExtra2); + case KeyType::Menu: + return get(Settings::iKeyMenu); case KeyType::Modes: return get(Settings::iKeyMod); case KeyType::Reset: diff --git a/src/UserData/Settings.h b/src/UserData/Settings.h index d5f4b882d..6b763d6ac 100644 --- a/src/UserData/Settings.h +++ b/src/UserData/Settings.h @@ -21,7 +21,7 @@ struct Settings Right, Select, End, - Extra2, + Menu, Modes, Reset, }; diff --git a/src/UserData/config.def b/src/UserData/config.def index 5aa948163..493cda6fe 100644 --- a/src/UserData/config.def +++ b/src/UserData/config.def @@ -5,7 +5,7 @@ INI_SETTING(fFurnitureScanRadius, 750.0f, "Animation") INI_SETTING(fMinScale, 0.88f, "Animation") INI_SETTING(bAllowDead, false, "Animation") INI_SETTING(fAdjustStepSizeIncrement, 0.1f, "Animation") -INI_SETTING(bAdjustNodes, true, "Animation") +INI_SETTING(bAdjustNodes, false, "Animation") INI_SETTING(fGhostModeAlpha, 0.6f, "Animation") INI_SETTING(fFurnitureSquare, 32.0f, "Animation") INI_SETTING(fFurnitureSquareHeight, 128.0f, "Animation") diff --git a/src/UserData/mcm.def b/src/UserData/mcm.def index 0121f409a..6ca211ec6 100644 --- a/src/UserData/mcm.def +++ b/src/UserData/mcm.def @@ -19,6 +19,9 @@ MCM_SETTING(bSubmissivePlayer, false) MCM_SETTING(bSubmissiveTarget, false) MCM_SETTING(bMatchMakerActive, false) MCM_SETTING(bLipsFixedValue, true) +MCM_SETTING(bAdjustStage, true) +MCM_SETTING(bHideHUD, false) +MCM_SETTING(bUseSceneMenu, true) MCM_SETTING(iAskBed, 1) MCM_SETTING(iNPCBed, 1) @@ -30,40 +33,7 @@ MCM_SETTING(iLovenseStrength, 10) MCM_SETTING(iLovenseStrengthOrgasm, 20) MCM_SETTING(fLovenseDurationOrgasm, 8) -// KeyBinds/Scene Control Related -MCM_SETTING(iKeyUp, 0xC8) // Up Arrow -MCM_SETTING(iKeyDown, 0xD0) // Down Arrow -MCM_SETTING(iKeyLeft, 0xCB) // Left Arrow -MCM_SETTING(iKeyRight, 0xCD) // Right Arrow -MCM_SETTING(iKeyAdvance, 0x39) // Space -MCM_SETTING(iKeyEnd, 0xCF) // End -MCM_SETTING(iKeyExtra2, 0x12) // E -MCM_SETTING(iKeyMod, 0x2A) // Shift -MCM_SETTING(iKeyReset, 0x1D) // Ctrl - -MCM_SETTING(iToggleFreeCamera, 81) -MCM_SETTING(iTargetActor, 49) - -// TODO: Add these to MCM -MCM_SETTING(bAdjustTargetStage, false) MCM_SETTING(fAdjustStepSize, 0.5f) -MCM_SETTING(bAdjustStage, true) -MCM_SETTING(bHideHUD, false) - -// MCM_SETTING(iAdjustStage, 157) -// MCM_SETTING(iBackwards, 54) -MCM_SETTING(iChangeAnimation, 24) -// MCM_SETTING(iChangePositions, 13) -// MCM_SETTING(iAdjustChange, 37) -// MCM_SETTING(iAdjustForward, 38) -// MCM_SETTING(iAdjustSideways, 40) -// MCM_SETTING(iAdjustUpward, 39) -// MCM_SETTING(iRealignActors, 26) -MCM_SETTING(iMoveScene, 27) -// MCM_SETTING(iRestoreOffsets, 12) -// MCM_SETTING(iRotateScene, 22) -// MCM_SETTING(iAdjustSchlong, 46) - MCM_SETTING(fShakeStrength, 0.7f) MCM_SETTING(fAutoSUCSM, 5.0f) MCM_SETTING(fMaleVoiceDelay, 5.0f) @@ -84,6 +54,44 @@ MCM_SETTING(sOptionalTags, ""s) MCM_SETTING(iStripForms, std::vector({ 1032555423, 1, 1032555423, 1, 806420, 0, 352928413, 1 })) MCM_SETTING(fTimers, std::vector({ 10.0f, 15.0f, 25.0f, 7.0f })) +// KeyBinds/Global Hotkeys +MCM_SETTING(iToggleFreeCamera, 0x51) // Numpad 3 +MCM_SETTING(iTargetActor, 0x31) // N +MCM_SETTING(iToggleThreadControl, 0x14) // T + +// KeyBinds/Scene Control Related +MCM_SETTING(iKeyUp, 0xC8) // Up Arrow +MCM_SETTING(iKeyDown, 0xD0) // Down Arrow +MCM_SETTING(iKeyLeft, 0xCB) // Left Arrow +MCM_SETTING(iKeyRight, 0xCD) // Right Arrow +MCM_SETTING(iKeyAdvance, 0x39) // Space +MCM_SETTING(iKeyEnd, 0xCF) // End +MCM_SETTING(iKeyMenu, 0x12) // E +MCM_SETTING(iKeyMod, 0x2A) // Shift +MCM_SETTING(iKeyReset, 0x1D) // Ctrl + +// KeyBinds/Legacy Hotkeys +MCM_SETTING(iMoveScene, 0x25) // K +MCM_SETTING(iChangeAnimation, 0x18) // O +MCM_SETTING(iChangePositions, 0x0D) // Numpad Enter +MCM_SETTING(iOffsetAdjustMode, 0x4E) // Numpad + +MCM_SETTING(iToggleAdjustStage, 0x52) // Numpad 0 +MCM_SETTING(iRestoreOffsets, 0x4A) // Numpad - + +// MCM_SETTING(iAdjustStage, 157) +// MCM_SETTING(iBackwards, 54) +// MCM_SETTING(iChangeAnimation, 24) +// MCM_SETTING(iChangePositions, 13) +// MCM_SETTING(iAdjustChange, 37) +// MCM_SETTING(iAdjustForward, 38) +// MCM_SETTING(iAdjustSideways, 40) +// MCM_SETTING(iAdjustUpward, 39) +// MCM_SETTING(iRealignActors, 26) +// MCM_SETTING(iMoveScene, 27) +// MCM_SETTING(iRestoreOffsets, 12) +// MCM_SETTING(iRotateScene, 22) +// MCM_SETTING(iAdjustSchlong, 46) + // Enjoyment Related MCM_SETTING(bInternalEnjoymentEnabled, true) @@ -107,11 +115,9 @@ MCM_SETTING(fEnjMultSub, 0.8f) MCM_SETTING(fEnjMultDom, 1.2f) MCM_SETTING(fPainHugePPMult, 0.5f) -MCM_SETTING(iGameUtilityKey, 42) -MCM_SETTING(iGamePauseKey, 48) -MCM_SETTING(iGameRaiseEnjKey, 256) -MCM_SETTING(iGameHoldbackKey, 257) -MCM_SETTING(iGameSelectNextPos, 34) +MCM_SETTING(iGamePauseKey, 0x19) // P +MCM_SETTING(iGameRaiseEnjKey, 0x100) // RMB +MCM_SETTING(iGameHoldbackKey, 0x101) // LMB MCM_SETTING(iEnjGameStaminaCost, 10) MCM_SETTING(iEnjGameMagickaCost, 10) diff --git a/xmake.lua b/xmake.lua index 27c4c8086..40fa7ef78 100644 --- a/xmake.lua +++ b/xmake.lua @@ -2,7 +2,7 @@ set_xmakever("2.9.5") -- Globals PROJECT_NAME = "SexLabUtil" -PROJECT_VERSION = "2.16.0" +PROJECT_VERSION = "2.17.0" -- Includes includes("lib/CommonLibSSE-NG/xmake.lua")