Jump to content

Adapting Masturbate lesser power script for futa PC


Recommended Posts

Posted

Here is the original script:

 

 

scriptname xLoversMB2SpellSelfSC
;r20110122
;- Initial release.
;r20110123
;- 2nd release
;  bug fix : only female can equip bottom
;r20110129
;- 3rd release
;  change  : record boner item count
;  bug fix : modav -> modav2
;  bug fix : Ammo ReEquip is fixed
;

; stage
short sStage
short sDone

; equipped items
ref rEquippedTop
ref rEquippedBottom
ref rEquippedTopAndBottom
ref rHand
ref rWeapon
ref rAmmo
ref rShield
ref rPlayerBoners

; misc vars
short sKeyPressed ; which key was pressed
short sCameraView ; was the player first person or third when masturbating started
float fTimer ; currently running timer
float fVoiceTimer ; timer for sound effects
ref rTmp ; temporary reference used in various places
float fTmp ; temp float variable
short sTmp ; temp short.. we're on a roll here
short sReady ; player is ready
ref rPlayer ; fucking bs
short sNumActors ; number of actors allowed to follow player
short sFatigue ; fatigue before starting
short sBoners

begin ScriptEffectFinish
    debugPrint "xLoversMB2 [%n] - cleaning up" rPlayer
    set rPlayer to player
    ; release any actors following the player
    if(xLoversMB2Quest.sAllowSpectators)
        set rTmp to getFirstRef 69 1
        while(rTmp)
        ; is the actor following the player?
        if(rTmp.getIsCurrentPackage xLoversMB2FollowPlayer)
            ; stop it
            rTmp.stopLook
            rTmp.removeScriptPackage
            
            ; resume doing whatever
            rTmp.playGroup idle 1
        endif

        set rTmp to getNextRef
        loop
    endif

    set xLoversMB2Quest.sDisallowAdvanceStage to 0

    set sStage to player.getItemCount xLoversMBStage
    if(sStage)
        ; we actually did something

        ; reset stage and remove any tokens
        while (call xLoversCmnSetItemCount rPlayer xLoversMBStage 0)
            call xLoversCmnSetItemCount rPlayer xLoversStageM 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrFlagTFC 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrIdentifier 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrStep 0
        loop

        ; reset camera position
        con_tfc
        if(sCameraView != 1)
            ToggleFirstPerson 1
        endif

        ; reequip weapons and armor
        if(xLoversMB2Quest.sLeaveVulnerable == 0)

            ; clear erected cock
            call xLoversCmnDeleteAllChinupoItem rPlayer

            ; re-equip clothing
            if(rEquippedTopAndBottom)
                player.equipItemNS rEquippedTopAndBottom
            endif

            if(rEquippedTop)
                player.equipItemNS rEquippedTop
            endif

            if(rEquippedBottom)
                player.equipItemNS rEquippedBottom
            endif

            ; re-equip hand armor
            if(rHand)
                player.equipItemNS rHand
            endif

            ; re-equip any weapons, ammo, or shields
            if(rWeapon)
                player.equipItemNS rWeapon
            endif

            if(rAmmo)
                set sTmp to (player.GetItemCount rAmmo)
                set sTmp to sTmp - 1
                if(sTmp > 0)
                    player.RemoveItemNs rAmmo sTmp
                endif
                player.equipItemNS rAmmo
                set xLoversMB2ActivatingAmmo.sAmmo to sTmp
                set sTmp to sTmp - 1
                if(sTmp > 0)
                    player.AddItemNs rAmmo sTmp
                endif
                set sTmp to sTmp + 1
                if(sTmp > 0)
                    set rTmp to player.PlaceAtMe rAmmo, 1
                    set xLoversMB2ActivatingAmmo.rAmmo to rTmp
                endif
            endif

            if(rShield)
                player.equipItemNS rShield
            endif

            ; revive player
            ; TODO: there should be a better way to do this
            set sTmp to player.getActorValue fatigue
            set sTmp to (abs sTmp) + sFatigue
        else
            set sTmp to player.getActorValue fatigue
            set sTmp to (abs sTmp)
        endif

        ; make the player playable again
        player.modActorValue2 fatigue sTmp

        if(rPlayerBoners) && (player.GetIsSex Male)
            while(call xLoversCmnSetItemCount rPlayer rPlayerBoners sBoners)
            loop
        endif

        if(rAmmo) && (xLoversMB2ActivatingAmmo.sAmmo)
            StartQuest xLoversMB2ActivatingAmmo
        endif

        player.SetGhost 0
        player.SetUnconscious 0

    endif

        debugPrint "xLoversMB2 [%n] - done" rPlayer

end

