Jump to content

Recommended Posts

Posted (edited)

Alright I'm struggling. I feel like I don't understand the concept of PlayerRef. I don't understand how I'd go about selecting the correct Actor to pipe into StorageUtils SetFloatValue function ...

 

Maybe someone smarter than me can figure this out:

 

Apropos2Actors.psc - line 228 - Event OverrideWearAndTear

Event OverrideWearAndTear(Form frm, String area, Int new_value, Bool updateAbuse, Bool updateCreatureAbuse, Bool updateDaedricAbuse)
    Debug("OverrideWearAndTear")
    Actor anActor = frm As Actor
    If !anActor
        Return
    EndIf

    If !ShouldApplyWearAndTear(anActor)
        Return
    EndIf

    String actorName = anActor.GetDisplayName()
    If Config.TraceMessagesEnabled
        Log("AproposWearAndTear.OverrideWearAndTear(" + actorName + "," + new_value + ")")
    EndIf

    Apropos2ActorAlias aproposActor = GetTrackedActorOrStartTracking(anActor)

    If aproposActor
        If area == "Vaginal"
            aproposActor.OverrideVaginalWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
            TearSimpleWnT(PlayerRef, new_value, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: OverrideWearAndTear " + PlayerRef.getactorbase().getName() + "'s Pussy. Value: " + new_value)
        ElseIf area == "Anal"
            aproposActor.OverrideAnalWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
            TearSimpleWnT(PlayerRef, new_value, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: OverrideWearAndTear " + PlayerRef.getactorbase().getName() + "'s Asshole. Value: " + new_value)
        Else
            aproposActor.OverrideOralWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
        EndIf
    EndIf
EndEvent

 

Apropos2Actors.psc - line 257 - Function DoApplyWearAndTear

Function DoApplyWearAndTear(Actor anActor, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
;Function DoApplyWearAndTear(Actor anActor, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
    Debug("DoApplyWearAndTear")

    If !ShouldApplyWearAndTear(anActor)
        Return
    EndIf   

    String actorName = anActor.GetDisplayName()
    If Config.TraceMessagesEnabled
        Debug("DoApplyWearAndTear(" + actorName + "," + damageClass + "," + isRapeOrAggressive + ")")
    EndIf

    Bool isDaedricCreatureOrDremora = IsDremoraOrDaedricCreature(damageClass)

    Apropos2ActorAlias aproposActor = GetTrackedActorOrStartTracking(anActor)
    If aproposActor
        Int amount = GetWearTearDamage(damageClass, isRapeOrAggressive)
        If area == "Vaginal"
            aproposActor.IncreaseVaginalWearAndTear(amount)
            aproposActor.IncreaseVaginalAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)
            TearSimpleWnT(PlayerRef, amount, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: DoApplyWearAndTear " + PlayerRef.getactorbase().getName() + "'s Pussy. Value: " + amount)
        ElseIf area == "Anal"
            aproposActor.IncreaseAnalWearAndTear(amount)
            aproposActor.IncreaseAnalAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)
            TearSimpleWnT(PlayerRef, amount, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: DoApplyWearAndTear " + PlayerRef.getactorbase().getName() + "'s Asshole. Value: " + amount)
        Else
            aproposActor.IncreaseOralWearAndTear(amount)
            aproposActor.IncreaseOralAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)         
        EndIf
    EndIf    
EndFunction

 

Apropos2Actors.psc - appendix to eof - Function TearSimpleWnT and Float Function ScaleRange

;Simple Wear & Tear by darknotfear Compability

Function TearSimpleWnT(Actor anActor, Int fAproposTearValue, String fArea)
    If fArea == "Vaginal"
        Float metric = scaleRange(fAproposTearValue)
        If metric >= 9
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 1.0) ;I think the Range here is 0-1+ for Simple Wear&Tear, where
        ElseIf metric < 9 && metric >= 7                                              ;prolapse occurs at 0.9 and higher values are kinda useless
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.6)
        ElseIf metric < 7 && metric >= 5
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.4)
        ElseIf metric < 5 && metric >= 3
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.2)
        Else
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.0)
        EndIf
        Debug.Trace("PLZWORK: TearSimpleWnT " + anActor.getactorbase().getName() + "'s Pussy. Metric is " + metric)
    ElseIf fArea == "Anal"
        Float metric = scaleRange(fAproposTearValue)
        If metric >= 9
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 1.0)
        ElseIf metric < 9 && metric >= 7
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.6)
        ElseIf metric < 7 && metric >= 5
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.4)
        ElseIf metric < 5 && metric >= 3
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.2)
        Else
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.0)
        EndIf
        Debug.Trace("PLZWORK: TearSimpleWnT " + anActor.getactorbase().getName() + "'s Asshole. Metric is " + metric)
    EndIf
