Scriptname _00E_MQ12b_Functions extends Quest Conditional

Import _00E_QuestFunctions
Import Utility

;=====================================================================================
;                                        GENERAL FUNCTIONS                                       
;=====================================================================================

Int CurScriptVersion = 0
Int Property LATEST_SCRIPT_VERSION = 2 AutoReadOnly

Actor[] RegisteredDisabledNPCs
Int nRegisteredDisabledNPCs
Bool bDisabledNPCsLocked
Actor[] RegisteredGhostedNPCs
Int nRegisteredGhostedNPCs
Bool bGhostedNPCsLocked

Function PrepareNPC(Actor akMoveActor, Bool bOnlyGhost = False)
    If bArkUnderAttackPrelude == False
        Return
    EndIf

    ; Validate akMoveActor, could receive "nullptr form" instead of a valid actor from the packages
    If akMoveActor == None || akMoveActor.GetActorBase() == None 
        Return
    EndIf

    If akMoveActor.IsDisabled()
        Return
    EndIf

    If bOnlyGhost == False && akMoveActor.GetEnableParent() == None
        akMoveActor.Disable()
        _RegisterDisabledNPC(akMoveActor)
        Return
    EndIf    

    If akMoveActor.IsGhost() == False
        akMoveActor.SetGhost(True)
        _RegisterGhostedNPC(akMoveActor)
        Return
    EndIf
EndFunction

Function _RegisterDisabledNPC(Actor akMoveActor)
    While bDisabledNPCsLocked
        Utility.WaitMenuMode(0.1)
    EndWhile

    bDisabledNPCsLocked = True

    If RegisteredDisabledNPCs.Length == 0 ; Version update
        RegisteredDisabledNPCs  = New Actor[128]
        nRegisteredDisabledNPCs = 0
    EndIf
    If RegisteredDisabledNPCs.Find(akMoveActor) < 0
        If nRegisteredDisabledNPCs >= RegisteredDisabledNPCs.Length
            Debug.Notification("MQ12b has problems: reached the limit of stored disabled NPCs")
        Else
            RegisteredDisabledNPCs[nRegisteredDisabledNPCs] = akMoveActor
            nRegisteredDisabledNPCs += 1
        EndIf
    EndIf

    bDisabledNPCsLocked = False
EndFunction

Function _RegisterGhostedNPC(Actor akMoveActor)
    While bGhostedNPCsLocked
        Utility.WaitMenuMode(0.1)
    EndWhile

    bGhostedNPCsLocked = True

    If RegisteredGhostedNPCs.Length == 0 ; Version update
        RegisteredGhostedNPCs  = New Actor[128]
        nRegisteredGhostedNPCs = 0
    EndIf
    If RegisteredGhostedNPCs.Find(akMoveActor) < 0
        If nRegisteredGhostedNPCs >= RegisteredGhostedNPCs.Length
            Debug.Notification("MQ12b has problems: reached the limit of stored ghosted NPCs")
        Else
            RegisteredGhostedNPCs[nRegisteredGhostedNPCs] = akMoveActor
            nRegisteredGhostedNPCs += 1
        EndIf
    EndIf

    bGhostedNPCsLocked = False
EndFunction

Function ReEnableNPCs()
    Int Index
    ObjectReference ref

    Index = 0
    While Index < nRegisteredDisabledNPCs
        RegisteredDisabledNPCs[Index].EnableNoWait()
        RegisteredDisabledNPCs[Index] = None
        Index += 1
    EndWhile

    RegisteredDisabledNPCs = New Actor[1]

    Index = 0
    While Index < nRegisteredGhostedNPCs
        RegisteredGhostedNPCs[Index].SetGhost(False)
        RegisteredGhostedNPCs[Index] = None
        Index += 1
    EndWhile

    RegisteredGhostedNPCs = New Actor[1]

    ; Old ways of enabling NPCs, for backward compatibility
    OldReenableDisabledNPC()
    If CurScriptVersion == 0
        _00E_QuestFunctions.EnableReferenceFormList(MQ12b_SC11_NPCsRef)

        MQ12b_SiegeNPCs.Revert()

		OldRemoveGhostFlag()
    EndIf
EndFunction

Function OldReenableDisabledNPC() ; For version updates with CurScriptVersion < 2
    If CurScriptVersion < 2
        _00E_QuestFunctions.EnableReferenceFormList(MQ12b_AllDisabledNPCs)
    EndIf
EndFunction

Function OldRemoveGhostFlag() ; For version updates with CurScriptVersion == 0
	If CurScriptVersion == 0 && Self.IsCompleted() == 1
		int Index = MQ12b_UnGhostNPCs_OnVersionUpdate1580.GetSize()
        While Index > 0
            Index -= 1
            (MQ12b_UnGhostNPCs_OnVersionUpdate1580.GetAt(Index) as Actor).SetGhost(False)
        EndWhile
	EndIf
EndFunction

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

Function SetUp()

    iCrimeGoldBeforeMQ12bNonViolent = A_CrimeFaction.GetCrimeGoldNonViolent()
    iCrimeGoldBeforeMQ12bViolent = A_CrimeFaction.GetCrimeGoldViolent()
    
    A_CrimeFaction.SetCrimeGold(0)
    A_CrimeFaction.SetCrimeGoldViolent(0)
    _00E_MC_JorrekRef.Disable()
    _00E_MC_TealorREF.EquipItem(_01E_20Hueterschwert, true, true)
    _00E_MC_YuslanRef.Disable()
    _00E_SilenceLongTransitionHighPriority.Add()
    MQ03_SC1_CastleWorldDoor.BlockActivation(True)
    _00E_SouthQuarter_UndercityDoorREF.BlockActivation(True)
    MQ12b_SC4_BarracksDoorREF.BlockActivation(True)
    MQ12b_SC5_HarborDoorREF.BlockActivation(True)
	CapitalCity_UpperCityToMarket01.BlockActivation(True)
	CapitalCity_UpperCityToMarket02.BlockActivation(True)
    MQ12b_Market_CastleCollisionREF.Enable()
	MQ12b_DisableThisDudeHeIsAnnoyingREF.Disable()
    _00E_TeleportGlobal.SetValueInt(1)
    PlayerREF.AddToFaction(MQ12b_TemporarySiegeFaction)
	Ordenshueter.GetReference().Enable()
    Ordenshueter.GetReference().MoveTo(MQ12b_SC1_Orderguard01)
    Ordenshueterin.GetReference().MoveTo(MQ12b_SC1_Orderguard02)

    CurScriptVersion        = LATEST_SCRIPT_VERSION
    RegisteredDisabledNPCs  = New Actor[128]
    nRegisteredDisabledNPCs = 0
    RegisteredGhostedNPCs   = New Actor[128]
    nRegisteredGhostedNPCs  = 0

    bArkUnderAttackPrelude = True

    SkyrimOvercastRain.SetActive(True)
    _00E_MC_LexREF.EvaluatePackage()

    AdjustTime()
    
EndFunction

Function BlockDoors()

    int iIndex = MQ12b_SC01_ArkDoors.GetSize()
    
    While iIndex > 0
        iIndex -= 1
        ObjectReference objDoorToBlock = MQ12b_SC01_ArkDoors.GetAt(iIndex) as ObjectReference
        objDoorToBlock.BlockActivation(True)
    EndWhile
    