begin ScriptEffectStart
    set rPlayer to player
    set rPlayerBoners to xLoversMB2Quest.rPlayerBoners

    ; check if the player is ready
    ; is target ready?
    let sReady := call xLoversCmnIsready rPlayer
    if(sReady == 0)
        player.dispel xLoversMB2SpellTarget
    endif

    debugPrint "xLoversMB2 [%n] - passed checks, starting up" rPlayer

    ; init vars
    while (call xLoversCmnSetItemCount rPlayer xLoversMBStage 0)
            call xLoversCmnSetItemCount rPlayer xLoversStageM 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrFlagTFC 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrIdentifier 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrStep 0
    loop

    if(rPlayerBoners)
        set sBoners to player.getItemCount rPlayerBoners
        call xLoversCmnSetItemCount rPlayer rPlayerBoners 1
    endif

    set sFatigue to player.getActorValue fatigue
    set sDone to 0

    ; unsneak, put weapon away
    if(player.IsSneaking)
        player.SetForceSneak 0
    endif
            
    if(player.IsWeaponOut)
        player.setAlert 0
    endif
    
    ; set the player so s/he cannot be harmed
    player.SetUnconscious 1
    player.SetGhost 1

    ; players equipped top and bottom, for removal
    if(player.GetEquippedObject 18)
        set rEquippedTopAndBottom to player.GetEquippedObject 18
    elseif(player.GetEquippedObject 19)
        set rEquippedTopAndBottom to player.GetEquippedObject 19
    elseif(player.GetEquippedObject 20)
        set rEquippedTopAndBottom to player.GetEquippedObject 20
    elseif(player.GetEquippedObject 21)
        set rEquippedTopAndBottom to player.GetEquippedObject 21
    else
        set rEquippedTop to player.GetEquippedObject 2
        set rEquippedBottom to player.GetEquippedObject 3
    endif

    ; unequip clothing
    if(rEquippedTopAndBottom)
        set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
        if(sTmp == 0)
            player.unequipItemNS rEquippedTopAndBottom
        endif
    endif

    if(rEquippedTop) && (player.GetIsSex Female) ; only female unequip top
        set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTop
        if(sTmp == 0)
            player.unequipItemNS rEquippedTop
        endif
    endif

    if(rEquippedBottom);
        set sTmp to call xLoversCmnIsBodySizeEquip rEquippedBottom
        if(sTmp == 0)
            player.unequipItemNS rEquippedBottom
        endif
    endif

    ; set erect cock
    if(rPlayerBoners)
            player.equipItemNS rPlayerBoners
    endif

    ; unequip hand armor
    if(player.GetEquippedObject 4)
        set rHand to player.GetEquippedObject 4
        if(IsArmor rHand) && (xLoversMB2Quest.sAllowUnequipHands)
            player.unequipItemNS rHand
        else
            set rHand to 0
        endif
    endif

    ; unequip any weapons, ammo, or shields
    if(player.GetEquippedObject 16)
        set rWeapon to player.GetEquippedObject 16
        player.unequipItemNS rWeapon
    endif

    if(player.GetEquippedObject 17)
        set rAmmo to player.GetEquippedObject 17
        player.unequipItemNS rAmmo
    endif

    if(player.GetEquippedObject 13)
        set rShield to player.GetEquippedObject 13
        player.unequipItemNS rShield
    endif

    debugPrint "xLoversMB2 [%n] - saved equipment" rPlayer

    ; save and change camera mode
    set sCameraView to isThirdPerson
    if(sCameraView != 1)
        ToggleFirstPerson 0
    endif
    con_tfc
    
    debugPrint "xLoversMB2 [%n] - reset camera" rPlayer

    ; tell xLovers to start  
    call xLoversCmnSetItemCount rPlayer xLoversStageM 0
    call xLoversCmnSetItemCount rPlayer xLoversPkrFlagTFC 4
    call xLoversCmnSetItemCount rPlayer xLoversPkrIdentifier 2
    call xLoversCmnSetItemCount rPlayer xLoversPkrStep 4
    call xLoversCmnSetItemCount rPlayer xLoversMBStage 1

    debugPrint "xLoversMB2 [%n] - xlovers notified" rPlayer
    
    ; initialize timers
    set fTimer to xLoversMB2Quest.fTimeOut
    set fVoiceTimer to xLoversMB2Quest.fVoiceTimeOut

    ; done with setup
    player.pickIdle
end

