Jump to content

removing DD heel offsets with SL P+


Recommended Posts

Posted

I asked a similar question in the P+ thread a while back but it didn't get much traction there outside of a response from Scrab stating she hadn't looked at heel offsets yet. Figured I'd try here, so I'm curious - 

 

For people who are playing with SexLab P+, how are you dealing with heels during animations? I'm particularly interested in DD heels since those are locked on your character and cannot be manually unequipped in the middle of an animation - and since alignment hotkeys have been temporarily removed, that's not an option either. I've been excluding DD boots from all mods which can equip devices but that's kinda boring... is there a better way?

  • 4 weeks later...
Posted

A bit late but I've been trying to make this work myself.

 

I've been moderately successful with this patch for racemenu HH fixes, but it's not perfect: 

 

The patch tends to work, until it doesn't. With normal heels, that's easily fixed by unequipping and re-equipping the heels, which of course isn't an option with DD.

 

Playing around with the strip settings in the sexlab MCM, if you set it so feet are never stripped, it works for a while even with DD. But it's important to only have feet set to not strip, for some reason if you leave a bunch of other items equipped, it messes up pretty quickly. But even then it will eventually mess up. Also don't have both the general strip setting and the individual heels set to not strip, it seems to mess up if you set both.

 

I feel like items are sometimes unequipped/re-equipped several times before a scene starts due to different strip settings and mod conflicts, making mods like the above patch not work because they're only applied once. But that's just a guess.

 

I've considered looking into figuring out a way to make DD heels unequippable, just so I can easily fix it whenever it happens, or even a way to force DD heels to unequip during a scene, even though I'd prefer them to stay equipped. Other than that I've yet to find any proper solutions.

Posted

I just modified the LockActor() and UnlockActor() functions in sslActorAlias.psc, adding code that adds transform to negate the HH offset, and then removes the transform.
Simple, easy, works.

Posted (edited)
2 hours ago, Roggvir said:

I just modified the LockActor() and UnlockActor() functions in sslActorAlias.psc, adding code that adds transform to negate the HH offset, and then removes the transform.
Simple, easy, works.

 

Could you expand on what to add exactly? I have no experience editing scripts, so far I've managed to set up SSEScript in MO2 and find the functions lockactor and unlockactor in sslActorAlias.psc, but actually adding any code beyond that is a bit beyond my capabilities at the moment.

 

Also, the method you're describing, does it work with varying heel heights?

Edited by DrVDB
Posted
1 hour ago, DrVDB said:

 

Could you expand on what to add exactly? I have no experience editing scripts, so far I've managed to set up SSEScript in MO2 and find the functions lockactor and unlockactor in sslActorAlias.psc, but actually adding any code beyond that is a bit beyond my capabilities at the moment.

 

Also, the method you're describing, does it work with varying heel heights?

It only negates the offset from RaceMenu Equippable Transforms.
If you would be using some other methods that lift up the actors wearing high heels, this method will not work, but i don't think anybody uses anything else nowadays, so i mention it only for the sake of completeness.


First i added two new functions into sslActorAlias.psc:

Spoiler
function RoggDisableHighHeels()
	bool __isFemale = (_sex == 1) as bool
	objectReference __ref = _actorRef as objectReference
	if NiOverride.HasNodeTransformPosition(__ref, false, __isFemale, "NPC", "internal")
		if NiOverride.HasNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix")
			float[] __offset = NiOverride.GetNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix")
			if __offset && __offset.length > 2 && (__offset[0] != 0.0 || __offset[1] != 0.0 || __offset[2] != 0.0)
				return
			endIf
		endIf
		float[] __offset = NiOverride.GetNodeTransformPosition(__ref, false, __isFemale, "NPC", "internal")
		__offset[0] = -__offset[0]
		__offset[1] = -__offset[1]
		__offset[2] = -__offset[2]
		NiOverride.AddNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix", __offset)
		NiOverride.UpdateNodeTransform(__ref, false, __isFemale, "NPC")
	endif
