Uninstalling scripts vs leaving them in but replacing with b

Post » Sun Jun 24, 2012 2:35 pm

The above is wrong, as illustrated:

This:
event onLoad()	on = true	while on == true		chooser = RandomInt(1,3)			rndWaitTimer = RandomFloat(10.0, 30.0)		wait(rndWaitTimer)			if chooser == 1				self.PlayAnimation("PlayAnim01")				mySFX.play(self)				wait(0.5)				placeAtMe(FallingDustExplosion01)				wait(3)				self.PlayAnimation("PlayAnim02")			elseif chooser == 2				self.PlayAnimation("PlayAnim02")							mySFX.play(self)			elseif chooser == 3				self.PlayAnimation("PlayAnim03")						mySFX.play(self)			endif	endWhile		endEventevent onUnLoad()	on = falseendEvent

Was changed to this in the USKP:
event OnCellAttach()	on = true	while on == true		if( !Is3DLoaded() )			on = False			Return		EndIf				chooser = RandomInt(1,3)			rndWaitTimer = RandomFloat(10.0, 30.0)		wait(rndWaitTimer)			if chooser == 1				self.PlayAnimation("PlayAnim01")				mySFX.play(self)				wait(0.5)				placeAtMe(FallingDustExplosion01)				wait(3)				self.PlayAnimation("PlayAnim02")			elseif chooser == 2				self.PlayAnimation("PlayAnim02")							mySFX.play(self)			elseif chooser == 3				self.PlayAnimation("PlayAnim03")						mySFX.play(self)			endif	endWhile		endEventevent OnCellDetach()	on = falseendEvent

I still see this in every game load:
[06/21/2012 - 02:05:59PM] warning: Function fxDustDropRandomSCRIPT..OnLoad in stack frame 0 in stack 221513 doesn't exist in the in-game resource files - using version from save

Which still throws these all the time:
[06/21/2012 - 02:06:25PM] error: Object reference has no 3Dstack:	[ (0001E68C)].Sound.Play() - "" Line ?	[ (000EBAA9)].fxDustDropRandomSCRIPT.OnLoad() - "" Line ?

The USKP version of the script was designed to fix this stupidity with the OnLoad() block, but Papyrus has decided to disobey the change outright. This should NOT be allowed to happen.

On new games obviously the change takes effect and these scripts remain silent when you're no longer near the objects. It should be noted that in every case where the game has complained in the logs about the object having no 3D, I'm nowhere near one of these things, which means the code for those scripts is executing continuously in the background - and my level 52 Argonian has encountered dozens of these objects which implies dozens of copies of this script are eating away at active script cycles for no good reason.
After reading this, I realized one thing. This is not a function (or in this case event) from a script being stored. It's the call to that function from the stack what is being stored. Not much a difference now, but should someone manage to edit saved games this could make a great difference. Also, should someone be able to find a way to edit the stack ingame this could be fixed without editing the save.

So is the stack what is giving us problems, not the scripts on their own.

EDIT: I didn't mean that there is no problem with scripts persistance, but I think we have been merging two different problems, script persistance and stack entries persistance.
User avatar
kirsty joanne hines
 
Posts: 3361
Joined: Fri Aug 18, 2006 10:06 am

Post » Sun Jun 24, 2012 8:55 am

I'm asking too ... because i can't see any benefits from this new system. Only problems. Or maybe i missed an awesome counterpart. If so, please, tell me.
User avatar
Gemma Woods Illustration
 
Posts: 3356
Joined: Sun Jun 18, 2006 8:48 pm

Post » Sun Jun 24, 2012 11:14 am

I'm asking too ... because i can't see any benefits from this new system. Only problems. Or maybe i missed an awesome counterpart. If so, please, tell me.
Well, the most noticeable advantage is the possibility to make comunication between different and independent mods possible, which is not a little advantage.
User avatar
Rachael Williams
 