EndFunction

Float Function ScaleRange(Float x)
    Int a = 0
    Int b = 10      ;This is the used metric from above
    Int min = 0
    Int max = 2000  ;I think max here is 2000, found that in some script. Maybe hardcoding this is bad - Idk.

    Float fScaledVal = ((b - a) * (x - min)) / (max - min) + a
    return fScaledVal
EndFunction

 

I'd if this is helpful for anyone ...

 

Edited by myDNS
Posted (edited)

Getting instant CTD when loading into the game. I'm using latest version of 3BA along with latest CBPC, which is setup to control the physics instead of HDT for performance reasons (HDT controlled body tanks fps to unplayable levels), plus The Pure skin. I have required HDT version but it's there mostly for clothing. CTD occurs with or without prolapsed uteus installed, which seems to be the only component that needs HDT. I suspect there's a mesh conflict somewhere.

 

I'm on SE 1.5.97, SKSE 2.0.20, SL 1.63 and never updated to AE so basically the same version as you. All the other requirements you listed are met as well. 

Edited by belegost
Posted
1 hour ago, belegost said:

Getting instant CTD when loading into the game. I'm using latest version of 3BA along with latest CBPC, which is setup to control the physics instead of HDT for performance reasons (HDT controlled body tanks fps to unplayable levels), plus The Pure skin. I have required HDT version but it's there mostly for clothing. CTD occurs with or without prolapsed uteus installed, which seems to be the only component that needs HDT. I suspect there's a mesh conflict somewhere.

 

I'm on SE 1.5.97, SKSE 2.0.20, SL 1.63 and never updated to AE so basically the same version as you. All the other requirements you listed are met as well. 

only the mcm and configs are loaded upon loading the game, there is no actual function before the mod is enabled manually.

did you have papyrus log for that?

Posted (edited)
41 minutes ago, darknotfear said:

only the mcm and configs are loaded upon loading the game, there is no actual function before the mod is enabled manually.

did you have papyrus log for that?

 

The log doesn't say anything in regards to this mod. In my experience instant CTD without any papyrus output usually means mesh conflict and I suspect that skin replacer I'm using might be the source. I will examine it later in xEdit to see if there are any conflicts with my current load order.

Edited by belegost
Posted (edited)

Ok, xEdit doesn't list any conflicts, in fact I had reinstalled SWT again and it started with no problems this time. However I have made some changes since last time I tested it though, namely I have removed Dirt&Blood&Cum and all its requirements, as the cum effects from it would not be registered by SLSF. I assume this might have been the source of the conflict, but that's just educated guess at this point as I have no intention of reinstalling it and confirming right now.

 

Question: since SWT can be started without Prolapsed Uterus, is it really necessary? I have tinkered a bit with debug options but the uterus doesn't seem to want to show up once wear reaches and exceeds the threshold. Also I am not really a big fan of having it, I presume it can be turned off somehow which would make it a soft requirement?

Edited by belegost
Posted
57 minutes ago, belegost said:

