From 2885eee5abef9a49e099f0a64721d746b4ee48d5 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Thu, 19 Feb 2026 20:23:42 +0500 Subject: [PATCH 01/32] GodMode support for EnjGame + Remove pain on non-SLSO orgasms --- dist/Source/Scripts/sslActorAlias.psc | 67 ++++++++++++++------------ dist/Source/Scripts/sslThreadModel.psc | 29 ++++------- 2 files changed, 47 insertions(+), 49 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index c8167866..cc67883c 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -788,12 +788,14 @@ State Animating 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) + If (_bEnjEnabled) + If (_FullEnjoyment >= 100) + DoOrgasm() + EndIf + bool NoStaminaEndScenario = (_Config.NoStaminaEndsScene && !_victim && _ActorRef.GetActorValuePercentage("Stamina") < 0.10) + If NoStaminaEndScenario + _Thread.EnjBasedSkipToLastStage(true) + EndIf EndIf ; Loop _LoopDelay += UPDATE_INTERVAL @@ -886,21 +888,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 + "]") @@ -1394,16 +1398,17 @@ int function CalcReaction() 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 = "") @@ -1449,8 +1454,10 @@ 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() diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index 3cdb511f..1c0583f8 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -2071,32 +2071,23 @@ EndFunction ; --- Enjoyment Game --- ; ; ---------------------------------------------- ; -Function GameAdjustEnj(Actor akActor, Actor akPartner, int AdjustBy = 0) - If (AdjustBy != 0) - AdjustEnjoyment(akPartner, AdjustBy) - 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) - EndIf -EndFunction - Function GameRaiseEnjoyment(Actor akActor, Actor akPartner) - If (akActor.GetActorValuePercentage("Stamina") > 0.10) + If (SexLabUtil.IsGodModeEnabled()) + AdjustEnjoyment(akPartner, 1) + return + ElseIf (akActor.GetActorValuePercentage("Stamina") > Config.GameStaminaCost) akActor.DamageActorValue("Stamina", Config.GameStaminaCost) - GameAdjustEnj(akActor, akPartner) + AdjustEnjoyment(akPartner, 1) EndIf EndFunction Function GameHoldback(Actor akActor, Actor akPartner) - If (akActor.GetActorValuePercentage("Magicka") > 0.10) + If (SexLabUtil.IsGodModeEnabled()) + AdjustEnjoyment(akPartner, -1) + return + ElseIf (akActor.GetActorValuePercentage("Magicka") > Config.GameMagickaCost) akActor.DamageActorValue("Magicka", Config.GameMagickaCost) - GameAdjustEnj(akActor, akPartner, -1) + AdjustEnjoyment(akPartner, -1) EndIf EndFunction From 5234a965189220e2ac94034c8aabf1acf682ebe3 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Thu, 19 Feb 2026 02:19:30 +0500 Subject: [PATCH 02/32] fix variables in env.example --- .env.example | 12 ++++++------ scripts/ML/main.py | 7 ++++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.env.example b/.env.example index 1dff6bcb..462d2555 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/scripts/ML/main.py b/scripts/ML/main.py index c7c71625..a286f857 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) From c24a94ee6d682b2c9b4f48f9c19fe75dead25f47 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 23 Feb 2026 02:44:53 +0500 Subject: [PATCH 03/32] fix access to undressing anim --- dist/Source/Scripts/sslActorAlias.psc | 4 ++-- .../animations/SexLab/FNIS_SexLab_List.txt | 2 ++ ...emaleUndress.hkx => SexLab_FemaleUndress.hkx} | Bin ...ok_MaleUndress.hkx => SexLab_MaleUndress.hkx} | Bin .../character/behaviors/FNIS_SexLab_Behavior.hkx | Bin 0 -> 5904 bytes 5 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 dist/meshes/actors/character/animations/SexLab/FNIS_SexLab_List.txt rename dist/meshes/actors/character/animations/SexLab/{Arrok_FemaleUndress.hkx => SexLab_FemaleUndress.hkx} (100%) rename dist/meshes/actors/character/animations/SexLab/{Arrok_MaleUndress.hkx => SexLab_MaleUndress.hkx} (100%) create mode 100644 dist/meshes/actors/character/behaviors/FNIS_SexLab_Behavior.hkx diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index cc67883c..519f9618 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -482,9 +482,9 @@ State Ready If (DoUndress) DoUndress = false If (_sex == 0) - Debug.SendAnimationEvent(_ActorRef, "Arrok_Undress_G1") + Debug.SendAnimationEvent(_ActorRef, "SexLab_MaleUndress") Else - Debug.SendAnimationEvent(_ActorRef, "Arrok_Undress_G1") + Debug.SendAnimationEvent(_ActorRef, "SexLab_FemaleUndress") EndIf Utility.Wait(0.6) EndIf 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 00000000..a1aff981 --- /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 0000000000000000000000000000000000000000..d439ac2b0fbe59a719a4a1955338852abca5bf4f GIT binary patch literal 5904 zcmeHLO>7%Q6rS?aHvANeatH^C;X*Hs+=8k~9P0cvjc8g6(;rm@du@;LQfF<}n~T%FS>AfdoE)=z&8d5XuR1LItUq?_1B4G8WB>J!2cylKAS8@-n??$8hAFkuQNOTEBn4 zE9mqHvsSSpu1sER1be3!rRAjTN>$pl<9E{LE1SbmhWxk|w-n$n(;$ii?cwmAFK zt;WbidbT#6cg#hp38MY&)h9XPlwq4jt}G`^t6*9$rlli3x%{-(HCZ;Ry+C`ez4c=- zljm&1s+o>iv6yTpl|Ns*e2ct^vh*VMIMcXoZ zc|kIx*y64j^uGno=)@Iv*;X<%p8Qw>9 z(fSx$as>0zL8AP+KcL;itczcm?`)wgYkuco+Z{yVI^B-LJc4W49TV>#$wvm@_V;Y? z1p7DJ-Vlt9ZhihE>zS5I$BbO&h@3ad@}yO;C7z2zh(0fO4Z$Tv^Y0##AE3Fq9o&!F zAEm>tFEck2MUV2kx`X>FOrr7%onJqb!vZOvu2*-D--he&(uXLg=ScW_hqm3JnW04Y zuy(iGp_TcY@pbfpdf+^2eZrQ>3qEd{^9J8@YUer}r8b@zJn5DO=He$rO$r=cbfacck>8cy*_%+(LetdPMhz(y~Xq9yZ($m3B4pktpCqjNKrQLat94j z`=fuGsDY8^&9|b%oHqUZ*Y6BEuV7pIwZ2yyJ$*mT;J9GBNAFnoK?Tl^7bnPzXuA>q zo?8Wf_nn8mdu?E@9&e-NZfvUe&&0u+%xAp+ZM{EjL1t*XFP>)U^Q7B)J#<@XSGQRl zpxajdL2X3~Q~XNt&&iqJO7c2otIOxXe^W+??Z*)X+4p9 z34iWSTJq%uv#LGEDn>!uQ?~JnI4X?-_E!Ep{<)th7B{vnArQ}YI)`5tCh@h%HpH}5 z2zZ#qWXUk?wCOmABt+LUBb}4g&VI%_th5*9enbs@yN$g0_=+>`IQHo|pF^3s?hR_n z##a?&K3n5Ezn_UuPlDJBi~>pEZJ>@tT?3lfJV{^`NMV~+f$KmWFViug0mSj5oCK7E}3%w4+M&JkPz#0&{2OJ=)a0U7X(7?@a z4Y~y#!woDBtN}@E&N?^fF3brXgKk2{p{w+<4TuLiC_(Q8E&(y14vYft199L(U@veT zNB~~|hkze|B=8Gx6krik&@t#U(0ib>&`&|PFkg!O>;qQO&O#Gapai@M#1RH%7Fl2w zpxxj)DBHz#tinnEI(|~h&cc5bYeK&Z%{8IjgubrqI%*qNw%`pPYeP;JdZ)7M(4)$3 z(vP(wCkY)>b^>daQg#!%g}6G-4P`UVnz9pE!zF;62DGc}6|7xT*$LQ5jkHM^1)9p!xrlua&~FtO12%y)}V41iQiYfn;HGZ7K9~ V{VB`zqXv}s$XE8qu=TT^`Y-puzkL7z literal 0 HcmV?d00001 From acdcd642235740516c25a3667a1bc3debd9c8593 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 23 Feb 2026 03:16:09 +0500 Subject: [PATCH 04/32] non-pc scenes revert to orgasm stages --- dist/Source/Scripts/sslActorAlias.psc | 19 +++++++++++++------ dist/Source/Scripts/sslConfigMenu.psc | 2 +- dist/Source/Scripts/sslSystemConfig.psc | 8 ++++++++ dist/Source/Scripts/sslThreadModel.psc | 6 +++--- src/UserData/mcm.def | 2 ++ 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 519f9618..ae8aa082 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -748,7 +748,6 @@ State Animating EndIf _CurrentInteractions = _Thread.ListDetectedInteractionsInternal(_ActorRef) If (_LoopEnjoymentDelay >= _EnjoymentDelay) - _LoopEnjoymentDelay = 0 UpdateEffectiveEnjoymentCalculations() EndIf int strength = CalcReaction() @@ -818,9 +817,13 @@ State Animating Utility.Wait(0.7) EndIf String expression = GetActorExpression() - If (expression && _Config.UseExpressions && _livestatus == LIVESTATUS_ALIVE) + bool ExpresssionsEnabled = (expression && _Config.UseExpressions && _livestatus == LIVESTATUS_ALIVE) + If (ExpresssionsEnabled) sslBaseExpression.ApplyExpression(expression, _ActorRef, afStrength) - If (_Config.DebugMode) + EndIf + If (_LoopEnjoymentDelay >= _EnjoymentDelay) + _LoopEnjoymentDelay = 0 + If (_Config.DebugMode && ExpresssionsEnabled) Log("Expression? " + expression + "; Strength? " + afStrength + "; OpenMouth? " + OpenMouth, "sslBaseExpression.ApplyExpression()") EndIf EndIf @@ -1225,9 +1228,10 @@ Function ResetEnjoymentVariables() 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() @@ -1393,8 +1397,11 @@ 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() diff --git a/dist/Source/Scripts/sslConfigMenu.psc b/dist/Source/Scripts/sslConfigMenu.psc index a1dfe995..c33dc10c 100644 --- a/dist/Source/Scripts/sslConfigMenu.psc +++ b/dist/Source/Scripts/sslConfigMenu.psc @@ -368,6 +368,7 @@ Function AnimationSettings() AddStateOptionBool("bRedressVictim", "$SSL_bRedressVictim") AddStateOptionBool("bDisableTeleport", "$SSL_bDisableTeleport") AddStateOptionBool("bShowInMap", "$SSL_bShowInMap") + AddStateOptionBool("bHideHUD", "$SSL_bHideHUD") AddStateOptionBool("bSetAnimSpeedByEnjoyment", "$SSL_bSetAnimSpeedByEnjoyment") AddMenuOptionST("FurnitureNPC", "$SSL_FurnitureNPC", _NPCFurnOpt[sslSystemConfig.GetSettingInt("iNPCBed")]) AddMenuOptionST("FurniturePlayer", "$SSL_FurniturePlayer", _PlFurnOpt[sslSystemConfig.GetSettingInt("iAskBed")]) @@ -1474,7 +1475,6 @@ function PlayerHotkeys() AddEmptyOption() AddStateOptionKey("iTargetActor", "$SSL_iTargetActor", needsRegister = true) AddStateOptionKey("iToggleFreeCamera", "$SSL_iToggleFreeCamera", needsRegister = true) - ;AddStateOptionBool("bHideHUD", "$SSL_bHideHUD") AddHeaderOption("$SSL_SceneManipulation") AddEmptyOption() diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index 6f6d57d0..f70e745d 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -485,6 +485,14 @@ bool property HideHUD hidden SetSettingBool("bHideHUD", aSet) EndFunction EndProperty +bool property HideUI hidden + bool Function Get() + return GetSettingBool("bHideUI") + EndFunction + Function Set(bool aSet) + SetSettingBool("bHideUI", aSet) + EndFunction +EndProperty ; Floats float property CumTimer hidden diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index 1c0583f8..295baf23 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -1083,7 +1083,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") @@ -2075,7 +2075,7 @@ Function GameRaiseEnjoyment(Actor akActor, Actor akPartner) If (SexLabUtil.IsGodModeEnabled()) AdjustEnjoyment(akPartner, 1) return - ElseIf (akActor.GetActorValuePercentage("Stamina") > Config.GameStaminaCost) + ElseIf (akActor.GetActorValue("Stamina") > Config.GameStaminaCost) akActor.DamageActorValue("Stamina", Config.GameStaminaCost) AdjustEnjoyment(akPartner, 1) EndIf @@ -2085,7 +2085,7 @@ Function GameHoldback(Actor akActor, Actor akPartner) If (SexLabUtil.IsGodModeEnabled()) AdjustEnjoyment(akPartner, -1) return - ElseIf (akActor.GetActorValuePercentage("Magicka") > Config.GameMagickaCost) + ElseIf (akActor.GetActorValue("Magicka") > Config.GameMagickaCost) akActor.DamageActorValue("Magicka", Config.GameMagickaCost) AdjustEnjoyment(akPartner, -1) EndIf diff --git a/src/UserData/mcm.def b/src/UserData/mcm.def index 0121f409..bec0f107 100644 --- a/src/UserData/mcm.def +++ b/src/UserData/mcm.def @@ -48,7 +48,9 @@ MCM_SETTING(iTargetActor, 49) MCM_SETTING(bAdjustTargetStage, false) MCM_SETTING(fAdjustStepSize, 0.5f) MCM_SETTING(bAdjustStage, true) + MCM_SETTING(bHideHUD, false) +MCM_SETTING(bHideUI, false) // MCM_SETTING(iAdjustStage, 157) // MCM_SETTING(iBackwards, 54) From 395b5cb77a1ff030db47e1f72038e66b068de795 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 23 Feb 2026 06:10:57 +0500 Subject: [PATCH 05/32] declutter OnUpdate and reduce EnjDelay --- dist/Source/Scripts/sslActorAlias.psc | 98 ++++++++++++++------------ dist/Source/Scripts/sslThreadModel.psc | 8 +-- 2 files changed, 55 insertions(+), 51 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index ae8aa082..3f531883 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -706,8 +706,6 @@ float Property UPDATE_INTERVAL = 0.250 AutoReadOnly Hidden float _LoopDelay float _LoopLovenseDelay -float _LoopEnjoymentDelay - bool _LovenseGenital bool _LovenseAnal @@ -747,9 +745,7 @@ State Animating return EndIf _CurrentInteractions = _Thread.ListDetectedInteractionsInternal(_ActorRef) - If (_LoopEnjoymentDelay >= _EnjoymentDelay) - UpdateEffectiveEnjoymentCalculations() - EndIf + UpdateEffectiveEnjoymentCalculations() int strength = CalcReaction() If (_LoopDelay >= _VoiceDelay && !IsSilent) _LoopDelay = 0.0 @@ -759,43 +755,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 (_bEnjEnabled) - If (_FullEnjoyment >= 100) - DoOrgasm() - EndIf - bool NoStaminaEndScenario = (_Config.NoStaminaEndsScene && !_victim && _ActorRef.GetActorValuePercentage("Stamina") < 0.10) - If NoStaminaEndScenario - _Thread.EnjBasedSkipToLastStage(true) - EndIf - EndIf ; Loop _LoopDelay += UPDATE_INTERVAL _LoopEnjoymentDelay += UPDATE_INTERVAL @@ -817,16 +780,41 @@ State Animating Utility.Wait(0.7) EndIf String expression = GetActorExpression() - bool ExpresssionsEnabled = (expression && _Config.UseExpressions && _livestatus == LIVESTATUS_ALIVE) - If (ExpresssionsEnabled) + If (expression && _Config.UseExpressions && _livestatus == LIVESTATUS_ALIVE) sslBaseExpression.ApplyExpression(expression, _ActorRef, afStrength) EndIf - If (_LoopEnjoymentDelay >= _EnjoymentDelay) - _LoopEnjoymentDelay = 0 - If (_Config.DebugMode && ExpresssionsEnabled) - Log("Expression? " + expression + "; Strength? " + afStrength + "; OpenMouth? " + OpenMouth, "sslBaseExpression.ApplyExpression()") + 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) @@ -975,6 +963,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 @@ -1177,6 +1169,7 @@ Function UpdateEnjoyment(float afEnjoyment) native ; Defaults float _EnjoymentDelay +float _LoopEnjoymentDelay ; Base bool _bEnjEnabled bool _CrtMaleHugePP @@ -1202,7 +1195,8 @@ float _lastHoldBack Function ResetEnjoymentVariables() ; Defaults - _EnjoymentDelay = 1.5 + _EnjoymentDelay = 0.8 + _LoopEnjoymentDelay = 0.0 ; Base _bEnjEnabled = False _CrtMaleHugePP = False @@ -1250,9 +1244,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) diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index 295baf23..d594753f 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -1866,17 +1866,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 From fca66e3eb7b4656130d748b63514d34723eeb334 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Sun, 1 Mar 2026 22:55:16 +0500 Subject: [PATCH 06/32] Remove buggy DPC and fix MoveScene (again) --- dist/Source/Scripts/sslActorAlias.psc | 9 ++------- dist/Source/Scripts/sslThreadController.psc | 16 ++++++---------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 3f531883..0d9f596a 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -366,8 +366,7 @@ 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) + Game.SetPlayerAIDriven() EndIf ForceRefTo(ProspectRef) _ActorRef = ProspectRef @@ -396,7 +395,7 @@ Auto State Empty _Thread.RequestStatisticUpdate(_ActorRef, _StartedAt) EndIf If (_ActorRef == _PlayerRef) - Game.EnablePlayerControls() + Game.SetPlayerAIDriven(false) EndIf Parent.Clear() EndFunction @@ -585,8 +584,6 @@ State Paused 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) @@ -608,8 +605,6 @@ 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()) diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index f71b6e08..a0b3be36 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -130,24 +130,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,9 +162,6 @@ Function MoveScene() ActorAlias[j].TryLockAndUnpause() j += 1 EndWhile - If (!HasPlayer) - Game.EnablePlayerControls() - EndIf CenterOnObject(PlayerRef) EndFunction From e37e18631046963382c6a7ba2682db4571ad3869 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 2 Mar 2026 01:35:59 +0500 Subject: [PATCH 07/32] enhance OpenMouth cond --- dist/Source/Scripts/sslActorAlias.psc | 24 +++++++++++++++++------- dist/Source/Scripts/sslThreadModel.psc | 23 ++++++++++++----------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 0d9f596a..61aca6c3 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -100,10 +100,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() @@ -334,7 +341,7 @@ bool Property OpenMouth If (ForceOpenMouth) return true EndIf - return IsMouthBusy() + return ShouldMouthOpen() EndFunction Function Set(bool abSet) ForceOpenMouth = abSet @@ -705,10 +712,12 @@ 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 @@ -1104,6 +1113,7 @@ Function Initialize() _StartedAt = 0.0 ; Array _CurrentInteractions = Utility.CreateBoolArray(_Thread.SUPPORTED_INTER_COUNT, false) + _HomoTypes = new bool[5] ResetEnjoymentVariables() EndFunction @@ -1227,7 +1237,7 @@ Function UpdateBaseEnjoymentCalculations() _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() @@ -1490,7 +1500,7 @@ 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 diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index d594753f..c20bcef1 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -1943,17 +1943,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 - EndIf - return SameSexThread +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 HomoTypes EndFunction bool Function CrtMaleHugePP() From 7f29dc34640e0b1792c4fcda279fbdb354f5a1bc Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 2 Mar 2026 01:58:25 +0500 Subject: [PATCH 08/32] fix undressing with timers --- dist/Source/Scripts/sslActorAlias.psc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 61aca6c3..55fc6094 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -489,10 +489,11 @@ State Ready DoUndress = false If (_sex == 0) Debug.SendAnimationEvent(_ActorRef, "SexLab_MaleUndress") + Utility.Wait(5.43) Else Debug.SendAnimationEvent(_ActorRef, "SexLab_FemaleUndress") + Utility.Wait(5.16) EndIf - Utility.Wait(0.6) EndIf EndIf If (asStringArg != "skip") @@ -1099,6 +1100,7 @@ Function Initialize() _victim = false _CanOrgasm = true _hasOrgasm = false + _DoUndress = true _AllowRedress = true ForceOpenMouth = false _ActorLocked = false From ca3ae43e19b83399173a122917dd2dec551246bf Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 2 Mar 2026 05:48:36 +0500 Subject: [PATCH 09/32] fix npc furn config --- dist/Source/Scripts/sslConfigMenu.psc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/Source/Scripts/sslConfigMenu.psc b/dist/Source/Scripts/sslConfigMenu.psc index c33dc10c..fe75061b 100644 --- a/dist/Source/Scripts/sslConfigMenu.psc +++ b/dist/Source/Scripts/sslConfigMenu.psc @@ -1326,7 +1326,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 From acc7b475b38e1eec1fb4df2971f985834486fffa Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 2 Mar 2026 07:43:41 +0500 Subject: [PATCH 10/32] hacky: avoid actors clipping on scene end --- dist/Source/Scripts/sslThreadController.psc | 4 +++ dist/Source/Scripts/sslThreadModel.psc | 33 +++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index a0b3be36..b0ab9bd7 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -163,6 +163,10 @@ Function MoveScene() j += 1 EndWhile CenterOnObject(PlayerRef) + If (!HasPlayer) + MoveActorsAwayFromPlayer(true) + Config.DisableThreadControl(self) + EndIf EndFunction Function UpdateAnnotations(string asString) diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index c20bcef1..aa435ec7 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -1322,6 +1322,7 @@ State Animating Event OnEndState() UnregisterForUpdate() UnregisterCollision() + MoveActorsAwayFromPlayer() SetFurnitureIgnored(false) EndEvent EndState @@ -1505,6 +1506,38 @@ Function SetFurnitureIgnored(bool disabling = true) CenterRef.SetNoFavorAllowed(disabling) 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 --- ; ; ------------------------------------------------------- ; From f3405aeae497ddeda415dc6d789f66d74362ad90 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 2 Mar 2026 07:52:54 +0500 Subject: [PATCH 11/32] hacky: fix endstage on taking over non-pc scenes --- dist/Source/Scripts/sslSystemConfig.psc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index f70e745d..bd953cef 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -708,7 +708,9 @@ Function SetTargetActor() sslThreadController TargetThread = ThreadSlots.GetActorController(TargetRef) If (TargetThread && !TargetThread.HasPlayer && TargetThread.GetStatus() == TargetThread.STATUS_INSCENE && \ !ThreadSlots.GetActorController(Game.GetPlayer()) && TakeThreadControl.Show()) - GetThreadControl(TargetThread) + GetThreadControl(TargetThread) + ;Comeback: Revise below after UI update + _ActiveControl.StartStage(_ActiveControl.GetStageHistory(), _ActiveControl.GetActiveStage()) EndIf EndFunction From b2828c4899f0b832dcc71e7610939d5dafbd2ff1 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 2 Mar 2026 22:11:23 +0500 Subject: [PATCH 12/32] add: TFC native funcs --- dist/Source/Scripts/SexLabUtil.psc | 5 ++- dist/Source/Scripts/sslActorAlias.psc | 5 +-- dist/Source/Scripts/sslSystemConfig.psc | 4 +- dist/Source/Scripts/sslThreadController.psc | 2 +- src/Papyrus/SexLabUtil.h | 43 +++++++++++++++++++++ 5 files changed, 52 insertions(+), 7 deletions(-) diff --git a/dist/Source/Scripts/SexLabUtil.psc b/dist/Source/Scripts/SexLabUtil.psc index 86f54642..9c61dc08 100644 --- a/dist/Source/Scripts/SexLabUtil.psc +++ b/dist/Source/Scripts/SexLabUtil.psc @@ -84,6 +84,9 @@ function PrintConsole(string output) global native Actor[] function MakeActorArray(Actor Actor1 = none, Actor Actor2 = none, Actor Actor3 = none, Actor Actor4 = none, Actor Actor5 = none) global native float function GetCurrentGameRealTime() global native bool Function IsGodModeEnabled() global native +Function ToggleFreeCamera(bool freezeTime = false) global native +Function SetFreeCameraSpeed(float speed = 10.0) global native +Function SetFreeCameraState(bool enable, bool freezeTime = false, float speed = 10.0) global native String[] Function MergeSplitTags(String asTags, String asTagsSuppress, bool abRequireAll) global String[] ret1 = PapyrusUtil.ClearEmpty(PapyrusUtil.StringSplit(asTags, ",")) @@ -368,5 +371,5 @@ bool function IsActor(Form FormRef) global endFunction function EnableFreeCamera(bool Enabling = true, float sucsm = 5.0) global - return MiscUtil.SetFreeCameraState(Enabling, sucsm) + return SetFreeCameraState(Enabling, false, sucsm) endFunction diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 55fc6094..0e1866da 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -593,8 +593,7 @@ State Paused Game.ForceThirdPerson() EndIf If(_Config.AutoTFC) - MiscUtil.SetFreeCameraState(true) - MiscUtil.SetFreeCameraSpeed(_Config.AutoSUCSM) + SexLabUtil.SetFreeCameraState(true, false, _Config.AutoSUCSM) EndIf EndIf Debug.SendAnimationEvent(_ActorRef, "IdleFurnitureExit") @@ -612,7 +611,7 @@ State Paused _ActorRef.SetAnimationVariableInt("IsNPC", _AnimVarIsNPC) _ActorRef.SetAnimationVariableBool("bHumanoidFootIKDisable", _AnimVarbHumanoidFootIKDisable) If (_ActorRef == _PlayerRef) - MiscUtil.SetFreeCameraState(false) + SexLabUtil.SetFreeCameraState(false) EndIf UnlockActorImpl() Log("Unlocked Actor: " + GetActorName()) diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index bd953cef..5cd6553c 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -716,9 +716,9 @@ EndFunction Function ToggleFreeCamera() If (Game.GetCameraState() != 3) - MiscUtil.SetFreeCameraSpeed(AutoSUCSM) + SexLabUtil.SetFreeCameraSpeed(AutoSUCSM) EndIf - MiscUtil.ToggleFreeCamera() + SexLabUtil.ToggleFreeCamera() EndFunction bool function BackwardsPressed() diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index b0ab9bd7..ee5e4638 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -52,7 +52,7 @@ Function DisableHotkeys() i += 1 EndWhile ; If free cam is active here will glitch out controls? - MiscUtil.SetFreeCameraState(false) + SexLabUtil.SetFreeCameraState(false) TryCloseSceneMenu() DisableTraditionalHotkeys() EndFunction diff --git a/src/Papyrus/SexLabUtil.h b/src/Papyrus/SexLabUtil.h index f8433630..d5195b76 100644 --- a/src/Papyrus/SexLabUtil.h +++ b/src/Papyrus/SexLabUtil.h @@ -111,6 +111,46 @@ namespace Papyrus::SexLabUtil return player->IsGodMode(); } + void ToggleFreeCamera(RE::StaticFunctionTag*, bool freezeTime) + { + const auto playerCamera = RE::PlayerCamera::GetSingleton(); + const auto controlMap = RE::ControlMap::GetSingleton(); + if (!playerCamera || !controlMap) { + return; + } + const bool enteringFreeCam = !playerCamera->IsInFreeCameraMode(); + playerCamera->ToggleFreeCameraMode(freezeTime); + if (enteringFreeCam) { + controlMap->PushInputContext(RE::UserEvents::INPUT_CONTEXT_ID::kTFCMode); + } else { + controlMap->PopInputContext(RE::UserEvents::INPUT_CONTEXT_ID::kTFCMode); + } + } + + void SetFreeCameraSpeed(RE::StaticFunctionTag*, float speed) + { + const auto ini = RE::INISettingCollection::GetSingleton(); + if (!ini) return; + if (const auto setting = ini->GetSetting("fFreeCameraTranslationSpeed:Camera")) { + setting->data.f = speed; + } + } + + void SetFreeCameraState(RE::StaticFunctionTag*, bool a_enable, bool freezeTime, float speed) + { + const auto playerCamera = RE::PlayerCamera::GetSingleton(); + if (!playerCamera) { + return; + } + const bool isInFreeCam = playerCamera->IsInFreeCameraMode(); + if (a_enable == isInFreeCam) { + if (a_enable) SetFreeCameraSpeed(nullptr, speed); + return; + } + if (a_enable) SetFreeCameraSpeed(nullptr, speed); + ToggleFreeCamera(nullptr, freezeTime); + } + inline bool Register(VM* a_vm) { REGISTERFUNC(HasKeywordSub, "SexLabUtil", true); @@ -124,6 +164,9 @@ namespace Papyrus::SexLabUtil REGISTERFUNC(GetCurrentGameRealTime, "SexLabUtil", true); REGISTERFUNC(GetTranslation, "SexLabUtil", true); REGISTERFUNC(IsGodModeEnabled, "SexLabUtil", true); + REGISTERFUNC(ToggleFreeCamera, "SexLabUtil", true); + REGISTERFUNC(SetFreeCameraSpeed, "SexLabUtil", true); + REGISTERFUNC(SetFreeCameraState, "SexLabUtil", true); return true; } From bf9879b884193455f4b42f3950440487e96c84e3 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Wed, 4 Mar 2026 00:52:54 +0500 Subject: [PATCH 13/32] test: pre-release hotfixes --- dist/Source/Scripts/sslActorAlias.psc | 48 ++++++++++++++----------- dist/Source/Scripts/sslSystemConfig.psc | 5 +++ dist/Source/Scripts/sslThreadModel.psc | 28 ++++++++++----- src/Papyrus/SexLabUtil.h | 36 +++++++++++-------- 4 files changed, 74 insertions(+), 43 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 0e1866da..f39e6fea 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -372,11 +372,13 @@ float _LastOrgasm Auto State Empty bool Function SetActor(Actor ProspectRef) - If (ProspectRef == _PlayerRef) - Game.SetPlayerAIDriven() - EndIf ForceRefTo(ProspectRef) _ActorRef = ProspectRef + If (_ActorRef == _PlayerRef) + Game.SetPlayerAIDriven() + Else + _ActorRef.SetDontMove(true) + EndIf If (_ActorRef.IsDead()) _livestatus = LIVESTATUS_DEAD _killer = _ActorRef.GetKiller() @@ -403,6 +405,7 @@ Auto State Empty EndIf If (_ActorRef == _PlayerRef) Game.SetPlayerAIDriven(false) + Game.EnablePlayerControls() EndIf Parent.Clear() EndFunction @@ -462,6 +465,7 @@ State Ready float target_distance = 128.0 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) @@ -481,21 +485,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, "SexLab_MaleUndress") - Utility.Wait(5.43) - Else - Debug.SendAnimationEvent(_ActorRef, "SexLab_FemaleUndress") - Utility.Wait(5.16) - EndIf - EndIf - EndIf If (asStringArg != "skip") _Thread.PrepareDone() EndIf @@ -557,7 +546,19 @@ EndFunction /; State Paused - ; Only called once the first time the main thread enters animating state + 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 Function ReadyActor(int aiStripData, int aiPositionGenders) _stripData = aiStripData _useStrapon = _sex == 1 && Math.LogicalAnd(aiPositionGenders, 0x2) == 0 @@ -566,7 +567,6 @@ 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") EndFunction @@ -576,6 +576,10 @@ State Paused GoToState(STATE_PLAYING) _Thread.AnimationStart() TrackedEvent(TRACK_START) + If (_sex != 1 && _sex != 4) + Utility.Wait(0.5) ; extra async call to ensure erection + Debug.SendAnimationEvent(_ActorRef, "SOSBend0") + EndIf _StartedAt = SexLabUtil.GetCurrentGameRealTime() _LastOrgasm = _StartedAt EndEvent @@ -662,6 +666,10 @@ State Paused EndFunction EndState +bool Function InitiateUndressing() + Error("Cannot undress actors outside of idle state", "ReadyActor()") + return false +EndFunction Function ReadyActor(int aiStripData, int aiPositionGenders) Error("Cannot ready outside of idle state", "ReadyActor()") EndFunction diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index 5cd6553c..10353aef 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -774,6 +774,8 @@ Function GetThreadControl(sslThreadController TargetThread) player.SheatheWeapon() endIf Game.SetPlayerAIDriven() + player.SetFactionRank(AnimatingFaction, 0) + player.EvaluatePackage() EndIf _ActiveControl.EnableHotkeys(true) EndFunction @@ -787,7 +789,10 @@ Function DisableThreadControl(sslThreadController TargetThread) _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 diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index aa435ec7..dfabb99d 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -892,6 +892,16 @@ State Making_M LeadIn = LeadIn && _LeadInScenes.Find(activeScene) > -1 Log("Thread validated, playing animation: " + activeScene + ", " + SexLabRegistry.GetSceneName(activeScene), "StartThread()") SendThreadEvent("AnimationStarting") + bool WaitForUndress = false + int i = 0 + While (i < _Positions.Length) + ActorAlias[i].LockActor() + WaitForUndress = ActorAlias[i].InitiateUndressing() + i += 1 + EndWhile + If (WaitForUndress) + Utility.Wait(2.5) + EndIf If (HasPlayer) If (sslSystemConfig.GetSettingInt("iUseFade") > 0) Config.ApplyFade() @@ -901,6 +911,16 @@ State Making_M SetObjectiveDisplayed(0, True) EndIf EndIf + int[] strips_ = SexLabRegistry.GetStripDataA(activeScene, "") + int[] sex_ = SexLabRegistry.GetPositionSexA(activeScene) + int j = 0 + While (j < _Positions.Length) + ActorAlias[j].ReadyActor(strips_[j], sex_[j]) + j += 1 + EndWhile + If (WaitForUndress) + Utility.Wait(1.5) + EndIf GoToState(STATE_PLAYING) EndFunction @@ -1000,14 +1020,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) diff --git a/src/Papyrus/SexLabUtil.h b/src/Papyrus/SexLabUtil.h index d5195b76..fac7069d 100644 --- a/src/Papyrus/SexLabUtil.h +++ b/src/Papyrus/SexLabUtil.h @@ -111,13 +111,8 @@ namespace Papyrus::SexLabUtil return player->IsGodMode(); } - void ToggleFreeCamera(RE::StaticFunctionTag*, bool freezeTime) + static void ToggleFreeCameraImpl(RE::PlayerCamera* playerCamera, RE::ControlMap* controlMap, bool freezeTime) { - const auto playerCamera = RE::PlayerCamera::GetSingleton(); - const auto controlMap = RE::ControlMap::GetSingleton(); - if (!playerCamera || !controlMap) { - return; - } const bool enteringFreeCam = !playerCamera->IsInFreeCameraMode(); playerCamera->ToggleFreeCameraMode(freezeTime); if (enteringFreeCam) { @@ -127,6 +122,16 @@ namespace Papyrus::SexLabUtil } } + void ToggleFreeCamera(RE::StaticFunctionTag*, bool freezeTime) + { + const auto playerCamera = RE::PlayerCamera::GetSingleton(); + const auto controlMap = RE::ControlMap::GetSingleton(); + if (!playerCamera || !controlMap) return; + SKSE::GetTaskInterface()->AddTask([playerCamera, controlMap, freezeTime]() { + ToggleFreeCameraImpl(playerCamera, controlMap, freezeTime); + }); + } + void SetFreeCameraSpeed(RE::StaticFunctionTag*, float speed) { const auto ini = RE::INISettingCollection::GetSingleton(); @@ -139,16 +144,17 @@ namespace Papyrus::SexLabUtil void SetFreeCameraState(RE::StaticFunctionTag*, bool a_enable, bool freezeTime, float speed) { const auto playerCamera = RE::PlayerCamera::GetSingleton(); - if (!playerCamera) { - return; - } - const bool isInFreeCam = playerCamera->IsInFreeCameraMode(); - if (a_enable == isInFreeCam) { + const auto controlMap = RE::ControlMap::GetSingleton(); + if (!playerCamera || !controlMap) return; + SKSE::GetTaskInterface()->AddTask([playerCamera, controlMap, a_enable, freezeTime, speed]() { + const bool isInFreeCam = playerCamera->IsInFreeCameraMode(); + if (a_enable == isInFreeCam) { + if (a_enable) SetFreeCameraSpeed(nullptr, speed); + return; + } if (a_enable) SetFreeCameraSpeed(nullptr, speed); - return; - } - if (a_enable) SetFreeCameraSpeed(nullptr, speed); - ToggleFreeCamera(nullptr, freezeTime); + ToggleFreeCameraImpl(playerCamera, controlMap, freezeTime); + }); } inline bool Register(VM* a_vm) From 4b4517c8ef2824d1470d716ee3a6c4d2d4f792c3 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Thu, 5 Mar 2026 03:33:55 +0500 Subject: [PATCH 14/32] exec and/or seq adjust --- dist/Source/Scripts/sslActorAlias.psc | 62 +++++++++++++------------- dist/Source/Scripts/sslThreadModel.psc | 6 +-- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index f39e6fea..4591de31 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -546,6 +546,30 @@ EndFunction /; State Paused + Function LockActor() + If (_ActorRef == _PlayerRef) + If (Game.GetCameraState() == 0) + Game.ForceThirdPerson() + EndIf + If(_Config.AutoTFC) + SexLabUtil.SetFreeCameraState(true, false, _Config.AutoSUCSM) + EndIf + 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 TryLockAndUnpause() + LockActor() + GoToState(STATE_PLAYING) + EndFunction + bool Function InitiateUndressing() If (_sex <= 2) If (DoUndress) @@ -576,12 +600,12 @@ State Paused GoToState(STATE_PLAYING) _Thread.AnimationStart() 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 - _StartedAt = SexLabUtil.GetCurrentGameRealTime() - _LastOrgasm = _StartedAt EndEvent Function SetStrapon(Form ToStrapon) @@ -590,25 +614,10 @@ State Paused Function ResolveStrapon(bool force = false) ResolveStraponImpl() EndFunction - - Function LockActor() - If (_ActorRef == _PlayerRef) - If (Game.GetCameraState() == 0) - Game.ForceThirdPerson() - EndIf - If(_Config.AutoTFC) - SexLabUtil.SetFreeCameraState(true, false, _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() @@ -621,21 +630,10 @@ State Paused 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() @@ -667,7 +665,7 @@ State Paused EndState bool Function InitiateUndressing() - Error("Cannot undress actors outside of idle state", "ReadyActor()") + Error("Cannot undress actors outside of idle state", "InitiateUndressing()") return false EndFunction Function ReadyActor(int aiStripData, int aiPositionGenders) diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index dfabb99d..4ca7c86c 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -926,7 +926,7 @@ State Making_M Function EndAnimation(bool Quickly = false) _prepareAsyncCount = -2147483648 - Initialize() + GoToState(STATE_END) EndFunction int Function GetStatus() @@ -1333,8 +1333,6 @@ State Animating Event OnEndState() UnregisterForUpdate() - UnregisterCollision() - MoveActorsAwayFromPlayer() SetFurnitureIgnored(false) EndEvent EndState @@ -1428,6 +1426,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 From 130ac2ce78c51d10275bf95d08ea1afe066f1788 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Thu, 5 Mar 2026 03:25:14 +0500 Subject: [PATCH 15/32] move EnjGame to thread --- dist/Source/Scripts/sslActorAlias.psc | 55 ++----------------- dist/Source/Scripts/sslThreadController.psc | 45 ++++++++++++++- dist/Source/Scripts/sslThreadModel.psc | 61 ++++++++++----------- 3 files changed, 74 insertions(+), 87 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 4591de31..dceb072b 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -648,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() @@ -919,28 +918,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() @@ -1201,8 +1178,6 @@ float _PainInterDecayBackup float _PainInterCur int _FullEnjoyment ; Game -bool _bGamePaused -Actor _EnjGamePartner float _lastHoldBack Function ResetEnjoymentVariables() @@ -1228,8 +1203,6 @@ Function ResetEnjoymentVariables() _PainInterCur = 0 _FullEnjoyment = 0 ; Game - _bGamePaused = False - _EnjGamePartner = None _lastHoldBack = 0.0 EndFunction @@ -1240,8 +1213,6 @@ Function UpdateBaseEnjoymentCalculations() ResetEnjoymentVariables() _bEnjEnabled = True StoreExcitementState("Restore") - RegisterEnjGameKeys() - _EnjGamePartner = _Thread.GameChangePartner(_ActorRef) _CrtMaleHugePP = _Thread.CrtMaleHugePP() _ConSubStatus = _Thread.IdentifyConsentSubStatus() bool SameSexThread = (_HomoTypes[1] || _HomoTypes[2] || _HomoTypes[3]) @@ -1453,10 +1424,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) @@ -1464,7 +1437,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) @@ -1486,25 +1458,6 @@ Function RegisterRaiseEnjAttempt() _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: " \ + (_HomoTypes[2]||_HomoTypes[3]||_HomoTypes[4]) + ", Sexuality: " + SexlabStatistics.GetSexuality(_ActorRef) + ", ConSubStatus: " \ diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index ee5e4638..809417d5 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -17,11 +17,12 @@ scriptname sslThreadController extends sslThreadModel Message Property RepositionInfoMsg Auto {[Ok, Cancel, Don't show again]} - +String[] _MenuEvents bool _SkipHotkeyEvents int _AutoAdvanceCache -String[] _MenuEvents +bool _EnjGamePaused = false +Actor _EnjGamePartner = none Function EnableHotkeys(bool forced = false) If(!HasPlayer && !forced || !TryOpenSceneMenu()) @@ -210,12 +211,28 @@ EndFunction Function EnableTraditionalHotkeys() RegisterForKey(Config.ChangeAnimation) RegisterForKey(Config.MoveScene) + ; Enjoyment Game + RegisterForKey(Config.GameUtilityKey) + If (!Config.GameEnabled || !HasPlayer) + return + EndIf + RegisterForKey(Config.GamePauseKey) + RegisterForKey(Config.GameRaiseEnjKey) + RegisterForKey(Config.GameHoldbackKey) + RegisterForKey(Config.GameSelectNextPos) + _EnjGamePartner = GameChangePartner(PlayerRef) EndFunction Function DisableTraditionalHotkeys() UnregisterForKey(Config.ChangeAnimation) UnregisterForKey(Config.MoveScene) -EndFunction + ; Enjoyment Game + UnregisterForKey(Config.GameUtilityKey) + UnregisterForKey(Config.GamePauseKey) + UnregisterForKey(Config.GameRaiseEnjKey) + UnregisterForKey(Config.GameHoldbackKey) + UnregisterForKey(Config.GameSelectNextPos) +EndFunction Event OnKeyDown(int KeyCode) If(Utility.IsInMenuMode() || _SkipHotkeyEvents) @@ -224,10 +241,32 @@ Event OnKeyDown(int KeyCode) _SkipHotkeyEvents = true If(KeyCode == Config.ChangeAnimation) ChangeAnimation(Input.IsKeyPressed(Config.GameUtilityKey)) + _SkipHotkeyEvents = false + return ElseIf(KeyCode == Config.MoveScene) MoveScene() + _SkipHotkeyEvents = false + return EndIf _SkipHotkeyEvents = false + ; Enjoyment Game + If(!HasPlayer || !Config.GameEnabled) + return + EndIf + If((KeyCode == Config.GamePauseKey) && (Input.IsKeyPressed(Config.GameUtilityKey))) + _EnjGamePaused = !_EnjGamePaused + Log("[EnjGame] Game paused: " + _EnjGamePaused) + EndIf + If(!_EnjGamePaused) + If(KeyCode == Config.GameRaiseEnjKey) + ProcessEnjGameArg("Stamina", _EnjGamePartner) + ElseIf(KeyCode == Config.GameHoldbackKey) + ProcessEnjGameArg("Magicka", _EnjGamePartner) + ElseIf(KeyCode == Config.GameSelectNextPos) + int newIdx = GameNextPartnerIdx(PlayerRef, _EnjGamePartner, Input.IsKeyPressed(Config.GameUtilityKey)) + _EnjGamePartner = GameChangePartner(PlayerRef, newIdx) + EndIf + EndIf EndEvent Function ChangeAnimation(bool backwards = false) diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index 4ca7c86c..ff5689a6 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -2117,64 +2117,59 @@ EndFunction ; --- Enjoyment Game --- ; ; ---------------------------------------------- ; -Function GameRaiseEnjoyment(Actor akActor, Actor akPartner) +Function GameRaiseEnjoyment(Actor akTarget) If (SexLabUtil.IsGodModeEnabled()) - AdjustEnjoyment(akPartner, 1) + AdjustEnjoyment(akTarget, 1) return - ElseIf (akActor.GetActorValue("Stamina") > Config.GameStaminaCost) - akActor.DamageActorValue("Stamina", Config.GameStaminaCost) - AdjustEnjoyment(akPartner, 1) + ElseIf (PlayerRef.GetActorValue("Stamina") > Config.GameStaminaCost) + PlayerRef.DamageActorValue("Stamina", Config.GameStaminaCost) + AdjustEnjoyment(akTarget, 1) EndIf EndFunction -Function GameHoldback(Actor akActor, Actor akPartner) +Function GameHoldback(Actor akTarget) If (SexLabUtil.IsGodModeEnabled()) - AdjustEnjoyment(akPartner, -1) + AdjustEnjoyment(akTarget, -1) return - ElseIf (akActor.GetActorValue("Magicka") > Config.GameMagickaCost) - akActor.DamageActorValue("Magicka", Config.GameMagickaCost) - AdjustEnjoyment(akPartner, -1) + 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 +Function ProcessEnjGameArg(String arg, Actor akPartner) + Actor akTarget = None + If (Input.IsKeyPressed(Config.GameUtilityKey)) + akTarget = akPartner ;change partner enj + Else + akTarget = PlayerRef ;change self/player 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() + If (arg == "Magicka") + GameHoldback(akTarget) + ElseIf (arg == "Stamina") + If ((Config.GameRequiredOnHighEnj) && (GetEnjoyment(PlayerRef) > 80)) + ActorAlias[GetPositionIdx(PlayerRef)].RegisterRaiseEnjAttempt() Else - GameRaiseEnjoyment(akPlayer, targetActor) + GameRaiseEnjoyment(akTarget) EndIf EndIf EndFunction Actor Function GameChangePartner(Actor akActor, int idx = -1) - Actor akPartner = None - Actor tempRef = None + Actor akPartner = akActor 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()) + Log("[EnjGame] Player's current partner is " + akPartner.GetDisplayName()) EndIf 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()) + akPartner = ActorAlias[idx].GetActorRef() + If ((akPartner != akActor) && (akActor == PlayerRef)) + Config.SelectedSpell.Cast(akPartner, akPartner) + Log("[EnjGame] Player changed focus to " + akPartner.GetDisplayName()) EndIf - Config.SelectedSpell.Cast(akPartner, akPartner) EndIf EndIf return akPartner From d697a2014e4e22d41d4e7357618f3225d56611d9 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Thu, 5 Mar 2026 03:16:45 +0500 Subject: [PATCH 16/32] fix tfc controls loss --- src/Thread/Interface/SceneMenu.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Thread/Interface/SceneMenu.cpp b/src/Thread/Interface/SceneMenu.cpp index ef4a2088..09d97ec7 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; From 040132cc2ed95256b2128409ddafb4b550235531 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Thu, 5 Mar 2026 03:40:55 +0500 Subject: [PATCH 17/32] bring back MiscUtil for TFC --- dist/Source/Scripts/SexLabUtil.psc | 5 +-- dist/Source/Scripts/sslActorAlias.psc | 4 +- dist/Source/Scripts/sslSystemConfig.psc | 4 +- dist/Source/Scripts/sslThreadController.psc | 2 +- src/Papyrus/SexLabUtil.h | 49 --------------------- 5 files changed, 6 insertions(+), 58 deletions(-) diff --git a/dist/Source/Scripts/SexLabUtil.psc b/dist/Source/Scripts/SexLabUtil.psc index 9c61dc08..86f54642 100644 --- a/dist/Source/Scripts/SexLabUtil.psc +++ b/dist/Source/Scripts/SexLabUtil.psc @@ -84,9 +84,6 @@ function PrintConsole(string output) global native Actor[] function MakeActorArray(Actor Actor1 = none, Actor Actor2 = none, Actor Actor3 = none, Actor Actor4 = none, Actor Actor5 = none) global native float function GetCurrentGameRealTime() global native bool Function IsGodModeEnabled() global native -Function ToggleFreeCamera(bool freezeTime = false) global native -Function SetFreeCameraSpeed(float speed = 10.0) global native -Function SetFreeCameraState(bool enable, bool freezeTime = false, float speed = 10.0) global native String[] Function MergeSplitTags(String asTags, String asTagsSuppress, bool abRequireAll) global String[] ret1 = PapyrusUtil.ClearEmpty(PapyrusUtil.StringSplit(asTags, ",")) @@ -371,5 +368,5 @@ bool function IsActor(Form FormRef) global endFunction function EnableFreeCamera(bool Enabling = true, float sucsm = 5.0) global - return SetFreeCameraState(Enabling, false, sucsm) + return MiscUtil.SetFreeCameraState(Enabling, sucsm) endFunction diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index dceb072b..5acd2bc0 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -552,7 +552,7 @@ State Paused Game.ForceThirdPerson() EndIf If(_Config.AutoTFC) - SexLabUtil.SetFreeCameraState(true, false, _Config.AutoSUCSM) + MiscUtil.SetFreeCameraState(true, _Config.AutoSUCSM) EndIf EndIf Debug.SendAnimationEvent(_ActorRef, "IdleFurnitureExit") @@ -624,7 +624,7 @@ State Paused _ActorRef.SetAnimationVariableInt("IsNPC", _AnimVarIsNPC) _ActorRef.SetAnimationVariableBool("bHumanoidFootIKDisable", _AnimVarbHumanoidFootIKDisable) If (_ActorRef == _PlayerRef) - SexLabUtil.SetFreeCameraState(false) + MiscUtil.SetFreeCameraState(false) EndIf UnlockActorImpl() Log("Unlocked Actor: " + GetActorName()) diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index 10353aef..f2e2bd58 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -716,9 +716,9 @@ EndFunction Function ToggleFreeCamera() If (Game.GetCameraState() != 3) - SexLabUtil.SetFreeCameraSpeed(AutoSUCSM) + MiscUtil.SetFreeCameraSpeed(AutoSUCSM) EndIf - SexLabUtil.ToggleFreeCamera() + MiscUtil.ToggleFreeCamera() EndFunction bool function BackwardsPressed() diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index 809417d5..325d13a0 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -53,7 +53,7 @@ Function DisableHotkeys() i += 1 EndWhile ; If free cam is active here will glitch out controls? - SexLabUtil.SetFreeCameraState(false) + MiscUtil.SetFreeCameraState(false) TryCloseSceneMenu() DisableTraditionalHotkeys() EndFunction diff --git a/src/Papyrus/SexLabUtil.h b/src/Papyrus/SexLabUtil.h index fac7069d..f8433630 100644 --- a/src/Papyrus/SexLabUtil.h +++ b/src/Papyrus/SexLabUtil.h @@ -111,52 +111,6 @@ namespace Papyrus::SexLabUtil return player->IsGodMode(); } - static void ToggleFreeCameraImpl(RE::PlayerCamera* playerCamera, RE::ControlMap* controlMap, bool freezeTime) - { - const bool enteringFreeCam = !playerCamera->IsInFreeCameraMode(); - playerCamera->ToggleFreeCameraMode(freezeTime); - if (enteringFreeCam) { - controlMap->PushInputContext(RE::UserEvents::INPUT_CONTEXT_ID::kTFCMode); - } else { - controlMap->PopInputContext(RE::UserEvents::INPUT_CONTEXT_ID::kTFCMode); - } - } - - void ToggleFreeCamera(RE::StaticFunctionTag*, bool freezeTime) - { - const auto playerCamera = RE::PlayerCamera::GetSingleton(); - const auto controlMap = RE::ControlMap::GetSingleton(); - if (!playerCamera || !controlMap) return; - SKSE::GetTaskInterface()->AddTask([playerCamera, controlMap, freezeTime]() { - ToggleFreeCameraImpl(playerCamera, controlMap, freezeTime); - }); - } - - void SetFreeCameraSpeed(RE::StaticFunctionTag*, float speed) - { - const auto ini = RE::INISettingCollection::GetSingleton(); - if (!ini) return; - if (const auto setting = ini->GetSetting("fFreeCameraTranslationSpeed:Camera")) { - setting->data.f = speed; - } - } - - void SetFreeCameraState(RE::StaticFunctionTag*, bool a_enable, bool freezeTime, float speed) - { - const auto playerCamera = RE::PlayerCamera::GetSingleton(); - const auto controlMap = RE::ControlMap::GetSingleton(); - if (!playerCamera || !controlMap) return; - SKSE::GetTaskInterface()->AddTask([playerCamera, controlMap, a_enable, freezeTime, speed]() { - const bool isInFreeCam = playerCamera->IsInFreeCameraMode(); - if (a_enable == isInFreeCam) { - if (a_enable) SetFreeCameraSpeed(nullptr, speed); - return; - } - if (a_enable) SetFreeCameraSpeed(nullptr, speed); - ToggleFreeCameraImpl(playerCamera, controlMap, freezeTime); - }); - } - inline bool Register(VM* a_vm) { REGISTERFUNC(HasKeywordSub, "SexLabUtil", true); @@ -170,9 +124,6 @@ namespace Papyrus::SexLabUtil REGISTERFUNC(GetCurrentGameRealTime, "SexLabUtil", true); REGISTERFUNC(GetTranslation, "SexLabUtil", true); REGISTERFUNC(IsGodModeEnabled, "SexLabUtil", true); - REGISTERFUNC(ToggleFreeCamera, "SexLabUtil", true); - REGISTERFUNC(SetFreeCameraSpeed, "SexLabUtil", true); - REGISTERFUNC(SetFreeCameraState, "SexLabUtil", true); return true; } From 23eda853893823c750bc3f326cfb16eed293485c Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Fri, 6 Mar 2026 02:22:08 +0500 Subject: [PATCH 18/32] ensure full thread reset from debug --- dist/Source/Scripts/sslThreadSlots.psc | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/Source/Scripts/sslThreadSlots.psc b/dist/Source/Scripts/sslThreadSlots.psc index 46fe3915..83cc8611 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 From a52a9a9fa0870a74250384e4edc6c243d19759e3 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Fri, 6 Mar 2026 02:25:23 +0500 Subject: [PATCH 19/32] fix pathing distance for creatures --- dist/Source/Scripts/SexLabUtil.psc | 39 +++++++++++++++++---------- dist/Source/Scripts/sslActorAlias.psc | 16 +++++++---- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/dist/Source/Scripts/SexLabUtil.psc b/dist/Source/Scripts/SexLabUtil.psc index 86f54642..ee16cc4b 100644 --- a/dist/Source/Scripts/SexLabUtil.psc +++ b/dist/Source/Scripts/SexLabUtil.psc @@ -112,6 +112,31 @@ 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 + String Function GetTranslation(String asStr) global native ; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ; @@ -149,20 +174,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 5acd2bc0..09245184 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 @@ -277,6 +281,7 @@ Actor Property ActorRef EndProperty int _sex +int _raceID bool _victim int _livestatus @@ -387,8 +392,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 @@ -462,7 +467,7 @@ State Ready _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) @@ -1088,6 +1093,7 @@ Function Initialize() _ActorLocked = false ; Integers _sex = -1 + _raceID = -1 _livestatus = 0 _PathingFlag = 0 _OrgasmCount = 0 @@ -1097,7 +1103,7 @@ Function Initialize() _StartedAt = 0.0 ; Array _CurrentInteractions = Utility.CreateBoolArray(_Thread.SUPPORTED_INTER_COUNT, false) - _HomoTypes = new bool[5] + _HomoTypes = Utility.CreateBoolArray(5, false) ResetEnjoymentVariables() EndFunction @@ -1278,7 +1284,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 From ed610d67fa4972839fa0dbb4eee13b24bf201a82 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Fri, 6 Mar 2026 02:29:03 +0500 Subject: [PATCH 20/32] threading: stricter setup state --- dist/Source/Scripts/sslActorAlias.psc | 6 ++++-- dist/Source/Scripts/sslThreadModel.psc | 22 ++++++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 09245184..64e44dee 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -588,7 +588,7 @@ State Paused EndIf return false EndFunction - Function ReadyActor(int aiStripData, int aiPositionGenders) + bool Function ReadyActor(int aiStripData, int aiPositionGenders) _stripData = aiStripData _useStrapon = _sex == 1 && Math.LogicalAnd(aiPositionGenders, 0x2) == 0 If (_sex <= 2) @@ -598,6 +598,7 @@ State Paused EndIf Debug.SendAnimationEvent(_ActorRef, "SOSBend0") RegisterForModEvent("SSL_READY_Thread" + _Thread.tid, "OnStartPlaying") + return true EndFunction Event OnStartPlaying(string asEventName, string asStringArg, float afNumArg, form akSender) @@ -672,8 +673,9 @@ bool Function InitiateUndressing() Error("Cannot undress actors outside of idle state", "InitiateUndressing()") return false EndFunction -Function ReadyActor(int aiStripData, int aiPositionGenders) +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()") diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index ff5689a6..13d1f3f5 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -892,11 +892,19 @@ 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= (ActorAlias[i].InitiateUndressing() || WaitForUndress) i += 1 EndWhile If (WaitForUndress) @@ -908,20 +916,22 @@ State Making_M EndIf Else If (Config.ShowInMap && PlayerRef.GetDistance(CenterRef) > 750) - SetObjectiveDisplayed(0, True) + SetObjectiveDisplayed(0, true) EndIf EndIf int[] strips_ = SexLabRegistry.GetStripDataA(activeScene, "") int[] sex_ = SexLabRegistry.GetPositionSexA(activeScene) int j = 0 While (j < _Positions.Length) - ActorAlias[j].ReadyActor(strips_[j], sex_[j]) + If (!ActorAlias[j].ReadyActor(strips_[j], sex_[j])) + return false + EndIf j += 1 EndWhile If (WaitForUndress) Utility.Wait(1.5) EndIf - GoToState(STATE_PLAYING) + return true EndFunction Function EndAnimation(bool Quickly = false) @@ -983,6 +993,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 From d58ee7f1c6b3fb1704cdc36027e3fcb7d21c2b18 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Fri, 6 Mar 2026 02:49:55 +0500 Subject: [PATCH 21/32] fix: tfc exec from first person --- dist/Source/Scripts/SexLabUtil.psc | 16 ++++++++++++++++ dist/Source/Scripts/sslActorAlias.psc | 11 +++-------- dist/Source/Scripts/sslSystemConfig.psc | 9 +-------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/dist/Source/Scripts/SexLabUtil.psc b/dist/Source/Scripts/SexLabUtil.psc index ee16cc4b..f704d992 100644 --- a/dist/Source/Scripts/SexLabUtil.psc +++ b/dist/Source/Scripts/SexLabUtil.psc @@ -137,6 +137,22 @@ float Function CalcPathingTargetDistance(int k) global 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 ; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ; diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 64e44dee..8e99ae90 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -463,6 +463,9 @@ State Ready Utility.Wait(interval) EndWhile EndIf + If(_Config.AutoTFC) + SexLabUtil.ToggleFreeCamera(true) + EndIf Else _Config.CheckBardAudience(_ActorRef, true) If(akPathTo && DoPathToCenter) @@ -552,14 +555,6 @@ EndFunction State Paused Function LockActor() - If (_ActorRef == _PlayerRef) - If (Game.GetCameraState() == 0) - Game.ForceThirdPerson() - EndIf - If(_Config.AutoTFC) - MiscUtil.SetFreeCameraState(true, _Config.AutoSUCSM) - EndIf - EndIf Debug.SendAnimationEvent(_ActorRef, "IdleFurnitureExit") Debug.SendAnimationEvent(_ActorRef, "AnimObjectUnequip") Debug.SendAnimationEvent(_ActorRef, "IdleStop") diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index f2e2bd58..e3ed6128 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -687,7 +687,7 @@ Event OnKeyDown(int keyCode) If (Utility.IsInMenuMode()) return ElseIf (keyCode == ToggleFreeCamera) - ToggleFreeCamera() + SexLabUtil.ToggleFreeCamera() ElseIf (keyCode == TargetActor) If (_ActiveControl && !_ActiveControl.HasPlayer) DisableThreadControl(_ActiveControl) @@ -714,13 +714,6 @@ Function SetTargetActor() EndIf EndFunction -Function ToggleFreeCamera() - If (Game.GetCameraState() != 3) - MiscUtil.SetFreeCameraSpeed(AutoSUCSM) - EndIf - MiscUtil.ToggleFreeCamera() -EndFunction - bool function BackwardsPressed() return Input.GetNumKeysPressed() > 1 && MirrorPress(Backwards) endFunction From 71371fe83421f8dbe65d85453f374b9d0332b446 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:08:04 +0500 Subject: [PATCH 22/32] revert: bring back DPC (bugs CrosshairRefEvents) --- dist/Source/Scripts/sslActorAlias.psc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index 8e99ae90..b3501f31 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -380,7 +380,11 @@ Auto State Empty ForceRefTo(ProspectRef) _ActorRef = ProspectRef If (_ActorRef == _PlayerRef) - Game.SetPlayerAIDriven() + 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 @@ -409,7 +413,7 @@ Auto State Empty _Thread.RequestStatisticUpdate(_ActorRef, _StartedAt) EndIf If (_ActorRef == _PlayerRef) - Game.SetPlayerAIDriven(false) + Game.ForceThirdPerson() Game.EnablePlayerControls() EndIf Parent.Clear() From dcaa4db1bcc1ba7030d6f5ac6dac694e00fa423f Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Thu, 5 Mar 2026 03:28:01 +0500 Subject: [PATCH 23/32] disable bAdjustNodes by default --- dist/SKSE/Plugins/SexLab.ini | 2 +- src/UserData/config.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/SKSE/Plugins/SexLab.ini b/dist/SKSE/Plugins/SexLab.ini index b0808b89..b2297981 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/src/UserData/config.def b/src/UserData/config.def index 5aa94816..493cda6f 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") From 5c4a9f2e82e647b03dbbddaf5e4137b59332b342 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Wed, 25 Feb 2026 21:43:02 +0500 Subject: [PATCH 24/32] ver incr --- xmake.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmake.lua b/xmake.lua index 27c4c808..40fa7ef7 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") From 178052aee2416704ec5b1d632084761fb8e27c84 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Sat, 7 Mar 2026 13:29:50 +0500 Subject: [PATCH 25/32] add back some legacy func --- dist/Source/Scripts/sslActorAlias.psc | 20 +++++++++++++++----- dist/Source/Scripts/sslSystemConfig.psc | 5 ++--- dist/Source/Scripts/sslThreadModel.psc | 8 ++++++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/dist/Source/Scripts/sslActorAlias.psc b/dist/Source/Scripts/sslActorAlias.psc index b3501f31..43d3e35e 100644 --- a/dist/Source/Scripts/sslActorAlias.psc +++ b/dist/Source/Scripts/sslActorAlias.psc @@ -72,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 --- ; ; ------------------------------------------------------- ; @@ -1633,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/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index e3ed6128..e0ab3b31 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -437,10 +437,10 @@ int property RotateScene hidden EndProperty int property EndAnimation hidden int Function Get() - return GetSettingInt("iEndAnimation") + return GetSettingInt("iKeyEnd") EndFunction Function Set(int aiSet) - SetSettingInt("iEndAnimation", aiSet) + SetSettingInt("iKeyEnd", aiSet) EndFunction EndProperty int property AdjustSchlong hidden @@ -1010,7 +1010,6 @@ Function Reload() UnregisterForAllKeys() RegisterForKey(ToggleFreeCamera) RegisterForKey(TargetActor) - RegisterForKey(EndAnimation) AddRemoveMatchmakerSpells() DisableThreadControl(_ActiveControl) diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index 13d1f3f5..7346b09c 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -3058,6 +3058,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 From be81af878f5ac4656b8b09fea01cdcbfb04e6123 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Mon, 9 Mar 2026 20:56:18 +0500 Subject: [PATCH 26/32] generic pos_tag indicators --- dist/Source/Scripts/sslThreadModel.psc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/Source/Scripts/sslThreadModel.psc b/dist/Source/Scripts/sslThreadModel.psc index 7346b09c..123cea43 100644 --- a/dist/Source/Scripts/sslThreadModel.psc +++ b/dist/Source/Scripts/sslThreadModel.psc @@ -1692,7 +1692,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 @@ -2095,9 +2095,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 From cf0b0d84719b9835b63acda600454d137b2dfeb8 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Tue, 17 Mar 2026 22:50:22 +0500 Subject: [PATCH 27/32] config and hotkeys update --- .../Interface/Translations/SexLab_ENGLISH.txt | 17 ++- dist/Source/Scripts/sslConfigMenu.psc | 54 ++++++-- dist/Source/Scripts/sslSystemConfig.psc | 115 ++++++++++++++---- src/UserData/Settings.cpp | 8 +- src/UserData/Settings.h | 2 +- src/UserData/mcm.def | 47 +++---- 6 files changed, 181 insertions(+), 62 deletions(-) diff --git a/dist/Interface/Translations/SexLab_ENGLISH.txt b/dist/Interface/Translations/SexLab_ENGLISH.txt index fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_ENGLISH.txt +++ b/dist/Interface/Translations/SexLab_ENGLISH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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/Source/Scripts/sslConfigMenu.psc b/dist/Source/Scripts/sslConfigMenu.psc index fe75061b..f0ae1047 100644 --- a/dist/Source/Scripts/sslConfigMenu.psc +++ b/dist/Source/Scripts/sslConfigMenu.psc @@ -370,6 +370,8 @@ Function AnimationSettings() 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 @@ -837,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) @@ -1469,27 +1471,55 @@ 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) + 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 + + SetCursorPosition(1) + + AddEmptyOption() + AddStateOptionKey("iToggleFreeCamera", "$SSL_iToggleFreeCamera", needsRegister = true) + AddToggleOptionST("UseSceneMenu", "$SSL_bUseSceneMenu", Config.UseSceneMenu) + bool menu_flag = !Config.UseSceneMenu + AddEmptyOption() + + 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_bUseSceneMenuHighlight") + EndEvent +EndState State ForceRegisterVoices Event OnSelectST() diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index e0ab3b31..d48dc5e3 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -258,6 +258,14 @@ bool property SubmissiveTarget hidden SetSettingBool("bSubmissiveTarget", aSet) EndFunction EndProperty +float property AdjustStepSize hidden + float Function Get() + return GetSettingFlt("fAdjustStepSize") + EndFunction + Function Set(float afSet) + SetSettingFlt("fAdjustStepSize", afSet) + EndFunction +EndProperty ; Integers int property AskBed hidden @@ -331,28 +339,28 @@ EndProperty ; Scene Control Keys ; TODO: Add support for legacy keybinds where possible -bool property AdjustTargetStage Hidden +bool property AdjustStage Hidden bool Function Get() - return GetSettingBool("bAdjustTargetStage") + return GetSettingBool("bAdjustStage") EndFunction Function Set(bool abSet) - SetSettingBool("bAdjustTargetStage", abSet) + SetSettingBool("bAdjustStage", 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,6 +379,56 @@ int property ChangePositions hidden SetSettingInt("iChangePositions", aiSet) EndFunction EndProperty + +; Offset Adjustment Keys +int property OffsetAdjustMode hidden + int Function Get() + return GetSettingInt("iOffsetAdjustMode") + EndFunction + Function Set(int aiSet) + SetSettingInt("iOffsetAdjustMode", aiSet) + EndFunction +EndProperty +int property ToggleAdjustStage hidden + int Function Get() + return GetSettingInt("iToggleAdjustStage") + EndFunction + Function Set(int aiSet) + SetSettingInt("iToggleAdjustStage", aiSet) + EndFunction +EndProperty +int property DirectionUp hidden + int Function Get() + return GetSettingInt("iKeyUp") + EndFunction + Function Set(int aiSet) + SetSettingInt("iKeyUp", aiSet) + EndFunction +EndProperty +int property DirectionDown hidden + int Function Get() + return GetSettingInt("iKeyDown") + EndFunction + Function Set(int aiSet) + SetSettingInt("iKeyDown", aiSet) + EndFunction +EndProperty +int property DirectionLeft hidden + int Function Get() + return GetSettingInt("iKeyLeft") + EndFunction + Function Set(int aiSet) + SetSettingInt("iKeyLeft", aiSet) + EndFunction +EndProperty +int property DirectionRight hidden + int Function Get() + return GetSettingInt("iKeyRight") + EndFunction + Function Set(int aiSet) + SetSettingInt("iKeyRight", aiSet) + EndFunction +EndProperty int property AdjustChange hidden int Function Get() return GetSettingInt("iAdjustChange") @@ -485,13 +543,22 @@ bool property HideHUD hidden SetSettingBool("bHideHUD", aSet) EndFunction EndProperty -bool property HideUI hidden - bool Function Get() - return GetSettingBool("bHideUI") - EndFunction - Function Set(bool aSet) - SetSettingBool("bHideUI", aSet) - EndFunction + +bool property UseSceneMenu hidden + bool Function Get() + return GetSettingBool("bUseSceneMenu") + EndFunction + Function Set(bool aSet) + SetSettingBool("bUseSceneMenu", aSet) + EndFunction +EndProperty +int property ToggleThreadControl hidden + int Function Get() + return GetSettingInt("iToggleThreadControl") + EndFunction + Function Set(int aiSet) + SetSettingInt("iToggleThreadControl", aiSet) + EndFunction EndProperty ; Floats @@ -714,17 +781,21 @@ Function SetTargetActor() EndIf EndFunction +bool function ModifierPressed() + return Input.GetNumKeysPressed() > 1 && Input.IsKeyPressed(ModifierKey) +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))) + return (!AdjustStage && Input.GetNumKeysPressed() > 1 && MirrorPress(ToggleAdjustStage)) \ + || (AdjustStage && !(Input.GetNumKeysPressed() > 1 && MirrorPress(ToggleAdjustStage))) endFunction bool function IsAdjustStagePressed() - return Input.GetNumKeysPressed() > 1 && MirrorPress(AdjustStage) + return Input.GetNumKeysPressed() > 1 && MirrorPress(ToggleAdjustStage) endFunction bool function MirrorPress(int mirrorkey) @@ -1243,10 +1314,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 @@ -1275,10 +1346,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 diff --git a/src/UserData/Settings.cpp b/src/UserData/Settings.cpp index 7c61e7ea..5d514360 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 d5f4b882..6b763d6a 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/mcm.def b/src/UserData/mcm.def index bec0f107..5bc1745a 100644 --- a/src/UserData/mcm.def +++ b/src/UserData/mcm.def @@ -31,37 +31,44 @@ 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) +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 + +MCM_SETTING(iToggleFreeCamera, 0x51) // Numpad 3 +MCM_SETTING(iTargetActor, 0x31) // N +MCM_SETTING(iToggleThreadControl, 0x14) // T + +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 - // TODO: Add these to MCM -MCM_SETTING(bAdjustTargetStage, false) MCM_SETTING(fAdjustStepSize, 0.5f) MCM_SETTING(bAdjustStage, true) MCM_SETTING(bHideHUD, false) -MCM_SETTING(bHideUI, false) +MCM_SETTING(bUseSceneMenu, true) // MCM_SETTING(iAdjustStage, 157) // MCM_SETTING(iBackwards, 54) -MCM_SETTING(iChangeAnimation, 24) +// 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(iMoveScene, 27) // MCM_SETTING(iRestoreOffsets, 12) // MCM_SETTING(iRotateScene, 22) // MCM_SETTING(iAdjustSchlong, 46) @@ -109,11 +116,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) From 4cbf67a74403df5ff31da998efcd4cc822c56cc4 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Tue, 17 Mar 2026 22:53:14 +0500 Subject: [PATCH 28/32] impl ToggleThreadControl --- dist/Source/Scripts/sslSystemConfig.psc | 56 +++++++++++++++++-------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index d48dc5e3..86b2a7ff 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -755,29 +755,47 @@ Event OnKeyDown(int keyCode) return ElseIf (keyCode == ToggleFreeCamera) SexLabUtil.ToggleFreeCamera() - ElseIf (keyCode == TargetActor) - If (_ActiveControl && !_ActiveControl.HasPlayer) - DisableThreadControl(_ActiveControl) - Else - SetTargetActor() - EndIf + 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) - ;Comeback: Revise below after UI update - _ActiveControl.StartStage(_ActiveControl.GetStageHistory(), _ActiveControl.GetActiveStage()) + TargetRef = akActor + If (abThreadControl) + ToggleThreadControl() + EndIf +EndFunction + +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 EndFunction @@ -848,6 +866,7 @@ Function DisableThreadControl(sslThreadController TargetThread) If (!_ActiveControl || _ActiveControl != TargetThread) return EndIf + TargetRef = None ; Release players thread control _ActiveControl.DisableHotkeys() _ActiveControl.AutoAdvance = true @@ -1081,6 +1100,7 @@ Function Reload() UnregisterForAllKeys() RegisterForKey(ToggleFreeCamera) RegisterForKey(TargetActor) + RegisterForKey(ToggleThreadControl) AddRemoveMatchmakerSpells() DisableThreadControl(_ActiveControl) From 3b0e6383e88cf52b5e9d8a7621d6c8255f9bfb02 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Tue, 17 Mar 2026 22:54:15 +0500 Subject: [PATCH 29/32] impl hotkeys and config update --- dist/Source/Scripts/sslThreadController.psc | 511 +++++++++++++------- dist/Source/Scripts/sslThreadModel.psc | 78 ++- 2 files changed, 372 insertions(+), 217 deletions(-) diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index 325d13a0..b88343b5 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -14,18 +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 + +; ------------------------------------------------------- ; +; --- Menu Events --- ; +; ------------------------------------------------------- ; String[] _MenuEvents -bool _SkipHotkeyEvents int _AutoAdvanceCache -bool _EnjGamePaused = false -Actor _EnjGamePartner = none - -Function EnableHotkeys(bool forced = false) - If(!HasPlayer && !forced || !TryOpenSceneMenu()) +Function EnableMenuEvents() + If (!TryOpenSceneMenu()) return EndIf _AutoAdvanceCache = -1 @@ -43,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) @@ -96,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) @@ -201,94 +220,332 @@ Function SetStageOffset(Actor akAffectedActor, float afOffsetValue, String asOff int n = GetPositions().Find(akAffectedActor) String activeScene = GetActiveScene() String activeStage = "" - If (sslSystemConfig.GetSettingBool("bAdjustTargetStage")) + If (Config.AdjustStage) activeStage = GetActiveStage() 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) - ; Enjoyment Game - RegisterForKey(Config.GameUtilityKey) - If (!Config.GameEnabled || !HasPlayer) - return + InitLegacyHotkeys() + RegisterForKey(kChangeAnimation) + RegisterForKey(kMoveScene) + RegisterForKey(kModifierKey) + RegisterForKey(kChangeTargetActor) + If (Config.GameEnabled && HasPlayer) + RegisterForKey(kGamePause) + RegisterForKey(kGameRaiseEnj) + RegisterForKey(kGameHoldback) + GetAdjustPos() ; initialize game partner + EndIf + If (!Config.UseSceneMenu) + RegisterForKey(kAdvanceAnimation) + RegisterForKey(kEndAnimation) + RegisterForKey(kChangePositions) + RegisterForKey(kOffsetAdjustMode) + RegisterForKey(kToggleAdjustStage) + RegisterForKey(kRestoreOffsets) + RegisterForKey(kDirectionUp) + RegisterForKey(kDirectionDown) + RegisterForKey(kDirectionLeft) + RegisterForKey(kDirectionRight) EndIf - RegisterForKey(Config.GamePauseKey) - RegisterForKey(Config.GameRaiseEnjKey) - RegisterForKey(Config.GameHoldbackKey) - RegisterForKey(Config.GameSelectNextPos) - _EnjGamePartner = GameChangePartner(PlayerRef) EndFunction Function DisableTraditionalHotkeys() - UnregisterForKey(Config.ChangeAnimation) - UnregisterForKey(Config.MoveScene) - ; Enjoyment Game - UnregisterForKey(Config.GameUtilityKey) - UnregisterForKey(Config.GamePauseKey) - UnregisterForKey(Config.GameRaiseEnjKey) - UnregisterForKey(Config.GameHoldbackKey) - UnregisterForKey(Config.GameSelectNextPos) -EndFunction + 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 == kModifierKey)) return EndIf _SkipHotkeyEvents = true - If(KeyCode == Config.ChangeAnimation) - ChangeAnimation(Input.IsKeyPressed(Config.GameUtilityKey)) - _SkipHotkeyEvents = false - return - ElseIf(KeyCode == Config.MoveScene) + ; QoL+Shared + bool abModifier = Config.ModifierPressed() + If (aiKey == kChangeAnimation) + PickRandomScene("") + ElseIf (aiKey == kMoveScene) MoveScene() - _SkipHotkeyEvents = false + ElseIf (aiKey == kChangeTargetActor) + ChangeTargetActor(abModifier) + EndIf + ; EnjGame + If (Config.GameEnabled && HasPlayer) + If ((aiKey == Config.GamePauseKey) && (abModifier)) + _EnjGamePaused = !_EnjGamePaused + Log("[EnjGame] Game paused: " + _EnjGamePaused) + EndIf + If (!_EnjGamePaused) + If (aiKey == Config.GameRaiseEnjKey) + ProcessEnjGameArg("Stamina", _AdjustActor) + ElseIf (aiKey == Config.GameHoldbackKey) + ProcessEnjGameArg("Magicka", _AdjustActor) + EndIf + EndIf + EndIf + ; Legacy + If (Config.UseSceneMenu) return EndIf + If (aiKey == kAdvanceAnimation) + AdvanceStage(abModifier) + ElseIf (aiKey == kEndAnimation) + EndAnimation() + ElseIf (aiKey == kChangePositions) + ChangePositions(abModifier) + ElseIf (aiKey == kOffsetAdjustMode) + CycleOffsetAdjustModes(abModifier) + ElseIf (aiKey == kToggleAdjustStage) + Config.AdjustStage = !Config.AdjustStage + ElseIf (aiKey == kRestoreOffsets) + RestoreOffsets() + EndIf + If (_AdjustMode > AdjMode_None) + string[] asOffsetType = DetermineOffsetAdjustInputType(aiKey) + HandleOffsetAdjustment(asOffsetType) + EndIf _SkipHotkeyEvents = false - ; Enjoyment Game - If(!HasPlayer || !Config.GameEnabled) +EndEvent + +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 - If((KeyCode == Config.GamePauseKey) && (Input.IsKeyPressed(Config.GameUtilityKey))) - _EnjGamePaused = !_EnjGamePaused - Log("[EnjGame] Game paused: " + _EnjGamePaused) - EndIf - If(!_EnjGamePaused) - If(KeyCode == Config.GameRaiseEnjKey) - ProcessEnjGameArg("Stamina", _EnjGamePartner) - ElseIf(KeyCode == Config.GameHoldbackKey) - ProcessEnjGameArg("Magicka", _EnjGamePartner) - ElseIf(KeyCode == Config.GameSelectNextPos) - int newIdx = GameNextPartnerIdx(PlayerRef, _EnjGamePartner, Input.IsKeyPressed(Config.GameUtilityKey)) - _EnjGamePartner = GameChangePartner(PlayerRef, newIdx) + ;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 != kDirectionUp) && (aiKey != kDirectionDown) && (aiKey != kDirectionLeft) && (aiKey != kDirectionRight)) + return ret + EndIf + bool abAdjustingRZ = (_AdjustMode == AdjMode_PosRZ) || (_AdjustMode == AdjMode_SceneRZ) + If (aiKey == kDirectionLeft) + ret[0] = "-" + If (abAdjustingRZ) + ret[1] = "R" + Else + ret[1] = "X" + EndIf + ElseIf (aiKey == kDirectionRight) + If (abAdjustingRZ) + ret[1] = "R" + Else + ret[1] = "X" + EndIf + ElseIf (aiKey == kDirectionUp) + If (abAdjustingRZ) + ret[1] = "Z" + Else + ret[1] = "Y" + EndIf + ElseIf (aiKey == kDirectionDown) + ret[0] = "-" + If (abAdjustingRZ) + ret[1] = "Z" + Else + ret[1] = "Y" EndIf EndIf -EndEvent + return ret +EndFunction -Function ChangeAnimation(bool backwards = false) - string[] Scenes = GetPlayingScenes() - If(Scenes.Length < 2) +Function HandleOffsetAdjustment(String[] asOffsetType) + If (asOffsetType[1] == "") return EndIf - UnregisterForUpdate() - int current = Scenes.Find(GetActiveScene()) - String newScene - If (!Config.AdjustStagePressed()) - newScene = Scenes[sslUtility.IndexTravel(current, Scenes.Length, backwards)] + 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]) 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]) + 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 ; *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* ; @@ -302,22 +559,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) @@ -359,32 +614,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) @@ -456,64 +688,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 123cea43..b47e8219 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)) @@ -1532,6 +1535,31 @@ 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 @@ -2153,7 +2181,7 @@ EndFunction Function ProcessEnjGameArg(String arg, Actor akPartner) Actor akTarget = None - If (Input.IsKeyPressed(Config.GameUtilityKey)) + If (Input.IsKeyPressed(Config.ModifierKey)) akTarget = akPartner ;change partner enj Else akTarget = PlayerRef ;change self/player enj @@ -2169,54 +2197,6 @@ Function ProcessEnjGameArg(String arg, Actor akPartner) EndIf EndFunction -Actor Function GameChangePartner(Actor akActor, int idx = -1) - Actor akPartner = akActor - If (_Positions.Length > 1) - If (idx < 0) - int idxPartner = sslUtility.IndexTravel(GetPositionIdx(akActor), _Positions.Length) - akPartner = ActorAlias[idxPartner].GetActorRef() - If (akActor == PlayerRef) - Log("[EnjGame] Player's current partner is " + akPartner.GetDisplayName()) - EndIf - Else - akPartner = ActorAlias[idx].GetActorRef() - If ((akPartner != akActor) && (akActor == PlayerRef)) - Config.SelectedSpell.Cast(akPartner, akPartner) - Log("[EnjGame] Player changed focus to " + akPartner.GetDisplayName()) - EndIf - 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) if !abSkip return From 1f4494aeb901508090b7fe3324a440c18d07c063 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Tue, 17 Mar 2026 23:22:30 +0500 Subject: [PATCH 30/32] format: move stuff around and add new translations --- .../Interface/Translations/SexLab_CHINESE.txt | 17 +- dist/Interface/Translations/SexLab_CZECH.txt | 17 +- dist/Interface/Translations/SexLab_DANISH.txt | 17 +- .../Interface/Translations/SexLab_FINNISH.txt | 17 +- dist/Interface/Translations/SexLab_FRENCH.txt | 17 +- dist/Interface/Translations/SexLab_GERMAN.txt | 17 +- dist/Interface/Translations/SexLab_GREEK.txt | 17 +- .../Interface/Translations/SexLab_ITALIAN.txt | 17 +- .../Translations/SexLab_JAPANESE.txt | 17 +- .../Translations/SexLab_NORWEGIAN.txt | 17 +- dist/Interface/Translations/SexLab_POLISH.txt | 17 +- .../Interface/Translations/SexLab_RUSSIAN.txt | 31 +- .../Interface/Translations/SexLab_SPANISH.txt | 17 +- .../Interface/Translations/SexLab_SWEDISH.txt | 17 +- .../Interface/Translations/SexLab_TURKISH.txt | 17 +- dist/Source/Scripts/sslConfigMenu.psc | 22 +- dist/Source/Scripts/sslSystemConfig.psc | 292 +++++++++--------- src/UserData/mcm.def | 61 ++-- 18 files changed, 423 insertions(+), 221 deletions(-) diff --git a/dist/Interface/Translations/SexLab_CHINESE.txt b/dist/Interface/Translations/SexLab_CHINESE.txt index fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_CHINESE.txt +++ b/dist/Interface/Translations/SexLab_CHINESE.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_CZECH.txt +++ b/dist/Interface/Translations/SexLab_CZECH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_DANISH.txt +++ b/dist/Interface/Translations/SexLab_DANISH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_FINNISH.txt +++ b/dist/Interface/Translations/SexLab_FINNISH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_FRENCH.txt +++ b/dist/Interface/Translations/SexLab_FRENCH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_GERMAN.txt +++ b/dist/Interface/Translations/SexLab_GERMAN.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_GREEK.txt +++ b/dist/Interface/Translations/SexLab_GREEK.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_ITALIAN.txt +++ b/dist/Interface/Translations/SexLab_ITALIAN.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_JAPANESE.txt +++ b/dist/Interface/Translations/SexLab_JAPANESE.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_NORWEGIAN.txt +++ b/dist/Interface/Translations/SexLab_NORWEGIAN.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_POLISH.txt +++ b/dist/Interface/Translations/SexLab_POLISH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 1437ec68..518c00c0 100644 --- a/dist/Interface/Translations/SexLab_RUSSIAN.txt +++ b/dist/Interface/Translations/SexLab_RUSSIAN.txt @@ -239,6 +239,14 @@ $SSL_bShowInMap Показать сцены на карте $SSL_bShowInMapHighlight Если включено и Игрок не являющейся частью анимации, но анимация рядом с Игроком, сцены SexLab будут показаны на карте как квест дополнительного типа $SSL_bSetAnimSpeedByEnjoyment Изменять скорость анимации $SSL_bSetAnimSpeedByEnjoymentHighlight Изменять скорость анимации в зависимости от степени возбуждения. На данный момент 0.8~1.2 +# TODO: $SSL_AdjustStage +$SSL_AdjustStage Adjust Stage Only +# TODO: $SSL_AdjustStageHighlight +$SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. +# TODO: $SSL_fAdjustStepSize +$SSL_fAdjustStepSize Offset Step Size +# TODO: $SSL_fAdjustStepSizeHighlight +$SSL_fAdjustStepSizeHighlight Determines the step size for offset adjustments. $SSL_FurnitureNPC Использование мебели: NPC $SSL_FurnitureNPCHighlight Как NPC используют мебель. Если быть более точным, будут ли NPC использовать мебель, если она доступна и при каких условиях. $SSL_AskNotSub Спрашивать (если игрок не покорный) @@ -310,6 +318,10 @@ $SSL_WolfVoice01 [SL] Волк Обычный # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Горячие клавиши +# TODO: $SSL_bUseSceneMenu +$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 Глобальные горячие клавиши @@ -328,12 +340,25 @@ $SSL_iKeyLeft Уменьшить скорость / Влево $SSL_iKeyRight Увеличить скорость / Вправо $SSL_iKeyAdvance Продолжить сцену / Выбрать $SSL_iKeyEnd Закончить сцену -$SSL_iKeyExtra1 Открыть меню / Переключить цель для смещения -$SSL_iKeyExtra2 Экстра / Повернуть сцену +# TODO: $SSL_iKeyMenu +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Модификатор $SSL_iKeyReset Инвертирование действия + +# TODO: $SSL_LegacyHotkeys +$SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene +# TODO: $SSL_iChangePositions +$SSL_iChangePositions Change Positions +# TODO: $SSL_iOffsetAdjustMode +$SSL_iOffsetAdjustMode Cycle Offset Adjust Modes +# TODO: $SSL_iOffsetAdjustModeHighlight +$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). +# TODO: $SSL_iToggleAdjustStage +$SSL_iToggleAdjustStage Toggle Adjust Stage +# TODO: $SSL_iRestoreOffsets +$SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- $SSL_TimersStripping Таймеры/Раздевание @@ -444,9 +469,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_SPANISH.txt +++ b/dist/Interface/Translations/SexLab_SPANISH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_SWEDISH.txt +++ b/dist/Interface/Translations/SexLab_SWEDISH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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 fbe4359f..9bc46600 100644 --- a/dist/Interface/Translations/SexLab_TURKISH.txt +++ b/dist/Interface/Translations/SexLab_TURKISH.txt @@ -239,6 +239,10 @@ $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_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,6 +314,9 @@ $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 @@ -328,12 +335,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/Source/Scripts/sslConfigMenu.psc b/dist/Source/Scripts/sslConfigMenu.psc index f0ae1047..48197cad 100644 --- a/dist/Source/Scripts/sslConfigMenu.psc +++ b/dist/Source/Scripts/sslConfigMenu.psc @@ -963,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() @@ -1521,17 +1532,6 @@ State UseSceneMenu 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 - ; ------------------------------------------------------- ; ; --- Misc Utilities --- ; ; ------------------------------------------------------- ; diff --git a/dist/Source/Scripts/sslSystemConfig.psc b/dist/Source/Scripts/sslSystemConfig.psc index 86b2a7ff..ef6008e4 100644 --- a/dist/Source/Scripts/sslSystemConfig.psc +++ b/dist/Source/Scripts/sslSystemConfig.psc @@ -258,6 +258,14 @@ 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") @@ -266,6 +274,22 @@ float property AdjustStepSize hidden 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 @@ -338,15 +362,6 @@ int property LipsSoundTime hidden EndProperty ; Scene Control Keys -; TODO: Add support for legacy keybinds where possible -bool property AdjustStage Hidden - bool Function Get() - return GetSettingBool("bAdjustStage") - EndFunction - Function Set(bool abSet) - SetSettingBool("bAdjustStage", abSet) - EndFunction -EndProperty int property ModifierKey hidden int Function Get() return GetSettingInt("iKeyMod") @@ -379,6 +394,22 @@ int property ChangePositions hidden SetSettingInt("iChangePositions", aiSet) EndFunction EndProperty +int property MoveScene hidden + int Function Get() + return GetSettingInt("iMoveScene") + EndFunction + Function Set(int aiSet) + SetSettingInt("iMoveScene", aiSet) + EndFunction +EndProperty +int property EndAnimation hidden + int Function Get() + return GetSettingInt("iKeyEnd") + EndFunction + Function Set(int aiSet) + SetSettingInt("iKeyEnd", aiSet) + EndFunction +EndProperty ; Offset Adjustment Keys int property OffsetAdjustMode hidden @@ -397,6 +428,14 @@ int property ToggleAdjustStage hidden SetSettingInt("iToggleAdjustStage", aiSet) EndFunction EndProperty +int property RestoreOffsets hidden + int Function Get() + return GetSettingInt("iRestoreOffsets") + EndFunction + Function Set(int aiSet) + SetSettingInt("iRestoreOffsets", aiSet) + EndFunction +EndProperty int property DirectionUp hidden int Function Get() return GetSettingInt("iKeyUp") @@ -429,96 +468,8 @@ int property DirectionRight hidden SetSettingInt("iKeyRight", 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 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 MoveScene hidden - int Function Get() - return GetSettingInt("iMoveScene") - EndFunction - Function Set(int aiSet) - SetSettingInt("iMoveScene", aiSet) - EndFunction -EndProperty -int property RestoreOffsets hidden - int Function Get() - return GetSettingInt("iRestoreOffsets") - EndFunction - Function Set(int aiSet) - SetSettingInt("iRestoreOffsets", 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 EndAnimation hidden - int Function Get() - return GetSettingInt("iKeyEnd") - EndFunction - Function Set(int aiSet) - SetSettingInt("iKeyEnd", 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 -; Misc Keys +; Global Keys int property ToggleFreeCamera hidden int Function Get() return GetSettingInt("iToggleFreeCamera") @@ -527,37 +478,20 @@ int property ToggleFreeCamera hidden SetSettingInt("iToggleFreeCamera", aiSet) EndFunction EndProperty -int property TargetActor hidden +int property ToggleThreadControl hidden int Function Get() - return GetSettingInt("iTargetActor") + return GetSettingInt("iToggleThreadControl") EndFunction Function Set(int aiSet) - 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 - -bool property UseSceneMenu hidden - bool Function Get() - return GetSettingBool("bUseSceneMenu") - EndFunction - Function Set(bool aSet) - SetSettingBool("bUseSceneMenu", aSet) + SetSettingInt("iToggleThreadControl", aiSet) EndFunction EndProperty -int property ToggleThreadControl hidden +int property TargetActor hidden int Function Get() - return GetSettingInt("iToggleThreadControl") + return GetSettingInt("iTargetActor") EndFunction Function Set(int aiSet) - SetSettingInt("iToggleThreadControl", aiSet) + SetSettingInt("iTargetActor", aiSet) EndFunction EndProperty @@ -803,31 +737,6 @@ bool function ModifierPressed() return Input.GetNumKeysPressed() > 1 && Input.IsKeyPressed(ModifierKey) endFunction -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 - ; ------------------------------------------------------- ; ; --- Thread Control --- ; ; ------------------------------------------------------- ; @@ -1447,7 +1356,6 @@ Message property CheckSexLabUtil Hidden EndFunction EndProperty - Faction property AnimatingFaction Hidden Faction Function Get() return Game.GetFormFromFile(0xE50F, "SexLab.esm") as Faction @@ -1988,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/src/UserData/mcm.def b/src/UserData/mcm.def index 5bc1745a..6ca211ec 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,6 +33,32 @@ MCM_SETTING(iLovenseStrength, 10) MCM_SETTING(iLovenseStrengthOrgasm, 20) MCM_SETTING(fLovenseDurationOrgasm, 8) +MCM_SETTING(fAdjustStepSize, 0.5f) +MCM_SETTING(fShakeStrength, 0.7f) +MCM_SETTING(fAutoSUCSM, 5.0f) +MCM_SETTING(fMaleVoiceDelay, 5.0f) +MCM_SETTING(fFemaleVoiceDelay, 4.0f) +MCM_SETTING(fVoiceVolume, 1.0f) +MCM_SETTING(fSFXDelay, 3.0f) +MCM_SETTING(fSFXVolume, 1.0f) + +MCM_SETTING(bUseCum, true) +MCM_SETTING(fCumTimer, 180.0f) +MCM_SETTING(fCumAlpha, 1.0f) +MCM_SETTING(bSwimmingCleans, true) + +MCM_SETTING(sRequiredTags, ""s) +MCM_SETTING(sExcludedTags, ""s) +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 @@ -41,10 +70,7 @@ MCM_SETTING(iKeyMenu, 0x12) // E MCM_SETTING(iKeyMod, 0x2A) // Shift MCM_SETTING(iKeyReset, 0x1D) // Ctrl -MCM_SETTING(iToggleFreeCamera, 0x51) // Numpad 3 -MCM_SETTING(iTargetActor, 0x31) // N -MCM_SETTING(iToggleThreadControl, 0x14) // T - +// KeyBinds/Legacy Hotkeys MCM_SETTING(iMoveScene, 0x25) // K MCM_SETTING(iChangeAnimation, 0x18) // O MCM_SETTING(iChangePositions, 0x0D) // Numpad Enter @@ -52,13 +78,6 @@ MCM_SETTING(iOffsetAdjustMode, 0x4E) // Numpad + MCM_SETTING(iToggleAdjustStage, 0x52) // Numpad 0 MCM_SETTING(iRestoreOffsets, 0x4A) // Numpad - -// TODO: Add these to MCM -MCM_SETTING(fAdjustStepSize, 0.5f) -MCM_SETTING(bAdjustStage, true) - -MCM_SETTING(bHideHUD, false) -MCM_SETTING(bUseSceneMenu, true) - // MCM_SETTING(iAdjustStage, 157) // MCM_SETTING(iBackwards, 54) // MCM_SETTING(iChangeAnimation, 24) @@ -73,26 +92,6 @@ MCM_SETTING(bUseSceneMenu, true) // MCM_SETTING(iRotateScene, 22) // MCM_SETTING(iAdjustSchlong, 46) -MCM_SETTING(fShakeStrength, 0.7f) -MCM_SETTING(fAutoSUCSM, 5.0f) -MCM_SETTING(fMaleVoiceDelay, 5.0f) -MCM_SETTING(fFemaleVoiceDelay, 4.0f) -MCM_SETTING(fVoiceVolume, 1.0f) -MCM_SETTING(fSFXDelay, 3.0f) -MCM_SETTING(fSFXVolume, 1.0f) - -MCM_SETTING(bUseCum, true) -MCM_SETTING(fCumTimer, 180.0f) -MCM_SETTING(fCumAlpha, 1.0f) -MCM_SETTING(bSwimmingCleans, true) - -MCM_SETTING(sRequiredTags, ""s) -MCM_SETTING(sExcludedTags, ""s) -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 })) - // Enjoyment Related MCM_SETTING(bInternalEnjoymentEnabled, true) From 084cf46c0db484a0fd14d930b709f1056caa40c2 Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Wed, 18 Mar 2026 01:29:16 +0500 Subject: [PATCH 31/32] fix: bugs in the config update --- .../Interface/Translations/SexLab_CHINESE.txt | 33 +++--- dist/Interface/Translations/SexLab_CZECH.txt | 33 +++--- dist/Interface/Translations/SexLab_DANISH.txt | 33 +++--- .../Interface/Translations/SexLab_ENGLISH.txt | 33 +++--- .../Interface/Translations/SexLab_FINNISH.txt | 33 +++--- dist/Interface/Translations/SexLab_FRENCH.txt | 33 +++--- dist/Interface/Translations/SexLab_GERMAN.txt | 33 +++--- dist/Interface/Translations/SexLab_GREEK.txt | 33 +++--- .../Interface/Translations/SexLab_ITALIAN.txt | 33 +++--- .../Translations/SexLab_JAPANESE.txt | 33 +++--- .../Translations/SexLab_NORWEGIAN.txt | 33 +++--- dist/Interface/Translations/SexLab_POLISH.txt | 33 +++--- .../Interface/Translations/SexLab_RUSSIAN.txt | 21 +--- .../Interface/Translations/SexLab_SPANISH.txt | 33 +++--- .../Interface/Translations/SexLab_SWEDISH.txt | 33 +++--- .../Interface/Translations/SexLab_TURKISH.txt | 33 +++--- dist/Source/Scripts/sslConfigMenu.psc | 3 +- dist/Source/Scripts/sslThreadController.psc | 110 +++++++++--------- 18 files changed, 319 insertions(+), 310 deletions(-) diff --git a/dist/Interface/Translations/SexLab_CHINESE.txt b/dist/Interface/Translations/SexLab_CHINESE.txt index 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_CHINESE.txt +++ b/dist/Interface/Translations/SexLab_CHINESE.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_CZECH.txt +++ b/dist/Interface/Translations/SexLab_CZECH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_DANISH.txt +++ b/dist/Interface/Translations/SexLab_DANISH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_ENGLISH.txt +++ b/dist/Interface/Translations/SexLab_ENGLISH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_FINNISH.txt +++ b/dist/Interface/Translations/SexLab_FINNISH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_FRENCH.txt +++ b/dist/Interface/Translations/SexLab_FRENCH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_GERMAN.txt +++ b/dist/Interface/Translations/SexLab_GERMAN.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_GREEK.txt +++ b/dist/Interface/Translations/SexLab_GREEK.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_ITALIAN.txt +++ b/dist/Interface/Translations/SexLab_ITALIAN.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_JAPANESE.txt +++ b/dist/Interface/Translations/SexLab_JAPANESE.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_NORWEGIAN.txt +++ b/dist/Interface/Translations/SexLab_NORWEGIAN.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_POLISH.txt +++ b/dist/Interface/Translations/SexLab_POLISH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 518c00c0..01f6f6ff 100644 --- a/dist/Interface/Translations/SexLab_RUSSIAN.txt +++ b/dist/Interface/Translations/SexLab_RUSSIAN.txt @@ -239,14 +239,12 @@ $SSL_bShowInMap Показать сцены на карте $SSL_bShowInMapHighlight Если включено и Игрок не являющейся частью анимации, но анимация рядом с Игроком, сцены SexLab будут показаны на карте как квест дополнительного типа $SSL_bSetAnimSpeedByEnjoyment Изменять скорость анимации $SSL_bSetAnimSpeedByEnjoymentHighlight Изменять скорость анимации в зависимости от степени возбуждения. На данный момент 0.8~1.2 -# TODO: $SSL_AdjustStage $SSL_AdjustStage Adjust Stage Only -# TODO: $SSL_AdjustStageHighlight $SSL_AdjustStageHighlight Toggles whether all edits to position/stage offsets will apply for currently playing stage only. -# TODO: $SSL_fAdjustStepSize $SSL_fAdjustStepSize Offset Step Size -# TODO: $SSL_fAdjustStepSizeHighlight $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 Спрашивать (если игрок не покорный) @@ -318,9 +316,9 @@ $SSL_WolfVoice01 [SL] Волк Обычный # ------------------Player Hotkeys-------------------------------------------------- $SSL_PlayerHotkeys Горячие клавиши -# TODO: $SSL_bUseSceneMenu $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. +# 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 Глобальные горячие клавиши @@ -329,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 Управление сценой @@ -340,24 +338,17 @@ $SSL_iKeyLeft Уменьшить скорость / Влево $SSL_iKeyRight Увеличить скорость / Вправо $SSL_iKeyAdvance Продолжить сцену / Выбрать $SSL_iKeyEnd Закончить сцену -# TODO: $SSL_iKeyMenu $SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Модификатор $SSL_iKeyReset Инвертирование действия -# TODO: $SSL_LegacyHotkeys $SSL_LegacyHotkeys Legacy Hotkeys $SSL_iChangeAnimation Change Animation $SSL_iMoveScene Move Scene -# TODO: $SSL_iChangePositions $SSL_iChangePositions Change Positions -# TODO: $SSL_iOffsetAdjustMode $SSL_iOffsetAdjustMode Cycle Offset Adjust Modes -# TODO: $SSL_iOffsetAdjustModeHighlight $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). -# TODO: $SSL_iToggleAdjustStage $SSL_iToggleAdjustStage Toggle Adjust Stage -# TODO: $SSL_iRestoreOffsets $SSL_iRestoreOffsets Reset Offset Adjustments # ------------------- Timers & Stripping ------------------------------------------------- diff --git a/dist/Interface/Translations/SexLab_SPANISH.txt b/dist/Interface/Translations/SexLab_SPANISH.txt index 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_SPANISH.txt +++ b/dist/Interface/Translations/SexLab_SPANISH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_SWEDISH.txt +++ b/dist/Interface/Translations/SexLab_SWEDISH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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 9bc46600..c340f774 100644 --- a/dist/Interface/Translations/SexLab_TURKISH.txt +++ b/dist/Interface/Translations/SexLab_TURKISH.txt @@ -239,10 +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_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) @@ -314,8 +316,8 @@ $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. +$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 @@ -323,9 +325,8 @@ $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 @@ -335,18 +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_iKeyMenu Open Menu / Swap Menu Tab +$SSL_iKeyMenu Open Menu / Swap Menu Tab $SSL_iKeyMod Modifier $SSL_iKeyReset Inverse Action -$SSL_LegacyHotkeys Legacy Hotkeys +$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 +$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/Source/Scripts/sslConfigMenu.psc b/dist/Source/Scripts/sslConfigMenu.psc index 48197cad..6c4aaeb3 100644 --- a/dist/Source/Scripts/sslConfigMenu.psc +++ b/dist/Source/Scripts/sslConfigMenu.psc @@ -1504,8 +1504,7 @@ function PlayerHotkeys() AddEmptyOption() AddStateOptionKey("iToggleFreeCamera", "$SSL_iToggleFreeCamera", needsRegister = true) AddToggleOptionST("UseSceneMenu", "$SSL_bUseSceneMenu", Config.UseSceneMenu) - bool menu_flag = !Config.UseSceneMenu - AddEmptyOption() + bool menu_flag = Config.UseSceneMenu AddHeaderOption("$SSL_LegacyHotkeys") AddStateOptionKey("iChangeAnimation", "$SSL_iChangeAnimation", true, true) diff --git a/dist/Source/Scripts/sslThreadController.psc b/dist/Source/Scripts/sslThreadController.psc index b88343b5..9ad6b213 100644 --- a/dist/Source/Scripts/sslThreadController.psc +++ b/dist/Source/Scripts/sslThreadController.psc @@ -208,14 +208,17 @@ 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() @@ -223,6 +226,9 @@ Function SetStageOffset(Actor akAffectedActor, float afOffsetValue, String asOff 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 @@ -263,27 +269,27 @@ bool _EnjGamePaused = False Function EnableTraditionalHotkeys() InitLegacyHotkeys() - RegisterForKey(kChangeAnimation) - RegisterForKey(kMoveScene) - RegisterForKey(kModifierKey) - RegisterForKey(kChangeTargetActor) + RegisterForKey(Hotkeys[kChangeAnimation]) + RegisterForKey(Hotkeys[kMoveScene]) + RegisterForKey(Hotkeys[kModifierKey]) + RegisterForKey(Hotkeys[kChangeTargetActor]) If (Config.GameEnabled && HasPlayer) - RegisterForKey(kGamePause) - RegisterForKey(kGameRaiseEnj) - RegisterForKey(kGameHoldback) - GetAdjustPos() ; initialize game partner + RegisterForKey(Hotkeys[kGamePause]) + RegisterForKey(Hotkeys[kGameRaiseEnj]) + RegisterForKey(Hotkeys[kGameHoldback]) + GetAdjustPos() EndIf If (!Config.UseSceneMenu) - RegisterForKey(kAdvanceAnimation) - RegisterForKey(kEndAnimation) - RegisterForKey(kChangePositions) - RegisterForKey(kOffsetAdjustMode) - RegisterForKey(kToggleAdjustStage) - RegisterForKey(kRestoreOffsets) - RegisterForKey(kDirectionUp) - RegisterForKey(kDirectionDown) - RegisterForKey(kDirectionLeft) - RegisterForKey(kDirectionRight) + 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 @@ -296,48 +302,49 @@ Function DisableTraditionalHotkeys() EndFunction Event OnKeyDown(int aiKey) - If (Utility.IsInMenuMode() || _SkipHotkeyEvents || (aiKey == kModifierKey)) + If (Utility.IsInMenuMode() || _SkipHotkeyEvents || (aiKey == Hotkeys[kModifierKey])) return EndIf _SkipHotkeyEvents = true ; QoL+Shared bool abModifier = Config.ModifierPressed() - If (aiKey == kChangeAnimation) + If (aiKey == Hotkeys[kChangeAnimation]) PickRandomScene("") - ElseIf (aiKey == kMoveScene) + ElseIf (aiKey == Hotkeys[kMoveScene]) MoveScene() - ElseIf (aiKey == kChangeTargetActor) + ElseIf (aiKey == Hotkeys[kChangeTargetActor]) ChangeTargetActor(abModifier) EndIf ; EnjGame If (Config.GameEnabled && HasPlayer) - If ((aiKey == Config.GamePauseKey) && (abModifier)) + If ((aiKey == Hotkeys[kGamePause]) && abModifier) _EnjGamePaused = !_EnjGamePaused Log("[EnjGame] Game paused: " + _EnjGamePaused) EndIf If (!_EnjGamePaused) - If (aiKey == Config.GameRaiseEnjKey) + If (aiKey == Hotkeys[kGameRaiseEnj]) ProcessEnjGameArg("Stamina", _AdjustActor) - ElseIf (aiKey == Config.GameHoldbackKey) + ElseIf (aiKey == Hotkeys[kGameHoldback]) ProcessEnjGameArg("Magicka", _AdjustActor) EndIf EndIf EndIf ; Legacy If (Config.UseSceneMenu) + _SkipHotkeyEvents = false return EndIf - If (aiKey == kAdvanceAnimation) + If (aiKey == Hotkeys[kAdvanceAnimation]) AdvanceStage(abModifier) - ElseIf (aiKey == kEndAnimation) + ElseIf (aiKey == Hotkeys[kEndAnimation]) EndAnimation() - ElseIf (aiKey == kChangePositions) + ElseIf (aiKey == Hotkeys[kChangePositions]) ChangePositions(abModifier) - ElseIf (aiKey == kOffsetAdjustMode) + ElseIf (aiKey == Hotkeys[kOffsetAdjustMode]) CycleOffsetAdjustModes(abModifier) - ElseIf (aiKey == kToggleAdjustStage) + ElseIf (aiKey == Hotkeys[kToggleAdjustStage]) Config.AdjustStage = !Config.AdjustStage - ElseIf (aiKey == kRestoreOffsets) + ElseIf (aiKey == Hotkeys[kRestoreOffsets]) RestoreOffsets() EndIf If (_AdjustMode > AdjMode_None) @@ -452,34 +459,31 @@ EndFunction string[] Function DetermineOffsetAdjustInputType(int aiKey) string[] ret = Utility.CreateStringArray(2, "") - If ((aiKey != kDirectionUp) && (aiKey != kDirectionDown) && (aiKey != kDirectionLeft) && (aiKey != kDirectionRight)) + 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 == kDirectionLeft) + bool abAdjustingRZ = (_AdjustMode == AdjMode_PosRZ) || (_AdjustMode == AdjMode_SceneRZ) + If (aiKey == Hotkeys[kDirectionLeft]) ret[0] = "-" - If (abAdjustingRZ) - ret[1] = "R" - Else + ret[1] = "R" + If (!abAdjustingRZ) ret[1] = "X" EndIf - ElseIf (aiKey == kDirectionRight) - If (abAdjustingRZ) - ret[1] = "R" - Else + ElseIf (aiKey == Hotkeys[kDirectionRight]) + ret[1] = "R" + If (!abAdjustingRZ) ret[1] = "X" EndIf - ElseIf (aiKey == kDirectionUp) - If (abAdjustingRZ) - ret[1] = "Z" - Else + ElseIf (aiKey == Hotkeys[kDirectionUp]) + ret[1] = "Z" + If (!abAdjustingRZ) ret[1] = "Y" EndIf - ElseIf (aiKey == kDirectionDown) + ElseIf (aiKey == Hotkeys[kDirectionDown]) ret[0] = "-" - If (abAdjustingRZ) - ret[1] = "Z" - Else + ret[1] = "Z" + If (!abAdjustingRZ) ret[1] = "Y" EndIf EndIf @@ -496,9 +500,9 @@ Function HandleOffsetAdjustment(String[] asOffsetType) EndIf bool abAdjustingPos = (_AdjustMode == AdjMode_PosXY) || (_AdjustMode == AdjMode_PosRZ) If (abAdjustingPos) - SetStageOffset(_AdjustActor, afValue, asOffsetType[1]) + SetStageOffset(_AdjustActor, afValue, asOffsetType[1], true) Else - SetSceneOffset(afValue, asOffsetType[1]) + SetSceneOffset(afValue, asOffsetType[1], true) EndIf EndFunction From ab760c5a76e173c72850f3bef2c2afe5c544c08c Mon Sep 17 00:00:00 2001 From: BabyImpala <116924540+BabyImpala@users.noreply.github.com> Date: Wed, 18 Mar 2026 01:29:51 +0500 Subject: [PATCH 32/32] update translate.py paths --- dist/Interface/Translations/translate.py | 28 +++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/dist/Interface/Translations/translate.py b/dist/Interface/Translations/translate.py index b34162ef..d6bb57d1 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}")