endFunction

function RoggEnableHighHeels()
	bool __isFemale = (_sex == 1) as bool
	objectReference __ref = _actorRef as objectReference
	if NiOverride.RemoveNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix")
		NiOverride.UpdateNodeTransform(__ref, false, __isFemale, "NPC")
	endif
endFunction

Note: if you wonder why the condition check for every __offset value being non-zero, instead of a simple call to HasNodeTransformPosition(), it is because the HasNodeTransformPosition() isn't working reliably - it keeps returning TRUE for transforms that were already removed (could be an issue with the specific version of the SKEE64 DLL i am using, i don't know).

Then you find the LockActor() function definition, and add the call to RoggDisableHighHeels() just before the existing call to LockActorImpl(), so that part looks something like this:

Spoiler

        ...

        Debug.SendAnimationEvent(_ActorRef, "IdleFurnitureExit")
        Debug.SendAnimationEvent(_ActorRef, "AnimObjectUnequip")
        Debug.SendAnimationEvent(_ActorRef, "IdleStop")

        RoggDisableHighHeels()

        LockActorImpl()

        ...


And similarly you add RoggEnableHighHeels() into the UnlockActor() function definition just after UnlockActorImpl(), so that part looks something like this:

Spoiler

        ...

        Else
            ActorUtil.RemovePackageOverride(_ActorRef, _Thread.DoNothingPackage)
            _ActorRef.EvaluatePackage()
        EndIf
        UnlockActorImpl()

        RoggEnableHighHeels()

        GoToState(STATE_PAUSED)
    EndFunction

 

Posted
2 hours ago, DrVDB said:

Also, the method you're describing, does it work with varying heel heights?

I am not sure what you mean by "varying heel heights" - if you mean whether it works for different items that have different heights, then yes.

Posted
3 hours ago, Roggvir said:

It only negates the offset from RaceMenu Equippable Transforms.
If you would be using some other methods that lift up the actors wearing high heels, this method will not work, but i don't think anybody uses anything else nowadays, so i mention it only for the sake of completeness.


First i added two new functions into sslActorAlias.psc:

  Reveal hidden contents
function RoggDisableHighHeels()
	bool __isFemale = (_sex == 1) as bool
	objectReference __ref = _actorRef as objectReference
	if NiOverride.HasNodeTransformPosition(__ref, false, __isFemale, "NPC", "internal")
		if NiOverride.HasNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix")
			float[] __offset = NiOverride.GetNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix")
			if __offset && __offset.length > 2 && (__offset[0] != 0.0 || __offset[1] != 0.0 || __offset[2] != 0.0)
				return
			endIf
		endIf
		float[] __offset = NiOverride.GetNodeTransformPosition(__ref, false, __isFemale, "NPC", "internal")
		__offset[0] = -__offset[0]
		__offset[1] = -__offset[1]
		__offset[2] = -__offset[2]
		NiOverride.AddNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix", __offset)
		NiOverride.UpdateNodeTransform(__ref, false, __isFemale, "NPC")
	endif
endFunction

function RoggEnableHighHeels()
	bool __isFemale = (_sex == 1) as bool
	objectReference __ref = _actorRef as objectReference
	if NiOverride.RemoveNodeTransformPosition(__ref, false, __isFemale, "NPC", "RoggHHfix")
		NiOverride.UpdateNodeTransform(__ref, false, __isFemale, "NPC")
	endif
endFunction

Note: if you wonder why the condition check for every __offset value being non-zero, instead of a simple call to HasNodeTransformPosition(), it is because the HasNodeTransformPosition() isn't working reliably - it keeps returning TRUE for transforms that were already removed (could be an issue with the specific version of the SKEE64 DLL i am using, i don't know).

