Jump to content
  • Create an account

    Want more? Register now and get full access to our community!

redrabbit

Question about schlong appearing with clothes or armor equipped?

Recommended Posts

Hello everyone! Basically I just want armor or clothes to stay on while using sexlab animations but I want the schlong to show up during the animations, so I guess the schlong would basically be going 'through' the armor or clothes. I believe theres a similar option with SoS where you can mark armor as revealing but I was just wondering if it's possible with SAM at all.

Thanks for any help.

Share this post


Link to post
Share on other sites

I assumed SoS and SAM used the same tech. So SAM does not do this? How do SAM users get their groove on then? Manual gear swaps I guess

So I looked at the SoS scripts. This is a decent chunk of what SoS is doing. It would have to be adapted to SAM if it doesn't already do this also

Spoiler

bool Function IsSkeletonSOSCompatible(Actor akActor)
    return NetImmerse.HasNode(akActor, sNiNodes[0], 0)
EndFunction

SOS_AddonQuest_Script Function GetActiveAddon(Actor akActor)
    int i = SOS_Data.CountAddons()
    While i > 0
        i -= 1
        SOS_AddonQuest_Script addon = SOS_Data.GetAddon(i)
        If akActor.IsInFaction(SOS_Data.GetFaction(addon))
            Return addon
        EndIf
    EndWhile
    Return None
EndFunction

Int Function SetSchlongType(Form newAddon, Actor akActor)
    {remove old addon, add new factions and genitals}
    
    Int iRank = 1
    Form oldAddon = GetActiveAddon(akActor)
    
    If oldAddon
        Faction kOldFaction = SOS_Data.GetFaction(oldAddon)
        If kOldFaction
            iRank = akActor.GetFactionRank(kOldFaction)
            akActor.RemoveFromFaction(kOldFaction)
            SOS_Data.RemoveSchlonged(oldAddon, akActor)
        EndIf
    EndIf
    
    Faction kNewFaction = SOS_Data.GetFaction(newAddon)
    
    Debug.Trace("SOS SetSchlongType: Changing " + akActor.GetLeveledActorBase().GetName() + "'s schlong to "+ kNewFaction.GetName())

    akActor.SetFactionRank(kNewFaction, iRank)
    akActor.SetFactionRank(SOS_SchlongifiedFaction, iRank)

    if(akActor.WornHasKeyword(SOS_Genitals) || !akActor.WornHasKeyword(SOS_Underwear))
        Armor bodyArmor = akActor.GetWornForm(0x00000004) as Armor
        If !bodyArmor || SOS_SKSE.IsRevealing(bodyArmor)
            Armor kNewArmor = SOS_Data.GetGenitalArmor(newAddon)
            akActor.EquipItem(kNewArmor, false, true)
            if(akActor.HasMagicEffect(SOS_ErectionMagicEffect))
                Debug.SendAnimationEvent(akActor, "SOSFastErect")
            endIf
        EndIf
        If oldAddon
            Armor kOldArmor = SOS_Data.GetGenitalArmor(oldAddon)
            akActor.RemoveItem(kOldArmor, 999, true)
        EndIf
    endIf
    
    Return iRank

EndFunction

Function SetSchlongSize(Form addon, Actor akActor, int size)
    {update factions and bone scales}
    
    Faction addonFaction = SOS_Data.GetFaction(addon)
    akActor.SetFactionRank(SOS_SchlongifiedFaction, size)
    akActor.SetFactionRank(addonFaction, size)
    
    ScaleSchlongBones(addon, akActor, size)
EndFunction

Function ScaleSchlongBones(Form addon, Actor akActor, int aiFactionRank)
    If SOSRaceMenu && akActor == PlayerRef
        Debug.Trace("SOS RaceMenu plugin found. Skipping ScaleSchlongBones")
        Return
    EndIf
    
    SOS_SKSE.ScaleSchlongBones(addon, akActor, aiFactionRank, config.fGlobalSchlongSizeBoostFactor)
EndFunction

Float Function Rescale(Float scale, Float factor)
    Return 1 + (scale - 1) * factor
EndFunction

;----------SCHLONGIFICATION----------

Function RegisterNewSchlongifiedActor(Actor akActor, Form addon = None)
    {Maintains knowledge about all actors that ever got a schlong}
    
    if !addon
        addon = GetActiveAddon(akActor)
    endif
    
    ; only register non-temporary actors permanently
    if(akActor.GetActorBase() == akActor.GetLeveledActorBase())
        SOS_Data.AddSchlonged(addon, akActor)
    endif
EndFunction

