Jump to content

PAF Fixes and Addons


Recommended Posts

Posted (edited)
7 hours ago, Dg75 said:

Kool ! 

I have the DynamicPoop function updated so it wont conflict, I just need to do the same to the AnalSpray Function as both use idle conditions to set values. 

I'll have an update up soon.

 

I noticed in your jason you only have gsposes 23/06 and that only two of the 20/03 originals are added.

EndUser can always add them if wanted. Or maybe add them by default.. I suppose the purpose was to replace the 20/03

so I understand if you prefer not to. Either or - its primary reason it best to leave as optional patch. 

Neat sounds good.

I just used poserhotkeys and looked through all poses in the 23/06 poser and put in those that seemed like they may be usable or interesting in some way to make the json. It did feel like some poses I had seen in the old poser have been missing, but since the "gs123" pose numbers seem to have changed between 20/03 and 23/06 and they dont have names... its hard to know unless you can tell them apart visually. The json does have most old poses that I found in the new poser its just that the numbers changed gs11 is not gs11 in the newer etc.
There isnt a changelog on the patreon so its difficult to tell if some poses have been removed from the poser or just re-ordered.
21/07 is now the newest btw

Good thing about the approach with the json is you can ship it with a selection of your choice and people can change it to whatever poser/animations they use without editing the scripts.
So yeah in my selection for now I only have gsposes from 23/06 as that still gets updated, but nothing wrong with just using the old one either. Personally I probably will mix and throw in some poses from other pose mods into the many empty placeholder slots gunslicer has as well so I dont need to have multiple pose mods installed.
Looking at your old script this should be the selection for the 20/03 poser.

{
  "extra_idles_f": [
    { "event": "GS11",  "label": "GS11 (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS12",  "label": "GS12 (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS485", "label": "GS485 (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS532", "label": "GS532 (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS505", "label": "GS505 (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS510", "label": "GS510 (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS304", "label": "GS304 (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS497", "label": "GS497 (non-DP)", "enabled": true, "dpExempt": true },

    { "event": "GS148", "label": "GS148 (Poop)", "enabled": true, "dpExempt": false },
    { "event": "GS292", "label": "GS292 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS320", "label": "GS320 (Poop)", "enabled": true, "dpExempt": false },
    { "event": "GS365", "label": "GS365 (Poop)", "enabled": true, "dpExempt": false },
    { "event": "GS366", "label": "GS366 (Poop)", "enabled": true, "dpExempt": false },
    { "event": "GS404", "label": "GS404 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS406", "label": "GS406 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS458", "label": "GS458 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS503", "label": "GS503 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS509", "label": "GS509 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS514", "label": "GS514 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS501", "label": "GS501 (Both)", "enabled": true, "dpExempt": false },
    { "event": "GS542", "label": "GS542 (Both)", "enabled": true, "dpExempt": false }
  ],

  "extra_idles_m": [
    { "event": "GS198", "label": "Example Male Pose - Replace Me", "enabled": false, "dpExempt": false }
  ]
}

Trying to give the poses names with just a few words
 

Spoiler
{
  "extra_idles_f": [
    { "event": "GS11",  "label": "GS11 Half Squat Hip Shake (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS12",  "label": "GS12 Half Squat Hip Shake (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS485", "label": "GS485 Cat Stretch (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS532", "label": "GS532 Pet leg lift look back (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS505", "label": "GS505 On Back Pelvis Lifting (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS510", "label": "GS510 Bend Over Hip Sway (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS304", "label": "GS304 Bend Over Legs closed (non-DP)", "enabled": true, "dpExempt": true },
    { "event": "GS497", "label": "GS497 Kneel Look Back (non-DP)", "enabled": true, "dpExempt": true },

    { "event": "GS148", "label": "GS148 Slav Squat", "enabled": true, "dpExempt": false },
    { "event": "GS292", "label": "GS292 Lean Back Spread Jerking Masturbating", "enabled": true, "dpExempt": false },
    { "event": "GS320", "label": "GS320 Kneel Look Back", "enabled": true, "dpExempt": false },
    { "event": "GS365", "label": "GS365 Sit Sideways Legs closed", "enabled": true, "dpExempt": false },
    { "event": "GS366", "label": "GS366 Sit Sideways Legs spread", "enabled": true, "dpExempt": false },
    { "event": "GS404", "label": "GS404 All Fours Back Stretch", "enabled": true, "dpExempt": false },
    { "event": "GS406", "label": "GS406 Kneeling Book", "enabled": true, "dpExempt": false },
    { "event": "GS458", "label": "GS458 Casual Squat Modest", "enabled": true, "dpExempt": false },
    { "event": "GS503", "label": "GS503 Kneel Legs spread", "enabled": true, "dpExempt": false },
    { "event": "GS509", "label": "GS509 Bend Over Legs Closed", "enabled": true, "dpExempt": false },
    { "event": "GS514", "label": "GS514 Sit Lean Back Spread", "enabled": true, "dpExempt": false },
    { "event": "GS501", "label": "GS501 Cowgirl", "enabled": true, "dpExempt": false },
    { "event": "GS542", "label": "GS542 Sit Lean Back Spread Wider", "enabled": true, "dpExempt": false }
  ],

  "extra_idles_m": [
    { "event": "GS198", "label": "Example Male Pose - Replace Me", "enabled": false, "dpExempt": false }
  ]
}

 

 

