enderalse/source/scripts/trapnorplatform.psc

328 lines
7.9 KiB
Plaintext

scriptName TrapNorPlatform extends MovingTrap
;
;
;==========================================
;===================================================================
;;GENERAL PROPERTIES BLOCK
;===================================================================
float property FireSpeed = 1.0 Auto
{Time (in seconds) to move from the starting position to the ending position}
float property ReturnSpeed = 5.0 Auto
{Time (in seconds) to return from the ending position to the starting position}
float property ReturnDelay = 2.5 Auto
{Time (in seconds) to delay before resetting}
string midAnim = "Mid"
string up01Anim = "128Up"
string up02Anim = "256Up"
string up03Anim = "384Up"
string up04Anim = "512Up"
string up05Anim = "640Up"
string up06Anim = "768Up"
string down01Anim = "128Dn"
string down02Anim = "256Dn"
string down03Anim = "384Dn"
string down04Anim = "512Dn"
string down05Anim = "640Dn"
string down06Anim = "768Dn"
;;;;;;;;;;;;;;
bool restartLooping = false
bool finishedPlaying = false
bool hasPlayedAttackAnimOnce = FALSE
float property initialDelay = 0.25 auto
string property fireAnim auto hidden
{firing animation, should not need to change}
string property fireSpeedString auto hidden
{firing speed string, name set in script}
string property fireEvent = "Done" auto hidden
{firing animation event, should not need to change}
string property resetAnim auto hidden
{reset animation, should not need to change}
string property resetSpeedString auto hidden
{reset speed string, name set in script}
string property resetEvent = "Done" auto hidden
{reset animation event, should not need to change}
string property startSwungAnim auto hidden
{anim event to start already swung}
bool property startSwung = false auto
{set to true to start swung}
hazardBase property myHazardBase auto hidden
;;;OLD SCRIPT
int property StartingHeight = 0 auto
{The starting height of the platform, -6 to 6
heights are in increments of 128
defaults == 0}
;/ {The starting height of the platform, -6 to 6, defaults to 0}
int Function Get()
return StartingHeight
endFunction
Function Set (int value)
if (value >= 6 && value <= 6)
StartingHeight = Value
else
StartingHeight = 0
endif
endFunction
endProperty/;
int property EndingHeight = 3 auto
{The ending height of the platform, -6 to 6
heights are in increments of 128
defaults == 3}
;/ int Function Get()
return EndingHeight
endFunction
Function Set (int value)
if (value >= 6 && value <= 6)
EndingHeight = Value
else
EndingHeight = 3
endif
endFunction
endProperty/;
;===================================================================
;;EVENT BLOCK
;===================================================================
EVENT OnLoad()
;/if (startSwung == true )
;trace(self + "OnLoad: playanimation(" + startSwungAnim + ")")
playAnimation(startSwungAnim) ;activator starts opened
endif/;
; debug.Trace(self + " has called onLoad")
SetResetAnim()
SetFireAnim()
myHazardBase = (self as objectReference) as hazardBase
isLoaded = TRUE
if isFiring == True || startSwung == True
startSwung = False
if startSwung
loop == True
endif
fireTrap()
endif
endEVENT
;===================================================================
;;FIRE TRAP BLOCK
;===================================================================
Function fireTrap()
;Basic wind up and fire once checking
; debug.TRACE(self + " has called fireTrap")
; debug.TRACE(self + ": lastActivateRef = " + lastActivateRef)
isFiring = True
myHazardBase.goToState("CanHit")
WindupSound.play( self as ObjectReference) ;play windup sound
ResolveLeveledDamage()
SetResetAnim()
SetFireAnim()
utility.wait( initialDelay ) ;wait for windup
hasPlayedAttackAnimOnce = FALSE
;TRACE("Initial Delay complete")
if (fireOnlyOnce == True) ;If this can be fired only once then disarm
trapDisarmed = True
endif
;TRACE("Looping =")
;TRACE(Loop)
;Trap Guts
while(finishedPlaying == False && isLoaded == true)
;trace(self + "Firing trap: playanimation(" + fireAnim + ")")
;trace(self + "Firing trap: waiting for event(" + fireEvent + ")")
if (hasPlayedAttackAnimOnce == FALSE)
fireSpeedString = FireAnim
fireSpeedString + "s"
SetAnimationVariableFloat(fireSpeedString, FireSpeed)
PlayAnimationAndWait(fireAnim, fireEvent)
; ;debug.Trace(self + "has finished anim once")
hasPlayedAttackAnimOnce = TRUE
Else
utility.wait(0.5)
endif
finishedPlaying = True
if (loop == TRUE) ;Reset Limiter
; ;debug.Trace(self + "is looping because loop = " + loop)
resetLimiter()
endif
endWhile
myHazardBase.goToState("CannotHit")
resetSpeedString = resetAnim
resetSpeedString + "s"
SetAnimationVariableFloat(resetSpeedString, ReturnSpeed)
utility.wait(ReturnDelay)
if isLoaded
isFiring = false
PlayAnimationAndWait(resetAnim, resetEvent)
goToState("Reset")
endif
;trace(self + "Reset trap: playanimation(" + resetAnim + ")")
;trace(self + "Reset trap: waiting for event(" + resetEvent + ")")
endFunction
State Reset
Event OnBeginState()
GoToState ( "Idle" )
myHazardBase = (self as objectReference) as hazardBase
if myHazardBase
myHazardBase.goToState("CannotHit")
endif
endEvent
Event OnActivate( objectReference activateRef )
lastActivateRef = activateRef
EndEvent
endState
;===================================================================
;;FUNCTION BLOCK
;===================================================================
Function ResetLimiter()
finishedPlaying = False
;hazardBase myHazardBase = (self as objectReference) as hazardBase
;myHazardBase.goToState("CanHit")
EndFunction
Function SetResetAnim()
if startingHeight == -6
ResetAnim = down06Anim
ElseIf startingHeight == -5
ResetAnim = down05Anim
ElseIf startingHeight == -4
ResetAnim = down04Anim
ElseIf startingHeight == -3
ResetAnim = down03Anim
ElseIf startingHeight == -2
ResetAnim = down02Anim
ElseIf startingHeight == -1
ResetAnim = down01Anim
ElseIf startingHeight == 0
ResetAnim = midAnim
ElseIf startingHeight == 1
ResetAnim = up01Anim
ElseIf startingHeight == 2
ResetAnim = up02Anim
ElseIf startingHeight == 3
ResetAnim = up03Anim
ElseIf startingHeight == 4
ResetAnim = up04Anim
ElseIf startingHeight == 5
ResetAnim = up05Anim
ElseIf startingHeight == 6
ResetAnim = up06Anim
Endif
EndFunction
Function SetFireAnim()
if EndingHeight == -6
FireAnim = down06Anim
ElseIf EndingHeight == -5
FireAnim = down05Anim
ElseIf EndingHeight == -4
FireAnim = down04Anim
ElseIf EndingHeight == -3
FireAnim = down03Anim
ElseIf EndingHeight == -2
FireAnim = down02Anim
ElseIf EndingHeight == -1
FireAnim = down01Anim
ElseIf EndingHeight == 0
FireAnim = midAnim
ElseIf EndingHeight == 1
FireAnim = up01Anim
ElseIf EndingHeight == 2
FireAnim = up02Anim
ElseIf EndingHeight == 3
FireAnim = up03Anim
ElseIf EndingHeight == 4
FireAnim = up04Anim
ElseIf EndingHeight == 5
FireAnim = up05Anim
ElseIf EndingHeight == 6
FireAnim = up06Anim
Endif
startSwungAnim = FireAnim
EndFunction
Function ResolveLeveledDamage()
int damageLevel
int damage
damageLevel = CalculateEncounterLevel(TrapLevel)
damage = LvlDamage1
if (damageLevel > LvlThreshold1 && damageLevel <= LvlThreshold2)
damage = LvlDamage2
;Trace("damage threshold =")
;Trace("2")
endif
if (damageLevel > LvlThreshold2 && damageLevel <= LvlThreshold3)
damage = LvlDamage3
;Trace("damage threshold =")
;Trace("3")
endif
if (damageLevel > LvlThreshold3 && damageLevel <= LvlThreshold4)
damage = LvlDamage4
;Trace("damage threshold =")
;Trace("4")
endif
if (damageLevel > LvlThreshold4 && damageLevel <= LvlThreshold5)
damage = LvlDamage5
;Trace("damage threshold =")
;Trace("5")
endif
if (damageLevel > LvlThreshold5)
damage = LvlDamage6
;Trace("damage threshold =")
;Trace("6")
endif
;Trace("damage =")
;Trace(damage)
;return damage
myHazardBase = (self as objectReference) as hazardBase
if myHazardBase
myHazardBase.damage = damage
endif
EndFunction