Scriptname _00E_FS_NQR05_Bossfight_FatherSC extends ReferenceAlias Conditional ;===================================================================================== ; EVENTS ;===================================================================================== Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) If !bIsEnemy && FS_NQR05.GetStage() == 320 If !bSideChosen && akAggressor == PlayerREF && (FS_NQR05_SidedWithTharael.GetValueInt() == 0 && FS_NQR05_SidedWithFather.GetValueInt() == 0) SideAgainstFather() EndIf EndIf EndEvent Event OnUpdate() If FS_NQR05.GetStage() == 320 If !bAttemptingToFloat && !FS_NQR05_FatherREF.IsDead() && _00E_FS_NQR05_TeleportationOngoing.GetValueInt() == 0 && FS_NQR05_SidedWithTharael.GetValueInt() == 1 CastSpecialAttack() ElseIf bAttemptingToFloat Levitate() EndIf EndIf EndEvent Event OnDying(Actor akKiller) Self.GetReference().BlockActivation(True) FS_NQR05.FS_NQR05_SC19_02_Cinematic.Stop() FS_NQR05.StopMusic() FS_NQR05.SetStage(325) EndEvent ;===================================================================================== ; FUNCTIONS ;===================================================================================== Function SideAgainstFather() bIsEnemy = true bSideChosen = true FS_NQR05_TharaelREF.GetActorBase().SetEssential(True) FS_NQR05_TharaelREF.BlockActivation(True) FS_NQR05_SidedWithTharael.SetValueInt(1) FS_NQR05_SidedWithFather.SetValueInt(0) FS_NQR05.SideWithCharacter(FS_NQR05_TharaelREF) If FS_NQR05.GetStage() < 325 RegisterForSpecialAttack(5.0) EndIf EndFunction Function RegisterForSpecialAttack(float fSeconds) RegisterForSingleUpdate(fSeconds) EndFunction Function Levitate() FS_NQR05_FatherREF.MoveTo(FS_NQR05_Bossfight_Father_CenterMarker001) Debug.SendAnimationEvent(FS_NQR05_FatherREF, "IdleNocturnalEnter") Debug.SendAnimationEvent(FS_NQR05_FatherREF, "IdleNocturnal_Rise") Utility.Wait(1) FS_NQR05_FatherREF.SetAlpha(0.5) FS_NQR05_Bossfight_AppearFatherMarker001.PlaceAtMe(FXDragonPriestSmallExplosion) bAttemptingToFloat = false EndFunction Function TeleportToCenter() If FS_NQR05_SidedWithTharael.GetValueInt() == 1 FS_NQR05_FatherREF.Say(FS_NQR05_D99_TharaelLaunch_BossfightTopic) EndIf fHealRateBefore = FS_NQR05_FatherREF.GetAV("HealRate") FS_NQR05_FatherREF.SetAV("HealRate", 0.0) FS_NQR05_FatherREF.SetMotionType(4) _00E_FS_NQR05_TeleportationOngoing.SetValueInt(1) FS_NQR05_FatherREF.SetGhost(true) FS_NQR05_FatherREF.StopCombat() FS_NQR05_FatherREF.StopCombatAlarm() FS_NQR05_FatherREF.EvaluatePackage() FS_NQR05_FatherREF.SetPlayerTeammate(False) objPreviousPosition = FS_NQR05_FatherREF.PlaceAtMe(xMarker, 1) FS_NQR05_FatherREF.PlaceAtMe(FXDragonPriestSmallExplosion) GhostRedFXShader.Play(FS_NQR05_FatherREF) FS_NQR05_FatherLightREF.Enable() FS_NQR05_FatherREF.SetAlpha(0.0) bAttemptingToFloat = true RegisterForSingleUpdate(3.0) EndFunction Function TeleportBack() FS_NQR05_FatherREF.SetGhost(False) FS_NQR05_FatherREF.PlaceAtMe(FXDragonPriestSmallExplosion) FS_NQR05_FatherLightREF.Disable() FS_NQR05_FatherREF.MoveTo(FS_NQR05_Father_ReappearMarkerREF) FS_NQR05_FatherREF.SetPlayerTeammate(True) FS_NQR05_FatherREF.PlayIdle(IdleNocturnalExit) FS_NQR05_FatherREF.PlayIdle(idleForceDefaultState) FS_NQR05_FatherREF.PlaceAtMe(FXDragonPriestSmallExplosion) FS_NQR05_FatherREF.SetAV("HealRate", fHealRateBefore) FS_NQR05_FatherREF.SetActorValue("Aggression", 3) GhostRedFXShader.Stop(FS_NQR05_FatherREF) FS_NQR05_FatherREF.SetAlpha(1.0) If FS_NQR05_SidedWithTharael.GetValueInt() == 0 _00E_QuestFunctions.SetNPCAsCompanion(FS_NQR05_FatherREF, True, 800, 600, 400) EndIf _00E_FS_NQR05_TeleportationOngoing.SetValueInt(0) FS_NQR05_FatherREF.SetMotionType(1) Utility.Wait(2) FS_NQR05_FatherREF.PlayIdle(idleForceDefaultState) EndFunction Function CastSpecialAttack() FS_NQR05_FatherREF.AddToFaction(IgnoreInCombatFaction) FS_NQR05_FatherREF.SetGhost(True) GhostRedFXShader.Play(FS_NQR05_FatherREF) FS_NQR05_FatherREF.SetAlpha(0.5) _00E_FS_NQR05_FatherSpecialAttackOngoing.SetValueInt(1) TeleportToCenter() FS_NQR05_TharaelREF.Say(FS_NQR05_D00_Bossfight_WarningTopic) CreateClones() EndFunction Function CheckForDeath() If akPlayerClone.IsDead() && akTharaelClone.IsDead() _00E_FS_NQR05_TeleportationOngoing.SetValueInt(0) _00E_FS_NQR05_FatherSpecialAttackOngoing.SetValueInt(0) EndSpecialAttack() EndIf EndFunction Function CreateClones() MAGIllusionReleaseFearSDM.Play(FS_NQR05_FatherREF) IllusionDark01Imod.Apply() Utility.Wait(1) _00E_A2_ChaosruneImplosionSoundM.Play(FS_NQR05_FatherREF) Utility.Wait(4) FS_NQR05_FatherREF.PlaceAtMe(ExplosionIllusionMassiveDark01) Game.ShakeCamera() akPlayerClone = PlayerREF.PlaceActorAtMe(_00E_FS_NQR05_TharaelGhost) as Actor akPlayerClone.PlaceAtMe(ExplosionIllusionDarkSmallNoEffects) akTharaelClone = FS_NQR05_TharaelREF.PlaceActorAtMe(_00E_FS_NQR05_TharaelGhost) as Actor akTharaelClone.PlaceAtMe(ExplosionIllusionDarkSmallNoEffects) FS_NQR05_Father_Fight_Clone_02.ForceRefTo(akTharaelClone) FS_NQR05_Father_Fight_Clone_01.ForceRefTo(akPlayerClone) EndFunction Function EndSpecialAttack() FS_NQR05_Father_Fight_Clone_01.Clear() FS_NQR05_Father_Fight_Clone_02.Clear() akPlayerClone.PlaceAtMe(ExplosionIllusionDarkSmallNoEffects) akPlayerClone.Delete() akTharaelClone.PlaceAtMe(ExplosionIllusionDarkSmallNoEffects) akTharaelClone.Delete() UnregisterForUpdate() GhostRedFXShader.Stop(FS_NQR05_FatherREF) FS_NQR05_FatherREF.SetAlpha(1.0) FS_NQR05_FatherREF.RemoveFromFaction(IgnoreInCombatFaction) _00E_FS_NQR05_TeleportationOngoing.SetValueInt(0) _00E_FS_NQR05_FatherSpecialAttackOngoing.SetValueInt(0) TeleportBack() FS_NQR05_FatherREF.EvaluatePackage() If FS_NQR05_SidedWithFather.GetValueInt() == 1 HealthBarManager.Show(FS_NQR05_FatherREF) FS_NQR05_FatherREF.StartCombat(FS_NQR05_TharaelREF) FS_NQR05_TharaelREF.StartCombat(PlayerREF) Else FS_NQR05_FatherREF.SetAV("Aggression", 3) FS_NQR05_FatherREF.StartCombat(PlayerREF) FS_NQR05_TharaelREF.StartCombat(FS_NQR05_FatherREF) EndIf GhostRedFXShader.Stop(FS_NQR05_FatherREF) If FS_NQR05.GetStage() < 325 RegisterForSpecialAttack(35) EndIf EndFunction ;===================================================================================== ; PROPERTIES ;===================================================================================== bool Property bSideChosen Auto Conditional Hidden bool bIsEnemy bool bFloating bool bAttemptingToFloat float fDamageDone float fHealRateBefore _00E_FS_NQR05_Functions Property FS_NQR05 Auto Actor akPlayerClone Actor akTharaelClone ActorBase Property Player Auto ActorBase Property _00E_FS_NQR05_TharaelGhost Auto Actor Property FS_NQR05_FatherREF Auto Actor Property FS_NQR05_TharaelREF Auto ReferenceAlias Property FS_NQR05_Father_Fight_Clone_01 Auto ReferenceAlias Property FS_NQR05_Father_Fight_Clone_02 Auto ObjectReference objPreviousPosition Faction Property IgnoreInCombatFaction Auto ObjectReference Property FS_NQR05_Bossfight_Father_CenterMarker001 Auto ObjectReference Property FS_NQR05_Bossfight_AppearFatherMarker001 Auto ObjectReference Property FS_NQR05_Father_ReappearMarkerREF Auto ObjectReference Property FS_NQR05_FatherLightREF Auto Idle Property idleForceDefaultState Auto Idle Property IdleNocturnalEnter Auto Idle Property IdleNocturnal_Rise Auto Idle Property IdleNocturnalExit Auto Sound Property _00E_A2_ChaosruneImplosionSoundM Auto Sound Property MAGIllusionReleaseFearSDM Auto GlobalVariable Property _00E_FS_NQR05_FatherSpecialAttackOngoing Auto GlobalVariable Property FS_NQR05_SidedWithFather Auto GlobalVariable Property FS_NQR05_SidedWithTharael Auto GlobalVariable Property _00E_FS_NQR05_TeleportationOngoing Auto ImageSpaceModifier Property IllusionDark01Imod Auto EffectShader Property GhostRedFXShader Auto Message Property _00E_FS_NQR05_Bossfight_IllusionName Auto Static Property XMarker Auto Topic Property FS_NQR05_D00_Bossfight_WarningTopic Auto Topic Property FS_NQR05_D99_TharaelLaunch_BossfightTopic Auto Explosion Property FXDragonPriestSmallExplosion Auto Explosion Property ExplosionIllusionMassiveDark01 Auto Explosion Property ExplosionIllusionDarkSmallNoEffects Auto Actor Property PlayerREF Auto