enderalse/source/scripts/_00e_placeablegrammophonplay.psc

161 lines
3.5 KiB
Plaintext

Scriptname _00E_PlaceableGrammophonPlay extends ObjectReference
Sound Property _00E_MUS_Placeable_Koppophon Auto
MusicType Property _00E_SilenceTransitionHighPriority Auto ; OBSOLETE. Left for version update on older saves.
MusicType Property _00E_SilenceKoppophon Auto
Message Property _00E_PlayerhousingKoppophonVolume Auto
Actor Property PlayerREF Auto
Int playbackId = -1
Float volume = 0.5
Bool bDone ; Unlocked END_KOPPOPHON_01 achievement
Bool bMusicLocked = False
Bool bOldSilenceUpdated = False
Float Property MUSIC_LENGTH = 87.2 AutoReadOnly
;=====================================================================================
; FUNCTIONS
;=====================================================================================
Function StopMusic()
bMusicLocked = True
UnregisterForModEvent("BardsLoadGame")
UnregisterForUpdate()
If bOldSilenceUpdated == False
bOldSilenceUpdated = True
If playbackId != -1
_00E_SilenceTransitionHighPriority.Remove()
EndIf
EndIf
If playbackId != -1
Sound.StopInstance(playbackId)
playbackId = -1
EndIf
_00E_SilenceKoppophon.Remove()
bMusicLocked = False
EndFunction
Function TryStopMusic()
If bMusicLocked == False
StopMusic()
Else
RegisterForSingleUpdate(0.5)
EndIf
EndFunction
Function Cleanup()
GoToState("DoneCleanup")
TryStopMusic()
EndFunction
;=====================================================================================
; EVENTS
;=====================================================================================
Event OnInit()
GoToState("DoneCleanup")
EndEvent
Event OnActivate(ObjectReference triggerRef)
If triggerRef == PlayerREF && _00E_PlayerhousingMaster.ReferenceCanBeActivated(Self) && bMusicLocked == False
bMusicLocked = True
If playbackId == -1 ; Start playing
bOldSilenceUpdated = True
RegisterForModEvent("BardsLoadGame", "OnBardsLoadGame")
_00E_SilenceKoppophon.Add()
playbackId = _00E_MUS_Placeable_Koppophon.Play(Self)
If volume <= 0.0 || volume > 1.0
volume = 0.5
EndIf
Sound.SetInstanceVolume(playbackId, volume)
RegisterForSingleUpdate(_00E_TimeControl.AdjustTimePeriodByEngineTimerError(MUSIC_LENGTH))
GoToState("")
_00E_PlayerhousingKoppophonVolume.Show(volume * 100.0)
If bDone == False
bDone = True
Steam.UnlockAchievement("END_KOPPOPHON_01")
EndIf
ElseIf bOldSilenceUpdated == False
; Player just loaded an older save with the Koppophon playing. The sound is dead by now.
StopMusic()
Else ; Volume control
Float fNewVolume = volume + 0.25
If fNewVolume > 1.0
fNewVolume = 0.0
EndIf
Sound.SetInstanceVolume(playbackId, fNewVolume)
If fNewVolume == 0.0 ; On mute
_00E_SilenceKoppophon.Remove()
ElseIf volume == 0.0 ; On unmute
_00E_SilenceKoppophon.Add()
EndIf
volume = fNewVolume
_00E_PlayerhousingKoppophonVolume.Show(volume * 100.0)
EndIf
bMusicLocked = False
EndIf
EndEvent
Event OnUpdate()
TryStopMusic()
EndEvent
Event OnBardsLoadGame(string eventName, string strArg, float numArg, Form sender)
; Player just loaded a save with the Koppophon playing. The sound is dead by now.
TryStopMusic()
EndEvent
Event OnCellAttach()
Cleanup()
EndEvent
Event OnLoad()
Cleanup()
EndEvent
Event OnCellDetach()
Cleanup()
EndEvent
Event OnUnload()
Cleanup()
EndEvent
State DoneCleanup
Event OnCellAttach()
; Do nothing
EndEvent
Event OnLoad()
; Do nothing
EndEvent
Event OnCellDetach()
; Do nothing
EndEvent
Event OnUnload()
; Do nothing
EndEvent
EndState