4
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

392 lines
11 KiB

Scriptname _00E_FS_NQR04_Functions extends Quest
Import _00E_QuestFunctions
Import Utility
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnUpdate()
; spawns in the messenger kid that gives the player the quest
If PlayerREF.GetCurrentLocation() == _00E_UEMAsterLocation && Self.GetStage() == 5 && (akMessengerKid.GetParentCell() != PlayerREF.GetParentCell())
akMessengerKid = SC01_MessengerKid.GetActorReference()
akMessengerKid.Enable()
; makes sure that the messenger kid spawns outside of the players vision, removes the spawn marker afterwards
objSpawnMarker = PlayerREF.PlaceAtMe(XMarkerHeading, 1)
objSpawnMarker.MoveTo(PlayerRef, -250.0 * Math.Sin(PlayerRef.GetAngleZ()), -250.0 * Math.Cos(PlayerRef.GetAngleZ()), PlayerRef.GetHeight())
akMessengerKid.MoveTo(objSpawnMarker)
objSpawnMarker.Delete()
; a failsafe in case the player was changing cells in the very moment the messenger kid spawned
If akMessengerKid.GetParentCell() != PlayerREF.GetParentCell()
akMessengerKid.MoveTo(PlayerREF)
EndIf
SC01_MessengerKid.ForceRefTo(akMessengerKid)
FS_NQR04_SC01_Messenger.ForceStart()
SetObjectiveDisplayed(7)
EndIf
EndEvent
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function SetUp()
SetObjectiveDisplayed(5)
RegisterForSingleUpdate(7)
EndFunction
Function SpawnMessengerKid()
; just a failsafe function
RegisterForSingleUpdate(7)
EndFunction
Function GiveNote()
; updating the objectives after receiving a note
PlayerREF.AddItem(_00E_FS_NQR04_Note)
SetObjectiveCompleted(5)
SetObjectiveCompleted(7)
SetObjectiveDisplayed(10)
EndFunction
Function EnableTharael()
SetObjectiveCompleted(10)
SetObjectiveDisplayed(15)
FS_NQR03_DoorREF.Lock(False)
_00E_FS_NQR04_TharaelREF.Enable()
_00E_FS_NQR04_TharaelREF.SetOutfit(_00E_FS_NQR_Rhalata_Voice_OutfitMask)
EndFunction
Function DisableKid()
If akMessengerKid.IsEnabled()
akMessengerKid.Disable()
EndIf
akMessengerKid.Delete()
FS_NQR04_SC02_TharaelZorkban.ForceStart()
SetObjectiveCompleted(15)
SetObjectiveDisplayed(20)
EndFunction
Function SetUpSC02()
; setting the undercover outfit for Tharael
_00E_FS_NQR04_TharaelREF.SetOutfit(_00E_FeinlederrstungCowl)
_00E_FS_NQR04_TharaelREF.MoveTo(FS_NQR04_SC02_TharaelMarker)
EndFunction
Function StartIntitalCombatSC02()
; starts the combat in the alleyway, gives a few seconds time if Tharael needs to finish his voicelines if needed
FS_NQR04_SC02_LostOne01REF.StartCombat(_00E_FS_NQR04_TharaelREF)
utility.Wait(3)
_00E_FS_NQR04_TharaelREF.StartCombat(FS_NQR04_SC02_LostOne01REF)
EndFunction
Function UpdateObjectives01()
; set Tharael as ally for the following encounters, removing ghost flag and but making sure hes still essential
_00E_QuestFunctions.SetNPCAsCompanion(_00E_FS_NQR04_TharaelREF, True, 550, 500, 100)
SetObjectiveCompleted(20)
SetObjectiveDisplayed(25)
FS_NQR04_DoorREF.Lock(False)
EndFunction
Function UpdateObjectives02()
SetObjectiveCompleted(25)
SetObjectiveDisplayed(30)
FS_NQR04_SC03_TharaelOrphanage.ForceStart()
EndFunction
Function UpdateObjectives03()
; once the alley is cleared, update objectives and enable enemies inside the orphanage, unlocking the door
SetObjectiveCompleted(30)
SetObjectiveDisplayed(35)
SetObjectiveDisplayed(40)
FS_NQR04_ButtonParentREF.Enable()
FS_NQR04_BarrelREF.AddItem(_00E_FS_NQR04_OrphanageKey, 1)
int iIndex = FS_NQR04_OrphanageEnemiesList.GetSize()
While iIndex > 0
iIndex -= 1
Actor akActorToEnable = FS_NQR04_OrphanageEnemiesList.GetAt(iIndex) as Actor
akActorToEnable.Enable()
EndWhile
FS_NQR04_DoorCourtyardREF.Lock(False)
EndFunction
Function UpdateSlotsFound(int iFoundSlot)
; function for the three hidden stashes,
; only number 3 is necessary to process the quest, other onces are optional objectives
; 1 = _00E_FS_NQR04_Casket
; 2 = button ceiling
; 3 = button door frame
If !(IsObjectiveCompleted(40))
FS_NQR04_SecretSlotsFound.SetValue(FS_NQR04_SecretSlotsFound.GetValue() + 1)
UpdateCurrentInstanceGlobal(FS_NQR04_SecretSlotsFound)
int CurrentCount = FS_NQR04_SecretSlotsFound.GetValueInt()
If CurrentCount >= 3
SetObjectiveCompleted(40)
Levelsystem.GiveEP(iSecretSlotsRewardEXP)
If _00E_AchievementsEnabled.GetValueInt() == 1
Steam.UnlockAchievement("END_ORPHANAGE_01")
EndIf
ElseIf CurrentCount < 3
SetObjectiveCompleted(40,0)
SetObjectiveDisplayed(40, True, True)
EndIf
If iFoundSlot == 1
FS_NQR04_SecretSlotMarker01REF.Disable()
ElseIf iFoundSlot == 2
FS_NQR04_SecretSlotMarker02REF.Disable()
ElseIf iFoundSlot == 3
FS_NQR04_SecretSlotMarker03REF.Disable()
EndIf
EndIf
EndFunction
Function ActivateSecondSlot()
If !bSecondSlotFound
bSecondSlotFound = True
_00E_DRSElevatorM.Play(FS_NQr04_SecretSlot_02_DoorREF)
FS_NQr04_SecretSlot_02_DoorREF.TranslateTo(FS_NQr04_SecretSlot_02_DoorREF.GetPositionX(), FS_NQr04_SecretSlot_02_DoorREF.GetPositionY(), 7.2906, -90, 0.0, 90, 50.0, 50.0)
; added collision plane because it could be interacted through through a slit in the wood mesh
FS_NQR04_SecretSlot_02_CollisonREF.Disable()
UpdateSlotsFound(2)
EndIf
EndFunction
Function StartSC04()
; update objectives after finding the hidden stash, prepare and start tharael's seizure scene
UnflagTharaelAsCompanion()
Levelsystem.SetAllowIdleChatter(False)
FS_NQR04_ParentCandleREF.Enable()
_00E_FS_NQR04_TharaelREF.UnequipItem(_00E_FS_NQR05_TharaelTorch)
_00E_FS_NQR04_TharaelREF.RemoveItem(_00E_FS_NQR05_TharaelTorch)
_00E_FS_NQR04_TharaelREF.Disable()
_00E_FS_NQR04_TharaelREF.MoveTo(FS_NQR04_SC04_TharaelJumpingMarkerREF)
_00E_FS_NQR04_TharaelREF.Enable()
SetObjectiveCompleted(35)
SetObjectiveDisplayed(45)
FS_NQR04_SC04_TharaelSeizure.ForceStart()
_00E_FS_NQR04_TharaelREF.SetGhost(True)
EndFunction
Function AddSpecialTharaelTrack()
; adding special music for Tharael's seizure
_00E_SilenceLongTransitionHighPriority.Add()
_00E_FS_Music_Special_TharaelRefugeShort.Add()
EndFunction
Function RemoveSpecialTharaelTrack()
_00E_FS_Music_Special_TharaelRefugeShort.Remove()
EndFunction
Function BlockActivationTharael()
_00E_FS_NQR04_TharaelREF.BlockActivation(True)
EndFunction
Function EquipTorch()
UnflagTharaelAsCompanion()
_00E_FS_NQR04_TharaelREF.EquipItem(_00E_FS_NQR05_TharaelTorch, true)
EndFunction
Function UnflagTharaelAsCompanion()
; don't remove this function, it also gets called from quest and dialogue fragments
_00E_QuestFunctions.SetNPCAsCompanion(_00E_FS_NQR04_TharaelREF, false)
EndFunction
Function FadeToBlackAndBackReal()
FadeToBlackIMOD.Apply()
Wait(2.5)
; PopTo() makes more sense then ApplyCrossFade() otherwise the player would see Tharael travel
FadeToBlackImod.PopTo(FadeToBlackHoldImod)
RemoveSpecialTharaelTrack()
Wait(3)
FadeToBlackHoldImod.PopTo(FadeToBlackBackImod)
EndFunction
Function FadeToBlackAndBack()
FadeToBlackIMOD.Apply()
Wait(2.7)
FadeToBlackHoldIMOD.ApplyCrossFade(afFadeDuration = 1.0)
Wait(1)
_00E_FS_NQR04_TharaelREF.MoveTo(FS_NQR04_SC04_TharaelLeanMarkerREF)
EndFunction
Function FadeBack()
FadeToBlackBackIMOD.ApplyCrossFade(afFadeDuration = 1.0)
EndFunction
Function MoveTharaelInterlude()
; setting up and starting the scene after the seizure
FadeToBlackIMOD.Apply()
Wait(2.7)
FadeToBlackHoldIMOD.ApplyCrossFade(afFadeDuration = 1.0)
_00E_FS_NQR04_TharaelREF.MoveTo(FS_NQR04_SC04_CrossedArms)
Wait(2)
FadeToBlackBackIMOD.ApplyCrossFade(afFadeDuration = 1.0)
EndFunction
Function StartCompanionQuest()
; gets called from dialogue option, starts the character quest
FS_CQT01.SetStage(5)
EndFunction
Function FinishUp()
; complete the quest and start the last rhalata quest
If !FS_CQT01.IsCompleted()
; stage 100 now also displays a message why the quest was failed (low sympathy)
FS_CQT01.SetStage(100)
EndIf
CompleteAllObjectives()
Player.Clear()
Levelsystem.GiveEP(iRewardEXP)
Levelsystem.SetAllowIdleChatter(True)
Levelsystem.RemoveSilence()
Levelsystem.RemoveCombatSoundtracks()
FS_NQR04_SC05_TharaelWalkAway.ForceStart()
FS_NQR05.setStage(5)
EndFunction
Function DeleteTharael()
_00E_FS_NQR04_TharaelREF.Delete()
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
bool bSecondSlotFound
int iRewardEXP = 1000
int iSecretSlotsRewardEXP = 300
_00E_QuestFunctions Property Levelsystem Auto
Actor akMessengerKid
ObjectReference objSpawnMarker
Quest Property FS_CQT01 Auto
Quest Property FS_NQR05 Auto
Actor Property PlayerREF Auto
Actor Property _00E_FS_NQR04_TharaelREF Auto
Actor Property FS_NQR04_SC02_LostOne01REF Auto
Book Property _00E_FS_NQR04_Note Auto
Formlist Property FS_NQR04_OrphanageEnemiesList Auto
ActorBase Property _00E_FS_NQR04_MessengerGirl Auto
ObjectReference Property FS_NQR04_SC02_TharaelMarker Auto
ObjectReference Property FS_NQR04_DoorREF Auto
ObjectReference Property FS_NQr04_SecretSlot_02_DoorREF Auto
ObjectReference Property FS_NQR04_SC04_TharaelJumpingMarkerREF Auto
ObjectReference Property FS_NQR04_ParentCandleREF Auto
ObjectReference Property FS_NQR04_SC04_CrossedArms Auto
ObjectReference Property FS_NQR04_ButtonParentREF Auto
ObjectReference Property FS_NQR04_BarrelREF Auto
ObjectReference Property FS_NQR04_DoorCourtyardREF Auto
ObjectReference Property FS_NQR03_DoorREF Auto
ObjectReference Property FS_NQR04_SC04_TharaelLeanMarkerREF Auto
ObjectReference Property FS_NQR04_SecretSlot_02_CollisonREF Auto
ObjectReference Property FS_NQR04_SecretSlotMarker01REF Auto
ObjectReference Property FS_NQR04_SecretSlotMarker02REF Auto
ObjectReference Property FS_NQR04_SecretSlotMarker03REF Auto
Location Property _00E_UEMAsterLocation Auto
Light Property _00E_FS_NQR05_TharaelTorch Auto
Key Property _00E_FS_NQR04_OrphanageKey Auto
ImageSpaceModifier Property FadeToBlackIMOD Auto
ImageSpaceModifier Property FadeToBlackHoldIMOD Auto
ImageSpaceModifier Property FadeToBlackBackIMOD Auto
GlobalVariable Property FS_NQR04_SecretSlotsFound Auto
GlobalVariable Property _00E_AchievementsEnabled Auto
Outfit Property _00E_FeinlederrstungCowl Auto
Outfit Property _00E_FS_NQR_Rhalata_Voice_OutfitMask Auto
ReferenceAlias Property SC01_MessengerKid Auto
ReferenceAlias Property Player Auto
Scene Property FS_NQR04_SC01_Messenger Auto
Scene Property FS_NQR04_SC02_TharaelZorkban Auto
Scene Property FS_NQR04_SC03_TharaelOrphanage Auto
Scene Property FS_NQR04_SC04_TharaelSeizure Auto
Scene Property FS_NQR04_SC05_TharaelWalkAway Auto
Sound Property _00E_DRSElevatorM Auto
MusicType Property _00E_SilenceLongTransitionHighPriority Auto
MusicType Property _00E_FS_Music_Special_TharaelRefugeShort Auto
Static Property XMarkerHeading Auto