Fallout 4 new game quest and inventory problems

Name: Fallout 4 new game quest and inventory problems Platform: Fallout 4 Solution: SKK Fast Start (all) Author: skk.50@outlook.com Date: Jan 2018

Starting new games in Fallout 4 can be prone to issues and errors as the new game start is super fragile with heaps of gotchas that mod authors (and Creation Club) do not appreciate. End user symptoms are:

(a) System runs slow so animations (like the vault door) fail to play or quest dialog triggers fail (like Codsworth in Sanctuary or raiders in Concord). This is caused by too many scripts trying to start up all at once. Looking at you Sim Settlements in pre-war sanctuary and Creation Club at vault elevator exit.

(b) Quests do not trigger because ALT start mods dont set the startup quest conditions to let other content know its done.

(c) Mod added inventory items like holotapes never appear in inventory because the base game clears the player inventory several times during startup in pre war Sanctuary, so mods that don’t allow for this and just stuff the player inventory when they initialise get lost.

(1) This is what happens in a new vanilla base game.

Main Quest MQ101 Pre-War Sanctuary Stage(0) during the transition from the Game Menu > Intro Video > Mirror Scene the quest script calls function PlayerREF.RemoveAllItems() so any mods that have already added player inventory through OnInit() or OnQuestInit() script events will be lost.

MQ101 Stage (900) Move Player to Postwar Vault the quest script calls function PlayerREF.RemoveAllItems() again so any mods later in the load order that do actually manage to place stuff in the active player inventory will then be cleared out between MQ101 Pre War Vault and MQ102 Post war vault.

This is why many mods cant add suff to a new vanilla game and you need to grovel around with help and additem console commands.

SKK FastStart New Game intercepts MQ101 at Stage(20) to take control and bypass the Stage(900) inventory clear down, but, any top of load order mods that are unaware of this new game condition will have already lost their stuff at stage zero. Forever in time, like tears in the rain.

SKK SyntheticPlayer intercepts MQ101 at Stage(0) by hacking modifying base game scripts to take control and bypass all stages so the inventory is never cleared.

(2) ALT start mods

Many ALT start mods bypass MQ101 Pre-War Sanctuary and MQ102 Out of Time quests  to avoind the player inventory cleardown, but those base game quests/stages are never set or marked as completed.

So thoughtful mods that try to wait for those quest stages or completion triggers will never start/populate inventory or trigger their own quests.

SKK FastStart New Game sets MQ101 quest completed and the key MQ102 vault exit stages 10 and 15 as completed. Its doesnt set other stages to avoid (a) triggering unwanted actions  and (b) hacking any base game scripts.

SKK SyntheticPlayer sets MQ102 stages 0, 10, and 15 as completed because it does hack base game scripts to avoid unwanted actions.

(3) Vault 111 exit bottleneck

Many well crafted mods are using MQ102 Stage(10) “Vault exit elevator” or Stage(15) “Radios on” to start their processing, and now Creation Club content also seems to kick ALL OF ITS QUESTS AT ONCE here as well. Some sort of throttling is in order (technical and metaphorical).

“If only someone would do something about the apathy here”

This has lead to massive backlogs in quest event processing, to the point where the main quest MQ102 can take several minutes to return stages which can miss scenes and triggers. The player can sprint to Sanctuary, trip all manner of out of sequence triggers and glitch Codsworth dialogue before MQ102 has caught up.

As you can’t count on any MQ102 stages firing with most ALT and FAST start mods bypassing them, plus the vault exit bottleneck, mod authors need to have a fallback of player location changes in the world using the OnLocationChange event. Be aware that the Vault111 location spans both the internal vault and the external vault elevator areas, so it will not trigger until the player is moving down the hill.

If you are a mod author and unsure what all this is about, please reach out to me and help reduce your mod users bitching about your inventory problems that SKK FastStart or SyntheticPlayer is exposing (no, not causing).

“If only someone would do something about the irony here”

(4) Robust new game start script

This is the model script that over 50 different SKK solutions use to cope with the many and varied new game start conditions (except if starting a custom game in an interior or worldspace other than Commonwelth):

Scriptname SKK_ModelQuestScript extends Quest


Actor      Property pPlayerREF     Auto Const Mandatory
Quest      Property pMQ101         Auto Const Mandatory
Quest      Property pMQ102         Auto Const Mandatory
Worldspace Property pCommonwealth  Auto Const Mandatory

Bool bAddInventoryDone = FALSE ;one time switch


Event OnQuestInit()

If (pMQ101.IsCompleted() == True) || (pMQ102.GetStage() >= 0) || (pPlayerREF.GetWorldspace() == pCommonwealth)
   AddInventory() ;Game is past MQ101 RemoveAllItems quest stages
   Self.RegisterForRemoteEvent(pMQ101, "OnStageSet") 
   Self.RegisterForRemoteEvent(pMQ102, "OnStageSet")
   Self.RegisterForRemoteEvent(pPlayerREF), "OnLocationChange")



Event Quest.OnStageSet(Quest akSender, int auiStageID, int auiItemID)

If (akSender == pMQ101) && (auiStageID > 900) ;past the last MQ101 inventory clear-down.
   AddInventory() ; stuff that can be available in V111 (although no Pipboy to activate)
ElseIf (akSender == pMQ102) && (auiStageID >= 0)  ;player wakes in cryo pod.
   AddInventory() ;stuff that can be available in V111 (although no Pipboy to activate)
ElseIf (akSender == pMQ102) && (auiStageID >= 10) ;v111 elevator exit.
   AddInventory() ; stuff that shoud only be available in the world.



Event Actor.OnLocationChange(Actor akSender, Location akOldLoc, Location akNewLoc)

If (pPlayerREF.GetWorldspace() == pCommonwealth) ;exiting V111 location.



Function AddInventory()

Self.UnRegisterForRemoteEvent(pMQ101, "OnStageSet")
Self.UnRegisterForRemoteEvent(pMQ102, "OnStageSet")
Self.UnRegisterForRemoteEvent(pPlayerREF), "OnLocationChange")

If (bAddInventoryDone == FALSE) ;onetime switch
   bAddInventoryDone = TRUE
   Self.RegisterForRemoteEvent(pPlayerREF, "OnPlayerLoadGame") ; for updates
   ;do your stuff



Event Actor.OnPlayerLoadGame(Actor akSender)
   ;do update stuff