Edited by Alpia
Posted

Sorry to bother you, but I can't get my character to play a pee animation. She seems to be in the "playing" animation state, but her body is still stuck in the normal standing idle animation. Could you please provide some assistance? I'm sure I have ZAZ animations8+ installed. By the way, English isn't my native language, and I apologize for any possible vocabulary and grammatical errors. I used Google Translate:)image.png.2e03eb60c47e3c714e759aff6ce30354.pngimage.png.42bf438e5f82369d820a4f91f7194902.pngimage.png.9204fc60a70287b841baf809bb7cafda.png

Posted (edited)
10 hours ago, stalin233111 said:

I can't get my character to play a pee animation.

Have you run your animation patcher ? e.g fnis or nemeses or pandora or whatever is used now a days..

I know its a silly question but its always the first thing to pop in mind. Your mcm pics seem okay. 

 

Past that - make sure no other random idles are conflicting like arousal's shame idle

if another idle calls roughly same time as paf's idle does they conflict and neither would work.

If another idle trys to play and if its a replacer(open animation replacer) then it wouldn't matter

as fnis type patchers always win conflicts over replacers.(so i've been told)

Edited by Dg75
Posted (edited)
21 hours ago, Alpia said:

but since the "gs123" pose numbers seem to have changed between 20/03 and 23/06

So its possible some with different names may actually be the same pose(or close match) as the old ones.

Best leave the jason as you have it then, I'll work through the new poses and if they match old pose I can just 

add the new name in to pass the conditions for those offsets.. later update, primary concern now is to get 4.7.2 up hopefully this weekend.

Edited by Dg75
Posted
3 hours ago, Dg75 said:

So its possible some with different names may actually be the same pose(or close match) as the old ones.

Best leave the jason as you have it then, I'll work through the new poses and if they match old pose I can just 

add the new name in to pass the conditions for those offsets.. later update, primary concern now is to get 4.7.2 up hopefully this weekend.

Yes mostly same poses different names best to just take a look at the poses in game. Did mark a few more poses with (-dp) those with that mark dont seem suitable for the dynamic pooping. The GS 21/07 didnt change numbers from GS 23/06 so still fits PAF_ExtraIdles.json

For my own use I added a small extra function "Preview all poses" toggle with a hotkey that one can bind. Turn the toggle on, and your character will strike the first pose from the pose list along with an on-screen label showing its name and if enabled and dpexcempt. Press the key to move to the next one, and so on through the whole list.
More a debug/testing thing, so not for your release, but maybe interesting for you to when trying to preview poses. Makes it easier to check out all poses as you dont have to reopen the mcm constantly to take a look at the next pose.
I add it in the spoiler if you want it for your own testing. 

Spoiler

PAF_MainQuestScript.psc  
PFA_PAFMCM.psc

PFA_PAFMCM.psc:

Bool PreviewActive
Bool PreviewIsMale
Int PreviewIndex = -1
Int PreviewStyle = -1
Int PreviewKey = -1

For MCM Ui

AddToggleOptionST("OID_PreviewIdles", "$PFAPreviewIdles_", PreviewActive)
AddKeyMapOptionST("OID_PreviewKey", "$PFAPreviewKey_", PreviewKey)

States for the options

State OID_PreviewIdles
    Event OnHighlightST()
        SetInfoText("$PFAPreviewIdlesInfo_")
    EndEvent
    Event OnSelectST()
        if  PreviewActive
            StopIdlePreview()
        else
            StartIdlePreview()
        endif
        SetToggleOptionValueST(PreviewActive)
    EndEvent
    Event OnDefaultST()
        StopIdlePreview(True)
        SetToggleOptionValueST(False)
    EndEvent
EndState

Keybind widget like your oid_dootykey

State OID_PreviewKey
    Event OnHighlightST()
        SetInfoText("$PFAPreviewKeyInfo_")
    EndEvent
    Event OnKeyMapChangeST(int newKeyCode, string conflictControl, string conflictName)
        if newKeyCode == 1 || !ResolveConflict(newKeyCode, conflictControl, conflictName)
            if  newKeyCode == 1
                newKeyCode = -1
            endif
            UnregisterForKey(PreviewKey)
            PreviewKey = newKeyCode
            if  PreviewKey > 0
                RegisterForKey(PreviewKey)
            endif
            SetKeyMapOptionValueST(PreviewKey)
        endif
    EndEvent
    Event OnDefaultST()
        UnregisterForKey(PreviewKey)
        PreviewKey = -1
        SetKeyMapOptionValueST(PreviewKey)
    EndEvent
EndState

Needed three new functions

Function StartIdlePreview()
    if  PreviewActive || PAF_MainQuest.GetIsAnimating()
        Return
    endif
    Int nF = GetExtraIdleCount(False)
    Int nM = GetExtraIdleCount(True)
    if  nF <= 0 && nM <= 0
        ShowMessage("$PFAListEmpty_", False)
        Return
    endif
    if  PreviewKey <= 0
        ShowMessage("$PFAPreviewNoKey_", False)
        Return
    endif
    PreviewActive = True
    PreviewIsMale = (nF <= 0)
    PreviewIndex = -1
    PreviewStyle = -1
    Debug.Notification("$PFAPreviewStarting_")
    AdvancePreview()
EndFunction

Function StopIdlePreview(Bool silent = False)
    if  !PreviewActive
        Return
    endif
    PreviewActive = False
    if  PreviewStyle >= 0
        PAF_MainQuest.PlayPeeIdleStop(PlayerRef, PreviewStyle, !PreviewIsMale)
        PreviewStyle = -1
    endif
    if  !silent
        Debug.Notification("$PFAPreviewStopped_")
    endif
EndFunction

Function AdvancePreview()
    if  !PreviewActive
        Return
    endif
    PreviewIndex += 1
    Int count = GetExtraIdleCount(PreviewIsMale)
    if  PreviewIndex >= count
        if  !PreviewIsMale && GetExtraIdleCount(True) > 0
            PreviewIsMale = True
            PreviewIndex = -1
            AdvancePreview()
            Return
        else
            StopIdlePreview(True)
            Debug.Notification("$PFAPreviewComplete_")
            Return
        endif
    endif
    Int base = 13
    if  PreviewIsMale
        base = 12
    endif
    Int style = base + PreviewIndex
    String ev = GetExtraIdleEvent(PreviewIndex, PreviewIsMale)
    String lbl = GetExtraIdleLabel(PreviewIndex, PreviewIsMale)
    String genderTxt = "F"
    if  PreviewIsMale
        genderTxt = "M"
    endif
    Debug.Notification("[" + genderTxt + " " + (PreviewIndex + 1) + "/" + count + "] " + lbl + "  (" + ev + ")")
    PreviewStyle = style
    PAF_MainQuest.PlayPeeIdleStart(PlayerRef, style, !PreviewIsMale)
EndFunction

OnKeyDown before the existing dootykey logic

Event OnKeyDown(Int KeyCode)
    if  KeyCode == PreviewKey && PreviewKey > 0
        if  PreviewActive
            UnregisterForKey(PreviewKey)
            AdvancePreview()
            if  PreviewKey > 0
                RegisterForKey(PreviewKey)
            endif
        endif
        Return
    endif
    if  KeyCode != DootyKey || ...   ; unchanged, existing DootyKey handling continues below

PAF_MainQuestScript.psc in beginidle event small utility wait

Int Function BeginIdleEvent (Actor a_actor, Int style, Bool forFem = True)
    Create_Idles()
    String IdleEventName
    a_actor.PlayIdle(PAF_IdleReset)
    Utility.Wait(0.3)
    ActorUtil.ClearPackageOverride(a_actor)
    if  forFem
        IdleEventName = PafIdlesF[style]
    else
        IdleEventName = PafIdlesM[style]
    endif
    Debug.SendAnimationEvent(a_actor, IdleEventName)
EndFunction

Translation keys added
$PFAPreviewIdles_, $PFAPreviewIdlesInfo_, $PFAPreviewKey_, $PFAPreviewKeyInfo_, $PFAPreviewNoKey_, $PFAPreviewStarting_, $PFAPreviewStopped_, $PFAPreviewComplete_

 

Posted (edited)
21 hours ago, Alpia said:

"Preview all poses"

Kool! I'll take a look at it. 

 

Yeah it'l take me a bit to flip through the idles, I have a test jig to set dp values or mark as exempt, but its one idle at a time

a little time consuming.

 

As for now I have functions completed just have to test it out. 

Best I could come up with was to set up string arrays that represent types of offset conditions. 

they are designed to function with or without the patch, it just makes 

DP functions compatible with the pose names being altered.

I'll test what I have and if all goes well post a 4.7.2 update with it and go from there.

I have in PafMainScript edited functions: DynamicPoop, AnalSpray, and I think I edited CheckWorn a while back 

nothing else should have been altered from the 4.7.1 last update - I'll double check to make sure.

Edited by Dg75
Posted (edited)
On 7/21/2026 at 8:43 PM, Alpia said:

If you are about to post a update I'll wait till I look into it more.

4.7.2 is up. The only changes in PafMainScript are the DynamicPoop and AnalSpray functions, and I added new functions directly under 

the Create_Idles function inside the Utilities section.  Above post I mentioned that I may have edited CheckWorn - I did not ! 

I did edit a value in PushPno : ModEvent.PushInt(iModEventHandle, 60) ; the 60 was an 180(optional, not even certain it does anything)

this value is a timeout sent pno if pno handles things.

Mcm has not been edited. 

 

Spoiler

new

 

String[] StyleAdjustment
String[] StyleNonAdjustment
String[] StyleAdjustmentAp

 

; DP Functions now call on RetrievePafIdleEvent to retrieve chosen pose event name to compare with below lists in 

; order to parse conditions for offset or default values.

 

String Function RetrievePafIdleEvent(Int n, Bool IsMale = False)   ; new, created for pfa 4.7.2 primarily to receive an idle name for chosen idles to play.
    int r
    if  !IsMale
        r = PafIdlesF.Length
    else
        r = PafIdlesM.Length
    endif
    if  n < 0 || r <= 0 || n > r
        Return -1   ; oops Should of been return "", somehow it compiled.. maybe the compiler took it as "" . just seen this
    endif
    if  !IsMale
        Return PafIdlesF[n]
    endif
    Return PafIdlesM[n]
EndFunction

;\

the below three functions idle names are from the original 20/03 gs poses

and are used as conditions to set values offset from a default in both DynamicPoop() and AnalSpray()


For any poses that have matching poses to the below but with different event names

will need to be patched to the same element as their match as its the element the DP functions use to parse conditions.


For any new pose - can be added to lists, but will need tested: StyleAdjustment are ass up(horizontal) like doggystyle or paf bend over,

although in the DP function directional offsets need parsed if the ass is facing player heading like paf on back. 


 StyleNonAdjustment are just fine tuned positional at a spawn point that I felt certain poses needed. Anything not on the list uses default values.

  this list only is used if the above list is not


 StyleAdjustmentAp is solely for Anal Spray and are ass up spray - away from player, but may spray in same heading like paf on back vs bend over..

\;

 

Function CreateStyleAdjustment(Bool Recreate = False) ; DynamicPoop styleAdjustments
    if  Recreate || StyleAdjustment.Length != 11
        StyleAdjustment = New String[11]
        StyleAdjustment[0] = "paf_pose0"
        StyleAdjustment[1] = "paf_ZazAPC205"
        StyleAdjustment[2] = "paf_pose1"
        StyleAdjustment[3] = "PAF_Bendover01"
        StyleAdjustment[4] = "GS365"
        StyleAdjustment[5] = "GS366"
        StyleAdjustment[6] = "GS404"
        StyleAdjustment[7] = "GS485"
        StyleAdjustment[8] = "GS532"
        StyleAdjustment[9] = "GS542"
        StyleAdjustment[10] = "paf_ZazAPC211"
    endif
EndFunction

 

Function CreateStyleAdjustmentAp(Bool Recreate = False)  ; AnalSpray style adjustments 
    if  Recreate || StyleAdjustmentAp.Length != 13
        StyleAdjustmentAp = New String[13]
        StyleAdjustmentAp[0] = "paf_ZazAPC209"
        StyleAdjustmentAp[1] = "paf_ZazAPC205"
        StyleAdjustmentAp[2] = "paf_pose1"
        StyleAdjustmentAp[3] = "PAF_Bendover01"
        StyleAdjustmentAp[4] = "GS485"
        StyleAdjustmentAp[5] = "GS532"
        StyleAdjustmentAp[6] = "GS505"
        StyleAdjustmentAp[7] = "GS510"
        StyleAdjustmentAp[8] = "GS304"
        StyleAdjustmentAp[9] = "GS404"
        StyleAdjustmentAp[10] = "GS509"
        StyleAdjustmentAp[11] = "paf_pose0"
        StyleAdjustmentAp[12] = "paf_ZazAPC211"
    endif
EndFunction

 

Function CreateStyleNonAdjustment(Bool Recreate = False) ; DynamicPoop Non styleAdjustments
    if  Recreate || StyleNonAdjustment.Length != 6
        StyleNonAdjustment = New String[6]
        StyleNonAdjustment[0] = "paf_ZazAPC201"
        StyleNonAdjustment[1] = "paf_ZazAPC202"
        StyleNonAdjustment[2] = "GS11"
        StyleNonAdjustment[3] = "GS12"
        StyleNonAdjustment[4] = "GS497"
        StyleNonAdjustment[5] = "GS406"
    endif
EndFunction

 

Edited by Dg75
Posted
On 6/7/2026 at 4:23 AM, Dg75 said:

IDK. It does work on my end. I get both paf and pno holding idles.

I can only guess as pno's holding idles will auto start when pafs debuffs trigger. Like if you have a pee debuff - stamina would trigger pno idles.

So if it were me I'd look and make sure pafs debuffs are applying. Using pno just by itself it would trigger differently. 

Check paf mcm I think there may be an on/off option for the debuffs.

Hi again,

 

after some time away and a few updates from both PAF and PNO, I have managed to get the PNO holding animation to work under exactly one specific instance, which is when my character is specifically peeing herself (and it stops mid-wetting if the pee is done and the poop isnt, interestingly). I dont get it man, I just want my girl to squirm :/

 

I checked the debuffs and they are present in my status and not disabled in normal PAF. Anything I can provide to investigate this? 

Posted
16 minutes ago, lixyna said:

and it stops mid-wetting if the pee is done and the poop isnt,

peeing generally stops before the pooping finishes.

Pno's holding idle is a pno feature as its a different idle than paf's holding. (maybee they are confliction..IDk try disabling pafs pee pressure..) 

As far as I know pno's second fomod page option for paf and pfa needs enabled upon install of pno and the idle works via skypatcher.

 

Posted
On 7/25/2026 at 5:28 AM, Dg75 said:

4.7.2 is up. The only changes in PafMainScript are the DynamicPoop and AnalSpray functions, and I added new functions directly under 

the Create_Idles function inside the Utilities section.  Above post I mentioned that I may have edited CheckWorn - I did not ! 

I did edit a value in PushPno : ModEvent.PushInt(iModEventHandle, 60) ; the 60 was an 180(optional, not even certain it does anything)

this value is a timeout sent pno if pno handles things.

Mcm has not been edited. 

 

  Reveal hidden contents

new

 

String[] StyleAdjustment
String[] StyleNonAdjustment
String[] StyleAdjustmentAp

 

; DP Functions now call on RetrievePafIdleEvent to retrieve chosen pose event name to compare with below lists in 

; order to parse conditions for offset or default values.

 

String Function RetrievePafIdleEvent(Int n, Bool IsMale = False)   ; new, created for pfa 4.7.2 primarily to receive an idle name for chosen idles to play.
    int r
    if  !IsMale
        r = PafIdlesF.Length
    else
        r = PafIdlesM.Length
    endif
    if  n < 0 || r <= 0 || n > r
        Return -1   ; oops Should of been return "", somehow it compiled.. maybe the compiler took it as "" . just seen this
    endif
    if  !IsMale
        Return PafIdlesF[n]
    endif
    Return PafIdlesM[n]
EndFunction

;\

the below three functions idle names are from the original 20/03 gs poses

and are used as conditions to set values offset from a default in both DynamicPoop() and AnalSpray()


For any poses that have matching poses to the below but with different event names

will need to be patched to the same element as their match as its the element the DP functions use to parse conditions.


For any new pose - can be added to lists, but will need tested: StyleAdjustment are ass up(horizontal) like doggystyle or paf bend over,

although in the DP function directional offsets need parsed if the ass is facing player heading like paf on back. 


 StyleNonAdjustment are just fine tuned positional at a spawn point that I felt certain poses needed. Anything not on the list uses default values.

  this list only is used if the above list is not


 StyleAdjustmentAp is solely for Anal Spray and are ass up spray - away from player, but may spray in same heading like paf on back vs bend over..

\;

 

Function CreateStyleAdjustment(Bool Recreate = False) ; DynamicPoop styleAdjustments
    if  Recreate || StyleAdjustment.Length != 11
        StyleAdjustment = New String[11]
        StyleAdjustment[0] = "paf_pose0"
        StyleAdjustment[1] = "paf_ZazAPC205"
        StyleAdjustment[2] = "paf_pose1"
        StyleAdjustment[3] = "PAF_Bendover01"
        StyleAdjustment[4] = "GS365"
        StyleAdjustment[5] = "GS366"
        StyleAdjustment[6] = "GS404"
        StyleAdjustment[7] = "GS485"
        StyleAdjustment[8] = "GS532"
        StyleAdjustment[9] = "GS542"
        StyleAdjustment[10] = "paf_ZazAPC211"
    endif
EndFunction

 

Function CreateStyleAdjustmentAp(Bool Recreate = False)  ; AnalSpray style adjustments 
    if  Recreate || StyleAdjustmentAp.Length != 13
        StyleAdjustmentAp = New String[13]
        StyleAdjustmentAp[0] = "paf_ZazAPC209"
        StyleAdjustmentAp[1] = "paf_ZazAPC205"
        StyleAdjustmentAp[2] = "paf_pose1"
        StyleAdjustmentAp[3] = "PAF_Bendover01"
        StyleAdjustmentAp[4] = "GS485"
        StyleAdjustmentAp[5] = "GS532"
        StyleAdjustmentAp[6] = "GS505"
        StyleAdjustmentAp[7] = "GS510"
        StyleAdjustmentAp[8] = "GS304"
        StyleAdjustmentAp[9] = "GS404"
        StyleAdjustmentAp[10] = "GS509"
        StyleAdjustmentAp[11] = "paf_pose0"
        StyleAdjustmentAp[12] = "paf_ZazAPC211"
    endif
EndFunction

 

Function CreateStyleNonAdjustment(Bool Recreate = False) ; DynamicPoop Non styleAdjustments
    if  Recreate || StyleNonAdjustment.Length != 6
        StyleNonAdjustment = New String[6]
        StyleNonAdjustment[0] = "paf_ZazAPC201"
        StyleNonAdjustment[1] = "paf_ZazAPC202"
        StyleNonAdjustment[2] = "GS11"
        StyleNonAdjustment[3] = "GS12"
        StyleNonAdjustment[4] = "GS497"
        StyleNonAdjustment[5] = "GS406"
    endif
EndFunction

 

Thanks, I did update my original post a page back (including changelog). Took me a bit longer as I hit some problem with the mcm options (never fiddled with that before), but seems like adding a few more "State OID" blocks was too much as the mod already uses a lot. Instead I now added my mcm options as plain "non-ST" options.

Either way its updated to 4.7.2 and I added for the json a field to exempt a pose from being used with the anal spray and a field that allows to assign one of your existing offsets. I think thats the easiest approach. The core problem remains that some poses my not look great with the spray or dynamic pooping, but good enough. If you add new "types" they can simply be added by expanding the existing options.
elseif oType == "onback"
    _styleAdj = True
    nth = <index that matches the new behaviour>

I did try to comment any changes with "PFA - EX Added/Edited" if you wish to use any of this you are free to otherwise it'll remain as is a optional download in the thread unless I'd really make some bigger change that would justify its own mod page/branch

Posted (edited)

Hello! I'm having the same problem as an esteemed gentleman earlier in the thread in that the mod appears to work fully correctly except I can't get the snack/drink commands to work, with a "You can't do that" message. I'm a bit confused as to the particular settings that have to be toggled, could you clarify when you have a moment?

 

Other than that, real glad to see a mod in this particular niche still being actively supported! I only have two thoughts, the idle opinions of an overexuberant fan:

A toggle for futas to exclusively use male pee and female poo animations?

 

An accident animation? I was testing a reinstall to make sure PNO/PFA integration was still playing nice and the character entered a butt waggle animation right as she started a poo accident, which was a real lightbulb moment.

 

Nevermind that second one, I realized that that particular idle always fires from PNO upon starting to wet, which is Good Enough... unless?

Edited by Destroyman
new info
Posted (edited)
On 7/27/2026 at 6:08 PM, Alpia said:

Thanks, I did update my original post a page back (including changelog). Took me a bit longer as I hit some problem with the mcm options (never fiddled with that before), but seems like adding a few more "State OID" blocks was too much as the mod already uses a lot. Instead I now added my mcm options as plain "non-ST" options.

Either way its updated to 4.7.2 and I added for the json a field to exempt a pose from being used with the anal spray and a field that allows to assign one of your existing offsets. I think thats the easiest approach. The core problem remains that some poses my not look great with the spray or dynamic pooping, but good enough. If you add new "types" they can simply be added by expanding the existing options.
elseif oType == "onback"
    _styleAdj = True
    nth = <index that matches the new behaviour>

I did try to comment any changes with "PFA - EX Added/Edited" if you wish to use any of this you are free to otherwise it'll remain as is a optional download in the thread unless I'd really make some bigger change that would justify its own mod page/branch

Kool! Sorry been lots of busy lately, just got around to taking a good look at your work. Great job !

 I'll add a link to your original post to main page under patches section.

So for now just make any new updates if any to your original post and it should reflect.

If you ever want it removed just say the word and I'll take down.

The offset types are good idea, Maybe I can better define a system to make better use of your jason offset types in the functions..

Edited by Dg75
Posted (edited)
On 7/28/2026 at 10:16 PM, Destroyman said:

I can't get the snack/drink commands to work, with a "You can't do that" message.

By this I assume you mean that eating or drinking doesn't effect pressure state ? 

The message you refer to could indicate a failed condition, try turning on debug mode and see if it gives a clue. 

Edited by Dg75
Posted (edited)
On 7/31/2026 at 8:14 PM, Dg75 said:

By this I assume you mean that eating or drinking doesn't effect pressure state ? 

The message you refer to could indicate a failed condition, try turning on debug mode and see if it gives a clue. 

 

i mean that i can't get the mod to let me pee or poo on any NPCs, or vice versa, from the PAF kink menu. no option toggles seem to work. the actors get as far as the paffer stripping and then the alert comes up that it couldn't be done. Sometimes afterward my character enters the animation-broken state where you can't use or take out weapons and the mouse wheel doesn't work. I'm going to try re-installing Sexlab from scratch, as I also noticed that if I enable "animations for leaking" and change the solo options (which I am making an assumption is the "accident" animations) from Female Masturbation to Mito's Facedom, it stays being the default, which suggests to me that my install lost the original PAF's animations somewhere. I'll update the post with my findings there.

 

UPDATE: Alright, good news is that this fixed the problem of nothing happening, bad news is that the role is wrong when the animation is activated (the giver is on the receiving end of the animation)

 

I've also run into another minor problem where followers who are having their needs tracked will strip when any of their paf states increment above one. I have definitively traced the phenomenon to that but I don't know what's causing it, it may be a conflict with Nether Follower Framework.

Edited by Destroyman
partial fix
Posted (edited)
2 hours ago, Destroyman said:

from the PAF kink menu. no option toggles seem to work. the actors get as far as the paffer stripping and then the alert comes up that it couldn't be done. Sometimes afterward my character enters the animation-broken state where you can't use or take out weapons and the mouse wheel doesn't work. I'm going to try re-installing Sexlab from scratch, as I also noticed that if I enable "animations for leaking" and change the solo options (which I am making an assumption is the "accident" animations) from Female Masturbation to Mito's Facedom, it stays being the default, which suggests to me that my install lost the original PAF's animations somewhere. I'll update the post with my findings there.

 

UPDATE: Alright, good news is that this fixed the problem of nothing happening, bad news is that the role is wrong when the animation is activated (the giver is on the receiving end of the animation)

 

I've also run into another minor problem where followers who are having their needs tracked will strip when any of their paf states increment above one. I have definitively traced the phenomenon to that but I don't know what's causing it, it may be a conflict with Nether Follower Framework.

in kink sex, script function when the actor strips it then calls for sexlab to start animation, if for some reason sexlab fails to start it will return a false back to pfa 

and pfa cancels stuff and sends message to screen "You cannot do this right now". 

Point is if pfa stripped actor then pfa passed all other pfa related conditions - order of operation - lastly pfa builds animations and sends to Slab.

sexlab is failing its conditions, Probably invalid animations.

or pfa is screwing up the thread build(animations, in which case should be reproducible on my end and everybody else's end) I'll test and see.

If you ever suspect SexLab is screwy then use its last mcm page options to save your current profile then use the reset option(sets it back default) then 

you can import your saved profile settings. This usually fixes Sexlab, but also may indicate some other mod is tampering with sexlab internals. 

I had expected Follower Slave Mod 1.734 as after I installed it myself I had to reset Sexlab several times but recently has been working okay so I 

can't say for sure.

 

can't use or take out weapons may indicate a conflict with mods that disable PC controls. PFA, Sexlab and all mods that do, if faliing a function after 

disabling pc controls then they would re enable them upon function failure - but if other mods do same things at that exact moment then maybe things

get crossed up. Not sure if there is a console command to re enable pc controls and set PC AI driven to false, try google search that for console command

and see if anything pops up. 

 

Incorrect rolls is probably pfa fault unless another mod is switching them. Check sexlab mcm options on that as it can auto set rolls. 

What animation is playing that the rolls are wrong ? I'll test it. 

Try disabling PFA's "Unlock animations" (this if enabled will randomly use whatever animation you have installed for kink rather than just pafs defaults)

Also try disabling pfa's tag system. There is a switch roll opt in pfa but is only Sexlab genders Female on Female as I felt their rolls were wrong.

play with these options and see if either fixes it.

 

All tracked actors strip with only one pressure state ? Do they paf after stripping ? 

Legacy Pee and Fart required tracked actors to have a pressure state of 3 before they could go. 

PFA did add a tweak that if one had enough pressure(state 3) then other actors that are checked after that one -

could also go with with a lower pressure state of 2 but not 1 

This may be related to kink sex - player used as toilet - and pfa's mcm option to require tracked actors have a pressure state of at least one before 

auto sex started. Check those mcm opts and see. 

Edited by Dg75
Posted (edited)

I have solved all problems except the wrong role during kink. You were right, the stripping was the "use player as toilet" option. I think before I fixed the animations, it was doing the same thing for the follower in question as it was when I tried to initiate kink animations, as when I fixed the animations in general, instead of coming up to me and stripping she properly started the animation.

 

I've fiddled around as much as possible without breaking anything in Sexlab and PFA/PAF's options and can't find a solution to the wrong role problem. When the NPC initiated the kink it was the correct roles though.

 

EDIT: While I'm thinking about it, how about adding GS053 as a stripping animation? It's PNO's default undress for women and it's both sexy and real streamlined.

Edited by Destroyman
Posted (edited)
On 8/2/2026 at 10:59 PM, Destroyman said:

When the NPC initiated the kink it was the correct roles though.

 

EDIT: While I'm thinking about it, how about adding GS053 as a stripping animation? It's PNO's default undress for women and it's both sexy and real streamlined.

so its just player initiated kink when the wrong role happens via set npc as toilet ? 

Do you have the Flip role mcm option enabled in pfa ?

What sexlab gender are the participants ?

I am assuming here its Player initiated so it should be the Player actor kinking on a submissive npc correct ?

 

I'll take a look at gs053, would be nice to have a decent strip idle for a change.

 

 

Edited by Dg75
Posted (edited)

Hi! Thanks for the great mod! I tried replacing some of your fx sound files with my own, however, no sound was played in game after replacement. I named those files excatly the same as the original ones. Now I wonder if a new game is needed. What else should I edit if I want my own edits to work properly? Thanks in advance!

Edited by LustyWolf0721
Posted (edited)
3 hours ago, LustyWolf0721 said:

Hi! Thanks for the great mod! I tried replacing some of your fx sound files with my own, however, no sound was played in game after replacement. I named those files excatly the same as the original ones. Now I wonder if a new game is needed. What else should I edit if I want my own edits to work properly? Thanks in advance!

Just make sure they are installed to correct path: Data/Sound/fx/PafFixesAndAddons  for pfa's addon farts 

or Data/Sound/fx/PeeandFart for the legacy moans and farts 

If you use patch PFA_Additional_Farts then make sure your edits are winning the file. 

 

Can try load - save game - exit and load game again or try crossing some cells and see if they start working. 

As long as your edits are named the same and you used correct sound format they should work. 

 

Edited by Dg75
Posted (edited)
On 8/10/2026 at 4:09 AM, Dg75 said:

Just make sure they are installed to correct path: Data/Sound/fx/PafFixesAndAddons  for pfa's addon farts 

or Data/Sound/fx/PeeandFart for the legacy moans and farts 

If you use patch PFA_Additional_Farts then make sure your edits are winning the file. 

 

Can try load - save game - exit and load game again or try crossing some cells and see if they start working. 

As long as your edits are named the same and you used correct sound format they should work. 

 

Thanks for the reply! Just tried and it works perfectly!

Edited by LustyWolf0721

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
×
×
  • Create New...