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

1028 lines
50 KiB
Scheme
Executable File

USING "arcade_cabinet_minigame_common.sch"
USING "degenatron_games_movie.sch"
USING "arcade_games_sound.sch"
USING "arcade_games_help_text_flow.sch"
//USING "penthouse_arcade_cabinet_common.sch"
CONST_FLOAT cfDEGENATRON_GAMES_DEFAULT_ANIM_FRAME_TIME 33.0 //30 FPS
CONST_FLOAT cfDEGENATRON_GAMES_SLOW_ANIM_FRAME_TIME 66.0 //15 FPS
CONST_INT ciDEGENATRON_GAMES_MAX_ANIM_FRAMES 4
CONST_FLOAT cfDEGENATRON_GAMES_SCREEN_HEIGHT 940.0
CONST_FLOAT cfDEGENATRON_GAMES_SCREEN_WIDTH 1318.0
CONST_FLOAT cfDEGENATRON_GAMES_SCALE_RATIO 0.687
CONST_INT ciDEGENATRON_GAMES_PLAYER_FLASH_TIME 300
CONST_INT ciDEGENATRON_GAMES_WAIT_TIME_DEAD 3000
CONST_INT ciDEGENATRON_GAMES_WAIT_TIME_GAME_OVER 5000
CONST_INT ciDEGENATRON_GAMES_SCORE_HEIGHT 100
CONST_INT ciDEGENATRON_GAMES_MAX_SCORE_CHAR 9
CONST_INT ciDEGENATRON_GAMES_LEFT_AXIS_TICK_TIME 300
CONST_FLOAT cfDEGENATRON_GAMES_LBD_TEXT_SCALE 1.0
CONST_FLOAT cfDEGENATRON_GAMES_LBD_SPACING_Y 0.06
CONST_FLOAT cfDEGENATRON_GAMES_LBD_STARTING_POS_Y 0.220
CONST_FLOAT cfDEGENATRON_GAMES_LBD_POSITION_POS_X 0.370
CONST_FLOAT cfDEGENATRON_GAMES_LBD_INITIAL_3_POS_X 0.46875
CONST_FLOAT cfDEGENATRON_GAMES_LBD_INITIAL_2_POS_X 0.441145833
CONST_FLOAT cfDEGENATRON_GAMES_LBD_INITIAL_1_POS_X 0.413541666
CONST_FLOAT cfDEGENATRON_GAMES_LBD_SCORE_POS_X 0.695
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INT_HEIGHT 59.74468085
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INT_WIDTH 69.92412747
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_HEIGHT 59.74468085
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_HIGH_SCORE_WIDTH 629.3171472
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_HIGH_SCORES_WIDTH 693.414264
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_LEVEL_FAILED_WIDTH 745.8573596
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_MONKEYS_LINE_SWING 973.1107739
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_PENETRATED 710.8952959
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_LEVEL_PASSED_WIDTH 757.5113809
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_MISSION_FAILED_WIDTH 897.3596358
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_MISSION_PASSED_WIDTH 909.0136571
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_PLAY_WIDTH 268.0424886
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_SCORE_WIDTH 337.9666161
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_GAME_OVER_WIDTH 582.7010622
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_DEFENDER_OF_THE_FAITH_WIDTH 1305.250379
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_MONKEYS_PARADISE_WIDTH 1095.477997
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_PENETRATOR_WIDTH 675.9332322
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_DEGENATRON_WIDTH 693.414264
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_01_WIDTH 804.1274659
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_02_WIDTH 1177.056146
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_03_WIDTH 1206.191199
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_04_WIDTH 1112.959029
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_01_WIDTH 1136.267071
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_02_WIDTH 1346.039454
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_03_WIDTH 576.8740516
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_04_WIDTH 1130.440061
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_01_WIDTH 804.1274659
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_02_WIDTH 874.0515933
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_03_WIDTH 938.1487102
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_04_WIDTH 1381.001517
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_X 960.0
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_40 352.5
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_41 430.8333333
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_42 509.1666667
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_43 587.5
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_50 340.0
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_51 440.0
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_52 540.0
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_53 640.0
CONST_FLOAT cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_54 740.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_POS_Y 50.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_POS_X_SCORE 200.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_POS_X_LEVEL 1160.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_POS_X_OBJECTIVES 1470.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_POS_X_OBJECTIVES_SQUARE 1350.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_POS_X_LIFES 1770.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_POS_X_LIFES_SQUARE 1650.0
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_SQUARE_HEIGHT 59.15226064
CONST_FLOAT cfDEGENATRON_GAMES_SCORE_BAR_SQUARE_WIDTH 75.0
CONST_INT ciDEGENATRON_GAMES_HOLD_TO_QUIT_TIME 1000
CONST_INT ciDEGENATRON_GAMES_GLITCH_CRAZY_TIME_MIN 500
CONST_INT ciDEGENATRON_GAMES_GLITCH_CRAZY_TIME_MAX 2000
CONST_INT ciDEGENATRON_GAMES_GLITCH_CALM_TIME_MIN 5000
CONST_INT ciDEGENATRON_GAMES_GLITCH_CALM_TIME_MAX 10000
ENUM DEGENATRON_GAMES_CLIENT_STATE
DEGENATRON_GAMES_CLIENT_STATE_INIT = 0,
DEGENATRON_GAMES_CLIENT_STATE_REQUESTING_ASSETS,
DEGENATRON_GAMES_CLIENT_STATE_INTRO,
DEGENATRON_GAMES_CLIENT_STATE_PLAYING,
DEGENATRON_GAMES_CLIENT_STATE_CLEANUP
ENDENUM
ENUM DEGENATRON_GAMES_TEXT_ITEM
DEGENATRON_GAMES_TEXT_ITEM_HIGH_SCORE,
DEGENATRON_GAMES_TEXT_ITEM_HIGH_SCORES,
DEGENATRON_GAMES_TEXT_ITEM_LEVEL_FAILED,
DEGENATRON_GAMES_TEXT_ITEM_LEVEL_PASSED,
DEGENATRON_GAMES_TEXT_ITEM_MISSION_FAILED,
DEGENATRON_GAMES_TEXT_ITEM_MISSION_PASSED,
DEGENATRON_GAMES_TEXT_ITEM_PLAY,
DEGENATRON_GAMES_TEXT_ITEM_SCORE,
DEGENATRON_GAMES_TEXT_ITEM_GAME_OVER,
DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_OF_THE_FAITH,
DEGENATRON_GAMES_TEXT_ITEM_MONKEYS_PARADISE,
DEGENATRON_GAMES_TEXT_ITEM_PENETRATOR,
DEGENATRON_GAMES_TEXT_ITEM_DEGENATRON,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_01,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_02,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_03,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_04,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_01,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_02,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_03,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_04,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_01,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_02,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_03,
DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_04,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_0,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_1,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_2,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_3,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_4,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_5,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_6,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_7,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_8,
DEGENATRON_GAMES_TEXT_ITEM_NUMBER_9,
DEGENATRON_GAMES_TEXT_ITEM_PENETRATOR_SCENE_FRAME,
DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID,
DEGENATRON_GAMES_TEXT_ITEM_SQUARE_02_SOLID,
DEGENATRON_GAMES_TEXT_ITEM_SQUARE_03_SOLID,
DEGENATRON_GAMES_TEXT_ITEM_SQUARE_04_SOLID,
DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_SCENE_01,
DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_SCENE_02,
DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_SCENE_03
ENDENUM
ENUM DEGENATRON_GAMES_TEXT_ITEM_POS
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_40,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_41,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_42,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_43,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_50,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_51,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_52,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_53,
DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_54,
DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_SCORE,
DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_LEVEL,
DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_LIFES,
DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_OBJECTIVES,
DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_LIFES_SQUARE,
DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_OBJECTIVES_SQUARE
ENDENUM
ENUM DEGENATRON_GAMES_STATE_GAME
DEGENATRON_GAMES_STATE_GAME_INIT,
DEGENATRON_GAMES_STATE_GAME_MENU,
DEGENATRON_GAMES_STATE_GAME_INTRO,
DEGENATRON_GAMES_STATE_GAME_UPDATE,
DEGENATRON_GAMES_STATE_GAME_SCORE,
DEGENATRON_GAMES_STATE_GAME_LEADERBOARD,
DEGENATRON_GAMES_STATE_GAME_END
ENDENUM
ENUM DEGENATRON_GAMES_CHALLENGE_BIT
DEGENATRON_GAMES_CHALLENGE_BIT_NONE = 0,
DEGENATRON_GAMES_CHALLENGE_BIT_KEEP_THE_FAITH = BIT0,
DEGENATRON_GAMES_CHALLENGE_BIT_AQUAAPE = BIT1,
DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_BRONZE = BIT2,
DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_SILVER = BIT3,
DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_GOLD = BIT4,
DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_PLATINUM = BIT5
ENDENUM
FUNC STRING DEGENATRON_GAMES_DEBUG_GET_DEGENATRON_GAMES_CLIENT_STATE_AS_STRING(DEGENATRON_GAMES_CLIENT_STATE eValue)
SWITCH eValue
CASE DEGENATRON_GAMES_CLIENT_STATE_INIT RETURN "DEGENATRON_GAMES_CLIENT_STATE_INIT"
CASE DEGENATRON_GAMES_CLIENT_STATE_REQUESTING_ASSETS RETURN "DEGENATRON_GAMES_CLIENT_STATE_REQUESTING_ASSETS"
CASE DEGENATRON_GAMES_CLIENT_STATE_INTRO RETURN "DEGENATRON_GAMES_CLIENT_STATE_INTRO"
CASE DEGENATRON_GAMES_CLIENT_STATE_PLAYING RETURN "DEGENATRON_GAMES_CLIENT_STATE_PLAYING"
CASE DEGENATRON_GAMES_CLIENT_STATE_CLEANUP RETURN "DEGENATRON_GAMES_CLIENT_STATE_CLEANUP"
ENDSWITCH
RETURN "INVALID DEGENATRON_GAMES_CLIENT_STATE"
ENDFUNC
FUNC STRING DEGENATRON_GAMES_STATE_GAME_TO_STRING(DEGENATRON_GAMES_STATE_GAME eEnum)
SWITCH eEnum
CASE DEGENATRON_GAMES_STATE_GAME_INIT RETURN "GAME_INIT"
CASE DEGENATRON_GAMES_STATE_GAME_MENU RETURN "GAME_MENU"
CASE DEGENATRON_GAMES_STATE_GAME_INTRO RETURN "GAME_INTRO"
CASE DEGENATRON_GAMES_STATE_GAME_UPDATE RETURN "GAME_UPDATE"
CASE DEGENATRON_GAMES_STATE_GAME_SCORE RETURN "GAME_SCORE"
CASE DEGENATRON_GAMES_STATE_GAME_LEADERBOARD RETURN "GAME_LEADERBOARD"
CASE DEGENATRON_GAMES_STATE_GAME_END RETURN "GAME_END"
ENDSWITCH
RETURN "***INVALID***"
ENDFUNC
FUNC STRING DEGENATRON_GAMES_CHALLENGE_BIT_TO_STRING(DEGENATRON_GAMES_CHALLENGE_BIT eEnum)
SWITCH eEnum
CASE DEGENATRON_GAMES_CHALLENGE_BIT_NONE RETURN "DEGENATRON_GAMES_CHALLENGE_BIT_NONE"
CASE DEGENATRON_GAMES_CHALLENGE_BIT_KEEP_THE_FAITH RETURN "DEGENATRON_GAMES_CHALLENGE_BIT_KEEP_THE_FAITH"
CASE DEGENATRON_GAMES_CHALLENGE_BIT_AQUAAPE RETURN "DEGENATRON_GAMES_CHALLENGE_BIT_AQUAAPE"
CASE DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_BRONZE RETURN "DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_BRONZE"
CASE DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_SILVER RETURN "DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_SILVER"
CASE DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_GOLD RETURN "DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_GOLD"
CASE DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_PLATINUM RETURN "DEGENATRON_GAMES_CHALLENGE_BIT_MASTERFUL_PLATINUM"
ENDSWITCH
RETURN "***INVALID***"
ENDFUNC
STRUCT DEGENATRON_GAMES_GAME_DATA
INT iLevel
INT iLifes
INT iScore
INT iObjectives
INT iFlashTime = 0
INT iWaitTime = 0
BOOL bPlayerIsDead
BOOL bFlashedOnce
BOOL bFlashedTwice
DEGENATRON_GAMES_STATE_GAME eGameState
ENDSTRUCT
STRUCT DEGENATRON_GAMES_CONTROL_INPUT
VECTOR_2D vLeftAxisTimer
INT iLeftAxisXTick
INT iLeftAxisYTick
FLOAT fAXTimer
BOOL bAXTick
ENDSTRUCT
STRUCT DEGENATRON_GAMES_DATA
#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID widgetGroupExample
BOOL bDebugCreatedWidgets
#ENDIF
STRUCT_ARCADE_CABINET sTelemetry
DEGENATRON_GAMES eGame = DEGENATRON_GAMES_DEFENDER
DEGENATRON_GAMES_CLIENT_STATE eClientState
DEGENATRON_GAMES_GAME_DATA sGameData
SCRIPT_CONTROL_HOLD_TIMER sControlTimer
DEGENATRON_GAMES_CONTROL_INPUT sControlsInput
DEGENATRON_GAMES_CHALLENGE_BIT eChallengeFlags
BOOL bButtonPressed = FALSE
BOOL bBackButtonPressed = FALSE
BOOL bTelemetryInit = FALSE
BOOL bShowFXAberration = FALSE
BOOL bShowFXGreenScale = FALSE
BOOL bShouldDoHeavyShake = FALSE
BOOL bShouldDoSoftShake = FALSE
BOOL bShouldDoMidShake = FALSE
BOOL bGlitchCrazy = TRUE
INT iFreqHeavyShake = 255
INT iFreqMidShake = 128
INT iFreqSoftShake = 1
INT iFeedBackTime = -HIGHEST_INT
INT iDefaultFrameTimeCounter
INT iDefaultUpdateFrames
INT iMenuSelected = 0
INT iGameTimer
INT iSlowFrameTimeCounter
INT iSlowUpdateFrames
INT iMachineBashed = 0
INT iQuitTime = -HIGHEST_INT
INT iGlitchTime = -HIGHEST_INT
INT iGlitchCounter = 0
FLOAT fScaleRatio = cfDEGENATRON_GAMES_SCALE_RATIO
FLOAT yGlitch
FLOAT fNoise = 8.0
FLOAT fYbugA = 0.0
FLOAT fYbugB = 0.0100
FLOAT fYbugC = 0.1
FLOAT fAberrationTime = 610.000
FLOAT fAberrationNoiseMultiplier = 3.330
FLOAT fAberrationNoise = 4.0
FLOAT fAberrationFlooring = 6.0
FLOAT fAberrationSeparation = 9.300
FLOAT fAberrationYNegative = 0.0
FLOAT fAberrationXNegative = 0.0
VECTOR_2D vScreenSpace
VECTOR_2D iLeftAxis
BINK_MOVIE_ID bmIDDegenatronIntro
RGBA_COLOUR_STRUCT rgbaBlack
RGBA_COLOUR_STRUCT rgbaWhite
RGBA_COLOUR_STRUCT rgbaGray
RGBA_COLOUR_STRUCT rgbaLightGray
RGBA_COLOUR_STRUCT rgbaGreen
RGBA_COLOUR_STRUCT rgbaDarkGreen
RGBA_COLOUR_STRUCT rgbaPurple
RGBA_COLOUR_STRUCT rgbaRed
RGBA_COLOUR_STRUCT rgbaMagenta
RGBA_COLOUR_STRUCT rgbaBlue
RGBA_COLOUR_STRUCT rgbaYellow
RGBA_COLOUR_STRUCT rgbaCyan
RGBA_COLOUR_STRUCT rgbaBrown
RGBA_COLOUR_STRUCT rgbaFeedback
#IF IS_DEBUG_BUILD
BOOL bShowHelp = FALSE
BOOL bDebugDraw = TRUE
BOOL bDebugDrawBackmask = TRUE
BOOL bDebugDrawFacade = TRUE
BOOL bDebugResetChallenges
BOOL bDebugResetTrophy
BOOL bDebugResetDoF
BOOL bDebugResetMonkey
BOOL bDebugResetPenetrator
BOOL bDebugGlitchOverride
FLOAT fDebugNoise = 2.0
FLOAT fDebugYbugA = 9.500
FLOAT fDebugYbugB = 0.1
FLOAT fDebugYbugC = 2.250
FLOAT fDebugAberrationTime = 610.000
FLOAT fDebugAberrationNoise = 4.0
FLOAT fDebugAberrationNoiseMultiplier = 7.320
FLOAT fDebugAberrationSeparation = 4.100
FLOAT fDebugAberrationFlooring = 4.100
#ENDIF
ENDSTRUCT
DEGENATRON_GAMES_DATA sDegenatronGamesData
FUNC FLOAT DEGENATRON_GAMES_SCALE_RATIO
RETURN sDegenatronGamesData.fScaleRatio
ENDFUNC
FUNC FLOAT DEGENATRON_GAMES_SCREEN_WIDTH_RATIO
RETURN sDegenatronGamesData.vScreenSpace.x / cfBASE_SCREEN_WIDTH
ENDFUNC
FUNC FLOAT DEGENATRON_GAMES_SCREEN_HEIGHT_RATIO
RETURN sDegenatronGamesData.vScreenSpace.y / cfBASE_SCREEN_HEIGHT
ENDFUNC
// TEXTS //
FUNC STRING DEGENATRON_GAMES_GET_TEXT_STRING(DEGENATRON_GAMES_TEXT_ITEM eItem)
SWITCH eItem
CASE DEGENATRON_GAMES_TEXT_ITEM_HIGH_SCORE RETURN "HUD_TEXT_HIGH_SCORE"
CASE DEGENATRON_GAMES_TEXT_ITEM_HIGH_SCORES RETURN "HUD_TEXT_HIGH_SCORES"
CASE DEGENATRON_GAMES_TEXT_ITEM_LEVEL_FAILED
SWITCH sDegenatronGamesData.eGame
CASE DEGENATRON_GAMES_DEFENDER
RETURN "HUD_TEXT_LEVEL_FAILED"
CASE DEGENATRON_GAMES_MONKEY
RETURN "HUD_TEXT_INTRO_MONKEYS_LINE_SWING"
CASE DEGENATRON_GAMES_PENETRATOR
RETURN "HUD_TEXT_INTRO_PENETRATOR_LINE_PENETRATED"
ENDSWITCH
BREAK
CASE DEGENATRON_GAMES_TEXT_ITEM_LEVEL_PASSED RETURN "HUD_TEXT_LEVEL_PASSED"
CASE DEGENATRON_GAMES_TEXT_ITEM_MISSION_FAILED RETURN "HUD_TEXT_MISSION_FAILED"
CASE DEGENATRON_GAMES_TEXT_ITEM_MISSION_PASSED RETURN "HUD_TEXT_MISSION_PASSED"
CASE DEGENATRON_GAMES_TEXT_ITEM_PLAY RETURN "HUD_TEXT_PLAY"
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE RETURN "HUD_TEXT_SCORE"
CASE DEGENATRON_GAMES_TEXT_ITEM_GAME_OVER RETURN "HUD_TEXT_GAME_OVER"
CASE DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_OF_THE_FAITH RETURN "HUD_TEXT_DEFENDER_OF_THE_FAITH"
CASE DEGENATRON_GAMES_TEXT_ITEM_MONKEYS_PARADISE RETURN "HUD_TEXT_MONKEYS_PARADISE"
CASE DEGENATRON_GAMES_TEXT_ITEM_PENETRATOR RETURN "HUD_TEXT_PENETRATOR"
CASE DEGENATRON_GAMES_TEXT_ITEM_DEGENATRON RETURN "HUD_TEXT_DEGENATRON"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_01 RETURN "HUD_TEXT_INTRO_DEFENDER_LINE_01"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_02 RETURN "HUD_TEXT_INTRO_DEFENDER_LINE_02"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_03 RETURN "HUD_TEXT_INTRO_DEFENDER_LINE_03"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_04 RETURN "HUD_TEXT_INTRO_DEFENDER_LINE_04"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_01 RETURN "HUD_TEXT_INTRO_MONKEYS_LINE_01"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_02 RETURN "HUD_TEXT_INTRO_MONKEYS_LINE_02"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_03 RETURN "HUD_TEXT_INTRO_MONKEYS_LINE_03"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_04 RETURN "HUD_TEXT_INTRO_MONKEYS_LINE_04"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_01 RETURN "HUD_TEXT_INTRO_PENETRATOR_LINE_01"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_02 RETURN "HUD_TEXT_INTRO_PENETRATOR_LINE_02"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_03 RETURN "HUD_TEXT_INTRO_PENETRATOR_LINE_03"
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_04 RETURN "HUD_TEXT_INTRO_PENETRATOR_LINE_04"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_0 RETURN "HUD_NUMBER_0"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_1 RETURN "HUD_NUMBER_1"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_2 RETURN "HUD_NUMBER_2"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_3 RETURN "HUD_NUMBER_3"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_4 RETURN "HUD_NUMBER_4"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_5 RETURN "HUD_NUMBER_5"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_6 RETURN "HUD_NUMBER_6"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_7 RETURN "HUD_NUMBER_7"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_8 RETURN "HUD_NUMBER_8"
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_9 RETURN "HUD_NUMBER_9"
CASE DEGENATRON_GAMES_TEXT_ITEM_PENETRATOR_SCENE_FRAME RETURN "PENETRATOR_SCENE_FRAME"
CASE DEGENATRON_GAMES_TEXT_ITEM_SQUARE_01_SOLID RETURN "SQUARE_01_SOLID"
CASE DEGENATRON_GAMES_TEXT_ITEM_SQUARE_02_SOLID RETURN "SQUARE_02_SOLID"
CASE DEGENATRON_GAMES_TEXT_ITEM_SQUARE_03_SOLID RETURN "SQUARE_03_SOLID"
CASE DEGENATRON_GAMES_TEXT_ITEM_SQUARE_04_SOLID RETURN "SQUARE_04_SOLID"
CASE DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_SCENE_01 RETURN "DEFENDER_SCENE_01"
CASE DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_SCENE_02 RETURN "DEFENDER_SCENE_02"
CASE DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_SCENE_03 RETURN "DEFENDER_SCENE_03"
ENDSWITCH
RETURN ""
ENDFUNC
FUNC VECTOR_2D DEGENATRON_GAMES_GET_TEXT_SIZE(DEGENATRON_GAMES_TEXT_ITEM eItem)
SWITCH eItem
CASE DEGENATRON_GAMES_TEXT_ITEM_HIGH_SCORE RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_HIGH_SCORE_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_HIGH_SCORES RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_HIGH_SCORES_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_LEVEL_FAILED
SWITCH sDegenatronGamesData.eGame
CASE DEGENATRON_GAMES_DEFENDER
RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_LEVEL_FAILED_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_MONKEY
RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_MONKEYS_LINE_SWING,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_PENETRATOR
RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_PENETRATED,cfDEGENATRON_GAMES_TEXT_HEIGHT)
ENDSWITCH
BREAK
CASE DEGENATRON_GAMES_TEXT_ITEM_LEVEL_PASSED RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_LEVEL_PASSED_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_MISSION_FAILED RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_MISSION_FAILED_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_MISSION_PASSED RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_MISSION_PASSED_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_PLAY RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_PLAY_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_SCORE_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_GAME_OVER RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_GAME_OVER_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_DEFENDER_OF_THE_FAITH RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_DEFENDER_OF_THE_FAITH_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_MONKEYS_PARADISE RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_MONKEYS_PARADISE_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_PENETRATOR RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_PENETRATOR_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_DEGENATRON RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_DEGENATRON_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_01 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_01_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_02 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_02_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_03 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_03_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_DEFENDER_LINE_04 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_DEFENDER_LINE_04_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_01 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_01_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_02 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_02_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_03 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_03_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_MONKEY_LINE_04 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_MONKEY_LINE_04_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_01 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_01_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_02 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_02_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_03 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_03_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
CASE DEGENATRON_GAMES_TEXT_ITEM_INTRO_PENETRATOR_LINE_04 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INTRO_PENETRATOR_LINE_04_WIDTH,cfDEGENATRON_GAMES_TEXT_HEIGHT)
ENDSWITCH
RETURN INIT_VECTOR_2D(0.0,0.0)
ENDFUNC
FUNC VECTOR_2D DEGENATRON_GAMES_GET_TEXT_POSITION(DEGENATRON_GAMES_TEXT_ITEM_POS eItem)
SWITCH eItem
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_40 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_40)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_41 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_41)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_42 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_42)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_43 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_43)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_50 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_50)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_51 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_51)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_52 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_52)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_53 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_53)
CASE DEGENATRON_GAMES_TEXT_ITEM_LINE_POS_54 RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_POS_X,cfDEGENATRON_GAMES_TEXT_POS_Y_LINE_54)
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_SCORE RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_SCORE_BAR_POS_X_SCORE, cfDEGENATRON_GAMES_SCORE_BAR_POS_Y)
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_LEVEL RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_SCORE_BAR_POS_X_LEVEL, cfDEGENATRON_GAMES_SCORE_BAR_POS_Y)
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_LIFES RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_SCORE_BAR_POS_X_LIFES, cfDEGENATRON_GAMES_SCORE_BAR_POS_Y)
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_OBJECTIVES RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_SCORE_BAR_POS_X_OBJECTIVES, cfDEGENATRON_GAMES_SCORE_BAR_POS_Y)
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_LIFES_SQUARE RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_SCORE_BAR_POS_X_LIFES_SQUARE, cfDEGENATRON_GAMES_SCORE_BAR_POS_Y)
CASE DEGENATRON_GAMES_TEXT_ITEM_SCORE_BAR_OBJECTIVES_SQUARE RETURN INIT_VECTOR_2D(cfDEGENATRON_GAMES_SCORE_BAR_POS_X_OBJECTIVES_SQUARE, cfDEGENATRON_GAMES_SCORE_BAR_POS_Y)
ENDSWITCH
RETURN INIT_VECTOR_2D(0.0,0.0)
ENDFUNC
// SCREEN //
FUNC VECTOR_2D DEGENATRON_GAMES_GET_SCREEN_SIZE
RETURN INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH,cfBASE_SCREEN_HEIGHT)
ENDFUNC
FUNC FLOAT DEGENATRON_GAMES_GET_SCREEN_HEIGHT
VECTOR_2D screenSize = DEGENATRON_GAMES_GET_SCREEN_SIZE()
RETURN screenSize.y
ENDFUNC
FUNC FLOAT DEGENATRON_GAMES_GET_SCREEN_WIDTH
VECTOR_2D screenSize = DEGENATRON_GAMES_GET_SCREEN_SIZE()
RETURN screenSize.x
ENDFUNC
FUNC VECTOR_2D DEGENATRON_GAMES_GET_SCREEN_CENTER
RETURN INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2.0,cfBASE_SCREEN_HEIGHT/2.0)
ENDFUNC
// SCORE //
FUNC VECTOR_2D DEGENATRON_GAMES_GET_SCORE_SIZE
RETURN INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH,ciDEGENATRON_GAMES_SCORE_HEIGHT)
ENDFUNC
FUNC FLOAT DEGENATRON_GAMES_GET_SCORE_HEIGHT
VECTOR_2D screenSize = DEGENATRON_GAMES_GET_SCORE_SIZE()
RETURN screenSize.y
ENDFUNC
FUNC FLOAT DEGENATRON_GAMES_GET_SCORE_WIDTH
VECTOR_2D screenSize = DEGENATRON_GAMES_GET_SCORE_SIZE()
RETURN screenSize.x
ENDFUNC
FUNC VECTOR_2D DEGENATRON_GAMES_GET_SCORE_CENTER
RETURN INIT_VECTOR_2D(cfBASE_SCREEN_WIDTH/2.0,ciDEGENATRON_GAMES_SCORE_HEIGHT/2)
ENDFUNC
FUNC VECTOR_2D DEGENATRON_GAMES_DRAW_SCORE_GET_SQUARE_SIZE()
RETURN INIT_VECTOR_2D(ciDEGENATRON_GAMES_SCORE_HEIGHT*0.6,ciDEGENATRON_GAMES_SCORE_HEIGHT*0.6)
ENDFUNC
// FRAME TIME //
FUNC INT DEGENATRON_GAMES_FRAME_TIME
RETURN ROUND(GET_FRAME_TIME() * 1000)
ENDFUNC
PROC DEGENATRON_GAMES_INIT_COLOUR_STRUCTS()
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaBlack, 10, 10, 10,255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaWhite, 255, 255, 255, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaGray, 100, 100, 100, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaLightGray, 150, 150, 150, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaGreen, 0, 255, 0, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaDarkGreen, 0, 128, 0, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaPurple, 128, 0, 128, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaRed, 255, 0, 0, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaMagenta, 255, 0, 255, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaBlue, 0, 0, 255, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaYellow, 255, 255, 0, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaCyan, 100, 255, 255, 255)
INIT_RGBA_STRUCT(sDegenatronGamesData.rgbaBrown, 100, 50, 0, 255)
ENDPROC
FUNC BOOL DEGENATRON_GAMES_PRELOAD_SPRITE_DICT(STRING stTextureDict)
REQUEST_STREAMED_TEXTURE_DICT(stTextureDict)
IF NOT HAS_STREAMED_TEXTURE_DICT_LOADED(stTextureDict)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_PRELOAD_SPRITE_DICT - Loading ",stTextureDict)
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
PROC DEGENATRON_GAMES_CLEANUP_SPRITE_DICT(STRING stTextureDict)
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED(stTextureDict)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_CLEANUP_SPRITE_DICT - Cleanup ",stTextureDict)
ENDPROC
PROC DEGENATRON_GAMES_LEFT_AXIS_INPUT()
sDegenatronGamesData.sControlsInput.iLeftAxisXTick = 0
sDegenatronGamesData.sControlsInput.iLeftAxisYTick = 0
sDegenatronGamesData.sControlsInput.bAXTick = FALSE
// INPUT LEFT AXIS
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT)
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisXTick = 1
EXIT
ENDIF
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT)
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisXTick = -1
EXIT
ENDIF
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_UP)
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisYTick = -1
EXIT
ENDIF
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_DOWN)
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisYTick = 1
EXIT
ENDIF
IF GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y) < 0.0
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_UP)
IF sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y = 0
OR (sDegenatronGamesData.iGameTimer - sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y) > ciDEGENATRON_GAMES_LEFT_AXIS_TICK_TIME
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisYTick = -1
ENDIF
ELIF GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_Y) > 0.0
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_DOWN)
IF sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y = 0
OR (sDegenatronGamesData.iGameTimer - sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y) > ciDEGENATRON_GAMES_LEFT_AXIS_TICK_TIME
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisYTick = 1
ENDIF
ELSE
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.y = 0
ENDIF
IF GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X) < 0.0
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT)
IF sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x = 0
OR (sDegenatronGamesData.iGameTimer - sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x) > ciDEGENATRON_GAMES_LEFT_AXIS_TICK_TIME
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisXTick = 1
ENDIF
ELIF GET_DISABLED_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_LEFT_AXIS_X) > 0.0
OR IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT)
IF sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x = 0
OR (sDegenatronGamesData.iGameTimer - sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x) > ciDEGENATRON_GAMES_LEFT_AXIS_TICK_TIME
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.iLeftAxisXTick = -1
ENDIF
ELSE
sDegenatronGamesData.sControlsInput.vLeftAxisTimer.x = 0
ENDIF
////////////
// INPUT A/X
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
sDegenatronGamesData.sControlsInput.fAXTimer = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.bAXTick = TRUE
EXIT
ENDIF
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
IF sDegenatronGamesData.sControlsInput.fAXTimer = 0
OR (sDegenatronGamesData.iGameTimer - sDegenatronGamesData.sControlsInput.fAXTimer) > ciDEGENATRON_GAMES_LEFT_AXIS_TICK_TIME
sDegenatronGamesData.sControlsInput.fAXTimer = TO_FLOAT(sDegenatronGamesData.iGameTimer)
sDegenatronGamesData.sControlsInput.bAXTick = TRUE
ENDIF
ELSE
sDegenatronGamesData.sControlsInput.fAXTimer = 0
ENDIF
////////////
ENDPROC
PROC DEGENATRON_GAMES_CLEAN_UP()
DG_CLEAN_UP_MOVIE(sDegenatronGamesData.bmIDDegenatronIntro)
ENDPROC
// DRAW //
FUNC STRING DEGENATRON_GAMES_GET_SPRITE_DICTIONARY(DEGENATRON_GAMES_TEXT_ITEM eTexture)
UNUSED_PARAMETER(eTexture)
SWITCH eTexture
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_0
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_1
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_2
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_3
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_4
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_5
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_6
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_7
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_8
CASE DEGENATRON_GAMES_TEXT_ITEM_NUMBER_9
RETURN "MPArcadeDegenatronCharacters"
ENDSWITCH
RETURN "MPArcadeDegenatron"
ENDFUNC
PROC DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED(DEGENATRON_GAMES_TEXT_ITEM eTexture, VECTOR_2D vCenter, VECTOR_2D vScale, FLOAT fRotation, RGBA_COLOUR_STRUCT rgba)
VECTOR_2D rescaledCenter
rescaledCenter.x = vCenter.x*DEGENATRON_GAMES_SCREEN_WIDTH_RATIO() + DEGENATRON_GAMES_GET_SCREEN_WIDTH()*((1-DEGENATRON_GAMES_SCREEN_WIDTH_RATIO())*0.5)
rescaledCenter.y = vCenter.y*DEGENATRON_GAMES_SCREEN_HEIGHT_RATIO() + DEGENATRON_GAMES_GET_SCREEN_HEIGHT()*((1-DEGENATRON_GAMES_SCREEN_HEIGHT_RATIO())*0.5)
VECTOR_2D rescaledSize
rescaledSize = INIT_VECTOR_2D(vScale.x*DEGENATRON_GAMES_SCREEN_WIDTH_RATIO(),vScale.y*DEGENATRON_GAMES_SCREEN_HEIGHT_RATIO())
#IF IS_DEBUG_BUILD
IF sDegenatronGamesData.bShowHelp
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - --------------------------------------")
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - Drawing sprite ",DEGENATRON_GAMES_GET_TEXT_STRING(eTexture))
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - Original Center ",vCenter.x,",",vCenter.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - Original Size ",vScale.x,",",vScale.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - Rotation ",fRotation)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - Rescaled Center ",rescaledCenter.x,",",rescaledCenter.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - Rescaled Size ",rescaledSize.x,",",rescaledSize.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED - --------------------------------------")
ENDIF
#ENDIF
ARCADE_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_GET_SPRITE_DICTIONARY(eTexture), DEGENATRON_GAMES_GET_TEXT_STRING(eTexture), rescaledCenter, rescaledSize, fRotation, rgba)
ENDPROC
FUNC FLOAT FRACT(FLOAT n)
RETURN n - FLOOR(n)
ENDFUNC
FUNC FLOAT RAND(FLOAT n, FLOAT fRepetition)
return FRACT(SIN(n) * fRepetition)
ENDFUNC
FUNC FLOAT MIX(FLOAT x, FLOAT y, FLOAT z)
RETURN x*(1-z)+y*z
ENDFUNC
FUNC FLOAT NOISE(FLOAT p)
FLOAT fl = TO_FLOAT( FLOOR(p) )
FLOAT fc = FRACT(p)
RETURN MIX(RAND(fl,sDegenatronGamesData.fNoise), RAND(fl + 1.0,sDegenatronGamesData.fNoise), fc)
ENDFUNC
FUNC FLOAT YBUG()
RETURN CLAMP(NOISE(sDegenatronGamesData.fYbugA+ sDegenatronGamesData.iGameTimer*sDegenatronGamesData.fYbugB)*sDegenatronGamesData.fYbugC,-1.0,1.0)
ENDFUNC
FUNC FLOAT MOD(FLOAT x, FLOAT y)
RETURN x - y * FLOOR(x/y)
ENDFUNC
PROC DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(DEGENATRON_GAMES_TEXT_ITEM eTexture, VECTOR_2D vCenter, VECTOR_2D vScale, FLOAT fRotation, RGBA_COLOUR_STRUCT rgba, BOOL bAvoidAberrationFX = FALSE)
BOOL bAberration = (sDegenatronGamesData.iMachineBashed > 0 AND sDegenatronGamesData.iMachineBashed <= 3 ) AND NOT bAvoidAberrationFX
BOOL bGreenScale = sDegenatronGamesData.bShowFXGreenScale
RGBA_COLOUR_STRUCT color = rgba
RGBA_COLOUR_STRUCT colorCyan = sDegenatronGamesData.rgbaCyan
IF bGreenScale
color.iR = 0
color.iG = ROUND(rgba.iR*0.2999 + rgba.iG*0.587 + rgba.iB*0.114)
color.iB = 0
color.iA = rgba.iA
colorCyan.iR = 0
colorCyan.iG = ROUND(sDegenatronGamesData.rgbaCyan.iR*0.2999 + sDegenatronGamesData.rgbaCyan.iG*0.587 + sDegenatronGamesData.rgbaCyan.iB*0.114)
colorCyan.iB = 0
colorCyan.iA = sDegenatronGamesData.rgbaCyan.iA
ENDIF
IF NOT bAberration
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED(eTexture,vCenter,vScale,fRotation,color)
ELSE
vCenter.y = MOD(vCenter.y+sDegenatronGamesData.yGlitch*cfBASE_SCREEN_HEIGHT,cfBASE_SCREEN_HEIGHT)
FLOAT fRatio
fRatio = (sDegenatronGamesData.iGameTimer % sDegenatronGamesData.fAberrationTime) / sDegenatronGamesData.fAberrationTime
fRatio = RAND(fRatio,sDegenatronGamesData.fAberrationNoise)*sDegenatronGamesData.fAberrationNoiseMultiplier
fRatio = FLOOR(fRatio*sDegenatronGamesData.fAberrationFlooring)/sDegenatronGamesData.fAberrationFlooring
fRatio *= sDegenatronGamesData.fAberrationXNegative
FLOAT fRatioY
fRatioY = (sDegenatronGamesData.iGameTimer % sDegenatronGamesData.fAberrationTime) / sDegenatronGamesData.fAberrationTime
fRatioY = RAND(fRatioY,sDegenatronGamesData.fAberrationNoise)*sDegenatronGamesData.fAberrationNoiseMultiplier
fRatioY = FLOOR(fRatioY*sDegenatronGamesData.fAberrationFlooring)/sDegenatronGamesData.fAberrationFlooring
fRatioY *= sDegenatronGamesData.fAberrationYNegative
RGBA_COLOUR_STRUCT r = color
r.iA = rgba.iA/4*3
RGBA_COLOUR_STRUCT b = colorCyan
b.iA = colorCyan.iA/2
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED(eTexture,ADD_VECTOR_2D(vCenter,INIT_VECTOR_2D(-sDegenatronGamesData.fAberrationSeparation*fRatio, sDegenatronGamesData.fAberrationSeparation*fRatioY)),vScale,fRotation,b)
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE_RESCALED(eTexture,ADD_VECTOR_2D(vCenter,INIT_VECTOR_2D( sDegenatronGamesData.fAberrationSeparation*fRatio, 0.0)),vScale,fRotation,r)
ENDIF
ENDPROC
PROC DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED(VECTOR_2D vCenter, VECTOR_2D vScale, RGBA_COLOUR_STRUCT rgba)
VECTOR_2D rescaledCenter
rescaledCenter.x = vCenter.x*DEGENATRON_GAMES_SCREEN_WIDTH_RATIO() + DEGENATRON_GAMES_GET_SCREEN_WIDTH()*((1-DEGENATRON_GAMES_SCREEN_WIDTH_RATIO())*0.5)
rescaledCenter.y = vCenter.y*DEGENATRON_GAMES_SCREEN_HEIGHT_RATIO() + DEGENATRON_GAMES_GET_SCREEN_HEIGHT()*((1-DEGENATRON_GAMES_SCREEN_HEIGHT_RATIO())*0.5)
VECTOR_2D rescaledSize
rescaledSize = INIT_VECTOR_2D(vScale.x*DEGENATRON_GAMES_SCREEN_WIDTH_RATIO(),vScale.y*DEGENATRON_GAMES_SCREEN_HEIGHT_RATIO())
#IF IS_DEBUG_BUILD
IF sDegenatronGamesData.bShowHelp
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED - --------------------------------------")
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED - Original Center ",vCenter.x,",",vCenter.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED - Original Size ",vScale.x,",",vScale.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED - Rescaled Center ",rescaledCenter.x,",",rescaledCenter.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED - Rescaled Size ",rescaledSize.x,",",rescaledSize.y)
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED - --------------------------------------")
ENDIF
#ENDIF
ARCADE_DRAW_PIXELSPACE_RECT( rescaledCenter, rescaledSize, rgba)
ENDPROC
PROC DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT(VECTOR_2D vCenter, VECTOR_2D vScale, RGBA_COLOUR_STRUCT rgba, BOOL bAvoidAberrationFX = FALSE)
BOOL bAberration = (sDegenatronGamesData.iMachineBashed > 0 AND sDegenatronGamesData.iMachineBashed <= 3) AND NOT bAvoidAberrationFX
BOOL bGreenScale = sDegenatronGamesData.bShowFXGreenScale
RGBA_COLOUR_STRUCT color = rgba
RGBA_COLOUR_STRUCT colorCyan = sDegenatronGamesData.rgbaCyan
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT - bAberration ",BOOL_TO_INT(bAberration)," bGreenScale ",BOOL_TO_INT(bGreenScale))
IF bGreenScale
color.iR = 0
color.iG = ROUND(rgba.iR*0.2999 + rgba.iG*0.587 + rgba.iB*0.114)
color.iB = 0
color.iA = rgba.iA
colorCyan.iR = 0
colorCyan.iG = ROUND(sDegenatronGamesData.rgbaCyan.iR*0.2999 + sDegenatronGamesData.rgbaCyan.iG*0.587 + sDegenatronGamesData.rgbaCyan.iB*0.114)
colorCyan.iB = 0
colorCyan.iA = sDegenatronGamesData.rgbaCyan.iA
ENDIF
IF NOT bAberration
DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED(vCenter,vScale,color)
ELSE
vCenter.y = MOD(vCenter.y+sDegenatronGamesData.yGlitch*cfBASE_SCREEN_HEIGHT,cfBASE_SCREEN_HEIGHT)
FLOAT fRatio
fRatio = (sDegenatronGamesData.iGameTimer % sDegenatronGamesData.fAberrationTime) / sDegenatronGamesData.fAberrationTime
fRatio = RAND(fRatio,sDegenatronGamesData.fAberrationNoise)*sDegenatronGamesData.fAberrationNoiseMultiplier
fRatio = FLOOR(fRatio*sDegenatronGamesData.fAberrationFlooring)/sDegenatronGamesData.fAberrationFlooring
fRatio *= sDegenatronGamesData.fAberrationXNegative
FLOAT fRatioY
fRatioY = (sDegenatronGamesData.iGameTimer % sDegenatronGamesData.fAberrationTime) / sDegenatronGamesData.fAberrationTime
fRatioY = RAND(fRatioY,sDegenatronGamesData.fAberrationNoise)*sDegenatronGamesData.fAberrationNoiseMultiplier
fRatioY = FLOOR(fRatioY*sDegenatronGamesData.fAberrationFlooring)/sDegenatronGamesData.fAberrationFlooring
fRatioY *= sDegenatronGamesData.fAberrationYNegative
RGBA_COLOUR_STRUCT r = color
r.iA = rgba.iA/4*3
RGBA_COLOUR_STRUCT b = colorCyan
b.iA = colorCyan.iA/2
DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED(ADD_VECTOR_2D(vCenter,INIT_VECTOR_2D(-sDegenatronGamesData.fAberrationSeparation*fRatio, 0.0)),vScale,b)
DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT_RESCALED(ADD_VECTOR_2D(vCenter,INIT_VECTOR_2D( sDegenatronGamesData.fAberrationSeparation*fRatio, 0.0)),vScale,r)
ENDIF
ENDPROC
PROC DEGENATRON_GAMES_DRAW_INTEGER(INT iValue, INT iDigits, VECTOR_2D vCenter,RGBA_COLOUR_STRUCT rgba, BOOL bAlignRight = FALSE,BOOL bAlignLeft = FALSE)
VECTOR_2D vCharCenter = vCenter
VECTOR_2D vCharSize = INIT_VECTOR_2D(cfDEGENATRON_GAMES_TEXT_INT_WIDTH,cfDEGENATRON_GAMES_TEXT_INT_HEIGHT)
BOOL bZero = (iValue = 0)
INT iChar
IF iDigits = 0
INT currentValue
currentValue = iValue
IF iValue > 0
iDigits = FLOOR(LOG10(TO_FLOAT(iValue)))+1
ELIF iValue = 0
iDigits = 1
ENDIF
WHILE currentValue > 0 OR bZero
bZero = FALSE
IF bAlignRight
vCharCenter.x = vCenter.x - vCharSize.x * iChar
ELIF bAlignLeft
vCharCenter.x = vCenter.x + vCharSize.x * (iDigits-1) - vCharSize.x * iChar
ELSE
vCharCenter.x = vCenter.x + vCharSize.x * (iDigits-1)/2.0 - vCharSize.x * iChar
ENDIF
DEGENATRON_GAMES_TEXT_ITEM eTextureName
eTextureName = INT_TO_ENUM(DEGENATRON_GAMES_TEXT_ITEM, ENUM_TO_INT(DEGENATRON_GAMES_TEXT_ITEM_NUMBER_0)+currentValue % 10)
currentValue /= 10
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(eTextureName,vCharCenter,vCharSize,0.0, rgba)
iChar++
ENDWHILE
ELSE
REPEAT iDigits iChar
vCharCenter.x = vCenter.x + vCharSize.x * (iDigits-1)/2.0 - vCharSize.x * iChar
DEGENATRON_GAMES_TEXT_ITEM eTextureName
eTextureName = INT_TO_ENUM(DEGENATRON_GAMES_TEXT_ITEM, ENUM_TO_INT(DEGENATRON_GAMES_TEXT_ITEM_NUMBER_0)+(iValue / ROUND(POW(10.0,to_float(iChar)))) % 10)
DEGENATRON_GAMES_DRAW_PIXELSPACE_SPRITE(eTextureName,vCharCenter,vCharSize,0.0, rgba)
ENDREPEAT
ENDIF
ENDPROC
PROC DEGENATRON_GAMES_INT_IN_SCREEN(INT iValue,VECTOR_2D vPosRate, RGBA_COLOUR_STRUCT rgba, eTextJustification justification)
TEXT_PLACEMENT textPlacement
textPlacement.x = vPosRate.x
textPlacement.y = vPosRate.y
TEXT_STYLE textStyle
SET_TITLE_SMALL_TEXT(textStyle)
textStyle.XScale = 1.0
textStyle.YScale = 1.0
TEXT_LABEL_63 output
output = " "
output += iValue
textStyle.r = rgba.iR
textStyle.g = rgba.iG
textStyle.b = rgba.iB
DRAW_TEXT_WITH_STRING(textPlacement, textStyle, "DBG_STRING",output,justification)
ENDPROC
PROC DEGENATRON_GAMES_TEXT_IN_SCREEN(STRING sValue,VECTOR_2D vPosRate, RGBA_COLOUR_STRUCT rgba, eTextJustification justification, BOOL bAlignCentre, BOOL bAlignRight)
UNUSED_PARAMETER(justification)
TEXT_PLACEMENT textPlacement
textPlacement.x = vPosRate.x
textPlacement.y = vPosRate.y
TEXT_STYLE textStyle
SET_TITLE_SMALL_TEXT(textStyle)
textStyle.XScale = 1.0
textStyle.YScale = 1.0
textStyle.r = rgba.iR
textStyle.g = rgba.iG
textStyle.b = rgba.iB
IF NOT IS_STRING_EMPTY_HUD(sValue)
IF IS_SAFE_TO_DRAW_ON_SCREEN()
SET_TEXT_STYLE(textStyle)
SET_TEXT_RIGHT_JUSTIFY(bAlignRight)
SET_TEXT_CENTRE(bAlignCentre)
SET_TEXT_JUSTIFICATION(justification)
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("DBG_STRING")
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(sValue)
END_TEXT_COMMAND_DISPLAY_TEXT(ADJUST_SCREEN_X_POSITION(textPlacement.x), ADJUST_SCREEN_Y_POSITION(textPlacement.y))
ENDIF
ENDIF
ENDPROC
PROC DEGENATRON_GAMES_DRAW_TEXT(STRING sValue, VECTOR_2D vPosRate, RGBA_COLOUR_STRUCT rgba, eTextJustification justification = FONT_LEFT, BOOL bAlignCentre = FALSE, BOOL bAlignRight = FALSE)
VECTOR_2D screenCenter = DEGENATRON_GAMES_GET_SCREEN_CENTER()
VECTOR_2D screenSize = DEGENATRON_GAMES_GET_SCREEN_SIZE()
VECTOR_2D vPos
vPos.x = ( screenCenter.x - screenSize.x/2.0*DEGENATRON_GAMES_SCALE_RATIO() + vPosRate.x*screenSize.x*DEGENATRON_GAMES_SCALE_RATIO() ) / screenSize.x
vPos.y = ( screenCenter.y - screenSize.y/2.0*DEGENATRON_GAMES_SCALE_RATIO() + vPosRate.y*screenSize.y*DEGENATRON_GAMES_SCALE_RATIO() ) / screenSize.y
DEGENATRON_GAMES_TEXT_IN_SCREEN(sValue,vPos,rgba,justification,bAlignCentre,bAlignRight)
ENDPROC
PROC DEGENATRON_GAMES_DRAW_SCORE_DATA(INT iValue, VECTOR_2D vPosRate, BOOL bSquare, RGBA_COLOUR_STRUCT rgba, eTextJustification justification = FONT_LEFT)
VECTOR_2D screenCenter = DEGENATRON_GAMES_GET_SCREEN_CENTER()
VECTOR_2D screenSize = DEGENATRON_GAMES_GET_SCREEN_SIZE()
VECTOR_2D scoreSquareSize = DEGENATRON_GAMES_DRAW_SCORE_GET_SQUARE_SIZE()
VECTOR_2D scoreSize = DEGENATRON_GAMES_GET_SCORE_SIZE()
VECTOR_2D vPos
vPos.x = ( screenCenter.x - screenSize.x/2.0*DEGENATRON_GAMES_SCALE_RATIO() + vPosRate.x*screenSize.x*DEGENATRON_GAMES_SCALE_RATIO() ) / screenSize.x
vPos.y = ( screenCenter.y - screenSize.y/2.0*DEGENATRON_GAMES_SCALE_RATIO() + vPosRate.y*screenSize.y*DEGENATRON_GAMES_SCALE_RATIO() ) / screenSize.y
DEGENATRON_GAMES_INT_IN_SCREEN(iValue,vPos,rgba,justification)
IF bSquare
vPos.x = ( screenCenter.x - screenSize.x/2.0*DEGENATRON_GAMES_SCALE_RATIO() + vPosRate.x*screenSize.x*DEGENATRON_GAMES_SCALE_RATIO()) - scoreSquareSize.x/2.0*DEGENATRON_GAMES_SCALE_RATIO()
vPos.y = ( screenCenter.y - screenSize.y/2.0*DEGENATRON_GAMES_SCALE_RATIO() ) + scoreSize.y/2.0*DEGENATRON_GAMES_SCALE_RATIO()
DEGENATRON_GAMES_DRAW_PIXELSPACE_RECT(vPos, MULTIPLY_VECTOR_2D(scoreSquareSize,DEGENATRON_GAMES_SCALE_RATIO()), rgba)
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
PROC DEBUG_TEXT_FLOAT_IN_SCREEN(STRING text, FLOAT fValue,FLOAT x, FLOAT y, INT r = 255, INT g = 0, INT b = 0)
TEXT_PLACEMENT textPlacement
textPlacement.x = x
textPlacement.y = y
TEXT_STYLE textStyle
SET_TITLE_SMALL_TEXT(textStyle)
textStyle.XScale = 0.2
textStyle.YScale = 0.2
TEXT_LABEL_63 output
output = text
output += " = "
output += FLOAT_TO_STRING(fValue)
textStyle.r = r
textStyle.g = g
textStyle.b = b
DRAW_TEXT_WITH_STRING(textPlacement, textStyle, "DBG_STRING",output)
ENDPROC
PROC DEBUG_TEXT_INT_IN_SCREEN(STRING text, INT iValue,FLOAT x, FLOAT y, INT r = 255, INT g = 0, INT b = 0)
TEXT_PLACEMENT textPlacement
textPlacement.x = x
textPlacement.y = y
TEXT_STYLE textStyle
SET_TITLE_SMALL_TEXT(textStyle)
textStyle.XScale = 0.2
textStyle.YScale = 0.2
TEXT_LABEL_63 output
output = text
output += " = "
output += iValue
textStyle.r = r
textStyle.g = g
textStyle.b = b
DRAW_TEXT_WITH_STRING(textPlacement, textStyle, "DBG_STRING",output)
ENDPROC
PROC DEBUG_TEXT_VECTOR_2D_IN_SCREEN(STRING text, VECTOR_2D iValue,FLOAT x, FLOAT y, INT r = 255, INT g = 0, INT b = 0)
TEXT_PLACEMENT textPlacement
textPlacement.x = x
textPlacement.y = y
TEXT_STYLE textStyle
SET_TITLE_SMALL_TEXT(textStyle)
textStyle.XScale = 0.2
textStyle.YScale = 0.2
TEXT_LABEL_63 output
output = text
output += " = ( "
output += FLOAT_TO_STRING(iValue.x)
output += " , "
output += FLOAT_TO_STRING(iValue.y)
output += " ) "
textStyle.r = r
textStyle.g = g
textStyle.b = b
DRAW_TEXT_WITH_STRING(textPlacement, textStyle, "DBG_STRING",output)
ENDPROC
PROC DEBUG_TEXT_STRING_IN_SCREEN(STRING text, STRING iValue,FLOAT x, FLOAT y, INT r = 255, INT g = 0, INT b = 0)
TEXT_PLACEMENT textPlacement
textPlacement.x = x
textPlacement.y = y
TEXT_STYLE textStyle
SET_TITLE_SMALL_TEXT(textStyle)
textStyle.XScale = 0.2
textStyle.YScale = 0.2
TEXT_LABEL_63 output
output = text
output += " = "
output += iValue
textStyle.r = r
textStyle.g = g
textStyle.b = b
DRAW_TEXT_WITH_STRING(textPlacement, textStyle, "DBG_STRING",output)
ENDPROC
#ENDIF