Jump to content

Recommended Posts

Posted
1 hour ago, Ariaan said:

If the follower dies, handle it with FSM

I am assuming that by "Dies" - you mean enters bleedout

 

1 hour ago, Ariaan said:

If the player runs away and leave the follower behind, the follower is enslaved (handled via FSM).

That is the current outcome with FSM - however for a follower to be enslaved

  • The follower must have been assaulted after being defeated
  • To be a valid master an aggressor has to have either hit or had sex with the follower during the encounter
  • The selected aggressor must also be a valid FSM Master and be ActorTypeNPC or in the list of valid Slaver Races in Utility.json
  • Each aggressor can only enslave one Follower
  • The aggressor must be within 200' of the Follower when the enslave event fires.
  • The player must either be > 25' from the Follower or also have been Defeated.

 

 

Posted
19 hours ago, Bane Master said:

I am assuming that by "Dies" - you mean enters bleedout

100% Bane, I mean enter bleedout.

 

19 hours ago, Bane Master said:

That is the current outcome with FSM - however for a follower to be enslaved

  • The follower must have been assaulted after being defeated
  • To be a valid master an aggressor has to have either hit or had sex with the follower during the encounter
  • The selected aggressor must also be a valid FSM Master and be ActorTypeNPC or in the list of valid Slaver Races in Utility.json
  • Each aggressor can only enslave one Follower
  • The aggressor must be within 200' of the Follower when the enslave event fires.
  • The player must either be > 25' from the Follower or also have been Defeated.

Yip, I'm aware of these requirements.  I want to change the requirements to be only:

  • The selected aggressor must be ActorTypeNPC or in the list of valid Slaver Races in Utility.json
  • Each aggressor can only enslave one Follower
  • The aggressor must be within 200' of the Follower when the enslave event fires.
  • The player must either be > 25' from the Follower or also have been Defeated.

By no means do I yet understand all of your script, so please, what I might be assuming the script does can be completely wrong!  And if I am wrong, I am really sorry! 

 

I am looking at State BleedOut.  Your description says that "This state handles Followers that have not been assigned to SLDefeat or SLDefeatNVN slots".  

In its OnBeginState it checks if fsm_SLDefeatMon is True.  If it is true, then it directs the script back to Monitor.  If fsm_SLDefeatMon is False, it performs a few more checks and if those meet the requirement, then the follower is sent to `FSMEnslave` State.

 

So at the moment, even though SLDefeat is not monitoring the Follower (when SLDefeat is installed but it is Disabled in respect of the follower, i.e. when NPC vs NPC is set to Disabled in SLDefeat MCM), the BleedOut State doesn't send the follower to FSMEnslave State because fsm_SLDefeatMon is True irrespective of this setting in the SLDefeat MCM.

 

This is why I've been asking about fsm_SLDefeatMon.  In my mind it should have a False value if NPC vs NPC is set as Disabled in SLDefeat and the Follower goes into bleedout, and then OnBeginState event of the BleedOut State will direct the script to BleedOut State's OnUpDate Event, which can then potentially send it to FSMEnslave State (GoToState("FSMEnslave")).  But this doesn't currently happen because to me it looks like fsm_SLDefeatMon is always True when SLDefeat is installed, irrespective of what the NPC vs NPC boolean value is.

 

If I'm completely missing the boat I apologize! 

 

Posted
22 hours ago, Ariaan said:

If I'm completely missing the boat I apologize! 

I don't think you are but I'm struggling to get a clear idea of what the ultimate goal is.

 

I think you want followers to be enslaved if they go into bleedout with defeat installed but no defeat assault having taken place. Is that correct?

Posted
2 hours ago, Bane Master said:

I think you want followers to be enslaved if they go into bleedout with defeat installed but no defeat assault having taken place. Is that correct?

That's 100% correct Bane. Essentially if the follower is in Bleedout state (and they don't auto recover from this due to NFF setting) and I (the player) run away and leave them behind ("The player must either be > 25' from the Follower or ...") , or if I die and go into SLDefeat state ("... or also have been Defeated"), then the follower goes into FSMEnslave state.

Posted
56 minutes ago, Ariaan said:

That's 100% correct Bane.

Ok - I need to give this some thought as I think any change needs to be an choice in FSM rather than implied by a setting in Defeat so as to not affect other users unless they explicitly choose the option.

Posted
1 hour ago, Bane Master said:

not affect other users unless they explicitly choose the option

Oh no, I think you might have misunderstood me.  I didn't expect or for one moment think you will be making changes in FSM at all. I am planning and trying to make some changes in my own local copy of FSM in order for FSM on my machine to work in the manner that I described to you. If a number of people are interested in having that option, and you feel like including it, then yes, it should definitely only be a choice in FSM and not implied!  There are plenty of people who love it just the way it currently is! 

