Scriptname _00E_MQ07a_Functions extends Quest Conditional

Import Utility
Import Debug
Import _00E_QuestFunctions

;=====================================================================================
;              							EVENTS                    					 
;=====================================================================================

;=====================================================================================
;              							FUNCTIONS                    					 
;=====================================================================================

Function EnableOetzi()

	MQ07a_OetziREF.Enable()
	
	If _00E_MC_JesparREF.IsDisabled()
		_00E_MC_JesparREF.Enable()
	EndIf
	
	_00E_MC_LexREF.Enable()
	
	If (!_00E_MC_JesparREF.GetParentCell() == PlayerREF.GetParentCell())
		_00E_MC_JesparREF.MoveTo(MQ07a_SC1_JesparMarker)	
	EndIf
	
	If (!_00E_MC_LexREF.GetParentCell() == PlayerREF.GetParentCell())
		_00E_MC_LexREF.MoveTo(MQ07a_SC1_LexMarker)
	EndIf
	
	StartSC01()
	
EndFunction

Function MoveTealor()

	If _00E_MC_TealorREF.IsDisabled()
		_00E_MC_TealorREF.Enable()
	EndIf

	_00E_MC_TealorREF.MoveTo(MQ07a_SC1_TealorMarker)

EndFunction

Function StartSC01()

	MQ07a_SC1_ExplanationInChronikum.ForceStart()

	_00E_MC_JesparREF.MoveTo(MQ07a_SC1_JesparMarker)
	_00E_MC_LexREF.MoveTo(MQ07a_SC1_LexMarker)
	
EndFunction

Function SC01Failsave()
	
	_00E_MC_JesparREF.Enable()
	_00E_MC_JesparREF.MoveTo(MQ07a_SC1_JesparMarker)
	_00E_MC_LexREF.MoveTo(MQ07a_SC1_LexMarker)
	_00E_MC_JesparREF.GetActorBase().SetEssential(True)
	
	If !MQ07a_SC1_ExplanationInChronikum.IsPlaying()
		MQ07a_SC1_ExplanationInChronikum.ForceStart()
	EndIf
	
EndFunction

Function PlayerAddNecklace()

	PlayerREF.AddSpell(_00E_MQ07a_TeleportPyreanSP)
	_00E_MQ07a_GlyphDrawingContainerREF.RemoveItem(_00E_MQ07a_TealorNecklace, 1, PlayerREF)
	
	If PlayerREF.GetItemCount(_00E_MQ07a_TealorNecklace) < 1
		PlayerREF.AddItem(_00E_MQ07a_TealorNecklace, 1)
	EndIf
	
EndFunction

Function PlayerRemoveNecklace()

	PlayerREF.RemoveItem(_00E_MQ07a_TealorNecklace, 1)

EndFunction

Function MoveJesparToMyradTower()

	_00E_MC_JesparREF.MoveTo(MQ07a_SC2_JesparTargetMarker)
	MQ07A_SC2_TravelToManor.ForceStart()

EndFunction

Function StartJourney()
		
	If MQ07a_JesparFollowTriggerStartREF == None
		MQ07a_JesparFollowTriggerStartREF = Game.GetForm(0x00106646) as ObjectReference
	EndIf
	
	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_JesparREF, True, 350, 350, 100)
	CompanionIsTalking.SetValueInt(0)
	MQ07a_JesparFollowTriggerStartREF.Enable()

EndFunction

Function WaitForNightfall()

	Game.DisablePlayerControls()
	FadeToBlackIMOD.Apply()
	Wait(2)
	FadeToBlackHoldIMOD.ApplyCrossFade()
	Wait(1)
	Levelsystem.SkipTimeToHour(23)
	_00E_MC_JesparREF.MoveTo(MQ07a_SC2_JesparWaitForNightfallMarker)
	PlayerREF.MoveTo(MQ07a_SC2_PlayerWaitMarker)
	MQ07a_SC2_Campfire.Enable()
	Wait(2)
	Game.EnablePlayerControls()
	FadeToBlackBackIMOD.ApplyCrossFade(afFadeDuration = 3.0)

EndFunction

Function StartSC03()

	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_JesparREF, False)
	MQ07a_SC3_LivingRoomDoor.SetOpen(False)
	MQ07a_SC3_LivingRoomDoor.BlockActivation(True)
	MQ07A_SC3_GateScene.ForceStart()
	
EndFunction

Function AdjustAgedManSpeed()

	MQ07a_TheAgedManREF.SetActorValue("speedMult", 75)
	_00E_MC_JesparREF.SetActorValue("speedMult", 75)
	Levelsystem.UpdateSpeed(MQ07a_TheAgedManREF)

EndFunction

Function StartSC04()

	_00E_MC_JesparREF.SetActorValue("speedMult", 100.0)
	MQ07A_SC4_Interlude.ForceStart()
	_00E_TeleportGlobal.SetValue(1)
	
EndFunction

Function FadeOut()

	MQ07a_SC6_CollPlane.Enable()
	FadeToBlackIMOD.Apply()
	Utility.Wait(2.5)
	FadeToBlackHoldIMOD.ApplyCrossFade(afFadeDuration = 0.5)
	PlayerREF.MoveTo(MQ07a_SC4_ChairREF)
	MQ07a_SC4_ChairREF.Activate(PlayerREF)
	
EndFunction

Function FadeBack()

	FadeToBlackBackIMOD.ApplyCrossFade(0.5)

EndFunction

Function PlayerStandUp()

	MQ07a_SC4_ChairREF.Activate(PlayerREF)
	Self.SetStage(85)

EndFunction

Function StartSC5()

	MQ07a_SC3_LivingRoomDoor.BlockActivation(False)
	MQ07a_SC3_LivingRoomDoor.SetOpen(True)
	MQ07a_SC6_CollPlane.Disable()
	Game.RequestAutoSave()
	MQ07a_SC3_LivingRoomDoor.Lock(False)
	MQ07a_SC3_LivingRoomDoor.SetOpen(True)
	MQ07a_SC4_ExtraRoomDoor.SetLockLevel(75)
	MQ07a_TheAgedManREF.Disable()
	MQ07a_SC3_PianoMusic.Enable()
	MQ07A_SC5_Riddle.ForceStart()

