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.
 
 
 

1458 lines
44 KiB

Scriptname _00E_QuestFunctions extends Quest Conditional
{This script is meant to be attached to any quests and serves as a Function library. Simply import it to call Global functions, and create a script property to access non-global functions}
Import math
Import Utility
;=====================================================================================
; EXP
;=====================================================================================
Function GiveEP(int ToGive)
If (PlayerREF as _00E_EPUpdateFunctions).receiveEP(ToGive)
; Player receives EP
EndIf
EndFunction
;=====================================================================================
; SYMPATHY
;=====================================================================================
Function ModSympathyNG(Actor akSympathyActor, int iSympathyMod, bool bIsFlirt = False, bool bStringOverride = False, String sOverride = "")
Levelsystem_SympathyActor.ForceRefTo(akSympathyActor)
ActorBase sympathyBase = akSympathyActor.GetActorBase()
If sympathyBase == _00E_MC_Jespar
SympathyJespar.Mod(iSympathyMod)
ElseIf sympathyBase == _00E_MC_Calia
SympathyCalia.Mod(iSympathyMod)
ElseIf sympathyBase == _00E_CapitalCityMaelGroschenfrst
SympathyMaelGroschenfuerst.Mod(iSympathyMod)
ElseIf sympathyBase == _00E_SC_Dijaam
SympathyDijaam.Mod(iSympathyMod)
ElseIf sympathyBase == _00E_SC_Tharael
SympathyTharael.Mod(iSympathyMod)
ElseIf sympathyBase == _00E_MQ11c_Ryneus
SympathyRyneus.Mod(iSympathyMod)
ElseIf sympathyBase == _00E_MC_Yuslan
SympathyYuslan.Mod(iSympathyMod)
ElseIf sympathyBase == _00E_FS_NQ02_Esme
SympathyEsme.Mod(iSympathyMod)
EndIf
If bIsFlirt
If sympathyBase == _00E_MC_Jespar
JesparFlirtCounter.SetValueInt(JesparFlirtCounter.GetValueInt() + 1)
ElseIf sympathyBase == _00E_MC_Calia
CaliaFlirtCounter.SetValueInt(CaliaFlirtCounter.GetValueInt() + 1)
ElseIf sympathyBase == _00E_SC_Dijaam
DijaamFlirtCounter.SetValueInt(DijaamFlirtCounter.GetValueInt() + 1)
ElseIf sympathyBase == _00E_SC_Tharael
TharaelFlirtCounter.SetValueInt(TharaelFlirtCounter.GetValueInt() + 1)
EndIf
EndIf
String sActorName = sympathyBase.GetName()
If !bStringOverride
If (iSympathyMod > 0) && (iSympathyMod <= 5)
_00E_Levelsystem_sApproves.Show()
; Debug.Notification(sActorName + sLevelsystemAppreciate + ".")
ElseIf (iSympathyMod > 5) && (iSympathyMod <= 10)
_00E_Levelsystem_sAppreciates.Show()
; Debug.Notification(sActorName + sLevelsystemAppreciateALot + ".")
ElseIf (iSympathyMod > 10) && (iSympathyMod <= 20)
_00E_Levelsystem_sAppreciatesALot.Show()
; Debug.Notification(sActorName + sLevelsystemApproves + ".")
ElseIf (iSympathyMod < 0) && (iSympathyMod >= -5)
_00E_Levelsystem_sDislikes.Show()
; Debug.Notification(sActorName + sLevelsystemDislikes + ".")
ElseIf (iSympathyMod < -5) && (iSympathyMod >= -10)
_00E_Levelsystem_sHurt.Show()
; Debug.Notification(sActorName + sLevelsystemOffended + ".")
ElseIf (iSympathyMod < -10) && (iSympathyMod >= -20)
_00E_Levelsystem_sVeryHurt.Show()
; Debug.Notification(sActorName + sLevelsystemVeryOffended + ".")
EndIf
Else
Debug.Notification(sActorName + sOverride)
EndIf
EndFunction
;=====================================================================================
; CAMERA
;=====================================================================================
Function LockCamera()
fCameraMaxDistance = Utility.GetINIFloat("fVanityModeMaxDist:Camera")
Utility.SetINIFloat("fVanityModeMaxDist:Camera", Utility.GetIniFloat("fVanityModeMinDist:Camera"))
EndFunction
Function UnlockCamera()
Utility.SetINIFloat("fVanityModeMaxDist:Camera", fCameraMaxDistance)
EndFunction
;=====================================================================================
; GLOBAL FUNCTIONS
;=====================================================================================
Function Brawl(Actor pTarget, Actor pTargetFriend = None)
BrawlKeyword.SendStoryEvent(None, pTarget, pTargetFriend)
EndFunction
function PlayerAIWalkStop() Global
Game.ShowFirstPersonGeometry(True)
Game.SetPlayerAIDriven(False)
Game.EnablePlayerControls()
endFunction
function PlayerAIWalk(bool abLockedSight = True) Global
Game.ShowFirstPersonGeometry(False)
Game.SetPlayerAIDriven(True)
If abLockedSight == True
Game.DisablePlayerControls(true, true, true, true, true, true, true, true)
ElseIf abLockedSight == False
Game.DisablePlayerControls(true, true, true, False, true, true, true, true)
EndIf
endFunction
Function DisableDialogueQuitting() Global
{Disables the TAB Key during dialogue. Resets automatically upon dialogue exit via Goodbye.}
if UI.IsMenuOpen("Dialogue Menu")
if UI.GetBool("Dialogue Menu", "_root.DialogueMenu_mc.bEnableTab") != true
; Suspected non-Enderal dialoguemenu.swf replacer, rechecking value in order to be sure.
UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", True)
if UI.GetBool("Dialogue Menu", "_root.DialogueMenu_mc.bEnableTab") != true
Debug.Notification("Detected incompatible dialoguemenu.swf!")
endif
endif
endif
UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", False)
(Game.GetForm(0x10AA2) as Quest).RegisterForKey(1) ; Escape
(Game.GetForm(0x10AA2) as Quest).RegisterForKey(15) ; Tab
int iControllerKey = Input.GetMappedKey("Tween Menu", 0x02)
if iControllerKey > -1
(Game.GetForm(0x10AA2) as Quest).RegisterForKey(iControllerKey) ; Controller
endif
EndFunction
Function EnableDialogueQuitting() Global
{Disables the TAB Key during dialogue. Resets automatically upon dialogue exit via Goodbye.}
UI.InvokeBool("Dialogue Menu", "_root.DialogueMenu_mc.SetVariable", True)
UnregisterDialogQuitKey()
EndFunction
function UnregisterDialogQuitKey() Global
(Game.GetForm(0x10AA2) as Quest).UnregisterForKey(1)
(Game.GetForm(0x10AA2) as Quest).UnregisterForKey(15)
int iControllerKey = Input.GetMappedKey("Tween Menu", 0x02)
if iControllerKey > -1
(Game.GetForm(0x10AA2) as Quest).UnregisterForKey(iControllerKey)
endif
endfunction
Event OnKeyDown(Int KeyCode)
if UI.IsMenuOpen("Dialogue Menu")
if ! UI.IsMenuOpen("MessageBoxMenu")
if (Game.GetFormFromFile(0x163D, "Update.esm") as Message).Show() == 1
Game.QuitToMainMenu()
endif
endif
else
UnregisterDialogQuitKey()
endif
EndEvent
Function RefreshFace() Global
String facegen = "bUseFaceGenPreprocessedHeads:General"
Utility.SetINIBool(facegen, False)
Game.GetPlayer().QueueNiNodeUpdate()
Utility.SetINIBool(facegen, True)
EndFunction
Function ShowHelpMessage(Message msg, Float fDuration = 5.0, String sEvent = "Empty") Global
Message.ResetHelpMessage(sEvent)
msg.ShowAsHelpMessage(sEvent, fDuration, 1.0, 1)
EndFunction
Function SafeMoveTo(ObjectReference refToMove, ObjectReference targetRef, Bool bFadeIn = False) Global
; A safer way to move an object reference to another ref than just MoveTo.
; Mostly for actors to take their intended positions.
; It's better for the actor to be already running a package that moves them to targetRef at the moment this function is called.
refToMove.Disable()
refToMove.MoveTo(targetRef)
refToMove.Enable(bFadeIn)
EndFunction
Function SafeMoveTo_NoWait(ObjectReference refToMove, ObjectReference targetRef, Bool bFadeIn = False) Global
; A safer way to move an object reference to another ref than just MoveTo (without waiting for it to be fully enabled).
; Mostly for actors to take their intended positions.
; It's better for the actor to be already running a package that moves them to targetRef at the moment this function is called.
refToMove.Disable()
refToMove.MoveTo(targetRef)
refToMove.EnableNoWait(bFadeIn)
EndFunction
Bool Function DistanceFailsafeMoveTo(ObjectReference refToMove, ObjectReference targetRef, Float fTooFarDistance) Global
; Moves refToMove to targetRef if refToMove is not within fTooFarDistance from targetRef.
; Mostly for character travel failsafes in scenes.
; Debug.Trace("FailsafeMoveTo: refToMove = " + refToMove + "; d = " + refToMove.GetDistance(targetRef))
If refToMove.GetDistance(targetRef) >= fTooFarDistance
refToMove.MoveTo(targetRef)
; Debug.Trace("FailsafeMoveTo: refToMove = " + refToMove + " force-moved to marker")
Return True
Else
Return False
EndIf
EndFunction
Function WaitForReferenceToLoad(ObjectReference ref) Global
Int maxIterationsToWait = 180
While ref.Is3DLoaded() == False && maxIterationsToWait > 0
; Utility.Wait(0.02)
maxIterationsToWait -= 1
EndWhile
EndFunction
Float Function NormalizeHour(Float fHour) Global
If fHour >= 24.0
Return (fHour - 24.0)
ElseIf fHour < 0.0
Return (fHour + 24.0)
Else
Return fHour
EndIf
EndFunction
Bool Function HourIsInRange(Float fHour, Float fHourStart, Float fHourEnd) Global
; "Smart" test for fHour being withing a range.
; Works both with "day" ranges (e.g., 06:00- 20:00) and with "night" ranges (e.g., 21:00-06:00)
fHour = NormalizeHour(fHour)
fHourStart = NormalizeHour(fHourStart)
fHourEnd = NormalizeHour(fHourEnd)
If fHourStart <= fHourEnd ; Something like 06:00 - 20:00
Return (fHour >= fHourStart && fHour < fHourEnd)
Else ; Something like 20:00 - 06:00
Return (fHour >= fHourStart || fHour < fHourEnd)
EndIf
EndFunction
Function EnableReferenceFormList(FormList referenceList) Global
Int nItems = referenceList.GetSize()
Int i = 0
If nItems < 128 && nItems > 1
Form[] refArray = referenceList.ToArray()
While i < nItems
(refArray[i] as ObjectReference).EnableNoWait()
i += 1
EndWhile
Else
While i < nItems
(referenceList.GetAt(i) as ObjectReference).EnableNoWait()
i += 1
EndWhile
EndIf
EndFunction
Function DisableReferenceFormList(FormList referenceList) Global
Int nItems = referenceList.GetSize()
Int i = 0
If nItems < 128 && nItems > 1
Form[] refArray = referenceList.ToArray()
While i < nItems
(refArray[i] as ObjectReference).DisableNoWait()
i += 1
EndWhile
Else
While i < nItems
(referenceList.GetAt(i) as ObjectReference).DisableNoWait()
i += 1
EndWhile
EndIf
EndFunction
Float Function SetActorScale(Actor akActor, Float fNewScale) Global
; Sets the scale of akActor to fNewScale and returns the old scale.
; This is a workaround for GetScale() returning the cumulative scale of Race.Height * Actor.Scale for actors.
; So it results in a messed up scale if the value returned by GetScale() is used to revert the scale change for an actor whose race has a non-1.00 height (for example, HighElfRace)
Float fOriginalScale = akActor.GetScale()
akActor.SetScale(fNewScale)
; Now use the known fNewScale and the return of GetScale() to get the race height coeff, and apply that coeff to fOriginalScale to calculate the true actor's reference scale.
Return fOriginalScale * fNewScale / akActor.GetScale()
EndFunction
Float Function AdjustTimePeriodByEngineTimerError(Float fUnadjustedPeriod) Global
; In SE, the game time runs slower than the real time by about 2.5/60 second
Return fUnadjustedPeriod - (2.5 * Math.Floor(fUnadjustedPeriod) / 60.0)
EndFunction
Function PrintDebugMessage(String msg) Global
; Dummy to fix error messages in Papyrus.log about missing function
EndFunction
Function PDB(String msg) Global
; Dummy to fix error messages in Papyrus.log about missing function
EndFunction
;=====================================================================================
; GENERAL NON-GLOBAL FUNCTIONS
;=====================================================================================
Function RemoveSilence()
_00E_SilenceTransitionLowPriority02.Remove()
_00E_Music_Special_MQ12b_Samael.Remove()
_00E_SilenceLongTransitionHighPriority.Remove()
_00E_SilenceTransitionLowPriority.Remove()
_00E_SilenceTransitionHighPriority.Remove()
_00E_SilenceAbruptHighPriority.Remove()
_00E_Music_Special_TavernSilence.Remove()
AudioCategoryAMB.UnMute()
AudioCategoryAMBr.UnMute()
AudioCategorySFX.UnMute()
EndFunction
Function RemoveCombatSoundtracks()
int iIndex = _00E_MUS_AllCombatSoundtracks.GetSize()
while iIndex > 0
iIndex -= 1
MusicType musicToRemove = _00E_MUS_AllCombatSoundtracks.GetAt(iIndex) as MusicType
musicToRemove.Remove()
endwhile
EndFunction
Function ShowFailedMessage(String companionName = "Jespar")
if companionName == "Jespar" && _00E_DisableQuestTutorials.GetValueInt() == 0
_00E_Tutorial_Companions02_Jespar.Show()
ElseIf _00E_DisableQuestTutorials.GetValueInt() == 0
_00E_Tutorial_Companions02_Calia.Show()
EndIf
EndFunction
Function ShowBrawlTutorial()
If _00E_DisableSkillTutorials.GetValueInt() == 0
Message.ResetHelpMessage("Brawl")
_00E_Tutorial_Brawl.ShowAsHelpMessage("Brawl", 3, 3, 1)
EndIf
EndFunction
Function PriestHeal()
{Called in dialoges with priests}
PlayerREF.RestoreActorValue("Health", PlayerREF.GetAV("Health"))
_00E_PriestCureDiseases.Cast(PlayerREF, PlayerREF)
EndFunction
Function TeleportNPC(Actor NPCToTeleport, ObjectReference TeleportTarget)
{Teleport an NPC, with animations and FX}
Weapon weap01 = NPCToTeleport.GetEquippedWeapon(0)
Weapon weap02 = NPCToTeleport.GetEquippedWeapon(1)
If weap01 != None
NPCToTeleport.UnEquipItem(weap01)
EndIf
If weap02 != None
NPCToTeleport.UnEquipItem(weap02)
EndIf
NPCToTeleport.PlayIdle(IdleMagic_01)
_00E_TeleportCastSound.Play(NPCToTeleport)
Wait(3)
if NPCToTeleport.GetActorBase().GetSex() == 0
NPCToTeleport.PlayIdle(IdleT02AscendMale)
Else
NPCToTeleport.PlayIdle(IdleT02AscendFemale)
EndIf
_00E_MagicProtectionSpellM.Play(NPCToTeleport)
Wait(4)
TimeFadeOut01FXS.Play(NPCToTeleport)
Wait(2)
_00E_A2_Ghostwalk_TeleportDoneSound.Play(NPCToTeleport)
ObjectReference TeleportFXMarker = NPCToTeleport.PlaceAtMe(XMarkerHeading, 1)
TeleportFXMarker.MoveTo(NPCToTeleport, 0.0, 0.0, 100.0)
ObjectReference FXExplosion = TeleportFXMarker.PlaceAtMe(_00E_TeleportExplosion, 1)
_00E_NPCTeleportExplosionIMOD.Apply()
Game.ShakeCamera(afStrength = 0.2)
NPCToTeleport.MoveTo(TeleportTarget)
Debug.sendAnimationEvent(NPCToTeleport, "IdleWebEnterInstant")
NPCToTeleport.setActorValue("Variable03", 5)
TimeFadeOut01FXS.Stop(NPCToTeleport)
If NPCToTeleport.Is3DLoaded()
TimeFadeIn01FXS.Play(NPCToTeleport)
EndIf
Wait(0.5)
NPCToTeleport.playidle(WebIdleExit)
Wait(1)
TimeFadeIn01FXS.Stop(NPCToTeleport)
NPCToTeleport.setActorValue("Variable03", 0)
If weap01 != None
NPCToTeleport.EquipItem(weap01)
EndIf
If weap02 != None
NPCToTeleport.EquipItem(weap02)
EndIf
Return
EndFunction
Function SetAllowIdleChatter(bool bAllow = False)
if !bAllow
bAllowIdleChatter = False
SendModEvent("IdleChatterOff")
Elseif bAllow
bAllowIdleChatter = True
EndIf
EndFunction
Function ShowSynergyMessage()
_00E_Levelsystem_sSynergyDiscovered.Show()
GiveEP(150)
If _00E_AchievementsEnabled.GetValueInt() == 1 && !bUnlockedSynergyAchievement
Steam.UnlockAchievement("END_SYNERGY_01")
bUnlockedSynergyAchievement = true
EndIf
EndFunction
Function SkipTimeToHour(Float fNewHourOfDay, Float fMinHoursToSkip = 0.0)
; Progresses the current in-game time to the desired hour (and optionally, by no less than fMinHoursToSkip hours), moving to the next day if needed
Float fCurHour = GameHour.GetValue()
If fNewHourOfDay <= fCurHour
fNewHourOfDay += 24.0 ; Go to the next day
EndIf
If (fNewHourOfDay - fCurHour) < fMinHoursToSkip
fNewHourOfDay += 24.0 ; Go to the next day
EndIf
GameHour.SetValue(fNewHourOfDay)
SendModEvent("TimeSkip")
EndFunction
Function SkipHours(Float fHoursToSkip)
; Progresses the current in-game time by fHoursToSkip hours
GameHour.SetValue(GameHour.GetValue() + fHoursToSkip)
SendModEvent("TimeSkip")
EndFunction
;=====================================================================================
; Player Teleport
;=====================================================================================
Event OnUpdate()
Game.EnablePlayerControls()
EndEvent
Function TeleportPlayer(ObjectReference TeleportTarget)
Game.DisablePlayerControls(abCamSwitch = true)
Wait(3)
If PlayerREF.IsWeaponDrawn()
PlayerREF.SheatheWeapon()
EndIf
Wait(2)
TeleportIn()
PlayerREF.MoveTo(TeleportTarget)
TeleportOut()
RefreshFace()
EndFunction
Function TeleportIn()
Game.ForceThirdPerson()
if Player.GetSex() == 0
PlayerREF.PlayIdle(IdleT02AscendMale)
Else
PlayerREF.PlayIdle(IdleT02AscendFemale)
EndIf
_00E_MagicProtectionSpellM.Play(PlayerREF)
Wait(2.7)
TimeFadeOut01FXS.Play(PlayerREF)
Wait(1.3)
_00E_TeleportImod.Apply()
Wait(2)
EndFunction
Function TeleportOut()
_00E_A2_Ghostwalk_TeleportDoneSound.Play(playerREF)
PlayerREF.PlaceAtMe(_00E_NPCOorbayaTeleportExplosionBlue, 1)
Debug.sendAnimationEvent(playerREF, "IdleWebEnterInstant")
PlayerREF.setActorValue("Variable03", 5)
TimeFadeOut01FXS.Stop(PlayerREF)
TimeFadeIn01FXS.Play(PlayerREF)
Wait(0.5)
PlayerREF.playidle(WebIdleExit)
TimeFadeIn01FXS.Stop(PlayerREF)
PlayerREF.setActorValue("Variable03", 0)
PlayerREF.DrawWeapon()
Wait(3)
Debug.SendAnimationEvent(PlayerREF, "IdleForceDefaultState")
PlayerREF.PlayIdle(IdleForceDefaultState)
PlayerREF.setActorValue("Variable03", 0)
Game.EnablePlayerControls()
_FS_Phasmalist_ControlQuest.MoveApparitionToPlayer()
RegisterForSingleUpdate(2)
EndFunction
;=====================================================================================
; FADE TO BLACK
;=====================================================================================
Function FadeToBlackAndBack()
FadeToBlackIMOD.Apply()
Wait(2.8)
FadeToBlackIMOD.PopTo(FadeToBlackHoldIMOD)
Wait(1.9)
FadeToBlackHoldIMOD.PopTo(FadeToBlackBackIMOD)
EndFunction
Function FadeToBlack()
FadeToBlackIMOD.Apply()
Wait(2.8)
FadeToBlackIMOD.PopTo(FadeToBlackHoldImod)
EndFunction
Function FadeToBlackBack()
FadeToBlackHoldImod.PopTo(FadeToBlackBackImod)
EndFunction
;=====================================================================================
; FAKEHEADTRACK (unused?)
;=====================================================================================
function FakeHeadtrackStart()
_00E_HeadtrackGlobal.SetValueInt(1)
game.SetPlayerAIDriven(true)
game.DisablePlayerControls(true, true, true, true, true, true, true, false, 0)
PlayerREF.AddPerk(_00E_VisionPerk)
UpdateSpeed(PlayerREF)
Wait(0.500000)
PlayerREF.RemoveSpell(_00E_Vision_UpdateAb)
endFunction
function FakeHeadtrackEnd()
_00E_HeadtrackGlobal.SetValueInt(0)
game.EnablePlayerControls(true, true, true, true, true, true, true, true, 0)
game.SetPlayerAIDriven(false)
PlayerREF.RemovePerk(_00E_VisionPerk)
UpdateSpeed(PlayerREF)
Wait(0.500000)
endFunction
;=====================================================================================
; VISION
;=====================================================================================
function EndVision(bool ScenePlaying, Scene RunningScene = None)
If PlayerREF.HasSpell(_00E_Vision_TimeSpell)
PlayerREF.RemoveSpell(_00E_Vision_TimeSpell)
ElseIf PlayerREF.HasSpell(_00E_Vision_NoTimeSpell)
PlayerREF.RemoveSpell(_00E_Vision_NoTimeSpell)
ElseIf PlayerREF.HasSpell(_00E_Vision_NoTimeSubtleSpell)
PlayerREF.RemoveSpell(_00E_Vision_NoTimeSubtleSpell)
EndIf
VisionLight.Delete()
If ScenePlaying == True && RunningScene.IsPlaying()
RunningScene.Stop()
EndIf
PlayerREF.MoveTo(PlayerVisionStartMarker)
endFunction
Function VisionEffectTimestop(bool bSilent = False, bool bCustomImod = False, bool bCustomMusic = False)
If bCustomImod == False
_00E_VisionStartTimestopIMOD.Apply()
_00E_VisionImod.ApplyCrossFade(0.25)
EndIf
PlayerREF.AddSpell(_00E_Vision_TimeSpell, False)
if !bCustomMusic
_00E_SilenceAbruptHighPriority.Add()
EndIf
MagRacialBattlecryFire.Play(PlayerREF)
fPlayerSpeedBeforeVision = PlayerREF.GetActorValue("SpeedMult")
PlayerREF.SetActorValue("SpeedMult", 35)
UpdateSpeed(PlayerREF)
If !bSilent
VisionSound = _00E_VisionLPM.Play(PlayerREF)
EndIf
_00E_VisionShaderParticles.Apply(0.5)
AudioCategoryFST.Mute()
PlayerREF.SetGhost(True)
PlayerVisionStartMarker = PlayerREF.PlaceAtMe(XMarker as form, 1, false, false)
PlayerVisionFailsaveMarker.MoveTo(PlayerREF)
Game.DisablePlayerControls(false, true, true, false, true, false, true, false)
Game.ForceFirstPerson()
Game.ShowFirstPersonGeometry(False)
Wait(0.100000)
EndFunction
Function VisionEffectTimestopStop(bool bMovementHasBeenLocked = False)
float fSpeedMultBefore = PlayerREF.GetAV("speedMult")
PlayerREF.SetGhost(False)
Game.DisablePlayerControls()
PlayerREF.SetActorValue("SpeedMult", PlayerSpeed)
PlayerREF.SetGhost(False)
AudioCategoryFST.UnMute()
UpdateSpeed(PlayerREF)
Game.ShowFirstPersonGeometry(True)
If !bMovementHasBeenLocked
If PlayerVisionFailsaveMarker.GetDistance(PlayerREF) <= 1000
PlayerREF.MoveTo(PlayerVisionStartMarker)
Elseif PlayerVisionFailsaveMarker.GetDistance(PlayerREF) >= 1000
PlayerREF.MoveTo(PlayerVisionFailsaveMarker)
EndIf
EndIf
PlayerREF.SetGhost(False)
Sound.StopInstance(VisionSound)
MAGConjurePortalClose.Play(PlayerREF)
_00E_SilenceAbruptHighPriority.Remove()
PlayerREF.RemoveSpell(_00E_Vision_TimeSpell)
_00E_VisionShaderParticles.Remove(0.5)
_00E_VisionEndImod.ApplyCrossFade(1)
Wait(0.5)
PlayerREF.SetAV("speedMult", fPlayerSpeedBeforeVision)
If PlayerREF.GetAV("speedMult") < 50
PlayerREF.SetAV("speedMult", 100)
EndIf
UpdateSpeed(PlayerREF)
Game.EnablePlayerControls()
Game.SetPlayerAIDriven(0)
Game.ShowFirstPersonGeometry(True)
_00E_SilenceAbruptHighPriority.Remove()
EndFunction
Function VisionEffectNoTimestop(Formlist RefsInvolved, Formlist ActorsToFreeze, bool bCustomMusic = False)
Game.ShowFirstPersonGeometry(False)
PlayerREF.SetAlpha(0.1)
PlayerREF.AddPerk(_00E_VisionPerk)
UpdateSpeed(PlayerREF)
MagRacialBattlecryFire.Play(PlayerREF)
if !bCustomMusic
_00E_SilenceAbruptHighPriority.Add()
EndIf
AudioCategoryFST.Mute()
PlayerVisionStartMarker = PlayerREF.PlaceAtMe(XMarker as form, 1, false, false)
PlayerVisionFailsaveMarker.MoveTo(PlayerREF)
PlayerREF.SetGhost(True)
VisionSound = _00E_VisionLPM.Play(PlayerREF)
_00E_VisionStartImod.Apply()
If PlayerREF.IsInInterior()
_00E_VisionShaderParticles.Apply(0.5)
EndIf
if RefsInvolved != None
int iIndex = RefsInvolved.GetSize()
while iIndex > 0
iIndex -= 1
Actor VisionREF = RefsInvolved.GetAt(iIndex) as Actor
if VisionREF.IsDisabled()
VisionREF.EnableNoWait()
EndIf
VisionRef.SetAlpha(0.5)
MS04MemoryFXBody01VFX.Play(VisionREF)
EndWhile
endif
if ActorsToFreeze != None
int iIndex02 = ActorsToFreeze.GetSize()
while iIndex02 > 0
iIndex02 -= 1
Actor FreezeREF = ActorsToFreeze.GetAt(iIndex02) as Actor
FreezeREF.EnableAI(False)
EndWhile
endif
_00E_MQ16_VisionIMOD.Remove()
_00E_VisionImod.ApplyCrossFade(1)
EndFunction
Function VisionEffectNoTimestopStop(Formlist RefsInvolved, Formlist ActorsToFreeze, bool bHasBeenRestrained = False)
PlayerREF.SetAlpha(1.0)
Game.ShowFirstPersonGeometry(True)
If !bHasBeenRestrained
If PlayerVisionFailsaveMarker.GetDistance(PlayerREF) <= 1000
PlayerREF.MoveTo(PlayerVisionStartMarker)
Elseif PlayerVisionFailsaveMarker.GetDistance(PlayerREF) >= 1000
PlayerREF.MoveTo(PlayerVisionFailsaveMarker)
EndIf
EndIf
_00E_VisionEndImod.ApplyCrossFade(1)
If PlayerREF.IsInInterior()
_00E_VisionShaderParticles.Remove(0.5)
EndIf
if RefsInvolved != None
int iIndex = RefsInvolved.GetSize()
while iIndex > 0
iIndex -= 1
Actor VisionREF = RefsInvolved.GetAt(iIndex) as Actor
MS04MemoryFXBody01VFX.Stop(VisionREF)
VisionRef.SetAlpha(1)
EndWhile
endif
if ActorsToFreeze != None
int iIndex02 = ActorsToFreeze.GetSize()
while iIndex02 > 0
iIndex02 -= 1
Actor FreezeREF = ActorsToFreeze.GetAt(iIndex02) as Actor
FreezeREF.EnableAI(True)
EndWhile
endif
AudioCategoryFST.UnMute()
PlayerREF.SetGhost(False)
Sound.StopInstance(VisionSound)
MAGConjurePortalClose.Play(PlayerREF)
_00E_SilenceAbruptHighPriority.Remove()
PlayerREF.RemovePerk(_00E_VisionPerk)
If PlayerREF.GetAV("speedMult") < 50
PlayerREF.SetAV("speedMult", 100)
EndIf
UpdateSpeed(PlayerREF)
_00E_MQ16_VisionIMOD.Remove()
_00E_VisionImod.Remove()
EndFunction
Function UpdateSpeed(Actor SpeedUpdateActor)
If SpeedUpdateActor.HasSpell(_00E_Vision_UpdateAb)
SpeedUpdateActor.RemoveSpell(_00E_Vision_UpdateAb)
EndIf
SpeedUpdateActor.AddSpell(_00E_Vision_UpdateAb, False)
Wait(0.1)
SpeedUpdateActor.RemoveSpell(_00E_Vision_UpdateAb)
EndFunction
;=====================================================================================
; AREMOVE ITEMS SAFE
;=====================================================================================
Function RemoveAllItemsSafeVersion(ObjectReference TransferToLoc = NONE)
If Gold001 == NONE || _00E_AllAmmos == NONE
Return
EndIf
RemoveItemsIncrementally(Gold001, TransferToLoc)
Form[] arrows = _00E_AllAmmos.ToArray()
Int i = 0
While i < arrows.Length
RemoveItemsIncrementally(arrows[i], TransferToLoc)
i += 1
EndWhile
If TransferToLoc == NONE
PlayerREF.removeAllItems(_00E_RemoveAllItems_TrashContainer, abRemoveQuestItems = false)
_00E_RemoveAllItems_TrashContainer.removeAllItems()
Else
PlayerREF.RemoveAllItems(akTransferTo = TransferToLoc, abRemoveQuestItems = true)
EndIf
EndFunction
Function RemoveItemsIncrementally(Form akItem, ObjectReference TransferToLoc)
Int nCount = PlayerREF.GetItemCount(akItem)
If nCount > 3000000 && akItem == Gold001
_00E_PleaseRemoveMoney.Show()
EndIf
While nCount > 0
PlayerREF.RemoveItem(akItem, 10000, true, TransferToLoc)
nCount -= 10000
EndWhile
EndFunction
;=====================================================================================
; ADDED IN FORGOTTEN STORIES
;=====================================================================================
Function SlowMotion(float fDuration = 5.0, bool bSound = true)
PlayerREF.AddSpell(_00E_FS_NQR05_SlowMotionSP, False)
if bSound
_00E_FS_NQR05_SlowMotion_IntroM.Play(PlayerREF)
endif
Wait(fDuration)
if bSound
_00E_FS_NQR05_SlowMotion_OutroM.Play(PlayerREF)
endif
PlayerREF.RemoveSpell(_00E_FS_NQR05_SlowMotionSP)
EndFunction
Function UnsummonApparitionIfExists() Global
_FS_Phasmalist_ControlQuest.UnsummonApparitionIfExists()
EndFunction
Function EndWerewolfModeWhenTransformed() Global
; This function ends the werewolf mode if the player is currently transformed, with no penalties.
_FS_TheriantrophistControlQuest.TransformBackIfTransformed()
; Links to Theriantrophist script.
EndFunction
Function SetNPCAsCompanion(Actor akActor, bool bCompanion = True, int iCompanionHealth = 100, int iCompanionStamina = 100, int iCompanionMagicka = 100) Global
;Sets an NPC as companion, showing his health bar, making him friendly, unflagging him as ghost. Does the opposite when bCompanion is set to false.
;Additionally sets the AVs Health, Stamina, Magicka for the NPC companion
If bCompanion
akActor.SetRelationshipRank(Game.GetForm(0x14) as Actor, 3)
akActor.SetGhost(False)
akActor.getActorbase().SetEssential(true) ; just in case, had trouble with FS_NQR05
akActor.SetPlayerTeammate(True)
akActor.IgnoreFriendlyHits()
akActor.SetActorValue("Health", iCompanionHealth)
akActor.SetActorValue("Stamina", iCompanionStamina)
akActor.SetActorValue("Magicka", iCompanionMagicka)
HealthBarManager.Show(akActor)
Else
akActor.SetGhost(True)
akActor.getActorbase().SetEssential(true) ; just in case, had trouble with FS_NQR05
akActor.ResetHealthAndLimbs()
akActor.SetPlayerTeammate(False)
akActor.IgnoreFriendlyHits(False)
HealthBarManager.Hide(akActor)
EndIf
EndFunction
Function StartVoicedLetter(MusicType MTVoicedLetter)
MTToRemove = MTVoicedLetter
RegisterForMenu("Book Menu")
MTVoicedLetter.Add()
EndFunction
Event OnMenuClose(String MenuName)
If MenuName == "Book Menu"
MTToRemove.Remove()
UnregisterForMenu("Book Menu")
EndIf
EndEvent
; SKILL BOOKS
Message Property _00E_SkillbookWarning Auto
Bool _SkillBookReadLocked = False
Function _ReadSkillBook(String skillName, Int skillTopLimit, Form bookItem, Message msgSkillIncrease, GlobalVariable availablePoints, Message msgNoPoints)
Message failMsg = None
While _SkillBookReadLocked
WaitMenuMode(0.1)
EndWhile
_SkillBookReadLocked = True
; DO NOT FORGET TO FALSE _SkillBookReadLocked ON RETURN
If availablePoints.GetValue() >= 1
Int curSkill = PlayerREF.GetBaseActorValue(skillName) as Int
If curSkill >= skillTopLimit
failMsg = _00E_Levelsystem_sSkillTooWellDeveloped
ElseIf curSkill >= (skillTopLimit - 25) || (_00E_SkillbookWarning.Show() == 0) ; If cur. skill is within the book's limit or the player says "Yes"
; Do skill increase
curSkill += 1
PlayerREF.SetActorValue(skillName, curSkill)
availablePoints.Mod(-1)
_SkillBookReadLocked = False
msgSkillIncrease.Show(1, curSkill)
Return
EndIf
Else ; availablePoints < 1
failMsg = msgNoPoints
EndIf
; Processing failed read
_SkillBookReadLocked = False
If failMsg != None
failMsg.Show()
EndIf
PlayerREF.AddItem(bookItem, 1, True)
EndFunction
Function ReadPrimarySkillBook(String skillName, Int skillTopLimit, Form bookItem, Message msgSkillIncrease)
_ReadSkillBook(skillName, skillTopLimit, bookItem, msgSkillIncrease, Lernpunkte, _00E_Levelsystem_sNoMoreLearningPoints)
EndFunction
Function ReadCraftingSkillBook(String skillName, Int skillTopLimit, Form bookItem, Message msgSkillIncrease)
_ReadSkillBook(skillName, skillTopLimit, bookItem, msgSkillIncrease, Handwerkspunkte, _00E_Levelsystem_sNoMoreCraftingPoints)
EndFunction
Function ReadMemorySkillBook(String sClass, Int iTier, Message talentMessage, float fRecoveryTime02, float fRecoveryTime03, Potion PotionItem, Shout TaughtTalent, WordOfPower Word01, WordOfPower Word02, WordOfPower Word03, Perk Perk01, Perk Perk02, Perk Perk03)
While _MemoryBookReadLocked
WaitMenuMode(0.1)
EndWhile
_MemoryBookReadLocked = True
int iButton = talentMessage.Show()
if iButton == 0
if iTier == 1
iRequiredPoints = iPointRequirementTier01
Elseif iTier == 2
iRequiredPoints = iPointRequirementTier02
Else
iRequiredPoints = iPointRequirementTier03
EndIf
if RequirementsMetMemoryBook(iTier, Perk01, Perk02, Perk03, sClass)
TeachTalent(iTier, TaughtTalent, Perk01, Perk02, Perk03, Word01, Word02, Word03, fRecoveryTime02, fRecoveryTime03)
Else
if bValidSkilllevel
Message messageToShow = _00E_FS_A3_sMageClassName
if sClass == "Rogue"
messageToShow = _00E_FS_A3_sRogueClassName
Elseif sClass == "Warrior"
messageToShow = _00E_FS_A3_sWarriorClassName
EndIf
Debug.Notification(_00E_FS_A3_sYouNeedSkillpoints.GetName() + " " + iRequiredPoints + _00E_FS_A3_sIn.GetName() + messageToShow.GetName() + _00E_FS_A3_sToUnlockThisClass.GetName())
EndIf
PlayerREF.AddItem(PotionItem, 1, true)
EndIf
_MemoryBookReadLocked = False
Else
PlayerREF.AddItem(PotionItem, 1, true)
_MemoryBookReadLocked = False
Return
EndIf
EndFunction
bool Function RequirementsMetMemoryBook(int iTier, Perk Perk01, Perk Perk02, Perk Perk03, string sClass)
Formlist ClassFormList01
Formlist ClassFormList02
Formlist ClassFormList03
if (iTier == 3 && !PlayerREF.HasPerk(Perk02)) || (iTier == 2 && !PlayerREF.HasPerk(Perk01))
_00E_FS_A3_NeedToLearnOtherLevels.Show()
bValidSkilllevel = False
Return False
Elseif (iTier == 1 && PlayerREF.HasPerk(Perk01)) || (iTier == 2 && PlayerREF.HasPerk(Perk02)) || (iTier == 3 && PlayerREF.HasPerk(Perk03))
_00E_FS_A3_AlreadyKnowThisLevel.Show()
bValidSkilllevel = False
Return False
Else
bValidSkilllevel = True
if sClass == "Rogue"
ClassFormList01 = EspionagePerks
ClassFormList02 = TrickeryPerks
ClassFormList03 = VagabondPerks
Elseif sClass == "Warrior"
ClassFormList01 = BastionPerks
ClassFormList02 = DerwishPerks
ClassFormList03 = RagePerks
Elseif sClass == "Mage"
ClassFormList01 = ElementalismPerks
ClassFormList02 = LifeAndDeathPerks
ClassFormList03 = ManipulationPerks
EndIf
int iTotalPointsInRequiredClass = (PlayerSkillMenu.GetPointsInClass(ClassFormList01) + PlayerSkillMenu.GetPointsInClass(ClassFormList02) + PlayerSkillMenu.GetPointsInClass(ClassFormList03))
if iTotalPointsInRequiredClass >= iRequiredPoints
Return True
Else
Return False
EndIf
EndIf
EndFunction
Function TeachTalent(int iLevel, Shout TaughtTalent, Perk Perk01, Perk Perk02, Perk Perk03, WordOfPower Word01, WordOfPower Word02, WordOfPower Word03, float fRecoveryTime02, float fRecoveryTime03)
if iLevel == 1
PlayerREF.AddPerk(Perk01)
PlayerREF.AddShout(TaughtTalent)
Game.UnlockWord(Word01)
Game.TeachWord(Word01)
Elseif iLevel == 2
PlayerREF.AddPerk(Perk02)
Game.UnlockWord(Word02)
Game.TeachWord(Word02)
SetRecoveryTimeMemoryBook(2, TaughtTalent, fRecoveryTime02, fRecoveryTime03)
Else
PlayerREF.AddPerk(Perk03)
Game.UnlockWord(Word03)
Game.TeachWord(Word03)
SetRecoveryTimeMemoryBook(3, TaughtTalent, fRecoveryTime02, fRecoveryTime03)
EndIf
TalentPoints.Mod(-1)
If _00E_AchievementsEnabled.GetValueInt() == 1
Steam.UnlockAchievement("END_TALENT_BOOK_01")
EndIf
EndFunction
Function SetRecoveryTimeMemoryBook(int iWord, Shout TaughtTalent, float fRecoveryTime02, float fRecoveryTime03)
{This function handles the issue of cooldowns not depending on the value in the CK but on the duration the player presses the [Shout] key on his keyboard.}
If iWord == 2
TaughtTalent.SetNthRecoveryTime(0, fRecoveryTime02)
TaughtTalent.SetNthRecoveryTime(1, fRecoveryTime02)
Else
TaughtTalent.SetNthRecoveryTime(0, fRecoveryTime03)
TaughtTalent.SetNthRecoveryTime(1, fRecoveryTime03)
TaughtTalent.SetNthRecoveryTime(2, fRecoveryTime03)
EndIf
EndFunction
; EQUIPPING SETS
Function OnArmorSetBonusAdded(Bool bFullSet)
Sound.SetInstanceVolume(MAGIllusionCharm.Play(PlayerREF), 0.4) ; Play MAGIllusionCharm at lower volume
If bFullSet && bSetAchievementUnlocked == False && _00E_AchievementsEnabled.GetValueInt() == 1
Steam.UnlockAchievement("END_SET_01")
bSetAchievementUnlocked = True
EndIf
EndFunction
Function OnArmorSetBonusRemoved()
_00E_ArmorSetScript_sSetBonusRemoved.Show()
EndFunction
Float fDefaultHeadTrackTimerOldValue = 0.0
Float fStayHeadTrackTimerOldValue = 0.0
Function StopRandomHeadTracking()
; Raise "change headtrack target" timers a lot so the NPCs would stare at what the scene tells them, without randomly switching to the player or other NPCs
If fDefaultHeadTrackTimerOldValue == 0.0
fDefaultHeadTrackTimerOldValue = Game.GetGameSettingFloat("fAIHoldDefaultHeadTrackTimer")
Game.SetGameSettingFloat("fAIHoldDefaultHeadTrackTimer", 1000.0)
EndIf
If fStayHeadTrackTimerOldValue == 0.0
fStayHeadTrackTimerOldValue = Game.GetGameSettingFloat("fAIStayonScriptHeadtrack")
Game.SetGameSettingFloat("fAIStayonScriptHeadtrack", 1000.0)
EndIf
EndFunction
Function ResumeRandomHeadTracking()
If fDefaultHeadTrackTimerOldValue > 0.0
Game.SetGameSettingFloat("fAIHoldDefaultHeadTrackTimer", fDefaultHeadTrackTimerOldValue)
fDefaultHeadTrackTimerOldValue = 0.0
EndIf
If fStayHeadTrackTimerOldValue > 0.0
Game.SetGameSettingFloat("fAIStayonScriptHeadtrack", fStayHeadTrackTimerOldValue)
fStayHeadTrackTimerOldValue = 0.0
EndIf
EndFunction
;=====================================================================================
; PROPERTIES
;=====================================================================================
int Property iMajorClassIndex Auto Conditional Hidden
int Property iMinorClassIndex Auto Conditional Hidden
bool Property bAllowIdleChatter = True Auto Conditional Hidden ; Set this to true when NPCs shouldn't Idle around
float Property fPlayerSpeedBeforeVision Auto Hidden
float Property fCameraMaxDistance Auto Hidden
float Property fBaseGravity Auto Hidden
;Actor akPlayerCopy
Sound Property _00E_FS_NQR05_SlowMotion_IntroM Auto
Sound Property _00E_FS_NQR05_SlowMotion_OutroM Auto
ActorBase Property _00E_MC_Jespar Auto
ActorBase Property _00E_MC_Calia Auto
ActorBase Property _00E_SC_Tharael Auto
ActorBase Property _00E_SC_Dijaam Auto
ActorBase Property _00E_MQ11c_Ryneus Auto
ActorBase Property _00E_CapitalCityMaelGroschenfrst Auto
ActorBase Property _00E_MC_Yuslan Auto
ActorBase Property _00E_FS_NQ02_Esme Auto
GlobalVariable Property SympathyTharael Auto
GlobalVariable Property SympathyJespar Auto
GlobalVariable Property SympathyDijaam Auto
GlobalVariable Property SympathyMaelGroschenfuerst Auto
GlobalVariable Property SympathyCalia Auto
GlobalVariable Property SympathyYuslan Auto
GlobalVariable Property SympathyEsme Auto
GlobalVariable Property CaliaFlirtCounter Auto
GlobalVariable Property DijaamFlirtCounter Auto
GlobalVariable Property JesparFlirtCounter Auto
GlobalVariable Property TharaelFlirtCounter Auto
GlobalVariable Property _00E_AchievementsEnabled Auto
ReferenceAlias Property Levelsystem_SympathyActor Auto
Formlist Property _00E_AllAmmos Auto
MiscObject Property Gold001 Auto
Message Property _00E_PleaseRemoveMoney Auto
GlobalVariable Property GameHour Auto
;--------------------------------------VISION-----------------------------------
float PlayerSpeed
int VisionSound
Perk Property _00E_VisionPerk Auto
SoundCategory Property AudioCategoryFST Auto
VisualEffect Property MS04MemoryFXBody01VFX Auto
ImageSpaceModifier Property _00E_VisionStartImod Auto
ImageSpaceModifier Property _00E_VisionIMOD Auto
ImageSpaceModifier Property _00E_VisionEndImod Auto
Sound Property _00E_VisionLPM Auto
Sound Property MagRacialBattlecryFire Auto
Sound Property MAGConjurePortalClose Auto
Spell Property _00E_Vision_UpdateAb Auto
MusicType Property _00E_SilenceTransitionLowPriority02 Auto
MusicType Property _00E_Music_Special_MQ12b_Samael Auto
MusicType Property _00E_SilenceLongTransitionHighPriority Auto
MusicType Property _00E_SilenceTransitionLowPriority Auto
MusicType Property _00E_SilenceTransitionHighPriority Auto
MusicType Property _00E_SilenceAbruptHighPriority Auto
MusicType Property _00E_Music_Special_TavernSilence Auto
Formlist Property _00E_MUS_AllCombatSoundtracks Auto
;--------------------------------------LEVELSYSTEM-----------------------------------
GlobalVariable Property Handwerkspunkte auto
GlobalVariable Property SympathyRyneus auto
GlobalVariable Property Lernpunkte auto
GlobalVariable Property TalentPoints auto
GlobalVariable Property _00E_DisableQuestTutorials Auto
GlobalVariable Property _00E_DisableSkillTutorials Auto
Keyword Property BrawlKeyword Auto
Message Property _00E_FS_A3_sYouNeedSkillpoints Auto
Message Property _00E_FS_A3_sIn Auto
Message Property _00E_FS_A3_sToUnlockThisClass Auto
Message Property _00E_FS_A3_sWarriorClassName Auto
Message Property _00E_FS_A3_sRogueClassName Auto
Message Property _00E_FS_A3_sMageClassName Auto
Message Property _00E_FS_A3_NeedToLearnOtherLevels Auto
Message Property _00E_FS_A3_AlreadyKnowThisLevel Auto
int iPointRequirementTier01 = 5
int iPointRequirementTier02 = 10
int iPointRequirementTier03 = 15
int iRequiredPoints
bool bValidSkilllevel
Formlist Property EspionagePerks Auto
Formlist Property TrickeryPerks Auto
Formlist Property VagabondPerks Auto
Formlist Property BastionPerks Auto
Formlist Property DerwishPerks Auto
Formlist Property RagePerks Auto
Formlist Property ElementalismPerks Auto
Formlist Property LifeAndDeathPerks Auto
Formlist Property ManipulationPerks Auto
_00E_Game_SkillmenuSC Property PlayerSkillMenu Auto
Bool _MemoryBookReadLocked = False
;-------------------------------------TELEPORT SCRIPT-----------------------------------
VisualEffect Property MGTeleportInEffect Auto
Actor Property PlayerREF Auto
ActorBase Property Player Auto
EffectShader Property TimeFadeOut01FXS Auto
EffectShader Property TimeFadeIn01FXS Auto
Explosion Property _00E_TeleportExplosion Auto
Explosion Property _00E_NPCOorbayaTeleportExplosionBlue Auto
Idle Property WebIdleExit Auto
Idle Property IdleT02AscendMale Auto
Idle Property IdleT02AscendFemale Auto
Idle Property IdleForceDefaultState Auto
Static Property XMarkerHeading Auto
Sound Property _00E_MagicProtectionSpellM Auto
Sound Property _00E_A2_Ghostwalk_TeleportDoneSound Auto
Sound Property _00E_TeleportCastSound Auto
Message Property _00E_Tutorial_Brawl Auto
Message Property _00E_Tutorial_Companions02_Jespar Auto
Message Property _00E_Tutorial_Companions02_Calia Auto
Message Property _00E_Levelsystem_sApproves Auto
Message Property _00E_Levelsystem_sAppreciates Auto
Message Property _00E_Levelsystem_sAppreciatesALot Auto
Message Property _00E_Levelsystem_sDislikes Auto
Message Property _00E_Levelsystem_sHurt Auto
Message Property _00E_Levelsystem_sVeryHurt Auto
Message Property _00E_Levelsystem_sDoesNotTrust Auto
Message Property _00E_Levelsystem_sExtremelyHurt Auto
Message Property _00E_Levelsystem_sIsHurt Auto
Message Property _00E_Levelsystem_sSynergyDiscovered Auto
Message Property _00E_Levelsystem_sNoMoreCraftingPoints Auto
Message Property _00E_Levelsystem_sNoMoreLearningPoints Auto
Message Property _00E_Levelsystem_sSkillTooWellDeveloped Auto
Message Property _00E_Levelsystem_sSkillBy Auto
Message Property _00E_Levelsystem_sSkillTo Auto
Message Property _00E_Levelsystem_sSkillFrom Auto
Message Property _00E_Levelsystem_sSkillIncreased Auto
Message Property _00E_Levelsystem_sAbilityEnemyLevelTooHigh Auto
Message Property _00E_Levelsystem_sAbilityEnemyHasToBeAlive Auto
Message Property _00E_Levelsystem_sEnemyHasToBeDead Auto
Message Property _00E_Levelsystem_sAbilityEnemyTooFarAway Auto
Message Property _00E_Levelsystem_sAbilityTargetImmune Auto
Message Property _00E_Levelsystem_sAbilityMarkingRemoved Auto
Message Property _00E_Levelsystem_sEnemyMarked Auto
Message Property _00E_Levelsystem_sAbilityStanceStarted Auto
Message Property _00E_Levelsystem_sAbilityStanceEnded Auto
Message Property _00E_Levelsystem_sAbilityStanceQyrai Auto
Message Property _00E_Levelsystem_sAbilityStanceSkaragg Auto
Message Property _00E_Levelsystem_sEnemyAlreadyMarked Auto
Message Property _00E_Levelsystem_sEldritchBloodVictimMarked Auto
Message Property _00E_Levelsystem_sEldritchBloodAttackTargetMarked Auto
Message Property _00E_Levelsystem_sEldritchBloodAttackVictimMarkingRemoved Auto
Message Property _00E_Levelsystem_sEldritchBloodVictimMarkingRemoved Auto
Message Property _00E_Levelsystem_sGhostwalkEnemyTooCloseToWall Auto
Message Property _00E_DialogueQuitGame Auto
ObjectReference Property PlayerVisionStartMarker Auto Hidden
ObjectReference Property PlayerVisionFailsaveMarker Auto Hidden
ObjectReference Property VisionLight Auto Hidden
ObjectReference Property _00E_RemoveAllItems_TrashContainer Auto
Idle Property IdleMagic_01 Auto
Spell Property _00E_Vision_NoTimeSpell Auto
Spell Property _00E_Vision_NoTimeSubtleSpell Auto
Spell Property _00E_Vision_TimeSpell Auto
Spell Property _00E_PriestCureDiseases Auto
Spell Property _00E_FS_NQR05_SlowMotionSP Auto
GlobalVariable Property _00E_HeadtrackGlobal Auto
ImageSpaceModifier Property FadeToBlackIMOD Auto
ImageSpaceModifier Property FadeToBlackHoldIMOD Auto
ImageSpaceModifier Property FadeToBlackBackIMOD Auto
ImageSpaceModifier Property _00E_NPCTeleportExplosionIMOD Auto
ImageSpaceModifier Property _00E_TeleportImod Auto
ImageSpaceModifier Property _00E_VisionStartTimestopIMOD Auto
ImageSpaceModifier Property _00E_MQ16_VisionIMOD Auto
ShaderParticleGeometry Property _00E_VisionShaderParticles Auto
SoundCategory Property AudioCategoryAMB Auto
SoundCategory Property AudioCategoryAMBr Auto
SoundCategory Property AudioCategorySFX Auto
Static Property XMarker Auto
int doOnce
int done
float SpeedBefore
bool bUnlockedSynergyAchievement
;for re-equipping the player after the bathouse scene
Armor PlayerHelmet
Armor PlayerCuirass
Armor PlayerGauntlets
Armor PlayerBoots
Armor PlayerRing01
Armor PlayerRing02
Armor PlayerNecklace
Weapon RightHandWeapon
Weapon LeftHandWeapon
Spell RightHandSpell
Spell LeftHandSpell
Armor Shield
;for VoiceLetters
MusicType MTToRemove
;for sets
Sound Property MAGIllusionCharm Auto
Message Property _00E_ArmorSetScript_sSetBonusRemoved Auto
bool bSetAchievementUnlocked = false