Ok, xEdit doesn't list any conflicts, in fact I had reinstalled SWT again and it started with no problems this time. However I have made some changes since last time I tested it though, namely I have removed Dirt&Blood&Cum and all its requirements, as the cum effects from it would not be registered by SLSF. I assume this might have been the source of the conflict, but that's just educated guess at this point as I have no intention of reinstalling it and confirming right now.

 

Question: since SWT can be started without Prolapsed Uterus, is it really necessary? I have tinkered a bit with debug options but the uterus doesn't seem to want to show up once wear reaches and exceeds the threshold. Also I am not really a big fan of having it, I presume it can be turned off somehow which would make it a soft requirement?

Yes actually its a soft requirement, you can turn it off by setting prolapseAt below zero.

Posted
On 2/20/2022 at 11:36 PM, myDNS said:

Alright I'm struggling. I feel like I don't understand the concept of PlayerRef. I don't understand how I'd go about selecting the correct Actor to pipe into StorageUtils SetFloatValue function ...

 

Maybe someone smarter than me can figure this out:

 

Apropos2Actors.psc - line 228 - Event OverrideWearAndTear

Event OverrideWearAndTear(Form frm, String area, Int new_value, Bool updateAbuse, Bool updateCreatureAbuse, Bool updateDaedricAbuse)
    Debug("OverrideWearAndTear")
    Actor anActor = frm As Actor
    If !anActor
        Return
    EndIf

    If !ShouldApplyWearAndTear(anActor)
        Return
    EndIf

    String actorName = anActor.GetDisplayName()
    If Config.TraceMessagesEnabled
        Log("AproposWearAndTear.OverrideWearAndTear(" + actorName + "," + new_value + ")")
    EndIf

    Apropos2ActorAlias aproposActor = GetTrackedActorOrStartTracking(anActor)

    If aproposActor
        If area == "Vaginal"
            aproposActor.OverrideVaginalWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
            TearSimpleWnT(PlayerRef, new_value, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: OverrideWearAndTear " + PlayerRef.getactorbase().getName() + "'s Pussy. Value: " + new_value)
        ElseIf area == "Anal"
            aproposActor.OverrideAnalWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
            TearSimpleWnT(PlayerRef, new_value, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: OverrideWearAndTear " + PlayerRef.getactorbase().getName() + "'s Asshole. Value: " + new_value)
        Else
            aproposActor.OverrideOralWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
        EndIf
    EndIf
EndEvent

 

Apropos2Actors.psc - line 257 - Function DoApplyWearAndTear

Function DoApplyWearAndTear(Actor anActor, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
;Function DoApplyWearAndTear(Actor anActor, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
    Debug("DoApplyWearAndTear")

    If !ShouldApplyWearAndTear(anActor)
        Return
    EndIf   

    String actorName = anActor.GetDisplayName()
    If Config.TraceMessagesEnabled
        Debug("DoApplyWearAndTear(" + actorName + "," + damageClass + "," + isRapeOrAggressive + ")")
    EndIf

    Bool isDaedricCreatureOrDremora = IsDremoraOrDaedricCreature(damageClass)

    Apropos2ActorAlias aproposActor = GetTrackedActorOrStartTracking(anActor)
    If aproposActor
        Int amount = GetWearTearDamage(damageClass, isRapeOrAggressive)
        If area == "Vaginal"
            aproposActor.IncreaseVaginalWearAndTear(amount)
            aproposActor.IncreaseVaginalAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)
            TearSimpleWnT(PlayerRef, amount, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: DoApplyWearAndTear " + PlayerRef.getactorbase().getName() + "'s Pussy. Value: " + amount)
        ElseIf area == "Anal"
            aproposActor.IncreaseAnalWearAndTear(amount)
            aproposActor.IncreaseAnalAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)
            TearSimpleWnT(PlayerRef, amount, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: DoApplyWearAndTear " + PlayerRef.getactorbase().getName() + "'s Asshole. Value: " + amount)
        Else
            aproposActor.IncreaseOralWearAndTear(amount)
            aproposActor.IncreaseOralAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)         
        EndIf
    EndIf    
EndFunction

 

Apropos2Actors.psc - appendix to eof - Function TearSimpleWnT and Float Function ScaleRange

;Simple Wear & Tear by darknotfear Compability

Function TearSimpleWnT(Actor anActor, Int fAproposTearValue, String fArea)
    If fArea == "Vaginal"
        Float metric = scaleRange(fAproposTearValue)
        If metric >= 9
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 1.0) ;I think the Range here is 0-1+ for Simple Wear&Tear, where
        ElseIf metric < 9 && metric >= 7                                              ;prolapse occurs at 0.9 and higher values are kinda useless
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.6)
        ElseIf metric < 7 && metric >= 5
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.4)
        ElseIf metric < 5 && metric >= 3
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.2)
        Else
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.0)
        EndIf
        Debug.Trace("PLZWORK: TearSimpleWnT " + anActor.getactorbase().getName() + "'s Pussy. Metric is " + metric)
    ElseIf fArea == "Anal"
        Float metric = scaleRange(fAproposTearValue)
        If metric >= 9
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 1.0)
        ElseIf metric < 9 && metric >= 7
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.6)
        ElseIf metric < 7 && metric >= 5
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.4)
        ElseIf metric < 5 && metric >= 3
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.2)
        Else
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.0)
        EndIf
        Debug.Trace("PLZWORK: TearSimpleWnT " + anActor.getactorbase().getName() + "'s Asshole. Metric is " + metric)
    EndIf