EndFunction

Function MoveDownPlayer()

	Debug.SetGodMode(True)
	MQ07a_SC5_LiftPlatform.KnockAreaEffect(256, 1)
	MQ07a_SC5_LiftPlatform.PlaceAtMe(FallingDustExplosion01)
	MQ07a_SC5_LiftPlatform.TranslateToRef(MQ07a_SC5_LiftMarkerDown, 600.0, 600.0)
	PlayerREF.TranslateTo(PlayerREF.GetPositionX(), PlayerREF.GetPositionY(), (PlayerREF.GetPositionZ() - 1730.0), PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ(), 600.0, 600.0)
	Game.ShakeCamera(afStrength = 0.7)
	DRSStoneLabyrinthianOpenM.Play(MQ07a_SC5_LiftPlatform)
	LiftSound = DRSStoneRotatingDiscLPM.Play(MQ07a_SC5_LiftPlatform)
	
EndFunction

Function MovePlatformForward()
	
	MQ07a_PlatformActivated.SetValueInt(1)
	PlayerREF.TranslateTo(PlayerREF.GetPositionX(), PlayerREF.GetPositionY(), (MQ07a_SC5_LiftPlatform.GetPositionZ() + 10), PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ(), 600.0, 600.0)
	Sound.StopInstance(LiftSound)
	Utility.Wait(0.5)
	Game.ShakeCamera(afStrength = 0.5)
	LiftSound = DRSStoneRotatingDiscLPM.Play(MQ07a_SC5_LiftPlatform)
	MQ07a_SC5_LiftPlatform.TranslateToRef(MQ07a_SC5_LiftMarker02, 100.0, 100.0)
	MQ07a_SC5_LiftMarker02.TranslateToRef(MQ07a_SC5_LiftMarker02, 100.0, 100.0)
	PlayerREF.TranslateTo(PlayerREF.GetPositionX(), PlayerREF.GetPositionY() - 1500.0, MQ07a_SC5_LiftPlatform.GetPositionZ() + 10.0, PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ(), 100.0, 100.0)
	
EndFunction

Function StopSound()

	Debug.SetGodMode(False)
	PlayerREF.StopTranslation()
	Game.EnablePlayerControls()
	Game.SetPlayerAIDriven(False)
	Game.ShakeCamera(afStrength = 0.3)
	Sound.StopInstance(LiftSound)
	
EndFunction

Function ActivatePlatform()

	Debug.SetGodMode(1)
	Game.DisablePlayerControls()
	ObjectReference Dust = MQ07a_SC5_Platform.PlaceAtMe(FallingDustExplosion01)
	Dust.MoveTo(MQ07a_SC5_Platform, 0.0, 0.0, -25.0)
	MQ07a_SC5_Platform.TranslateToRef(MQ07a_SC5_PlatformMarker01, 100.0, 100.0)
	PlayerREF.TranslateToRef(MQ07a_SC5_PlatformMarker01, 100.0, 100.0)
	LiftSound = DRSStoneRotatingDiscLPM.Play(MQ07a_SC5_Platform)
	
EndFunction

Function AddPyreanSpell()

	Game.RequestAutoSave()
	_00E_Music_Special_Zyklus_OneSelection.Add()

EndFunction

Function TranslatePlatform02()
	Actor PlayerAc = PlayerREF as Actor 
	PlayerAc.SetGhost(1)
	Sound.StopInstance(LiftSound)
	Utility.Wait(0.5)
	MQ07a_SC5_Platform.TranslateToRef(MQ07a_SC5_PlatformMarker02, 100.0, 100.0)
	PlayerREF.TranslateToRef(MQ07a_SC5_PlatformMarker02, 100.0, 100.0)
	LiftSound = DRSStoneRotatingDiscLPM.Play(MQ07a_SC5_Platform)

EndFunction

Function JesparGivePlayerScroll()

	PlayerREF.AddItem(_01E_TeleportrolleSonnentempel, 1)

EndFunction

Function TranslatePlatform03()

	Actor PlayerAc = PlayerREF as Actor 
	PlayerAc.SetGhost(1)
	Debug.SetGodMode(1)
	Sound.StopInstance(LiftSound)
	Utility.Wait(0.5)
	MQ07a_SC5_Platform.TranslateToRef(MQ07a_SC5_PlatformMarker03, 100.0, 100.0)
	PlayerREF.TranslateTo(MQ07a_SC5_PlatformMarker03.GetPositionX(), MQ07a_SC5_PlatformMarker03.GetPositionY(), MQ07a_SC5_PlatformMarker03.GetPositionZ() + 5, PlayerREF.GetAngleX(), PlayerREF.GetAngleY(), PlayerREF.GetAngleZ(), 100.0, 100.0)
	LiftSound = DRSStoneRotatingDiscLPM.Play(MQ07a_SC5_Platform)

EndFunction

Function StopPlatform()

	Actor PlayerAc = PlayerREF as Actor 
	Sound.StopInstance(LiftSound)
	Game.ShakeCamera(afStrength = 0.3)
	Game.EnablePlayerControls()
	PlayerREF.StopTranslation()
	Wait(1)
	Debug.SetGodMode(0)
	PlayerAc.SetGhost(0)
	
EndFunction

Function PortPyrean()

	_00E_TeleportCharge.Play(PlayerREF)
	Utility.Wait(2)
	_00E_A2_Ghostwalk_TeleportDoneSound.Play(PlayerREF)
	_00e_TeleportArrive.Apply()
	PlayerREF.MoveTo(MQ07a_SC5_TeleportPlayerMarker)
	PlayerREF.PlaceAtMe(_00E_TeleportExplosion)
	MQ07a_SC5_OetziREFNew.EnableNoWait(False)
	MQ07a_SC5_Mist.EnableNoWait(False)
	MQ07a_SC5_OetziREFNew.PlaceAtMe(_00E_TeleportExplosion)
	Self.SetStage(115)
	PlayerREF.UnequipSpell(_00E_MQ07a_TeleportPyreanSP, 0)
	PlayerREF.UnequipSpell(_00E_MQ07a_TeleportPyreanSP, 1)
	PlayerREF.RemoveSpell(_00E_MQ07a_TeleportPyreanSP)
	
EndFunction

