Files
gtav-src/script/dev_ng/shared/include/public/degenatron_games_monkey.sch
T
2025-09-29 00:52:08 +02:00

475 lines
20 KiB
Scheme
Executable File

USING "degenatron_games_using.sch"
USING "degenatron_games_common.sch"
USING "degenatron_games_animation.sch"
CONST_FLOAT cfDG_MONKEY_GROUND_BASE_HEIGHT 100.0
CONST_FLOAT cfDG_MONKEY_SKY_HEIGHT 180.0
CONST_FLOAT cfDG_MONKEY_TREE_HEIGHT 78.86968085
CONST_FLOAT cfDG_MONKEY_TREE_WIDHT 100.0
CONST_INT ciDG_MONKEY_TREE_AMOUNT 5
CONST_FLOAT cfDG_MONKEY_PLAYER_HEIGHT 94.64361702
CONST_FLOAT cfDG_MONKEY_PLAYER_WIDHT 120.0
CONST_INT ciDG_MONKEY_PLAYER_SWING_TIME 500
CONST_FLOAT cfDG_MONKEY_PLAYER_TRAVEL_SPEED 1.0
CONST_INT ciDG_MONKEY_TREE_SCORE 10
CONST_INT ciDG_MONKEY_UNDERWATER_LEVEL 20
ENUM DG_MONKEY_STATE_LEVEL
DG_MONKEY_STATE_LEVEL_INIT,
DG_MONKEY_STATE_LEVEL_UPDATE,
DG_MONKEY_STATE_LEVEL_DEAD,
DG_MONKEY_STATE_LEVEL_WAIT_TIME,
DG_MONKEY_STATE_LEVEL_END
ENDENUM
FUNC STRING DG_MONKEY_STATE_LEVEL_TO_STRING(DG_MONKEY_STATE_LEVEL eEnum)
SWITCH eEnum
CASE DG_MONKEY_STATE_LEVEL_INIT RETURN "LEVEL_INIT"
CASE DG_MONKEY_STATE_LEVEL_UPDATE RETURN "LEVEL_UPDATE"
CASE DG_MONKEY_STATE_LEVEL_DEAD RETURN "LEVEL_DEAD"
CASE DG_MONKEY_STATE_LEVEL_WAIT_TIME RETURN "LEVEL_WAIT_TIME"
CASE DG_MONKEY_STATE_LEVEL_END RETURN "LEVEL_END"
ENDSWITCH
RETURN "***INVALID***"
ENDFUNC
STRUCT DG_MONKEY_LEVEL_DATA
DG_MONKEY_STATE_LEVEL eLevelState
FLOAT fTravelRate
INT iCurrentTree
INT iDesiredTree
INT iTimeSwing
INT iTimeTree = -HIGHEST_INT
BOOL bTravelling
BOOL bFail
BOOL bWaterLevelReached
BOOL bWaterLevelPassed
ENDSTRUCT
STRUCT DG_MONKEY_DATA
BOOL bAquaApeAward = FALSE
FLOAT fTreeHeightPos[ciDG_MONKEY_TREE_AMOUNT]
DG_MONKEY_LEVEL_DATA sLevelData
ENDSTRUCT
DG_MONKEY_DATA sDGMonkeyData
//**************************************************//
//* DATA ACCESSORS - MONKEY *//
//**************************************************//
// SKY //
FUNC FLOAT DG_MONKEY_GET_SKY_HEIGHT
RETURN cfDG_MONKEY_SKY_HEIGHT
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_SKY_POSITION
VECTOR_2D screenPosition = DEGENATRON_GAMES_GET_SCREEN_CENTER()
screenPosition.y -= DEGENATRON_GAMES_GET_SCREEN_HEIGHT()/2 - DG_MONKEY_GET_SKY_HEIGHT()/2 - DEGENATRON_GAMES_GET_SCORE_HEIGHT()
RETURN screenPosition
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_SKY_SIZE
RETURN INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH*2,DG_MONKEY_GET_SKY_HEIGHT())
ENDFUNC
// TREES //
FUNC VECTOR_2D DG_MONKEY_TREE_POSITION(INT iTree, INT iOrder)
VECTOR_2D treePosition
IF NOT sDGMonkeyData.sLevelData.bTravelling AND sDGMonkeyData.sLevelData.fTravelRate > 0.0
treePosition.x = -DEGENATRON_GAMES_GET_SCREEN_WIDTH()/7 + DEGENATRON_GAMES_GET_SCREEN_WIDTH()/7*(iOrder)*2 - DEGENATRON_GAMES_GET_SCREEN_WIDTH()/7*2*(1-sDGMonkeyData.sLevelData.fTravelRate)
ELSE
treePosition.x = -DEGENATRON_GAMES_GET_SCREEN_WIDTH()/7 + DEGENATRON_GAMES_GET_SCREEN_WIDTH()/7*iOrder*2
ENDIF
treePosition.y = sDGMonkeyData.fTreeHeightPos[iTree%ciDG_MONKEY_TREE_AMOUNT]
RETURN treePosition
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_TREE_SIZE
RETURN INIT_VECTOR_2D(cfDG_MONKEY_TREE_WIDHT,cfDG_MONKEY_TREE_HEIGHT)
ENDFUNC
// GROUND //
FUNC FLOAT DG_MONKEY_GET_GROUND_HEIGHT
RETURN cfDG_MONKEY_GROUND_BASE_HEIGHT
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_GROUND_POSITION
VECTOR_2D groundPosition = DEGENATRON_GAMES_GET_SCREEN_CENTER()
IF sDGMonkeyData.sLevelData.iCurrentTree >= 18 AND sDGMonkeyData.sLevelData.iCurrentTree <= 20
VECTOR_2D treePosition = DG_MONKEY_TREE_POSITION(20,20-sDGMonkeyData.sLevelData.iCurrentTree+2)
groundPosition.x -= DEGENATRON_GAMES_GET_SCREEN_WIDTH() - treePosition.x + DEGENATRON_GAMES_GET_SCREEN_WIDTH()/4
ENDIF
groundPosition.y += DEGENATRON_GAMES_GET_SCREEN_HEIGHT()/2 - DG_MONKEY_GET_GROUND_HEIGHT()/2
RETURN groundPosition
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_GROUND_SIZE
RETURN INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH*2,DG_MONKEY_GET_GROUND_HEIGHT())
ENDFUNC
// PLAYER //
FUNC FLOAT DG_MONKEY_GET_PLAYER_TRAVEL_SPEED
RETURN cfDG_MONKEY_PLAYER_TRAVEL_SPEED/1000
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_PLAYER_SIZE
RETURN INIT_VECTOR_2D(cfDG_MONKEY_PLAYER_WIDHT,cfDG_MONKEY_PLAYER_HEIGHT)
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_PLAYER_POSITION_ON_TREE(INT iTree, INT iOrder)
VECTOR_2D currentTreePosition = DG_MONKEY_TREE_POSITION(iTree,iOrder)
VECTOR_2D treeSize = DG_MONKEY_TREE_SIZE()
VECTOR_2D playerSize = DG_MONKEY_PLAYER_SIZE()
VECTOR_2D playerPosition
playerPosition.x = currentTreePosition.x
playerPosition.y = currentTreePosition.y + treeSize.y/2 + playerSize.y/2
RETURN playerPosition
ENDFUNC
FUNC VECTOR_2D DG_MONKEY_PLAYER_POSITION()
VECTOR_2D currentTreePosition = DG_MONKEY_PLAYER_POSITION_ON_TREE(sDGMonkeyData.sLevelData.iCurrentTree,2)
VECTOR_2D desiredTreePosition = DG_MONKEY_PLAYER_POSITION_ON_TREE(sDGMonkeyData.sLevelData.iDesiredTree,3)
VECTOR_2D groundSize = DG_MONKEY_GROUND_SIZE()
VECTOR_2D groundPosition = DG_MONKEY_GROUND_POSITION()
VECTOR_2D treeSize = DG_MONKEY_TREE_SIZE()
VECTOR_2D playerSize = DG_MONKEY_PLAYER_SIZE()
VECTOR_2D playerPos
IF sDGMonkeyData.sLevelData.bFail OR sDGMonkeyData.sLevelData.iCurrentTree = 20
desiredTreePosition.y = groundPosition.y - groundSize.y/2 - playerSize.y/2
ENDIF
IF NOT sDGMonkeyData.sLevelData.bTravelling AND sDGMonkeyData.sLevelData.fTravelRate > 0.0
playerPos = desiredTreePosition
ELSE
playerPos.x = currentTreePosition.x + (desiredTreePosition.x - currentTreePosition.x) * sDGMonkeyData.sLevelData.fTravelRate
playerPos.y = currentTreePosition.y + (desiredTreePosition.y - currentTreePosition.y) * sDGMonkeyData.sLevelData.fTravelRate
IF NOT sDGMonkeyData.sLevelData.bTravelling
playerPos.x += TO_FLOAT((sDGMonkeyData.sLevelData.iTimeSwing/(ciDG_MONKEY_PLAYER_SWING_TIME/2)*2)-1)*treeSize.x/2.0
ENDIF
ENDIF
RETURN playerPos
ENDFUNC
//**************************************************//
//* INIT - MONKEY *//
//**************************************************//
PROC DG_MONKEY_INIT_TREES
sDGMonkeyData.fTreeHeightPos[0] = 570.0
sDGMonkeyData.fTreeHeightPos[1] = 420.0
sDGMonkeyData.fTreeHeightPos[2] = 380.0
sDGMonkeyData.fTreeHeightPos[3] = 450.0
sDGMonkeyData.fTreeHeightPos[4] = 400.0
ENDPROC
PROC DG_MONKEY_LEVEL_INIT
sDGMonkeyData.sLevelData.iCurrentTree = 0
sDGMonkeyData.sLevelData.iTimeSwing = 0
sDGMonkeyData.sLevelData.iDesiredTree = 0
sDGMonkeyData.sLevelData.fTravelRate = 0.0
sDGMonkeyData.sLevelData.bTravelling = FALSE
sDegenatronGamesData.sGameData.iFlashTime = 0
sDegenatronGamesData.sGameData.iWaitTime = 0
sDegenatronGamesData.sGameData.bFlashedOnce = FALSE
sDegenatronGamesData.sGameData.bFlashedTwice = FALSE
sDegenatronGamesData.sGameData.bPlayerIsDead = FALSE
DG_MONKEY_INIT_TREES()
ENDPROC
//**************************************************//
//* UPDATE - MONKEY *//
//**************************************************//
PROC DG_MONKEY_UPDATE
IF NOT sDGMonkeyData.sLevelData.bTravelling
IF sDGMonkeyData.sLevelData.fTravelRate = 0.0
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN)
OR (IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RLEFT))
ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_DEGENATRON_JUMP)
sDGMonkeyData.sLevelData.iDesiredTree = sDGMonkeyData.sLevelData.iCurrentTree + 1
sDGMonkeyData.sLevelData.bTravelling = TRUE
sDGMonkeyData.sLevelData.bFail = sDGMonkeyData.sLevelData.iTimeSwing < ciDG_MONKEY_PLAYER_SWING_TIME/2.0
IF sDGMonkeyData.sLevelData.iCurrentTree = 20
OR sDGMonkeyData.sLevelData.iCurrentTree = 40
sDGMonkeyData.sLevelData.bFail = FALSE
ENDIF
sDegenatronGamesData.bShouldDoMidShake = NOT sDGMonkeyData.sLevelData.bFail AND sDegenatronGamesData.iMachineBashed = 0
ELSE
// IF sDGMonkeyData.sLevelData.iTimeSwing < ciDG_MONKEY_PLAYER_SWING_TIME/2.0
ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_DEGENATRON_SWING)
// ELSE
// ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_SOUND_DEGENATRON_SWING_B)
// ENDIF
sDGMonkeyData.sLevelData.iTimeSwing = (sDGMonkeyData.sLevelData.iTimeSwing + DEGENATRON_GAMES_FRAME_TIME())%ciDG_MONKEY_PLAYER_SWING_TIME
ENDIF
ELSE
sDGMonkeyData.sLevelData.fTravelRate = CLAMP(sDGMonkeyData.sLevelData.fTravelRate - cfDG_MONKEY_PLAYER_TRAVEL_SPEED*DEGENATRON_GAMES_FRAME_TIME()/1000.0,0.0,1.0)
IF sDGMonkeyData.sLevelData.fTravelRate = 0.0
sDGMonkeyData.sLevelData.iCurrentTree = sDGMonkeyData.sLevelData.iDesiredTree
sDGMonkeyData.sLevelData.iTimeSwing = 0
IF sDGMonkeyData.sLevelData.iCurrentTree = 41
sDGMonkeyData.bAquaApeAward = TRUE
ENDIF
ENDIF
ENDIF
ELSE
sDGMonkeyData.sLevelData.fTravelRate = CLAMP(sDGMonkeyData.sLevelData.fTravelRate + cfDG_MONKEY_PLAYER_TRAVEL_SPEED*DEGENATRON_GAMES_FRAME_TIME()/1000.0,0.0,1.0)
IF sDGMonkeyData.sLevelData.fTravelRate = 1.0
sDGMonkeyData.sLevelData.bTravelling = FALSE
IF sDGMonkeyData.sLevelData.bFail
ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_DEGENATRON_EXPLODE)
sDegenatronGamesData.bShouldDoHeavyShake = sDGMonkeyData.sLevelData.bFail AND sDegenatronGamesData.iMachineBashed = 0
sDegenatronGamesData.sGameData.bPlayerIsDead = TRUE
sDegenatronGamesData.sGameData.iFlashTime = 0
sDegenatronGamesData.sGameData.bFlashedOnce = FALSE
sDegenatronGamesData.sGameData.bFlashedTwice = FALSE
ELSE
sDegenatronGamesData.sGameData.iScore += ciDG_MONKEY_TREE_SCORE
sDegenatronGamesData.sTelemetry.kills++
ENDIF
ENDIF
ENDIF
sDGMonkeyData.sLevelData.bWaterLevelReached = sDGMonkeyData.sLevelData.iCurrentTree > 20
sDGMonkeyData.sLevelData.bWaterLevelPassed = sDGMonkeyData.sLevelData.iCurrentTree > 40
sDegenatronGamesData.bShouldDoSoftShake = NOT sDGMonkeyData.sLevelData.bTravelling AND sDGMonkeyData.sLevelData.fTravelRate = 0.0 AND sDGMonkeyData.sLevelData.iTimeSwing > ciDG_MONKEY_PLAYER_SWING_TIME/2.0 AND sDegenatronGamesData.iMachineBashed = 0
ENDPROC
PROC DG_MONKEY_UPDATE_LEVEL_STATE()
SWITCH sDGMonkeyData.sLevelData.eLevelState
CASE DG_MONKEY_STATE_LEVEL_INIT
sDGMonkeyData.sLevelData.eLevelState = DG_MONKEY_STATE_LEVEL_UPDATE
BREAK
CASE DG_MONKEY_STATE_LEVEL_UPDATE
IF sDegenatronGamesData.sGameData.bPlayerIsDead
sDGMonkeyData.sLevelData.eLevelState = DG_MONKEY_STATE_LEVEL_DEAD
ENDIF
BREAK
CASE DG_MONKEY_STATE_LEVEL_DEAD
sDGMonkeyData.sLevelData.eLevelState = DG_MONKEY_STATE_LEVEL_WAIT_TIME
BREAK
CASE DG_MONKEY_STATE_LEVEL_WAIT_TIME
INT waitTime
IF sDegenatronGamesData.sGameData.iLifes = 0
waitTime = ciDEGENATRON_GAMES_WAIT_TIME_GAME_OVER
ELSE
waitTime = ciDEGENATRON_GAMES_WAIT_TIME_DEAD
ENDIF
IF sDegenatronGamesData.sGameData.iWaitTime > waitTime
IF sDegenatronGamesData.sGameData.bPlayerIsDead
IF sDegenatronGamesData.sGameData.bFlashedOnce AND sDegenatronGamesData.sGameData.bFlashedTwice AND sDegenatronGamesData.sGameData.iFlashTime > ciDEGENATRON_GAMES_PLAYER_FLASH_TIME
IF sDegenatronGamesData.sGameData.iLifes = 0
sDGMonkeyData.sLevelData.eLevelState = DG_MONKEY_STATE_LEVEL_END
ELSE
sDGMonkeyData.sLevelData.eLevelState = DG_MONKEY_STATE_LEVEL_INIT
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE DG_MONKEY_STATE_LEVEL_END
sDGMonkeyData.sLevelData.eLevelState = DG_MONKEY_STATE_LEVEL_INIT
BREAK
ENDSWITCH
ENDPROC
//**************************************************//
//* DEBUG INFO - MONKEY *//
//**************************************************//
#IF IS_DEBUG_BUILD
PROC __DG_MONKEY_PRINT_DEBUG_LEVEL_INFO
INT iLine = 0
DEBUG_TEXT_INT_IN_SCREEN("iCurrentTree ",sDGMonkeyData.sLevelData.iCurrentTree,0.16,0.05+0.01*iLine)
iLine++
DEBUG_TEXT_INT_IN_SCREEN("iDesiredTree ",sDGMonkeyData.sLevelData.iDesiredTree,0.16,0.05+0.01*iLine)
iLine++
DEBUG_TEXT_INT_IN_SCREEN("bTravelling ",BOOL_TO_INT(sDGMonkeyData.sLevelData.bTravelling),0.16,0.05+0.01*iLine)
iLine++
DEBUG_TEXT_FLOAT_IN_SCREEN("fTravelRate ",sDGMonkeyData.sLevelData.fTravelRate,0.16,0.05+0.01*iLine)
iLine++
DEBUG_TEXT_INT_IN_SCREEN("iTimeSwing ",sDGMonkeyData.sLevelData.iTimeSwing,0.16,0.05+0.01*iLine)
iLine++
DEBUG_TEXT_INT_IN_SCREEN("bFail ",BOOL_TO_INT(sDGMonkeyData.sLevelData.bFail),0.16,0.05+0.01*iLine)
iLine++
DEBUG_TEXT_STRING_IN_SCREEN("eLevelState ",DG_MONKEY_STATE_LEVEL_TO_STRING(sDGMonkeyData.sLevelData.eLevelState),0.16,0.05+0.01*iLine)
iLine++
ENDPROC
#ENDIF
PROC DG_MONKEY_CLIENT_STATE_UPDATE()
SWITCH sDGMonkeyData.sLevelData.eLevelState
CASE DG_MONKEY_STATE_LEVEL_INIT
DG_MONKEY_LEVEL_INIT()
DEGENATRON_GAMES_ANIMATION_SET_STATE(DEGENATRON_GAMES_ANIMATION_STATE_PLAYING)
BREAK
CASE DG_MONKEY_STATE_LEVEL_UPDATE
DG_MONKEY_UPDATE()
IF sDGMonkeyData.sLevelData.iCurrentTree >= 21 AND sDGMonkeyData.sLevelData.iCurrentTree <= 40
ARCADE_GAMES_SOUND_STOP(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_MAIN_LOOP)
ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_MAIN_LOOP_UW)
ELSE
IF ARCADE_GAMES_SOUND_HAS_FINISHED(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_MAIN_LOOP)
ARCADE_GAMES_SOUND_STOP(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_MAIN_LOOP_UW)
ARCADE_GAMES_SOUND_PLAY_LOOP(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_MAIN_LOOP)
ENDIF
ENDIF
DEGENATRON_GAMES_ANIMATION_SET_STATE(DEGENATRON_GAMES_ANIMATION_STATE_PLAYING)
IF sDGMonkeyData.bAquaApeAward
DEGENATRON_GAMES_SET_CHALLENGE_COMPLETED(DEGENATRON_GAMES_CHALLENGE_BIT_AQUAAPE)
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_DEGENATRON_AQUATIC_APE)
sDGMonkeyData.bAquaApeAward = FALSE
ENDIF
BREAK
CASE DG_MONKEY_STATE_LEVEL_DEAD
sDegenatronGamesData.sGameData.iLifes--
IF sDegenatronGamesData.sGameData.iLifes > 0
DEGENATRON_GAMES_ANIMATION_SET_STATE(DEGENATRON_GAMES_ANIMATION_STATE_DEAD)
ELSE
ARCADE_GAMES_SOUND_STOP(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_MAIN_LOOP)
ARCADE_GAMES_SOUND_STOP(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_MAIN_LOOP_UW)
ARCADE_GAMES_SOUND_PLAY(ARCADE_GAMES_SOUND_DEGENATRON_MUSIC_FAIL)
DEGENATRON_GAMES_ANIMATION_SET_STATE(DEGENATRON_GAMES_ANIMATION_STATE_GAMEOVER)
ENDIF
BREAK
CASE DG_MONKEY_STATE_LEVEL_WAIT_TIME
sDegenatronGamesData.sGameData.iWaitTime += DEGENATRON_GAMES_FRAME_TIME()
BREAK
CASE DG_MONKEY_STATE_LEVEL_END
DEGENATRON_GAMES_ANIMATION_SET_STATE(DEGENATRON_GAMES_ANIMATION_STATE_PLAYING)
BREAK
ENDSWITCH
IF sDegenatronGamesData.sTelemetry.level < sDGMonkeyData.sLevelData.iCurrentTree
sDegenatronGamesData.sTelemetry.level = sDGMonkeyData.sLevelData.iCurrentTree
ENDIF
sDegenatronGamesData.sTelemetry.score = sDegenatronGamesData.sGameData.iScore
IF sDegenatronGamesData.sGameData.iScore >= g_sMPTunables.iCH_ARCADE_GAMES_DG_MONKEY_GLITCH_SCORE AND sDegenatronGamesData.iMachineBashed != 0
ARCADE_CABINET_FLOW_NOTIFICATIONS_SET_SHOW_TSHIRT_HELP(ARCADE_GAME_TSHIRTS_DEGENATRON_PSYCHONAUT)
SET_PACKED_STAT_BOOL(PACKED_MP_BOOL_AWARD_GLITCHED_DEGENATRON_TSHIRT, TRUE)
ENDIF
DG_MONKEY_UPDATE_LEVEL_STATE()
#IF IS_DEBUG_BUILD
IF sDegenatronGamesData.bShowHelp
__DG_MONKEY_PRINT_DEBUG_LEVEL_INFO()
ENDIF
#ENDIF
ENDPROC
//**************************************************//
//* DRAW - MONKEY *//
//**************************************************//
PROC DG_MONKEY_DRAW_BACKGROUND()
IF NOT sDGMonkeyData.sLevelData.bWaterLevelReached OR sDGMonkeyData.sLevelData.bWaterLevelReached AND sDGMonkeyData.sLevelData.bWaterLevelPassed
DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT(DEGENATRON_GAMES_GET_SCREEN_CENTER(), DEGENATRON_GAMES_GET_SCREEN_SIZE(), sDegenatronGamesData.rgbaBlack)
ENDIF
IF sDGMonkeyData.sLevelData.bWaterLevelReached AND NOT sDGMonkeyData.sLevelData.bWaterLevelPassed
DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT(DEGENATRON_GAMES_GET_SCREEN_CENTER(), DEGENATRON_GAMES_GET_SCREEN_SIZE(), sDegenatronGamesData.rgbaBlue)
ENDIF
ENDPROC
PROC DG_MONKEY_DRAW_SKY()
IF NOT sDGMonkeyData.sLevelData.bWaterLevelReached OR sDGMonkeyData.sLevelData.bWaterLevelReached AND sDGMonkeyData.sLevelData.bWaterLevelPassed
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,DG_MONKEY_SKY_POSITION(), DG_MONKEY_SKY_SIZE(),0.0, sDegenatronGamesData.rgbaBlue)
ENDIF
IF sDGMonkeyData.sLevelData.bWaterLevelReached AND NOT sDGMonkeyData.sLevelData.bWaterLevelPassed
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,DG_MONKEY_SKY_POSITION(), DG_MONKEY_SKY_SIZE(),0.0, sDegenatronGamesData.rgbaBlack)
ENDIF
ENDPROC
PROC DG_MONKEY_DRAW_GROUND()
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,DG_MONKEY_GROUND_POSITION(), DG_MONKEY_GROUND_SIZE(),0.0, sDegenatronGamesData.rgbaBrown)
// DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT(DG_MONKEY_GROUND_POSITION(), DG_MONKEY_GROUND_SIZE(), sDegenatronGamesData.rgbaBrown)
IF sDegenatronGamesData.sGameData.bPlayerIsDead
sDegenatronGamesData.sGameData.iFlashTime += DEGENATRON_GAMES_FRAME_TIME()
IF NOT sDegenatronGamesData.sGameData.bFlashedOnce
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,DG_MONKEY_GROUND_POSITION(), DG_MONKEY_GROUND_SIZE(),0.0, sDegenatronGamesData.rgbaRed)
// DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT(DG_MONKEY_GROUND_POSITION(), DG_MONKEY_GROUND_SIZE(), sDegenatronGamesData.rgbaRed)
sDegenatronGamesData.sGameData.bFlashedOnce = TRUE
ELIF NOT sDegenatronGamesData.sGameData.bFlashedTwice AND sDegenatronGamesData.sGameData.iFlashTime > ciDEGENATRON_GAMES_PLAYER_FLASH_TIME/2
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,DG_MONKEY_GROUND_POSITION(), DG_MONKEY_GROUND_SIZE(),0.0, sDegenatronGamesData.rgbaWhite)
// DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT(DG_MONKEY_GROUND_POSITION(), DG_MONKEY_GROUND_SIZE(), sDegenatronGamesData.rgbaWhite)
sDegenatronGamesData.sGameData.bFlashedTwice = TRUE
ENDIF
ENDIF
ENDPROC
PROC DG_MONKEY_DRAW_PLAYER()
IF sDegenatronGamesData.sGameData.bPlayerIsDead
EXIT
ENDIF
IF NOT sDGMonkeyData.sLevelData.bWaterLevelReached OR sDGMonkeyData.sLevelData.bWaterLevelReached AND sDGMonkeyData.sLevelData.bWaterLevelPassed
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,DG_MONKEY_PLAYER_POSITION(), DG_MONKEY_PLAYER_SIZE(),0.0, sDegenatronGamesData.rgbaRed)
ENDIF
IF sDGMonkeyData.sLevelData.bWaterLevelReached AND NOT sDGMonkeyData.sLevelData.bWaterLevelPassed
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,DG_MONKEY_PLAYER_POSITION(), DG_MONKEY_PLAYER_SIZE(),0.0, sDegenatronGamesData.rgbaMagenta)
ENDIF
ENDPROC
PROC DG_MONKEY_DRAW_TREES()
INT iTree = 0
REPEAT ciDG_MONKEY_TREE_AMOUNT iTree
INT iCurrentTree = iTree + sDGMonkeyData.sLevelData.iCurrentTree - 2
IF NOT sDGMonkeyData.sLevelData.bWaterLevelReached
IF iCurrentTree >= 0 AND iCurrentTree <= 20
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_02_SOLID,DG_MONKEY_TREE_POSITION(iCurrentTree, iTree), DG_MONKEY_TREE_SIZE(),0.0, sDegenatronGamesData.rgbaGreen)
ENDIF
ENDIF
IF sDGMonkeyData.sLevelData.bWaterLevelReached AND NOT sDGMonkeyData.sLevelData.bWaterLevelPassed
IF iCurrentTree >= 21 AND iCurrentTree <= 40
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_02_SOLID,DG_MONKEY_TREE_POSITION(iCurrentTree, iTree), DG_MONKEY_TREE_SIZE(),0.0, sDegenatronGamesData.rgbaCyan)
ENDIF
ENDIF
IF sDGMonkeyData.sLevelData.bWaterLevelReached AND sDGMonkeyData.sLevelData.bWaterLevelPassed
IF iCurrentTree >= 41
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM_SQUARE_02_SOLID,DG_MONKEY_TREE_POSITION(iCurrentTree, iTree), DG_MONKEY_TREE_SIZE(),0.0, sDegenatronGamesData.rgbaGreen)
ENDIF
ENDIF
ENDREPEAT
ENDPROC
PROC DG_MONKEY_CLIENT_STATE_DRAW
DG_MONKEY_DRAW_BACKGROUND()
DEGENATRON_GAMES_DRAW_SCORE_BAR(FALSE,FALSE)
SWITCH sDGMonkeyData.sLevelData.eLevelState
CASE DG_MONKEY_STATE_LEVEL_INIT
BREAK
CASE DG_MONKEY_STATE_LEVEL_UPDATE
CASE DG_MONKEY_STATE_LEVEL_DEAD
CASE DG_MONKEY_STATE_LEVEL_WAIT_TIME
DG_MONKEY_DRAW_SKY()
DG_MONKEY_DRAW_GROUND()
DG_MONKEY_DRAW_TREES()
DG_MONKEY_DRAW_PLAYER()
DEGENATRON_GAMES_DRAW_FAIL_SUCCESS_TEXT()
BREAK
CASE DG_MONKEY_STATE_LEVEL_END
BREAK
ENDSWITCH
ENDPROC
#IF IS_DEBUG_BUILD
PROC DG_MONKEY_DEBUG_CREATE_WIDGETS
START_WIDGET_GROUP("Monkey's Paradise")
ADD_WIDGET_INT_SLIDER("TREE",sDGMonkeyData.sLevelData.iCurrentTree,0,100,1)
STOP_WIDGET_GROUP()
ENDPROC
PROC DG_MONKEY_DEBUG_UPDATE_WIDGETS
ENDPROC
#ENDIF