EndFunction

Float Function ScaleRange(Float x)
    Int a = 0
    Int b = 10      ;This is the used metric from above
    Int min = 0
    Int max = 2000  ;I think max here is 2000, found that in some script. Maybe hardcoding this is bad - Idk.

    Float fScaledVal = ((b - a) * (x - min)) / (max - min) + a
    return fScaledVal
EndFunction

 

I'd if this is helpful for anyone ...

 

IMO It's easier to integrate events from Apropos
Apropos itself uses it for applying slavetats

 

    RegisterForModEvent("APRWT_UpdateEffectsAndTats", "UpdateEffectsAndTats")
    RegisterForModEvent("APRWT_ApplyWearAndTear", "ApplyWearAndTear")
    RegisterForModEvent("APRWT_OverrideWearAndTear", "OverrideWearAndTear")
 
Event ApplyWearAndTear(Form frm, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
    Actor anActor = frm As Actor
    If !anActor
        Return
    EndIf
 
    DoApplyWearAndTear(anActor, area, damageClass, isRapeOrAggressive, isCreature)
EndEvent
 
 
Posted

the mod is really cool, some things which would be good:

 

Apropos integration,

different sliders for wear and tear , depending on the circumstances, partners etc.

compatibility with Ostim as well?

Posted (edited)

Also this could be another mod as well, aroused nips got nipple morphs, using vaginal sliders in your mod you could also make an arousal mod similar to aroused nips (instead hooking into wear and tear, hook into arousal)- that would be awesome.

 

-Aroused lips- 

Edited by Midnightbug
Posted (edited)
6 hours ago, Midnightbug said:

the mod is really cool, some things which would be good:

 

Apropos integration,

different sliders for wear and tear , depending on the circumstances, partners etc.

compatibility with Ostim as well?

What are the circumstances? And why is the partner type matters?

Edited by darknotfear
Posted
53 minutes ago, darknotfear said:

What are the circumstances? And why is the partner type matters?

Circumstances like the size of the partner, race etc. could have  separate sliders 

Posted
21 hours ago, crajjjj said:

IMO It's easier to integrate events from Apropos
Apropos itself uses it for applying slavetats

 

    RegisterForModEvent("APRWT_UpdateEffectsAndTats", "UpdateEffectsAndTats")
    RegisterForModEvent("APRWT_ApplyWearAndTear", "ApplyWearAndTear")
    RegisterForModEvent("APRWT_OverrideWearAndTear", "OverrideWearAndTear")
 
Event ApplyWearAndTear(Form frm, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
    Actor anActor = frm As Actor
    If !anActor
        Return
    EndIf
 
    DoApplyWearAndTear(anActor, area, damageClass, isRapeOrAggressive, isCreature)
EndEvent
 
 

 

The concept does sound a lot, a lot easier, but I have no experience in Skyrim modding.

 

I'd have to blind-eyed deep dive into that stuff, but I'm also a subpar coder. :^)

 

I'll take a look at ModEvents, thanks for the tip!

Posted
On 2/21/2022 at 6:36 AM, myDNS said:

Alright I'm struggling. I feel like I don't understand the concept of PlayerRef. I don't understand how I'd go about selecting the correct Actor to pipe into StorageUtils SetFloatValue function ...

 

Maybe someone smarter than me can figure this out:

 

Apropos2Actors.psc - line 228 - Event OverrideWearAndTear

Event OverrideWearAndTear(Form frm, String area, Int new_value, Bool updateAbuse, Bool updateCreatureAbuse, Bool updateDaedricAbuse)
    Debug("OverrideWearAndTear")
    Actor anActor = frm As Actor
    If !anActor
        Return
    EndIf

    If !ShouldApplyWearAndTear(anActor)
        Return
    EndIf

    String actorName = anActor.GetDisplayName()
    If Config.TraceMessagesEnabled
        Log("AproposWearAndTear.OverrideWearAndTear(" + actorName + "," + new_value + ")")
    EndIf

    Apropos2ActorAlias aproposActor = GetTrackedActorOrStartTracking(anActor)

    If aproposActor
        If area == "Vaginal"
            aproposActor.OverrideVaginalWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
            TearSimpleWnT(PlayerRef, new_value, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: OverrideWearAndTear " + PlayerRef.getactorbase().getName() + "'s Pussy. Value: " + new_value)
        ElseIf area == "Anal"
            aproposActor.OverrideAnalWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
            TearSimpleWnT(PlayerRef, new_value, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: OverrideWearAndTear " + PlayerRef.getactorbase().getName() + "'s Asshole. Value: " + new_value)
        Else
            aproposActor.OverrideOralWearTearState(new_value, updateAbuse=updateAbuse, updateCreatureAbuse=updateCreatureAbuse, updateDaedricAbuse=updateDaedricAbuse)
        EndIf
    EndIf
EndEvent

 

Apropos2Actors.psc - line 257 - Function DoApplyWearAndTear

Function DoApplyWearAndTear(Actor anActor, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
;Function DoApplyWearAndTear(Actor anActor, String area, string damageClass, Bool isRapeOrAggressive, Bool isCreature)
    Debug("DoApplyWearAndTear")

    If !ShouldApplyWearAndTear(anActor)
        Return
    EndIf   

    String actorName = anActor.GetDisplayName()
    If Config.TraceMessagesEnabled
        Debug("DoApplyWearAndTear(" + actorName + "," + damageClass + "," + isRapeOrAggressive + ")")
    EndIf

    Bool isDaedricCreatureOrDremora = IsDremoraOrDaedricCreature(damageClass)

    Apropos2ActorAlias aproposActor = GetTrackedActorOrStartTracking(anActor)
    If aproposActor
        Int amount = GetWearTearDamage(damageClass, isRapeOrAggressive)
        If area == "Vaginal"
            aproposActor.IncreaseVaginalWearAndTear(amount)
            aproposActor.IncreaseVaginalAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)
            TearSimpleWnT(PlayerRef, amount, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: DoApplyWearAndTear " + PlayerRef.getactorbase().getName() + "'s Pussy. Value: " + amount)
        ElseIf area == "Anal"
            aproposActor.IncreaseAnalWearAndTear(amount)
            aproposActor.IncreaseAnalAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)
            TearSimpleWnT(PlayerRef, amount, area) ;Simple Wear & Tear Bridge
            Debug.Trace("PLZWORK: DoApplyWearAndTear " + PlayerRef.getactorbase().getName() + "'s Asshole. Value: " + amount)
        Else
            aproposActor.IncreaseOralWearAndTear(amount)
            aproposActor.IncreaseOralAbuseWearAndTear(amount, isRapeOrAggressive, isDaedricCreatureOrDremora, isCreature)         
        EndIf
    EndIf    
EndFunction

 

Apropos2Actors.psc - appendix to eof - Function TearSimpleWnT and Float Function ScaleRange

;Simple Wear & Tear by darknotfear Compability

Function TearSimpleWnT(Actor anActor, Int fAproposTearValue, String fArea)
    If fArea == "Vaginal"
        Float metric = scaleRange(fAproposTearValue)
        If metric >= 9
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 1.0) ;I think the Range here is 0-1+ for Simple Wear&Tear, where
        ElseIf metric < 9 && metric >= 7                                              ;prolapse occurs at 0.9 and higher values are kinda useless
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.6)
        ElseIf metric < 7 && metric >= 5
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.4)
        ElseIf metric < 5 && metric >= 3
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.2)
        Else
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_VaginalWearing", 0.0)
        EndIf
        Debug.Trace("PLZWORK: TearSimpleWnT " + anActor.getactorbase().getName() + "'s Pussy. Metric is " + metric)
    ElseIf fArea == "Anal"
        Float metric = scaleRange(fAproposTearValue)
        If metric >= 9
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 1.0)
        ElseIf metric < 9 && metric >= 7
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.6)
        ElseIf metric < 7 && metric >= 5
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.4)
        ElseIf metric < 5 && metric >= 3
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.2)
        Else
            StorageUtil.SetFloatValue(anActor, "SimpleWnT_ACTOR_AnalWearing", 0.0)
        EndIf
        Debug.Trace("PLZWORK: TearSimpleWnT " + anActor.getactorbase().getName() + "'s Asshole. Metric is " + metric)
    EndIf