Function StartMemory()

	If PlayerREF.IsWeaponDrawn()
		PlayerREF.SheatheWeapon()
	EndIf
	
	OBJEyeofMagnusVanishM.Play(PlayerREF)
	_00E_MQ07a_WordOfTheDeadTransformSpiritM.Play(PlayerREF)
	_00E_MQ07a_WordOfTheDeadTransformIMOD.Apply()
	_00E_Ability_StaggerSelfSpell.Cast(PlayerREF, PlayerREF)
	Game.ShakeCamera(afStrength = 0.2)
	MQ07a_SC5_SpiritActor.MoveTo(PlayerREF)
	MQ07a_SC5_SpiritActor.SetPlayerControls(False)
  	MQ07a_SC5_SpiritActor.EnableAI(False)
  	MQ07a_SC5_SpiritActor.EnableAI(True)
	MQ07a_SC5_SpiritActor.SetAllowFlying(True)
	Game.ForceThirdPerson() 
   	Game.SetCameraTarget(MQ07a_SC5_SpiritActor)
   	Game.SetPlayerAIDriven(True)
	Game.DisablePlayerControls(true, true, true, True, true, true, true, true)
   	Game.SetHUDCartMode(True)
	MQ07a_SC5_SpiritActor.SplineTranslateToRef(MQ07a_SC5_FlyMarkerM, 50.0, 50.0, 2000.0)
	
EndFunction

Function FlyTowardsPyrean()

	FXExplosionCatapultNearM.Play(PlayerREF)	
	MQ07a_SC5_SpiritActor.SplineTranslateToRef(MQ07a_SC5_PyreanHeadmarker, 2000.0, 2000.0, 2000.0)	

EndFunction

Function PortPlayerIntoMemory()
	
	PlayerREF.StopTranslation()
	FadeToBlackHoldImod.Apply()
	Utility.Wait(1)
	Game.SetPlayerAIDriven(False)
	MQ07a_SC5_SpiritActor.EnableAI(False)
	Game.SetCameraTarget(PlayerREF)
	GhostFXShader.Play(PlayerREF)
	PlayerREF.SetAlpha(0.5)
	_00E_MQ07a_VisionStartM.Play(PlayerREF)
	_00E_MQ07a_VisionAwake.Apply()
	TimescaleDefault = Timescale.GetValue()
	Timescale.SetValue(0.01)
	Levelsystem.SkipTimeToHour(22)
	PlayerREF.MoveTo(MQ07a_VisionStart_REF)
	Utility.Wait(1)
	PlayerREF.MoveTo(MQ07a_VisionStart_REF) ; Yes, move the player again. Without it the worldspace's weather does not start.
	Game.EnablePlayerControls()
	Game.SetHUDCartMode(False)
	FadeToBlackHoldImod.Remove()
	_00E_MQ07a_VisionIMOD.ApplyCrossFade(2)
	SetStage(120)
	
EndFunction

Function StartSC06()

	Game.ShowFirstPersonGeometry(False)
	Game.ForceThirdPerson()
	Game.DisablePlayerControls()
	Game.SetPlayerAIDriven(True)
	MQ07A_SC6_Doorstep.ForceStart()

EndFunction

Function PortPlayerFailsave()

	If PlayerREF.GetDistance(MQ07a_SC6_KnockDoorMarker) >= 100
		PlayerREF.MoveTo(MQ07a_SC6_KnockDoorMarker)
	EndIf

EndFunction

Function KnockDoor()

	_00E_QuestFunctions.EndWerewolfModeWhenTransformed()
	Game.ForceThirdPerson()
	Wait(0.1)
	PlayerREF.PlayIdle(IdleMT_DoorBang)
	Wait(1)
	_00E_MQ07a_DoorBangM.Play(PlayerREF)

EndFunction

Function StartSC07()

	MQ07A_SC7_KitchenScene.ForceStart()

EndFunction

Function ShowThoughtText()

	Game.EnablePlayerControls()
	Game.SetPlayerAIDriven(False)
	Game.ShowFirstPersonGeometry(true)
	_00E_MQ07a_ThoughtsMemory02.ShowAsHelpMessage("Memory02", 5, 5, 1)

EndFunction

Function DebugSetUpMemory()

EndFunction

Function OpenDoor()

	MQ07a_SC06_KitchenDoorREF.Activate(MQ07a_ZuraREF, True)

EndFunction

Function StartSC08()

	Game.ForceFirstPerson()
	Game.DisablePlayerControls(true, true, false, true, true, true, true, true)
	Game.SetPlayerAIDriven()
	PlayerREF.equipItem(ElderScrollHandAttachArmor, false, true)
	Wait(0.5)
	QSTMQ206ElderScrollRead2DSound.Play(PlayerREF)
	MQ07a_ZuraREF.MoveTo(MQ07a_SC08_ZuraMarker)
	MQ07a_KurmarREF.MoveTo(MQ07a_SC08_KurmarWalkout)
	MQ07a_SC8_HouseDoor.SetOpen(True)
	MQ07A_SC8_PlayerReadScroll.ForceStart()
	_00E_MQ07a_ThoughtsMemory03.ShowAsHelpMessage("Memory03", 5, 5, 1)
		
EndFunction

Function StopReading()

	Game.ForceThirdPerson()
	Game.EnablePlayerControls()
	Game.DisablePlayerControls()
	PlayerREF.UnequipItem(ElderScrollHandAttachArmor, false, true)
	PlayerREF.PlayIdle(IdleStop)

EndFunction

Function KillKurmar()

	PlayerREF.SetGhost(False)
	MQ07a_ZuraREF.SetGhost(False)
	MQ07a_SC8_ShouterREF.Enable()
	MQ07a_KurmarREF.SetGhost(False)
	MQ07a_KurmarREF.GetActorBase().SetEssential(False)
	
	If (MQ07a_SC8_HouseDoor.GetOpenState() != 1)
		MQ07a_SC8_HouseDoor.SetOpen(True)
		Wait(1)
	EndIf
	
	_00E_MQ07a_KillerArrowSP.Cast(MQ07a_SC08_ArrowMarker, MQ07a_KurmarREF)

	Wait(0.5)
	
	_00E_Music_Combat_BonehunterNoCond.Add()
	Game.TriggerScreenBlood(5)
	Game.ShakeCamera()
	TRPImpactImpalex.Play(MQ07a_KurmarREF)
	_00E_Ability_StaggerSelfSpell.Cast(MQ07a_ZuraREF, MQ07a_ZuraREF)
	_00E_Ability_StaggerSelfSpell.Cast(PlayerREF, PlayerREF)
	