EndFunction

Function StartSC02Failsave()

    iCrimeGoldBeforeMQ12bNonViolent = A_CrimeFaction.GetCrimeGoldNonViolent()
    iCrimeGoldBeforeMQ12bViolent = A_CrimeFaction.GetCrimeGoldViolent()
    
    If Self.GetStage() < 15
        Self.SetStage(15)
    EndIf
    
    If _00E_MC_LeoraREF.IsDisabled()
        _00E_MC_LeoraREF.Enable()
    EndIf

    If _00E_MC_YuslanRef.IsDisabled()
        _00E_MC_YuslanRef.Enable()
    EndIf
    
    Utility.Wait(0.25)

    _00E_MC_LeoraREF.MoveTo(MQ12b_SC2_LeoraMarker002)
    _00E_MC_YuslanRef.MoveTo(MQ12b_SC2_ShaRimMarker002)
    
    If !MQ12b_SC2_Attack.IsPlaying()
        MQ12b_SC2_Attack.ForceStart()
    EndIf
    
EndFunction

Function StartSC02()

    If _00E_MC_LeoraREF.IsDisabled()
        _00E_MC_LeoraREF.Enable()
    EndIf

    If _00E_MC_YuslanRef.IsDisabled()
        _00E_MC_YuslanRef.Enable()
    EndIf
    
    SkyrimOvercastRain.SetActive(True)
    _00E_MC_LeoraREF.MoveTo(MQ12b_SC2_LeoraMarker002)
    _00E_MC_YuslanRef.MoveTo(MQ12b_SC2_ShaRimMarker002)
    MQ12b_SC2_Attack.ForceStart()
    
EndFunction

Function TealorAppears()
    
    If _00E_MC_TealorRef.IsDisabled()
        _00E_MC_TealorREF.Enable()
    EndIf
    
    _00E_SilenceLongTransitionHighPriority.Add()
    Levelsystem.SetAllowIdleChatter(False)
    _00E_MC_TealorREF.MoveTo(MQ12b_SC2_TealorStartMarker005)
    
    Utility.Wait(0.5)
    
    If _00E_MC_TealorREF.GetWorldSpace() == PlayerREF.GetWorldSpace()
        _00E_MC_TealorREF.MoveTo(MQ12b_SC2_TealorStartMarker005)
    EndIf

EndFunction

Function SC02_TealorFailsave()

    ; Failsave to move Tealor to the scene in the upper quarters
    ; where Yuslan is arguing with Leora about the magical blockade.

    If _00E_MC_TealorREF.GetDistance(_00E_MC_YuslanRef) > 198
        Wait(1)
        If _00E_MC_TealorREF.GetDistance(_00E_MC_YuslanRef) > 198
            _00E_MC_TealorREF.MoveTo(MQ12b_SC2_ShaRimMarker002)
        Endif
    EndIf

EndFunction

Function StartSC03()

    _00E_SilenceLongTransitionHighPriority.Remove()
    _00E_Music_Combat_BonehunterNoCond.Add()
    
    If _00E_MC_LeoraREF.IsDisabled()
        _00E_MC_LeoraREF.Enable()
    EndIf

    If _00E_MC_YuslanRef.IsDisabled()
        _00E_MC_YuslanRef.Enable()
    EndIf
    
    If _00E_MC_TealorRef.IsDisabled()
        _00E_MC_TealorREF.Enable()
    EndIf
    
    MQ12b_SC3_CityGuardREF.Enable()
    MQ12b_SC3_CityGuardREF.MoveTo(MQ12b_SC3_CityGuardStartMarker)

    MQ12b_SC3_CatapultAttack.ForceStart()

    AMBrCivilWarCatapultsDistantM.Play(PlayerREF)
    ObjectReference CatapultStrike = MQ12b_SC3_CatapultStrikeMarker002.PlaceAtMe(CWCatapultStrike)
    
    _00E_MC_TealorREF.SetLookAt(CatapultStrike)
    _00E_MC_LeoraREF.SetLookAt(CatapultStrike)
    _00E_MC_YuslanRef.SetLookAt(CatapultStrike)
    
    Wait(4)
    
    _00E_Ability_StaggerSelfSpell.Cast(_00E_MC_YuslanRef,_00E_MC_YuslanRef)
    _00E_Ability_StaggerSelfSpell.Cast(_00E_MC_LeoraREF,_00E_MC_LeoraREF)
    MQ12b_SC3_BarrierREF002.Enable()
    MQ12b_SC3_TealorBarrierMarkerREF.Enable()
    
    Wait(1)
    
    LaunchCityAttack()
    
EndFunction

Function LaunchCityAttack()

    Game.RequestAutoSave()
    SendModEvent("ArkSiegeStarted")
    iBellSound = _00E_BellLoop.Play(PlayerREF)
    MQ03_SC1_CastleWorldDoor.BlockActivation(True)
    MQ12b_SC4_BarracksDoorREF.BlockActivation(True)
    _00E_SouthQuarter_UndercityDoorREF.BlockActivation(True)
    MQ12b_SC5_HarborDoorREF.BlockActivation(True)
    MQ12b_SC5_LowerDistrictMarketDoor01REF.BlockActivation(True)
    MQ12b_SC5_LowerDistrictMarketDoor02REF.BlockActivation(True)
    EnableMarketProps()
    
    SkyrimOvercastRain.SetActive(True)
    _00E_SilenceLongTransitionHighPriority.Remove()
    _00E_Music_Combat_BonehunterNoCond.Add()
    _00E_MQ12b_SC3_ScreamM.Play(MQ12b_SC3_ScreamMarker)
    AMBCivilWarBattleStartDistant.Play(PlayerREF)
    MQ12b_SC3_PanicTriggerboxREF.Enable()
    MQ12b_StayDisabledLinker.Disable()
    MQ12b_SC3_UpperCityLinker01.Enable()
    MQ12b_SC3_CatapultFireController.PlaceAtMe(CWCatapultStrikeNoDmg)
    StrikeSpawner = MQ12b_SC3_CatapultFireController
    bArkUnderAttack = True
    MQ12b_ArkUnderAttack.SetValueInt(1)
    RegisterForSingleUpdate(3)
    GoToState("SiegeUpperCity")
    Wait(1)
    MQ12b_SC3_BattleSoundMarker.Enable()
    
EndFunction

Function SoldierFailsave()

    if MQ12b_SC3_CityGuardREF.GetDistance(MQ12b_SC3_CityGuardRunToMarker) >= 350
        MQ12b_SC3_CityGuardREF.MoveTo(MQ12b_SC3_CityGuardRunToMarker)
    EndIf

EndFunction

Function StartSC04()

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

	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_TealorREF, True, 600, 700, 200)

    MQ12b_SC3_BarrierREF002.PlayAnimation("TransitionAnim")
    MQ12b_SC4_TealorTravelToMistDistrict.ForceStart()

    MQ12b_SC3_TealorBarrierMarkerREF.Disable()
    CapitalCity_UpperCityToMarket01.BlockActivation(False)
	CapitalCity_UpperCityToMarket02.BlockActivation(False)
	
EndFunction

Function TeleportYuslan()

    Levelsystem.TeleportNPC(_00E_MC_YuslanRef, MQ07a_SC14_YoungMageMarker001)

EndFunction