int Function DetermineSchlongSize(Form addon, Actor akActor)
    {Determines a random schlong size for the given actor, considering the configured distribution for that race}
    
    ; size is fixed for player and merchants
    If akActor == PlayerRef
        Return 1
    ElseIf akActor.GetLeveledActorBase().HasKeyword(SOS_Merchant)
        Return 20
    EndIf
    
    Race actorRace = akActor.GetRace()
    int raceIndex = SOS_Data.FindCompatibleRace(addon, actorRace)
    If raceIndex == -1
        Return 1
    EndIf

    int sizeDistribution = SOS_Data.GetRaceSize(addon, raceIndex)
    ;Debug.Trace("SOS DetermineSchlongSize: deciding schlong size for " + akActor.GetLeveledActorBase().GetName() + " [" + actorRace.GetName() + "] -> size distribution=" + sizeDistribution)
    
    int min = 1
    int max = config.iMaxSchlongSize
    
    If sizeDistribution != 0 && Utility.RandomInt(0, 100) < Math.Abs(sizeDistribution)
        int sizeOffset = sizeDistribution * max / 100
        ;Debug.Trace("SOS DetermineSchlongSize sizeOffset " + sizeOffset)
        if sizeOffset < 0
            max = Math.Floor(max + sizeOffset) + 1
        Else
            min = sizeOffset
        Endif
    Endif

    int size = Utility.RandomInt(min, max)
    ;Debug.Trace("SOS DetermineSchlongSize: generated value between " + min + " | " + max + ": " + size + " for " + akActor.GetLeveledActorBase().GetName() + " [" + actorRace.GetName() + "]")
    return size
EndFunction

Form Function DetermineSchlongType(actor akActor)
    {Determines a random schlong type for the given actor, respecting the gender, enabled and probability settings for that race}
    
    Return SOS_SKSE.DetermineSchlongType(akActor)
    
EndFunction

 

Edited by neutraldude

Share this post


Link to post
Share on other sites
1 hour ago, neutraldude said:

I assumed SoS and SAM used the same tech. So SAM does not do this? How do SAM users get their groove on then? Manual gear swaps I guess

So I looked at the SoS scripts. This is a decent chunk of what SoS is doing. It would have to be adapted to SAM if it doesn't already do this also

  Reveal hidden contents

bool Function IsSkeletonSOSCompatible(Actor akActor)
    return NetImmerse.HasNode(akActor, sNiNodes[0], 0)
EndFunction

SOS_AddonQuest_Script Function GetActiveAddon(Actor akActor)
    int i = SOS_Data.CountAddons()
    While i > 0
        i -= 1
        SOS_AddonQuest_Script addon = SOS_Data.GetAddon(i)
        If akActor.IsInFaction(SOS_Data.GetFaction(addon))
            Return addon
        EndIf
    EndWhile
    Return None
EndFunction

Int Function SetSchlongType(Form newAddon, Actor akActor)
    {remove old addon, add new factions and genitals}
    
    Int iRank = 1
    Form oldAddon = GetActiveAddon(akActor)
    
    If oldAddon
        Faction kOldFaction = SOS_Data.GetFaction(oldAddon)
        If kOldFaction
            iRank = akActor.GetFactionRank(kOldFaction)
            akActor.RemoveFromFaction(kOldFaction)
            SOS_Data.RemoveSchlonged(oldAddon, akActor)
        EndIf
    EndIf
    
    Faction kNewFaction = SOS_Data.GetFaction(newAddon)
    
    Debug.Trace("SOS SetSchlongType: Changing " + akActor.GetLeveledActorBase().GetName() + "'s schlong to "+ kNewFaction.GetName())

    akActor.SetFactionRank(kNewFaction, iRank)
    akActor.SetFactionRank(SOS_SchlongifiedFaction, iRank)

    if(akActor.WornHasKeyword(SOS_Genitals) || !akActor.WornHasKeyword(SOS_Underwear))
        Armor bodyArmor = akActor.GetWornForm(0x00000004) as Armor
        If !bodyArmor || SOS_SKSE.IsRevealing(bodyArmor)
            Armor kNewArmor = SOS_Data.GetGenitalArmor(newAddon)
            akActor.EquipItem(kNewArmor, false, true)
            if(akActor.HasMagicEffect(SOS_ErectionMagicEffect))
                Debug.SendAnimationEvent(akActor, "SOSFastErect")
            endIf
        EndIf
        If oldAddon
            Armor kOldArmor = SOS_Data.GetGenitalArmor(oldAddon)
            akActor.RemoveItem(kOldArmor, 999, true)
        EndIf
    endIf
    
    Return iRank