EndFunction

Function KillKurmarFailsave()

	if !MQ07a_KurmarREF.IsDead()
		MQ07a_KurmarREF.SetGhost(False)
		MQ07a_KurmarREF.GetActorBase().SetEssential(False)
		MQ07a_KurmarREF.Kill(MQ07a_KurmarREF)
	EndIf

EndFunction

Function EnableEnemiesInFormlist(Formlist formlistToProcess, GlobalVariable counterGlobal)

	Int Index
	Form[] enemies = formlistToProcess.ToArray()

	counterGlobal.SetValueInt(enemies.Length)
	bDoneBattleFailsave = True

	Index = 0
	While Index < enemies.Length
		Actor enemyRef = (enemies[Index] as Actor)
		enemyRef.Enable()
		enemyRef.SetAlpha(0.0)
		Index += 1
	EndWhile

	ResetHouseEnemyCounter()

	Utility.Wait(1)

	MQ07a_EnemiesLeft.SetValueInt(enemies.Length)
	UpdateCurrentInstanceGlobal(MQ07a_EnemiesLeft)

	If MQ07a_CurrentWave.GetValueInt() == 1
		SetObjectiveDisplayed(30)
	Else
		Self.SetObjectiveCompleted(30,0)
		Self.SetObjectiveDisplayed(30, True, True)
	EndIf

	RegisterForSingleUpdate(BATTLE_LONG_UPDATE_PERIOD)

EndFunction

Function ResetHouseEnemyCounter()
	(_00E_MQ07a_SC6_VisionHomeTGBX_Ref as _00E_VisionHomeSC).ResetEnemiesInside()
EndFunction

Function StartSC09()

	Game.SetPlayerAIDriven(False)
	Game.EnablePlayerControls()
	Game.ShowFirstPersonGeometry(True)
	MQ07a_ZuraREF.SetGhost(True)
	MQ07a_SC9_Door.SetOpen(True)
	MQ07a_SC8_ShouterREF.Disable()
	MQ07a_CurrentWave.SetValueInt(1) ; Just in case
	EnableEnemiesInFormlist(_00E_MQ07a_Enemies_Wave_01, MQ07a_Wave_01_EnemiesTotal)
	_00E_FS_Theriantrophist_AllowTemporaryTransform.SetValueInt(1)
	MQ07A_SC9_Battle.ForceStart()
	Game.RequestAutoSave()
	
EndFunction

Function StartSecondWave()

	EnableEnemiesInFormlist(_00E_MQ07a_Enemies_Wave_02, MQ07a_Wave_02_EnemiesTotal)
	
EndFunction

Function StartThirdWave()

	EnableEnemiesInFormlist(_00E_MQ07a_Enemies_Wave_03, MQ07a_Wave_03_EnemiesTotal)

EndFunction

Function TeleportMage()

	Game.RequestAutoSave()
	_00E_Music_Combat_BonehunterNoCond.Remove()
	SetObjectiveCompleted(30)
	ObjectReference FXExplosion = MQ07a_SC9_MageAppearMarker.PlaceAtMe(_00E_TeleportExplosion, 1)
	_00E_NPCTeleportExplosionIMOD.Apply()
	MQ07a_SC10_MageREF.Enable()
	MQ07a_SC10_MageREF.MoveTo(MQ07a_SC9_MageAppearMarker)
	_00E_QuestFunctions.WaitForReferenceToLoad(MQ07a_SC10_MageREF)
	Debug.sendAnimationEvent(MQ07a_SC10_MageREF, "IdleWebEnterInstant")
	MQ07a_SC10_MageREF.setActorValue("Variable03", 5)
	TimeFadeOut01FXS.Stop(MQ07a_SC10_MageREF)
	TimeFadeIn01FXS.Play(MQ07a_SC10_MageREF)
	Wait(0.5)
	MQ07a_SC10_MageREF.playidle(WebIdleExit)
	Wait(1)
	SC10_Mage.ForceRefTo(MQ07a_SC10_MageREF)
	TimeFadeIn01FXS.Stop(MQ07a_SC10_MageREF)
	MQ07a_SC10_MageREF.setActorValue("Variable03", 0)
	Wait(0.4)
	MQ07a_SC8_HouseDoor.SetOpen(True)
	MQ07a_SC8_HouseDoor.BlockActivation(False)
	SetStage(155)
	
EndFunction

Function StartSC10()
	
	_00E_QuestFunctions.EndWerewolfModeWhenTransformed()
	_00E_FS_Theriantrophist_AllowTemporaryTransform.SetValueInt(0)
	Game.ShowFirstPersonGeometry(False)
	Game.DisablePlayerControls(true, true, true, false, true, true, true, true)
	Game.SetPlayerAIDriven(True)
	Game.ForceThirdPerson()
	Debug.SetGodMode(False)
	MQ07A_SC10_MageKillsPyrean.ForceStart()

EndFunction

Function FreezePlayer()

	If !bKnockedOut
	
		bKnockedOut = True
		Game.ShakeCamera(afStrength = 0.5)
		_00E_MQ07a_FreezePlayer.Apply()
		PlayerREF.PlayIdle(bleedoutStart)
		Utility.Wait(2)
		Self.SetStage(165)
	
	EndIf
	
EndFunction

Function KnockOutPlayer()

	If Self.GetStage() < 170
		_00E_MQ07a_FreezePlayerFinal.ApplyCrossFade(0.1)
		_00E_MQ07a_SC10_PyreanDeathFreezeM.Play(PlayerREF)
		FXExplosionCatapultNearM.Play(PlayerREF)
		Utility.Wait(1.5)
		_00E_MQ07a_FreezePlayer.Remove()
		FadeToBlackHoldIMOD.Apply()
		Self.SetStage(170)
	EndIf
		
EndFunction