begin ScriptEffectUpdate
    ; so we don't have to go through player's inventory so many times
    set sStage to player.getItemCount xLoversMBStage

    ; not a valid stage?
    if(sStage == 0)
    ; we're done
        player.dispel xLoversMB2SpellSelf
    endif

    ; more or less pause if console is open or player is interrupted
    if(IsTextInputInUse || IsConsoleOpen)
        return
    else
        if(onKeyDown xLoversMB2Quest.sAdvanceStageKey) && (xLoversMB2Quest.sDisallowAdvanceStage == 0)
            set sKeyPressed to 1
        elseif(onKeyDown xLoversMB2Quest.sPreviousStageKey)
            set sKeyPressed to 2
        elseif(onKeyDown xLoversMB2Quest.sToggleTopKey)
            set sKeyPressed to 3
        elseif(onKeyDown xLoversMB2Quest.sToggleBottomKey)
            set sKeyPressed to 4
        elseif(onKeyDown xLoversMB2Quest.sChangePositionKey)
            set sKeyPressed to 5
        else
            set sKeyPressed to 0
        endif
    endif

    if(sDone == 0) ; during mb

        ; did the player force a stage change?
        if(sKeyPressed == 1)
            set fTimer to 0

            debugPrint "xLoversMB2 [%n] - forced next stage" rPlayer
        elseif(sKeyPressed == 2)
            ; cannot go before first stage
            if(sStage > 1)
            ; remove counter
                player.removeItemNS xLoversMBStage 1
                ; show next animation
                player.pickIdle

                set sStage to player.getItemCount xLoversMBStage
                debugPrint "xLoversMB2 [%n] - forced previous stage, %g" rPlayer sStage

                ; reset automatic timeout
                set fTimer to xLoversMB2Quest.fTimeOut - xLoversMB2Quest.fDegradeTimer * (sStage - 1)
            endif
        elseif(sKeyPressed == 3)
        ; toggle top

            ; see if the player is wearing anything, update the saved variable while we're at it

            if(player.GetEquippedObject 18)
                set rEquippedTopAndBottom to player.GetEquippedObject 18
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                endif
            elseif(player.GetEquippedObject 19)
                set rEquippedTopAndBottom to player.GetEquippedObject 19
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 20)
                set rEquippedTopAndBottom to player.GetEquippedObject 20
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 21)
                set rEquippedTopAndBottom to player.GetEquippedObject 21
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 2)
                set rEquippedTop to player.GetEquippedObject 2
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTop
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTop
                else
                    set rEquippedTop to 0
                endif
            else
            ; pretty sure player is topless right now, put something there
                if(rEquippedTop)
                    player.equipItemNS rEquippedTop
                elseif(rEquippedTopAndBottom) && (player.GetIsSex Female) ;only female can equip bottom
                    player.equipItemNS rEquippedTopAndBottom
                endif
            endif

            ; update equipped items
            if(rEquippedTopAndBottom) && (player.GetIsSex Female) ;only female can equip bottom
                set rEquippedTop to 0
                set rEquippedBottom to 0
            elseif(rEquippedTop)
                set rEquippedTopAndBottom to 0
            endif

            debugPrint "xLoversMB2 [%n] - toggled top" rPlayer
        elseif(sKeyPressed == 4) && (player.GetIsSex Female) ;only female can equip bottom
        ; toggle bottom

            ; see if the player is wearing anything, update the saved variable while we're at it
            if(player.GetEquippedObject 18)
                set rEquippedTopAndBottom to player.GetEquippedObject 18
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 19)
                set rEquippedTopAndBottom to player.GetEquippedObject 19
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 20)
                set rEquippedTopAndBottom to player.GetEquippedObject 20
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 21)
                set rEquippedTopAndBottom to player.GetEquippedObject 21
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 3)
                if(rPlayerBoners) && (rPlayerBoners == player.GetEquippedObject 3)
                    if(rEquippedBottom)
                        player.equipItemNS rEquippedBottom
                    elseif(rEquippedTopAndBottom)
                        player.equipItemNS rEquippedTopAndBottom
                    endif
                    call xLoversCmnSetItemCount rPlayer rPlayerBoners 1
                    player.pickidle
                else
                    set rEquippedBottom to player.GetEquippedObject 3
                    set sTmp to call xLoversCmnIsBodySizeEquip rEquippedBottom
                    if(sTmp == 0)
                        player.unequipItemNS rEquippedBottom
                    else
                        set rEquippedBottom to 0
                    endif
                endif
            else
            ; pretty sure player is bottomless right now, put something there
                if(rPlayerBoners)
                    player.equipItemNS rPlayerBoners
                    call xLoversCmnSetItemCount rPlayer rPlayerBoners 2
                    player.pickidle
                elseif(rEquippedBottom)
                    player.equipItemNS rEquippedBottom
                elseif(rEquippedTopAndBottom)
                    player.equipItemNS rEquippedTopAndBottom
                endif
            endif

            ; update equipped items
            if(rEquippedTopAndBottom)
                set rEquippedTop to 0
                set rEquippedBottom to 0
            else
                set rEquippedTopAndBottom to 0
            endif

            debugPrint "xLoversMB2 [%n] - toggled bottom" rPlayer
        elseif(sKeyPressed == 5)
            ; change position
            player.pickIdle
            
            debugPrint "xLoversMB2 [%n] - changed animation" rPlayer
        endif

        ; start winding down the clock
        set fTimer to fTimer - GetSecondsPassed

        ; if female play audio clip
        if(player.GetIsSex Female)
            set fVoiceTimer to fVoiceTimer - GetSecondsPassed

            if(fVoiceTimer < 0)
                ; play the sound depending on which stage
                if(sStage < xLoversMB2Quest.sFemaleStages - 1)
                    call xLoversCmnPlayVoice rPlayer sStage 0
                elseif(sStage < xLoversMB2Quest.sFemaleStages)
                    call xLoversCmnPlayVoice rPlayer 4 0
                else
                    call xLoversCmnPlayVoice rPlayer 5 0
                endif

                ; reset the timer
                set fTmp to xLoversMB2Quest.fVoiceVariableMin + xLoversMB2Quest.fVoiceVariableMax
                set fTmp to fTmp * (getRandomPercent / 100) - xLoversMB2Quest.fVoiceVariableMin
                set fVoiceTimer to xLoversMB2Quest.fVoiceTimeOut + fTmp
            endif
        endif

        ; finish staged automatically
        if(fTimer < 0)
        ; add another stage counter
            player.additemNS xLoversMBStage 1

            ; show next animation
            player.pickIdle

            set sStage to player.getItemCount xLoversMBStage
            debugPrint "xLoversMB2 [%n] - now on stage %g" rPlayer sStage

            ; reset automatic timeout
            set fTimer to xLoversMB2Quest.fTimeOut - xLoversMB2Quest.fDegradeTimer * (sStage - 1)

            ; check if player is done next stage
            if(sStage >= xLoversMB2Quest.sFemaleStageEnd || sStage >= xLoversMB2Quest.sMaleStageEnd)
                ; no more stages of animations, go to exhausted state
                player.additemNS xLoversStageM 5
                set fTimer to xLoversMB2Quest.fUnconsiousTimeOut
                set sDone to 1

                debugPrint "xLoversMB2 [%n] - no more stages" rPlayer
            endif
        endif
    else ; exhausted
        ; run once when player hits exhausted state
        if(fTimer == xLoversMB2Quest.fUnconsiousTimeOut)
            player.additemNS xLoversMBStage 1
            debugPrint "xLoversMB2 [%n] - exhausting actor" rPlayer

            ; momma said knock you out
            player.modav2 fatigue -10000
        endif

        ; wait to wake up
        set fTimer to fTimer - GetSecondsPassed

        ; wakey wakey
        if(fTimer < 0) && (sDone == 1)
            debugPrint "xLoversMB2 [%n] - cleaning up now" rPlayer
            set sDone to 2
            player.dispel xLoversMB2SpellSelf
        endif
    endif

    ; have people gather around to watch
    set sNumActors to getGameSetting iNumberActorsAllowedToFollowPlayer
    if(xLoversMB2Quest.sAllowSpectators == 1 && player.getNumFollowers < sNumActors)
        ; go through actors in the same cell
        set rTmp to getFirstRef 69 1
        while(rTmp)
        ; can't fit any more actors, done
            if(player.getNumFollowers == sNumActors)
                break
            endif

        ; only allow actor to follow target if they pass checks
            set sTmp to 0

            if(xLoversMB2Quest.sUsexLoverCmnIsReady)
                let sTmp := call xLoversCmnIsready rTmp
            else
                if(rTmp.getDisabled == 0)
                    if(rTmp.getDead == 0 && rTmp.getUnconscious == 0 && rTmp.getSleeping == 0)
                        if(rTmp.isInCombat == 0 && rTmp.getKnockedState == 0 && rTmp.getIsCreature == 0)
                            if(rTmp.getLOS player && rTmp.getDistance player < xLoversMB2Quest.fSpectatorMaxDistance)
                                set sTmp to 1
                            endif
                        endif
                    endif
                endif
            endif

            ; actor is ready and not already following the player
            if(sTmp == 1 && rTmp.getIsCurrentPackage xLoversMB2FollowPlayer == 0)
                ; make it less likely to be seen at longer distances, linear relationship for now
                set fTmp to xLoversMB2Quest.fSpectatorNoticeChance * (rTmp.getDistance player / xLoversMB2Quest.fSpectatorMaxDistance)
                if(getRandomPercent < xLoversMB2Quest.fSpectatorNoticeChance - fTmp)
                ; ok, actor is set to follow player
                    rTmp.look player
                    rTmp.addScriptPackage xLoversMB2FollowPlayer
                endif
            endif

            set rTmp to getNextRef
        loop
    endif
end
;<CSEBlock>
;<CSECaretPos> 10792 </CSECaretPos>
;</CSEBlock>

I wonder what needs to be changed to make futa PC to play the male animation.

Posted

Clipboard panic... and I have problems editing past comment (perhaps because of the code tag).

Once again, original script:

 

 

scriptname xLoversMB2SpellSelfSC
;r20110122
;- Initial release.
;r20110123
;- 2nd release
;  bug fix : only female can equip bottom
;r20110129
;- 3rd release
;  change  : record boner item count
;  bug fix : modav -> modav2
;  bug fix : Ammo ReEquip is fixed
;

; stage
short sStage
short sDone