EndFunction

Float Function ScaleRange(Float x)
    Int a = 0
    Int b = 10      ;This is the used metric from above
    Int min = 0
    Int max = 2000  ;I think max here is 2000, found that in some script. Maybe hardcoding this is bad - Idk.

    Float fScaledVal = ((b - a) * (x - min)) / (max - min) + a
    return fScaledVal
EndFunction

 

I'd if this is helpful for anyone ...

 

I 've looked briefly through the source code of Apropos 2, and as far as I see there is no easy way to make it work gracefully since I have no idea how to access its internal W&T values without touching the code itself.

 

But, but if you want to do it "dirty" anyway, maybe you can try this.

There are 8 functions in apropos that handles the wearing and hearing internally: (Apropos2ActorAlias.psc)

  Function IncreaseVaginalWearAndTear(Int amountApplied)
  Function IncreaseVaginalAbuseWearAndTear(Int amountApplied, Bool isRapeOrAggressive, Bool isDaedricCreatureOrDremora, Bool isCreature)
  Function ApplyReducedVaginalWearAndTearAmount(Int amountApplied)
  Function ApplyReducedVaginalAbuseWearAndTearAmount(Int amountApplied)
  Function IncreaseAnalWearAndTear(Int amountApplied)
  Function IncreaseAnalAbuseWearAndTear(Int amountApplied, Bool isRapeOrAggressive, Bool isDaedricCreatureOrDremora, Bool isCreature)
  Function ApplyReducedAnalWearAndTearAmount(Int amountApplied)
  Function ApplyReducedAnalAbuseWearAndTearAmount(Int amountApplied)
  