EndFunction

Function SetSchlongSize(Form addon, Actor akActor, int size)
    {update factions and bone scales}
    
    Faction addonFaction = SOS_Data.GetFaction(addon)
    akActor.SetFactionRank(SOS_SchlongifiedFaction, size)
    akActor.SetFactionRank(addonFaction, size)
    
    ScaleSchlongBones(addon, akActor, size)
EndFunction

Function ScaleSchlongBones(Form addon, Actor akActor, int aiFactionRank)
    If SOSRaceMenu && akActor == PlayerRef
        Debug.Trace("SOS RaceMenu plugin found. Skipping ScaleSchlongBones")
        Return
    EndIf
    
    SOS_SKSE.ScaleSchlongBones(addon, akActor, aiFactionRank, config.fGlobalSchlongSizeBoostFactor)
EndFunction

Float Function Rescale(Float scale, Float factor)
    Return 1 + (scale - 1) * factor
EndFunction

;----------SCHLONGIFICATION----------

Function RegisterNewSchlongifiedActor(Actor akActor, Form addon = None)
    {Maintains knowledge about all actors that ever got a schlong}
    
    if !addon
        addon = GetActiveAddon(akActor)
    endif
    
    ; only register non-temporary actors permanently
    if(akActor.GetActorBase() == akActor.GetLeveledActorBase())
        SOS_Data.AddSchlonged(addon, akActor)
    endif
EndFunction

int Function DetermineSchlongSize(Form addon, Actor akActor)
    {Determines a random schlong size for the given actor, considering the configured distribution for that race}
    
    ; size is fixed for player and merchants
    If akActor == PlayerRef
        Return 1
    ElseIf akActor.GetLeveledActorBase().HasKeyword(SOS_Merchant)
        Return 20
    EndIf
    
    Race actorRace = akActor.GetRace()
    int raceIndex = SOS_Data.FindCompatibleRace(addon, actorRace)
    If raceIndex == -1
        Return 1
    EndIf

    int sizeDistribution = SOS_Data.GetRaceSize(addon, raceIndex)
    ;Debug.Trace("SOS DetermineSchlongSize: deciding schlong size for " + akActor.GetLeveledActorBase().GetName() + " [" + actorRace.GetName() + "] -> size distribution=" + sizeDistribution)
    
    int min = 1
    int max = config.iMaxSchlongSize
    
    If sizeDistribution != 0 && Utility.RandomInt(0, 100) < Math.Abs(sizeDistribution)
        int sizeOffset = sizeDistribution * max / 100
        ;Debug.Trace("SOS DetermineSchlongSize sizeOffset " + sizeOffset)
        if sizeOffset < 0
            max = Math.Floor(max + sizeOffset) + 1
        Else
            min = sizeOffset
        Endif
    Endif

    int size = Utility.RandomInt(min, max)
    ;Debug.Trace("SOS DetermineSchlongSize: generated value between " + min + " | " + max + ": " + size + " for " + akActor.GetLeveledActorBase().GetName() + " [" + actorRace.GetName() + "]")
    return size
EndFunction

Form Function DetermineSchlongType(actor akActor)
    {Determines a random schlong type for the given actor, respecting the gender, enabled and probability settings for that race}
    
    Return SOS_SKSE.DetermineSchlongType(akActor)
    
EndFunction

 

SoS and SAM handle revealing armors very differently. With SAM, everything is pretty much specified in the armor nif. SAM users can get along just fine with sexlab but the problem with this specific situation is that this person wants the dick to be hidden under the clothes outside of animations, and clipping through the clothes during animations... I'm not sure if there's any easy way to accomplish this with SAM. It would be easy to get either one or the other to happen but not both

Edited by air
  • Like 1

Share this post


Link to post
Share on other sites

Guess that explains a few things I ran into with both of those

There are some SKSE armor functions that would probably do it. I haven't done too much with those particular ones yet

Edited by neutraldude

Share this post


Link to post
Share on other sites

What I've done to get around this is duplicate armors and add SAMRevealing to the duplicates. Then whenever I'm about to enter a sex scene just switch to the revealing armor and set them to not be removed in the sexlab MCM.

Share this post


Link to post
Share on other sites
On 11/8/2018 at 10:01 AM, skyrimjob said:

What I've done to get around this is duplicate armors and add SAMRevealing to the duplicates. Then whenever I'm about to enter a sex scene just switch to the revealing armor and set them to not be removed in the sexlab MCM.

Interesting, although I don't know how to add SAMRevealing to armor, is it in the CK? I haven't seen the option on the SAM MCM menu. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×