; equipped items
ref rEquippedTop
ref rEquippedBottom
ref rEquippedTopAndBottom
ref rHand
ref rWeapon
ref rAmmo
ref rShield
ref rPlayerBoners

; misc vars
short sKeyPressed ; which key was pressed
short sCameraView ; was the player first person or third when masturbating started
float fTimer ; currently running timer
float fVoiceTimer ; timer for sound effects
ref rTmp ; temporary reference used in various places
float fTmp ; temp float variable
short sTmp ; temp short.. we're on a roll here
short sReady ; player is ready
ref rPlayer ; fucking bs
short sNumActors ; number of actors allowed to follow player
short sFatigue ; fatigue before starting
short sBoners

begin ScriptEffectFinish
    debugPrint "xLoversMB2 [%n] - cleaning up" rPlayer
    set rPlayer to player
    ; release any actors following the player
    if(xLoversMB2Quest.sAllowSpectators)
        set rTmp to getFirstRef 69 1
        while(rTmp)
        ; is the actor following the player?
        if(rTmp.getIsCurrentPackage xLoversMB2FollowPlayer)
            ; stop it
            rTmp.stopLook
            rTmp.removeScriptPackage
            
            ; resume doing whatever
            rTmp.playGroup idle 1
        endif

        set rTmp to getNextRef
        loop
    endif

    set xLoversMB2Quest.sDisallowAdvanceStage to 0

    set sStage to player.getItemCount xLoversMBStage
    if(sStage)
        ; we actually did something

        ; reset stage and remove any tokens
        while (call xLoversCmnSetItemCount rPlayer xLoversMBStage 0)
            call xLoversCmnSetItemCount rPlayer xLoversStageM 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrFlagTFC 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrIdentifier 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrStep 0
        loop

        ; reset camera position
        con_tfc
        if(sCameraView != 1)
            ToggleFirstPerson 1
        endif

        ; reequip weapons and armor
        if(xLoversMB2Quest.sLeaveVulnerable == 0)

            ; clear erected cock
            call xLoversCmnDeleteAllChinupoItem rPlayer

            ; re-equip clothing
            if(rEquippedTopAndBottom)
                player.equipItemNS rEquippedTopAndBottom
            endif

            if(rEquippedTop)
                player.equipItemNS rEquippedTop
            endif

            if(rEquippedBottom)
                player.equipItemNS rEquippedBottom
            endif

            ; re-equip hand armor
            if(rHand)
                player.equipItemNS rHand
            endif

            ; re-equip any weapons, ammo, or shields
            if(rWeapon)
                player.equipItemNS rWeapon
            endif

            if(rAmmo)
                set sTmp to (player.GetItemCount rAmmo)
                set sTmp to sTmp - 1
                if(sTmp > 0)
                    player.RemoveItemNs rAmmo sTmp
                endif
                player.equipItemNS rAmmo
                set xLoversMB2ActivatingAmmo.sAmmo to sTmp
                set sTmp to sTmp - 1
                if(sTmp > 0)
                    player.AddItemNs rAmmo sTmp
                endif
                set sTmp to sTmp + 1
                if(sTmp > 0)
                    set rTmp to player.PlaceAtMe rAmmo, 1
                    set xLoversMB2ActivatingAmmo.rAmmo to rTmp
                endif
            endif

            if(rShield)
                player.equipItemNS rShield
            endif

            ; revive player
            ; TODO: there should be a better way to do this
            set sTmp to player.getActorValue fatigue
            set sTmp to (abs sTmp) + sFatigue
        else
            set sTmp to player.getActorValue fatigue
            set sTmp to (abs sTmp)
        endif

        ; make the player playable again
        player.modActorValue2 fatigue sTmp

        if(rPlayerBoners)
            while(call xLoversCmnSetItemCount rPlayer rPlayerBoners sBoners)
            loop
        endif

        if(rAmmo) && (xLoversMB2ActivatingAmmo.sAmmo)
            StartQuest xLoversMB2ActivatingAmmo
        endif

        player.SetGhost 0
        player.SetUnconscious 0

    endif

        debugPrint "xLoversMB2 [%n] - done" rPlayer

end

begin ScriptEffectStart
    set rPlayer to player
    set rPlayerBoners to xLoversMB2Quest.rPlayerBoners

    ; check if the player is ready
    ; is target ready?
    let sReady := call xLoversCmnIsready rPlayer
    if(sReady == 0)
        player.dispel xLoversMB2SpellTarget
    endif

    debugPrint "xLoversMB2 [%n] - passed checks, starting up" rPlayer

    ; init vars
    while (call xLoversCmnSetItemCount rPlayer xLoversMBStage 0)
            call xLoversCmnSetItemCount rPlayer xLoversStageM 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrFlagTFC 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrIdentifier 0
            call xLoversCmnSetItemCount rPlayer xLoversPkrStep 0
    loop

    if(rPlayerBoners)
        set sBoners to player.getItemCount rPlayerBoners
        call xLoversCmnSetItemCount rPlayer rPlayerBoners 1
    endif

    set sFatigue to player.getActorValue fatigue
    set sDone to 0

    ; unsneak, put weapon away
    if(player.IsSneaking)
        player.SetForceSneak 0
    endif
            
    if(player.IsWeaponOut)
        player.setAlert 0
    endif
    
    ; set the player so s/he cannot be harmed
    player.SetUnconscious 1
    player.SetGhost 1

    ; players equipped top and bottom, for removal
    if(player.GetEquippedObject 18)
        set rEquippedTopAndBottom to player.GetEquippedObject 18
    elseif(player.GetEquippedObject 19)
        set rEquippedTopAndBottom to player.GetEquippedObject 19
    elseif(player.GetEquippedObject 20)
        set rEquippedTopAndBottom to player.GetEquippedObject 20
    elseif(player.GetEquippedObject 21)
        set rEquippedTopAndBottom to player.GetEquippedObject 21
    else
        set rEquippedTop to player.GetEquippedObject 2
        set rEquippedBottom to player.GetEquippedObject 3
    endif

    ; unequip clothing
    if(rEquippedTopAndBottom)
        set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
        if(sTmp == 0)
            player.unequipItemNS rEquippedTopAndBottom
        endif
    endif

    if(rEquippedTop) && (player.GetIsSex Female) ; only female unequip top
        set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTop
        if(sTmp == 0)
            player.unequipItemNS rEquippedTop
        endif
    endif

    if(rEquippedBottom);
        set sTmp to call xLoversCmnIsBodySizeEquip rEquippedBottom
        if(sTmp == 0)
            player.unequipItemNS rEquippedBottom
        endif
    endif

    ; set erect cock
    if(rPlayerBoners) && (player.GetIsSex Male)
            player.equipItemNS rPlayerBoners
    endif

    ; unequip hand armor
    if(player.GetEquippedObject 4)
        set rHand to player.GetEquippedObject 4
        if(IsArmor rHand) && (xLoversMB2Quest.sAllowUnequipHands)
            player.unequipItemNS rHand
        else
            set rHand to 0
        endif
    endif

    ; unequip any weapons, ammo, or shields
    if(player.GetEquippedObject 16)
        set rWeapon to player.GetEquippedObject 16
        player.unequipItemNS rWeapon
    endif

    if(player.GetEquippedObject 17)
        set rAmmo to player.GetEquippedObject 17
        player.unequipItemNS rAmmo
    endif

    if(player.GetEquippedObject 13)
        set rShield to player.GetEquippedObject 13
        player.unequipItemNS rShield
    endif

    debugPrint "xLoversMB2 [%n] - saved equipment" rPlayer

    ; save and change camera mode
    set sCameraView to isThirdPerson
    if(sCameraView != 1)
        ToggleFirstPerson 0
    endif
    con_tfc
    
    debugPrint "xLoversMB2 [%n] - reset camera" rPlayer

    ; tell xLovers to start  
    call xLoversCmnSetItemCount rPlayer xLoversStageM 0
    call xLoversCmnSetItemCount rPlayer xLoversPkrFlagTFC 4
    call xLoversCmnSetItemCount rPlayer xLoversPkrIdentifier 2
    call xLoversCmnSetItemCount rPlayer xLoversPkrStep 4
    call xLoversCmnSetItemCount rPlayer xLoversMBStage 1

    debugPrint "xLoversMB2 [%n] - xlovers notified" rPlayer
    
    ; initialize timers
    set fTimer to xLoversMB2Quest.fTimeOut
    set fVoiceTimer to xLoversMB2Quest.fVoiceTimeOut

    ; done with setup
    player.pickIdle
