enderalse/source/scripts/_00e_fs_nqr05_bossfight_fathersc.psc

269 lines
8.5 KiB
Plaintext

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.GetCurrentStageID() == 320
If !bSideChosen && akAggressor == PlayerREF && (FS_NQR05_SidedWithTharael.GetValueInt() == 0 && FS_NQR05_SidedWithFather.GetValueInt() == 0)
SideAgainstFather()
EndIf
EndIf
EndEvent
Event OnUpdate()
If FS_NQR05.GetCurrentStageID() == 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.SetCurrentStageID(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.GetCurrentStageID() < 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.GetActorValue("HealRate")
FS_NQR05_FatherREF.SetActorValue("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.SetActorValue("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_Func_SetNPCAsCompanion.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.SetActorValue("Aggression", 3)
FS_NQR05_FatherREF.StartCombat(PlayerREF)
FS_NQR05_TharaelREF.StartCombat(FS_NQR05_FatherREF)
EndIf
GhostRedFXShader.Stop(FS_NQR05_FatherREF)
If FS_NQR05.GetCurrentStageID() < 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