Jump to content

Notice Me Senpai - A Notice Board Addon


Recommended Posts

I might just be a little in love with my take on Silda the Unseen. She has a lot of personality for as few lines as I actually added.

 

1778674380_ScreenShot487copy.jpg.b31db327ad073c7a9076dd032746759a.jpg  ScreenShot491.jpg.64b29c99c305c2e76ec205c76eb9c19f.jpg

 

I made it so Silda and Edda start out with an Irrational Love of 10 (it won't drop below that if you dismiss and rehire them), and broken (1) so you only have to train them a little.., to account for their unique recruitment as slaves... but it still doesn't feel quite how I want it so I am kicking around the idea of adding the ability to promote one slave to slave consort (head girl/boy) who will be more like a vanilla follower but with the basic slave stuff and nicer dialogue. 

 

Edit: After looking into it I decided not to do this... it's too much work for too little benefit. I really gotta stop adding features... lol.

Edited by Tentacus
Link to comment

The bug causing the the last Follower's stats to be passed on was dumber than I thought. It has to do with how you get an actor reference for an alias, and how that property sticks around even if the alias is cleared. The way I had to fix it is to declare "Flunky (the property) = None" in the script. It didn't have anything to do with what I originally thought it did. Basing a script around a timer like I do here is fraught with this kinda shit.

Link to comment

God... I just realized that the victim version of the dialogue that lets you remove unwanted weapons from the prisoner (sometimes they pick them up or have weird inventory situations so the initial sweep doesn't work) has been set up to only work when there has been exactly 1 rape this entire time... *sigh*

Link to comment

I just learned that you can only have two active followers with this mod (No doubt you explained that but I missed it) Thankfully my third follower (Brina) teleported to her home and was waiting for me when I arrived. So on the 'rescue citizen" quest , make sure you have only one follower in tow, even if you don't plan on enslaving the citizen.

Link to comment
4 hours ago, Parky said:

I just learned that you can only have two active followers with this mod (No doubt you explained that but I missed it) Thankfully my third follower (Brina) teleported to her home and was waiting for me when I arrived. So on the 'rescue citizen" quest , make sure you have only one follower in tow, even if you don't plan on enslaving the citizen.

 

When fully trained you can assign them to be house slaves which gives you 4 more slots mainly this lets you have 4 that stay where you want them to, but they can also follow you if you want a larger party. I'll probably expand the number of slots for house slaves at some point.

 

The 2 follower limitation is due to the way this mod was initially designed to just be a quick side project to help me work through burnout after 3+ years of Hardship development. I based almost everything on global variables which is awesome when dealing with one NPC but not multiples... Eventually I added the camp follower out of seeing a real personal need for having two. This DOUBLED the globals, and also the outfit management slot tracking, which was also a nightmare. This is why the house slaves have no outfit management and won't retain their outfits when you fast travel or leave the area unless you have another mod to handle it like Dudestia's Ring of Fashion designer.

 

Dealing with stripping and clothing management in Skyrim is an absolute nightmare, wheras for the most part in Fallout 4 it just works. Its debatable if the ease of dialogue creation in Skyrim balances that out or not.

 

For you non modders have a look at this... This is the source code for the main script. This is the largest of 79 scripts that make NMS work. Even not understanding Papyrus this may give you some idea of the complexity involved in tracking all the stats and clothing management! ? 

 

Spoiler

 

Scriptname _T_NoticeMeQuestScript extends Quest  

Actor Property PlayerRef Auto
Actor Property BirnaRef Auto
Actor Property EddaRef Auto
Actor Property SildaRef Auto
Actor Property HaelgaRef Auto
Actor Property OlavaTheFeebleRef Auto
Armor Property zbfCuffsRope01 Auto
Armor Property zbfGagCloth Auto
Faction Property _T_HistoryFaction Auto ; 1 No B rape, No P sex, 2 No B rape, P sex, 3 B rape, No P sex, 4  B rape, P sex, 5 No B rape, P Rape once, 6 No B rape, P rape multiple, 7 B rape, P rape once, 8 B rape, P rape multiple, 9 Reward offered
Faction Property _T_MartyrFaction Auto ; 1 Martyr, 2 "saved" by martyr
Faction Property _T_NMS_CuckFaction Auto
Faction Property _T_NMS_SlaveFaction Auto ; 1 Broken, 2 Depraved, 3 Beggar, 4 Depraved Beggar, 5 Cuck, 6 Depraved Cuck
Faction Property _T_NMS_WhoreFaction Auto ; 1 Monogomous, 2 game, 3 Untested whore, 4 New whore, 5 Unhappy whore, 6 Happy whore, 7 New slave whore, 8 slave whore, 9 broken slave whore.
Faction Property _T_RatFaction Auto ;1 Uncaught, 2 friend, 3 lover, 4 victim, 5 Let free
Faction Property _T_IncestFaction Auto
Faction Property CrimeFactionCidhnaMine Auto
Faction Property CrimeFactionEastmarch Auto
Faction Property CrimeFactionFalkreath Auto
Faction Property CrimeFactionGreybeard Auto
Faction Property CrimeFactionHaafingar Auto
Faction Property CrimeFactionHjaalmarch Auto
Faction Property CrimeFactionImperial Auto
Faction Property CrimeFactionKhajiitCaravans Auto
Faction Property CrimeFactionNull Auto
Faction Property CrimeFactionOrcs Auto
Faction Property CrimeFactionPale Auto
Faction Property CrimeFactionReach Auto 
Faction Property CrimeFactionRift Auto
Faction Property CrimeFactionSons Auto
Faction Property CrimeFactionThievesGuild Auto
Faction Property CrimeFactionWhiterun Auto
Faction Property CrimeFactionWinterhold Auto
Faction Property CurrentFollowerFaction Auto
Formlist property _T_WaterskinList Auto
Formlist property manny_up_list_AvoidNPC Auto
GlobalVariable Property _T_AfterRape Auto
GlobalVariable Property _T_BeatingCounter Auto
GlobalVariable Property _T_BeatingRecentCounter Auto
GlobalVariable Property _T_CFIsNude Auto
GlobalVariable Property _T_CFNakedOutfit Auto
GlobalVariable Property _T_CFRestrained Auto
GlobalVariable Property _T_Fisto Auto
GlobalVariable Property _T_HitCounter Auto
GlobalVariable Property _T_iNeed Auto
GlobalVariable Property _T_JustMartyred Auto
GlobalVariable Property _T_JustOzarked Auto
GlobalVariable Property _T_NakedOutfit Auto
GlobalVariable Property _T_NMS_MasterToggle Auto
GlobalVariable Property _T_PattyHurst Auto ; Stockholm for the camp follower.
GlobalVariable Property _T_PrisonerBanditRaped Auto
GlobalVariable Property _T_PrisonerDialogue Auto ;0 first meet, 1 un player raped, 2 player raped
GlobalVariable Property _T_PrisonerGayness Auto ;0 straight (boo!), 1 Gay, 2 Bi
GlobalVariable Property _T_PrisonerHunger Auto
GlobalVariable Property _T_PrisonerIsBitch Auto ;S/He is a real pain in the ass.
GlobalVariable Property _T_PrisonerIsNude Auto
GlobalVariable Property _T_PrisonerIsSloot Auto ;S/He puts out.
GlobalVariable Property _T_PrisonerPlayerRaped Auto
GlobalVariable Property _T_PrisonerRejected Auto
GlobalVariable Property _T_PrisonerThirst Auto
GlobalVariable Property _T_RefractoryPeriod Auto
GlobalVariable Property _T_Rescue Auto
GlobalVariable Property _T_Restrained Auto
GlobalVariable Property _T_Stockholm Auto
GlobalVariable Property _T_Sunhelm Auto
GlobalVariable Property _T_Tutorial Auto
GlobalVariable Property _T_Whoreing Auto
Keyword Property _T_HoboForce Auto
Keyword Property ClothingNecklace Auto
Keyword Property ClothingRing Auto
Keyword Property VendorItemWeapon Auto
Idle property idlepickup_ground Auto
Idle property idlesilentbow Auto
MiscObject Property Gold001 Auto
Outfit Property _T_NekkidOutfit Auto
ReferenceAlias Property CampFollower Auto
ReferenceAlias Property Cuck Auto
ReferenceAlias Property ExPrisoner Auto
ReferenceAlias Property Family Auto
ReferenceAlias Property HouseSlave01 Auto
ReferenceAlias Property HouseSlave02 Auto
ReferenceAlias Property HouseSlave03 Auto
ReferenceAlias Property HouseSlave04 Auto
ReferenceAlias Property LastPrisoner Auto
ReferenceAlias Property PainInTheAss Auto
ReferenceAlias Property Prisoner Auto
Quest Property manny_up_rp Auto
SexLabFramework Property SexLab auto
Sound Property ITMClothingDown Auto
Sound Property ITMClothingUp Auto
Sound Property UIQuestComplete Auto
Armor ACuff
Armor Amulet
Armor Apron
Armor Blindfold
Armor CFACuff
Armor CFAmulet
Armor CFApron
Armor CFBlindfold
Armor CFCollar
Armor CFGag
Armor CFHair
Armor CFHood
Armor CFLongHair
Armor CFPArms
Armor CFPBoots
Armor CFPClothes
Armor CFPGloves
Armor CFPHead
Armor CFStocking1
Armor CFStocking2
Armor CFStocking3
Armor CFWCuff
Armor Collar
Armor Gag
Armor Hair
Armor Hood
Armor LongHair
Armor PArms
Armor PBoots
Armor PClothes
Armor PGloves
Armor PHead
Armor Stocking1
Armor Stocking2
Armor Stocking3
Armor WCuff
Outfit CFDefaultOutfit
Outfit DefaultOutfit
Outfit TempDefaultOutfit

Event OnInit()
   Debug.notification("NOTICE ME SENPAI SETUP STARTED")
   Registerforsingleupdate(10.0)
   RegisterForSingleUpdateGameTime(6.0)
EndEvent
    
Event OnUpdate()
   Actor Damsel = Prisoner.GetReference() as Actor
   Actor Flunky = ExPrisoner.GetReference() as Actor
   Utility.Wait(0.1)
   If manny_up_rp.GetStage() == 20 && _T_Rescue.GetValue() == 0 ;Set toggle condition
      Form Piece = Damsel.GetEquippedWeapon() as Form
      Utility.Wait(0.1)
      PainInTheAss.Clear()
      Utility.Wait(0.1)
      LastPrisoner.Clear()
      If Flunky != None
         If Flunky.GetFactionRank(_T_HistoryFaction) > 4 && Flunky.GetFactionRank(_T_HistoryFaction) < 9 
            DismissButFollow(Flunky)
         Else
            Dismiss(Flunky)
         Endif   
         Flunky = None
      Endif 
      Utility.Wait(0.1)
      If Piece != None     
         Damsel.UnEquipItem(Piece)
         Damsel.RemoveItem(Piece)
      Endif   
      Damsel.RemoveItem(VendorItemWeapon, -1)
      Damsel.RemoveItem(Gold001, -1)
      Damsel.RemoveItem(ClothingNecklace, -1)
      Damsel.RemoveItem(ClothingRing, -1)
      Utility.Wait(0.1)
      _T_AfterRape.SetValue(0)
      _T_BeatingCounter.SetValue(0)
      _T_BeatingRecentCounter.SetValue(0)
      _T_Fisto.SetValue(0)
      _T_HitCounter.SetValue(0)
      _T_PrisonerBanditRaped.SetValue(0)
      _T_PrisonerDialogue.SetValue(0)
      _T_PrisonerGayness.SetValue(0)
      _T_PrisonerHunger.SetValue(0)
      _T_PrisonerIsBitch.SetValue(0)
      _T_PrisonerIsNude.SetValue(0)
      _T_PrisonerIsSloot.SetValue(0)
      _T_PrisonerPlayerRaped.SetValue(0)
      _T_PrisonerRejected.SetValue(0)
      _T_PrisonerThirst.SetValue(0)
      _T_RefractoryPeriod.SetValue(0)
      _T_Rescue.SetValue(1)
      _T_Restrained.SetValue(0)
      _T_Stockholm.SetValue(0)
      _T_Whoreing.SetValue(0)
      Utility.Wait(0.1)
      PainInTheAss.ForceRefIfEmpty(Damsel)
      Utility.Wait(0.1)
      LastPrisoner.ForceRefIfEmpty(Damsel)
      Utility.Wait(0.1)
      manny_up_list_AvoidNPC.AddForm(Damsel)
      Debug.Notification("NMS Rescue NPC stats Started")
   Elseif manny_up_rp.GetStage() == 20 && _T_Rescue.GetValue() == 1 ;Write down history with player
      If Damsel.IsInFaction(_T_HistoryFaction) == false
         Damsel.AddToFaction(_T_HistoryFaction)
         Damsel.SetFactionRank(_T_HistoryFaction, 1)
         Damsel.SetRelationshipRank(PlayerRef, 2)
         PlayerRef.SetRelationshipRank(Damsel, 2)
      Else  
         If _T_PrisonerBanditRaped.GetValue() > 0 && _T_PrisonerPlayerRaped.GetValue() > 0 ; Bandits and player raped them
            If _T_PrisonerPlayerRaped.GetValue() > 1
               If Damsel.GetFactionRank(_T_HistoryFaction) != 8 ;Multiple player rapes
                  Damsel.SetFactionRank(_T_HistoryFaction, 8)
                  Damsel.SetRelationshipRank(PlayerRef, -2)
                  PlayerRef.SetRelationshipRank(Damsel, -2) 
                  ZipItSnitch(Damsel)                 
               Endif   
            Else   
               If Damsel.GetFactionRank(_T_HistoryFaction) != 7 ;single player rape
                  Damsel.SetFactionRank(_T_HistoryFaction, 7)
                  Damsel.SetRelationshipRank(PlayerRef, -2)
                  PlayerRef.SetRelationshipRank(Damsel, -2)     
                  ZipItSnitch(Damsel)              
               Endif   
            Endif 
         Elseif _T_PrisonerBanditRaped.GetValue() == 0 && _T_PrisonerPlayerRaped.GetValue() > 0 ; Only the player raped them
            If _T_PrisonerPlayerRaped.GetValue() > 1
               If Damsel.GetFactionRank(_T_HistoryFaction) != 6 ;Multiple player rapes
                  Damsel.SetFactionRank(_T_HistoryFaction, 6)
                  Damsel.SetRelationshipRank(PlayerRef, -2)
                  PlayerRef.SetRelationshipRank(Damsel, -2)  
                  ZipItSnitch(Damsel)                
               Endif   
            Else   
               If Damsel.GetFactionRank(_T_HistoryFaction) != 5 ;single player rape
                  Damsel.SetFactionRank(_T_HistoryFaction, 5)
                  Damsel.SetRelationshipRank(PlayerRef, -2)
                  PlayerRef.SetRelationshipRank(Damsel, -2)  
                  ZipItSnitch(Damsel)                
               Endif   
            Endif   
         Elseif _T_PrisonerIsSloot.GetValue() > 1
            If _T_PrisonerBanditRaped.GetValue() > 0
               If Damsel.GetFactionRank(_T_HistoryFaction) != 4 ;Raped by bandits and had consensual sex with player
                  Damsel.SetFactionRank(_T_HistoryFaction, 4)
                  Damsel.SetRelationshipRank(PlayerRef, 4)
                  PlayerRef.SetRelationshipRank(Damsel, 4)                  
               Endif   
            Else   
               If Damsel.GetFactionRank(_T_HistoryFaction) != 2 ;had consensual sex with player
                  Damsel.SetFactionRank(_T_HistoryFaction, 2)
                  Damsel.SetRelationshipRank(PlayerRef, 4)
                  PlayerRef.SetRelationshipRank(Damsel, 4)
               Endif   
            Endif   
         Else ;No player sex or rape
            If _T_PrisonerIsSloot.GetValue() == 1 ;Offered reward Not cashed in.
               If Damsel.GetFactionRank(_T_HistoryFaction) != 9
                  Damsel.SetFactionRank(_T_HistoryFaction, 9)
                  Damsel.SetRelationshipRank(PlayerRef, 4)
                  PlayerRef.SetRelationshipRank(Damsel, 4)
               Endif    
            Elseif _T_PrisonerBanditRaped.GetValue() > 0
               If Damsel.GetFactionRank(_T_HistoryFaction) != 3
                  Damsel.SetFactionRank(_T_HistoryFaction, 3)
                  Damsel.SetRelationshipRank(PlayerRef, 2)
                  PlayerRef.SetRelationshipRank(Damsel, 2)
               Endif                              
            Endif
         Endif    
      Endif 
   Elseif manny_up_rp.GetStage() != 20 && _T_Rescue.GetValue() == 1
      _T_AfterRape.SetValue(0)
      _T_BeatingCounter.SetValue(0)
      _T_BeatingRecentCounter.SetValue(0)
      _T_Fisto.SetValue(0)
      _T_HitCounter.SetValue(0)
      _T_PrisonerBanditRaped.SetValue(0)
      _T_PrisonerDialogue.SetValue(0)
      _T_PrisonerGayness.SetValue(0)
      _T_PrisonerHunger.SetValue(0)
      _T_PrisonerIsBitch.SetValue(0)
      _T_PrisonerIsNude.SetValue(0)
      _T_PrisonerIsSloot.SetValue(0)
      _T_PrisonerPlayerRaped.SetValue(0)
      _T_PrisonerRejected.SetValue(0)
      _T_PrisonerThirst.SetValue(0)
      _T_RefractoryPeriod.SetValue(0)
      _T_Rescue.SetValue(0)    
      _T_Restrained.SetValue(0)
      _T_Stockholm.SetValue(0)
      _T_Whoreing.SetValue(0)
      Utility.Wait(0.1)
      PainInTheAss.Clear()
      Debug.Notification("NMS Rescue NPC stats Cleared")         
   Elseif manny_up_rp.GetStage() != 20 && _T_Rescue.GetValue() == 0  
;Remove bondage hunger and thirst      
      If _T_Restrained.GetValue() < 3 && _T_PrisonerHunger.GetValue() > 0
         _T_PrisonerHunger.SetValue(0)
      Elseif _T_Restrained.GetValue() < 3 && _T_PrisonerThirst.GetValue() > 0
         _T_PrisonerThirst.SetValue(0)
;Make sure faction is set for late rape         
      Elseif _T_PrisonerBanditRaped.GetValue() > 0 && Damsel.GetFactionRank(_T_HistoryFaction) != 5 && Damsel.GetFactionRank(_T_HistoryFaction) != 6 && Damsel.GetFactionRank(_T_HistoryFaction) != 7 && Damsel.GetFactionRank(_T_HistoryFaction) != 8
         Damsel.SetFactionRank(_T_HistoryFaction, 6)
      Endif   
   Endif 
   Utility.Wait(0.1)  
   If _T_RefractoryPeriod.GetValue() > 0
      _T_RefractoryPeriod.Mod(1)
      Utility.Wait(0.1)
      If _T_RefractoryPeriod.GetValue() > 35
         _T_RefractoryPeriod.SetValue(0)
         _T_AfterRape.SetValue(0)
      Endif
   Endif   
   Utility.Wait(0.1)
   LastAliasCheck()
   Utility.Wait(0.1)
   If Flunky != None 
      UpdateWhore(Flunky)
      Utility.Wait(0.1)      
      BreakTheWill(Flunky)   
   Elseif Damsel != None
      UpdateWhore(Damsel)
      Utility.Wait(0.1)
      BreakTheWill(Damsel)
   Endif   
   Utility.Wait(0.1)
   PeppermintPatty()
   Utility.Wait(0.1)
   Registerforsingleupdate(4.0)
EndEvent

Event OnUpdateGameTime()
    Actor Damsel
    Int Counter
    If _T_Rescue.GetValue() == 1
       Damsel = Prisoner.GetReference() as Actor
       _T_PrisonerHunger.Mod(1)
       _T_PrisonerThirst.Mod(1)    
    Else
       Damsel = ExPrisoner.GetReference() as Actor
       If _T_Restrained.GetValue() > 2 ;Follower is tied up
          _T_PrisonerHunger.Mod(1)
          _T_PrisonerThirst.Mod(1)
       Endif                  
    Endif
    Utility.Wait(0.1)
    String SlaveName = Damsel.GetBaseObject().GetName()
    ;Reduce irrational affection over time
    If Damsel.GetFactionRank(_T_NMS_SlaveFaction) != 2 && _T_Stockholm.GetValue() < 15
       If Counter == 1
          Counter = 2
       Elseif Counter == 2
          Counter = 3
       Elseif Counter == 3
          Counter = 1
          If _T_Stockholm.GetValue() > 0
             _T_Stockholm.Mod(-1)    
             Debug.Notification("<font size='20'>"+Slavename+" Irrational Affection -1</font>") 
          Endif
       Else      
          Counter = 1
       Endif   
    Endif 
    Utility.Wait(0.1)  
    _T_BeatingRecentCounter.SetValue(0)
    Utility.Wait(0.1)
    RegisterForSingleUpdateGameTime(6.0)
EndEvent

Function BreakTheWill(actor Damsel)
    If Damsel.GetFactionRank(_T_HistoryFaction) > 4 && Damsel.GetFactionRank(_T_HistoryFaction) < 9
       Int Sex = Damsel.GetLeveledActorBase().GetSex()
       String SlaveName = Damsel.GetBaseObject().GetName()  
       ;Woman... be my slave
       If Damsel.GetFactionRank(_T_NMS_SlaveFaction) == 2 
          If Damsel.GetRelationshipRank(PlayerRef) < 4
             Damsel.SetRelationshipRank(PlayerRef, 4)
             PlayerRef.SetRelationshipRank(Damsel, 4)
          Endif  
       Else
          ;The torture... never stops.   
          If Damsel.IsInFaction(_T_NMS_SlaveFaction) == False && _T_BeatingCounter.GetValue() > 9
             Utility.Wait(0.1)
             Damsel.SetFactionRank(_T_NMS_SlaveFaction, 1)
             Utility.Wait(0.1)
             _T_PrisonerPlayerRaped.SetValue(3)
             Utility.Wait(0.1)
             UIQuestComplete.Play(PlayerRef)
             Debug.Notification("<font size='20'>You broke their will! "+Slavename+"'s training stats will no longer go below 5.</font>")
          ;Dueling banjos   
          Elseif Damsel.IsInFaction(_T_NMS_SlaveFaction) == False && Damsel.IsInFaction(_T_IncestFaction) == True 
             Utility.Wait(0.1)
             Damsel.SetFactionRank(_T_NMS_SlaveFaction, 1)
             Utility.Wait(0.1)
             _T_PrisonerPlayerRaped.SetValue(3)
             Utility.Wait(0.1)
             UIQuestComplete.Play(PlayerRef)
             Debug.Notification("<font size='20'>You broke their will! "+Slavename+"'s training stats will no longer go below 5.</font>")             
          ;You made me love you... I didn't want to do it, I didn't want to do it.    
          ElseIf _T_Stockholm.GetValue() > 19      
             Damsel.SetFactionRank(_T_NMS_SlaveFaction, 2)
             Utility.Wait(0.1)
             Damsel.SetRelationshipRank(PlayerRef, 4)
             PlayerRef.SetRelationshipRank(Damsel, 4)
             Utility.Wait(0.2)
             UIQuestComplete.Play(PlayerRef)
             Debug.Notification("<font size='20'>"+Slavename+" is now your fully broken and devoted sex slave.</font>")
          ;I would die for you... feel pain for you... I would crawl on hands and knees until you see...
          Elseif _T_Stockholm.GetValue() > 14
             ;Keeping Irrational affection above 14 makes the NPC super friendly, especially useful for PLANCK VR, as they will no longer flinch from your touch.
             If Damsel.GetRelationshipRank(PlayerRef) < 4
                Damsel.SetRelationshipRank(PlayerRef, 4)
                PlayerRef.SetRelationshipRank(Damsel, 4)
                Debug.Notification("<font size='20'>"+Slavename+"'s mad love has made them obsessively devoted to you.</font>") 
             Endif   
          Elseif _T_Stockholm.GetValue() < 15 
             ;She's a super freak... she's super freaky
             If Damsel == OlavaTheFeebleRef && Damsel.GetFactionRank(_T_HistoryFaction) > 4 && Damsel.GetFactionRank(_T_HistoryFaction) < 9
                _T_StockHolm.SetValue(15)    
             ;Looooove... Love is strange. 
             Elseif _T_Stockholm.GetValue() > 9
                ;Keeping Irrational affection above 9 makes the NPC greets friendly, especially useful for PLANCK VR, as they will no longer flinch from your touch.
                If Damsel.GetRelationshipRank(PlayerRef) < 2
                   Damsel.SetRelationshipRank(PlayerRef, 2)
                   PlayerRef.SetRelationshipRank(Damsel, 2)
                   Debug.Notification("<font size='20'>Irrational love has made "+Slavename+" more polite.</font>")   
                Elseif Damsel.GetRelationshipRank(PlayerRef) > 3
                   Damsel.SetRelationshipRank(PlayerRef, 2)
                   PlayerRef.SetRelationshipRank(Damsel, 2)
                   Debug.Notification("<font size='20'>"+Slavename+" is no longer obsessed with you.</font>")  
                Endif
             Else
               If _T_PrisonerPlayerRaped.GetValue() == 0 && Damsel.GetFactionRank(_T_HistoryFaction) != 5 && Damsel.GetFactionRank(_T_HistoryFaction) != 6 && Damsel.GetFactionRank(_T_HistoryFaction) != 7 && Damsel.GetFactionRank(_T_HistoryFaction) != 8
                  ; Do nothing 
               Else
                  If Damsel == HaelgaRef && Damsel.IsInFaction(_T_NMS_SlaveFaction) == False
                     Damsel.SetFactionRank(_T_NMS_SlaveFaction, 2)
                     Utility.Wait(0.1)
                     Damsel.SetRelationshipRank(PlayerRef, 4)
                     PlayerRef.SetRelationshipRank(Damsel, 4)
                     Utility.Wait(0.1)
                     _T_PrisonerDialogue.SetValue(2)
                     _T_NMS_MasterToggle.Mod(1)
                     Utility.Wait(0.1)
                     UIQuestComplete.Play(PlayerRef)
                     Debug.Notification("<font size='20'>Haelga has become your willing and devoted love slave.</font>") 
                  Endif    
               Endif
             Endif
          Endif             
          ;Shattered                 
          If Damsel.GetFactionRank(_T_NMS_SlaveFaction) == 1 
             If _T_BeatingCounter.GetValue() < 5
                _T_BeatingCounter.SetValue(5)
             Endif 
             If Damsel == EddaRef || Damsel == SildaRef
                If _T_Stockholm.GetValue() < 10
                   _T_Stockholm.SetValue(10)
                Endif                  
             Else
                If _T_Stockholm.GetValue() < 5
                   _T_Stockholm.SetValue(5)
                Endif         
             Endif
             Utility.Wait(0.1)
             ;Keeping discipline above 7 makes the NPC greets friendly, especially useful for PLANCK VR, as they will no longer flinch from your touch.
             If _T_BeatingCounter.GetValue() > 6 && Damsel.GetRelationshipRank(PlayerRef) < 2
                Damsel.SetRelationshipRank(PlayerRef, 2)
                PlayerRef.SetRelationshipRank(Damsel, 2)
                Debug.Notification("<font size='20'>Discipline has taught "+Slavename+" to be more polite.</font>")
             Elseif _T_BeatingCounter.GetValue() < 7 && Damsel.GetRelationshipRank(PlayerRef) > 1 && _T_Stockholm.GetValue() < 10
                Damsel.SetRelationshipRank(PlayerRef, -2)
                PlayerRef.SetRelationshipRank(Damsel, -2)
                Debug.Notification("<font size='20'>"+Slavename+" loves you less and is less polite.</font>")   
             Endif  
             ;constant rape of the broken slave has led to them becoming sexually depraved as a survival mechanism. Greets will always remain friendly.
             If _T_PrisonerPlayerRaped.GetValue() > 9
                Damsel.SetFactionRank(_T_NMS_SlaveFaction, 2)
                Utility.Wait(0.1)
                Damsel.SetRelationshipRank(PlayerRef, 4)
                PlayerRef.SetRelationshipRank(Damsel, 4)
                Utility.Wait(0.2)
                UIQuestComplete.Play(PlayerRef)
                Debug.Notification("<font size='20'>"+Slavename+" is now your fully broken and devoted sex slave.</font>")  
             Endif 
          ElseIf _T_Stockholm.GetValue() < 10 && Damsel.GetRelationshipRank(PlayerRef) > 1 
             Damsel.SetRelationshipRank(PlayerRef, -2)
             PlayerRef.SetRelationshipRank(Damsel, -2)
             Debug.Notification("<font size='20'>"+Slavename+" Lost discipline and is less polite.</font>")       
          Endif
       Endif
       If _T_PrisonerIsSloot.GetValue() > 0
          _T_PrisonerIsSloot.SetValue(0)
       Endif  
    Elseif _T_PrisonerIsSloot.GetValue() > 1 && Damsel.GetRelationshipRank(PlayerRef) < 4
       Damsel.SetRelationshipRank(PlayerRef, 4)
       PlayerRef.SetRelationshipRank(Damsel, 4)
    Elseif Damsel.GetRelationshipRank(PlayerRef) < 2
       Damsel.SetRelationshipRank(PlayerRef, 2)
       PlayerRef.SetRelationshipRank(Damsel, 2)       
    Endif  
EndFunction

Function LastAliasCheck()
    Actor PiARef = None
    If _T_Rescue.GetValue() == 0
       If PainInTheAss != None
          PiARef = PainInTheAss.GetReference() as actor
       Endif
       Utility.Wait(0.1)
       If PiARef != None ;Citizen rescue exists
          PainInTheAss.Clear()
          Debug.Notification("NMS Rescue NPC alias Cleared")
       Endif 
    Else
       If _T_NakedOutfit.GetValue() > 0
          _T_NakedOutfit.SetValue(0)
          Debug.Notification("Naked Outfit Cleared")
       Endif   
    Endif   
    ; Globals insurance check
    If _T_RefractoryPeriod.GetValue() < 0
       _T_RefractoryPeriod.SetValue(0)
    Endif   
    If _T_BeatingCounter.GetValue() < 0
       _T_BeatingCounter.SetValue(0)
    Endif   
    If _T_Stockholm.GetValue() < 0
       _T_Stockholm.SetValue(0)
    Endif  
EndFunction

Function PeppermintPatty()
    If _T_PattyHurst.GetValue() > 9
       Actor Stooge = CampFollower.GetReference() as Actor
       String StoogeName = Stooge.GetBaseObject().GetName()
       Utility.Wait(0.1)
       If Stooge.GetFactionRank(_T_NMS_SlaveFaction) == 2
          _T_PattyHurst.SetValue(0)
          Debug.Notification("<font size='20'>"+StoogeName+" Is a devoted slave.</font>") 
       Elseif Stooge.GetFactionRank(_T_NMS_SlaveFaction) == 1
          Stooge.SetFactionRank(_T_NMS_SlaveFaction, 2)
          Utility.Wait(0.1)
          Stooge.SetRelationshipRank(PlayerRef, 4)
          PlayerRef.SetRelationshipRank(Stooge, 4)
          _T_PattyHurst.SetValue(0)
          UIQuestComplete.Play(PlayerRef)
          Debug.Notification("<font size='20'>"+StoogeName+" is now your fully devoted accomplice and sex slave.</font>")            
       Else
          Stooge.SetFactionRank(_T_NMS_SlaveFaction, 1)
          _T_PattyHurst.SetValue(0)
          UIQuestComplete.Play(PlayerRef)
          Debug.Notification("<font size='20'>"+StoogeName+"'s will has been broken. Training stats will no longer go below 5.</font>")
       Endif
    Endif 

    If _T_SunHelm.GetValue() == 0 && Game.GetModByname("SunHelmSurvival.esp") != 255
       _T_WaterskinList.Revert()  
       Potion SunFull = Game.GetFormFromFile(0x054DE9AD, "SunHelmSurvival.esp") as Potion
       Potion SunMid = Game.GetFormFromFile(0x054DE9AF, "SunHelmSurvival.esp") as Potion
       Potion SunLow = Game.GetFormFromFile(0x054DE9AE, "SunHelmSurvival.esp") as Potion  
       Utility.Wait(0.1)
       _T_WaterskinList.AddForm(SunFull)   
       _T_WaterskinList.AddForm(SunMid)
       _T_WaterskinList.AddForm(SunLow)
       Utility.Wait(0.1)
       Debug.Notification("NMS: Sunhelm detected. Waterskins added.") 
       _T_SunHelm.SetValue(1)
    Elseif _T_iNeed.GetValue() == 0 && Game.GetModByname("iNeed.esp") != 255
       _T_WaterskinList.Revert() 
       Potion iNeedFull = Game.GetFormFromFile(0x05004376, "iNeed.esp") as Potion
       Potion iNeedMid = Game.GetFormFromFile(0x0500437D, "iNeed.esp") as Potion
       Potion iNeedLow = Game.GetFormFromFile(0x0500437F, "iNeed.esp") as Potion 
       Utility.Wait(0.1)
       _T_WaterskinList.AddForm(iNeedFull)   
       _T_WaterskinList.AddForm(iNeedMid)
       _T_WaterskinList.AddForm(iNeedLow)
       Utility.Wait(0.1)
       Debug.Notification("NMS: iNeed detected. Waterskins added.")
       _T_iNeed.SetValue(1)
    Endif            
EndFunction   

Function SetCuffs(Actor Damsel)
    Actor Stooge = CampFollower.GetReference() as Actor
    If Stooge == Damsel
       CFACuff = Damsel.GetWornForm(0x00800000) As Armor
       CFWCuff = Damsel.GetWornForm(0x20000000) As Armor   
    Else 
       ACuff = Damsel.GetWornForm(0x00800000) As Armor
       WCuff = Damsel.GetWornForm(0x20000000) As Armor   
    Endif
EndFunction   

Function SetGag(Actor Damsel)
    Actor Stooge = CampFollower.GetReference() as Actor
    If Stooge == Damsel
       CFGag = Damsel.GetWornForm(0x00004000) As Armor
    Else  
       Gag = Damsel.GetWornForm(0x00004000) As Armor
    Endif
EndFunction   

;Note: This is different from the vanilla setoutfit function which is called in this same script. This one is only called by (I believe) The _T_ExPrisonerInventory fragment.
Function SetOutfit(Actor Damsel)
    Actor Stooge = CampFollower.GetReference() as Actor
    Actor Flunky = ExPrisoner.GetReference() as Actor
    Utility.Wait(0.1)
    If Stooge == Damsel
       CFAmulet = Damsel.GetWornForm(0x00000020) As Armor
       CFApron = Damsel.GetWornForm(0x00004000) As Armor
       CFACuff = Damsel.GetWornForm(0x00800000) As Armor
       CFBlindfold = Damsel.GetWornForm(0x02000000) As Armor
       CFCollar = Damsel.GetWornForm(0x00008000) As Armor
       CFGag = Damsel.GetWornForm(0x00004000) As Armor
       CFHair = Damsel.GetWornForm(0x00000002) As Armor
       CFHood = Damsel.GetWornForm(0x00000001) As Armor
       CFLongHair = Damsel.GetWornForm(0x00000800) As Armor
       CFPArms = Damsel.GetWornForm(0x00000010) As Armor
       CFPBoots = Damsel.GetWornForm(0x00000080) As Armor
       CFPClothes = Damsel.GetWornForm(0x00000004) As Armor
       CFPHead = Damsel.GetWornForm(0x00001000) As Armor
       CFPGloves = Damsel.GetWornForm(0x00000008) As Armor
       CFStocking1 = Damsel.GetWornForm(0x00010000) As Armor
       CFStocking2 = Damsel.GetWornForm(0x00020000) As Armor
       CFStocking3 = Damsel.GetWornForm(0x00800000) As Armor
       CFWCuff = Damsel.GetWornForm(0x20000000) As Armor
       Utility.Wait(0.1)
       If CFPClothes == None
          _T_CFIsNude.SetValue(1)
          Utility.Wait(0.1)
          _T_CFNakedOutfit.SetValue(1)
          Utility.Wait(0.1)
          If _T_Tutorial.GetValue() == 0
             _T_Tutorial.SetValue(1)
             Utility.Wait(0.1)
             Debug.Messagebox("TUTORIAL: You have set an outfit without a torso item. For the purposes of Notice Me Senpai, this outfit will be recognized as being nude in dialogue. The Undress and dress dialogue options will be disabled until you set an outfit with a torso, this is to prevent mismatches in function between the two methods of clothing management. Do not use other mods to manage clothing for this NPC.")
          Else
             Debug.Notification("Nude Outfit selected. Dressing dialogue disabled.")
          Endif
       Else
          _T_CFIsNude.SetValue(0)
          Utility.Wait(0.1)
          _T_CFNakedOutfit.SetValue(0)
       Endif
    Elseif Flunky == Damsel      
       Amulet = Damsel.GetWornForm(0x00000020) As Armor
       Apron = Damsel.GetWornForm(0x00004000) As Armor
       ACuff = Damsel.GetWornForm(0x00800000) As Armor
       Blindfold = Damsel.GetWornForm(0x02000000) As Armor
       Collar = Damsel.GetWornForm(0x00008000) As Armor
       Gag = Damsel.GetWornForm(0x00004000) As Armor
       Hair = Damsel.GetWornForm(0x00000002) As Armor
       Hood = Damsel.GetWornForm(0x00000001) As Armor
       LongHair = Damsel.GetWornForm(0x00000800) As Armor      
       PArms = Damsel.GetWornForm(0x00000010) As Armor
       PBoots = Damsel.GetWornForm(0x00000080) As Armor
       PClothes = Damsel.GetWornForm(0x00000004) As Armor
       PGloves = Damsel.GetWornForm(0x00000008) As Armor
       Stocking1 = Damsel.GetWornForm(0x00010000) As Armor
       Stocking2 = Damsel.GetWornForm(0x00020000) As Armor
       Stocking3 = Damsel.GetWornForm(0x00800000) As Armor       
       PHead = Damsel.GetWornForm(0x00001000) As Armor
       WCuff = Damsel.GetWornForm(0x20000000) As Armor
       Utility.Wait(0.1)
       If PClothes == None
          _T_PrisonerIsNude.SetValue(1)
          Utility.Wait(0.1)
          _T_NakedOutfit.SetValue(1)
          Utility.Wait(0.1)
          If _T_Tutorial.GetValue() == 0
             _T_Tutorial.SetValue(1)
             Utility.Wait(0.1)
             Debug.Messagebox("TUTORIAL: You have set an outfit without a torso item. For the purposes of Notice Me Senpai, this outfit will be recognized as being nude in dialogue. The Undress and dress dialogue options will be disabled until you set an outfit with a torso, this is to prevent mismatches in function between the two methods of clothing management. Do not use other mods to manage clothing for this NPC.")
          Else
             Debug.Notification("Nude Outfit selected. Dressing dialogue disabled.")
          Endif
       Else
          _T_PrisonerIsNude.SetValue(0)
          Utility.Wait(0.1)
          _T_NakedOutfit.SetValue(0)
       Endif      
    Endif    
EndFunction    

Function Strip(Actor Damsel)
    Actor Stooge = CampFollower.GetReference() as Actor
    Utility.Wait(0.1)
    If Damsel.IsInFaction(CurrentFollowerFaction) == True || Damsel.HasKeyword(_T_HoboForce) == True
       Armor FClothes = Damsel.GetWornForm(0x00000004) As Armor
       Utility.Wait(0.1)
       If FClothes != None
          Damsel.UnEquipAll()
       Else   
          Damsel.Disable()
          Utility.Wait(0.3)
          Damsel.Enable()
       Endif  
    Elseif Stooge == Damsel
       If _T_CFIsNude.GetValue() == 0  
          CFAmulet = Damsel.GetWornForm(0x00000020) As Armor
          CFACuff = Damsel.GetWornForm(0x00800000) As Armor
          CFBlindfold = Damsel.GetWornForm(0x02000000) As Armor
          CFCollar = Damsel.GetWornForm(0x00008000) As Armor
          CFGag = Damsel.GetWornForm(0x00004000) As Armor
          CFHood = Damsel.GetWornForm(0x00000001) As Armor    
          CFPArms = Damsel.GetWornForm(0x00000010) As Armor
          CFPBoots = Damsel.GetWornForm(0x00000080) As Armor
          CFPClothes = Damsel.GetWornForm(0x00000004) As Armor
          CFPHead = Damsel.GetWornForm(0x00001000) As Armor
          CFPGloves = Damsel.GetWornForm(0x00000008) As Armor
          CFWCuff = Damsel.GetWornForm(0x20000000) As Armor
          Utility.Wait(0.2)
          If CFPHead != None
             Damsel.UnequipItem(CFPHead)
             ITMClothingDown.Play(PlayerRef)
          Endif  
          Utility.Wait(0.1)   
          If CFPGloves != None
             Damsel.UnequipItem(CFPGloves)
             ITMClothingDown.Play(PlayerRef)
          Endif  
          Utility.Wait(0.1)         
          If CFPArms != None
             Damsel.UnequipItem(CFPArms)
             ITMClothingDown.Play(PlayerRef)
          Endif
          Damsel.PlayIdle(idlepickup_ground)
          Utility.Wait(1.0) 
          If CFPBoots != None
             Damsel.UnequipItem(CFPBoots)
             ITMClothingDown.Play(PlayerRef)
          Endif
          Utility.Wait(1.0)   
          Damsel.PlayIdle(idlesilentbow) 
          Utility.Wait(1.0)   
          Form CFPiece = Damsel.GetEquippedWeapon() as Form
          If CFPiece != None
             Damsel.RemoveItem(CFPiece, 1, True, PlayerRef)
          Endif     
          Utility.Wait(0.1)               
          If CFPClothes != None
             Damsel.UnequipItem(CFPClothes)
             ITMClothingDown.Play(PlayerRef)
          Endif   
          _T_CFIsNude.SetValue(1)
          Utility.Wait(0.1)
       Else 
          Damsel.PlayIdle(idlepickup_ground)
          Utility.Wait(1.0) 
          If CFPClothes != None
             Damsel.EquipItem(CFPClothes)
             ITMClothingUp.Play(PlayerRef)
          Endif        
          Utility.Wait(1.0)                 
          If CFPBoots != None
             Damsel.EquipItem(CFPBoots)
             ITMClothingUp.Play(PlayerRef) 
          Endif  
          Utility.Wait(1.0)         
          If CFPArms != None
             Damsel.EquipItem(CFPArms)
             ITMClothingUp.Play(PlayerRef) 
          Endif  
          Utility.Wait(0.1)
          If CFPGloves != None
             Damsel.EquipItem(CFPGloves)
             ITMClothingUp.Play(PlayerRef) 
          Endif  
          Utility.Wait(0.1)       
          If CFPHead != None
             Damsel.EquipItem(CFPHead)
             ITMClothingUp.Play(PlayerRef) 
          Endif                     
          _T_CFIsNude.SetValue(0) 
       Endif          
    Else  
       If _T_PrisonerIsNude.GetValue() == 0  
          Amulet = Damsel.GetWornForm(0x00000020) As Armor
          ACuff = Damsel.GetWornForm(0x00800000) As Armor
          Blindfold = Damsel.GetWornForm(0x02000000) As Armor
          Collar = Damsel.GetWornForm(0x00008000) As Armor
          Gag = Damsel.GetWornForm(0x00004000) As Armor
          Hood = Damsel.GetWornForm(0x00000001) As Armor
          PArms = Damsel.GetWornForm(0x00000010) As Armor
          PBoots = Damsel.GetWornForm(0x00000080) As Armor
          PClothes = Damsel.GetWornForm(0x00000004) As Armor
          PHead = Damsel.GetWornForm(0x00001000) As Armor
          PGloves = Damsel.GetWornForm(0x00000008) As Armor       
          WCuff = Damsel.GetWornForm(0x20000000) As Armor
          Utility.Wait(0.2)
          If PHead != None
             Damsel.UnequipItem(PHead)
             ITMClothingDown.Play(PlayerRef)
          Endif  
          Utility.Wait(0.1)   
          If PGloves != None
             Damsel.UnequipItem(PGloves)
             ITMClothingDown.Play(PlayerRef)
          Endif  
          Utility.Wait(0.1)         
          If PArms != None
             Damsel.UnequipItem(PArms)
             ITMClothingDown.Play(PlayerRef)
          Endif
          Damsel.PlayIdle(idlepickup_ground)
          Utility.Wait(1.0) 
          If PBoots != None
             Damsel.UnequipItem(PBoots)
             ITMClothingDown.Play(PlayerRef)
          Endif
          Utility.Wait(1.0)   
          Damsel.PlayIdle(idlesilentbow) 
          Utility.Wait(1.0)   
          Form Piece = Damsel.GetEquippedWeapon() as Form
          If Piece != None
             Damsel.RemoveItem(Piece, 1, True, PlayerRef)
          Endif     
          Utility.Wait(0.1)               
          If PClothes != None
             Damsel.UnequipItem(PClothes)
             ITMClothingDown.Play(PlayerRef)
          Endif   
          _T_PrisonerIsNude.SetValue(1)
          Utility.Wait(0.1) 
       Else 
          Damsel.PlayIdle(idlepickup_ground)
          Utility.Wait(1.0) 
          If PClothes != None
             Damsel.EquipItem(PClothes)
             ITMClothingUp.Play(PlayerRef) 
          Endif        
          Utility.Wait(1.0)                 
          If PBoots != None
             Damsel.EquipItem(PBoots)
             ITMClothingUp.Play(PlayerRef) 
          Endif  
          Utility.Wait(1.0)         
          If PArms != None
             Damsel.EquipItem(PArms)
             ITMClothingUp.Play(PlayerRef) 
          Endif  
          Utility.Wait(0.1)
          If PGloves != None
             Damsel.EquipItem(PGloves)
             ITMClothingUp.Play(PlayerRef) 
          Endif  
          Utility.Wait(0.1)       
          If PHead != None
             Damsel.EquipItem(PHead)
             ITMClothingUp.Play(PlayerRef) 
          Endif                     
          _T_PrisonerIsNude.SetValue(0)
       Endif  
    Endif
EndFunction

Function FixNude(Actor Damsel)
    Actor Stooge = CampFollower.GetReference() as Actor
    Actor Flunky = ExPrisoner.GetReference() as Actor
    Utility.Wait(0.1)
    If Flunky == Damsel
       If _T_PrisonerIsNude.GetValue() == 0                  
          If PClothes != None
             Damsel.EquipItem(PClothes)
          Endif        
          Utility.Wait(0.1)                 
          If PBoots != None
             Damsel.EquipItem(PBoots)
          Endif  
          Utility.Wait(0.1)         
          If PArms != None
             Damsel.EquipItem(PArms)
          Endif  
          Utility.Wait(0.1)
          If PGloves != None
             Damsel.EquipItem(PGloves)
          Endif  
          Utility.Wait(0.1)         
          If PHead != None
             Damsel.EquipItem(PHead)
          Endif                             
       Endif 
       If Hair != None
          Damsel.EquipItem(Hair)
       Endif
       If LongHair != None
          Damsel.EquipItem(LongHair)
       Endif         
       If Amulet != None
          Damsel.EquipItem(Amulet)
       Endif
       If Apron != None
          Damsel.EquipItem(Apron)
       Endif                
       If ACuff != None
          Damsel.EquipItem(ACuff)
       Endif     
       If Blindfold != None
          Damsel.EquipItem(Blindfold)
       Endif 
       If Collar != None
          Damsel.EquipItem(Collar)
       Endif   
       If Gag != None
          Damsel.EquipItem(Gag)
       Endif     
       If Hood != None
          Damsel.EquipItem(Hood)
       Endif
       If Stocking1 != None
          Damsel.EquipItem(Stocking1)
       Endif
       If Stocking2 != None
          Damsel.EquipItem(Stocking2)
       Endif
       If Stocking3 != None
          Damsel.EquipItem(Stocking3)
       Endif       
       If WCuff != None
          Damsel.EquipItem(WCuff)
       Endif   
       Utility.Wait(0.1)
       If _T_Restrained.GetValue() == 5 || _T_Restrained.GetValue() == 6
          Damsel.EquipItem(zbfGagCloth)
       Endif   
       Utility.Wait(0.1)
       If _T_NakedOutfit.GetValue() == 0
          Armor FArms = Damsel.GetWornForm(0x00000010) As Armor
          Armor FBoots = Damsel.GetWornForm(0x00000080) As Armor
          Armor FClothes = Damsel.GetWornForm(0x00000004) As Armor
          Armor FGloves = Damsel.GetWornForm(0x00000008) As Armor
          Utility.Wait(0.1)
          If _T_PrisonerIsNude.GetValue() > 0
             If FGloves != None
                Damsel.UnequipItem(FGloves)
             Endif
             If FArms != None
                Damsel.UnequipItem(FArms)
             Endif
             If FClothes != None
                Damsel.UnequipItem(FClothes)
             Endif   
             If FBoots != None
                Damsel.UnequipItem(FBoots)
             Endif   
          Endif 
       Endif   
    ElseIf Stooge == Damsel
       If _T_CFIsNude.GetValue() == 0                  
          If CFPClothes != None
             Damsel.EquipItem(CFPClothes)
          Endif        
          Utility.Wait(0.1)                 
          If CFPBoots != None
             Damsel.EquipItem(CFPBoots)
          Endif  
          Utility.Wait(0.1)         
          If CFPArms != None
             Damsel.EquipItem(CFPArms)
          Endif  
          Utility.Wait(0.1)
          If CFPGloves != None
             Damsel.EquipItem(CFPGloves)
          Endif  
          Utility.Wait(0.1)         
          If CFPHead != None
             Damsel.EquipItem(CFPHead)
          Endif                             
       Endif
       If CFHair != None
          Damsel.EquipItem(CFHair)
       Endif
       If CFLongHair != None
          Damsel.EquipItem(CFLongHair)
       Endif         
       If CFAmulet != None
          Damsel.EquipItem(CFAmulet)
       Endif
       If CFApron != None
          Damsel.EquipItem(CFApron)
       Endif                  
       If CFACuff != None
          Damsel.EquipItem(CFACuff)
       Endif     
       If CFBlindfold != None
          Damsel.EquipItem(CFBlindfold)
       Endif 
       If CFCollar != None
          Damsel.EquipItem(CFCollar)
       Endif   
       If CFGag != None
          Damsel.EquipItem(CFGag)
       Endif     
       If CFHood != None
          Damsel.EquipItem(CFHood)
       Endif
       If CFStocking1 != None
          Damsel.EquipItem(CFStocking1)
       Endif
       If CFStocking2 != None
          Damsel.EquipItem(CFStocking2)
       Endif
       If CFStocking3 != None
          Damsel.EquipItem(CFStocking3)
       Endif             
       If CFWCuff != None
          Damsel.EquipItem(CFWCuff)
       Endif   
       Utility.Wait(0.1)
       If _T_CFRestrained.GetValue() == 5 || _T_CFRestrained.GetValue() == 6
          Damsel.EquipItem(zbfGagCloth)
       Endif   
       Utility.Wait(0.1)
       If _T_CFNakedOutfit.GetValue() == 0
          Armor CArms = Damsel.GetWornForm(0x00000010) As Armor
          Armor CBoots = Damsel.GetWornForm(0x00000080) As Armor
          Armor CClothes = Damsel.GetWornForm(0x00000004) As Armor
          Armor CGloves = Damsel.GetWornForm(0x00000008) As Armor
          Utility.Wait(0.1)
          If _T_CFIsNude.GetValue() > 0
             If CGloves != None
                Damsel.UnequipItem(CGloves)
             Endif
             If CArms != None
                Damsel.UnequipItem(CArms)
             Endif
             If CClothes != None
                Damsel.UnequipItem(CClothes)
             Endif   
             If CBoots != None
                Damsel.UnequipItem(CBoots)
             Endif   
          Endif
       Endif        
    Endif   
EndFunction

Function FixOutfit(Actor Damsel)
    Actor Stooge = CampFollower.GetReference() as Actor
    Actor Flunky = ExPrisoner.GetReference() as Actor
    If Stooge == Damsel 
       If CFPHead != None
          Damsel.UnequipItem(CFPHead)
       Endif     
       If CFPGloves != None
          Damsel.UnequipItem(CFPGloves)
       Endif           
       If CFPArms != None
          Damsel.UnequipItem(CFPArms)
       Endif 
       If CFPBoots != None
          Damsel.UnequipItem(CFPBoots)
       Endif      
       If CFPClothes != None
          Damsel.UnequipItem(CFPClothes)
       Endif
       If CFHair != None
          Damsel.UnequipItem(CFHair)
       Endif
       If CFLongHair != None
          Damsel.UnequipItem(CFLongHair)
       Endif         
       Utility.Wait(0.1)
       Damsel.SetOutfit(_T_NekkidOutfit)
       Damsel.SetOutfit(_T_NekkidOutfit, true)
       Utility.Wait(0.1)
       If CFHair != None
          Damsel.EquipItem(CFHair)
       Endif
       If CFLongHair != None
          Damsel.EquipItem(CFLongHair)
       Endif         
       If CFPClothes != None
          Damsel.EquipItem(CFPClothes)
       Endif                    
       If CFPBoots != None
          Damsel.EquipItem(CFPBoots)
       Endif         
       If CFPArms != None
          Damsel.EquipItem(CFPArms)
       Endif
       If CFPGloves != None
          Damsel.EquipItem(CFPGloves)
       Endif       
       If CFPHead != None
          Damsel.EquipItem(CFPHead)
       Endif  
       Utility.Wait(0.2)
       Damsel.SetOutfit(None)
       Damsel.SetOutfit(None, true)                     
    Elseif Flunky == Damsel       
       DefaultOutfit = Damsel.GetActorBase().GetOutfit()
       Amulet = Damsel.GetWornForm(0x00000020) As Armor
       Apron = Damsel.GetWornForm(0x00004000) As Armor
       ACuff = Damsel.GetWornForm(0x00800000) As Armor
       Blindfold = Damsel.GetWornForm(0x02000000) As Armor
       Collar = Damsel.GetWornForm(0x00008000) As Armor
       Gag = Damsel.GetWornForm(0x00004000) As Armor
       Hair = Damsel.GetWornForm(0x00000002) As Armor
       Hood = Damsel.GetWornForm(0x00000001) As Armor
       LongHair = Damsel.GetWornForm(0x00000800) As Armor  
       PArms = Damsel.GetWornForm(0x00000010) As Armor
       PBoots = Damsel.GetWornForm(0x00000080) As Armor
       PClothes = Damsel.GetWornForm(0x00000004) As Armor
       PHead = Damsel.GetWornForm(0x00001000) As Armor
       PGloves = Damsel.GetWornForm(0x00000008) As Armor
       Stocking1 = Damsel.GetWornForm(0x00010000) As Armor
       Stocking2 = Damsel.GetWornForm(0x00020000) As Armor
       Stocking3 = Damsel.GetWornForm(0x00800000) As Armor       
       WCuff = Damsel.GetWornForm(0x20000000) As Armor    
       Utility.Wait(0.2)      
       If PHead != None
          Damsel.UnequipItem(PHead)
       Endif  
       If PGloves != None
          Damsel.UnequipItem(PGloves)
       Endif            
       If PArms != None
          Damsel.UnequipItem(PArms)
       Endif
       If PBoots != None
          Damsel.UnequipItem(PBoots)
       Endif  
       If PClothes != None
          Damsel.UnequipItem(PClothes)
       Endif
       If Hair != None
          Damsel.UnequipItem(Hair)
       Endif
       If LongHair != None
          Damsel.UnequipItem(LongHair)
       Endif         
       Utility.Wait(0.1)
       Damsel.SetOutfit(_T_NekkidOutfit)
       Damsel.SetOutfit(_T_NekkidOutfit, true)
       Utility.Wait(0.1)
       If Hair != None
          Damsel.EquipItem(Hair)
       Endif
       If LongHair != None
          Damsel.EquipItem(LongHair)
       Endif         
       If PClothes != None
          Damsel.EquipItem(PClothes)
       Endif                       
       If PBoots != None
          Damsel.EquipItem(PBoots)
       Endif          
       If PArms != None
          Damsel.EquipItem(PArms)
       Endif  
       If PGloves != None
          Damsel.EquipItem(PGloves) 
       Endif    
       If PHead != None
          Damsel.EquipItem(PHead)
       Endif  
       Utility.Wait(0.2)
       Damsel.SetOutfit(None)
       Damsel.SetOutfit(None, true)                        
    Endif
EndFunction

Function RatRapeFixOutfit(Actor Damsel)
       DefaultOutfit = Damsel.GetActorBase().GetOutfit()
       Amulet = Damsel.GetWornForm(0x00000020) As Armor
       Apron = Damsel.GetWornForm(0x00004000) As Armor
       ACuff = Damsel.GetWornForm(0x00800000) As Armor
       Blindfold = Damsel.GetWornForm(0x02000000) As Armor
       Collar = Damsel.GetWornForm(0x00008000) As Armor
       Gag = Damsel.GetWornForm(0x00004000) As Armor
       Hair = Damsel.GetWornForm(0x00000002) As Armor
       Hood = Damsel.GetWornForm(0x00000001) As Armor
       LongHair = Damsel.GetWornForm(0x00000800) As Armor  
       PArms = Damsel.GetWornForm(0x00000010) As Armor
       PBoots = Damsel.GetWornForm(0x00000080) As Armor
       PClothes = Damsel.GetWornForm(0x00000004) As Armor
       PHead = Damsel.GetWornForm(0x00001000) As Armor
       PGloves = Damsel.GetWornForm(0x00000008) As Armor
       Stocking1 = Damsel.GetWornForm(0x00010000) As Armor
       Stocking2 = Damsel.GetWornForm(0x00020000) As Armor
       Stocking3 = Damsel.GetWornForm(0x00800000) As Armor       
       WCuff = Damsel.GetWornForm(0x20000000) As Armor    
       Utility.Wait(0.2)
       If PHead != None
          Damsel.UnequipItem(PHead)
       Endif  
       If PGloves != None
          Damsel.UnequipItem(PGloves)
       Endif      
       If PArms != None
          Damsel.UnequipItem(PArms)
       Endif
       If PBoots != None
          Damsel.UnequipItem(PBoots)
       Endif  
       If PClothes != None
          Damsel.UnequipItem(PClothes)
       Endif   
       Utility.Wait(0.1)
       Damsel.SetOutfit(_T_NekkidOutfit)
       Damsel.SetOutfit(_T_NekkidOutfit, true)
       _T_PrisonerIsNude.SetValue(1)   
EndFunction   

Function FollowMe(Actor Follower)
    Actor Stooge = CampFollower.GetReference() as Actor
    Actor Flunky = ExPrisoner.GetReference() as Actor
    Utility.Wait(0.1)
    If Follower.GetFactionRank(_T_RatFaction) == 1
       If Follower == BirnaRef
          PlayerRef.RemoveItem(Gold001, 25)
          Follower.SetFactionRank(_T_RatFaction, 3) ;independant whore
          Follower.SetFactionRank(_T_HistoryFaction, 2) ;Sex
       Elseif Follower == EddaRef || Follower == SildaRef 
          PlayerRef.RemoveItem(Gold001, 10)
          Follower.SetFactionRank(_T_RatFaction, 3) ;independant whore
          Follower.SetFactionRank(_T_HistoryFaction, 2) ;Sex
          Follower.SetFactionRank(_T_NMS_SlaveFaction, 1) ;Broken by life
          _T_Stockholm.SetValue(10) ;Grateful
       Else  
          Follower.SetFactionRank(_T_RatFaction, 2) ;Friend
          Follower.SetFactionRank(_T_HistoryFaction, 1) ;No Sex
       Endif   
       Utility.Wait(0.1)
       manny_up_list_AvoidNPC.AddForm(Follower)
    Elseif Follower.GetFactionRank(_T_RatFaction) == 3 
       If Follower == BirnaRef
          PlayerRef.RemoveItem(Gold001, 25)
       Elseif Follower == EddaRef || Follower == SildaRef
          PlayerRef.RemoveItem(Gold001, 10)
       Endif 
    Endif  
    Utility.Wait(0.1)
    If Flunky != None
       If Flunky.GetFactionRank(_T_HistoryFaction) > 4 && Flunky.GetFactionRank(_T_HistoryFaction) < 9 
          DismissButFollow(Flunky)
       Else
          Dismiss(Flunky)
          Utility.Wait(0.1)
          If Stooge == Follower
             DismissCampFollower(Follower)
          Endif   
       Endif
    Else
       If Stooge == Follower
          DismissCampFollower(Follower)
       Endif   
    Endif   
    Utility.Wait(0.4)
    _T_AfterRape.SetValue(0)
    _T_BeatingCounter.SetValue(0)
    _T_BeatingRecentCounter.SetValue(0)
    _T_Fisto.SetValue(0)
    _T_HitCounter.SetValue(0)
    _T_PrisonerBanditRaped.SetValue(0)
    _T_PrisonerDialogue.SetValue(0)
    _T_PrisonerGayness.SetValue(0)
    _T_PrisonerHunger.SetValue(0)
    _T_PrisonerIsBitch.SetValue(0)
    _T_PrisonerIsNude.SetValue(0)
    _T_PrisonerIsSloot.SetValue(0)
    _T_PrisonerPlayerRaped.SetValue(0)
    _T_PrisonerRejected.SetValue(0)
    _T_PrisonerThirst.SetValue(0)
    _T_RefractoryPeriod.SetValue(0)
    _T_Restrained.SetValue(0)
    _T_Stockholm.SetValue(0)
    _T_Whoreing.SetValue(0)    
    ExPrisoner.Clear()
    Debug.Notification("NMS Ex Prisoner NPC stats Cleared")  
    Utility.Wait(0.1)  
    ExPrisoner.ForceRefIfEmpty(Follower)
    Utility.Wait(0.1) 
    If Follower.GetFactionRank(_T_NMS_SlaveFaction) == 2
       Follower.setplayerteammate(0)
       Debug.Notification("Your slave is following you") 
    Elseif Follower.GetFactionRank(_T_HistoryFaction) > 4 && Follower.GetFactionRank(_T_HistoryFaction) < 9 ;Raped by player
       Follower.setplayerteammate(0)
       Debug.Notification("Your victim is following you") 
    Else 
       Follower.setplayerteammate(1)
       If Follower.GetFactionRank(_T_HistoryFaction) == 2 || Follower.GetFactionRank(_T_HistoryFaction) == 4
          Debug.Notification("Your lover is following you")
       Else   
          Debug.Notification("Your friend is following you") 
       Endif  
    Endif
    ZipItSnitch(Follower)
    Utility.Wait(0.1)
    FixOutfit(Follower)
    Utility.Wait(0.1)
    FixWhore(Follower) 
    Utility.Wait(0.1) 
    FixNude(Follower)
    ;Gaydar  
    If Sexlab.GetSexuality(Follower) < 35 ;Giovani
       _T_PrisonerGayness.SetValue(1)
    ElseIf Sexlab.GetSexuality(Follower) < 65 ;Josuke
       _T_PrisonerGayness.SetValue(2)
    Else   
       _T_PrisonerGayness.SetValue(0) ;Joeseph Joestar... OH MY GOD.   
    Endif       
EndFunction

Function FollowMeCF(Actor Flunky)
    Actor Stooge = CampFollower.GetReference() as Actor
    Utility.Wait(0.1)
    CFDefaultOutfit = Flunky.GetActorBase().GetOutfit()
    CFAmulet = Flunky.GetWornForm(0x00000020) As Armor
    CFApron = Flunky.GetWornForm(0x00004000) As Armor
    CFACuff = Flunky.GetWornForm(0x00800000) As Armor
    CFBlindfold = Flunky.GetWornForm(0x02000000) As Armor
    CFCollar = Flunky.GetWornForm(0x00008000) As Armor
    CFGag = Flunky.GetWornForm(0x00004000) As Armor
    CFHair = Flunky.GetWornForm(0x00000002) As Armor
    CFHood = Flunky.GetWornForm(0x00000001) As Armor
    CFLongHair = Flunky.GetWornForm(0x00000800) As Armor 
    CFPArms = Flunky.GetWornForm(0x00000010) As Armor
    CFPBoots = Flunky.GetWornForm(0x00000080) As Armor
    CFPClothes = Flunky.GetWornForm(0x00000004) As Armor
    CFPHead = Flunky.GetWornForm(0x00001000) As Armor
    CFPGloves = Flunky.GetWornForm(0x00000008) As Armor
    CFStocking1 = Flunky.GetWornForm(0x00010000) As Armor
    CFStocking2 = Flunky.GetWornForm(0x00020000) As Armor
    CFStocking3 = Flunky.GetWornForm(0x00800000) As Armor    
    CFWCuff = Flunky.GetWornForm(0x20000000) As Armor      
    Utility.Wait(0.2)        
    If Stooge != None 
       DismissCampFollower(Stooge)
    Else
       CampFollower.Clear()
    Endif       
    Utility.Wait(0.1)
    CampFollower.Clear()
    Utility.Wait(0.1)
    CampFollower.ForceRefIfEmpty(Flunky)
    If Flunky.GetFactionRank(_T_NMS_SlaveFaction) == 2
       Flunky.setplayerteammate(0)
       Debug.Notification("Your complicit slave is following")
    Else 
       Flunky.setplayerteammate(0)
       Debug.Notification("Your complicit victim is following")
    Endif   
    Utility.Wait(0.2)
    ZipItSnitch(Flunky)
    Utility.Wait(0.1)
    FixOutfit(Flunky) 
EndFunction

Function ZipItSnitch(Actor Snitch)
    If Snitch.IsInFaction(CrimeFactionCidhnaMine)
       Snitch.RemoveFromFaction(CrimeFactionCidhnaMine)
    Elseif Snitch.IsInFaction(CrimeFactionEastmarch)
       Snitch.RemoveFromFaction(CrimeFactionEastmarch)
    Elseif Snitch.IsInFaction(CrimeFactionFalkreath)
       Snitch.RemoveFromFaction(CrimeFactionFalkreath)     
    Elseif Snitch.IsInFaction(CrimeFactionGreybeard)
       Snitch.RemoveFromFaction(CrimeFactionGreybeard)            
    Elseif Snitch.IsInFaction(CrimeFactionHaafingar)
       Snitch.RemoveFromFaction(CrimeFactionHaafingar)   
    Elseif Snitch.IsInFaction(CrimeFactionHjaalmarch)
       Snitch.RemoveFromFaction(CrimeFactionHjaalmarch)    
    Elseif Snitch.IsInFaction(CrimeFactionImperial)
       Snitch.RemoveFromFaction(CrimeFactionImperial)     
    Elseif Snitch.IsInFaction(CrimeFactionKhajiitCaravans)
       Snitch.RemoveFromFaction(CrimeFactionKhajiitCaravans)            
    Elseif Snitch.IsInFaction(CrimeFactionOrcs)
       Snitch.RemoveFromFaction(CrimeFactionOrcs)   
    Elseif Snitch.IsInFaction(CrimeFactionPale)
       Snitch.RemoveFromFaction(CrimeFactionPale)
    Elseif Snitch.IsInFaction(CrimeFactionReach)
       Snitch.RemoveFromFaction(CrimeFactionReach)     
    Elseif Snitch.IsInFaction(CrimeFactionRift)
       Snitch.RemoveFromFaction(CrimeFactionRift)            
    Elseif Snitch.IsInFaction(CrimeFactionSons)
       Snitch.RemoveFromFaction(CrimeFactionSons)   
    Elseif Snitch.IsInFaction(CrimeFactionThievesGuild)
       Snitch.RemoveFromFaction(CrimeFactionThievesGuild)  
    Elseif Snitch.IsInFaction(CrimeFactionWhiterun)
       Snitch.RemoveFromFaction(CrimeFactionWhiterun)     
    Elseif Snitch.IsInFaction(CrimeFactionWinterhold)
       Snitch.RemoveFromFaction(CrimeFactionWinterhold)            
    Endif 
    Debug.Notification("NMS Follower crime reporting disabled")    
EndFunction     

Function BeMyMaid(Actor Maid)
    Actor Stooge = CampFollower.GetReference() as Actor
    Utility.Wait(0.1)
    If Stooge == Maid
       DismissCampFollower(Maid)
    Else   
       Dismiss(Maid)
    Endif  
    Utility.Wait(0.1)
    If HouseSlave01.GetReference() == None
       HouseSlave01.ForceRefTo(Maid)  
       Debug.Notification("1st house slave assigned")
       Utility.Wait(0.2)
       ZipItSnitch(Maid)     
    Elseif HouseSlave02.GetReference() == None
       HouseSlave02.ForceRefTo(Maid)
       Debug.Notification("2nd house slave assigned")
       Utility.Wait(0.2)
       ZipItSnitch(Maid)           
    Elseif HouseSlave03.GetReference() == None
       HouseSlave03.ForceRefTo(Maid)
       Debug.Notification("3rd house slave assigned")
       Utility.Wait(0.2)
       ZipItSnitch(Maid)           
    Elseif HouseSlave04.GetReference() == None
       HouseSlave04.ForceRefTo(Maid)
       Debug.Notification("4th house slave assigned")
       Utility.Wait(0.2)
       Debug.Notification("You must dismiss a house slave before you can assign another.")
       ZipItSnitch(Maid)           
    Else
       Debug.Messagebox("You have too many house slaves. Dismiss a house slave, and try again.")
    Endif 
    Utility.Wait(0.2)
    Maid.EvaluatePackage()          
EndFunction

Function DismissMaid(Actor Maid)
    Utility.Wait(0.2)
    If HouseSlave01.GetReference() == Maid
       HouseSlave01.Clear()  
       Debug.Notification("1st house slave cleared")  
    Elseif HouseSlave02.GetReference() == Maid
       HouseSlave02.Clear()
       Debug.Notification("2nd house slave cleared")        
    Elseif HouseSlave03.GetReference() == Maid
       HouseSlave03.Clear()
       Debug.Notification("3rd house slave cleared")         
    Elseif HouseSlave04.Clear() == Maid
       HouseSlave04.Clear()
       Debug.Notification("4th house slave cleared")
    Endif     
EndFunction


Function Dismiss(Actor Flunky)
    If _T_PrisonerIsNude.GetValue() == 1;Redress ex prisoner
       Strip(Flunky)
    Endif 
    ExPrisoner.Clear()
    Utility.Wait(0.2) 
    Flunky.SetOutfit(DefaultOutfit)
    Utility.Wait(0.1)       
    _T_AfterRape.SetValue(0)
    _T_BeatingCounter.SetValue(0)
    _T_BeatingRecentCounter.SetValue(0)
    _T_Fisto.SetValue(0)
    _T_HitCounter.SetValue(0)
    _T_PrisonerBanditRaped.SetValue(0)
    _T_PrisonerDialogue.SetValue(0)
    _T_PrisonerGayness.SetValue(0)
    _T_PrisonerHunger.SetValue(0)
    _T_PrisonerIsBitch.SetValue(0)
    _T_PrisonerIsNude.SetValue(0)
    _T_PrisonerIsSloot.SetValue(0)
    _T_NakedOutfit.SetValue(0)
    _T_PrisonerPlayerRaped.SetValue(0)
    _T_PrisonerRejected.SetValue(0)
    _T_PrisonerThirst.SetValue(0)
    _T_RefractoryPeriod.SetValue(0)
    _T_Restrained.SetValue(0)
    _T_Stockholm.SetValue(0)
    _T_Whoreing.SetValue(0)
    Utility.Wait(0.1)
    If Amulet != None
       Flunky.UnequipItem(Amulet)
    Endif
    If Apron != None
       Flunky.UnequipItem(Apron)
    Endif         
    If ACuff != None
       Flunky.UnequipItem(ACuff)
    Endif     
    If Blindfold != None
       Flunky.UnequipItem(Blindfold)
    Endif 
    If Collar != None
       Flunky.UnequipItem(Collar)
    Endif   
    If Gag != None
       Flunky.UnequipItem(Gag)
    Endif     
    If Hood != None
       Flunky.UnequipItem(Hood)
    Endif
    If Stocking1 != None
       Flunky.UnequipItem(Stocking1)
    Endif    
    If Stocking2 != None
       Flunky.UnequipItem(Stocking2)
    Endif
    If Stocking3 != None
       Flunky.UnequipItem(Stocking3)
    Endif      
    If WCuff != None
       Flunky.UnequipItem(WCuff)
    Endif
    If Hair != None
       Flunky.UnequipItem(Hair)
    Endif
    If LongHair != None
       Flunky.UnequipItem(LongHair)
    Endif      
    Utility.Wait(0.1)
    Amulet = Flunky.GetWornForm(0x00000020) As Armor
    Apron = Flunky.GetWornForm(0x00004000) As Armor
    ACuff = Flunky.GetWornForm(0x00800000) As Armor
    Blindfold = Flunky.GetWornForm(0x02000000) As Armor
    Collar = Flunky.GetWornForm(0x00008000) As Armor
    Gag = Flunky.GetWornForm(0x00004000) As Armor
    Hair = Flunky.GetWornForm(0x00000002) As Armor
    Hood = Flunky.GetWornForm(0x00000001) As Armor
    LongHair = Flunky.GetWornForm(0x00000800) As Armor
    Stocking1 = Flunky.GetWornForm(0x00010000) As Armor
    Stocking2 = Flunky.GetWornForm(0x00020000) As Armor
    Stocking3 = Flunky.GetWornForm(0x00800000) As Armor      
    WCuff = Flunky.GetWornForm(0x20000000) As Armor    
    Debug.Notification("NMS NPC stats cleared")
    Utility.Wait(0.1)
    ;Insurance
    _T_BeatingCounter.SetValue(0)
    _T_Stockholm.SetValue(0)
EndFunction

Function DismissButFollow(Actor Flunky)
    Actor Stooge = CampFollower.GetReference() as Actor
    Utility.Wait(0.1)
    TempDefaultOutfit = DefaultOutfit
    CFAmulet = Flunky.GetWornForm(0x00000020) As Armor
    CFApron = Flunky.GetWornForm(0x00004000) As Armor
    CFACuff = Flunky.GetWornForm(0x00800000) As Armor
    CFBlindfold = Flunky.GetWornForm(0x02000000) As Armor
    CFCollar = Flunky.GetWornForm(0x00008000) As Armor
    CFGag = Flunky.GetWornForm(0x00004000) As Armor
    CFHair = Flunky.GetWornForm(0x00000002) As Armor
    CFHood = Flunky.GetWornForm(0x00000001) As Armor
    CFLongHair = Flunky.GetWornForm(0x00000800) As Armor 
    CFPArms = Flunky.GetWornForm(0x00000010) As Armor
    CFPBoots = Flunky.GetWornForm(0x00000080) As Armor
    CFPClothes = Flunky.GetWornForm(0x00000004) As Armor
    CFPHead = Flunky.GetWornForm(0x00001000) As Armor
    CFPGloves = Flunky.GetWornForm(0x00000008) As Armor
    CFStocking1 = Flunky.GetWornForm(0x00010000) As Armor
    CFStocking2 = Flunky.GetWornForm(0x00020000) As Armor
    CFStocking3 = Flunky.GetWornForm(0x00800000) As Armor    
    CFWCuff = Flunky.GetWornForm(0x20000000) As Armor      
    Utility.Wait(0.2)    
    Dismiss(Flunky)
    Utility.Wait(0.1)
    If Stooge != None 
       DismissCampFollower(Stooge)
    Else
       CampFollower.Clear()
    Endif       
    Utility.Wait(0.1)
    CampFollower.Clear()
    Utility.Wait(0.1)
    CFDefaultOutfit = TempDefaultOutfit
    Utility.Wait(0.1)
    CampFollower.ForceRefIfEmpty(Flunky)
    Debug.Notification("Complicit victim is following")
    Utility.Wait(0.2)
    ZipItSnitch(Flunky)
    Utility.Wait(0.1)
    FixOutfit(Flunky)
    Utility.Wait(0.1)
    ;Insurance
    _T_BeatingCounter.SetValue(0)
    _T_Stockholm.SetValue(0)
EndFunction

Function DismissCampFollower(Actor Flunky)
    If _T_CFIsNude.GetValue() > 0 ;Redress Camp Follower
       Strip(Flunky)
    Endif
    Utility.Wait(0.1)   
    CampFollower.Clear()
    Utility.Wait(0.2)
    Flunky.SetOutfit(CFDefaultOutfit)    
    Debug.Notification("Dismissed victim is no longer following")
    _T_CFIsNude.SetValue(0)
    _T_CFNakedOutfit.SetValue(0)
    _T_CFRestrained.SetValue(0)
EndFunction  

Function Sayonara(Actor Flunky)
    Flunky.RemoveFromFaction(_T_HistoryFaction)
    Flunky.RemoveFromFaction(_T_NMS_WhoreFaction)
    Flunky.SetRelationshipRank(PlayerRef, -2)
    PlayerRef.SetRelationshipRank(Flunky, -2)  
EndFunction   

Function UpdateWhore(Actor Whore)
   If Whore.GetFactionRank(_T_HistoryFaction) > 4 && Whore.GetFactionRank(_T_HistoryFaction) < 9
      If Whore.GetFactionRank(_T_NMS_WhoreFaction) == 2
         Whore.SetFactionRank(_T_NMS_WhoreFaction, 0)
      Elseif Whore.GetFactionRank(_T_NMS_WhoreFaction) > 2 && Whore.GetFactionRank(_T_NMS_WhoreFaction) < 7
         Whore.SetFactionRank(_T_NMS_WhoreFaction, 7)       
      Endif    
   Endif   
EndFunction

Function FixWhore(Actor Whore)
   If Whore.GetFactionRank(_T_HistoryFaction) != 5 && Whore.GetFactionRank(_T_HistoryFaction) != 6 && Whore.GetFactionRank(_T_HistoryFaction) != 7 && Whore.GetFactionRank(_T_HistoryFaction) != 8
      If Whore.GetFactionRank(_T_NMS_WhoreFaction) != 2
         Whore.SetFactionRank(_T_NMS_WhoreFaction, 0)
         Whore.RemoveFromFaction(_T_NMS_WhoreFaction)
      Endif
   Elseif Whore.GetFactionRank(_T_HistoryFaction) > 4 && Whore.GetFactionRank(_T_HistoryFaction) < 9
      If Whore.GetFactionRank(_T_NMS_WhoreFaction) == 2
         Whore.SetFactionRank(_T_NMS_WhoreFaction, 0)
      Elseif Whore.GetFactionRank(_T_NMS_WhoreFaction) > 2 && Whore.GetFactionRank(_T_NMS_WhoreFaction) < 7
         Whore.SetFactionRank(_T_NMS_WhoreFaction, 7)       
      Endif         
   Endif   
EndFunction 

Function Martyr(Actor Mark)
   Actor Fam = Family.GetReference() as Actor
   Utility.Wait(0.1)
   If Fam == Mark
      If _T_JustOzarked.GetValue() == 0
         Form Piece = Mark.GetEquippedWeapon() as Form
         Actor Flunky = ExPrisoner.GetReference() as Actor
         _T_JustOzarked.SetValue(1)
         If Piece != None
            Mark.UnequipItem(Piece)
         Endif   
         Utility.Wait(0.1)
         DismissButFollow(Flunky)
         Utility.Wait(0.1)
         If Mark.IsInFaction(_T_RatFaction)
            Mark.SetFactionRank(_T_RatFaction, 4)
         Endif          
         Utility.Wait(0.1)
         Mark.RemoveItem(VendorItemWeapon, -1, True, PlayerRef)
         Mark.SetRelationshipRank(PlayerRef, -2)
         PlayerRef.SetRelationshipRank(Mark, -2)   
         Mark.SetFactionRank(_T_HistoryFaction, 6)
         Utility.Wait(0.1)
         FollowMe(Mark)
         Utility.Wait(0.1)
         manny_up_list_AvoidNPC.AddForm(Mark)           
      Else   
         _T_JustOzarked.SetValue(0)
         Family.Clear()
      Endif 
   Else   
      If _T_JustMartyred.GetValue() == 0
         Form Piece = Mark.GetEquippedWeapon() as Form
         Actor Flunky = ExPrisoner.GetReference() as Actor
         _T_JustMartyred.SetValue(1)
         If Piece != None
            Mark.UnequipItem(Piece)
         Endif   
         Utility.Wait(0.1)
         Dismiss(Flunky)
         Utility.Wait(0.1)
         If Mark.IsInFaction(_T_RatFaction)
            Mark.SetFactionRank(_T_RatFaction, 4)
         Endif           
         Utility.Wait(0.1)
         Mark.RemoveItem(VendorItemWeapon, -1, True, PlayerRef)
         Mark.SetRelationshipRank(PlayerRef, -2)
         PlayerRef.SetRelationshipRank(Mark, -2)   
         Mark.SetFactionRank(_T_HistoryFaction, 6)
         Mark.SetFactionRank(_T_MartyrFaction, 1)
         Flunky.SetFactionRank(_T_MartyrFaction, 2)
         Utility.Wait(0.1)
         FollowMe(Mark) 
         Utility.Wait(0.1)
         Mark.RemoveFromFaction(_T_NMS_CuckFaction)
         Utility.Wait(0.1)
         manny_up_list_AvoidNPC.AddForm(Mark)
         Cuck.Clear()
         Utility.Wait(0.1)
         If Mark.IsInFaction(_T_RatFaction)
            Mark.SetFactionRank(_T_RatFaction, 4)
         Endif               
      Else   
         _T_JustMartyred.SetValue(0)
      Endif 
   Endif    
EndFunction

Function SetHogtie(actor Slave)
   Actor Stooge = CampFollower.GetReference() as Actor
   String SlaveName = Slave.GetBaseObject().GetName()
   Utility.Wait(0.1)
   If Stooge == Slave 
      _T_CFRestrained.SetValue(3)
      _T_PattyHurst.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Attention bonding + 1</font>")        
   Else
      _T_Restrained.SetValue(3)
      _T_BeatingCounter.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Discipline + 1</font>")      
   Endif   
EndFunction

Function SetHogtieGagged(actor Slave)
   Actor Stooge = CampFollower.GetReference() as Actor
   String SlaveName = Slave.GetBaseObject().GetName()
   Utility.Wait(0.1)
   If Stooge == Slave
      _T_CFRestrained.SetValue(5)
      _T_PattyHurst.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Attention bonding + 1</font>")      
   Else
      _T_Restrained.SetValue(5)
      _T_BeatingCounter.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Discipline + 1</font>")      
   Endif   
EndFunction

Function SetNormaltie(actor Slave)
   Actor Stooge = CampFollower.GetReference() as Actor
   String SlaveName = Slave.GetBaseObject().GetName()
   Utility.Wait(0.1)
   If Stooge == Slave 
      _T_CFRestrained.SetValue(4)
      _T_PattyHurst.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Attention bonding + 1</font>")       
   Else
      _T_Restrained.SetValue(4)
      _T_StockHolm.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Irrational Affection + 1</font>")      
   Endif   
EndFunction

Function SetNormaltieGagged(actor Slave)
   Actor Stooge = CampFollower.GetReference() as Actor
   String SlaveName = Slave.GetBaseObject().GetName()
   Utility.Wait(0.1)
   If Stooge == Slave 
      _T_CFRestrained.SetValue(6)
      _T_PattyHurst.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Attention bonding + 1</font>")     
   Else
      _T_Restrained.SetValue(6)
      _T_StockHolm.Mod(1)
      Debug.Notification("<font size='20'>"+Slavename+" Irrational Affection + 1</font>")      
   Endif   
EndFunction

Function SetFree(actor Slave)
   Actor Stooge = CampFollower.GetReference() as Actor
   Utility.Wait(0.1)
   If Stooge == Slave 
      _T_CFRestrained.SetValue(0)
   Else
      _T_Restrained.SetValue(0)    
   Endif   
EndFunction

 

Edited by Tentacus
Link to comment

After getting Thaena for the bajillionth time I decided to give her unique dialogue, she's now one of the NPCs that will always say yes if you ask for the reward. I'll also probably add a little unique dialogue to Cucking the Jarl.

 

1816158336_Untitled-1copy.jpg.d021c4f02b8d18495acdd0684eaeb575.jpg

Link to comment

I had quite a fun testing session today. The new Thaena dialogue worked well, and I tricked her into becoming a whore and for the first time the RNG went so that she liked it... It was pretty amusing that a Jarl's wife is the only time I've gotten a happy whore.... and literally nobody wanted to pay full price for her. (LOL) With Farkas being her first time and setting the bar at a measly 15 gold.

 

836138214_ScreenShot503copy.jpg.a34a7b0ed0459dcd700f363a38e4315e.jpg

Link to comment

Hey, I've been absolutely loving the Ratcatcher topics, just lost 8 hours of my life and didn't realize it 'til I got hungry. Some dialogues actually made me blush and I thought I was the kinky one. Well done. Haven't posted many screenshots 'cause work and stuff, but I'm slowly going through the topics, and getting some new names with the 'no repeat npcs' update. Crossing my fingers to get Helga and her unique dialogue someday. The dedication put into this mod is insane, thanks for all the hard-work putting this together, its the only SL rp/dialogue mod I actually use. Looking forward to my vacation next week so I can finally do a deep dive into NMS and give it the time it honestly deserves. 

 

20221122215726_1.jpg

Link to comment
10 hours ago, Tentacus said:

After getting Thaena for the bajillionth time I decided to give her unique dialogue, she's now one of the NPCs that will always say yes if you ask for the reward. I'll also probably add a little unique dialogue to Cucking the Jarl.

 

I think the RNG gods in my play would agree with that.20221029221740_1.jpg.6742275c8fcd4f833f65bf15c005acd4.jpg

Link to comment
41 minutes ago, Carnificina said:

Hey, I've been absolutely loving the Ratcatcher topics, just lost 8 hours of my life and didn't realize it 'til I got hungry. Some dialogues actually made me blush and I thought I was the kinky one. Well done. Haven't posted many screenshots 'cause work and stuff, but I'm slowly going through the topics, and getting some new names with the 'no repeat npcs' update. Crossing my fingers to get Helga and her unique dialogue someday. The dedication put into this mod is insane, thanks for all the hard-work putting this together, its the only SL rp/dialogue mod I actually use. Looking forward to my vacation next week so I can finally do a deep dive into NMS and give it the time it honestly deserves. 

 

20221122215726_1.jpg

 

Thanks that really means a lot, also nice screenshot. I should get this update out this week and it will be the last of the year. I think you guys will love it as it adds A LOT of RP value. In addition to the Beggars and Thaena dialogue there is one other new Ratcatcher topic I haven't talked about yet that will act as a template for more and add an entirely new (for this mod) Element.

Link to comment

Think i've gone to far down the rabbit hole with Camilla with other mods as she's missing any new topic (she has been used by slave run then married her for make skyrim straight again and then had her slave trained in mias lair from sexlab sex slaves)

 

Out of curiosity what are the conditions for it to appear?

Link to comment
1 hour ago, pinky6225 said:

Think i've gone to far down the rabbit hole with Camilla with other mods as she's missing any new topic (she has been used by slave run then married her for make skyrim straight again and then had her slave trained in mias lair from sexlab sex slaves)

 

Out of curiosity what are the conditions for it to appear?

The Golden Claw quest must be started. Basically it's meant so you talk to her at the bridge just like with Amorous Adventures. You can not have any active NMS follower, no Prisoner, ex prisoner or Camp Follower.  (A follwing house slave is fine but not very immersive... lol.)

 

Beyond that your speech must be above 25 or you must have the illusion  perk Hypnotic Gaze to get her to come willingly. It should work even if Lucan is dead. 

 

If you already did Golden Claw you can still get her if she comes up on Notice board but there's no unique dialogue beyond her being a hoe (Insert MXR voiceover) and instantly saying yes to sex and prostitution. Likewise you can get her if you rescue Lucan, victimize him and do the Family trade in. :) 

 

Unlike Ysolda Camilla isn't a furry so she will come with you if you are a cat or lizard but makes it clear she isn't down to bone.

Edited by Tentacus
Link to comment

Update:

 

I figured out a way to allow you to pimp out following house slaves. You can only do this when you don't have another NMS Follower/Camp Follower. Other following house slaves are fine as well as the new Beggar minion followers that will be in the next version. So theoretically you could have up to 4 girls/guys you swap between to pimp at any given time When you do "hire" an existing follower or a rescue, the House slave will be automatically dismissed from the whore role and resume following normally (Though you'll probably have to fix their outfit).

 

I would have expanded the house slave slots but that is gonna take a significant amount of labor as I have to edit a lot of script properties so that'll be at some future time. I really wish I'd thought to add a keyword to the house slave aliases sooner, I got out of the habit of thinking of using keywords at all since unlike Fallout 4 you can't dynamically attach and remove them to and from actors.

 

325562558_ScreenShot507copy.jpg.10233df45101ee19adb12de8bcc61d54.jpg

Edited by Tentacus
Link to comment

@Tentacus I may have figured out a way for the dialogue option to claim ownership of an NMS slave's home, to counter the abuse potential of saying that all of their possessions belong to the PC. An option is to have it check whether the current cell you are in is the dismiss location they return to when you tell them not to follow, or generally check the property of the actor for their home cell.

 

So therefore, as long as they meet the reach the necessary training level the dialogue could then check when clicked if you are actually in their home cell or dismiss location. Excluding player homes already owned by the Player Character (PC), Vanilla (including DLCs), modification added and/or already claimed by PC. Already claimed are ones which you have done this dialogue option on before. As well as not a guest of an Inn or a member of the waitress type Inn Staff, but in the case of Inns and ownership that they are that Inn's Inn Keeper. As well as current home cell ownership to make sure that they actually own the cell and it's contents.

Edited by Leoosp
Link to comment
1 hour ago, Leoosp said:

@Tentacus I may have figured out a way for the dialogue option to claim ownership of an NMS slave's home, to counter the abuse potential of saying that all of their possessions belong to the PC. An option is to have it check whether the current cell you are in is the dismiss location they return to when you tell them not to follow, or generally check the property of the actor for their home cell.

 

So therefore, as long as they meet the reach the necessary training level the dialogue could then check when clicked if you are actually in their home cell or dismiss location. Excluding player homes already owned by the Player Character (PC), Vanilla (including DLCs), modification added and/or already claimed by PC. Already claimed are ones which you have done this dialogue option on before. As well as not a guest of an Inn or a member of the waitress type Inn Staff, but in the case of Inns and ownership that they are that Inn's Inn Keeper. As well as current home cell ownership to make sure that they actually own the cell and it's contents.

 

Do you have a specific dialogue condition to do that?

Link to comment
2 hours ago, Tentacus said:

 

Do you have a specific dialogue condition to do that?

 

IsCellOwner - the CreationKit Wiki (uesp.net)

IsInMyOwnedCell - the CreationKit Wiki (uesp.net)

GetInCurrentLoc - the CreationKit Wiki (uesp.net)

GetKeywordDataForCurrentLocation - Creation Kit

GetFactionRank - Creation Kit

GetActorOwner - Cell - the CreationKit Wiki (uesp.net)

GetWithinPackageLocation

GetDistance

 

Since locations have keywords then you can check whether the location has the Inn Keyword or other relevant keyword(s).  As well as check their location with conditions, their faction membership rank and actor base owner of location. It's my opinion that GetWithinPackageLocation condition is supposed to check whether an actor is within a location specified by an AI package. So, if the NPC (actor) is running or using a package for when they return home and/or are at home then checking a specified package for the going home. If that AI package location specification matches their current location and yours so it would then be checkable. All that would then be required is a FormList of claimed locations and/or already claimed locations to check if the current location is in that list. Each time you successfully claim a new location, it would be added to that list after completing the claiming ownership of the location.

 

Have the IsCellOwner condition check whether they and/or their faction is the owner with "IsCellOwner", NMS slave dialogue's editorID and it must return a "1". For the Inn check have it do "GetKeywordDataForCurrentLocation", check against the keyword for the location and check that it doesn't have (must return 0) a location type of "Inn".

Edited by Leoosp
Link to comment

Apparently someone made a Spanish translation. I don't remember giving permission. I couldn't find any DMs or mentions in this post either. To be very clear I don't believe one needs permission to do a translation if it's a patch, that would be pretty hypocritical since this mod functions similar to a patch for TNB (Though it is not one) BUUUUT... It would be nice. 

 

If I was asked through some other channel or gave a blanket permission for all my mods in the past (Very possible) then whatevs.... Just to be clear I am totally okay with people doing translations. HOWEVER now I feel guilty because At the rate I add new dialogue It's a fools errand, because you'll have to add like 400 lines every few weeks., not to mention the fact that I revise lines fairly often. :) 

 