end

begin ScriptEffectUpdate
    ; so we don't have to go through player's inventory so many times
    set sStage to player.getItemCount xLoversMBStage

    ; not a valid stage?
    if(sStage == 0)
    ; we're done
        player.dispel xLoversMB2SpellSelf
    endif

    ; more or less pause if console is open or player is interrupted
    if(IsTextInputInUse || IsConsoleOpen)
        return
    else
        if(onKeyDown xLoversMB2Quest.sAdvanceStageKey) && (xLoversMB2Quest.sDisallowAdvanceStage == 0)
            set sKeyPressed to 1
        elseif(onKeyDown xLoversMB2Quest.sPreviousStageKey)
            set sKeyPressed to 2
        elseif(onKeyDown xLoversMB2Quest.sToggleTopKey)
            set sKeyPressed to 3
        elseif(onKeyDown xLoversMB2Quest.sToggleBottomKey)
            set sKeyPressed to 4
        elseif(onKeyDown xLoversMB2Quest.sChangePositionKey)
            set sKeyPressed to 5
        else
            set sKeyPressed to 0
        endif
    endif

    if(sDone == 0) ; during mb

        ; did the player force a stage change?
        if(sKeyPressed == 1)
            set fTimer to 0

            debugPrint "xLoversMB2 [%n] - forced next stage" rPlayer
        elseif(sKeyPressed == 2)
            ; cannot go before first stage
            if(sStage > 1)
            ; remove counter
                player.removeItemNS xLoversMBStage 1
                ; show next animation
                player.pickIdle

                set sStage to player.getItemCount xLoversMBStage
                debugPrint "xLoversMB2 [%n] - forced previous stage, %g" rPlayer sStage

                ; reset automatic timeout
                set fTimer to xLoversMB2Quest.fTimeOut - xLoversMB2Quest.fDegradeTimer * (sStage - 1)
            endif
        elseif(sKeyPressed == 3)
        ; toggle top

            ; see if the player is wearing anything, update the saved variable while we're at it

            if(player.GetEquippedObject 18)
                set rEquippedTopAndBottom to player.GetEquippedObject 18
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                endif
            elseif(player.GetEquippedObject 19)
                set rEquippedTopAndBottom to player.GetEquippedObject 19
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 20)
                set rEquippedTopAndBottom to player.GetEquippedObject 20
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 21)
                set rEquippedTopAndBottom to player.GetEquippedObject 21
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 2)
                set rEquippedTop to player.GetEquippedObject 2
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTop
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTop
                else
                    set rEquippedTop to 0
                endif
            else
            ; pretty sure player is topless right now, put something there
                if(rEquippedTop)
                    player.equipItemNS rEquippedTop
                elseif(rEquippedTopAndBottom) && (player.GetIsSex Female) ;only female can equip bottom
                    player.equipItemNS rEquippedTopAndBottom
                endif
            endif

            ; update equipped items
            if(rEquippedTopAndBottom) && (player.GetIsSex Female) ;only female can equip bottom
                set rEquippedTop to 0
                set rEquippedBottom to 0
            elseif(rEquippedTop)
                set rEquippedTopAndBottom to 0
            endif

            debugPrint "xLoversMB2 [%n] - toggled top" rPlayer
        elseif(sKeyPressed == 4) && (player.GetIsSex Female) ;only female can equip bottom
        ; toggle bottom

            ; see if the player is wearing anything, update the saved variable while we're at it
            if(player.GetEquippedObject 18)
                set rEquippedTopAndBottom to player.GetEquippedObject 18
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 19)
                set rEquippedTopAndBottom to player.GetEquippedObject 19
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 20)
                set rEquippedTopAndBottom to player.GetEquippedObject 20
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 21)
                set rEquippedTopAndBottom to player.GetEquippedObject 21
                set sTmp to call xLoversCmnIsBodySizeEquip rEquippedTopAndBottom
                if(sTmp == 0)
                    player.unequipItemNS rEquippedTopAndBottom
                else
                    set rEquippedTopAndBottom to 0
                endif
            elseif(player.GetEquippedObject 3)
                if(rPlayerBoners) && (rPlayerBoners == player.GetEquippedObject 3)
                    if(rEquippedBottom)
                        player.equipItemNS rEquippedBottom
                    elseif(rEquippedTopAndBottom)
                        player.equipItemNS rEquippedTopAndBottom
                    endif
                    call xLoversCmnSetItemCount rPlayer rPlayerBoners 1
                    player.pickidle
                else
                    set rEquippedBottom to player.GetEquippedObject 3
                    set sTmp to call xLoversCmnIsBodySizeEquip rEquippedBottom
                    if(sTmp == 0)
                        player.unequipItemNS rEquippedBottom
                    else
                        set rEquippedBottom to 0
                    endif
                endif
            else
            ; pretty sure player is bottomless right now, put something there
                if(rPlayerBoners)
                    player.equipItemNS rPlayerBoners
                    call xLoversCmnSetItemCount rPlayer rPlayerBoners 2
                    player.pickidle
                elseif(rEquippedBottom)
                    player.equipItemNS rEquippedBottom
                elseif(rEquippedTopAndBottom)
                    player.equipItemNS rEquippedTopAndBottom
                endif
            endif

            ; update equipped items
            if(rEquippedTopAndBottom)
                set rEquippedTop to 0
                set rEquippedBottom to 0
            else
                set rEquippedTopAndBottom to 0
            endif

            debugPrint "xLoversMB2 [%n] - toggled bottom" rPlayer
        elseif(sKeyPressed == 5)
            ; change position
            player.pickIdle
            
            debugPrint "xLoversMB2 [%n] - changed animation" rPlayer
        endif

        ; start winding down the clock
        set fTimer to fTimer - GetSecondsPassed

        ; if female play audio clip
        if(player.GetIsSex Female)
            set fVoiceTimer to fVoiceTimer - GetSecondsPassed

            if(fVoiceTimer < 0)
                ; play the sound depending on which stage
                if(sStage < xLoversMB2Quest.sFemaleStages - 1)
                    call xLoversCmnPlayVoice rPlayer sStage 0
                elseif(sStage < xLoversMB2Quest.sFemaleStages)
                    call xLoversCmnPlayVoice rPlayer 4 0
                else
                    call xLoversCmnPlayVoice rPlayer 5 0
                endif

                ; reset the timer
                set fTmp to xLoversMB2Quest.fVoiceVariableMin + xLoversMB2Quest.fVoiceVariableMax
                set fTmp to fTmp * (getRandomPercent / 100) - xLoversMB2Quest.fVoiceVariableMin
                set fVoiceTimer to xLoversMB2Quest.fVoiceTimeOut + fTmp
            endif
        endif

        ; finish staged automatically
        if(fTimer < 0)
        ; add another stage counter
            player.additemNS xLoversMBStage 1

            ; show next animation
            player.pickIdle

            set sStage to player.getItemCount xLoversMBStage
            debugPrint "xLoversMB2 [%n] - now on stage %g" rPlayer sStage

            ; reset automatic timeout
            set fTimer to xLoversMB2Quest.fTimeOut - xLoversMB2Quest.fDegradeTimer * (sStage - 1)

            ; check if player is done next stage
            if(sStage >= xLoversMB2Quest.sFemaleStageEnd || sStage >= xLoversMB2Quest.sMaleStageEnd)
                ; no more stages of animations, go to exhausted state
                player.additemNS xLoversStageM 5
                set fTimer to xLoversMB2Quest.fUnconsiousTimeOut
                set sDone to 1

                debugPrint "xLoversMB2 [%n] - no more stages" rPlayer
            endif
        endif
    else ; exhausted
        ; run once when player hits exhausted state
        if(fTimer == xLoversMB2Quest.fUnconsiousTimeOut)
            player.additemNS xLoversMBStage 1
            debugPrint "xLoversMB2 [%n] - exhausting actor" rPlayer

            ; momma said knock you out
            player.modav2 fatigue -10000
        endif

        ; wait to wake up
        set fTimer to fTimer - GetSecondsPassed

        ; wakey wakey
        if(fTimer < 0) && (sDone == 1)
            debugPrint "xLoversMB2 [%n] - cleaning up now" rPlayer
            set sDone to 2
            player.dispel xLoversMB2SpellSelf
        endif
    endif

    ; have people gather around to watch
    set sNumActors to getGameSetting iNumberActorsAllowedToFollowPlayer
    if(xLoversMB2Quest.sAllowSpectators == 1 && player.getNumFollowers < sNumActors)
        ; go through actors in the same cell
        set rTmp to getFirstRef 69 1
        while(rTmp)
        ; can't fit any more actors, done
            if(player.getNumFollowers == sNumActors)
                break
            endif

        ; only allow actor to follow target if they pass checks
            set sTmp to 0

            if(xLoversMB2Quest.sUsexLoverCmnIsReady)
                let sTmp := call xLoversCmnIsready rTmp
            else
                if(rTmp.getDisabled == 0)
                    if(rTmp.getDead == 0 && rTmp.getUnconscious == 0 && rTmp.getSleeping == 0)
                        if(rTmp.isInCombat == 0 && rTmp.getKnockedState == 0 && rTmp.getIsCreature == 0)
                            if(rTmp.getLOS player && rTmp.getDistance player < xLoversMB2Quest.fSpectatorMaxDistance)
                                set sTmp to 1
                            endif
                        endif
                    endif
                endif
            endif

            ; actor is ready and not already following the player
            if(sTmp == 1 && rTmp.getIsCurrentPackage xLoversMB2FollowPlayer == 0)
                ; make it less likely to be seen at longer distances, linear relationship for now
                set fTmp to xLoversMB2Quest.fSpectatorNoticeChance * (rTmp.getDistance player / xLoversMB2Quest.fSpectatorMaxDistance)
                if(getRandomPercent < xLoversMB2Quest.fSpectatorNoticeChance - fTmp)
                ; ok, actor is set to follow player
                    rTmp.look player
                    rTmp.addScriptPackage xLoversMB2FollowPlayer
                endif
            endif

            set rTmp to getNextRef
        loop
    endif