Function UnblockHarborDoor()

    MQ12b_SC5_HarborDoorREF.BlockActivation(False)

EndFunction

Function EnableMarketProps()

    MQ12b_SC4_Market_Linker.Enable()

EndFunction

Function StartSC05()

	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_TealorREF, False)
	MQ12b_SC3_CityGuardREF.Disable()

    _00E_MC_TealorREF.MoveTo(MQ12b_SC4_TealorBenchmark01)
    
    MQ12b_SC5_TealorLowerDistrict.ForceStart()
    
    EnableLowerCityProps()
    
EndFunction

Function EnableLowerCityProps()

    MQ12b_SC5_LowerDistrictLinkMarker.Enable()
    MQ12b_SC5_HarlejanLinker.Enable()
    
EndFunction

Function StartSC06()
    
    Sound.StopInstance(iBellSound)
    MQ12b_SC11_GateREF.Enable()
	
	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_TealorREF, True, 600, 700, 200)
    
    If MQ12b_SC11_GateREF.GetOpenState() != 1
        MQ12b_SC11_GateREF.SetOpen(True)
    EndIf
	
    MQ12b_SC6_HarborLinker.Enable()
    MQ12c_GuardLinker.Disable()
    MQ12b_SC5_HarlejanLinker.Enable()
    MQ12b_SC6_NehrimeseGateLinker.Enable()
    MQ12b_SC6_HarborProp045.Enable()
    _00E_MC_TealorREF.MoveTo(MQ12b_SC5_TealorBenchmark02)
    
    MQ12b_SC5_HarlejanGuardNaraREF.MoveTo(DebugMarker001)
    MQ12b_SC5_HarlejanGuardYoungREF.MoveTo(DebugMarker002)
    MQ12b_SC5_HarlejanGuardGidonREF.MoveTo(DebugMarker003)

    MQ12b_SC5_SergeantHarlejanREF.MoveTo(DebugMarker004)

    MQ12b_SC6_BattleInHarborDistrict.ForceStart()
	
	; need to disable these guards: if the player ignored them, tealor might aggro them even in the harbor
	MQ12b_SC4_Market_Linker.Disable()

    GypsyMinstrelsControl.TriggerUpdate()
    
EndFunction

Function EnableArchers()

    MQ12b_SC6_ArcherMarker.Enable()
  
EndFunction

Function EnableGateFoes()

    MQ12b_SC6_NehrimeseGateLinker.Enable()

EndFunction

Function SC07_Failsave()

    MQ12b_SC5_HarlejanGuardYoungREF.MoveTo(MQ12b_SC11_TealorSpawnMarker)

EndFunction

Function StartSC07()

	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_TealorREF, False)
	
    SetObjectiveCompleted(10)
    MQ12b_SC5_HarlejanGuardNaraREF.ResetHealthAndLimbs()
    MQ12b_SC5_HarlejanGuardYoungREF.ResetHealthAndLimbs()
    MQ12b_SC5_HarlejanGuardGidonREF.ResetHealthAndLimbs()
    MQ12b_SC5_SergeantHarlejanREF.ResetHealthAndLimbs()
    
    Wait(1)
    
    MQ12b_SC7_GateDiscussion.ForceStart()

EndFunction

Function PlayStuckSound()

    _00E_MQ12b_SC6_GateCrankStuckM.Play(MQ12b_SC7_CrankREF)

EndFunction


;=====================================Repair gate crank sequence ====================================

Function StartSC08()
	
	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_TealorREF, True, 600, 700, 200)
	
    MQ12b_SC8_GateDoorREF.Lock(False)
    MQ12b_SC8_FollowTealorToWallEntrance.ForceStart()
    
EndFunction

Function ChangeMusic()

    SetObjectiveCompleted(15)
    _00E_MC_TealorREF.MoveTo(PlayerREF)
    _00E_Music_Combat_BonehunterNoCond.Remove()
    
EndFunction

Function StartSC09()
	
	_00E_QuestFunctions.SetNPCAsCompanion(_00E_MC_TealorREF, False)

    MQ12b_SC9_PlayerRepairsMechanism.ForceStart()
    MQ12b_SC9_Door.Lock(False)

EndFunction

Function CallVision()

    MQ12b_SC09_PlayerVisionMarker = PlayerREF.PlaceAtMe(XMarker, 1)
    Levelsystem.VisionEffectTimestop()

EndFunction

Function EndVision()

    Levelsystem.VisionEffectTimestopStop()
    PlayerREF.MoveTo(MQ12b_SC09_PlayerVisionMarker)
    
EndFunction

Function FireCannon()

    FXExplosionCatapultFarM.Play(PlayerREF)

EndFunction

Function StartSC10()

    MQ12b_SC10_PlayerRepairsMechanismPart02.ForceStart()

EndFunction

Function EnableAssassin()

    MQ12b_SC10_WayOut.BlockActivation(False)
    InitializeCoordinates(PlayerREF)
    MQ12b_SC10_NehrimeseAssassin.Enable()
    _00E_A2_Ghostwalk_TeleportSound.Play(PlayerREF)
    _00E_A2_GhostwalkTeleportReappearVFX.Play(MQ12b_SC10_NehrimeseAssassin)
    MQ12b_SC10_NehrimeseAssassin.PlaceAtMe(_00E_A2_GhostwalkImpactExplosion, 1)
    MQ12b_SC10_NehrimeseAssassin.MoveTo(PlayerREF, EndLocX, EndLocY, EndLocZ)
    MQ12b_SC10_NehrimeseAssassin.SetAngle(TargetAngleX, TargetAngleY, TargetAngleZ)
    _00E_A2_GhostwalkTeleportVFX.Play(MQ12b_SC10_NehrimeseAssassin)
    _00E_A2_GhostwalkTeleportReappearVFX.Stop(MQ12b_SC10_NehrimeseAssassin)
    MQ12b_SC10_NehrimeseAssassin.StartCombat(PlayerREF)
    
EndFunction

Function InitializeCoordinates(Actor TargetVictim)

    EndLocX = (-100*Math.Sin(TargetVictim.GetAngleZ()))
    EndLocY = (-100*Math.Cos(TargetVictim.GetAngleZ()))
    EndLocZ = 0

    TargetAngleX = TargetVictim.GetAngleX()
    TargetAngleY = TargetVictim.GetAngleY()
    TargetAngleZ = TargetVictim.GetAngleZ()

EndFunction

;=====================================Samael Gate Scene ============================================

Function EnableDefenseTroop()

    AudioCategoryAMB.SetVolume(0.7)
    Weather.ReleaseOverride()
    SkyrimStormRain.ForceActive(True)
    bArkUnderAttackFinalScene = True
    MoveUnwantedNPCs()
    
    MQ12b_SC11_CannonREF.Enable()
    MQ12b_SC6_HarborProp045.Disable()
    
    If _00E_MC_TealorREF.IsDisabled()
        _00E_MC_TealorREF.Enable() 
    EndIf
    
    _00E_MC_TealorREF.MoveTo(MQ12b_SC11_TealorSpawnMarker)
    MQ12b_SC5_HarlejanGuardGidonREF.MoveTo(MQ12b_SC11_GidonCannonMarker)
    MQ12b_SC5_HarlejanGuardNaraREF.MoveTo(MQ12b_SC11_NaraCannonMarker)
    MQ12b_SC5_SergeantHarlejanREF.MoveTo(MQ12b_SC11_HarlejanCannonMarker)
    MQ12b_SC5_HarlejanGuardYoungREF.MoveTo(MQ12b_SC11_YoungGuardCannonMarker)
    MQ12b_SC11_SamaelREF.MoveTo(MQ12b_SC11_SamaelMarker)
    MQ12b_SC11_SamaelREF.Enable()
    MQ12b_SC11_SamaelREF.SetAlpha(0.0)
    MQ12b_SC11_CollisionMarker.Enable()
    MQ12b_SC11_HarborGateScene.ForceStart()
    _00E_SilenceLongTransitionHighPriority.Add()

