enderalse/source/scripts/trapbase.psc

247 lines
6.2 KiB
Plaintext
Raw Normal View History

scriptName TrapBase extends objectReference
;
;This is the base trap script and handles what the trap is told by the trigger
;Any Trap should be usable with any trigger
;Trap params are on the trap (damage, timing, etc)
;Activation params are on the trigger, toggle, number of times it can be triggered, etc.
;Individual traps will be extended from this framework
;Trigger Types for quick reference
;0 = Single - fire the trap once do one time
;1 = Hold - on entry turn on, on exit turn off
;2 = Toggle - on entry or use toggle trap state
;3 = Turn On - on entry or use turn on trap
;4 = Turn Off - on entry or use turn off trap
;================================================================
bool property init auto hidden ; This should not be set by the user
bool property trapDisarmed auto hidden ; This should not be set by the user
bool property loop auto hidden ; This should not be set by the user
objectReference property lastActivateRef auto hidden
bool Property fireOnlyOnce auto ;This should be set by the user
sound property WindupSound auto ;Played when winding up or releasing trap
;sound Property TrapHitSound auto ;Played when the trap hits something
;int property trapPushBack auto ;push back impulse provided by the trap
bool property overrideLoop = False auto hidden
int Property TrapLevel = 1 auto
{Used to determine the difficulty of the trap, currently only tied to damage
0 = Easy
1 = Medium (DEFAULT)
2 = Hard
3 = VeryHard}
int Property damage auto hidden
TrapHitBase property hitBase auto hidden
Function initialize() ; Placeholder - replaced with trap specific function
endFunction
Function fireTrap() ; Placeholder - replaced with trap specific function
ResolveLeveledDamage()
endFunction
Function resetLimiter() ; Placeholder - replaced with trap specific function
endFunction
;================================================================
auto State Idle
event onActivate (objectReference activateRef)
; ;debug.TRACE("Idle trigger")
lastActivateRef = activateRef
if (trapDisarmed == False)
if init == False ;determine if we should initialize
initialize()
init = True
endif
TrapTriggerBase TriggerRef ;TriggerRef will always be a TrapTriggerBase
TriggerRef = activateRef as TrapTriggerBase ;Set TriggerRef to our activateRef
; ;debug.Trace("Type = " + TriggerRef.Type)
if TriggerRef
;TRACE("Type =")
;TRACE(TriggerRef.Type)
if (TriggerRef.Type == 0) ;if Type = 0 Single activate
GoToState ( "DoOnce" ) ;DoOnce Trigger Type
ResetLimiter()
FireTrap()
elseif (TriggerRef.Type == 1) ;Hold Trigger Type
GoToState ( "Hold" )
ResetLimiter()
Loop = TRUE
FireTrap()
elseif (TriggerRef.Type >1 && TriggerRef.Type < 4) ;Most Trigger Types use On
GoToState ( "On" )
ResetLimiter()
Loop = TRUE
FireTrap()
endif
else
GoToState ( "DoOnce" ) ;DoOnce Trigger Type
ResetLimiter()
FireTrap()
endif
endif
endevent
endstate
State DoOnce ;Type Do Once
Event OnActivate( objectReference activateRef )
; ;debug.TRACE(self + "Do Once trigger")
lastActivateRef = activateRef
if (trapDisarmed == FALSE)
TrapTriggerBase TriggerRef ;TriggerRef will always be a TrapTriggerBase
TriggerRef = activateRef as TrapTriggerBase ;Set TriggerRef to our activateRef
; ;debug.Trace("Type = " + TriggerRef.Type)
If TriggerRef
if (TriggerRef.Type == 0) ;Type Do Once
resetLimiter()
endif
if (TriggerRef.Type == 1) ;Type Hold
GoToState("Hold")
resetLimiter()
Loop = TRUE
endif
if (TriggerRef.Type >1 && TriggerRef.Type < 4) ;Most Trigger Types use On
GoToState ( "On" )
ResetLimiter()
Loop = TRUE
endif
if (TriggerRef.Type == 4) ;Type Hold
Loop = FALSE
GoToState("Reset")
endif
else
endif
endif
EndEvent
endstate
State Reset
Event OnBeginState()
overrideLoop = True
GoToState ( "Idle" )
hitBase = (self as objectReference) as TrapHitBase
if hitbase
hitBase.goToState("CannotHit")
endif
endEvent
Event OnActivate( objectReference activateRef )
lastActivateRef = activateRef
EndEvent
endState
State On
event onActivate (objectReference activateRef)
; ;debug.TRACE(self + "On trigger")
lastActivateRef = activateRef
if (trapDisarmed == FALSE)
TrapTriggerBase TriggerRef ;TriggerRef will always be a TrapTriggerBase
TriggerRef = activateRef as TrapTriggerBase ;Set TriggerRef to our activateRef
; ;debug.Trace("Type = " + TriggerRef.Type)
if TriggerRef
;/
if (TriggerRef.Type == 1) ;Type Hold
GoToState("Hold")
resetLimiter()
Loop = TRUE
endif
/;
if (TriggerRef.Type == 4) ;if Type = 4 Turn Off
GoToState ( "Reset" )
Loop = FALSE
overrideLoop = True
endif
if (TriggerRef.Type == 2) ;if Type = 2 Toggle
GoToState ( "Reset" )
Loop = FALSE
overrideLoop = True
endif
endif
endif
endevent
endstate
State Hold ;Hold overrides all other states ***This is kind of a depricated state ***
event onActivate (objectReference activateRef)
; ;debug.TRACE(self + "Hold trigger")
lastActivateRef = activateRef
if (trapDisarmed == FALSE)
TrapTriggerBase TriggerRef ;TriggerRef will always be a TrapTriggerBase
TriggerRef = activateRef as TrapTriggerBase ;Set TriggerRef to our activateRef
; ;debug.Trace("Type = " + TriggerRef.Type)
if TriggerRef
if (TriggerRef.Type == 1) ;if Type = 1 Turn Off
GoToState ( "On" )
Loop = FALSE
endif
if (TriggerRef.Type == 2) ;Type Hold
Loop = FALSE
GoToState("Reset")
endif
if (TriggerRef.Type == 3) ;if Type = 1 Turn Off
GoToState ( "On" )
Loop = FALSE
endif
if (TriggerRef.Type == 4) ;Type Hold
Loop = FALSE
GoToState("Reset")
endif
endif
endif
endEvent
endstate
State Disarmed
endState
;--------------------------------------
Function ResolveLeveledDamage () ;placeholder function, declared in children
hitBase = (self as objectReference) as TrapHitBase
hitBase.damage = 0 ;In child functions this will be defined
EndFunction