Posts: 3373
Joined: Tue Aug 01, 2006 6:43 pm

Post » Sun Jun 24, 2012 5:52 am

as sollar mentioned above calling stop on all your quests will kill a huge chunk of your scripts as well as clear aliases and persisntece (for non specific refs)

For my mod, I created a separate "uninstall quest" that users can start from the console. It stops all the other quests my mod added, removes abilities that I added to the player, resets values I tweaked back to their defaults, displays a messagebox with the instruction to physically remove the .esp and .bsa, and then stops itself. Obviously not everyone will read the instructions for how to uninstall, but looking at the logs after it is run, it seems to work. I've seen other mods offering similar uninstall functions as well--I know Frostfall has one, for example. Indeed, as a mod user, I've tended to shy away from mods that don't have some sort of uninstallation procedure, for just the reasons detailed in this thread.
User avatar
Katey Meyer
 
Posts: 3464
Joined: Sat Dec 30, 2006 10:14 pm

Post » Sun Jun 24, 2012 5:57 am

I'm asking too ... because i can't see any benefits from this new system. Only problems. Or maybe i missed an awesome counterpart. If so, please, tell me.
Custom functions/remote access to 'em, arrays, while loops, states, properties allowing for the same script to do multiple things... there are all sorts of advantages. Post-uninstallation errors reported in one's log are no big deal to me provided they're not recurrent after saving with the script(s) absent. BSAs are a bit more appealing for Skyrim given it's easier to delete one archive, if need be, than it is to hunt down a bunch of PEX files.
User avatar
Charlotte X
 
Posts: 3318
Joined: Thu Dec 07, 2006 2:53 am

Post » Sun Jun 24, 2012 6:04 am

Well, the most noticeable advantage is the possibility to make comunication between different and independent mods possible, which is not a little advantage.

Thanks, well i had not realized that. Which kind of communications ? Without external scripts, it would though be still possible to use Keywords or others tricks (like SKSE String things) to talk to others mods.

Custom functions/remote access to 'em, arrays, while loops, states, properties allowing for the same script to do multiple things... there are all sorts of advantages. Post-uninstallation errors reported in one's log are no big deal to me provided they're not recurrent after the script is removed. BSAs are a bit more appealing for Skyrim given it's easier to delete one archive, if need be, than it is to hunt down a bunch of PEX files.

Yes of course, no doubt about arrays, etc. For that Papyrus is ten billion times better than Legacy. But scripts could have been saved in .esp too, i'd have preferred.
User avatar
Pete Schmitzer
 
Posts: 3387
Joined: Fri Sep 14, 2007 8:20 am

Post » Sun Jun 24, 2012 11:31 am

Spoiler

The above is wrong, as illustrated:

This:
event onLoad()	on = true	while on == true		chooser = RandomInt(1,3)			rndWaitTimer = RandomFloat(10.0, 30.0)		wait(rndWaitTimer)			if chooser == 1				self.PlayAnimation("PlayAnim01")				mySFX.play(self)				wait(0.5)				placeAtMe(FallingDustExplosion01)				wait(3)				self.PlayAnimation("PlayAnim02")			elseif chooser == 2				self.PlayAnimation("PlayAnim02")							mySFX.play(self)			elseif chooser == 3				self.PlayAnimation("PlayAnim03")						mySFX.play(self)			endif	endWhile		endEventevent onUnLoad()	on = falseendEvent

Was changed to this in the USKP:
event OnCellAttach()	on = true	while on == true		if( !Is3DLoaded() )			on = False			Return		EndIf				chooser = RandomInt(1,3)			rndWaitTimer = RandomFloat(10.0, 30.0)		wait(rndWaitTimer)			if chooser == 1				self.PlayAnimation("PlayAnim01")				mySFX.play(self)				wait(0.5)				placeAtMe(FallingDustExplosion01)				wait(3)				self.PlayAnimation("PlayAnim02")			elseif chooser == 2				self.PlayAnimation("PlayAnim02")							mySFX.play(self)			elseif chooser == 3				self.PlayAnimation("PlayAnim03")						mySFX.play(self)			endif	endWhile		endEventevent OnCellDetach()	on = falseendEvent

