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