Then you find the LockActor() function definition, and add the call to RoggDisableHighHeels() just before the existing call to LockActorImpl(), so that part looks something like this:

  Reveal hidden contents

        ...

        Debug.SendAnimationEvent(_ActorRef, "IdleFurnitureExit")
        Debug.SendAnimationEvent(_ActorRef, "AnimObjectUnequip")
        Debug.SendAnimationEvent(_ActorRef, "IdleStop")

        RoggDisableHighHeels()

        LockActorImpl()

        ...


And similarly you add RoggEnableHighHeels() into the UnlockActor() function definition just after UnlockActorImpl(), so that part looks something like this:

  Reveal hidden contents

        ...

        Else
            ActorUtil.RemovePackageOverride(_ActorRef, _Thread.DoNothingPackage)
            _ActorRef.EvaluatePackage()
        EndIf
        UnlockActorImpl()

        RoggEnableHighHeels()

        GoToState(STATE_PAUSED)
    EndFunction

 

 

I'm going to give that a go as soon as I have a chance. Thank you for the detailed explanation!

Posted (edited)

 

It seems that the sslActorAlias.psc file I have is different from yours, I guess it's a different version of Sexlab (I am running SE v1.66b).

 

In any case, I put everything in anyway, just didn't have the LockActorImpl() and UnlockActorImpl() calls to use as a reference, so I just put yours close to the end of the functions, and from initial testing it works perfectly.

 

For reference, these are my lockactor and unlockactor functions:

 

Edited by DrVDB
Posted
51 minutes ago, DrVDB said:

It seems that the sslActorAlias.psc file I have is different from yours, I guess it's a different version of Sexlab (I am running SE v1.66b).

The thread title is about SL P+, not about SL 1.66b, so my example was meant for SL P+.

But then few lines down you write "this solves one of the last issues I've been having with getting Sexlab P+".
And the code you posted is from 1.66b, not from SLPP!


Either you are not actually using SLPP, but SL 1.66b, or you made modifications to the wrong script (you modified the SL 1.66b script, instead of the SLPP script).
If you would be really using SLPP, then the SLPP verison of the script would overwrite the 1.66b version.

 

I think at best you are mistaken regarding what you are actually using, or at worst you installed SLPP incorrectly.

Posted (edited)
23 minutes ago, Roggvir said:

The thread title is about SL P+, not about SL 1.66b, so my example was meant for SL P+.

But then few lines down you write "this solves one of the last issues I've been having with getting Sexlab P+".
And the code you posted is from 1.66b, not from SLPP!


Either you are not actually using SLPP, but SL 1.66b, or you made modifications to the wrong script (you modified the SL 1.66b script, instead of the SLPP script).
If you would be really using SLPP, then the SLPP verison of the script would overwrite the 1.66b version.

 

I think at best you are mistaken regarding what you are actually using, or at worst you installed SLPP incorrectly.

 

When looking for sslActorAlias.psc I found it only under Sexlab itself, not P+ (P+ did have a pex file with that name I believe, but not a psc). So I just assumed that it was the Sexlab file that needed to be edited, nothing from P+. For reference, I'm using the latest P+ version 2.14 from Discord, so maybe something changed on that front.

 

Edit: No I'm wrong, you're correct, the P+ one is compressed into the mod I guess, so I didn't see it being overwritten when looking at the Sexlab mod info. As I said, barely any experience with modding.

 

But as I was loading SSEScript through MO2, it should've still loaded the P+ version I guess? Not sure though why it still worked despite loading higher in the load order than P+.

Edited by DrVDB
Posted (edited)
12 minutes ago, DrVDB said:

 

When looking for sslActorAlias.psc I found it only under Sexlab itself, not P+ (P+ did have a pex file with that name I believe, but not a psc). So I just assumed that it was the Sexlab file that needed to be edited, nothing from P+.

Maybe it depends on the version of SLP+ you downloaded - MAYBE the version you downloaded didn't have the source file included by mistake.

