142 lines
6.8 KiB
Scheme
Executable File
142 lines
6.8 KiB
Scheme
Executable File
USING "net_arcade_cabinet.sch"
|
|
|
|
// ------------------------------ ANIMATION ------------------------------
|
|
|
|
ENUM DEGENATRON_GAMES_ANIMATION_STATE
|
|
DEGENATRON_GAMES_ANIMATION_STATE_IDLE,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_PLAYING,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_NOT_PLAYING,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_DEAD,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_GAMEOVER,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_LEVEL_COMPLETE,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_WIN,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_WIN_BIG,
|
|
DEGENATRON_GAMES_ANIMATION_STATE_END
|
|
ENDENUM
|
|
|
|
STRUCT DEGENATRON_GAMES_ANIMATION_DATA
|
|
DEGENATRON_GAMES_ANIMATION_STATE eState
|
|
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
|
|
ENDSTRUCT
|
|
|
|
DEGENATRON_GAMES_ANIMATION_DATA sDGAnimationData
|
|
|
|
/// PURPOSE:
|
|
/// Updates the player's global state
|
|
PROC DEGENATRON_GAMES_ANIMATION_SET_STATE(DEGENATRON_GAMES_ANIMATION_STATE eState)
|
|
IF sDGAnimationData.eState != eState
|
|
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_ANIMATION_SET_STATE - eState ",eState)
|
|
sDGAnimationData.eState = eState
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.enToPlayAnim = PLAYER_ID()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC DEGENATRON_GAMES_ANIMATION_UPDATE
|
|
INT iDisplaySlot
|
|
SWITCH sDGAnimationData.eState
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_IDLE
|
|
iDisplaySlot = GET_ARCADE_CABINET_LOCATE_DISPLAY_SLOT_PLAYER_IS_IN(PLAYER_ID())
|
|
IF iDisplaySlot != -1
|
|
IF !DOES_ARCADE_CABINET_SYNCHED_SCENE_RUNNING()
|
|
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_IDLE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = TRUE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_IDLE)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
|
|
iDisplaySlot = GET_ARCADE_CABINET_LOCATE_DISPLAY_SLOT_PLAYER_IS_IN(PLAYER_ID())
|
|
IF iDisplaySlot != -1
|
|
IF !DOES_ARCADE_CABINET_SYNCHED_SCENE_RUNNING()
|
|
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE
|
|
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = TRUE
|
|
IF GET_RANDOM_BOOL()
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE)
|
|
ELSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_NOT_PLAYING
|
|
IF HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_ENTRY)
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_EXIT)
|
|
ENDIF
|
|
BREAK
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_GAMEOVER
|
|
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_LOSE_BIG
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_LOSE_BIG)
|
|
ELSE
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_LOSE_BIG)
|
|
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_LOSE_BIG)
|
|
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_IDLE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_DEAD
|
|
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_LOSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_LOSE)
|
|
ELSE
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_LOSE)
|
|
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_LOSE)
|
|
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_LEVEL_COMPLETE
|
|
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN
|
|
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN_BIG
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
IF GET_RANDOM_BOOL()
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
ELSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
|
|
ENDIF
|
|
ELSE
|
|
IF (IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN))
|
|
OR (IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
|
|
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN_BIG))
|
|
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_WIN
|
|
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
ELSE
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN)
|
|
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE DEGENATRON_GAMES_ANIMATION_STATE_WIN_BIG
|
|
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN_BIG
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
|
|
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
|
|
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
|
|
ELSE
|
|
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
|
|
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
|
|
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|