The essential change we've made is to stop processing scripts just during the window where the game loads. This makes sure that we've loaded our arrays and strings before the scripts which use them get a chance to fire. It also seems to solve some long-standing crashes when using mods with Token scripts added to lots of characters. The scripts were being run before additional references used by the scripts were loaded - causing the crash. So hopefully everything is for the better with this change.
This makes a major (but not necessarily bad) change. I'm writing it here because I don't remember all the particulars and in case anyone uses the trick (or any variation) that this shortcircuits.
As stated above, scripts run during the Load/Waiting menu, even if the game is just being loaded from a save. That is, if you have a script
scn aaaTestScriptlong Workingbegin GameMode if Working != -1 if Working == 1 message "Working" printc "Working" else message "Not Working" printc "Not Working" endif set Working to -1 endifendbegin MenuMode if Working == 0 || Working == 1 set Working to 1 endifend
With Beta 4, you'll see "Working". With Beta 5, you won't see anything at all. If the script was running in GameMode block, then Working would be 0 and you'd see "Not Working".
It's really late (and has taken a while to write), so I'll give one specific example I think this would affect. My
old Inventory Tracker mod would keep linked lists of every item you picked up. To do this, I stored references to each item on rings on a remote NPC. When I needed to look through these lists, I'd have to set a variable on the NPC to get his script running and all item scripts that he was carrying. Then I'd unequip the first ring, which would give me a piece of the list (could only store 50 or so references on each ring). It would unequip the next ring to give me another piece of the list, and this would continue for all rings. This process would occur over several frames (5-20). Thing is, the player could save (say, using Streamline's AutoSave feature) during any one of those frames. When the player re-loaded the game, Oblivion would seem to "forget" which script was running when I saved the game, and thus the process would be interrupted. I don't remember exactly how I fixed it (and really need to sleep), but I believe what was happening was - Oblivion kept a list of which scripts should be running when the game was reloaded, however it started them in MenuMode, they didn't do anything in MenuMode and so never kept going.
As a note, I really believe that this helps more than hinders. The vanilla is truly unexpected behavior that's probably tripped up a number of people (including myself), and should
never have been allowed into the final version of Oblivion.