EndFunction

Function MoveUnwantedNPCs()

    int iNPCIndex = MQ12b_SC11_NPCsRef.GetSize()
    
    While iNPCIndex > 0
    
        iNPCIndex -= 1

        Actor RefToMove = MQ12b_SC11_NPCsRef.GetAt(iNPCIndex) as Actor
        
        If !RefToMove.IsDisabled() && !(RefToMove.IsDead())
            RefToMove.SetGhost(True)
            RefToMove.MoveTo(MQ12b_SC11_GuardDumpMarker)
        EndIf
    
    EndWhile
    
    Return

EndFunction

Function FadeInSamael()

    _00E_SilenceLongTransitionHighPriority.Remove()
    _00E_Music_Dungeon_Hideout.Remove()
    _00E_Music_Special_MQ12b_Samael.Add()
    TimeFadeIn01FXS.Play(MQ12b_SC11_SamaelREF)
    MQ12b_SC11_SamaelREF.MoveTo(MQ12b_SC11_SamaelMarker)
    Debug.sendAnimationEvent(MQ12b_SC11_SamaelREF, "IdleWebEnterInstant")
    MQ12b_SC11_SamaelREF.setActorValue("Variable03", 5)
    TimeFadeOut01FXS.Stop(MQ12b_SC11_SamaelREF)
    TimeFadeIn01FXS.Play(MQ12b_SC11_SamaelREF)
    MQ12b_SC11_SamaelBarrierREF.Enable()
    _00E_MAGEldritchExplosionImod.Apply()
    Game.ShakeCamera(afStrength = 0.1)
    _00E_QuestFunctions.WaitForReferenceToLoad(MQ12b_SC11_SamaelBarrierREF)
    MAGConjurePortal.Play(MQ12b_SC11_SamaelBarrierREF)
    MQ12b_SC11_SamaelBarrierREF.PlayAnimation("playanim02")
    bBarrierFailsave = True
    RegisterForSingleUpdate(2)
    _00E_MQ12b_SC11_BarrierLightREF.Enable()    
    
EndFunction

Function ExplosionSamael()

    MQ12b_SC11_SamaelREF.playidle(WebIdleExit)
    Wait(1)
    TimeFadeIn01FXS.Stop(MQ12b_SC11_SamaelREF)
    MQ12b_SC11_SamaelREF.setActorValue("Variable03", 0) 
    MQ12b_SC11_SamaelREF.PlaceAtMe(_00E_MAGEldritchShockExplosion, 1)
    _00E_MAGEldritchExplosionM.Play(MQ12b_SC11_SamaelREF)
    _00E_Ability_StaggerSelfSpell.Cast(MQ12b_SC5_HarlejanGuardYoungREF, MQ12b_SC5_HarlejanGuardYoungREF)
    _00E_Ability_StaggerSelfSpell.Cast(MQ12b_SC5_SergeantHarlejanREF, MQ12b_SC5_SergeantHarlejanREF)
    MQ12b_SC11_SamaelREF.SetAlpha(1)
    MQ12b_SC11_SamaelREF.PushActorAway(MQ12b_SC5_HarlejanGuardGidonREF, 5)
    MQ12b_SC5_HarlejanGuardGidonREF.GetActorBase().SetEssential(False)
    MQ12b_SC5_HarlejanGuardGidonREF.Kill(MQ12b_SC11_SamaelREF)
    MQ12b_SC11_SamaelREF.PushActorAway(MQ12b_SC5_HarlejanGuardNaraREF, 5)
    MQ12b_SC5_HarlejanGuardNaraREF.GetActorBase().SetEssential(False)
    MQ12b_SC5_HarlejanGuardNaraREF.Kill(MQ12b_SC11_SamaelREF)
    
EndFunction

Function SamaelLevitateHarlejanAndGuard()

    _00E_FXEldritchShader03.Play(MQ12b_SC5_SergeantHarlejanREF)
    _00E_FXEldritchShader03.Play(MQ12b_SC5_HarlejanGuardYoungREF)
    Debug.SendAnimationEvent(MQ12b_SC5_HarlejanGuardYoungREF, "returnToDefault")
    Debug.SendAnimationEvent(MQ12b_SC5_SergeantHarlejanREF, "returnToDefault")
    Debug.SendAnimationEvent(MQ12b_SC5_HarlejanGuardYoungREF, "IdleDA02BoethiahPostEnter")
    Debug.SendAnimationEvent(MQ12b_SC5_SergeantHarlejanREF, "IdleDA02BoethiahPostEnter")
    
    Wait(4)
    _00E_A1_DevourSoul_DisintegrateFXS.Play(MQ12b_SC5_SergeantHarlejanREF)
    _00E_A1_DevourSoul_DisintegrateFXS.Play(MQ12b_SC5_HarlejanGuardYoungREF)
    
EndFunction

Function KillHarlejanAndGuard()

    Game.ShakeCamera(afStrength = 0.5)
    ObjectReference KillMarkerHarlejan = MQ12b_SC5_SergeantHarlejanREF.PlaceAtMe(XMarker)
    ObjectReference KillMarkerGuardYoung = MQ12b_SC5_HarlejanGuardYoungREF.PlaceAtMe(XMarker)
    KillMarkerGuardYoung.MoveTo(MQ12b_SC5_SergeantHarlejanREF, 0.0, 0.0, 200)
    KillMarkerHarlejan.MoveTo(MQ12b_SC5_HarlejanGuardYoungREF, 0.0, 0.0, 200)
    _00E_A1_DevourSoul_DisintegrateFXS.Stop(MQ12b_SC5_SergeantHarlejanREF)
    _00E_A1_DevourSoul_DisintegrateFXS.Stop(MQ12b_SC5_HarlejanGuardYoungREF)
    _00E_FXEldritchShader03.Stop(MQ12b_SC5_HarlejanGuardYoungREF)
    _00E_FXEldritchShader03.Stop(MQ12b_SC5_HarlejanGuardYoungREF)
    MQ12b_SC5_HarlejanGuardYoungREF.SetAlpha(0.0)
    MQ12b_SC5_SergeantHarlejanREF.SetAlpha(0.0)
    
    KillMarkerHarlejan.PlaceAtMe(_00E_MAGEldritchShockExplosion)
    KillMarkerHarlejan.PlaceAtMe(_00E_FS_MAGGoreExplosion)
    KillMarkerGuardYoung.PlaceAtMe(_00E_MAGEldritchShockExplosion)
    KillMarkerGuardYoung.PlaceAtMe(_00E_FS_MAGGoreExplosion)

    _00E_A1_DevourSoulScreamM.Play(KillMarkerGuardYoung)
    _00E_A1_DevourSoulScreamM.Play(KillMarkerHarlejan)
        