Function EndDream()
	Weapon weap

	PlayerREF.RemoveItem(_00E_MQ07a_RitualScroll)
	PlayerREF.RemoveItem(_00E_MQ07a_ChestKey)
	PlayerREF.RemoveItem(ElderScrollHandAttachArmor, abSilent = True)
	PlayerREF.PlayIdle(bleedoutStop)
	Game.ShowFirstPersonGeometry(True)
	MQ07a_SC6_CollPlane.Enable()
	MQ07a_SC11_Door.BlockActivation(True)
	MQ07a_SC11_Door.SetOpen(False)
	MQ07a_SC11_light.Enable()
	Game.DisablePlayerControls()
	Game.SetPlayerAIDriven(True)
	Game.RequestAutoSave()
	Levelsystem.SkipTimeToHour(1)
	MQ07a_ZuraREF.SetGhost(False)
	MQ07a_ZuraREF.GetActorBase().SetEssential(False)
	MQ07a_ZuraREF.Kill(MQ07a_ZuraREF)
	PlayerREF.DispelSpell(_00E_MQ07a_MageIceSpike)
	PlayerREF.DispelSpell(_00E_MQ07a_MageIceSTorm)
	PlayerREF.SheatheWeapon() ; Needed for the player to lay down in the bed in SC11
	weap = PlayerREF.GetEquippedWeapon(0)
	If weap
		PlayerREF.UnEquipItem(weap, abSilent = True)
	EndIf
	weap = PlayerREF.GetEquippedWeapon(1)
	If weap
		PlayerREF.UnEquipItem(weap, abSilent = True)
	EndIf
	Utility.Wait(2.5)
	Debug.SendAnimationEvent(PlayerREF, "IdleForceDefaultState") ; Resets drawn weapon in 1p
	Timescale.SetValue(TimescaleDefault)
	Weather.ReleaseOverride()
	PlayerREF.SetAlpha(1)
	GhostFXShader.Stop(PlayerREF)
	PlayerREF.MoveTo(MQ07a_SC11_PlayerMarker)
	MQ07a_TheAgedManREF.Enable()
	MQ07a_TheAgedManREF.MoveTo(MQ07a_SC11_AgedManLeanFurniture)
	Game.ForceThirdPerson()
	MQ07A_SC11_DialogueWithAgedMan.ForceStart()

EndFunction

Function FadeBack02()

	FadeToBlackBackIMOD.Apply()
	FadeToBlackHoldIMOD.Remove()

EndFunction

Function EnableControls()

	Game.SetPlayerAIDriven(False)
	Game.EnablePlayerControls()

EndFunction

Function CollapseManor()

	_00E_MQ07a_CollapseManor.Apply()
	Weather.ReleaseOverride()
	_00E_MQ07aOldManManorNoRain.SetActive()
	_00E_MC_JesparREF.MoveTo(MQ07a_SC12_JesparPortMarker)
	_00E_Horror_Ghosts_01M.Play(PlayerREF)
	Utility.Wait(1.75)
	MQ07a_SC12_Linker.Disable()
	PlayerREF.MoveTo(MQ07a_SC12_PlayerPortOutMarker)
	Debug.sendAnimationEvent(playerREF, "IdleWebEnterInstant")
	FadeToWhiteBackImod.Apply()
	PlayerREF.setActorValue("Variable03", 5)
	Wait(0.5)
	PlayerREF.playidle(WebIdleExit)
	Utility.Wait(3)
	Debug.SendAnimationEvent(PlayerREF, "IdleForceDefaultState")
	MQ07A_SC12_JesparFinalDialogue.ForceStart()
	MQ07a_OetziREF.Disable()
	
EndFunction

Function MoveJesparAndPlayer()

	Game.DisablePlayerControls()
	FadeToBlackIMOD.Apply()
	Utility.Wait(2.5)
	FadeToBlackHoldIMOD.Apply()
	FadeToBlackIMOD.Remove()
	MQ07a_SC13_WordOfTheDead.Enable()
	PlayerREF.MoveTo(MQ07a_SC13_PlayerMarker)
	_00E_MC_JesparREF.MoveTo(MQ07a_SC13_JesparLean)

EndFunction

Function FadeBackSC13()

	If _00E_MC_TealorREF.IsDisabled()
		_00E_MC_TealorREF.Enable()
	EndIf

	_00E_MQ07a_GlyphDrawingContainerREF.RemoveItem(_00E_MQ07a_PyreanGlyphsDrawing, 1, PlayerREF)
	
	If PlayerREF.GetItemCount(_00E_MQ07a_PyreanGlyphsDrawing) < 1
		PlayerREF.AddItem(_00E_MQ07a_PyreanGlyphsDrawing, 1)
	EndIf
	
	Game.EnablePlayerControls()
	FadeToBlackBackImod.Apply()
	FadeToBlackHoldIMOD.Remove()
	_00E_TeleportGlobal.SetValueInt(0)
	
EndFunction

Function Teleport(String WhoToTeleport)
	_00E_TeleportGlobal.SetValue(0)
	Weather.ReleaseOverride()
	MQ07a_SC13_WordOfTheDeadSoundREF.Disable()
	MQ07a_SC13_WordOfTheDead.PlaceAtMe(_00E_TeleportExplosion)
	Utility.Wait(0.1)
	MQ07a_SC13_WordOfTheDead.Disable()

	if WhoToTeleport == "Jespar"
		Levelsystem.TeleportNPC(_00E_MC_JesparREF, MQ07a_SC13_JesparTeleport)
	ElseIf WhoToTeleport == "Both"
		Game.DisablePlayerControls()
		Levelsystem.TeleportNPC(_00E_MC_JesparREF, MQ07a_SC13_JesparTeleport)
		Levelsystem.TeleportPlayer(MQ07a_SC13_PlayerTeleport)
	EndIf

EndFunction

Function FadeToBlackTealor()

	Game.DisablePlayerControls()
	FadeToBlackImod.Apply()
	Utility.Wait(2.5)
	MQ07A_SC13_TealorFinalDialogue.ForceStart()
	_00E_MC_TealorREF.MoveTo(MQ07a_SC13_TealorTableMarker)
	PlayerREF.MoveTo(MQ07a_SC13_PlayerStand)
	FadeToBlackHoldImod.Apply()
	FadeToBlackImod.Remove()
	Utility.Wait(3)
	FadeToBlackBackImod.Apply()
	FadeToBlackHoldImod.Remove()
	