I still see this in every game load:
[06/21/2012 - 02:05:59PM] warning: Function fxDustDropRandomSCRIPT..OnLoad in stack frame 0 in stack 221513 doesn't exist in the in-game resource files - using version from save

Which still throws these all the time:
[06/21/2012 - 02:06:25PM] error: Object reference has no 3Dstack:	[ (0001E68C)].Sound.Play() - "" Line ?	[ (000EBAA9)].fxDustDropRandomSCRIPT.OnLoad() - "" Line ?

The USKP version of the script was designed to fix this stupidity with the OnLoad() block, but Papyrus has decided to disobey the change outright. This should NOT be allowed to happen.

On new games obviously the change takes effect and these scripts remain silent when you're no longer near the objects. It should be noted that in every case where the game has complained in the logs about the object having no 3D, I'm nowhere near one of these things, which means the code for those scripts is executing continuously in the background - and my level 52 Argonian has encountered dozens of these objects which implies dozens of copies of this script are eating away at active script cycles for no good reason.

http://www.creationkit.com/Save_File_Notes_%28Papyrus%29#Changing_Code:
Changing Code

The function will be noted as different and the old version of the function will be loaded from the save game and allowed to finish running. Further calls to the function will use the version in the archives/loose files. Exception: If a function was native and is now scripted, the stack will be thrown out instead of resumed.

When you see the error, you're already in the while loop. With the while loop running, the function never ends, so the old version of the function will always be loaded. If you've changed the script, and then go back to the falling dust activator that is giving the error, and get the OnUnload (or OnCellDetach in your new script) to run, then the loop and function will stop running. From then on, that activator will use the new version of the function/script.
User avatar
Amy Gibson
 
Posts: 3540
Joined: Wed Oct 04, 2006 2:11 pm

Post » Sun Jun 24, 2012 4:06 am

For the USKP, I wonder if including a bat file with reloadscript commands might help?
User avatar
Peter P Canning
 
Posts: 3531
Joined: Tue May 22, 2007 2:44 am

Post » Sun Jun 24, 2012 12:38 pm

After reading this, I realized one thing. This is not a function (or in this case event) from a script being stored. It's the call to that function from the stack what is being stored. Not much a difference now, but should someone manage to edit saved games this could make a great difference. Also, should someone be able to find a way to edit the stack ingame this could be fixed without editing the save.

So is the stack what is giving us problems, not the scripts on their own.

EDIT: I didn't mean that there is no problem with scripts persistance, but I think we have been merging two different problems, script persistance and stack entries persistance.

I wouldn't say the stack is giving up the problem... they are just storing the call stack when from the virutal machine. But it actually may be harder to determine if it's a valid call if someone were trying to clean it up from the save file.
User avatar
maria Dwyer
 
Posts: 3422
Joined: Sat Jan 27, 2007 11:24 am

Post » Sun Jun 24, 2012 5:07 am

For my mod, I created a separate "uninstall quest" that users can start from the console. It stops all the other quests my mod added, removes abilities that I added to the player, resets values I tweaked back to their defaults, displays a messagebox with the instruction to physically remove the .esp and .bsa, and then stops itself. Obviously not everyone will read the instructions for how to uninstall, but looking at the logs after it is run, it seems to work. I've seen other mods offering similar uninstall functions as well--I know Frostfall has one, for example. Indeed, as a mod user, I've tended to shy away from mods that don't have some sort of uninstallation procedure, for just the reasons detailed in this thread.