EndFunction

Function CloseGate()

    MQ12b_SC11_GateREF.SetOpen(False)

EndFunction

Function SamaelTeleportAway()

    _00E_Music_Combat_BonehunterNoCond.Remove()
    _00E_SilenceTransitionHighPriority.Add()
    MQ12b_SC5_HarlejanLinker.Disable()
    ;MQ12b_SC5_SergeantHarlejanREF.Disable()
    ;MQ12b_SC5_HarlejanGuardYoungREF.Disable()
    _00E_MC_TealorREF.StopCombat()
    _00E_MC_TealorREF.StopCombatAlarm()
    _00E_A1_DevourSoul_DisintegrateFXS.Play(MQ12b_SC11_SamaelREF)
    Utility.Wait(1)
    MQ12b_SC11_SamaelREF.PlaceAtMe(_00E_MAGEldritchShockExplosion, 1)
    MQ12b_SC11_SamaelREF.Disable()

EndFunction

;=====================================Taranor Gate Scene ============================================

Function SetUpSC12()

    Game.RequestAutoSave()

	; need to disable these guards: if the player ignored them / they got stuck somewhere, tealor & yuslan might aggro them even in the harbor
	; is also called in StartSC06() but needs to be here for save compatibility
	MQ12b_SC4_Market_Linker.Disable()
	
	MQ12b_SC12_FacadeSoldierNehrim01.GetActorBase().SetEssential(false)
    MQ12b_SC12_FacadeSoldierEnderal01.PlayIdleWithTarget(pa_1HMKillMoveShortB, MQ12b_SC12_FacadeSoldierNehrim01)
    MQ12b_SC6_HarborProp023.PlayIdleWithTarget(pa_1HMKillMoveShortB, MQ12b_SC6_HarborProp046)
    MQ12b_SC6_HarborProp047.Kill(MQ12b_SC6_HarborProp047)
    MQ12b_SC6_HarborProp022.PlayIdleWithTarget(pa_1HMKillMoveShortB, MQ12b_SC12_FacadeSoldierEnderal02)
	
    _00E_MC_TealorREF.StopCombat()
    _00E_MC_TealorREF.StopCombatAlarm()
    
    _00E_MC_YuslanRef.Enable()
    
    If !_00E_MC_TaranorREF.IsEnabled()
        _00E_MC_TaranorREF.Enable()
    EndIf
    
    If _00E_MC_TaranorREF.IsDead()
        _00E_MC_TaranorREF.Resurrect()
    EndIf
    
    If !_00E_SC_AlmaREF.IsEnabled()
        _00E_SC_AlmaREF.Enable()
    EndIf

    If _00E_SC_AlmaREF.IsDead()
        _00E_SC_AlmaREF.Resurrect()
    EndIf
	
    MQ12b_SC12_ConversationWithTaranor.ForceStart()
    
EndFunction