Posted (edited)
22 hours ago, Ariaan said:

I am planning and trying to make some changes in my own local copy of FSM in order for FSM on my machine to work in the manner that I described to you.

OK  No problem.

 

It would be incredibly difficult to remove the SL assaulted requirement as the whole SLDefeat plugin is built around using that to identify potential slaves and Masters but I think I have a solution for you.

 

In the FSM system Menu

 

1) Disable the Defeat Plugin

2) Set Follower Bleedout Enslavement to a % of your choice (or 100% for testing)

 

This will cause Bleedout Enslavement to be handled by fsm_followerupkeepaliasscript rather than fsm_sldefeatfolloweraliasscript. 

fsm_followerupkeepaliasscript enslavement does not require an SL assault to have occurred. 

 

Please note that the other standard requirements for enslavement still apply. If you  want to make any tweaks to enslavement trigger conditions they are in Function bIsProtected() at line 165 of fsm_followerupkeepaliasscript.

Edited by Bane Master
Posted
On 9/14/2025 at 1:03 PM, Bane Master said:

I think I have a solution for you

Oh wow! I didn't think of that. Just Disable the Defeat Plugin... Such an easy way to get what I was looking for! Thanks a million @Bane Master!

 

I was making myself ready for hours and hours of learning (on how to do mod dev for Skyrim using CK, Papyrus and xEdit) and then editing your script.  The only game dev experience I have is intermediate level coding and development in Unity.

Posted
On 9/14/2025 at 1:03 PM, Bane Master said:

In the FSM system Menu

 

1) Disable the Defeat Plugin

2) Set Follower Bleedout Enslavement to a % of your choice (or 100% for testing)

I made these changes, and also had to specifically disable NPC vs NPC in SLDefeat. BleedOut is then, like you said, handled by fsm_followerupkeepaliasscript.

 

I've now picked up another peculiarity.  Inside FSMEnslave you use GetAggressorSlaver function that's defined in fsm_utilityscript.psc to get the name of the kMaster.

Actor kMaster = FSM.GetAggressorSlaver(kActor, 4096.0)

However, what I've picked up is that when a player is inside a cave, it always returns kMaster as None (well, for me it always did. Maybe in some caves it doesn't).  I then had a closer look at GetAggressorSlaver.  What I've picked up is that when I'm inside a cave it returns the same ridiculously large distance between the follower and the slaver. 

 

kFollower.GetDistance(kSlaver) = 340282346638528859811704183484516925440.000000

 

And due to that it doesn't want to allocate a slaver because it's larger than the 4096 threshold. 

Obviously if I omit a distance and just use Actor kMaster = FSM.GetAggressorSlaver(kActor) a slaver is allocated when inside a cave.  But ideally I would like the enslavement to be to a slaver that is in the vicinity of the cave I am in, so I would like to use some distance check. Perhaps not 4096. I thought of using 1512768 (the distance between Whiterun and Riverwood).

 

But when I'm inside a cave it always returns a distance of 340282346638528859811704183484516925440.000000

It's like the function doesn't work properly when inside the cave. Have you come across this Bane?  Is there a way to fool the GetDistance function and pretend the follower is outside the cave when doing the distance calculation?  

 

I'm including the filtered and full papyrus script for you.

 

FSM Papyrus Log.txt Papyrus.0.log

Posted (edited)
1 hour ago, Ariaan said:

It's like the function doesn't work properly when inside the cave. Have you come across this Bane? 

GetDistance only works when Objects are in the same interior, or same worldspace. Your result indicates that the Actors are not in the same interior. I'm not sure how this is happening - what interior are you testing in?

Edited by Bane Master
Posted (edited)
2 hours ago, Bane Master said:

what interior are you testing in?

I've tested inside caves, as well as on the big map.  On the big map (i.e. open world) it works perfectly fine. It's when I'm inside a cave that I get these crazy big numbers.  One of the caves is Uttering Hills Cave, and the other was Movarth's Lair . Does that help?

 

So what you are telling me is this should not be happening?  Something else that I'm wondering about is if you look at the EditorID of the potential masters it is iterating through, it seems to always be the same subset of master EditorIDs.  I'm not sure why?  I did the testing on different locations across the map.

 

Any ideas of where I should be troubleshooting?

Edited by Ariaan
Posted (edited)
2 hours ago, Ariaan said:

it seems to always be the same subset of master EditorIDs.