I did my shutdown through code, with a Shutdown button in the config menu:
bool Function Shutdown() ScenicCarriagesDialogueCarriageSystem.Stop() ScenicCarriagesMain11.Stop()   DialogueCarriageSystem.Start() if ScenicCarriagesDialogueCarriageSystem.IsRunning()  Debug.MessageBox("ScenicCarriagesDialogueCarriageSystem still running") EndIf If ScenicCarriagesMain11.IsRunning()  Debug.MessageBox("ScenicCarriagesMain11 still running") EndIf if ScenicCarriagesDialogueCarriageSystem.IsRunning()==False && ScenicCarriagesMain11.IsRunning() == False && DialogueCarriageSystem.IsRunning()==True  Debug.MessageBox("Shutdown successful, now UNINSTALL ScenicCarriages!")  Return True Else  Debug.MessageBox("Unable to stop current quests.  Shutdown failed.")  return False EndIf RealCartOn.SetValue(0)EndFunction
User avatar
Madeleine Rose Walsh
 
Posts: 3425
Joined: Wed Oct 04, 2006 2:07 am

Post » Sun Jun 24, 2012 8:23 am

http://www.creationkit.com/Save_File_Notes_%28Papyrus%29#Changing_Code:


When you see the error, you're already in the while loop. With the while loop running, the function never ends, so the old version of the function will always be loaded. If you've changed the script, and then go back to the falling dust activator that is giving the error, and get the OnUnload (or OnCellDetach in your new script) to run, then the loop and function will stop running. From then on, that activator will use the new version of the function/script.
So then why did something with an OnUnload() block not actually unload itself the way the vanilla script says? The fact that I've been back to known locations for this script and not been able to get it to go away points to the fact that all that stuff the wiki has in it is bad info for which we don't know the correct info.

If the OnUnload() event is bugged that only compounds things further.

For the USKP, I wonder if including a bat file with reloadscript commands might help?
I've already tried that, it doesn't help.
User avatar
dav
 
Posts: 3338
Joined: Mon Jul 30, 2007 3:46 pm

Post » Sun Jun 24, 2012 8:57 am

Custom functions/remote access to 'em, arrays, while loops, states, properties allowing for the same script to do multiple things... there are all sorts of advantages. Post-uninstallation errors reported in one's log are no big deal to me provided they're not recurrent after saving with the script(s) absent. BSAs are a bit more appealing for Skyrim given it's easier to delete one archive, if need be, than it is to hunt down a bunch of PEX files.
yeah. dont get me wrong. as a scripting language i think papyrus is great. i can certainly see why they chose this route. having loose scripts modular is a lot more powerful and from a developer point of view makes things easier i can imagine... up until you actually need to change something. publishing seems to be a one shot deal. as they say, "what has been seen cannot be unseen" by the save game. that save game is traumatized for life

the post uninstall errors i was getting were all referring to the missing scripts (property initialization errors were gone). and since 135 scripts were missing, 400+ errors were dumped. every single time the game is loaded, no matter how many times i saved afterward.
User avatar
Melis Hristina
 
Posts: 3509
Joined: Sat Jun 17, 2006 10:36 pm

Post » Sun Jun 24, 2012 11:37 am

So then why did something with an OnUnload() block not actually unload itself the way the vanilla script says? The fact that I've been back to known locations for this script and not been able to get it to go away points to the fact that all that stuff the wiki has in it is bad info for which we don't know the correct info.

All the variables in the onunload event are defined outside of the event, it's not failing for the variables being undefined. All of them are defined and would work should the instructions would be there (not to mention it wouldn't fail without instructions either). There is no reason for the event to fail if it's running. What happens is that the stack is storing the event and it's called but as it's not being defined in the script is not found.

The problem (in this case) is not that the event continue existing, is exactly the oposite. The event does not exist. It's existence has ceased after it's execution has finished as the wiki suggest, but is being called from the stack (or called by the engine using the info in the stack if your preffer).

Indeed, should the wiky be wrong, you won't be getting those errors.

