Fallout 3
0 of 0

File information

Last updated

Original upload

Created by

Yukichigai

Uploaded by

Yukichigai

Virus scan

Safe to use

Tags for this mod

About this mod

Fixes various issues with the Mesmetron which caused crashes and made enslavement unfairly difficult.

Permissions and credits
UPDATE: Complete revamp of the fix, per numerous suggestions from CountFuzzball.  The main effect is now tracked via a script associated with the worn collar object, which prevents variables from being cleared between save/load.  The enslavement quest also keeps tracks of enslaved NPCs and where they originally came from, returning their bodies (made invisible) to the original enslavement location so if and when they respawn it's in the appropriate location.  If you free a slave, they run back to their original placement location.  Finally, freed and "redeemed"/dead slaves no longer remain in the freed slave faction, and thus will not remain friendly to you across multiple respawns.

UPDATEx2: Minor change which removes the body-hiding portion of the code, as it may have been preventing respawns.  As a side-effect, you will encounter dead bodies placed where the slaves were originally taken from.  Apologies, but this seems unavoidable and is preferable to the alternative.

UPDATEx3: Another update to take care of a rare case where the "Mezzed" variable that ensures only one person can be mezzed at a time wouldn't get reset.  Also fixed Red's enslavement package so that she will stay in Paradise Falls after enslavement, and ensured you can always interact with Wasteland Captives if you decide to enslave them.
-----------
Ahh, the Mesmetron. Wonderful idea, horrid execution. Nearly everything about the actual enslavement process is bugged, from the script tracking it to how the game handles the aftermath of enslaving someone. This bugfix addresses multiple issues. I'm about to explain them all, in boring detail, so if you aren't a coder or don't care you may want to skip down to the ''TL;DR'' section.


THE BUGS

First off, enslaving an NPC is ridiculously difficult. More often than not you'll return to Paradise Falls only to hear Grouse complain about not making money on dead slaves. This is particularly irritating when you fast-traveled from somewhere relatively close, over a distance that the slave should have survived.

The reason behind this is a section of code in script which tracks when the NPC is no longer being rendered. Once that happens the script kills and disables the NPC for cleanup purposes; the problem is that Grouse checks if the NPC is dead, regardless of if they have been disabled.

Easy enough fix, just make it check if the NPC is disabled, right? Well, no. That also brings up another bug (or ''feature''), which is how you can use the Mesmetron to clear out an area of NPCs. Once you enslave an NPC they're gone forever; this applies to RESPAWNING NPCs, notably NPCs like the Regulator/Talon Company hit squad.

Another issue disabling NPCs causes is crashes when removing collars from the recently enslaved. That problem is actually caused by two issues: the disabling, and when it is done. Disabling the NPC is triggered whenever they aren't being actively rendered, under the assumption that this only happens when, essentially, you aren't looking. As you can guess, that assumption is wrong; NPCs can be considered to be ''not rendered'' when, among other things, you enter your Pip-Boy menu, or even when you converse with them. It's the last one that causes the crashing issue: removing the collar runs a check which can cause the NPC to be disabled if they aren't being rendered, and usually in a conversation that is the case. (Not always, but usually)

And that leads to ANOTHER issue: if you enslave an NPC, then free them, you will no longer be able to converse with them other than to hear them thank you for rescuing them. This happens because the game adds them to a Freed Slave faction used for a number of random encounters, which has overriding dialogue. The dialogue is only meant to be heard in the context of those encounters, not on NPCs YOU have enslaved.

Atop that, there's issues with tracking the original stats of the enslaved NPC.  Hostility, factions, even the original location.  While the script is meant to track some of that information, engine bugs cause the variables which track it to be reset on certain occasions (usually save/load), while other things like the NPCs original location are not tracked.


THE FIXES

In order to fix all of these issues it necessitated a somewhat drastic overhaul of the Enslavement system, as well as some new Factions being added to the game.

The Enslavement script runs in much the same way, but has a new check thrown in to make sure it doesn't EVER perform ''cleanup'' on an NPC in the same cell as you. This prevents the game from crashing when you free an enslaved NPC. The ''cleanup'' process has been changed too: rather than killing the NPC immediately when they are de-rendered (such as when you fast travel), the game simply moves them into the Slave House located in Paradise Falls. There they will remain (relatively) safe.

Slaves are only ''cleaned up'' a day after their arrival.  They will linger inside the Paradise Falls slave house for a day, whereupon their NPC variables and attributes will be reset, they will killed but NOT disabled, and they will be moved back to the original location they were captured in (or Farragut West if that information was not tracked).  This way if they are a respawning NPC they will reappear in approximately the area they were originally supposed to.

If you decide to be gracious (y'know, after you put them out by enslaving them in the first place) and remove the collar from an NPC, the game will now add them to a completely new ''Freed Slave'' faction, separate from the one used for encounters. This faction has no extra dialogue, meaning the NPCs will still speak as normal. The new faction behaves like the old one in all other ways, particularly by making the NPCs friendly towards you.  The NPC will remain in this faction long enough to return to their original location at the start of the game, at which point they will be removed from the faction.  This will prevent you from capturing and freeing NPCs to render certain hostile strongholds permanently friendly.

Finally, the bulk of the Enslavement effect has been transitioned from an object effect (whose variables can be reset randomly) to an object script, combined with support elements from a quest script.  The two scripts combined ensure that enslaved NPCs are properly tracked for the purposes of rewarding the player, as well as being cleaned up in a timely fashion.


TL;DR

- Slaves are only counted as ''dead'' by Grouse if they actually died

- Enslaving respawning NPCs doesn't remove them forever

- Freeing slaves doesn't remove their normal dialogue

- No crashes when removing collars

- Slaves stay in Paradise Falls for roughly one day before being removed