Jump to content

How to exclude SOS_Revealing keyword from affecting males in SoS


Recommended Posts

Posted

I am using SoS with a female pubic hair addon.  While some of my female outfits are full body ones and should conceal the pubs, others are only a top, designed to be used with skirts, trousers, etc.  Those should show the pubs when the waist is not equipped. 

 

Normally the SOS_Revealing keyword would solve this issue, however ALL of my male outfits are full outfits, so where a particular armor may only be a shirt in the female version, on the male it is an entire armor.  So if I use the keyword on the outfit, the female version is fine, but the male NPCs have a boner sticking out the front of their armor.  If I don't use the keyword, the male version is fine, but the female version removes the pubs even though they should be showing.

 

I am trying to completely exclude males from being affected by the SOS_Revealing keyword, and have tried a lot of different things in the scripts, but can't seem to figure it out.  If anyone can point me in the right direction, or point me to a mod where this has already been done, I would appreciate it.  

Posted
2 hours ago, nagothm said:

others are only a top, designed to be used with skirts, trousers, etc

If it is a matter of some dress, it would suffice to apply the pubic hairs in OS . This should fix the problem

Posted
16 hours ago, ?????? 1627 said:

If it is a matter of some dress, it would suffice to apply the pubic hairs in OS . This should fix the problem

I would much prefer a scripting fix if it is possible.  Adding it directly to the body opens up another can of worms in getting pubs to cover properly when wearing UW or trousers, etc as well as the huge amount of extra work in adding it to the thousands of outfits in my build.

Posted (edited)

It looks like the magic is done in SOS_RevealingArmorMagicEffect_Script.psc, so what I'd try first is adding a gender check somewhere in here. Like this for instance (based on Schlongs_of_Skyrim_SE - v1.1.4).

If SOS_Data.FindRevealingArmor(bodyArmor) != -1
    SOS_Data.RemoveRevealingArmor(bodyArmor)
    SOS_Data.AddConcealingArmor(bodyArmor)
    if (!bodyArmor.HasKeyword(SOS_Revealing))
        bodyArmor.AddSlotToMask(0x00400000)
    endIf
    akTarget.RemoveItem(genitals, 999, true)
    Debug.trace("SOS_RevealingArmorMagicEffect: armor set to concealing")
    SOS_Quest.Notify(bodyArmor.GetName() + " set to be a Concealing Armor") ; todo translate
elseif SOS_Data.FindConcealingArmor(bodyArmor) != -1 || Math.LogicalAnd(bodyArmor.GetSlotMask(), bodyArmor.kSlotMask52)
    If (akTarget.GetSex() == 1)
        SOS_Data.RemoveConcealingArmor(bodyArmor)
        SOS_Data.AddRevealingArmor(bodyArmor)
        bodyArmor.RemoveSlotFromMask(0x00400000)
        akTarget.EquipItem(genitals, false, true)
        SOS_Quest.UpdateNinodes(akTarget)
        Debug.trace("SOS_RevealingArmorMagicEffect: armor set to revealing")
        SOS_Quest.Notify(bodyArmor.GetName() + " set to be a Revealing Armor") ; todo translate
    EndIf
endIf

 

Edit: Some of those functions look suspiciously like they're completely bound to armor forms. Could be that SOS would have to be rewritten to be more per-actor rather than per-armor.

Edited by traison
Posted
1 hour ago, nagothm said:

extra work in adding it to the thousands of outfits in my build.

Obviously, the solution is applicable on two to three outfits, certainly not on a similar amount of money, it would certainly be a huge amount of work

Posted (edited)
9 hours ago, traison said:

Edit: Some of those functions look suspiciously like they're completely bound to armor forms. Could be that SOS would have to be rewritten to be more per-actor rather than per-armor.

 

SoS MCM itself states that the keyword affects all instances of a given outfit, so there is no gender distinction. As you suggested, it would probably need a complete rewrite of the whole mod.

Edited by belegost
Posted
5 hours ago, belegost said:

 

SoS MCM itself states that the keyword affects all instances of a given outfit, so there is no gender distinction. As you suggested, it would probably need a complete rewrite of the whole mod.

 