But regardless, if there is a PEX file from SLP+, then that PEX file is used by the game (anything from SLP+ is supposed to overwrite SL 1.66b - that is how it should be installed).

So you need to find the source file for that PEX file from SLP+ and make the modifications to that (and then compile it into the PEX file, of course).


I am using SLP+ 2.12.0, and it does come with the sslActorAlias.psc source file.

If you too are using 2.12.0, then you should double check your installation, because if you are on 2.12.0 and you are missing this source file, then whatever caused that could cause also other files to be missing and potentially breaking your game (missing a script source file is not a problem when it comes to just running the game, but if you are missing something else... it could be).

 

 

Edited by Roggvir
Posted
28 minutes ago, Roggvir said:

The thread title is about SL P+, not about SL 1.66b, so my example was meant for SL P+.

But then few lines down you write "this solves one of the last issues I've been having with getting Sexlab P+".
And the code you posted is from 1.66b, not from SLPP!


Either you are not actually using SLPP, but SL 1.66b, or you made modifications to the wrong script (you modified the SL 1.66b script, instead of the SLPP script).
If you would be really using SLPP, then the SLPP verison of the script would overwrite the 1.66b version.

 

I think at best you are mistaken regarding what you are actually using, or at worst you installed SLPP incorrectly.

 

It's getting more confusing. Looking through the data tab in MO2, there are two routes: data/source/scripts and data/scripts/source. The P+ psc sits in the former, the base sexlab one in the latter, which is also the one I've overwritten. This was also the route that SSEScript defaulted to when setting it up.

 

So I don't really know why my setup works. To be safe I'll follow your setup above instead, I'd rather do it your way as I only partially know what I'm doing.

Posted

The two different paths for script sources comes from when Bethesda released the Special Edition.

The old 32bit Skyrim (sometimes referred to as "Oldrim" or "Skyrim LE", or "Legendary Edition") uses path "Data/Scripts/Source".
When Bethesda released the 64bit Skyrim Special Edition, they changed the path for script sources to "Data/Source/Scripts".

(the latter also applies to the "Skyrim Anniversary Edition", which is just a newer SSE version with bunch of Creation Club mods included).
And some mod makers do not respect that path change when they package mods for SSE.

For most people it doesn't matter where the script sources (*.psc) are.