EndFunction

Function EnableSigilStone()

	Game.EnablePlayerControls()
	MQ07a_SC14_SigilstoneMarker.PlaceAtMe(_00E_MQ07a_SigilStoneShards)
	_00E_MC_LexREF.MoveTo(MQ07a_SC14_LexMoveToMarker)
	_00E_MC_KonstantinREF.MoveTo(MQ07a_SC14_KonstantinMoveToMarker)
	_00E_MQ07a_YoungMageREF.MoveTo(MQ07a_SC14_YoungMageMarker)
	MQ07A_SC14_SigilstoneActivation.ForceStart()
	MQ07a_SC14_Pedestal.EnableNoWait()
	MQ07a_SC14_SigilStone.EnableNoWait()
	MQ07a_SC14_SigilstoneFX.EnableNoWait()
	MQ07a_SC14_SigilStoneLight2.EnableNoWait()

	Form[] refsToDisable = MQ07a_SC14_FurnitureToDisable.ToArray()
	ActorBase dummyOwner = PlayerREF.GetActorBase()
	Int Index = 0
	While Index < refsToDisable.Length
		(refsToDisable[Index] as ObjectReference).SetActorOwner(dummyOwner)
		Index += 1
	EndWhile
	
EndFunction

Function RemoveDrawing()
	
	PlayerREF.RemoveItem(_00E_MQ07a_PyreanGlyphsDrawing)

EndFunction

Function ActivateSigilStone()

	_00E_MQ07a_SigilStoneActivationM.Play(MQ07a_SC14_SigilStone)
	MQ07a_SC14_SigilStone.PlaceAtMe(_00E_NPCOorbayaUnleashHeavenExplosion)
	MQ07a_SC14_SigilStone.PlaceAtMe(_00E_MQ07a_SigilStoneShardsAct)
	MQ07a_SC14_SigilStone.PlaceAtMe(_00E_MQ07a_SigilStoneShardsAct)
	MQ07a_SC14_SigilStone.PlaceAtMe(_00E_MQ07a_SigilStoneShardsAct)
	Game.ShakeCamera(afStrength = 0.5)
	MQ07a_SC14_SigilStone.KnockAreaEffect(1, 1024)
	
	MQ07a_SC14_SigilstoneActivationExpIMOD.Apply()
		
EndFunction

Function AddSigilStone()

	_00E_MQ07a_SigilStoneShardTouchIMOD.Apply()
	PlayerREF.AddSpell(_00E_MQ07a_AbSigilStoneShard, True)

EndFunction

Function GiveMoneyReward()

	PlayerREF.AddItem(Gold001, __Config_rewardGold)

EndFunction

Function EndSC14()

	Form[] refsToDisable = MQ07a_SC14_FurnitureToDisable.ToArray()
	Int Index = 0
	While Index < refsToDisable.Length
		(refsToDisable[Index] as ObjectReference).SetActorOwner(None)
		Index += 1
	EndWhile

EndFunction

Function CompleteMQ07a()

	Levelsystem.RemoveSilence()
	Levelsystem.SetAllowIdleChatter(True)
	Levelsystem.GiveEP(__Config_RewardEXP)
	MQ07.SetObjectiveDisplayed(20)
	MQ07.SetObjectiveCompleted(10)
	Self.CompleteQuest()
	
	If _00E_AchievementsEnabled.GetValueInt() == 1
		Steam.UnlockAchievement("END_WORD_OF_THE_DEAD_01")
	EndIf
	
EndFunction

Function EnableWordOfTheDeadSound()

	MQ07a_SC13_WordOfTheDeadSoundREF.Enable()

EndFunction

Function SC06DoorstepFailsave()

	PlayerREF.MoveTo(MQ07a_SC10_PlayerWalkmarker)

EndFunction

Function SC06DoorstepFailsave2()

	If PlayerREF.GetDistance(MQ07a_SC6_KitchenMarker001) > 32.0 || Math.Abs(PlayerRef.GetAngleZ() - MQ07a_SC6_KitchenMarker001.GetAngleZ()) > 15.0
		PlayerREF.MoveTo(MQ07a_SC6_KitchenMarker001)
	EndIf

EndFunction

;=====================================================================================
;              							AMBUSH FAILSAVE                    					 
;=====================================================================================

Function StartAmbushFailsave()

	If bDoneBattleFailsave == False ; Version update
		bDoneBattleFailsave = True
		RegisterForSingleUpdate(1.0)
	EndIf

EndFunction

Event OnUpdate()

	Int iCurWave = MQ07a_CurrentWave.GetValueInt()

	If iCurWave >= 1 && iCurWave <= 3
		LocationRefType locRefType
		GlobalVariable enemyCounterGlobal
		Int aliveEnemyCount

		bDoneBattleFailsave = True

		If iCurWave == 1
			locRefType = MQ07a_SC9_Footman_Wave01
			enemyCounterGlobal = MQ07a_Wave_01_EnemiesTotal
		ElseIf iCurWave == 2
			locRefType = MQ07a_SC9_Footman_Wave02
			enemyCounterGlobal = MQ07a_Wave_02_EnemiesTotal
		ElseIf iCurWave == 3
			locRefType = MQ07a_SC9_Footman_Wave03
			enemyCounterGlobal = MQ07a_Wave_03_EnemiesTotal
		Else
			Return
		EndIf

		If MQ07a_VisionRealm.GetRefTypeAliveCount(locRefType) <= 0
			aliveEnemyCount = 0 ; Failsave
		Else
			aliveEnemyCount = enemyCounterGlobal.GetValueInt()
		EndIf

		If MQ07a_EnemiesLeft.GetValueInt() != aliveEnemyCount
			MQ07a_EnemiesLeft.SetValueInt(aliveEnemyCount)
			UpdateCurrentInstanceGlobal(MQ07a_EnemiesLeft)
			SetObjectiveCompleted(30, 0)
			SetObjectiveDisplayed(30, True, True)

			If aliveEnemyCount <= 0
				ResetHouseEnemyCounter()
				Utility.Wait(1.0)
				MQ07a_CurrentWave.Mod(1)
			Else
				RegisterForSingleUpdate(BATTLE_LONG_UPDATE_PERIOD)
			EndIf
		Else
			RegisterForSingleUpdate(1.0)
		EndIf
	EndIf