Function SC12_ComeOutTaranor()
    ; Sometimes, Taranor fails to come to the gate when needed in SC12
    ; (see http://sureai.net:9898/browse/ERB-2130 ).
    ; This failsave teleports him.
    If _00E_MC_TaranorREF.GetDistance(MQ12b_SC12_TaranorWalkMarker001) > 200
        _00E_MC_TaranorREF.MoveTo(MQ12b_SC12_TaranorWalkMarker001)
    EndIf
EndFunction

Function TeleportYuslanToGate()
    Wait(2)
    _00E_QuestFunctions.SafeMoveTo(_00E_MC_YuslanRef, MQ12b_SC12_YuslanTeleportMarker)
    _00E_QuestFunctions.WaitForReferenceToLoad(_00E_MC_YuslanRef)    
    TimeFadeIn01FXS.Play(_00E_MC_YuslanRef)
    Debug.sendAnimationEvent(_00E_MC_YuslanRef, "IdleWebEnterInstant")
    _00E_MC_YuslanRef.SetActorValue("Variable03", 5)
    TimeFadeOut01FXS.Stop(_00E_MC_YuslanRef)
    TimeFadeIn01FXS.Play(_00E_MC_YuslanRef)
    Game.ShakeCamera(afStrength = 0.1)
    _00E_MC_YuslanRef.playidle(WebIdleExit)
    TimeFadeIn01FXS.Stop(_00E_MC_YuslanRef)
    _00E_MC_YuslanRef.SetActorValue("Variable03", 0)
    MQ12b_SC12_YuslanTeleportMarker.PlaceAtMe(_00E_MAGEldritchShockExplosionTeleport, 1)  

    _00E_MC_TaranorREF.MoveTo(MQ12b_SC12_TaranorEnableMarker)
    _00E_SC_AlmaREF.MoveTo(MQ12b_SC12_AlmaMarkerREF)
EndFunction

Function SetUpSC13()

    PlayerREF.AddItem(_01E_TeleportrolleSonnentempel, 1)

    _00E_MQ12b_SC11_BarrierLightREF.Disable()
    
    EnableArcanistsAndGuard()
    Levelsystem.SetAllowIdleChatter(False)
    
    Wait(1)
    
    MQ12b_SC13_TempleScene.ForceStart()

    MQ12b_SC11_SamaelBarrierREF.PlayAnimation("playanim01")
    
    _00E_MC_YaelaREF.MoveTo(MQ12a_SC15_YaelaStandMarker)
    MQ12b_SC14_SiegeTempleMarker.Enable()
    _00E_MQ12b_SC15_Novice.MoveTo(MQ12b_SC15_NoviceMarkerREF)

    MQ12b_SC14_TempleGuardWoundedREF.Enable()
    MQ12b_SC14_HarborGuardREF.MoveTo(MQ12b_SC14_OrderGuardMarker)
    
    _00E_MC_LeoraREF.Enable()
    _00E_MC_LeoraREF.SetAlpha(1)
    
    _00E_MC_JorrekRef.Disable()
    
    MQ12b_SC14_JorrekREF.Enable()

    MQ12b_SC14_ApothekariusREF.Enable()
    MQ12b_SC14_ApothekariusREF.MoveTo(MQ12b_SC14_GuardMarkerREF)
    _00E_MC_LeoraREF.MoveTo(MQ12b_SC14_LeoraMarkerREF)
    _00E_MC_NataraREF.MoveTo(MQ12b_SC14_NataraMarkerREF)
    
EndFunction

Function EnableArcanistsAndGuard()

    MQ12b_SC12_HarborArcanist02REF.Enable()
    BerserkerFXS.Play(MQ12b_SC12_YoungGuardREF)
    Return
    
EndFunction

Function EnableArcanistFX()

    _00E_MagicProtectionLoop02M.Play(MQ12b_SC12_HarborArcanist01REF)
    MQ12b_SC12_HarborArcanist02REF.AddSpell(_00E_ABEldritchDrainSelfWithFX)
    MQ12b_SC12_HarborArcanist01REF.AddSpell(_00E_ABEldritchDrainSelfWithFX)
    _00E_MC_YuslanRef.AddSpell(_00E_ABEldritchDrainSelfWithFX)

EndFunction

Function MoveTealorWeatherFailsave()
    
    If _00E_MC_TealorREF.IsDisabled()
        _00E_MC_TealorREF.Enable()
    EndIf
    
    _00E_MC_TealorREF.MoveTo(MQ12b_SC14_TealorMarkerREF)
    SkyrimStormRain.ForceActive(True)
    
EndFunction

Function SetUpSC14()

    SkyrimStormRain.ForceActive(True)
    MQ16_StubbornGuardREF.MoveTo(MQ12b_SC16_Flavour_Keeper_Female)
    MQ12b_Flavour_Novice.MoveTo(MQ12b_SC16_Flavour_Novice)
    MQ05Prologue_EmporiumKeeper.MoveTo(MQ12b_SC16_Flavour_Keeper_01)
    Game.RequestAutoSave()
    MQ12b_SC14_JorrekREF.Enable()
    MQ12b_SC14_JorrekREF.SetOutfit(_25E_HolyOrder_WardenOutfit)
    MQ12b_SC13_TempleScene.Stop()
    
    If _00E_MC_TealorREF.IsDisabled()
        _00E_MC_TealorREF.Enable()
    EndIf
            
    If MQ12b_SC13_TempleScene.IsPlaying()
        MQ12b_SC13_TempleScene.Stop()
    EndIf
    
    _00E_MC_TealorREF.MoveTo(MQ12b_SC14_TealorMarkerREF)
	_00E_MC_NataraREF.MoveTo(MQ12b_SC14_NataraMarkerREF)

    MQ12b_SC16_Flavor.ForceStart()
    
    MQ12b_SC14_TempleScene02.ForceStart()
    
EndFunction

Function SetUpSC15()

    _00E_MC_LexREF.MoveTo(MQ12a_SC0_DebugLexStart)
    _00E_MC_YaelaREF.MoveTo(MQ12a_SC15_YaelaStandMarker)

    MQ12b_SC15_TempleScene03.ForceStart()

EndFunction

Function CompleteQuestAndStartMQ12c()

    If MQ12b_SC16_Flavor.IsPlaying()
        MQ12b_SC16_Flavor.Stop()
    EndIf
    
    A_CrimeFaction.SetCrimeGold(iCrimeGoldBeforeMQ12bNonViolent)
    A_CrimeFaction.SetCrimeGoldViolent(iCrimeGoldBeforeMQ12bViolent)
    
    MQ12b_SC12_HarborArcanist02REF.Disable()
    MQ12b_Market_CastleCollisionREF.Disable()
    MQ12b_SC12_YoungGuardREF.Disable()
    AudioCategoryAMB.SetVolume(1.0)
    PlayerREF.RemoveFromFaction(MQ12b_TemporarySiegeFaction)
    MQ12b_SC14_JorrekREF.Disable()
	; the following line is called twice before, that was inserted later, see description of bug above, still needs to be called here for save compatibility
    MQ12b_SC4_Market_Linker.Disable()
    MQ12b_SC3_UpperCityLinker01.Disable()
    MQ12b_SC5_LowerDistrictLinkMarker.Disable()
    MQ12b_SC5_HarlejanLinker.Disable()
    MQ12b_SC6_HarborLinker.Disable()
    MQ12b_SC6_ArcherMarker.Disable()
    MQ12b_SC3_BattleSoundMarker.Disable()
    MQ12b_SC6_NehrimeseGateLinker.Disable()
	Ark_MyradRef.MoveToMyEditorLocation()
	MQ12b_DisableThisDudeHeIsAnnoyingREF.Enable()
    bArkUnderAttackPrelude = False
    bArkUnderAttack = False
    bArkUnderAttackFinalScene = False
    Weather.ReleaseOverride()
    _00E_SilenceTransitionHighPriority.Remove()
    _00E_TeleportGlobal.SetValueInt(0) 
    TimeScale.SetValue(fTimeScaleBefore)
    MQ03_SC1_CastleWorldDoor.BlockActivation(False)
    MQ12b_SC4_BarracksDoorREF.BlockActivation(False)
    MQ12b_SC5_HarborDoorREF.BlockActivation(False)
    _00E_SouthQuarter_UndercityDoorREF.BlockActivation(False)
    MQ12b_SC5_LowerDistrictMarketDoor01REF.BlockActivation(False)
    MQ12b_SC5_LowerDistrictMarketDoor02REF.BlockActivation(False)
    UnregisterForUpdate()
    Levelsystem.GiveEP(__Config_RewardEXP)
    Levelsystem.SetAllowIdleChatter(True)
    Self.CompleteQuest()
    ReEnableNPCs()
	DisablePanicTriggerbox()
    MQ12c.SetStage(5)
    GoToState("Aftermath")
    RegisterForSingleUpdateGameTime(24)
            
	If _00E_AchievementsEnabled.GetValueInt() == 1
		Game.UnlockAchievement("END_SIEGE_01")
	EndIf
        
EndFunction

Function DisablePanicTriggerbox() ;extra function because it gets also called from _00E_PlayerSetUpScript
	MQ12b_SC3_PanicTriggerboxREF.Disable()
EndFunction

Function StartSC01Failsave()

    If !MQ12b_SC01_LexilExplains.IsPlaying()
        MQ12b_SC01_LexilExplains.ForceStart()
    EndIf
    
EndFunction

;=====================================================================================
;                                       ADJUST GAME TIME                             
;=====================================================================================

Function AdjustTime()

    float fGameHour = GameHour.GetValue()
    
    fTimeScaleBefore = TimeScale.GetValue()
    
    If (fGameHour <= 4 || fGameHour >= 21)
        TimeScale.SetValue(0.1)
    Else
        GoToState("WaitForNight")
    EndIf

EndFunction

State WaitForNight

Event OnBeginState()

    TimeScale.SetValue(100)
    RegisterForSingleUpdate(5)
    
EndEvent

Event OnUpdate()

    If (GameHour.GetValue() <= 4 || GameHour.GetValue() >= 21)
        TimeScale.SetValue(0.1)
    Else
        RegisterForSingleUpdate(5)
    EndIf
    
EndEvent

EndState

;=====================================================================================
;                                        SIEGE EFFECTS                                       
;=====================================================================================

Function UpdateCatapultStrikes(String sStrikeLocation)

    sCurrentStrikeLocation = sStrikeLocation

EndFunction

State Aftermath

    Event OnUpdateGameTime()
        MQ12b_SC14_SiegeTempleMarker.Disable()

    EndEvent

EndState

State SiegeUpperCity

Event OnUpdate()

; Valid location names are:
; "Market"
; "UpperCity"
; "LowerDistrict"
; "HarborDistrict"

    
    if bBarrierFailsave
        bBarrierFailsave = False
        MQ12b_SC11_SamaelBarrierREF.PlayGamebryoAnimation("AnimIdle02")
    EndIf
    
    If !bArkUnderAttackFinalScene
        If sCurrentStrikeLocation == "Market"
            MQ12b_SC4_StrikeSpawnerMarket.CallCatapultStrike()
        ElseIf sCurrentStrikeLocation == "UpperCity"
            MQ12b_SC3_CatapultFireController.CallCatapultStrike()
        ElseIf sCurrentStrikeLocation == "LowerDistrict"
            MQ12b_SC4_StrikeSpawnerLowerDistrict.CallCatapultStrike()
        ElseIf sCurrentStrikeLocation == "HarborDistrict"
            MQ12b_SC4_StrikeSpawnerHarborDistrict.CallCatapultStrike()
        EndIf
        
        
        If (GameHour.GetValue() <= 4 || GameHour.GetValue() >= 21) && TimeScale.GetValue() > 1.0
            TimeScale.SetValue(0.1)
        EndIf
        
        
        RegisterForSingleUpdate(5)
    EndIf
        
EndEvent

EndState

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

bool bBarrierFailsave

float fTimeScaleBefore

float EndLocX
float EndLocY
float EndLocZ

float TargetAngleX
float TargetAngleY
float TargetAngleZ

int Property iCrimeGoldBeforeMQ12bViolent Auto Hidden
int Property iCrimeGoldBeforeMQ12bNonViolent Auto Hidden

; TELEPORT GLOBAL; WEATHER; MUSIK ZUR�CKSETZEN! BLOCKIERTE T�REN WIEDER ZUR�CKSETZEN!

; UNWANTED NPCs ZUR�CKSETZEN! FLEE VARIABLES ZUR�CKSETZEN!!

_00E_QuestFunctions Property Levelsystem Auto

String sCurrentStrikeLocation = "UpperCity"

int Property __Config_RewardEXP Auto

int iBarrierSound
int iBellSound

bool Property bArkUnderAttack Auto Hidden Conditional
bool Property bArkUnderAttackPrelude Auto Hidden Conditional
bool Property bArkUnderAttackFinalScene Auto Hidden Conditional

Actor Property _00E_MC_LexREF Auto
Actor Property _00E_MC_YuslanRef Auto
Actor Property _00E_MC_LeoraREF Auto
Actor Property _00E_MC_TealorREF Auto
Actor Property _00E_MC_TaranorREF Auto
Actor Property _00E_MC_JorrekRef Auto 
Actor Property _00E_MC_NataraREF Auto 
Actor Property PlayerREF Auto
Actor Property MQ12b_DisableThisDudeHeIsAnnoyingREF Auto
Actor Property MQ12b_SC3_CityGuardREF Auto
Actor Property MQ12b_SC5_HarlejanGuardNaraREF Auto
Actor Property MQ12b_SC5_HarlejanGuardYoungREF Auto
Actor Property MQ12b_SC5_HarlejanGuardGidonREF Auto
Actor Property MQ12b_SC5_SergeantHarlejanREF Auto
Actor Property MQ12b_SC10_NehrimeseAssassin Auto
Actor Property MQ12b_SC11_SamaelREF Auto
Actor Property MQ12b_SC12_FacadeSoldierNehrim01 Auto
Actor Property MQ12b_SC12_FacadeSoldierEnderal01 Auto
Actor Property MQ12b_SC12_FacadeSoldierEnderal02 Auto
Actor Property MQ12b_SC6_HarborProp022 Auto
Actor Property MQ12b_SC6_HarborProp023 Auto
Actor Property MQ12b_SC6_HarborProp046 Auto
Actor Property MQ12b_SC6_HarborProp047 Auto
Actor Property _00E_SC_AlmaREF Auto
Actor Property MQ12b_SC12_YoungGuardREF Auto
Actor Property MQ12b_SC12_HarborArcanist01REF Auto
Actor Property MQ12b_SC12_HarborArcanist02REF Auto
Actor Property MQ12b_SC14_ApothekariusREF Auto
Actor Property _00E_MQ12b_SC15_Novice Auto
Actor Property MQ12b_SC14_JorrekREF Auto
Actor Property MQ12b_SC14_HarborGuardREF Auto
Actor Property _00E_MC_YaelaREF Auto
Actor Property MQ05Prologue_EmporiumKeeper Auto
Actor Property MQ12b_Flavour_Novice Auto
Actor Property MQ16_StubbornGuardREF Auto Hidden

Quest Property MQ12c Auto

ImageSpaceModifier Property _00E_MAGEldritchExplosionImod Auto

MusicType Property _00E_Music_Combat_BonehunterNoCond Auto
MusicType Property _00E_SilenceLongTransitionHighPriority Auto
MusicType Property _00E_SilenceTransitionHighPriority Auto
MusicType Property _00E_Music_Dungeon_Hideout Auto
MusicType Property _00E_Music_Special_MQ12b_Samael Auto

GlobalVariable Property _00E_TeleportGlobal Auto
GlobalVariable Property MQ12b_ArkUnderAttack Auto
GlobalVariable Property GameHour Auto
GlobalVariable Property TimeScale Auto
GlobalVariable Property _00E_AchievementsEnabled Auto

Outfit Property _25E_HolyOrder_WardenOutfit Auto

ObjectReference Property MQ12b_SC1_Orderguard01 Auto
ObjectReference Property MQ12b_SC1_Orderguard02 Auto
ObjectReference Property MQ12a_SC0_DebugLexStart Auto
ObjectReference Property MQ12b_SC2_LeoraMarker002 Auto
ObjectReference Property MQ12b_SC2_ShaRimMarker002 Auto
ObjectReference Property MQ12b_SC2_TealorStartMarker005 Auto
ObjectReference Property MQ12b_SC3_CatapultStrikeMarker002 Auto
ObjectReference Property MQ12b_SC3_BarrierREF002 Auto
ObjectReference Property MQ12b_SC3_UpperCityLinker01 Auto
ObjectReference Property MQ12b_SC3_PanicTriggerboxREF Auto
ObjectReference Property MQ12b_SC3_ScreamMarker Auto
ObjectReference Property MQ12b_SC3_BattleSoundMarker Auto
ObjectReference Property MQ12b_SC3_CityGuardStartMarker Auto
ObjectReference Property MQ07a_SC14_YoungMageMarker001 Auto
ObjectReference Property MQ12b_SC3_TealorBarrierMarkerREF Auto
ObjectReference Property MQ12b_SC4_Market_Linker Auto
ObjectReference Property MQ12b_SC4_BarracksDoorREF Auto
ObjectReference Property MQ03_SC1_CastleWorldDoor Auto
ObjectReference Property MQ12b_SC5_LowerDistrictLinkMarker Auto
ObjectReference Property MQ12b_SC4_TealorBenchmark01 Auto
ObjectReference Property MQ12b_SC5_TealorBenchmark02 Auto
ObjectReference Property MQ12b_SC5_HarborDoorREF Auto
ObjectReference Property MQ12b_SC5_LowerDistrictMarketDoor01REF Auto
ObjectReference Property MQ12b_SC5_LowerDistrictMarketDoor02REF Auto
ObjectReference Property MQ12b_SC5_HarlejanLinker Auto
ObjectReference Property MQ12b_SC6_HarborLinker Auto
ObjectReference Property MQ12b_SC6_NehrimeseGateLinker Auto
ObjectReference Property MQ12b_SC6_ArcherMarker Auto
ObjectReference Property MQ12b_SC7_CrankREF Auto
ObjectReference Property _00E_SouthQuarter_UndercityDoorREF Auto
ObjectReference Property MQ12b_SC8_GateDoorREF Auto
ObjectReference Property MQ12b_SC9_Door Auto
ObjectReference Property MQ12b_SC11_CannonREF Auto
ObjectReference Property MQ12b_SC11_NaraCannonMarker Auto
ObjectReference Property MQ12b_SC11_YoungGuardCannonMarker Auto
ObjectReference Property MQ12b_SC11_GidonCannonMarker Auto
ObjectReference Property MQ12b_SC11_HarlejanCannonMarker Auto
ObjectReference Property MQ12b_SC11_SamaelMarker Auto
ObjectReference Property MQ12b_SC11_SamaelBarrierREF Auto
ObjectReference Property MQ12b_SC11_TealorSpawnMarker Auto
ObjectReference Property MQ12b_SC6_HarborProp045 Auto
ObjectReference Property _00E_MQ12b_SC11_BarrierLightREF Auto
ObjectReference Property MQ12b_SC11_GuardDumpMarker Auto
ObjectReference Property MQ12b_SC11_CollisionMarker Auto
ObjectReference Property MQ12b_SC11_GateREF Auto
ObjectReference Property MQ12b_SC12_YuslanTeleportMarker Auto
ObjectReference Property MQ12b_SC12_TaranorEnableMarker Auto
ObjectReference Property MQ12b_SC12_TaranorWalkMarker001 Auto
ObjectReference Property MQ12b_SC12_AlmaMarkerREF Auto
ObjectReference Property MQ12b_SC14_TempleGuardWoundedREF Auto
ObjectReference Property MQ12b_SC14_LeoraMarkerREF Auto
ObjectReference Property MQ12b_SC14_NataraMarkerREF Auto
ObjectReference Property MQ12b_SC14_GuardMarkerREF Auto
ObjectReference Property MQ12b_SC14_SiegeTempleMarker Auto
ObjectReference Property MQ12b_SC15_NoviceMarkerREF Auto
ObjectReference Property MQ12b_SC14_TealorMarkerREF Auto
ObjectReference Property MQ12a_SC15_YaelaStandMarker Auto
ObjectReference Property MQ12b_SC14_OrderGuardMarker Auto
ObjectReference Property MQ12b_SC09_PlayerVisionMarker Auto Hidden
ObjectReference Property MQ12b_StayDisabledLinker Auto Hidden
ObjectReference Property MQ12b_SC10_WayOut Auto Hidden
ObjectReference Property MQ12b_Market_CastleCollisionREF Auto Hidden
ObjectReference Property MQ12b_SC16_Flavour_Keeper_01 Auto Hidden
ObjectReference Property MQ12b_SC16_Flavour_Keeper_Female Auto Hidden
ObjectReference Property MQ12b_SC16_Flavour_Novice Auto Hidden
ObjectReference Property MQ12c_GuardLinker Auto Hidden
ObjectReference Property MQ12b_SC3_CityGuardRunToMarker Auto Hidden
ObjectReference Property Ark_MyradRef Auto
ObjectReference Property CapitalCity_UpperCityToMarket01 Auto
ObjectReference Property CapitalCity_UpperCityToMarket02 Auto

ObjectReference Property DebugMarker004 Auto
ObjectReference Property DebugMarker003 Auto
ObjectReference Property DebugMarker002 Auto
ObjectReference Property DebugMarker001 Auto

Faction Property MQ12b_TemporarySiegeFaction Auto
Faction Property A_CrimeFaction Auto

CWCatapultStrikeSpawnerScript Property StrikeSpawner Auto Hidden
CWCatapultStrikeSpawnerScript Property MQ12b_SC3_CatapultFireController Auto
CWCatapultStrikeSpawnerScript Property MQ12b_SC4_StrikeSpawnerMarket Auto
CWCatapultStrikeSpawnerScript Property MQ12b_SC4_StrikeSpawnerLowerDistrict Auto
CWCatapultStrikeSpawnerScript Property MQ12b_SC4_StrikeSpawnerHarborDistrict Auto

Static Property XMarker Auto

SoundCategory Property AudioCategoryAMB Auto

Formlist Property MQ12b_SC11_NPCsRef Auto
Formlist Property MQ12b_SC01_ArkDoors Auto
Formlist Property MQ12b_SiegeNPCs Auto
Formlist Property MQ12b_AllDisabledNPCs Auto
Formlist Property MQ12b_UnGhostNPCs_OnVersionUpdate1580 Auto

Activator Property CWCatapultStrike Auto
Activator Property CWCatapultStrikeNoDmg Auto

Sound Property AMBrCivilWarCatapultsDistantM Auto
Sound Property AMBCivilWarBattleStartDistant Auto
Sound Property _00E_MQ12b_SC3_ScreamM Auto
Sound Property _00E_MQ12b_SC6_GateCrankStuckM Auto
Sound Property FXExplosionCatapultFarM Auto
Sound Property _00E_A2_Ghostwalk_TeleportSound Auto
Sound Property MAGConjurePortal Auto
Sound Property _00E_A1_DevourSoulScreamM Auto
Sound Property _00E_MAGEldritchExplosionM Auto
Sound Property _00E_MagicProtectionLoop02M Auto
Sound Property _00E_BellLoop Auto

Weather Property SkyrimOvercastRain Auto
Weather Property SkyrimStormRain Auto

Idle Property WebIdleExit Auto
Idle Property pa_1HMKillMoveShortB Auto

Spell Property _00E_Ability_StaggerSelfSpell Auto
Spell Property _00E_ABEldritchDrainSelfWithFX Auto

Scene Property MQ12b_SC01_LexilExplains Auto
Scene Property MQ12b_SC2_Attack Auto
Scene Property MQ12b_SC3_CatapultAttack Auto
Scene Property MQ12b_SC4_TealorTravelToMistDistrict Auto
Scene Property MQ12b_SC5_TealorLowerDistrict Auto
Scene Property MQ12b_SC6_BattleInHarborDistrict Auto
Scene Property MQ12b_SC7_GateDiscussion Auto
Scene Property MQ12b_SC8_FollowTealorToWallEntrance Auto
Scene Property MQ12b_SC9_PlayerRepairsMechanism Auto
Scene Property MQ12b_SC10_PlayerRepairsMechanismPart02 Auto
Scene Property MQ12b_SC11_HarborGateScene Auto
Scene Property MQ12b_SC12_ConversationWithTaranor Auto
Scene Property MQ12b_SC13_TempleScene Auto
Scene Property MQ12b_SC14_TempleScene02 Auto
Scene Property MQ12b_SC15_TempleScene03 Auto
Scene Property MQ12b_SC16_Flavor Auto

Scroll Property _01E_TeleportrolleSonnentempel Auto

Weapon Property _01E_20Hueterschwert Auto

ReferenceAlias Property Ordenshueter Auto
ReferenceAlias Property Ordenshueterin Auto

Explosion Property _00E_A2_GhostwalkImpactExplosion Auto
Explosion Property _00E_MAGEldritchShockExplosion Auto
Explosion Property _00E_FS_MAGGoreExplosion Auto
Explosion Property _00E_MAGEldritchShockExplosionTeleport Auto

VisualEffect Property _00E_A2_GhostwalkTeleportReappearVFX Auto
VisualEffect Property _00E_A2_GhostwalkTeleportVFX Auto

EffectShader Property TimeFadeIn01FXS Auto
EffectShader Property TimeFadeOut01FXS Auto
EffectShader Property _00E_FXEldritchShader03 Auto
EffectShader Property _00E_A1_DevourSoul_DisintegrateFXS Auto
EffectShader Property BerserkerFXS Auto

_00E_GypsyMinstrelsControlScript Property GypsyMinstrelsControl Auto