Dunno if it'll even work with the current version.

 

Anyway it's on this page:

 

Link to comment
11 hours ago, Leoosp said:

 

IsCellOwner - the CreationKit Wiki (uesp.net)

IsInMyOwnedCell - the CreationKit Wiki (uesp.net)

GetInCurrentLoc - the CreationKit Wiki (uesp.net)

GetKeywordDataForCurrentLocation - Creation Kit

GetFactionRank - Creation Kit

GetActorOwner - Cell - the CreationKit Wiki (uesp.net)

GetWithinPackageLocation

GetDistance

 

Since locations have keywords then you can check whether the location has the Inn Keyword or other relevant keyword(s).  As well as check their location with conditions, their faction membership rank and actor base owner of location. It's my opinion that GetWithinPackageLocation condition is supposed to check whether an actor is within a location specified by an AI package. So, if the NPC (actor) is running or using a package for when they return home and/or are at home then checking a specified package for the going home. If that AI package location specification matches their current location and yours so it would then be checkable. All that would then be required is a FormList of claimed locations and/or already claimed locations to check if the current location is in that list. Each time you successfully claim a new location, it would be added to that list after completing the claiming ownership of the location.

 

Have the IsCellOwner condition check whether they and/or their faction is the owner with "IsCellOwner", NMS slave dialogue's editorID and it must return a "1". For the Inn check have it do "GetKeywordDataForCurrentLocation", check against the keyword for the location and check that it doesn't have (must return 0) a location type of "Inn".

 

