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