(I don't know what "abuse" functions does because I havn't tried apropos wear & tear before, so you need to figure it out yourself or keep it synchrolized with the normal one.)

You may update actor's w&t values in these function using StorageUtil (after metric conversion, ofc).

Within these functions you can simply access all the context variables you need for that conversion.

Posted (edited)
3 hours ago, darknotfear said:

I 've looked briefly through the source code of Apropos 2, and as far as I see there is no easy way to make it work gracefully since I have no idea how to access its internal W&T values without touching the code itself.

 

But, but if you want to do it "dirty" anyway, maybe you can try this.

There are 8 functions in apropos that handles the wearing and hearing internally: (Apropos2ActorAlias.psc)

  Function IncreaseVaginalWearAndTear(Int amountApplied)
  Function IncreaseVaginalAbuseWearAndTear(Int amountApplied, Bool isRapeOrAggressive, Bool isDaedricCreatureOrDremora, Bool isCreature)
  Function ApplyReducedVaginalWearAndTearAmount(Int amountApplied)
  Function ApplyReducedVaginalAbuseWearAndTearAmount(Int amountApplied)
  Function IncreaseAnalWearAndTear(Int amountApplied)
  Function IncreaseAnalAbuseWearAndTear(Int amountApplied, Bool isRapeOrAggressive, Bool isDaedricCreatureOrDremora, Bool isCreature)
  Function ApplyReducedAnalWearAndTearAmount(Int amountApplied)
  Function ApplyReducedAnalAbuseWearAndTearAmount(Int amountApplied)
  