end
;<CSEBlock>
;<CSECaretPos> 10792 </CSECaretPos>
;</CSEBlock>

Posted

fejeena pointed out that some animations are specific to a gender (like the one we're discussing here). So editing the script alone is not enough.


Why don't you try keeping an uncompleted copy of your scripts somewhere so you can make changes without recompiling?

To be honest, I don't know if recompiling is needed. Mine was a guess.

Posted

nonsense I post in the other thread. I must be possible without Idleanimation changes, the female NPCs can use Futa Body and male Animation so the Player must also be able.

 

The ini futa Setting set xLoversMB2Quest.sAllowFutanari to 1

is in the script: xLoversMB2QuestSC

 

 

 

if(sAllowFutanari)
   if ( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif") && (sBoners != 2)
    debugPrint "xLoversMB2 - Futanari is find"
    set rFemaleBoners to xLoversPkrFutanari001
   elseif( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif")
    debugPrint "xLoversMB2 - Hutanari is find"
    set rFemaleBoners to xBone1
   elseif ( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif")
    debugPrint "xLoversMB2 - Futanari is find"
    set rFemaleBoners to xLoversPkrFutanari001
   endif
  else
   set rFemaleBoners to 0
  endif

  if(player.GetIsSex Female)
   set rPlayerBoners to rFemaleBoners
  endif

  ; init array to keep track of npcs
  let aNPC := ar_construct array

  PrintToConsole "xLoversMB2 - loaded"

 

 

 

 

perhaps: Change the yellow part

if(player.GetIsSex Female)&&(sAllowFutanari==1)

 if ( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif") && (sBoners != 2)
    debugPrint "xLoversMB2 - Futanari is find"
    set rFemaleBoners to xLoversPkrFutanari001
   elseif( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif")
    debugPrint "xLoversMB2 - Hutanari is find"
    set rFemaleBoners to xBone1
   elseif ( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif")
    debugPrint "xLoversMB2 - Futanari is find"
    set rFemaleBoners to xLoversPkrFutanari001
   endif
  else
   set rFemaleBoners to 0
  endif

  if(player.GetIsSex Female)&&(sAllowFutanari==0)
   set rPlayerBoners to rFemaleBoners
  endif

---------------------------------------------------------

 

! I don't know anything about scripts ! perhaps it is bullshit.

 

 

 

 

 

Posted

the female NPCs can use Futa Body and male Animation so the Player must also be able.

Great intuition.

 

As for the code snippet, it may be bullshit or not, but the condition (AllowFutanari==0) looks to me, unless I'm misunderstanding, equivalent to say "using PC (futanari) male animation AND allowing futanari NPCs are mutually exclusive conditions" (which is not the intent). Sorry, I missed the change in the condition of the first if statement. Now I get your point.

If you ask my opinion, it should work.

Posted

First yes, you do need to recompile any time you edit the script. It is the icon default position on the tool bar.

(I am using Construction Set Extended or CS/E for short. Vanilla CS it may appear differently.)

 

 

 

post-18672-0-50659500-1426023940_thumb.jpg

 

 

 

And yeah, the male animations for NPC futa do somewhat work, some the hand/arm positions on the NPC companions I just tested were a bit off. Could be why no has pursued this further.

 

I'll take a look at the scripts too, once I get a break from work. (I just had a crap load of stuff dumped in my lap to get done by Thursday morning.)

 

 

 

 

Posted

would be nice to have separate Settings in the ini

--------------------------------------------------------------------------------------

; allow female gets boner. if you want allow , set to 1
; default: 0
set xLoversMB2Quest.sAllowFutanari to 1

; random percentage of of female NPC are Futanari. work only if you allow Futanari.
; default: 5.0
set xLoversMB2Quest.fFutanariRatio to 0.0

; random percentage of of female Player are Futanari. work only if you allow Futanari. (0=no futa. 100= use always futa Body and male animations)
; default: 0.0
set xLoversMB2Quest.fFutanariPlayerRatio to 100.0

----------------------------------------------------

So you can have only a futa Player and no futa NPCs

fFutanariPlayerRatio  must be add as new function/Setting in the script.

Posted

You need no new obse_loader.exe

Only a new desktop shortcut

The new desktop shortcut you right click and click properties and rename the desktop Icon path to .....\Oblivion\obse_loader.exe" -Editor

 

See my yellow Link below : Oblivion Construction set and ConstructionSet extender(CSE):

Posted

Actually I launch the vanilla CS using a batch file:

obse_loader.exe -editor

placed in the same folder of obse (Oblivion folder).

 

I strongly suggest graduating to CS/E at some point. Much more stable and improved functionality. It is what most serious Oblivion modders use. Not hard to set up and  install. I use version 5.xxx. Stay away from 6.xxx as some of the UI windows plain suck.

would be nice to have separate Settings in the ini

--------------------------------------------------------------------------------------

; allow female gets boner. if you want allow , set to 1

; default: 0

set xLoversMB2Quest.sAllowFutanari to 1

; random percentage of of female NPC are Futanari. work only if you allow Futanari.

; default: 5.0

set xLoversMB2Quest.fFutanariRatio to 0.0

; random percentage of of female Player are Futanari. work only if you allow Futanari. (0=no futa. 100= use always futa Body and male animations)

; default: 0.0

set xLoversMB2Quest.fFutanariPlayerRatio to 100.0

----------------------------------------------------

So you can have only a futa Player and no futa NPCs

fFutanariPlayerRatio  must be add as new function/Setting in the script.

 

Yeah... I kind of wouldn't do it that way. Your gaining PC futa by sacrificing NPC futa, nah.

 

I 'm sure a fix is something simple, I just need time to review the scripts. The code text you post above this one looks promising. Have to check the variables at the top of the script too.

Posted

The real problem with the current approach is the following. Looks like there's no middle between: 1) make all female chars futanari (100% chance, to make sure that PC is included) and 2) disable futanari. A weird solution to use a value for chance <100% would be saving the game before casting MB on self for the first time, and reload each time the result is different from the one wanted. Anyway, whatever you set or do is irrelevant, as PC will continue to use female animations.

Almost forgot, sorry for putting this so bluntly... the ordinary mesh for my character has a limp penis attached (Blender surgery).

That doesn't qualify HER (from a CS point of view) as a futanari, strictly speaking.

Posted

"1) make all female chars futanari (100% chance, to make sure that PC is included)"

? In my game my female Player have no futa lower Body with the 100% Chance Setting...still lower Body without a penis and of course the female animations.

Posted

@ QuiteTheTail - No, not quite.

 

The optimum final result is you will have separate Futanari settings for both NPC and PC. You will also retain the ini settings capablity, extending it if necessary to include a new one for female PCs. The ini file is read upon game load and any variables set, so any changes that are made to the ini get picked up each time, which is why you use them.

 

I was looking over the script you posted this morning in the other thread as I feel that is missing a section for PC futa. But RL work demandshave taken the front burner for now.

 

I feel it will possibly be an edit/fix of both the main PC scripts, the one you located and the one fejeena posted and an additional user setting in the ini.

 

And LAPF MB2 uses lowerbody as clothes, so your existing female mesh has no part in this equation.

Example:

 

 

post-18672-0-46337200-1426027317_thumb.jpg

 

 

Posted

Thanks for the clarifiation. So 100% means "100% ratio of NPCs".

About your case (referred to fejeena), I'm a little confused. Indeed there are so many settings... I understand you either have the "female attacker grow penis" disabled (unless also this setting works only for NPCs, as I'm starting to doubt) or use the "reverse rape" ini entry set to "always on". Nevermind, this is getting overly complicated to me. *head spinning*

 

Thanks varenne for taking the time to look into this, and for the clarifiation too.

I'm going to grab my copy of CSE.

Posted

Yes, that 100% only applies to the female NPCs, and on each time the Install Lust spell is cast on a female NPC. The game does not store in memory or a save game who is going to be futa or not; it is determined at the moment of casting the spell. If you cast it 100 times and it's set to 50%, then it will be 50% of the time out of that 100 casts, or very near it. (That depends entirely on the % algorithm used in OBSE.)

 

So, the ini settings in MB2 for futa must be enabled to allow both NPC and PC to experience futa animations, it's just something is broke or incomplete with the PC portion of it.

 

Your confusion is with where and which Lovers MOD produces each affect. Enable futa females actually has it's place in the main or core Lovers with PK.esp file; female attacker grow penis. You can see that in the main spell you cast for that MOD and menu. That way when Lovers animations kick in, the game knows how to display a female; futa or not. While reverse rape is specifically a RaperS construct. (Not sure if it is just WappyOne's version or prior versions too.)

 

There is at least one call to an external construct I noticed today in one of those two scripts. It may be to Lovers with PK, not sure. MB2 has been reworked a few times to fix issues, and this is one that has remained.

 

And yes, these discussion around Lovers MODs, gender and especially futa can be taxing on the ol' grey matter. Give it some time, it'll eventually begin to make sense.

 

 

Posted

would be nice to have separate Settings in the ini

--------------------------------------------------------------------------------------

; allow female gets boner. if you want allow , set to 1

; default: 0

set xLoversMB2Quest.sAllowFutanari to 1

; random percentage of of female NPC are Futanari. work only if you allow Futanari.

; default: 5.0

set xLoversMB2Quest.fFutanariRatio to 0.0

; random percentage of of female Player are Futanari. work only if you allow Futanari. (0=no futa. 100= use always futa Body and male animations)

; default: 0.0

set xLoversMB2Quest.fFutanariPlayerRatio to 100.0

----------------------------------------------------

So you can have only a futa Player and no futa NPCs

fFutanariPlayerRatio  must be add as new function/Setting in the script.

 

This is the additional .ini setting I'm using in my "experiments" (must be added to LoversMB2.ini)

 

; set female PC as futanari, has no impact on male PC

; default: 0

set xLoversMB2Quest.sPcFutanari to 0

 

Better to leave all other options untouched.

Posted

I'm not sure if that is needed as Lovers with PK already has a setting for that.

 

And just adding set xLoversMB2Quest.sPcFutanari to 0 to the LoversMB2.ini wouldn't accomplish anything. It would also need to be added to one of the scripts. (The better or more preferred way would be to just call up the setting from the Lovers with PK.esp.)

 

Feel free to continue your research and experimenting, it's a great way to learn.

Posted

Yes, I think it's definitely necessary since the only LwPK setting that could be related (Woman in attacking position grows penis) controls couples animation, here we're talking about self jerking.

Unless masturbating is contemplated in LwPK, and is considered as a self-attack :)

Of corse the modded script(s) must declare, initialize and use the new variable at some point.

 

Oh, and the default value is intended for non futa female PC.

Must be set to 1 for testing.

 

EDIT

Keeping  LoverswithPK.ini as it is and introducing a new variable in LoverMB2.ini is better in my opinion, because keeps things separated. As a player, one may prefer to use the futa lowerbody option for "binary" animations, and leave the female animation (and lowerbody mesh) for the masturbate spell. Adds more freedom of choice.

Posted

The LAPF/Lovers with PK  and the MB2 futa Settings are totally Independent.

You can set "Attacking women grow Penis" to on or off  , this has no effect on MB2 futa.

LAPF Settings works only with "normal" and rape sex  = the LAPF animations. (ani2 Folder)

MB2 Settings  works only wtih Masturbation = MB2 animation (mb Folder)

 

!!! nothing in Lovers with PK.esm or esp must be changed. Only MB2 must be chaged to enable Player futa Masturbation.

Posted

Changed lines starting at 243 in xLoversMB2SpellSelfSC as follows:

 

 

    ; set erect cock

    if(rPlayerBoners)

        if(player.GetIsSex Male) || ((player.GetIsSex Female) && (xLoversMB2Quest.sPcFutanari))

            player.equipItemNS rPlayerBoners

        endif

    endif

 

 

Compilation was successful, but still the animation picks stages from the female group, and lowerbody mesh is the default one. There must be a reference somewhere else, probably in xLoversMB2QuestSC script.

 

Posted

The LAPF/Lovers with PK  and the MB2 futa Settings are totally Independent.

You can set "Attacking women grow Penis" to on or off  , this has no effect on MB2 futa.

LAPF Settings works only with "normal" and rape sex  = the LAPF animations. (ani2 Folder)

MB2 Settings  works only wtih Masturbation = MB2 animation (mb Folder)

 

!!! nothing in Lovers with PK.esm or esp must be changed. Only MB2 must be chaged to enable Player futa Masturbation.

We are of one mind.

Posted

These are the relevant parts of xLoversMB2QuestSC I added or edited

 

 

;line 31
short    sPcFutanari ; used to check if Player character is futanari
...
;line 110
        set sPcFutanari to 0 ; default value in case LoversMB2.ini file was missing
 
;line 247
        if(player.GetIsSex Female)

            if !(sPcFutanari)

                set rPlayerBoners to rFemaleBoners

            elseif ( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif") && (sBoners != 2)

                debugPrint "xLoversMB2 - Futanari is find"

                set rFemaleBoners to xLoversPkrFutanari001

            elseif( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif")

                debugPrint "xLoversMB2 - Hutanari is find"

                set rFemaleBoners to xBone1

            elseif ( FileExists "Data\Meshes\clothes\as\NormalAnimFuta.nif")

                debugPrint "xLoversMB2 - Futanari is find"

                set rFemaleBoners to xLoversPkrFutanari001

            endif

        endif  

 

 

Something else must be changed though.

 

Posted

Another thing I've noticed, is that Setbody/LoverJoystick seem to have no effect on xLovers spells. The penis setting applied is the one from LoverswithPK.ini.

I use a custom body type integrated in the Bombshell menu. I was expecting my custom femalelowerbody_AP.nif to show up (works this way with ani2 animations), but I was wrong. movomo knows for sure.

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

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