Scriptname _00E_MQ12c_Functions extends Quest Conditional Import Utility ; This script is mainly used for handling the different "debris" stages of Ark after the siege ;===================================================================================== ; EVENTS ;===================================================================================== Event OnUpdate() If MQ12c_SC03_Dream.IsPlaying() If GameHour.GetValue() >= 20 Timescale.SetValue(0.01) Else RegisterForSingleUpdate(1) EndIf Else UnregisterForUpdate() EndIf EndEvent Event OnUpdateGameTime() DebrisLevel02() DeleteSC01Stuff() EndEvent ;===================================================================================== ; FUNCTIONS ;===================================================================================== Function DebrisLevel01() ; Ark directly after the Nehrimese's attack, corpses are still around, sigils are enabled int iIndex = _00E_MQ12c_HarborNPCs.GetSize() while iIndex > 0 iIndex -= 1 ObjectReference objToDisable = _00E_MQ12c_HarborNPCs.GetAt(iIndex) as ObjectReference objToDisable.Disable() endwhile iIndex = _00E_MQ12c_SoldierNPCs.GetSize() while iIndex > 0 iIndex -= 1 ObjectReference objToEnable = _00E_MQ12c_SoldierNPCs.GetAt(iIndex) as ObjectReference objToEnable.Enable() ; Failsave to prevent a bug in which some of the Possessed ; enabled at this point would be in ghostmode and therefore ; invincible ; ( http://sureai.net:9898/browse/ERB-846 ). ; EDIT Till 03/Nov/2018: This doesn't really fix the issue, but I leave the code in here just in case ; see comment below Actor objAsActor = (objToEnable as Actor) if objAsActor != None if (objToEnable as _00E_EPOnDeath) ; Checking (by typecast) that objAsActor is an enemy. objAsActor.SetGhost(False) endif endif endwhile iIndex = _00E_MQ12c_FireNPCs.GetSize() while iIndex > 0 iIndex -= 1 ObjectReference objToEnable = _00E_MQ12c_FireNPCs.GetAt(iIndex) as ObjectReference objToEnable.Enable() ; Failsave to prevent a bug in which some of the Possessed ; enabled at this point would be in ghostmode and therefore ; invincible ; ( http://forum.sureai.net//tracker.php?p=8&t=10425 ). ; EDIT Till 03/Nov/2018: This doesn't really fix the issue, but I leave the code in here just in case ; see comment below Actor objAsActor = (objToEnable as Actor) if objAsActor != None objAsActor.SetGhost(False) endif endwhile ; Till 03/Nov/2018: The possessed NPCs need to be enabled in a separate formlist (could have been also done via EnableParent) ; Anyway, the reason behind this is fairly simple: The script _00E_MQ12c_HarbirSiegeSC uses also the formlists ; _00E_MQ12c_FireNPCs and _00E_MQ12c_SoldierNPCs but the script actually sets the ghost flag to 1 upon leaving the respective trigger ; and hence the flag can't be set for an actor's reference it gets set for the actor base ; resulting in all actor references of the possessed NPCs that are included in the formlist being flagged as ghost ; I took the possessed NPCs out of those lists and created this new one, that isn't used by the harbor trigger at all _00E_Func_ReferenceFormList.Enable(_00E_MQ12c_PossessedNPCs) MQ12c_SC1_ExecutionDoor001.BlockActivation(True) MQ12c_SC1_ExecutionDoor001.SetLockLevel(255) MQ12c_SC1_ExecutionDoor001.SetOpen(False) MQ12c_SC1_ExecutionDoor001.Lock(True) MQ12c_WestGate_BarrierREF.Enable() MQ12c_NorthGate_BarrierREF.Enable() MQ12c_MyradOutsideGate_BarrierREF.Enable() MQ12c_SouthGate_BarrierREF.Enable() MQ12c_SC01_FailsaveREF.Enable() MQ12c_HarborGate_BarrierREF.Enable() MQ12b_SC6_ArcherMarker.Disable() MQ12b_SC6_HarborLinker.Disable() MQ12c_GuardLinker.Disable() _00E_MC_TaranorREF.Disable() _00E_SC_AlmaREF.Disable() MQ12c_DisableBoat.Disable() MQ12c_Debris_NPC_Linker.Enable() MQ12c_NehrimeseScoutREF.Enable() MQ12c_Debris_Smoke_Linker.Enable() MQ12c_Debris_Level_01_Linker.Enable() MQ12cDebrisLight.MoveTo(NightLightsMarker, abMatchRotation = False) ; Hide one lantern light in Ark's Stranger Quarter RegisterForSingleUpdateGameTime(72) ; Wait three days to proceed to next debris stage EndFunction Function DebrisLevel02() MQ12b_SC14_SiegeTempleMarker.Disable() MQ12c_Debris_Level_01_Linker.Disable() ; Corpses have been carried removed, first repairs have started MQ12c_Debris_Level_02_Linker.Enable() MQ12cDebrisLight.MoveToMyEditorLocation() ; Unhide lantern light in Ark's Stranger Quarter MQ12cDebrisLight = None ; No need to keep it persistent anymore EndFunction Function SetUpSC01() MQ12c_SC2_Bed.SetActorOwner(PlayerREF.GetActorBase()) MQ12c_SC2_Bed.BlockActivation(True) _00E_MC_TealorRef.Disable() _00E_MC_NataraRef.Disable() MQ12c_SC1_ExecutionVoiceTealor001.Enable() MQ12c_SC1_ExecutionDoor001.SetLockLevel(255) MQ12c_SC1_ExecutionDoor001.SetOpen(False) MQ12c_SC1_ExecutionDoor001.Lock(True) EndFunction Function CleanUpSC01() _00E_MC_TealorRef.Enable() _00E_MC_NataraRef.Enable() EndFunction Function DeleteSC01Stuff() MQ12c_SC1_ExecutionVoiceTealor001.Disable() MQ12c_SC1_ExecutionDoor001.SetLockLevel(0) MQ12c_SC1_ExecutionDoor001.SetOpen(False) MQ12c_SC1_ExecutionDoor001.Lock(False) EndFunction Function ShowMessageBoxBeforeSleeping() If ((CQJ04.IsRunning()) && (CQC04.IsRunning())) If !CQJ04.IsCompleted() && !CQC04.IsCompleted() int iButton01 = _00E_MQ12c_SleepJesparCaliaMsg.Show() If iButton01 == 0 SetCurrentStageID(15) Else Return EndIf ElseIf CQJ04.IsCompleted() && !CQC04.IsCompleted() int iButton02 = _00E_MQ12c_SleepCaliaMsg.Show() If iButton02 == 0 SetCurrentStageID(15) Else Return EndIf ElseIf !CQJ04.IsCompleted() && CQC04.IsCompleted() int iButton03 = _00E_MQ12c_SleepJesparMsg.Show() If iButton03 == 0 SetCurrentStageID(15) Else Return EndIf Elseif CQJ04.IsCompleted() && CQC04.IsCompleted() SetCurrentStageID(15) EndIf ElseIf (CQJ04.IsRunning()) && !(CQJ04.IsCompleted()) int iButton04 = _00E_MQ12c_SleepJesparMsg.Show() If iButton04 == 0 SetCurrentStageID(15) Else Return EndIf ElseIf (CQC04.IsRunning()) && !(CQC04.IsCompleted()) int iButton05 = _00E_MQ12c_SleepCaliaMsg.Show() If iButton05 == 0 SetCurrentStageID(15) Else Return EndIf Else SetCurrentStageID(15) EndIf EndFunction Function StartSC02() _00E_SilenceTransitionLowPriority.Add() If (!CQC04.IsCompleted()) && CQC04.IsRunning() CQC04.SetCurrentStageID(20) EndIf If (!CQJ04.IsCompleted()) && CQJ04.IsRunning() CQJ04.SetCurrentStageID(40) EndIf _00E_Func_AIWalk.PlayerAIWalk() Game.ForceThirdPerson() MQ12c_SC02_DreamGoToSleep.ForceStart() EndFunction Function FadeToBlack() SetObjectiveCompleted(10) SetCurrentStageID(20) EndFunction Function StartSC03() fTimescaleBefore = TimeScale.GetValue() MQ10a_SC1_HeartParentREF.Enable() MQ12c_SC03_FatherREF.Enable() MQ12c_SC03_FatherREF.MoveTo(MQ12c_SC3_FatherMarkerREF) MQ12c_SC03_FatherREF.SetOutfit(_00E_Father_Outfit_VeryDecayed) If MQP01_FatherRef.IsEnabled() MQP01_FatherRef.Disable() EndIf _FS_Phasmalist_ControlQuest.UnsummonApparitionIfExists() FadeToBlackIMOD.Apply() Wait(1) _00E_TimeControl.SkipTimeToHour(18.5) FadeToBlackHoldImod.ApplyCrossFade(1) PlayerREF.MoveTo(PlayerStartMarkerNew) _00E_SilenceTransitionLowPriority.Remove() _00E_PlayerFunctions.GetSoundControl().RemoveSilence() _00E_Func_AIWalk.PlayerAIWalkStop() Game.ShowFirstPersonGeometry(False) Game.RequestAutoSave() fPlayerScale = _00E_SetActorScale.Change(PlayerREF, 0.85) TimeScale.SetValue(0.1) ImageSpaceModifier.RemoveCrossFade(3) Game.ForceFirstPerson() Game.DisablePlayerControls(false, true, true, false, true, false, false) Wait(3.0) Game.EnablePlayerControls() Game.DisablePlayerControls(false, true, true, false, true, true, true, true, 0) MQ12c_SC03_Dream.ForceStart() Wait(2) SetObjectiveDisplayed(15) EndFunction Function SetTimescale() TimeScale.SetValue(450) RegisterForSingleUpdate(1) EndFunction Function OpenForbiddenDoor() MQ12c_SC03_ForbiddenDoorREF.SetOpen(True) EndFunction Function EndSC03() PlayerREF.SetScale(fPlayerScale) _00E_MQ10a_DreamCollapseIMOD.Apply() Wait(4) FadeToBlackHoldImod.ApplyCrossFade(1) MQ12c_SC03_FatherREF.Disable() _00E_Music_Special_Dreams.Remove() SetObjectiveCompleted(10) SetObjectiveCompleted(15) SetCurrentStageID(40) EndFunction Function StartSC04() _00E_MC_JesparREF.SetOutfit(_00E_MC_JesparOutfit) _00E_Music_Special_Dreams.Remove() _00E_SilenceTransitionLowPriority.Add() _00E_Func_AIWalk.PlayerAIWalkStop() Game.ForceThirdPerson() MQ12c_SC04_DoorREF.SetOpen(true) PlayerREF.MoveTo(MQ12c_SC04_CompanionRunREF) SetCompanion() If Companion.IsDisabled() Companion.Enable() EndIf Companion.MoveTo(MQ12c_SC04_CompanionMarkerREF) TimeScale.SetValue(fTimescaleBefore) MQ12c_SC04_WakeUp.ForceStart() Game.SetHudCartMode(false) EndFunction Function FadeBack() Game.SetPlayerAIDriven(False) _00E_Func_AIWalk.PlayerAIWalkStop() FadeToBlackBackLongImod.ApplyCrossFade(afFadeDuration = 1.0) EndFunction Function SetCompanion() If SympathyCalia.GetValueInt() > SympathyJespar.GetValue() Companion = _00E_MC_CaliaREF Else Companion = _00E_MC_JesparREF EndIf SC04_Companion.ForceRefTo(Companion) If (Companion == _00E_MC_CaliaREF) && (SympathyJespar.GetValueInt() >= __Config_RomanceThreshold) bAskForLoveInterest = True Elseif (Companion == _00E_MC_JesparREF) && (SympathyCalia.GetValueInt() >= __Config_RomanceThreshold) bAskForLoveInterest = True Else bAskForLoveInterest = False EndIf EndFunction Function ActivateBed() _00E_Func_RefreshFace.RefreshFace() MQ12c_SC2_Bed.Activate(PlayerREF, True) Game.EnablePlayerControls() Game.SetPlayerAIDriven(False) Game.SetHudCartMode(False) EndFunction Function CleanUpAndStartMQ13() Game.EnablePlayerControls() Game.SetHudCartMode(false) _00E_SilenceTransitionLowPriority.Remove() _00E_PlayerFunctions.GetSoundControl().RemoveSilence() MQ12c_SC01_FailsaveREF.Disable() MQ12c_SC1_ExecutionDoor001.Lock(False) MQ12c_SC1_ExecutionDoor001.BlockActivation(False) MQ13a.SetCurrentStageID(5) EndFunction ;===================================================================================== ; PROPERTIES ;===================================================================================== int iDebrisLevel float fPlayerScale = 1.0 float fTimescaleBefore bool Property bAskForLoveInterest Auto Conditional Hidden int Property __Config_RomanceThreshold Auto {Determines how many sympathy points the player needs to have for either Calia or Jespar in order for the other one to ask about his/her relationship to the player} Actor Property Companion Auto Conditional Hidden Actor Property _00E_MC_TealorRef Auto Actor Property _00E_MC_TaranorREF Auto Actor Property _00E_SC_AlmaREF Auto Actor Property _00E_MC_NataraRef Auto Actor Property _00E_MC_JesparREF Auto Actor Property _00E_MC_CaliaREF Auto Actor Property MQP01_FatherRef Auto Actor Property MQ12c_SC03_FatherREF Auto Actor Property PlayerREF Auto GlobalVariable Property SympathyCalia Auto GlobalVariable Property SympathyJespar Auto GlobalVariable Property Timescale Auto GlobalVariable Property GameHour Auto Quest Property CQC04 Auto Quest Property CQJ04 Auto Quest Property MQ13a Auto MusicType Property _00E_Music_Special_Dreams Auto MusicType Property _00E_SilenceTransitionLowPriority Auto Message Property _00E_MQ12c_SleepCaliaMsg Auto Message Property _00E_MQ12c_SleepJesparMsg Auto Message Property _00E_MQ12c_SleepJesparCaliaMsg Auto Scene Property MQ12c_SC02_DreamGoToSleep Auto Scene Property MQ12c_SC03_Dream Auto Scene Property MQ12c_SC04_WakeUp Auto Outfit Property _00E_MC_JesparOutfit Auto Outfit Property _00E_Father_Outfit_VeryDecayed Auto ReferenceAlias Property SC04_Companion Auto ImageSpaceModifier Property FadeToBlackIMOD Auto ImageSpaceModifier Property FadeToBlackBackLongImod Auto ImageSpaceModifier Property FadeToBlackHoldImod Auto ImageSpaceModifier Property _00E_MQ10a_DreamCollapseIMOD Auto Formlist Property _00E_MQ12c_FireNPCs Auto Formlist Property _00E_MQ12c_HarborNPCs Auto Formlist Property _00E_MQ12c_SoldierNPCs Auto Formlist Property _00E_MQ12c_PossessedNPCs Auto ObjectReference Property MQ12c_Debris_NPC_Linker Auto ObjectReference Property MQ12c_Debris_Smoke_Linker Auto ObjectReference Property MQ12c_Debris_Level_01_Linker Auto ObjectReference Property MQ12c_Debris_Level_02_Linker Auto ObjectReference Property MQ12b_SC14_SiegeTempleMarker Auto ObjectReference Property MQ12c_SC2_Bed Auto ObjectReference Property PlayerStartMarkerNew Auto ObjectReference Property MQ12c_SC3_FatherMarkerREF Auto ObjectReference Property MQ12c_SC04_CompanionMarkerREF Auto ObjectReference Property MQ12c_SC04_CompanionRunREF Auto ObjectReference Property MQ12c_SC04_DoorREF Auto ObjectReference Property MQ12c_DisableBoat Auto ObjectReference Property MQ12c_NehrimeseScoutREF Auto ObjectReference Property MQ12b_SC6_ArcherMarker Auto ObjectReference Property MQ12b_SC6_HarborLinker Auto ObjectReference Property MQ12c_GuardLinker Auto ObjectReference Property MQ12c_WestGate_BarrierREF Auto ObjectReference Property MQ12c_NorthGate_BarrierREF Auto ObjectReference Property MQ12c_MyradOutsideGate_BarrierREF Auto ObjectReference Property MQ12c_SouthGate_BarrierREF Auto ObjectReference Property MQ12c_HarborGate_BarrierREF Auto ObjectReference Property MQ12c_SC01_FailsaveREF Auto ObjectReference Property MQ10a_SC1_HeartParentREF Auto ObjectReference Property MQ12c_SC03_ForbiddenDoorREF Auto ObjectReference Property MQ12c_SC1_ExecutionVoiceTealor001 Auto ObjectReference Property MQ12c_SC1_ExecutionDoor001 Auto ObjectReference Property NightLightsMarker Auto ObjectReference Property MQ12cDebrisLight Auto