When the game runs, it is not using the script sources, but only the compiled scripts (*.pex).
You only need the script sources when you want to modify the scripts - at which point you need those sources in a path where the Papyrus compiler can find them.
Where that path is, really depends on how you setup your script compilation pipe line - the basic setup (Bethesda's default) is that all script sources go into one or the other path mentioned above, depending on what version of Skyrim you have.

In your case, using SSE, it should be "Data/Source/Scripts".

(but technically that path can be anything, it depends on how you setup your environment, this is just the default)

Posted (edited)
22 hours ago, Roggvir said:

The two different paths for script sources comes from when Bethesda released the Special Edition.

The old 32bit Skyrim (sometimes referred to as "Oldrim" or "Skyrim LE", or "Legendary Edition") uses path "Data/Scripts/Source".
When Bethesda released the 64bit Skyrim Special Edition, they changed the path for script sources to "Data/Source/Scripts".

(the latter also applies to the "Skyrim Anniversary Edition", which is just a newer SSE version with bunch of Creation Club mods included).
And some mod makers do not respect that path change when they package mods for SSE.

For most people it doesn't matter where the script sources (*.psc) are.

When the game runs, it is not using the script sources, but only the compiled scripts (*.pex).
You only need the script sources when you want to modify the scripts - at which point you need those sources in a path where the Papyrus compiler can find them.
Where that path is, really depends on how you setup your script compilation pipe line - the basic setup (Bethesda's default) is that all script sources go into one or the other path mentioned above, depending on what version of Skyrim you have.

In your case, using SSE, it should be "Data/Source/Scripts".

(but technically that path can be anything, it depends on how you setup your environment, this is just the default)

 

Thank you for the explanation. I've been gradually learning what goes into compiling psc files, and I have it mostly figured out, but I've reached the limit of how far google can help me. I'm getting the errors below when compiling, from what I understand I'm still missing some dependencies, but I just can't figure them out.

 

Spoiler

Starting 1 compile threads for 1 files...
Compiling "sslActorAlias"...
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(404,1): AddInputOptionST is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(405,1): AddInputOptionST is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(406,1): AddInputOptionST is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(663,1): AddInputOptionST is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(1348,2): SetInputDialogStartText is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(1350,2): SetInputDialogStartText is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(1352,2): SetInputDialogStartText is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(1354,2): SetInputDialogStartText is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslConfigMenu.psc(1356,2): SetInputDialogStartText is not a function or does not exist
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(4,1): variable AnimSpeedHelper is undefined
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(4,17): none is not a known user-defined type
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(8,23): variable AnimSpeedHelper is undefined
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(8,39): none is not a known user-defined type
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(8,7): type mismatch while assigning to a float (cast missing or types unrelated)
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(9,1): variable AnimSpeedHelper is undefined
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(9,17): none is not a known user-defined type
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(13,1): variable AnimSpeedHelper is undefined
D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Source\Scripts\sslAnimSpeedHelper.psc(13,17): none is not a known user-defined type
No output generated for sslActorAlias, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on sslActorAlias
 

 

SL high heel patch.7z

Edited by DrVDB
Posted
57 minutes ago, DrVDB said:

I understand I'm still missing some dependencies, but I just can't figure them out.

Yes, you are missing dependencies.

It is not a rocket science, but sometimes it can be difficult...
Sometimes it can be difficult to even find where to even download certain dependencies, which versions, not mentioning sometimes you have to unpack the script sources from BSA archives, and sometimes you even have to decompile PEX files and re-create some scripts from that because some mod creator never even bother publishing the source files.

 

It would be tedious to go through the log and identify all the missing deps, tell you where to get them, and how to even put it all together without making a mess in your game folders, so you can compile the scripts.
It will be easier for me to prepare a download package for you, containing a simple stand alone, ready to go compilation pipeline you can use to compile what you need (and learn from it, and/or easily modify it to suit any of your future compilation needs).
But i am too busy now, so you'll have to wait for it until later this evening, sorry.

Posted
14 minutes ago, Roggvir said:

Yes, you are missing dependencies.

It is not a rocket science, but sometimes it can be difficult...
Sometimes it can be difficult to even find where to even download certain dependencies, which versions, not mentioning sometimes you have to unpack the script sources from BSA archives, and sometimes you even have to decompile PEX files and re-create some scripts from that because some mod creator never even bother publishing the source files.

 

It would be tedious to go through the log and identify all the missing deps, tell you where to get them, and how to even put it all together without making a mess in your game folders, so you can compile the scripts.
It will be easier for me to prepare a download package for you, containing a simple stand alone, ready to go compilation pipeline you can use to compile what you need (and learn from it, and/or easily modify it to suit any of your future compilation needs).
But i am too busy now, so you'll have to wait for it until later this evening, sorry.

 

That also works. No urgency, I don't need it right away, but it would be very helpful because I would indeed like to be able to do this on my own for any future updates without having to rely on others. So thank you for spending time on this.

 

In the meantime I'll probably try a bit more on my end, I think building a separate modlist only containing the bare minimum might be a good way to figure out what I'm missing and avoiding any issues because of overwrites. At the very least it's been a good learning experience.

Posted
On 4/11/2025 at 12:50 PM, DrVDB said:

 

That also works. No urgency, I don't need it right away, but it would be very helpful because I would indeed like to be able to do this on my own for any future updates without having to rely on others. So thank you for spending time on this.

 

In the meantime I'll probably try a bit more on my end, I think building a separate modlist only containing the bare minimum might be a good way to figure out what I'm missing and avoiding any issues because of overwrites. At the very least it's been a good learning experience.

Sorry for the delay, here is the promised package.
Usage:

  1. Unpack it, and change "My Project" folder name to whatever you want.
  2. Copy Papyrus Compiler files into "My Project\source\tools\Papyrus Compiler".
    There is a TXT file in that folder, listing what files are needed and where to get them.
    If you already have Papyrus Compiler installed somewhere, then you can skip this step and instead edit the corresponding variables in the "_compile.bat" and "_compile_all.cmd" batch files located under the "My Project\source" folder.
  3. Place your modified papyrus source scripts into "My Project\source".
    This is where you keep the script sources you are working on.
  4. Read the comments in "_compile.bat" and "_compile_all.cmd" and set required variables/paths.
    The comments hopefully explain what's what - you absolutely MUST read them, and you absolutely MUST set/change some of the variables.

Typical usage for this would be editing the script sources in Notepad++, and using Ctrl+F5 and Ctrl+F6 shortcuts in NP++ to compile script in current active tab or all scripts in the path.
How to setup the shortcuts in Notepad++ is explained in comments inside "_compile.bat" and "_compile_all.cmd" files.

Alternatively, the batch files can be run manually, but then you need to feed them the absolute path to the script file to be compiled.

Even the "_compile_all.cmd" expects a full absolute path to a script file (not just a path to folder) as a command line argument, and uses it to get the path where ALL the scripts to be compiled are located (it was convenient to do it like that for the NP++ usage).

 

The package also contains some example includes (script dependencies), but be aware - those scripts are simplified versions of real scripts, containing only function signatures and variable/property definitions, and no actual code.
Only to be used as "includes" when compiling other scripts.
This is also explained in the comments.
 

SSE Papyrus Compilation Pipeline v001.zip

 

screenshot.webp.bc5a4bc62ef6568a61880887b2702043.webp

Posted (edited)
23 hours ago, Roggvir said:

Sorry for the delay, here is the promised package.
Usage:

  1. Unpack it, and change "My Project" folder name to whatever you want.
  2. Copy Papyrus Compiler files into "My Project\source\tools\Papyrus Compiler".
    There is a TXT file in that folder, listing what files are needed and where to get them.
    If you already have Papyrus Compiler installed somewhere, then you can skip this step and instead edit the corresponding variables in the "_compile.bat" and "_compile_all.cmd" batch files located under the "My Project\source" folder.
  3. Place your modified papyrus source scripts into "My Project\source".
    This is where you keep the script sources you are working on.
  4. Read the comments in "_compile.bat" and "_compile_all.cmd" and set required variables/paths.
    The comments hopefully explain what's what - you absolutely MUST read them, and you absolutely MUST set/change some of the variables.

Typical usage for this would be editing the script sources in Notepad++, and using Ctrl+F5 and Ctrl+F6 shortcuts in NP++ to compile script in current active tab or all scripts in the path.
How to setup the shortcuts in Notepad++ is explained in comments inside "_compile.bat" and "_compile_all.cmd" files.

Alternatively, the batch files can be run manually, but then you need to feed them the absolute path to the script file to be compiled.

Even the "_compile_all.cmd" expects a full absolute path to a script file (not just a path to folder) as a command line argument, and uses it to get the path where ALL the scripts to be compiled are located (it was convenient to do it like that for the NP++ usage).

 

The package also contains some example includes (script dependencies), but be aware - those scripts are simplified versions of real scripts, containing only function signatures and variable/property definitions, and no actual code.
Only to be used as "includes" when compiling other scripts.
This is also explained in the comments.

 

Phew, took some messing around, but finally managed to get it to work. There were a couple of new functions and a new source script in SLP+ 2.14 that needed to be added, but using your includes as a basis, I figured out how to create them as dummy functions in their respective source script, which finally made it work. I tested it in-game making sure no other heel fixes were active, and everything aligns perfectly now.

 

So thanks again, this has been a good learning experience, and your pipeline should make it easy enough to modify any future SLP+ updates.

Edited by DrVDB
  • 3 weeks later...
Posted
On 4/12/2025 at 4:31 PM, Roggvir said:

Sorry for the delay, here is the promised package.
Usage:

  1. Unpack it, and change "My Project" folder name to whatever you want.
  2. Copy Papyrus Compiler files into "My Project\source\tools\Papyrus Compiler".
    There is a TXT file in that folder, listing what files are needed and where to get them.
    If you already have Papyrus Compiler installed somewhere, then you can skip this step and instead edit the corresponding variables in the "_compile.bat" and "_compile_all.cmd" batch files located under the "My Project\source" folder.
  3. Place your modified papyrus source scripts into "My Project\source".
    This is where you keep the script sources you are working on.
  4. Read the comments in "_compile.bat" and "_compile_all.cmd" and set required variables/paths.
    The comments hopefully explain what's what - you absolutely MUST read them, and you absolutely MUST set/change some of the variables.

Typical usage for this would be editing the script sources in Notepad++, and using Ctrl+F5 and Ctrl+F6 shortcuts in NP++ to compile script in current active tab or all scripts in the path.
How to setup the shortcuts in Notepad++ is explained in comments inside "_compile.bat" and "_compile_all.cmd" files.

Alternatively, the batch files can be run manually, but then you need to feed them the absolute path to the script file to be compiled.

Even the "_compile_all.cmd" expects a full absolute path to a script file (not just a path to folder) as a command line argument, and uses it to get the path where ALL the scripts to be compiled are located (it was convenient to do it like that for the NP++ usage).

 

The package also contains some example includes (script dependencies), but be aware - those scripts are simplified versions of real scripts, containing only function signatures and variable/property definitions, and no actual code.
Only to be used as "includes" when compiling other scripts.
This is also explained in the comments.
 

SSE Papyrus Compilation Pipeline v001.zip 5.23 MB · 5 downloads

 

screenshot.webp.bc5a4bc62ef6568a61880887b2702043.webp

 

I've been away from Skyrim for a while but wanted to pop in and say thanks for this. I had to track down a few missing sources but your script changes seem to have worked - HH offsets are now being seamlessly adjusted for P+ scenes. Using P+ 2.15.0.

 

And thanks @DrVDB for keeping the thread alive :]

  • 5 months later...
Posted
On 4/13/2025 at 10:59 PM, DrVDB said:

everything aligns perfectly now

Heya, this achievement seems beyond me. Would you consider posting the patch or publish it as a mod? I couldn't find any highheel fixes that works with this year's SLP+ (tbh I don't even know if the wrong furniture offet is caused by the high heel issue, but the heights seem to match).

  • 1 month later...
Posted (edited)
On 10/17/2025 at 8:21 PM, seroaditum101 said:

Heya, this achievement seems beyond me. Would you consider posting the patch or publish it as a mod? I couldn't find any highheel fixes that works with this year's SLP+ (tbh I don't even know if the wrong furniture offet is caused by the high heel issue, but the heights seem to match).

 

You can try this mod - https://www.nexusmods.com/skyrimspecialedition/mods/155551

 

I personally had issues with it and had better results with Roggvir's script changes, but others have had success so it may work out for you. If not, I can post a patched sslActorAlias a bit later when I can get back to Skyrim (don't have it installed atm), if somebody else doesn't get to it first.

Edited by noctred
Posted
On 10/17/2025 at 8:21 PM, seroaditum101 said:

Heya, this achievement seems beyond me. Would you consider posting the patch or publish it as a mod? I couldn't find any highheel fixes that works with this year's SLP+ (tbh I don't even know if the wrong furniture offet is caused by the high heel issue, but the heights seem to match).

 

Patched script is attached if you still need it. This is for P+ 2.16.0.

 

sslActorAlias.pex

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...