EndEvent


;=====================================================================================
;              							PROPERTIES                    					 
;=====================================================================================

float TimescaleDefault

bool bKurmarFailsave

Bool bDoneBattleFailsave
Float Property BATTLE_LONG_UPDATE_PERIOD = 5.1 AutoReadOnly

bool Property bKnockedOut Auto Hidden Conditional

int LiftSound 
int Property __Config_RewardEXP Auto
{How much EXP is to be granted upon quest completion}
int Property __Config_rewardGold Auto
{How much Gold is to be granted upon quest completion}

_00E_QuestFunctions Property Levelsystem Auto

Actor SC9_Mage

Actor Property _00E_MC_JesparREF Auto
Actor Property _00E_MC_TealorREF Auto
Actor Property _00E_MC_LexREF Auto
Actor Property _00E_MC_KonstantinREF Auto
Actor Property PlayerREF Auto
Actor Property MQ07a_TheAgedManREF Auto
Actor Property MQ07a_SC5_SpiritActor Auto
Actor Property MQ07a_KurmarREF Auto
Actor Property MQ07a_ZuraREF Auto
Actor Property _00E_MQ07a_YoungMageREF Auto
Actor Property MQ07a_SC10_MageREF Auto

ObjectReference Property MQ07a_SC8_ShouterREF Auto

ReferenceAlias Property PlayerVoice Auto

MiscObject Property Gold001 Auto

Sound Property _00E_MQ07a_SC10_PyreanDeathFreezeM Auto

Armor Property ElderScrollHandAttachArmor Auto
Armor Property _00E_MQ07a_TealorNecklace Auto

EffectShader Property GhostFXShader Auto
EffectShader Property TimeFadeIn01FXS Auto
EffectShader Property TimeFadeOut01FXS Auto

Explosion Property _00E_TeleportExplosion Auto

Quest Property MQ07 Auto

Explosion Property FallingDustExplosion01 Auto
Explosion Property _00E_NPCOorbayaUnleashHeavenExplosion Auto

Location Property MQ07a_VisionRealm Auto

Activator Property _00E_MQ07a_SigilStoneShardsAct Auto

LocationRefType Property MQ07a_SC9_Footman_Wave01 Auto
LocationRefType Property MQ07a_SC9_Footman_Wave02 Auto
LocationRefType Property MQ07a_SC9_Footman_Wave03 Auto

Weather Property _00E_MQ07aOldManManorNoRain Auto

ReferenceAlias Property SC10_Mage Auto

MusicType Property _00E_Music_Combat_BonehunterNoCond Auto

ObjectReference Property MQ07a_OetziREF Auto
ObjectReference Property MQ07a_SC1_LexMarker Auto
ObjectReference Property MQ07a_SC1_JesparMarker Auto
ObjectReference Property MQ07a_SC1_TealorMarker Auto
ObjectReference Property MQ07a_SC2_JesparTargetMarker Auto
ObjectReference Property MQ07a_SC2_Campfire Auto
ObjectReference Property MQ07a_SC2_JesparWaitForNightfallMarker Auto
ObjectReference Property MQ07a_SC2_PlayerWaitMarker Auto
ObjectReference Property MQ07a_SC4_ChairREF Auto
ObjectReference Property MQ07a_SC3_LivingRoomDoor Auto
ObjectReference Property MQ07a_SC4_ExtraRoomDoor Auto
ObjectReference Property MQ07a_SC5_LiftPlatform Auto
ObjectReference Property MQ07a_SC5_LiftMarkerDown Auto
ObjectReference Property MQ07a_SC5_LiftMarker02 Auto
ObjectReference Property MQ07a_SC5_Platform Auto
ObjectReference Property MQ07a_SC5_PlatformMarker01 Auto
ObjectReference Property MQ07a_SC5_PlatformMarker02 Auto
ObjectReference Property MQ07a_SC5_PlatformMarker03 Auto
ObjectReference Property MQ07a_SC5_OetziREFNew Auto
ObjectReference Property MQ07a_SC5_TeleportPlayerMarker Auto
ObjectReference Property MQ07a_SC5_Mist Auto
ObjectReference Property MQ07a_SC5_FlyMarkerM Auto
ObjectReference Property MQ07a_SC6_KitchenMarker001 Auto
ObjectReference Property MQ07a_SC08_ZuraMarker Auto
ObjectReference Property MQ07a_SC08_KurmarWalkout Auto
ObjectReference Property MQ07a_SC08_ArrowMarker Auto
ObjectReference Property MQ07a_SC8_HouseDoor Auto
ObjectReference Property MQ07a_SC9_Door Auto
ObjectReference Property MQ07a_SC9_MageAppearMarker Auto
ObjectReference Property MQ07a_SC11_AgedManLeanFurniture Auto
ObjectReference Property MQ07a_SC11_PlayerMarker Auto
ObjectReference Property MQ07a_SC11_light Auto
ObjectReference Property MQ07a_SC11_Door Auto
ObjectReference Property MQ07a_SC12_PlayerPortOutMarker Auto
ObjectReference Property MQ07a_SC12_Linker Auto
ObjectReference Property MQ07a_SC12_JesparPortMarker Auto
ObjectReference Property MQ07a_SC13_JesparLean Auto
ObjectReference Property MQ07a_SC13_PlayerMarker Auto
ObjectReference Property MQ07a_SC13_WordOfTheDead Auto
ObjectReference Property MQ07a_SC13_JesparTeleport Auto
ObjectReference Property MQ07a_SC13_PlayerTeleport Auto
ObjectReference Property MQ07a_SC3_PianoMusic Auto
ObjectReference Property MQ07a_SC13_TealorTableMarker Auto
ObjectReference Property MQ07a_SC13_PlayerStand Auto
ObjectReference Property MQ07a_SC14_Pedestal Auto
ObjectReference Property MQ07a_SC14_SigilStone Auto
ObjectReference Property MQ07a_SC14_SigilstoneFX Auto
ObjectReference Property MQ07a_SC14_SigilStoneLight2 Auto
ObjectReference Property MQ07a_SC14_LexMoveToMarker Auto
ObjectReference Property MQ07a_SC14_KonstantinMoveToMarker Auto
ObjectReference Property MQ07a_SC14_YoungMageMarker Auto
ObjectReference Property MQ07a_SC14_SigilstoneMarker Auto
ObjectReference Property MQ07a_SC6_CollPlane Auto
ObjectReference Property MQ07a_SC5_PyreanHeadmarker Auto
ObjectReference Property MQ07a_SC6_KnockDoorMarker Auto
ObjectReference Property MQ07a_SC06_KitchenDoorREF Auto
ObjectReference Property _00E_MQ07a_GlyphDrawingContainerREF Auto
ObjectReference Property MQ07a_JesparFollowTriggerStartREF Auto
ObjectReference Property MQ07a_SC13_WordOfTheDeadSoundREF Auto
ObjectReference Property MQ07a_SC10_PlayerWalkmarker Auto
ObjectReference Property MQ07a_VisionStart_REF Auto
ObjectReference Property _00E_MQ07a_SC6_VisionHomeTGBX_Ref Auto