Yeah but it still does something to each actor to add or remove a dong. My hope was that if this can be isolated and wrapped in a gender check, you can get away without rebuilding the entire thing. However, looking at the code above, it does more than just add an armor item - it seems to modify the equipment slots of the armors themselves, among other things.

Posted (edited)
On 2/4/2023 at 8:57 AM, traison said:

It looks like the magic is done in SOS_RevealingArmorMagicEffect_Script.psc, so what I'd try first is adding a gender check somewhere in here. Like this for instance (based on Schlongs_of_Skyrim_SE - v1.1.4).

If SOS_Data.FindRevealingArmor(bodyArmor) != -1
    SOS_Data.RemoveRevealingArmor(bodyArmor)
    SOS_Data.AddConcealingArmor(bodyArmor)
    if (!bodyArmor.HasKeyword(SOS_Revealing))
        bodyArmor.AddSlotToMask(0x00400000)
    endIf
    akTarget.RemoveItem(genitals, 999, true)
    Debug.trace("SOS_RevealingArmorMagicEffect: armor set to concealing")
    SOS_Quest.Notify(bodyArmor.GetName() + " set to be a Concealing Armor") ; todo translate
elseif SOS_Data.FindConcealingArmor(bodyArmor) != -1 || Math.LogicalAnd(bodyArmor.GetSlotMask(), bodyArmor.kSlotMask52)
    If (akTarget.GetSex() == 1)
        SOS_Data.RemoveConcealingArmor(bodyArmor)
        SOS_Data.AddRevealingArmor(bodyArmor)
        bodyArmor.RemoveSlotFromMask(0x00400000)
        akTarget.EquipItem(genitals, false, true)
        SOS_Quest.UpdateNinodes(akTarget)
        Debug.trace("SOS_RevealingArmorMagicEffect: armor set to revealing")
        SOS_Quest.Notify(bodyArmor.GetName() + " set to be a Revealing Armor") ; todo translate
    EndIf
endIf

 

Edit: Some of those functions look suspiciously like they're completely bound to armor forms. Could be that SOS would have to be rewritten to be more per-actor rather than per-armor.

 

  I tried this out and it came out the same as my other experiments on this script did, I am using the DLL free version by erstam.  But the logic is the same.  My original attempts were variations of this

 

    Elseif StorageUtil.FormListHas(None, "SOS_ConcealingArmors", bodyArmor) || Math.LogicalAnd(bodyArmor.GetSlotMask(), 0x00400000)
        StorageUtil.FormListRemove(None, "SOS_ConcealingArmors", bodyArmor)
        StorageUtil.FormListAdd(None, "SOS_RevealingArmors", bodyArmor, allowDuplicate = false)
        if (akTarget.GetSex() == 1)
            bodyArmor.RemoveSlotFromMask(0x00400000)
        endIf
        akTarget.EquipItem(genitals, false, true)
        SOS_Quest.UpdateNiNodes(akTarget)
        Debug.Trace("SOS_RevealingArmorMagicEffect: Armor set to revealing.")
        SOS_Quest.Notify(bodyArmor.GetName() + " set to be a Revealing Armor") ; todo translate
    EndIf

 

So I implemented the code example that you provided instead

 

    Elseif StorageUtil.FormListHas(None, "SOS_ConcealingArmors", bodyArmor) || Math.LogicalAnd(bodyArmor.GetSlotMask(), 0x00400000)
        If (akTarget.GetSex() == 1)
            StorageUtil.FormListRemove(None, "SOS_ConcealingArmors", bodyArmor)
            StorageUtil.FormListAdd(None, "SOS_RevealingArmors", bodyArmor, allowDuplicate = false)
            bodyArmor.RemoveSlotFromMask(0x00400000)
            akTarget.EquipItem(genitals, false, true)
            SOS_Quest.UpdateNiNodes(akTarget)
            Debug.Trace("SOS_RevealingArmorMagicEffect: Armor set to revealing.")
            SOS_Quest.Notify(bodyArmor.GetName() + " set to be a Revealing Armor") ; todo translate
        EndIf
    EndIf

 

Again same result. SOS_Revealing keyword = displaying schlong/pub on male and female / No keyword = no display on either.  I don't understand why it just seems to ignore the conditions completely, as if it is not even taking the code here into account.  Any other possible suggestions?

Edited by nagothm

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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