I'll have to give this another try. Chances are that when I tried originally to make the script work anywhere and failed, I got burned out and missed the obvious that I could just use conditions to make the current script less irresponsible. We'll see.

 

On a side note if any eager beaver wants to compile a list of NPCs who are essential NOT THROUGH Aliases and can be made unessential with a script that would be extremely helpful. :) 

Edited by Tentacus
Link to comment
3 minutes ago, Tentacus said:

 

I'll have to give this another try. Chances are that when I tried originally to make the script work anywhere and failed, I got burned out and missed the obvious that I could just use conditions to make the current script less irresponsible. We'll see.

 

@Tentacus When I say NMS slave dialogue's editorID it is meant that it needs to be the editorID of the slave you are talking to!

Edited by Leoosp
Link to comment

Yeeeaaah... gonna be honest looking it over again. It is not worth the effort to me to try to make the Cell ownership topic less exploitable... and honestly I kind of like the flexibility of being able to use it in... creative ways. Anyway... Back to testing. I've had a busy morning but if things go well, I might have the new update out tomorrow.

Link to comment

It seems as if the Hreinn date is broken, he just becomes a full on follower. Of course he's the one member of the family who's date I didn't test before the last update. I am assuming since nobody complained nobody tried to date him, too bad I think the writing is pretty good... or will be when I fix it :D 

 

Edit: Yep... Just left the condition for Hreinn out of the greet so none of his date dialogue is accessible... *sigh*.

 

590384575_Untitled-1copy.jpg.7a4456034f266392af42b316b692a5e9.jpg

Edited by Tentacus
Link to comment
On 12/5/2022 at 8:37 PM, Tentacus said:

Unlike Ysolda Camilla isn't a furry so she will come with you if you are a cat or lizard but makes it clear she isn't down to bone.

Yo wait. Ive been trying to get ysolda(for reasons) but i havent been able to get her to show up on the board. Does she not show up if you are not khajit or something?

Link to comment

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

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use