That would explain what you are seeing as those masters would not be in the same interior as the follower.  In that case  GetDistance() would return a huge number.

 

The Master IDs should be updated for the cave you are in so that gives me a potential issue to explore - I'll take a look.

 

Final question - what version of Skyrim are you using?

Edited by Bane Master
Posted (edited)
2 hours ago, Ariaan said:

I've been doing the testing on Skyrim 1.6.1170

Ok - I've made a small change to the script to ensure that Actors from previous fights are properly cleared from the kAggressors[] array in fsm_followerupkeepaliasscript

 

I've tested in both Uttering Hills and Halted Stream Camp interior and enslavement worked as expected, so import these into your test setup and see what happens.

 

There's some debug in the console that shows the array being reset for a new fight and then growing as aggressors are detected

 

fsm_followerupkeepaliasscript.pex fsm_followerupkeepaliasscript.psc

Edited by Bane Master
Posted
19 hours ago, Bane Master said:

I've tested in both Uttering Hills and Halted Stream Camp interior and enslavement worked as expected

Thanks for the new files Bane.  I saw it is creating new entries in the in-game console (~). It is still not working on my test environment though. It is still trying to use the same slavers, 000C5697 & 000C5696.  And I still get the same ridiculously long distance between follower and slaver (kFollower.GetDistance(kSlaver) = 340282346638528859811704183484516925440.000000).

 

If it is working on your side there must be something different in the environments. I'm including my environment and papyrus log,

 

I'll test it in VR also a bit later.

Papyrus.0.log MO2 mod list.txt

Posted
1 hour ago, Ariaan said:

It is still trying to use the same slavers, 000C5697 & 000C5696

Those are the Bandits located in UtteringHillsCaveExterior01 so checking the distance to them whilst inside Uttering Hills will indeed generate that result. 

 

I took Iona to UHC exterior and got her enslaved by those bandits - then killed them to free her, took her inside and she was enslaved by the next group of bandits with no issues.

 

I suspect the issue is with your save game or test environment as I cannot reproduce this issue.

 

Are you playing with a new save in test or trying the updated scripts on your old save? 

 

Also in your load order all the Follower Mods are active - I assume for Playtesting you disable all but one?

 

Can you share your Debug Code Please

Posted
11 minutes ago, Bane Master said:

Are you playing with a new save in test or trying the updated scripts on your old save? 

I tried the new script on a current save.  I've checked the save I'm using with ReSaver and it doesn't have any unattached instances, undefined elements, scripts with no or missing parents.  

 

17 minutes ago, Bane Master said:

Also in your load order all the Follower Mods are active

All of their esp & esm files are disabled in the Plugins section, so they don't get loaded. I only have them in the load order so their script files are available for when I compile any psc files.

 

I'm attaching my debug code

 

26 minutes ago, Bane Master said:

I suspect the issue is with your save game

Let me start a new game and see if that solves the error. Will let you know.

fsm_utilityscript.pex fsm_followerupkeepaliasscript.pex fsm_followerupkeepaliasscript.psc fsm_utilityscript.psc

Posted
22 hours ago, Ariaan said:

I tried the new script on a current save. 

I may have worked out what is going on in your test.

 

When combat ends for an Actor FSM waits 60 seconds before resetting their aggressor list in case they enter bleedout and recover to continue fighting.

 

If a fight takes place outside the entrance to a cave and the follower then enters the cave and starts combat the (dead) Aggressors from Outside won't have been cleared and hence would give the GetDistance error when checked.

 

I'll add an OnLoad clear to cover this scenario

Posted

What's New in Version 1.731

Released 

  • The list of potential Bleedout Mode aggressor Slavers will now be cleared when a follower passes through a Load Door
Posted (edited)
3 hours ago, Bane Master said:

What's New in Version 1.731

Released Just now

  • The list of potential Bleedout Mode aggressor Slavers will now be cleared when a follower passes through a Load Door

 

It's been interesting, and a pleasure to watch, you and @Ariaan have that recent, clear, civilised, and courteous discourse, leading to a useful update.  Thanks for that.

Edited by DonQuiWho
Posted (edited)
3 hours ago, r235711 said:

After updating, the sex scene between the master and slave starts on the floor instead of on a bed.

Staring with Version  1.73 Use beds is disabled in slave SL scenes

Edited by Bane Master
Posted
6 hours ago, Bane Master said:

バージョン1.73から、スレーブSLシーンでベッドの使用が無効になります

Thanks for your reply. Is there a way to enable the use of beds?

Posted
25 minutes ago, r235711 said:

Thanks for your reply. Is there a way to enable the use of beds?

Not atm but l will look at adding an MCM toggle next time I update

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