(I don't know what "abuse" functions does because I havn't tried apropos wear & tear before, so you need to figure it out yourself or keep it synchrolized with the normal one.)

You may update actor's w&t values in these function using StorageUtil (after metric conversion, ofc).

Within these functions you can simply access all the context variables you need for that conversion.


Attached is the script to get 0-10 general abuse for an actor. To get the quest: 
 

;Apropos2
Quest ActorsQuest
 
if !ActorsQuest && isAprReady()
        ActorsQuest = Game.GetFormFromFile(0x02902C, "Apropos2.esp") as Quest  
endif
Bool Function isAprReady() Global
    Return isDependencyReady("Apropos2.esp")
EndFunction
Bool Function isDependencyReady(String modname) Global
    Return Game.GetModbyName(modname) != 255
EndFunction


Can be wired to events mentioned above to trigger the call

PS. All code that works with deps should be isolated in separate files and called only if the dep is available (handling soft dependencies) 

CondiExp_Interface_Appr2.psc

Edited by crajjjj
Posted
31 minutes ago, crajjjj said:


Attached is the script to get 0-10 general abuse for an actor. To get the quest: 
 

;Apropos2
Quest ActorsQuest
 
if !ActorsQuest && isAprReady()
        ActorsQuest = Game.GetFormFromFile(0x02902C, "Apropos2.esp") as Quest  
endif
Bool Function isAprReady() Global
    Return isDependencyReady("Apropos2.esp")
EndFunction
Bool Function isDependencyReady(String modname) Global
    Return Game.GetModbyName(modname) != 255
EndFunction

Can be wired to events mentioned above to trigger the call

CondiExp_Interface_Appr2.psc 1.06 kB · 1 download

Thanks for the hint, I'll try it later.

Posted
7 hours ago, chevalierx said:

+Anal prolapse feature

not working

 and no bodyslide files for Anal prolapse

 

only for vaginal

 

You need to install the rosebutt to make it works, and yes there is no bodyslide for that.

Posted
11 minutes ago, Tamayori said:

Not sure why but I'm just not getting the MCM to pop up. even tried console command too

Do you have the papyrus log for that?

Make sure you have all the requirements installed.

Posted
3 hours ago, darknotfear said:

Do you have the papyrus log for that?

Make sure you have all the requirements installed.

 

So i'm still very much a beginner when it comes to modding and turns out i didn't have it enabled. Not really crashing since I'm running the game fine. I've install all the requirements except for apropos.

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...