So, we have two problems here. One, the scripts persistance and the other one, the persistance of the events in the stack.
User avatar
Alexander Horton
 
Posts: 3318
Joined: Thu Oct 11, 2007 9:19 pm

Post » Sun Jun 24, 2012 6:42 pm

So then why did something with an OnUnload() block not actually unload itself the way the vanilla script says? The fact that I've been back to known locations for this script and not been able to get it to go away points to the fact that all that stuff the wiki has in it is bad info for which we don't know the correct info.

If the OnUnload() event is bugged that only compounds things further.

That's weird... I changed the script too because I was getting sick of those errors:

Spoiler
event OnCellAttach()    UnregisterForUpdate()    on = true    rndWaitTimer = RandomFloat(10.0, 30.0)    RegisterForSingleUpdate(rndWaitTimer)endEventEvent OnUpdate()    if (on == false)        return    endif    chooser = RandomInt(1,3)    if chooser == 1        self.PlayAnimation("PlayAnim01")        mySFX.play(self)        wait(0.5)        placeAtMe(FallingDustExplosion01)        wait(3)        self.PlayAnimation("PlayAnim02")    elseif chooser == 2        self.PlayAnimation("PlayAnim02")        mySFX.play(self)    elseif chooser == 3        self.PlayAnimation("PlayAnim03")                mySFX.play(self)    endif    rndWaitTimer = RandomFloat(10.0, 30.0)    RegisterForSingleUpdate(rndWaitTimer)endEventevent OnCellDetach()    on = falseendEvent

I loaded the game, and used the console MoveTo in order to get to those activators, and then COC'd away. The log didn't throw out any more errors (about the ones I visited anyway) afterwards.
User avatar
Barbequtie
 
Posts: 3410
Joined: Mon Jun 19, 2006 11:34 pm

Post » Sun Jun 24, 2012 8:27 am

I like your version of the script better than mine. Would you mind if we used that?
User avatar
Amanda savory
 
Posts: 3332
Joined: Mon Nov 27, 2006 10:37 am

Post » Sun Jun 24, 2012 5:44 am

Sure, I don't think there's anything different that makes it work when yours doesn't though.
User avatar
Rhysa Hughes
 
Posts: 3438
Joined: Thu Nov 23, 2006 3:00 pm

Post » Sun Jun 24, 2012 10:18 am

True, but the way you went about it is cleaner, and I like cleaner :)
User avatar
Syaza Ramali
 
Posts: 3466
Joined: Wed Jan 24, 2007 10:46 am

Post » Sun Jun 24, 2012 4:24 am

using a update register will guarantee a new thread, as well as automatically override any existing update calls from the same script (hence reading from the loose pex file on the Update event block, instead of the already threaded code from the save file). i think thats the main difference between your scripts
User avatar
мistrєss
 
Posts: 3168
Joined: Thu Dec 14, 2006 3:13 am

Post » Sun Jun 24, 2012 12:10 pm

I JUST tested this (again)... I thought I mentioned this before, and I'll have to update my 'Impact of Script BS' thread to reflect it once someone can verify it. I doubt I explained the ENTIRE process, especially relating to missing scripts, but here it is....

[in the CK]
- you must find any Refs, objects, quests, etc that have the removed script attached to it
- simply 'removing' the script-assignment should work (eg: scripts tab in the object editor)
- save and exit

[in-game]
- load your dirty saveGame with the updated mod
- move Player to an area the mod doesn't alter
- make a new saveGame
- exit Skyrim, restart (with the updated mod)
- load that new saveGame

That's it... no more "Unable to bind script blahblah to (01234567) because their base types do not match", no more "Cannot open store for class "blahblah", missing file?".
User avatar
Amanda savory
 
Posts: 3332
Joined: Mon Nov 27, 2006 10:37 am

Post » Sun Jun 24, 2012 4:41 pm

ive already tried that. the problem is deleting the script will make those "script not found" errors come back forever