Sound Property DRSStoneLabyrinthianOpenM Auto
Sound Property DRSStoneRotatingDiscLPM Auto
Sound Property _00E_A2_Ghostwalk_TeleportDoneSound Auto
Sound Property _00E_TeleportCharge Auto 
Sound Property _00E_MQ07a_WordOfTheDeadTransformSpiritM Auto 
Sound Property OBJEyeofMagnusVanishM Auto 
Sound Property FXExplosionCatapultNearM Auto 
Sound Property _00E_MQ07a_VisionStartM Auto 
Sound Property _00E_MQ07a_DoorBangM Auto 
Sound Property QSTMQ206ElderScrollRead2DSound Auto 
Sound Property TRPImpactImpalex Auto
Sound Property _00E_Horror_Ghosts_01M Auto
Sound Property _00E_MQ07a_SigilStoneActivationM Auto

Idle Property IdleMT_DoorBang Auto
Idle Property IdleStop Auto
Idle Property WebIdleExit Auto
Idle Property bleedoutStart Auto
Idle Property bleedoutStop Auto

MusicType Property _00E_Music_Special_Zyklus_OneSelection Auto

ImageSpaceModifier Property FadeToBlackIMOD Auto
ImageSpaceModifier Property FadeToBlackHoldIMOD Auto
ImageSpaceModifier Property FadeToBlackBackIMOD Auto
ImageSpaceModifier Property _00e_TeleportArrive Auto
ImageSpaceModifier Property _00E_MQ07a_WordOfTheDeadTransformIMOD Auto
ImageSpaceModifier Property _00E_MQ07a_VisionIMOD Auto
ImageSpaceModifier Property _00E_MQ07a_VisionAwake Auto
ImageSpaceModifier Property _00E_MQ07a_FreezePlayer Auto
ImageSpaceModifier Property _00E_MQ07a_FreezePlayerFinal Auto
ImageSpaceModifier Property _00E_MQ07a_CollapseManor Auto
ImageSpaceModifier Property _00E_NPCTeleportExplosionIMOD Auto
ImageSpaceModifier Property FadeToWhiteBackImod Auto
ImageSpaceModifier Property MQ07a_SC14_SigilstoneActivationExpIMOD Auto
ImageSpaceModifier Property _00E_MQ07a_SigilStoneShardTouchIMOD Auto

Formlist Property _00E_MQ07a_Enemies_Wave_01 Auto
Formlist Property _00E_MQ07a_Enemies_Wave_02 Auto
Formlist Property _00E_MQ07a_Enemies_Wave_03 Auto

GlobalVariable Property MQ07a_Wave_01_EnemiesTotal Auto
GlobalVariable Property MQ07a_Wave_02_EnemiesTotal Auto
GlobalVariable Property MQ07a_Wave_03_EnemiesTotal Auto

Scroll Property _01E_TeleportrolleSonnentempel Auto

Message Property _00E_MQ07a_ThoughtsMemory02 Auto
Message Property _00E_MQ07a_ThoughtsMemory03 Auto

MiscObject Property _00E_MQ07a_SigilStoneShards Auto
MiscObject Property _00E_MQ07a_PyreanGlyphsDrawing Auto
MiscObject Property _00E_MQ07a_RitualScroll Auto

Scene Property MQ07a_SC1_ExplanationInChronikum Auto
Scene Property MQ07A_SC2_TravelToManor Auto
Scene Property MQ07A_SC3_GateScene Auto
Scene Property MQ07A_SC4_Interlude Auto
Scene Property MQ07A_SC5_Riddle Auto
Scene Property MQ07A_SC6_Doorstep Auto
Scene Property MQ07A_SC7_KitchenScene Auto
Scene Property MQ07A_SC8_PlayerReadScroll Auto
Scene Property MQ07A_SC9_Battle Auto
Scene Property MQ07A_SC10_MageKillsPyrean Auto
Scene Property MQ07A_SC11_DialogueWithAgedMan Auto
Scene Property MQ07A_SC12_JesparFinalDialogue Auto
Scene Property MQ07A_SC13_TealorFinalDialogue Auto
Scene Property MQ07A_SC14_SigilstoneActivation Auto

Spell Property _00E_MQ07a_MageIceSpike Auto
Spell Property _00E_MQ07a_MageIceSTorm Auto
Spell Property _00E_Ability_StaggerSelfSpell Auto
Spell Property _00E_MQ07a_TeleportPyreanSP Auto
Spell Property _00E_MQ07a_KillerArrowSP Auto
Spell Property _00E_MQ07a_AbSigilStoneShard Auto

Key Property _00E_MQ07a_ChestKey Auto

GlobalVariable Property MQ07a_PlatformActivated Auto
GlobalVariable Property Timescale Auto
GlobalVariable Property MQ07a_EnemiesLeft Auto
GlobalVariable Property MQ07a_CurrentWave Auto
GlobalVariable Property _00E_TeleportGlobal Auto
GlobalVariable Property CompanionIsTalking Auto
GlobalVariable Property _00E_AchievementsEnabled Auto
GlobalVariable Property _00E_FS_Theriantrophist_AllowTemporaryTransform Auto

Formlist Property MQ07a_SC14_FurnitureToDisable Auto