and what happens when your mod uses 500 scripted objects. seems like an incredible PIA to have to sanitize all of them individually
User avatar
SEXY QUEEN
 
Posts: 3417
Joined: Mon Aug 13, 2007 7:54 pm

Post » Sun Jun 24, 2012 12:52 pm

I don't see a 'script not found' error (in my orig saveGame test's log)... just the two types I mention above. Is it possible you missed an object, ref, quest, or something somewhere? My test mod had an alias which pointed to a baseObject (with a deleted script)... I just deleted the alias from the quest, so I dunno if it's possible to clean it out without having to re-create that alias (if it's still needed).

As for 50 million objects... I dunno what to tell ya but to reiterate what I think you said way earlier, about lesson-learned (hopefully). Also - sometimes using dummy scripts IS a good option heheheh... I've noticed there are PLENTY of nill scripts that are completely empty; perhaps that's why.

[EDIT: the same deleted script was attached to a Ref, which I just removed the script from, without deleting the Ref

Before
Spoiler

[06/22/2012 - 10:38:37PM] Papyrus log opened (PC)
[06/22/2012 - 10:38:37PM] Update budget: 1.200000ms (Extra tasklet budget: 1.200000ms, Load screen budget: 500.000000ms)
[06/22/2012 - 10:38:37PM] Memory page: 128 (min) 512 (max) 76800 (max total)
[06/22/2012 - 10:38:39PM] Cannot open store for class "CR04BrutePreQuestScript", missing file?
[06/22/2012 - 10:38:40PM] Cannot open store for class "aaSLuckMoveStart", missing file?
[06/22/2012 - 10:38:40PM] error: Unable to bind script aaSLuckMoveStart to (02590574) because their base types do not match
[06/22/2012 - 10:38:40PM] error: Unable to bind script CR04BrutePreQuestScript to alias Brute on quest CR04 (00025231) because their base types do not match
[06/22/2012 - 10:38:46PM] VM is freezing...
[06/22/2012 - 10:38:46PM] VM is frozen
[06/22/2012 - 10:38:46PM] Reverting game...
[06/22/2012 - 10:38:46PM] error: Unable to bind script aaSLuckMoveStart to (02590574) because their base types do not match
[06/22/2012 - 10:38:52PM] Loading game...
[06/22/2012 - 10:38:52PM] error: Unable to bind script CR04BrutePreQuestScript to alias Brute on quest CR04 (00025231) because their base types do not match
[06/22/2012 - 10:38:52PM] VM is thawing...
[06/22/2012 - 10:38:59PM] VM is freezing...
[06/22/2012 - 10:38:59PM] VM is frozen
[06/22/2012 - 10:38:59PM] Log closed

After
Spoiler

[06/22/2012 - 10:39:54PM] Papyrus log opened (PC)
[06/22/2012 - 10:39:54PM] Update budget: 1.200000ms (Extra tasklet budget: 1.200000ms, Load screen budget: 500.000000ms)
[06/22/2012 - 10:39:54PM] Memory page: 128 (min) 512 (max) 76800 (max total)
[06/22/2012 - 10:39:57PM] Cannot open store for class "CR04BrutePreQuestScript", missing file?
[06/22/2012 - 10:39:57PM] error: Unable to bind script CR04BrutePreQuestScript to alias Brute on quest CR04 (00025231) because their base types do not match
[06/22/2012 - 10:40:13PM] VM is freezing...
[06/22/2012 - 10:40:13PM] VM is frozen
[06/22/2012 - 10:40:13PM] Reverting game...
[06/22/2012 - 10:40:19PM] Loading game...
[06/22/2012 - 10:40:19PM] error: Unable to bind script CR04BrutePreQuestScript to alias Brute on quest CR04 (00025231) because their base types do not match
[06/22/2012 - 10:40:19PM] warning: Variable ::Alias_MoveStat_var on script QF_aaSLuckMoveQuest_01590573 loaded from save not found within the actual object. This variable will be skipped.
[06/22/2012 - 10:40:19PM] VM is thawing...
[06/22/2012 - 10:40:30PM] VM is freezing...
[06/22/2012 - 10:40:30PM] VM is frozen
[06/22/2012 - 10:40:31PM] Saving game...
[06/22/2012 - 10:40:31PM] VM is thawing...
[06/22/2012 - 10:40:34PM] VM is freezing...
[06/22/2012 - 10:40:34PM] VM is frozen
[06/22/2012 - 10:40:35PM] Log closed

As you can see, in my haste, I never removed that deleted alias from a fragment... but it's just a test-mod, and I was just messing with it for this thread.]
User avatar
NAtIVe GOddess
 
Posts: 3348
Joined: Tue Aug 15, 2006 6:46 am

Post » Sun Jun 24, 2012 1:19 pm

i'll try it again, but either way, this still requires a manual user-uninstall (which the majority will not do)

edit: i think i know what i did wrong when i tried it the first time, i probably also deleted the reference after "sanitizing it" the reference needs to stay in the esp in order to update the save game's embedded data on load.

i think i have about 250 script-attached forms in amethyst hollows (most but not all are cell refr's), which is a pain to re-work for the uninstaller, but there is no way around it other than to forget about making mods with scripted features.


this brings up another issue

if you update your esp and delete a reference that had a script attached to it at one point, i would assume you will get an error about it gone missing from the save game. i guess a workaround to this is to never delete anything from the plugin, instead swap out its base object with an "empty object" and push it into the void space. this is enough to make me want to stab a baby in the face
User avatar
Lizs
 
Posts: 3497
Joined: Mon Jul 17, 2006 11:45 pm

Post » Sun Jun 24, 2012 11:10 am

heheheh... I agree - many people are lazy and oblivious (no TES pun intended). Then there's the crowd that complains about having to jump a little hoop in order to save them from either a ton of errors or completely restarting the game.

You can please some of the people most of the time, but then again - the few who can't be pleased cause enough drama to make up for it heheh.

[EDIT: I meant that lazy/etc about the endUser... not the modder (ie: you). Though several modders I'm sure fall into that category as well.. not for nothin. (again, NOT you.. heheh)]
User avatar
Krystal Wilson
 
Posts: 3450
Joined: Wed Jan 17, 2007 9:40 am

Post » Sun Jun 24, 2012 11:47 am

it's too damn bad you cant "preview" which references have scripts attached to them in the cell view like you can on the object window
User avatar
Talitha Kukk
 
Posts: 3477
Joined: Sun Oct 08, 2006 1:14 am

Post » Sun Jun 24, 2012 5:56 pm

All that was old is new again. Long ago Bethesda made a design decision about how save game files would work: mods will be added to a game over time, but not removed or changed. They've relented on that somewhat, but the core assumption apparently still runs deep because the scripts are now following that logic.

In the Morrowind days, we ran into strange situations where NPCs and objects added by a mod would get duplicated over time. Eventually it was found to be caused by shifting mods in the load order. And one of the important features of Wrye Mash was the ability to update the masters and correct the records in a save game file to correct the "doubling" problem.

Oblivion made improvements and let you reorder mods. Instead we got the nearly complete mod isolation which introduced additional headaches for modders. You could remove mods, but you got the big warning message and you could still run into interesting situations like relocated doors staying in the new position even while everything else about a location reverted to the original spots.

Now with Skyrim we find that there is almost no provision for removing scripts. Skyrim really is more like Morrowind. And someone will probably have to have a save game editing feature to go clean up dead scripts from Skyrim saves the same way Wrye wrote the code to repair doubled objects in Morrowind saves.
User avatar
jess hughes
 
Posts: 3382
Joined: Tue Oct 24, 2006 8:10 pm

PreviousNext

Return to V - Skyrim