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

2477 lines
90 KiB
XML
Executable File

USING "penthouse_arcade_cabinet_common.sch"
// ------------------------------ CONSTANTS ------------------------------
//~~~~~ Grid & Positioning ~~~~~
CONST_INT ciSCGW_MAX_GRID_POSITIONS_X 6
CONST_INT ciSCGW_MAX_GRID_POSITIONS_Y 4
CONST_INT ciSCGW_GRIDBS_LENGTH 4
CONST_FLOAT cfSCGW_GRID_POS_X_OFFSET 0.138020667
CONST_FLOAT cfSCGW_GRID_POS_X_INCR 0.1041665
CONST_FLOAT cfSCGW_GRID_POS_Y_OFFSET 0.06851837
CONST_FLOAT cfSCGW_GRID_POS_Y_INCR 0.1851855
CONST_FLOAT cfSCGW_GRID_SCALE_X 0.070833
CONST_FLOAT cfSCGW_GRID_SCALE_Y 0.125926
CONST_FLOAT cfSCGW_GRID_SPRITE_SCALE_X 0.104167
CONST_FLOAT cfSCGW_GRID_SPRITE_SCALE_Y 0.185185
CONST_INT ciSCGW_MAX_GRID_SPRITES 24
CONST_INT ciSCGW_MAX_PLAYER_POSITIONS_X 13
CONST_INT ciSCGW_MAX_PLAYER_POSITIONS_Y 9
CONST_INT ciSCGW_PLAYER_GRID_AXIS_X 0
CONST_INT ciSCGW_PLAYER_GRID_AXIS_Y 1
CONST_INT ciSCGW_PLAYER_GRID_AXIS_MAX 2
CONST_FLOAT cfSCGW_PLAYER_POS_X_OFFSET 0.138020667
CONST_FLOAT cfSCGW_PLAYER_POS_X_INCR 0.0520835
CONST_FLOAT cfSCGW_PLAYER_POS_Y_OFFSET 0.06851837
CONST_FLOAT cfSCGW_PLAYER_POS_Y_INCR 0.0925925
CONST_INT ciSCGW_CORNER_BOTTOM_LEFT 0
CONST_INT ciSCGW_CORNER_TOP_LEFT 1
CONST_INT ciSCGW_CORNER_TOP_RIGHT 2
CONST_INT ciSCGW_CORNER_BOTTOM_RIGHT 3
CONST_INT ciSCGW_MAX_CORNERS 4
CONST_INT ciSCGW_GRID_DIRECTION_UP 0
CONST_INT ciSCGW_GRID_DIRECTION_DOWN 1
CONST_INT ciSCGW_GRID_DIRECTION_LEFT 2
CONST_INT ciSCGW_GRID_DIRECTION_RIGHT 3
//~~~~~ Gangs & Ownership ~~~~~
CONST_INT ciSCGW_GANG_NONE -1
CONST_INT ciSCGW_GANG_GREEN 0
CONST_INT ciSCGW_GANG_PURPLE 1
CONST_INT ciSCGW_GANG_YELLOW 2
CONST_INT ciSCGW_GANG_BLUE 3
CONST_INT ciSCGW_GANG_MAX 4
CONST_INT ciSCGW_TERRITORY_ANIM_OUT 300
CONST_INT ciSCGW_TERRITORY_ANIM_IN 600
CONST_INT ciSCGW_OWNERSHIP_LINK_DOWN 0
CONST_INT ciSCGW_OWNERSHIP_LINK_RIGHT 1
CONST_INT ciSCGW_OWNERSHIP_LINK_MAX 2
CONST_FLOAT cfSCGW_GANG_SPRAY_SPRITE_SCALE_X 0.070833
CONST_FLOAT cfSCGW_GANG_SPRAY_SPRITE_SCALE_Y 0.125926
//~~~~~ Players ~~~~~
CONST_INT ciSCGW_MAX_PLAYERS 4
CONST_INT ciSCGW_PLAYER_GRID_SPEED 700
CONST_FLOAT cfSCGW_BASE_SPEED 1.0
CONST_FLOAT cfSCGW_BOOST_SPEED 0.75
CONST_INT ciSCGW_PLAYER_CHANGE_DIRECTION_TIME 100
CONST_INT ciSCGW_MAX_PLAYER_HEALTH 8
CONST_INT ciSCGW_DAMAGE_FLASH_TIME 1000
CONST_INT ciSCGW_RESPAWN_TIME 3500
CONST_INT ciSCGW_WASTED_TIME 2500
CONST_INT ciSCGW_RESPAWNING_TIME 1000
CONST_INT ciSCGW_RESPAWN_FIGHT_TIME 1000
CONST_INT ciSCGW_NO_RESPAWN_GRACE_PERIOD 1000
CONST_INT ciSCGW_PLAYER_WALK_FRAMES 12
CONST_FLOAT cfSCGW_PLAYER_SPRITE_SCALE_X 0.033333
CONST_FLOAT cfSCGW_PLAYER_SPRITE_SCALE_Y 0.059259
CONST_FLOAT cfSCGW_DEAD_PLAYER_SPRITE_SCALE_X 0.033333
CONST_FLOAT cfSCGW_DEAD_PLAYER_SPRITE_SCALE_Y 0.059259
CONST_FLOAT cfSCGW_TRAIL_SPRITE_SCALE_X 0.052083333
CONST_FLOAT cfSCGW_TRAIL_SPRITE_SCALE_Y 0.029629630
CONST_FLOAT cfSCGW_PLAYER_DAMAGE_FLASH_MOD 0.35
CONST_INT ciSCGW_PLAYER_DAMAGE_FLASH_AMOUNT 150
CONST_INT ciSCGW_PLAYER_DAMAGE_FLASH_MAX 255
CONST_FLOAT cfSCGW_MUZZLE_FLARE_PIXEL_OFFSET_X_SMALL 7.0
CONST_FLOAT cfSCGW_MUZZLE_FLARE_PIXEL_OFFSET_Y_SMALL -36.0
CONST_FLOAT cfSCGW_MUZZLE_FLARE_PIXEL_OFFSET_X_LARGE 5.0
CONST_FLOAT cfSCGW_MUZZLE_FLARE_PIXEL_OFFSET_Y_LARGE -40.0
CONST_FLOAT cfSCGW_MUZZLE_FLARE_SCALE_X 0.016666667
CONST_FLOAT cfSCGW_MUZZLE_FLARE_SCALE_Y 0.029629630
CONST_FLOAT cfSCGW_PLAYER_SPEED_OFFSET_X 0.002604167
CONST_FLOAT cfSCGW_PLAYER_SPEED_OFFSET_Y 0.004629630
CONST_INT ciSCGW_MUZZLE_FLARE_ANIM_FRAMES 3
CONST_INT ciSCGW_RESPAWNING_NO_CARS_X_SCORE 25
CONST_INT ciSCGW_RESPAWNING_NO_CARS_Y_SCORE 25
CONST_INT ciSCGW_RESPAWNING_NO_PLAYERS_X_SCORE 25
CONST_INT ciSCGW_RESPAWNING_NO_PLAYERS_Y_SCORE 25
CONST_INT ciSCGW_RESPAWNING_TOTAL_SCORE 100
//~~~~~ Rounds ~~~~~
CONST_INT ciSCGW_MAX_ROUNDS ciSCGW_MAX_PLAYERS + 1
CONST_INT ciSCGW_START_TIME_OFFSET 5000
CONST_INT ciSCGW_MATCH_LENGTH 120000
CONST_INT ciSCGW_ROUND_RESULT_TIME 5000
//~~~~~ Explosions ~~~~~
CONST_INT ciSCGW_MAX_EXPLOSIONS 6
CONST_FLOAT cfSCGW_EXPLOSION_SPRITE_SCALE_X 0.066667
CONST_FLOAT cfSCGW_EXPLOSION_SPRITE_SCALE_Y 0.118519
CONST_INT ciSCGW_EXPLOSION_FRAMES 9
//~~~~~ Input ~~~~~
CONST_INT ciSCGW_INPUT_NONE -1
CONST_INT ciSCGW_INPUT_MOVE_UP 0
CONST_INT ciSCGW_INPUT_MOVE_DOWN 1
CONST_INT ciSCGW_INPUT_MOVE_LEFT 2
CONST_INT ciSCGW_INPUT_MOVE_RIGHT 3
CONST_INT ciSCGW_INPUT_TURN_UP 4
CONST_INT ciSCGW_INPUT_TURN_DOWN 5
CONST_INT ciSCGW_INPUT_TURN_LEFT 6
CONST_INT ciSCGW_INPUT_TURN_RIGHT 7
CONST_INT ciSCGW_INPUT_SHOOT 8
CONST_INT ciSCGW_HOLD_TO_QUIT_TIME 1000
//~~~~~ Weapons & Projectiles ~~~~~
CONST_INT ciSCGW_MAX_PLAYER_SHOTS 2
CONST_INT ciSCGW_WEAPON_NONE 0
CONST_INT ciSCGW_WEAPON_PISTOL 1
CONST_INT ciSCGW_WEAPON_UZI 2
CONST_INT ciSCGW_WEAPON_AK47 3
CONST_INT ciSCGW_WEAPON_ROCKET 4
CONST_INT ciSCGW_WEAPON_SHOTGUN 5
CONST_INT ciSCGW_WEAPON_MAX 6
CONST_INT ciSCGW_PISTOL_SHOT_TIME_PER_GRID 300
CONST_INT ciSCGW_PISTOL_SHOT_GRID_RANGE 2
CONST_INT ciSCGW_PISTOL_SHOT_INTERVAL 700
CONST_INT ciSCGW_PISTOL_SHOT_DAMAGE 2
CONST_INT ciSCGW_UZI_SHOT_TIME_PER_GRID 300
CONST_INT ciSCGW_UZI_SHOT_GRID_RANGE 1
CONST_INT ciSCGW_UZI_SHOT_INTERVAL 325
CONST_INT ciSCGW_UZI_SHOT_DAMAGE 1
CONST_INT ciSCGW_AK47_SHOT_TIME_PER_GRID 200
CONST_INT ciSCGW_AK47_SHOT_GRID_RANGE 3
CONST_INT ciSCGW_AK47_SHOT_INTERVAL 650
CONST_INT ciSCGW_AK47_SHOT_DAMAGE 2
CONST_INT ciSCGW_ROCKET_SHOT_TIME_PER_GRID 525
CONST_INT ciSCGW_ROCKET_SHOT_GRID_RANGE 5
CONST_INT ciSCGW_ROCKET_SHOT_INTERVAL 2000
CONST_INT ciSCGW_ROCKET_SHOT_DAMAGE 8
CONST_INT ciSCGW_SHOTGUN_SHOT_TIME_PER_GRID 300
CONST_INT ciSCGW_SHOTGUN_SHOT_GRID_RANGE 2
CONST_INT ciSCGW_SHOTGUN_SHOT_INTERVAL 1000
CONST_INT ciSCGW_SHOTGUN_SHOT_DAMAGE 4
CONST_FLOAT cfSCGW_BULLET_SPRITE_SCALE_X 0.004166667
CONST_FLOAT cfSCGW_BULLET_SPRITE_SCALE_Y 0.011111111
CONST_FLOAT cfSCGW_ROCKET_SPRITE_SCALE_X 0.004166667
CONST_FLOAT cfSCGW_ROCKET_SPRITE_SCALE_Y 0.033333333
CONST_INT ciSCGW_ROCKET_SPRITE_FRAMES 3
//~~~~~ Pickups ~~~~~
CONST_INT ciSCGW_MAX_SPAWNED_PICKUPS 7
CONST_INT ciSCGW_PICKUP_DURATION 17500
CONST_INT ciSCGW_PICKUP_SPAWN_INTERVAL 20000
CONST_INT ciSCGW_PICKUP_COLLECTION_TIME 1250
CONST_INT ciSCGW_PICKUPS_NONE -1
CONST_INT ciSCGW_PICKUPS_HEALTH 0
CONST_INT ciSCGW_PICKUPS_SPEED 1
CONST_INT ciSCGW_PICKUPS_GANG_CARS 2
CONST_INT ciSCGW_PICKUPS_PISTOL 3
CONST_INT ciSCGW_PICKUPS_UZI 4
CONST_INT ciSCGW_PICKUPS_AK47 5
CONST_INT ciSCGW_PICKUPS_ROCKET 6
CONST_INT ciSCGW_PICKUPS_SHOTGUN 7
CONST_INT ciSCGW_PICKUPS_MAX 8
CONST_INT ciSCGW_HEALTH_PICKUP_VALUE 4
CONST_INT ciSCGW_SPEED_PICKUP_VALUE 10
CONST_FLOAT cfSCGW_PICKUP_SPRITE_SCALE_X 0.033333
CONST_FLOAT cfSCGW_PICKUP_SPRITE_SCALE_Y 0.059259
CONST_FLOAT cfSCGW_PICKUP_SCALE_SIN_MOD 0.2
CONST_FLOAT cfSCGW_PICKUP_SCALE_MOD 0.15
CONST_INT ciSCGW_MAX_SUDDEN_DEATH_PICKUP_GROUPS 5
CONST_INT ciSCGW_MAX_STARTING_PICKUP_GROUPS 3
CONST_INT ciSCGW_MAX_MID_GAME_PICKUP_GROUPS 5
CONST_INT ciSCGW_MAX_LATE_GAME_PICKUP_GROUPS 5
CONST_INT ciSCGW_MAX_SUDDEN_DEATH_CENTER_PICKUPS 4
CONST_INT ciSCGW_PICKUP_POSITION_0_0 28
CONST_INT ciSCGW_PICKUP_POSITION_1_0 30
CONST_INT ciSCGW_PICKUP_POSITION_2_0 32
CONST_INT ciSCGW_PICKUP_POSITION_3_0 34
CONST_INT ciSCGW_PICKUP_POSITION_4_0 36
CONST_INT ciSCGW_PICKUP_POSITION_0_1 54
CONST_INT ciSCGW_PICKUP_POSITION_1_1 56
CONST_INT ciSCGW_PICKUP_POSITION_2_1 58
CONST_INT ciSCGW_PICKUP_POSITION_3_1 60
CONST_INT ciSCGW_PICKUP_POSITION_4_1 62
CONST_INT ciSCGW_PICKUP_POSITION_0_2 80
CONST_INT ciSCGW_PICKUP_POSITION_1_2 82
CONST_INT ciSCGW_PICKUP_POSITION_2_2 84
CONST_INT ciSCGW_PICKUP_POSITION_3_2 86
CONST_INT ciSCGW_PICKUP_POSITION_4_2 88
//~~~~~ Vehicles ~~~~~
CONST_INT ciSCGW_MAX_ACTIVE_VEHICLES 3
CONST_INT ciSCGW_MAX_GANG_BACKUP_VEHICLES 2
CONST_INT ciSCGW_MAX_VEHICLE_TYPES 9
CONST_INT ciSCGW_AMBIENT_VEHICLE_TYPES 5
CONST_INT ciSCGW_VEHICLE_INTERVAL 15000
CONST_INT ciSCGW_VEHICLE_DELAY 1000
CONST_INT ciSCGW_VEHICLE_GRID_SPEED 650
CONST_INT ciSCGW_VEHICLE_DAMAGE ciSCGW_MAX_PLAYER_HEALTH
CONST_INT ciSCGW_VEHICLE_TYPE_ICE_CREAM 0
CONST_INT ciSCGW_VEHICLE_TYPE_AMBULANCE 1
CONST_INT ciSCGW_VEHICLE_TYPE_POLICE 2
CONST_INT ciSCGW_VEHICLE_TYPE_FIRE 3
CONST_INT ciSCGW_VEHICLE_TYPE_TANK 4
CONST_INT ciSCGW_VEHICLE_TYPE_GANG_0 5
CONST_INT ciSCGW_VEHICLE_TYPE_GANG_1 6
CONST_INT ciSCGW_VEHICLE_TYPE_GANG_2 7
CONST_INT ciSCGW_VEHICLE_TYPE_GANG_3 8
CONST_FLOAT cfSCGW_VEHICLE_ALERT_SCALE_X 0.020833333
CONST_FLOAT cfSCGW_VEHICLE_ALERT_SCALE_Y 0.018518519
CONST_FLOAT cfSCGW_VEHICLE_ALERT_TOP_Y_OFFSET -0.011
CONST_FLOAT cfSCGW_VEHICLE_ALERT_BOTTOM_Y_OFFSET 0.023
CONST_FLOAT cfSCGW_VEHICLE_ALERT_LEFT_0_X_OFFSET -0.011
CONST_FLOAT cfSCGW_VEHICLE_ALERT_LEFT_2_X_OFFSET -0.02275
CONST_FLOAT cfSCGW_VEHICLE_ALERT_LEFT_4_X_OFFSET -0.02375
CONST_FLOAT cfSCGW_VEHICLE_ALERT_LEFT_6_X_OFFSET -0.01975
CONST_FLOAT cfSCGW_VEHICLE_ALERT_LEFT_8_X_OFFSET -0.006
CONST_FLOAT cfSCGW_VEHICLE_ALERT_RIGHT_0_X_OFFSET 0.00975
CONST_FLOAT cfSCGW_VEHICLE_ALERT_RIGHT_2_X_OFFSET 0.02275
CONST_FLOAT cfSCGW_VEHICLE_ALERT_RIGHT_4_X_OFFSET 0.02275
CONST_FLOAT cfSCGW_VEHICLE_ALERT_RIGHT_6_X_OFFSET 0.018
CONST_FLOAT cfSCGW_VEHICLE_ALERT_RIGHT_8_X_OFFSET 0.004
//~~~~~ Local Bitset ~~~~~
CONST_INT ciSCGW_LOCALBS_CURRENT_MOVE_PROCESSED_HALF 0
CONST_INT ciSCGW_LOCALBS_CURRENT_MOVE_PROCESSED 1
CONST_INT ciSCGW_LOCALBS_DIED_THIS_ROUND 2
CONST_INT ciSCGW_LOCALBS_TITLE_MUSIC_STARTED 3
CONST_INT ciSCGW_LOCALBS_CURRENT_MOVE_DIRECTION_CHANGED 4
CONST_INT ciSCGW_LOCALBS_FIRST_MOVE_DONE 5
CONST_INT ciSCGW_LOCALBS_STARTED_RESPAWNING 6
//~~~~~ Vibration ~~~~~
CONST_INT ciSCGW_VIB_SHOOT_DURATION 50
CONST_INT ciSCGW_VIB_SHOOT_FREQ 100
CONST_INT ciSCGW_VIB_CAR_HIT_DURATION 1000
CONST_INT ciSCGW_VIB_CAR_HIT_FREQ 200
CONST_INT ciSCGW_VIB_HIT_DURATION 250
CONST_INT ciSCGW_VIB_HIT_FREQ 200
CONST_INT ciSCGW_VIB_PICKUP_DURATION 100
CONST_INT ciSCGW_VIB_PICKUP_FREQ 50
CONST_INT ciSCGW_VIB_EXPLODE_DURATION 1000
CONST_INT ciSCGW_VIB_EXPLODE_FREQ 100
//~~~~~ HUD & UI ~~~~~
CONST_FLOAT cfSCGW_PLAY_AREA_WIDTH 0.658333
CONST_FLOAT cfSCGW_FACADE_WIDTH 0.156250000
CONST_FLOAT cfSCGW_FACADE_HEIGHT 0.930555556
CONST_FLOAT cfSCGW_FACADE_POS_X 0.085417
CONST_FLOAT cfSCGW_FACADE_POS_Y 0.5
CONST_FLOAT cfSCGW_FACADE_TOP_HEIGHT 0.069444444
CONST_FLOAT cfSCGW_TITLE_TEXT_SCALE 1.0
CONST_FLOAT cfSCGW_TITLE_TEXT_POSITION_Y 0.05
CONST_FLOAT cfSCGW_TOP_TEXT_SCALE 1.0
TWEAK_FLOAT cfSCGW_TOP_TEXT_Y_POS 0.083
TWEAK_FLOAT cfSCGW_TOP_SCORE_OFFSET 0.105
CONST_FLOAT cfSCGW_TOP_HUD_OFFSET_Y 0.069444
CONST_FLOAT cfSCGW_EXTRA_ROUND_COUNT_PADDING 0.004629630
CONST_FLOAT cfSCGW_TOP_HUD_BACKGROUND_OFFSET_Y 0.0356482
CONST_FLOAT cfSCGW_TOP_HUD_BACKGROUND_SCALE_X 0.658333
CONST_FLOAT cfSCGW_TOP_HUD_BACKGROUND_SCALE_Y 0.071296
CONST_FLOAT cfSCGW_TOP_HUD_DIVIDER_OFFSET_Y 0.072685
CONST_FLOAT cfSCGW_TOP_HUD_DIVIDER_SCALE_X 0.658333
CONST_FLOAT cfSCGW_TOP_HUD_DIVIDER_SCALE_Y 0.002778
CONST_INT ciSCGW_MAX_HEALTH_BARS 8
CONST_FLOAT cfSCGW_TOP_HUD_GANG_0_OFFSET_X 0.195313
CONST_FLOAT cfSCGW_TOP_HUD_GANG_1_OFFSET_X 0.325521
CONST_FLOAT cfSCGW_TOP_HUD_GANG_2_OFFSET_X 0.547396
CONST_FLOAT cfSCGW_TOP_HUD_GANG_3_OFFSET_X 0.677604
CONST_FLOAT cfSCGW_TOP_HUD_FRAME_Y_OFFSET 0.041666833
CONST_FLOAT cfSCGW_TOP_HUD_FRAME_SCALE_X 0.127083
CONST_FLOAT cfSCGW_TOP_HUD_FRAME_SCALE_Y 0.059259
CONST_FLOAT cfSCGW_TOP_HUD_PORTRAIT_Y_OFFSET 0.041666833
CONST_FLOAT cfSCGW_TOP_HUD_PORTRAIT_SCALE_X 0.033333
CONST_FLOAT cfSCGW_TOP_HUD_PORTRAIT_SCALE_Y 0.059259
CONST_FLOAT cfSCGW_TOP_HUD_MIC_X_OFFSET 0.026563
CONST_FLOAT cfSCGW_TOP_HUD_MIC_Y_OFFSET 0.047222333
CONST_FLOAT cfSCGW_TOP_HUD_MIC_SCALE_X 0.008333
CONST_FLOAT cfSCGW_TOP_HUD_MIC_SCALE_Y 0.014815
CONST_FLOAT cfSCGW_TOP_HUD_HEALTH_X_OFFSET 0.035417
CONST_FLOAT cfSCGW_TOP_HUD_HEALTH_Y_OFFSET 0.012037333
CONST_FLOAT cfSCGW_TOP_HUD_HEALTH_SCALE_X 0.006250
CONST_FLOAT cfSCGW_TOP_HUD_HEALTH_SCALE_Y 0.059259
CONST_FLOAT cfSCGW_TOP_HUD_ROUNDS_OFFSET_X -0.013541334
TWEAK_FLOAT cfSCGW_TOP_HUD_ROUNDS_OFFSET_Y -0.00162963
CONST_FLOAT cfSCGW_TOP_HUD_ROUNDS_SCALE_X 0.013541333
CONST_FLOAT cfSCGW_TOP_HUD_ROUNDS_SCALE_Y 0.024074259
CONST_INT ciSCGW_COUNTDOWN_BAIL_TIME -1500
CONST_INT ciSCGW_COUNTDOWN_GO_TIME 0
CONST_INT ciSCGW_COUNTDOWN_1_TIME 1000
CONST_INT ciSCGW_COUNTDOWN_2_TIME 2000
CONST_INT ciSCGW_COUNTDOWN_3_TIME 3000
CONST_INT ciSCGW_COUNTDOWN_ROUND_TIME 4500
CONST_INT ciSCGW_ALLOW_TERRITORY_HELP_TIME 3000
CONST_FLOAT cfSCGW_COUNTDOWN_SPRITE_SCALE_X 0.066666667
CONST_FLOAT cfSCGW_COUNTDOWN_SPRITE_SCALE_Y 0.148148148
CONST_FLOAT cfSCGW_FIGHT_SPRITE_SCALE_X 0.266666667
CONST_FLOAT cfSCGW_FIGHT_SPRITE_SCALE_Y 0.148148148
CONST_FLOAT cfSCGW_ROUND_SPRITE_SCALE_X 0.312500000
CONST_FLOAT cfSCGW_ROUND_SPRITE_SCALE_Y 0.148148148
CONST_FLOAT cfSCGW_ROUND_WINNER_SPRITE_SCALE_X 0.312500000
CONST_FLOAT cfSCGW_ROUND_WINNER_SPRITE_SCALE_Y 0.240740741
CONST_FLOAT cfSCGW_WASTED_SPRITE_SCALE_X 0.312500000
CONST_FLOAT cfSCGW_WASTED_SPRITE_SCALE_Y 0.148148148
CONST_FLOAT cfSCGW_READY_SPRITE_SCALE_X 0.312500000
CONST_FLOAT cfSCGW_READY_SPRITE_SCALE_Y 0.148148148
TWEAK_FLOAT cfSCGW_CENTER_TEXT_OFFSET_Y -0.005
TWEAK_FLOAT cfSCGW_ROUND_WINNER_TEXT_OFFSET_Y -0.016
CONST_INT ciSCGW_COUNTDOWN_ALPHA 153
CONST_INT ciSCGW_WASTED_ALPHA 102
CONST_INT ciSCGW_WIN_ALPHA 102
CONST_INT ciSCGW_GANG_READY_JUST_JOINED_TIME 1000
CONST_INT ciSCGW_GANG_READY_JUST_JOINED_ALPHA 125
CONST_INT ciSCGW_GANG_ALL_READY_DELAY 1500
CONST_FLOAT cfSCGW_GANG_READY_SCALE_X 0.162500000
CONST_FLOAT cfSCGW_GANG_READY_SCALE_Y 0.777777778
CONST_FLOAT cfSCGW_GANG_READY_RECT_OFFSET 0.050000000
CONST_FLOAT cfSCGW_GANG_READY_ARROW_POS_Y 0.143518518
CONST_FLOAT cfSCGW_GANG_READY_ARROW_SCALE_X 0.162500000
CONST_FLOAT cfSCGW_GANG_READY_ARROW_SCALE_Y 0.051851852
CONST_FLOAT cfSCGW_GANG_READY_ARROW_FLASH_MOD 0.25
TWEAK_FLOAT cfSCGW_GANG_READY_TEXT_POS_Y 0.23
TWEAK_FLOAT cfSCGW_GANG_READY_TEXT_SCALE 0.95
TWEAK_FLOAT cfSCGW_GANG_PRESS_START_TEXT_POS_Y 0.885
TWEAK_FLOAT cfSCGW_GANG_PRESS_START_TEXT_SCALE 0.65
TWEAK_FLOAT cfSCGW_GANG_PLAYER_NAME_TEXT_POS_Y 0.845
TWEAK_FLOAT cfSCGW_GANG_PLAYER_NAME_TEXT_SCALE 0.5
CONST_FLOAT cfSCGW_GANG_READY_POS_X_0 0.255208334
CONST_FLOAT cfSCGW_GANG_READY_POS_Y_0 0.456481481
CONST_FLOAT cfSCGW_GANG_READY_POS_X_1 0.418229167
CONST_FLOAT cfSCGW_GANG_READY_POS_Y_1 0.456481481
CONST_FLOAT cfSCGW_GANG_READY_POS_X_2 0.581770833
CONST_FLOAT cfSCGW_GANG_READY_POS_Y_2 0.456481481
CONST_FLOAT cfSCGW_GANG_READY_POS_X_3 0.744791666
CONST_FLOAT cfSCGW_GANG_READY_POS_Y_3 0.456481481
CONST_FLOAT cfSCGW_GAME_WINNER_TEXT_SCALE_X 0.312500000
CONST_FLOAT cfSCGW_GAME_WINNER_TEXT_SCALE_Y 0.148148148
CONST_FLOAT cfSCGW_GAME_WINNER_TEXT_START_OFFSET_Y -0.050000000
CONST_INT ciSCGW_GAME_WINNER_TEXT_FRAMES 4
CONST_FLOAT cfSCGW_GAME_WINNER_BLUR_SCALE_X 0.312500000
CONST_FLOAT cfSCGW_GAME_WINNER_BLUR_SCALE_Y 0.148148148
CONST_INT ciSCGW_GAME_WINNER_BLUR_FRAMES 8
CONST_FLOAT cfSCGW_GAME_WINNER_GRAFF_SCALE_X 0.312500000
CONST_FLOAT cfSCGW_GAME_WINNER_GRAFF_SCALE_Y 0.148148148
CONST_FLOAT cfSCGW_GAME_WINNER_GRAFF_OFFSET_Y 0.074074074
CONST_INT ciSCGW_GAME_WINNER_GRAFF_FRAMES 10
CONST_FLOAT cfSCGW_SUDDEN_TEXT_SCALE_X 0.266666667
CONST_FLOAT cfSCGW_SUDDEN_TEXT_SCALE_Y 0.148148148
CONST_FLOAT cfSCGW_DEATH_TEXT_SCALE_X 0.266666667
CONST_FLOAT cfSCGW_DEATH_TEXT_SCALE_Y 0.114814815
CONST_FLOAT cfSCGW_DEATH_TEXT_OFFSET_Y 0.074074074
CONST_INT ciSCGW_SUDDEN_DEATH_TEXT_TIME 2250
CONST_FLOAT cfSCGW_TIMER_SIN_MOD 0.5058
TWEAK_FLOAT cfSCGW_DROP_SHADOW_OFFSET_X 0.001041667
TWEAK_FLOAT cfSCGW_DROP_SHADOW_OFFSET_Y 0.003703704
CONST_INT ciSCGW_READY_SPAM_DELAY 500
//~~~~~ Leaderboard ~~~~~
TWEAK_FLOAT cfSCGW_LBD_ENTRY_POSITION_POS_Y 0.205
TWEAK_FLOAT cfSCGW_LBD_ENTRY_POSITION_TEXT_SCALE 1.100
TWEAK_FLOAT cfSCGW_LBD_ENTRY_SCORE_POS_Y 0.260
TWEAK_FLOAT cfSCGW_LBD_ENTRY_SCORE_TEXT_SCALE 0.75
TWEAK_FLOAT cfSCGW_LBD_ENTRY_INITIALS_POS_Y 0.875
TWEAK_FLOAT cfSCGW_LBD_ENTRY_INITIALS_SPACING 0.025
TWEAK_FLOAT cfSCGW_LBD_ENTRY_INITIALS_TEXT_SCALE 0.95
TWEAK_FLOAT cfSCGW_LBD_TITLE_POS_Y 0.15
TWEAK_FLOAT cfSCGW_LBD_STARTING_POS_Y 0.220
TWEAK_FLOAT cfSCGW_LBD_POSITION_POS_X 0.370
TWEAK_FLOAT cfSCGW_LBD_INITIAL_3_POS_X 0.46875
TWEAK_FLOAT cfSCGW_LBD_INITIAL_2_POS_X 0.441145833
TWEAK_FLOAT cfSCGW_LBD_INITIAL_1_POS_X 0.413541666
TWEAK_FLOAT cfSCGW_LBD_SCORE_POS_X 0.695
TWEAK_FLOAT cfSCGW_LBD_TEXT_SCALE 1.0
TWEAK_FLOAT cfSCGW_LBD_SPACING_Y 0.06
CONST_FLOAT cfSCGW_LBD_BG_SCALE_X 0.660416667
CONST_FLOAT cfSCGW_LBD_BG_SCALE_Y 0.948148148
CONST_INT ciSCGW_LBD_DEFAULT_RANK 99
CONST_INT ciSCGW_RESEND_LEADERBOARD_REQUEST_TIME 5000
//~~~~~ Help Text ~~~~~
CONST_INT ciSCGW_HELP_BS_SHOWING_HELP_TEXT 0
CONST_INT ciSCGW_HELP_BS_MOVEMENT_HELP_SHOWN 1
CONST_INT ciSCGW_HELP_BS_SHOOTING_HELP_SHOWN 2
CONST_INT ciSCGW_HELP_BS_RESPAWN_HELP_SHOWN 3
CONST_INT ciSCGW_DEFAULT_HELP_TEXT_TIME 7500
//~~~~~ Animation ~~~~~
CONST_FLOAT cfSCGW_ANIM_FRAME_TIME 66.0
//~~~~~ Collision ~~~~~
CONST_FLOAT cfSCGW_COLLISION_OFFSET_X 0.008333333
CONST_FLOAT cfSCGW_COLLISION_OFFSET_Y 0.014814815
//~~~~~ Audio ~~~~~
//Bits for iAudioBS
CONST_INT ciSCGW_AUDIOBS_ROUND_DOOF_PLAYED 0
CONST_INT ciSCGW_AUDIOBS_3_DOOF_PLAYED 1
CONST_INT ciSCGW_AUDIOBS_2_DOOF_PLAYED 2
CONST_INT ciSCGW_AUDIOBS_1_DOOF_PLAYED 3
CONST_INT ciSCGW_AUDIOBS_FIGHT_DOOF_PLAYED 4
CONST_INT ciSCGW_AUDIOBS_COUNTDOWN_SOUND_PLAYED 5
CONST_INT ciSCGW_AUDIOBS_READY_SOUND_PLAYED 6
CONST_INT ciSCGW_AUDIOBS_WASTED_SOUND_PLAYED 7
CONST_INT ciSCGW_AUDIOBS_RESPAWN_FIGHT_SOUND_PLAYED 8
//~~~~~ Flyover Sprites ~~~~~
CONST_INT ciSCGW_FLYOVER_INTERVAL 22500
CONST_INT ciSCGW_FLYOVER_TYPE_BIRDS 0
CONST_INT ciSCGW_FLYOVER_TYPE_PLANE 1
CONST_INT ciSCGW_FLYOVER_TYPE_HELI 2
CONST_INT ciSCGW_FLYOVER_TYPE_MAX 3
CONST_FLOAT cfSCGW_FLYOVER_BIRDS_SPRITE_SCALE_X 0.033333333
CONST_FLOAT cfSCGW_FLYOVER_BIRDS_SPRITE_SCALE_Y 0.059259259
CONST_FLOAT cfSCGW_FLYOVER_BIRDS_SPRITE_SPEED_X -0.062500000
CONST_FLOAT cfSCGW_FLYOVER_BIRDS_SPRITE_SPEED_Y -0.111111111
CONST_FLOAT cfSCGW_FLYOVER_PLANE_SPRITE_SCALE_X 0.114583333
CONST_FLOAT cfSCGW_FLYOVER_PLANE_SPRITE_SCALE_Y 0.203703704
CONST_FLOAT cfSCGW_FLYOVER_PLANE_SPRITE_SPEED_X -0.062500000
CONST_FLOAT cfSCGW_FLYOVER_PLANE_SPRITE_SPEED_Y -0.111111111
CONST_FLOAT cfSCGW_FLYOVER_HELI_SPRITE_SCALE_X 0.114583333
CONST_FLOAT cfSCGW_FLYOVER_HELI_SPRITE_SCALE_Y 0.203703704
CONST_FLOAT cfSCGW_FLYOVER_HELI_SPRITE_SPEED_X 0.078125000
CONST_FLOAT cfSCGW_FLYOVER_HELI_SPRITE_SPEED_Y -0.138888889
//~~~~~ Damage Border ~~~~~
CONST_INT ciSCGW_DAMAGE_BORDER_V_SPRITES 4
CONST_INT ciSCGW_DAMAGE_BORDER_H_SPRITES 7
CONST_FLOAT cfSCGW_DAMAGE_BORDER_V_SPRITE_SCALE_X 0.033333333
CONST_FLOAT cfSCGW_DAMAGE_BORDER_V_SPRITE_SCALE_Y 0.237037037
CONST_FLOAT cfSCGW_DAMAGE_BORDER_H_SPRITE_SCALE_X 0.133333333
CONST_FLOAT cfSCGW_DAMAGE_BORDER_H_SPRITE_SCALE_Y 0.059259259
TWEAK_FLOAT cfSCGW_DAMAGE_BORDER_TOP_OFFSET_Y 0.154
TWEAK_FLOAT cfSCGW_DAMAGE_BORDER_BOTTOM_OFFSET_Y 0.09
TWEAK_FLOAT cfSCGW_DAMAGE_BORDER_LEFT_OFFSET_X 0.176
TWEAK_FLOAT cfSCGW_DAMAGE_BORDER_RIGHT_OFFSET_X 0.173
// ------------------------------ ENUMS ------------------------------
/// PURPOSE:
/// Defines values for the game's states on the client
ENUM SCGW_CLIENT_STATE
SCGW_CLIENT_STATE_INITIALISING = 0,
SCGW_CLIENT_STATE_REQUESTING_ASSETS,
SCGW_CLIENT_STATE_INTRO_VIDEO,
SCGW_CLIENT_STATE_GANG_SCREEN,
SCGW_CLIENT_STATE_LAUNCHING,
SCGW_CLIENT_STATE_INIT_ROUND,
SCGW_CLIENT_STATE_COUNTDOWN,
SCGW_CLIENT_STATE_RUNNING,
SCGW_CLIENT_STATE_ROUND_END_SCREEN,
SCGW_CLIENT_STATE_LBD_ENTRY,
SCGW_CLIENT_STATE_LBD,
SCGW_CLIENT_STATE_CLEANUP,
SCGW_CLIENT_STATE_FINISHED
ENDENUM
/// PURPOSE:
/// Defines values for the game's states on the server
ENUM SCGW_SERVER_STATE
SCGW_SERVER_STATE_INITIALISING = 0,
SCGW_SERVER_STATE_LAUNCHING,
SCGW_SERVER_STATE_INIT_ROUND,
SCGW_SERVER_STATE_COUNTDOWN,
SCGW_SERVER_STATE_RUNNING,
SCGW_SERVER_STATE_ROUND_END_SCREEN,
SCGW_SERVER_STATE_LEADERBOARD,
SCGW_SERVER_STATE_FINISHED
ENDENUM
/// PURPOSE:
/// Defines values for the state of each player in the game
ENUM SCGW_PLAYER_STATE
SCGW_PLAYER_STATE_INITIALISING = 0,
SCGW_PLAYER_STATE_WAITING_TO_START,
SCGW_PLAYER_STATE_ALIVE,
SCGW_PLAYER_STATE_DEAD,
SCGW_PLAYER_STATE_CANT_RESPAWN,
SCGW_PLAYER_STATE_FINISHED
ENDENUM
ENUM SCGW_MUSIC_EVENT
SCGW_MUSIC_EVENT_TITLE_START,
SCGW_MUSIC_EVENT_GAMEPLAY,
SCGW_MUSIC_EVENT_MID_ROUND,
SCGW_MUSIC_EVENT_SUDDEN_DEATH,
SCGW_MUSIC_EVENT_STOP_MUSIC
ENDENUM
#IF IS_DEBUG_BUILD
// ------------------------------ ENUM TO STRING HELPERS ------------------------------
FUNC STRING SCGW_DEBUG_GET_SERVER_STATE_AS_STRING(SCGW_SERVER_STATE eState)
SWITCH eState
CASE SCGW_SERVER_STATE_INITIALISING RETURN "SCGW_SERVER_STATE_INITIALISING"
CASE SCGW_SERVER_STATE_LAUNCHING RETURN "SCGW_SERVER_STATE_LAUNCHING"
CASE SCGW_SERVER_STATE_INIT_ROUND RETURN "SCGW_SERVER_STATE_INIT_ROUND"
CASE SCGW_SERVER_STATE_COUNTDOWN RETURN "SCGW_SERVER_STATE_COUNTDOWN"
CASE SCGW_SERVER_STATE_RUNNING RETURN "SCGW_SERVER_STATE_RUNNING"
CASE SCGW_SERVER_STATE_ROUND_END_SCREEN RETURN "SCGW_SERVER_STATE_ROUND_END_SCREEN"
CASE SCGW_SERVER_STATE_LEADERBOARD RETURN "SCGW_SERVER_STATE_LEADERBOARD"
CASE SCGW_SERVER_STATE_FINISHED RETURN "SCGW_SERVER_STATE_FINISHED"
ENDSWITCH
RETURN "INVALID SCGW_SERVER_STATE"
ENDFUNC
FUNC STRING SCGW_DEBUG_GET_CLIENT_STATE_AS_STRING(SCGW_CLIENT_STATE eState)
SWITCH eState
CASE SCGW_CLIENT_STATE_INITIALISING RETURN "SCGW_CLIENT_STATE_INITIALISING"
CASE SCGW_CLIENT_STATE_REQUESTING_ASSETS RETURN "SCGW_CLIENT_STATE_REQUESTING_ASSETS"
CASE SCGW_CLIENT_STATE_INTRO_VIDEO RETURN "SCGW_CLIENT_STATE_INTRO_VIDEO"
CASE SCGW_CLIENT_STATE_GANG_SCREEN RETURN "SCGW_CLIENT_STATE_GANG_SCREEN"
CASE SCGW_CLIENT_STATE_LAUNCHING RETURN "SCGW_CLIENT_STATE_LAUNCHING"
CASE SCGW_CLIENT_STATE_INIT_ROUND RETURN "SCGW_CLIENT_STATE_INIT_ROUND"
CASE SCGW_CLIENT_STATE_COUNTDOWN RETURN "SCGW_CLIENT_STATE_COUNTDOWN"
CASE SCGW_CLIENT_STATE_RUNNING RETURN "SCGW_CLIENT_STATE_RUNNING"
CASE SCGW_CLIENT_STATE_ROUND_END_SCREEN RETURN "SCGW_CLIENT_STATE_ROUND_END_SCREEN"
CASE SCGW_CLIENT_STATE_CLEANUP RETURN "SCGW_CLIENT_STATE_CLEANUP"
CASE SCGW_CLIENT_STATE_LBD_ENTRY RETURN "SCGW_CLIENT_STATE_LBD_ENTRY"
CASE SCGW_CLIENT_STATE_LBD RETURN "SCGW_CLIENT_STATE_LBD"
CASE SCGW_CLIENT_STATE_FINISHED RETURN "SCGW_CLIENT_STATE_FINISHED"
ENDSWITCH
RETURN "INVALID SCGW_CLIENT_STATE"
ENDFUNC
FUNC STRING SCGW_DEBUG_GET_PLAYER_STATE_AS_STRING(SCGW_PLAYER_STATE eState)
SWITCH eState
CASE SCGW_PLAYER_STATE_INITIALISING RETURN "SCGW_PLAYER_STATE_INITIALISING"
CASE SCGW_PLAYER_STATE_WAITING_TO_START RETURN "SCGW_PLAYER_STATE_WAITING_TO_START"
CASE SCGW_PLAYER_STATE_ALIVE RETURN "SCGW_PLAYER_STATE_ALIVE"
CASE SCGW_PLAYER_STATE_DEAD RETURN "SCGW_PLAYER_STATE_DEAD"
CASE SCGW_PLAYER_STATE_CANT_RESPAWN RETURN "SCGW_PLAYER_STATE_CANT_RESPAWN"
CASE SCGW_PLAYER_STATE_FINISHED RETURN "SCGW_PLAYER_STATE_FINISHED"
ENDSWITCH
RETURN "INVALID SCGW_PLAYER_STATE"
ENDFUNC
FUNC STRING SCGW_DEBUG_GET_SCGW_MUSIC_EVENT_AS_STRING(SCGW_MUSIC_EVENT eState)
SWITCH eState
CASE SCGW_MUSIC_EVENT_TITLE_START RETURN "SCGW_MUSIC_EVENT_TITLE_START"
CASE SCGW_MUSIC_EVENT_GAMEPLAY RETURN "SCGW_MUSIC_EVENT_GAMEPLAY"
CASE SCGW_MUSIC_EVENT_MID_ROUND RETURN "SCGW_MUSIC_EVENT_MID_ROUND"
CASE SCGW_MUSIC_EVENT_SUDDEN_DEATH RETURN "SCGW_MUSIC_EVENT_SUDDEN_DEATH"
CASE SCGW_MUSIC_EVENT_STOP_MUSIC RETURN "SCGW_MUSIC_EVENT_STOP_MUSIC"
ENDSWITCH
RETURN "INVALID SCGW_MUSIC_EVENT"
ENDFUNC
//~~~~~ Globals ~~~~~
FUNC STRING SCGW_DEBUG_GET_CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_AS_STRING(CASINO_ARCADE_STREET_CRIME_PLAYER_STATE eValue)
SWITCH eValue
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_NOT_PLAYING RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_NOT_PLAYING"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_INTRO RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_INTRO"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_READY_UP RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_READY_UP"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_COUNTDOWN RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_COUNTDOWN"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_PLAYING RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_PLAYING"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_DEAD RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_DEAD"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_DEAD_CANT_RESPAWN RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_DEAD_CANT_RESPAWN"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_ROUND_END_WON RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_ROUND_END_WON"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_ROUND_END_LOST RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_ROUND_END_LOST"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_GAME_END_WON RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_GAME_END_WON"
CASE CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_GAME_END_LOST RETURN "CASINO_ARCADE_STREET_CRIME_PLAYER_STATE_GAME_END_LOST"
ENDSWITCH
RETURN "INVALID CASINO_ARCADE_STREET_CRIME_PLAYER_STATE"
ENDFUNC
FUNC STRING SCGW_DEBUG_GET_CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_AS_STRING(CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION eValue)
SWITCH eValue
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_NONE RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_NONE"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_READY_UP RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_READY_UP"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_1 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_1"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_2 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_2"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_3 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_3"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_4 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_PLAYER_4"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_1 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_1"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_2 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_2"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_3 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_3"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_4 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_PLAYER_4"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_VEHICLE RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_KILLED_BY_VEHICLE"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_COLLECTED_PICKUP RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_COLLECTED_PICKUP"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_1 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_1"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_2 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_2"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_3 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_3"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_4 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_JOINED_PLAYER_4"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_1 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_1"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_2 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_2"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_3 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_3"
CASE CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_4 RETURN "CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION_WON_PLAYER_4"
ENDSWITCH
RETURN "INVALID CASINO_ARCADE_STREET_CRIME_THIS_FRAME_ACTION"
ENDFUNC
// ------------------------------ DEBUG STRUCTS ------------------------------
STRUCT SCGW_DEBUG_STRUCT
BOOL bDebugCreatedWidgets = FALSE
BOOL bDebugOnePlayerTest = FALSE
BOOL bDrawCollisionDebug = FALSE
BOOL bDisableSFX = FALSE
BOOL bDisableMusic = FALSE
BOOL bTriggerChallenges = FALSE
BOOL bCallVehicles = FALSE
WIDGET_GROUP_ID widgetGridMinigame
ENDSTRUCT
#ENDIF
// ------------------------------ STRUCTS ------------------------------
STRUCT SCGW_BROADCAST_VEHICLE_INSTANCE_STRUCT
INT iVehicleTime = -HIGHEST_INT
INT iVehicleOrigin
INT iVehicleDirection
INT iVehicleType
ENDSTRUCT
STRUCT SCGW_BROADCAST_PICKUP_STRUCT
INT iSpawnedPickupLocation = -1
INT iSpawnedPickupType = -1
INT iSpawnedPickupSpawnTime = -HIGHEST_INT
ENDSTRUCT
STRUCT SCGW_LEADERBOARD_STRUCT
INT iInitials = 0
INT iScore = -1
INT iPlayer = -1
ENDSTRUCT
STRUCT SCGW_ULTRAFAST_SERVER_DATA_STRUCT
INT iCurrentScore[ciSCGW_GANG_MAX]
ENDSTRUCT
/// PURPOSE:
/// Server Broadcast Data
STRUCT SCGW_SERVER_DATA_STRUCT
INT iGridGangOwnership[ciSCGW_MAX_GRID_POSITIONS_X][ciSCGW_MAX_GRID_POSITIONS_Y]
INT iGridSpriteIndexes[ciSCGW_MAX_GRID_POSITIONS_X][ciSCGW_MAX_GRID_POSITIONS_Y]
SCGW_BROADCAST_PICKUP_STRUCT sPickups[ciSCGW_MAX_SPAWNED_PICKUPS]
INT iLastPickupSpawnTime = -HIGHEST_INT
INT iPositionOwnershipBS[ciSCGW_GANG_MAX][ciSCGW_OWNERSHIP_LINK_MAX][ciSCGW_GRIDBS_LENGTH]
INT iGameWinner = -1
INT iRoundWinner[ciSCGW_MAX_ROUNDS]
INT iCurrentRound = 0
INT iNumRounds
INT iRoundScores[ciSCGW_MAX_ROUNDS]
SCGW_SERVER_STATE eCurrentServerState = SCGW_SERVER_STATE_INITIALISING
INT iStartTime = -HIGHEST_INT
INT iEndTime = -HIGHEST_INT
SCGW_BROADCAST_VEHICLE_INSTANCE_STRUCT sVehicles[ciSCGW_MAX_ACTIVE_VEHICLES]
INT iLastVehicleSpawnTime = -HIGHEST_INT
//TODO: Bitset
BOOL bSuddenDeath = FALSE
BOOL bAllDeadSuddenDeath = FALSE
BOOL bLeaderboardRecieved = FALSE
SCGW_LEADERBOARD_STRUCT sLeaderboard[ciCASINO_ARCADE_LEADERBOARD_POSITIONS]
INT iPlayerLeaderboardRanks[ciSCGW_MAX_PLAYERS]
ENDSTRUCT
STRUCT SCGW_BROADCAST_PROJECTILE_STRUCT
INT iShotTime = -HIGHEST_INT
VECTOR_2D vShotOrigin
INT iShotDirection
INT iShotWeaponType
ENDSTRUCT
STRUCT SCGW_ULTRAFAST_PLAYER_DATA_STRUCT
INT iPlayerPosition
INT iPreviousPlayerPosition
INT iLastMovementTime = -HIGHEST_INT
INT iLastMovementDirection
INT iFacingDirection
SCGW_BROADCAST_PROJECTILE_STRUCT sProjectiles[ciSCGW_MAX_PLAYER_SHOTS]
ENDSTRUCT
/// PURPOSE:
/// Player Broadcast Data
STRUCT SCGW_PLAYER_DATA_STRUCT
SCGW_PLAYER_STATE eCurrentPlayerState = SCGW_PLAYER_STATE_INITIALISING
FLOAT fMoveSpeed = cfSCGW_BASE_SPEED
INT iHealth = ciSCGW_MAX_PLAYER_HEALTH
INT iLastDamagedTime = -HIGHEST_INT
INT iLastRespawnTime = -HIGHEST_INT
INT iEquippedWeaponType = ciSCGW_WEAPON_NONE
INT iGang = ciSCGW_GANG_NONE
INT iLeaderboardInitials
INT iLeaderboardScore = 0
ENDSTRUCT
STRUCT SCGW_POSITION_DATA_STRUCT
VECTOR_2D vPlayAreaCorners[ciSCGW_MAX_CORNERS]
INT iPlayerStartPositions[ciSCGW_GANG_MAX][ciSCGW_PLAYER_GRID_AXIS_MAX]
ENDSTRUCT
STRUCT SCGW_WEAPON_DATA_STRUCT
STRING stPlayerSpriteName
INT iGridShotTime
INT iGridRange
INT iShotInterval
INT iShotDamage
ENDSTRUCT
STRUCT SCGW_VEHICLE_DATA_STRUCT
STRING stSpriteName
INT iMaxAnimFrames
VECTOR_2D vSpriteScale
ENDSTRUCT
STRUCT SCGW_PICKUP_DATA_STRUCT
STRING stSpriteName
INT iMaxAnimFrames
ENDSTRUCT
STRUCT SCGW_EXPLOSION_STRUCT
INT iAnimFrame = -1
VECTOR_2D vPosition
ENDSTRUCT
STRUCT SCGW_CLIENT_VEHICLE_INSTANCE_STRUCT
VECTOR_2D vActualVehiclePosition
VECTOR_2D vLastFrameVehiclePosition
INT iVehicleAnimationFrame
INT iVehicleLoopSoundId = -1
INT iVehicleWarningSoundId = -1
ENDSTRUCT
STRUCT SCGW_CLIENT_PROJECTILE_STRUCT
VECTOR_2D vActualBulletPosition
VECTOR_2D vLastFrameBulletPosition
ENDSTRUCT
STRUCT SCGW_CLIENT_PLAYER_STRUCT
VECTOR_2D vActualPlayerPosition
VECTOR_2D vLastFramePlayerPosition
INT iPlayerAnimFrame
INT iMuzzleFlashFrame = -1
INT iPlayerSoundId = -1
INT iWalkingSoundId = -1
INT iShotSoundId = -1
INT iDisplayHealth
SCGW_CLIENT_PROJECTILE_STRUCT sProjectiles[ciSCGW_MAX_PLAYER_SHOTS]
ENDSTRUCT
STRUCT SCGW_LOCAL_PLAYER_STRUCT
INT iLocalPart = -1
BOOL bIsHost
INT iSpeedBoostRemainingMoves = 0
INT iLastShotTime = -HIGHEST_INT
INT iDeathSoundId = -1
ENDSTRUCT
STRUCT SCGW_COLOUR_DATA_STRUCT
RGBA_COLOUR_STRUCT rgbaGangColours[ciSCGW_GANG_MAX]
RGBA_COLOUR_STRUCT rgbaSprite
RGBA_COLOUR_STRUCT rgbaHudBackground
RGBA_COLOUR_STRUCT rgbaBlack
RGBA_COLOUR_STRUCT rgbaWasted
ENDSTRUCT
/// PURPOSE:
/// Struct containing all data for the minigame
STRUCT SCGW_DATA_STRUCT
SCGW_POSITION_DATA_STRUCT sPositionData
SCGW_VEHICLE_DATA_STRUCT sVehicleData[ciSCGW_MAX_VEHICLE_TYPES]
SCGW_WEAPON_DATA_STRUCT sWeaponData[ciSCGW_WEAPON_MAX]
SCGW_PICKUP_DATA_STRUCT sPickupData[ciSCGW_PICKUPS_MAX]
SCGW_COLOUR_DATA_STRUCT sColours
SCGW_CLIENT_STATE eCurrentState = SCGW_CLIENT_STATE_INITIALISING
INT iLocalBS
INT iBotBS[ciSCGW_MAX_PLAYERS]
INT iActivePlayers
INT iConnectedPlayers
INT iGangPlayers[ciSCGW_GANG_MAX]
INT iGangPlayerJoinTimes[ciSCGW_GANG_MAX]
SCGW_EXPLOSION_STRUCT sExplosions[ciSCGW_MAX_EXPLOSIONS]
SCGW_LOCAL_PLAYER_STRUCT sLocalPlayer
SCGW_LOCAL_PLAYER_STRUCT sBotPlayer[ciSCGW_MAX_PLAYERS]
SCGW_CLIENT_PLAYER_STRUCT sPlayers[ciSCGW_MAX_PLAYERS]
SCGW_CLIENT_VEHICLE_INSTANCE_STRUCT sVehicles[ciSCGW_MAX_ACTIVE_VEHICLES]
INT iFinalizedShotsBS
INT iFinalizedShotsBSBot
INT iShotsLastFrame
INT iShotsLastFrameBot
INT iNextShotIndex = 0
INT iNextExplosionIndex = 0
INT iHiddenPickupsBS
INT iLastFramePickups
INT iPickupAnimFrame = 0
SCRIPT_TIMER tdWaitForPlayersTimer
SCRIPT_TIMER tdIntroDelayTimer
SCRIPT_TIMER tdSuddenDeathText
INT iLastFrameGangOwnership[ciSCGW_MAX_GRID_POSITIONS_X][ciSCGW_MAX_GRID_POSITIONS_Y]
INT iPreviousGangOwnership[ciSCGW_MAX_GRID_POSITIONS_X][ciSCGW_MAX_GRID_POSITIONS_Y]
INT iGangOwnershipLastChanged[ciSCGW_MAX_GRID_POSITIONS_X][ciSCGW_MAX_GRID_POSITIONS_Y]
INT iFrameTimeCounter
INT iUpdateFrames
INT iFrameTimeCounterHalf
INT iUpdateFramesHalf
INT iGameWinnerAnimFrame = 0
INT iRocketAnimFrame = 0
INT iHelpTextBitset
INT iCurrentHelpTextExpiry = -HIGHEST_INT
STRING stCurrentHelpText
INT iCurrentHelpTextValue = -1
BOOL bDoNotApplyPC = FALSE
STRING stGangSprites[ciSCGW_GANG_MAX]
BINK_MOVIE_ID binkIntro
INT iAmbienceSoundId = -1
INT iAudioBS
INT iNoTerritoryLoopSoundId = -1
INT iQuitTime = -HIGHEST_INT
INT iInitial = 0
INT iWinningPart = -1
INT iLastFrameWinningPart = -1
INT iLastLeaderboardRequest = -HIGHEST_INT
INT iLbdInitialProfanityToken = 0
INT iFlyoverTime = -HIGHEST_INT
INT iFlyoverType
VECTOR_2D vFlyoverPos
INT iReadyPressedTime = -HIGHEST_INT
INT iDisplayedHelpText = -1
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
#IF IS_DEBUG_BUILD
SCGW_DEBUG_STRUCT sDebug
#ENDIF
BOOL bCanAddBots
ENDSTRUCT
ENUM SCGW_BOT_STATE_AI
SCGW_BOT_STATE_AI_CAPTURE_BUILDING,
SCGW_BOT_STATE_AI_AVOID_VEHICLE,
SCGW_BOT_STATE_AI_COLLECT_PICKUP,
SCGW_BOT_STATE_AI_SUDDEN_DEATH
ENDENUM
STRUCT SCGW_BOT_DATA_STRUCT
SCGW_PLAYER_DATA_STRUCT SCGW_player
SCGW_ULTRAFAST_PLAYER_DATA_STRUCT SCGW_UF_Player
BOOL bActive = FALSE
BOOL bShouldShoot = FALSE
BOOL bTaskComplete = TRUE
INT iFaceDirection = -1
INT iBuildingToCaptureX = -1
INT iBuildingToCaptureY = -1
INT iBuildingToCaptureCorner = 0
INT iBuildingToCaptureCornerRandom = 0
INT iTargetPosX = -1
INT iTargetPosY = -1
INT iSuddenDeathTarget = -1
SCGW_BOT_STATE_AI eStateAI
ENDSTRUCT
// ------------------------------ VARIABLES ------------------------------
SCGW_DATA_STRUCT sSCGWData
SCGW_SERVER_DATA_STRUCT SCGW_ServerBD
SCGW_ULTRAFAST_SERVER_DATA_STRUCT SCGW_UF_ServerBD
SCGW_PLAYER_DATA_STRUCT SCGW_PlayerBD[ciSCGW_MAX_PLAYERS]
SCGW_ULTRAFAST_PLAYER_DATA_STRUCT SCGW_UF_PlayerBD[ciSCGW_MAX_PLAYERS]
SCGW_BOT_DATA_STRUCT SCGW_Bot[ciSCGW_MAX_PLAYERS]
// ------------------------------ DATA FILLERS ------------------------------
/// PURPOSE:
/// Initializes the server broadcast data before networking
PROC SCGW_PRE_DEFINE_SERVER_DATA()
INT i,j
FOR i = 0 TO ciSCGW_MAX_GRID_POSITIONS_X - 1
FOR j = 0 TO ciSCGW_MAX_GRID_POSITIONS_Y - 1
SCGW_ServerBD.iGridGangOwnership[i][j] = ciSCGW_GANG_NONE
ENDFOR
ENDFOR
FOR i = 0 TO ciSCGW_MAX_SPAWNED_PICKUPS - 1
SCGW_ServerBD.sPickups[i].iSpawnedPickupLocation = -1
SCGW_ServerBD.sPickups[i].iSpawnedPickupType = ciSCGW_PICKUPS_NONE
SCGW_ServerBD.sPickups[i].iSpawnedPickupSpawnTime = -HIGHEST_INT
ENDFOR
FOR i = 0 TO ciSCGW_MAX_ACTIVE_VEHICLES - 1
SCGW_ServerBD.sVehicles[i].iVehicleTime = -HIGHEST_INT
SCGW_ServerBD.sVehicles[i].iVehicleOrigin = -1
SCGW_ServerBD.sVehicles[i].iVehicleDirection = -1
SCGW_ServerBD.sVehicles[i].iVehicleType = -1
ENDFOR
FOR i = 0 TO ciSCGW_MAX_ROUNDS - 1
SCGW_ServerBD.iRoundWinner[i] = -1
ENDFOR
FOR i = 0 TO ciSCGW_MAX_PLAYERS - 1
SCGW_ServerBD.iPlayerLeaderboardRanks[i] = ciSCGW_LBD_DEFAULT_RANK
ENDFOR
ENDPROC
/// PURPOSE:
/// Initializes the player broadcast data before networking
PROC SCGW_PRE_DEFINE_PLAYER_DATA()
//NOTHING TO INITIALISE YET
ENDPROC
/// PURPOSE:
/// Initialises sSCGWData.sPositionData
PROC SCGW_INITIALIZE_POSITION_DATA_STRUCT()
//Play Area
sSCGWData.sPositionData.vPlayAreaCorners[ciSCGW_CORNER_BOTTOM_LEFT] = INIT_VECTOR_2D(0.170833, 0.909259 - 0.019444)
sSCGWData.sPositionData.vPlayAreaCorners[ciSCGW_CORNER_TOP_LEFT] = INIT_VECTOR_2D(0.170833, 0.109259 + 0.019444)
sSCGWData.sPositionData.vPlayAreaCorners[ciSCGW_CORNER_TOP_RIGHT] = INIT_VECTOR_2D(0.829167, 0.109259 + 0.019444)
sSCGWData.sPositionData.vPlayAreaCorners[ciSCGW_CORNER_BOTTOM_RIGHT] = INIT_VECTOR_2D(0.829167, 0.909259 - 0.019444)
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_GREEN][ciSCGW_PLAYER_GRID_AXIS_X] = 1
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_GREEN][ciSCGW_PLAYER_GRID_AXIS_Y] = 2
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_PURPLE][ciSCGW_PLAYER_GRID_AXIS_X] = ciSCGW_MAX_PLAYER_POSITIONS_X - 2
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_PURPLE][ciSCGW_PLAYER_GRID_AXIS_Y] = 2
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_YELLOW][ciSCGW_PLAYER_GRID_AXIS_X] = 1
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_YELLOW][ciSCGW_PLAYER_GRID_AXIS_Y] = ciSCGW_MAX_PLAYER_POSITIONS_Y - 3
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_BLUE][ciSCGW_PLAYER_GRID_AXIS_X] = ciSCGW_MAX_PLAYER_POSITIONS_X - 2
sSCGWData.sPositionData.iPlayerStartPositions[ciSCGW_GANG_BLUE][ciSCGW_PLAYER_GRID_AXIS_Y] = ciSCGW_MAX_PLAYER_POSITIONS_Y - 3
ENDPROC
/// PURPOSE:
/// Initialises sSCGWData.stGangSprites
PROC SCGW_INITIALIZE_GANGS()
sSCGWData.stGangSprites[ciSCGW_GANG_GREEN] = "green"
sSCGWData.stGangSprites[ciSCGW_GANG_PURPLE] = "purple"
sSCGWData.stGangSprites[ciSCGW_GANG_YELLOW] = "yellow"
sSCGWData.stGangSprites[ciSCGW_GANG_BLUE] = "blue"
ENDPROC
/// PURPOSE:
/// Initialises sSCGWData.sColours
PROC SCGW_INITIALIZE_COLOURS()
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaGangColours[ciSCGW_GANG_GREEN], 78, 187, 30)
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaGangColours[ciSCGW_GANG_PURPLE], 171, 0, 255)
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaGangColours[ciSCGW_GANG_YELLOW], 255, 228, 0)
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaGangColours[ciSCGW_GANG_BLUE], 35, 92, 255)
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaWasted, 221, 21, 10, 255)
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaSprite, 255, 255, 255, 255)
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaHudBackground, 55, 55, 55, 255)
INIT_RGBA_STRUCT(sSCGWData.sColours.rgbaBlack, 0, 0, 0, 255)
ENDPROC
/// PURPOSE:
/// Initialises sSCGWData.sVehicleData
PROC SCGW_INITIALIZE_VEHICLE_TYPES()
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_ICE_CREAM].stSpriteName = "ice_cream_van_"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_ICE_CREAM].iMaxAnimFrames = 1
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_ICE_CREAM].vSpriteScale.x = 0.033333
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_ICE_CREAM].vSpriteScale.y = 0.029630
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_AMBULANCE].stSpriteName = "ambulance_"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_AMBULANCE].iMaxAnimFrames = 2
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_AMBULANCE].vSpriteScale.X = 0.035417
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_AMBULANCE].vSpriteScale.Y = 0.029630
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_POLICE].stSpriteName = "police_"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_POLICE].iMaxAnimFrames = 2
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_POLICE].vSpriteScale.X = 0.033333
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_POLICE].vSpriteScale.Y = 0.025926
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_FIRE].stSpriteName = "fire_truck_"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_FIRE].iMaxAnimFrames = 2
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_FIRE].vSpriteScale.X = 0.045833
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_FIRE].vSpriteScale.Y = 0.029630
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_TANK].stSpriteName = "tank_"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_TANK].iMaxAnimFrames = 1
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_TANK].vSpriteScale.X = 0.041667
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_TANK].vSpriteScale.Y = 0.025926
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_0].stSpriteName = "gang_car_green"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_0].iMaxAnimFrames = 1
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_0].vSpriteScale.X = 0.033333
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_0].vSpriteScale.Y = 0.059259
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_1].stSpriteName = "gang_car_purple"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_1].iMaxAnimFrames = 1
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_1].vSpriteScale.X = 0.033333
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_1].vSpriteScale.Y = 0.059259
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_2].stSpriteName = "gang_car_yellow"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_2].iMaxAnimFrames = 1
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_2].vSpriteScale.X = 0.033333
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_2].vSpriteScale.Y = 0.059259
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_3].stSpriteName = "gang_car_blue"
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_3].iMaxAnimFrames = 1
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_3].vSpriteScale.X = 0.033333
sSCGWData.sVehicleData[ciSCGW_VEHICLE_TYPE_GANG_3].vSpriteScale.Y = 0.059259
ENDPROC
/// PURPOSE:
/// Initialises sSCGWData.sPickupData
PROC SCGW_INITIALIZE_PICKUP_TYPES()
sSCGWData.sPickupData[ciSCGW_PICKUPS_HEALTH].stSpriteName = "heart_anim_"
sSCGWData.sPickupData[ciSCGW_PICKUPS_HEALTH].iMaxAnimFrames = 10
sSCGWData.sPickupData[ciSCGW_PICKUPS_SPEED].stSpriteName = "speed_anim_"
sSCGWData.sPickupData[ciSCGW_PICKUPS_SPEED].iMaxAnimFrames = 10
sSCGWData.sPickupData[ciSCGW_PICKUPS_GANG_CARS].stSpriteName = "phone_anim_"
sSCGWData.sPickupData[ciSCGW_PICKUPS_GANG_CARS].iMaxAnimFrames = 10
sSCGWData.sPickupData[ciSCGW_PICKUPS_PISTOL].stSpriteName = "icon_pistol"
sSCGWData.sPickupData[ciSCGW_PICKUPS_PISTOL].iMaxAnimFrames = 0
sSCGWData.sPickupData[ciSCGW_PICKUPS_UZI].stSpriteName = "icon_uzi"
sSCGWData.sPickupData[ciSCGW_PICKUPS_UZI].iMaxAnimFrames = 0
sSCGWData.sPickupData[ciSCGW_PICKUPS_AK47].stSpriteName = "icon_rifle"
sSCGWData.sPickupData[ciSCGW_PICKUPS_AK47].iMaxAnimFrames = 0
sSCGWData.sPickupData[ciSCGW_PICKUPS_ROCKET].stSpriteName = "icon_rocket_launcher"
sSCGWData.sPickupData[ciSCGW_PICKUPS_ROCKET].iMaxAnimFrames = 0
sSCGWData.sPickupData[ciSCGW_PICKUPS_SHOTGUN].stSpriteName = "icon_shotgun"
sSCGWData.sPickupData[ciSCGW_PICKUPS_SHOTGUN].iMaxAnimFrames = 0
ENDPROC
/// PURPOSE:
/// Initialises sSCGWData.sWeaponData
PROC SCGW_INITIALIZE_WEAPON_TYPES()
sSCGWData.sWeaponData[ciSCGW_WEAPON_NONE].stPlayerSpriteName = ""
sSCGWData.sWeaponData[ciSCGW_WEAPON_NONE].iGridRange = 0
sSCGWData.sWeaponData[ciSCGW_WEAPON_NONE].iShotDamage = 0
sSCGWData.sWeaponData[ciSCGW_WEAPON_NONE].iShotInterval = 0
sSCGWData.sWeaponData[ciSCGW_WEAPON_NONE].iGridShotTime = 0
sSCGWData.sWeaponData[ciSCGW_WEAPON_PISTOL].stPlayerSpriteName = "gun_"
sSCGWData.sWeaponData[ciSCGW_WEAPON_PISTOL].iGridRange = ciSCGW_PISTOL_SHOT_GRID_RANGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_PISTOL].iShotDamage = ciSCGW_PISTOL_SHOT_DAMAGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_PISTOL].iShotInterval = ciSCGW_PISTOL_SHOT_INTERVAL
sSCGWData.sWeaponData[ciSCGW_WEAPON_PISTOL].iGridShotTime = ciSCGW_PISTOL_SHOT_TIME_PER_GRID
sSCGWData.sWeaponData[ciSCGW_WEAPON_UZI].stPlayerSpriteName = "uzi_"
sSCGWData.sWeaponData[ciSCGW_WEAPON_UZI].iGridRange = ciSCGW_UZI_SHOT_GRID_RANGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_UZI].iShotDamage = ciSCGW_UZI_SHOT_DAMAGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_UZI].iShotInterval = ciSCGW_UZI_SHOT_INTERVAL
sSCGWData.sWeaponData[ciSCGW_WEAPON_UZI].iGridShotTime = ciSCGW_UZI_SHOT_TIME_PER_GRID
sSCGWData.sWeaponData[ciSCGW_WEAPON_AK47].stPlayerSpriteName = "rifle_"
sSCGWData.sWeaponData[ciSCGW_WEAPON_AK47].iGridRange = ciSCGW_AK47_SHOT_GRID_RANGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_AK47].iShotDamage = ciSCGW_AK47_SHOT_DAMAGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_AK47].iShotInterval = ciSCGW_AK47_SHOT_INTERVAL
sSCGWData.sWeaponData[ciSCGW_WEAPON_AK47].iGridShotTime = ciSCGW_AK47_SHOT_TIME_PER_GRID
sSCGWData.sWeaponData[ciSCGW_WEAPON_ROCKET].stPlayerSpriteName = "rocket_"
sSCGWData.sWeaponData[ciSCGW_WEAPON_ROCKET].iGridRange = ciSCGW_ROCKET_SHOT_GRID_RANGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_ROCKET].iShotDamage = ciSCGW_ROCKET_SHOT_DAMAGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_ROCKET].iShotInterval = ciSCGW_ROCKET_SHOT_INTERVAL
sSCGWData.sWeaponData[ciSCGW_WEAPON_ROCKET].iGridShotTime = ciSCGW_ROCKET_SHOT_TIME_PER_GRID
sSCGWData.sWeaponData[ciSCGW_WEAPON_SHOTGUN].stPlayerSpriteName = "shotgun_"
sSCGWData.sWeaponData[ciSCGW_WEAPON_SHOTGUN].iGridRange = ciSCGW_SHOTGUN_SHOT_GRID_RANGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_SHOTGUN].iShotDamage = ciSCGW_SHOTGUN_SHOT_DAMAGE
sSCGWData.sWeaponData[ciSCGW_WEAPON_SHOTGUN].iShotInterval = ciSCGW_SHOTGUN_SHOT_INTERVAL
sSCGWData.sWeaponData[ciSCGW_WEAPON_SHOTGUN].iGridShotTime = ciSCGW_SHOTGUN_SHOT_TIME_PER_GRID
ENDPROC
// ------------------------------ HELPERS ------------------------------
/// PURPOSE:
/// Returns the grid position represented by iPosition
/// PARAMS:
/// iX - X position output to this variable
/// iY - Y position output to this variable
PROC SCGW_GET_POSITION_COORDS(INT iPosition, INT &iX, INT &iY)
iY = FLOOR(TO_FLOAT(iPosition) / ciSCGW_MAX_PLAYER_POSITIONS_X)
iX = iPosition - (iY * ciSCGW_MAX_PLAYER_POSITIONS_X)
ENDPROC
/// PURPOSE:
/// Returns the single int position representing grid position (iX, iY)
FUNC INT SCGW_GET_POSITION_FROM_COORDS(INT iX, INT iY)
RETURN iX + (iY *(ciSCGW_MAX_PLAYER_POSITIONS_X))
ENDFUNC
/// PURPOSE:
/// Returns screenspace coords for position iPosition
FUNC VECTOR_2D SCGW_GET_SCREEN_COORDS_FROM_PLAYER_GRID_POSITION(INT iPosition)
INT iX, iY
VECTOR_2D vCoords
SCGW_GET_POSITION_COORDS(iPosition, iX, iY)
vCoords.x = cfSCGW_PLAYER_POS_X_OFFSET + (cfSCGW_PLAYER_POS_X_INCR * (iX + 1))
vCoords.y = cfSCGW_PLAYER_POS_Y_OFFSET + (cfSCGW_PLAYER_POS_Y_INCR * (iY + 1))
RETURN vCoords
ENDFUNC
/// PURPOSE:
/// Returns screenspace coords for grid position iX, iY
FUNC VECTOR_2D SCGW_GET_SCREEN_COORDS_FROM_GRID_COORDS(INT iX, INT iY)
VECTOR_2D vCoords
vCoords.x = cfSCGW_GRID_POS_X_OFFSET + (cfSCGW_GRID_POS_X_INCR * (iX + 1))
vCoords.y = cfSCGW_GRID_POS_Y_OFFSET + (cfSCGW_GRID_POS_Y_INCR * (iY + 1))
RETURN vCoords
ENDFUNC
/// PURPOSE:
/// Returns true if the player is currently dead
FUNC BOOL SCGW_IS_PLAYER_DEAD(INT iParticipant)
IF SCGW_PlayerBD[iParticipant].eCurrentPlayerState = SCGW_PLAYER_STATE_DEAD
RETURN TRUE
ENDIF
IF SCGW_PlayerBD[iParticipant].eCurrentPlayerState = SCGW_PLAYER_STATE_CANT_RESPAWN
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL SCGW_IS_PLAYER_DEAD_BOT(INT iBot)
IF SCGW_Bot[iBot].SCGW_player.eCurrentPlayerState = SCGW_PLAYER_STATE_DEAD
RETURN TRUE
ENDIF
IF SCGW_Bot[iBot].SCGW_player.eCurrentPlayerState = SCGW_PLAYER_STATE_CANT_RESPAWN
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Returns the current time it takes player iPlayerPart to move one grid space
FUNC INT SCGW_GET_PLAYER_MOVEMENT_TIME(INT iPlayerPart)
RETURN ROUND(ciSCGW_PLAYER_GRID_SPEED * SCGW_PlayerBD[iPlayerPart].fMoveSpeed)
ENDFUNC
FUNC INT SCGW_GET_PLAYER_MOVEMENT_TIME_BOT(INT iBot)
RETURN ROUND(ciSCGW_PLAYER_GRID_SPEED * SCGW_Bot[iBot].SCGW_player.fMoveSpeed)
ENDFUNC
/// PURPOSE:
/// Returns the bit for iParticipants shot iShot
/// For use with sSCGWData.iFinalizedShotsBS and sSCGWData.iShotsLastFrame
FUNC INT SCGW_GET_PARTICIPANT_SHOT_BIT(INT iParticipant, INT iShot)
RETURN iShot + (ciSCGW_MAX_PLAYER_SHOTS * iParticipant)
ENDFUNC
/// PURPOSE:
/// Returns true if no part of the rect is visible in the playable area of the screen
FUNC BOOL SCGW_IS_RECT_COMPLETELY_OUTSIDE_OF_GAME_AREA(VECTOR_2D vCenter, VECTOR_2D vScale)
FLOAT fMinX = vCenter.x - (vScale.x / 2)
IF fMinX > (1.0 - cfSCGW_FACADE_WIDTH)
//Obscured by right facade
RETURN TRUE
ENDIF
FLOAT fMaxX = vCenter.x + (vScale.x / 2)
IF fMaxX < cfSCGW_FACADE_WIDTH
//Obscured by left facade
RETURN TRUE
ENDIF
FLOAT fMinY = vCenter.y - (vScale.y / 2)
IF fMinY > 1.0 - cfSCGW_FACADE_TOP_HEIGHT
//Below the bottom of the screen
RETURN TRUE
ENDIF
FLOAT fMaxY = vCenter.y + (vScale.y / 2)
IF fMaxY < 0.0 + cfSCGW_FACADE_TOP_HEIGHT
//Above the top of the screen
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Adjusts collision lines so collision detection is never done on parallel lines
/// Applies cfSCGW_COLLISION_OFFSET_X or cfSCGW_COLLISION_OFFSET_Y to v0 and v1 depending on the direction of the line
PROC SCGW_APPLY_COLLISION_OFFSET_TO_VECTOR_2DS(VECTOR_2D &v0, VECTOR_2D &v1)
IF IS_FLOAT_IN_RANGE(v0.x, v1.x - cfARCADE_MINIGAME_FLOAT_TOLERANCE, v1.x + cfARCADE_MINIGAME_FLOAT_TOLERANCE)
//X is the same adjust X
v0.x += cfSCGW_COLLISION_OFFSET_X
v1.x -= cfSCGW_COLLISION_OFFSET_X
ENDIF
IF IS_FLOAT_IN_RANGE(v0.y, v1.y - cfARCADE_MINIGAME_FLOAT_TOLERANCE, v1.y + cfARCADE_MINIGAME_FLOAT_TOLERANCE)
//Y is the same adjust Y
v0.y += cfSCGW_COLLISION_OFFSET_Y
v1.y -= cfSCGW_COLLISION_OFFSET_Y
ENDIF
ENDPROC
/// PURPOSE:
/// Returns true if the lines vA vB and vC vD intersect with collision offsets applied
FUNC BOOL SCGW_DO_LINES_INTERSECT_FOR_COLLISION(VECTOR_2D vA, VECTOR_2D vB, VECTOR_2D vC, VECTOR_2D vD)
//Copies for perpindicular lines
VECTOR_2D vA1 = vA
VECTOR_2D vB1 = vB
VECTOR_2D vC1 = vC
VECTOR_2D vD1 = vD
//Apply offsets
SCGW_APPLY_COLLISION_OFFSET_TO_VECTOR_2DS(vA, vB)
SCGW_APPLY_COLLISION_OFFSET_TO_VECTOR_2DS(vC, vD)
SCGW_APPLY_COLLISION_OFFSET_TO_VECTOR_2DS(vB1, vA1)
SCGW_APPLY_COLLISION_OFFSET_TO_VECTOR_2DS(vD1, vC1)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDrawCollisionDebug
DRAW_DEBUG_LINE_2D_FROM_VECTOR_2D(vA, vB, sSCGWData.sColours.rgbaWasted)
DRAW_DEBUG_LINE_2D_FROM_VECTOR_2D(vA1, vB1, sSCGWData.sColours.rgbaWasted)
DRAW_DEBUG_LINE_2D_FROM_VECTOR_2D(vC, vD, sSCGWData.sColours.rgbaSprite)
DRAW_DEBUG_LINE_2D_FROM_VECTOR_2D(vC1, vD1, sSCGWData.sColours.rgbaSprite)
ENDIF
#ENDIF
VECTOR_2D vIntersect
IF ARCADE_CABINET_GET_LINE_INTERSECT(vA, vB, vC1, vD1, vIntersect)
OR ARCADE_CABINET_GET_LINE_INTERSECT(vA, vB, vC, vD, vIntersect)
OR ARCADE_CABINET_GET_LINE_INTERSECT(vA1, vB1, vC, vD, vIntersect)
OR ARCADE_CABINET_GET_LINE_INTERSECT(vA1, vB1, vC1, vD1, vIntersect)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_DO_LINES_INTERSECT_FOR_COLLISION - vA (", vA.x, ", ", vA.y, ") vB (", vA.x, ", ", vA.y, ") intersects")
CDEBUG1LN(DEBUG_MINIGAME, " vC (", vC.x, ", ", vC.y, ") vB (", vD.x, ", ", vD.y, ") at (", vIntersect.x, ", ", vIntersect.y, ")")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
// ------------------------------ SOUND EFFECTS ------------------------------
FUNC STRING SCGW_GET_VEHICLE_WARNING_SOUND(INT iVehicleType)
SWITCH iVehicleType
CASE ciSCGW_VEHICLE_TYPE_AMBULANCE
RETURN "Ambulance_Warning"
CASE ciSCGW_VEHICLE_TYPE_POLICE
RETURN "Police_Car_Warning"
CASE ciSCGW_VEHICLE_TYPE_FIRE
RETURN "Fire_Truck_Warning"
CASE ciSCGW_VEHICLE_TYPE_TANK
RETURN "Tank_Warning"
CASE ciSCGW_VEHICLE_TYPE_GANG_0
CASE ciSCGW_VEHICLE_TYPE_GANG_1
CASE ciSCGW_VEHICLE_TYPE_GANG_2
CASE ciSCGW_VEHICLE_TYPE_GANG_3
RETURN "Gang_Van_Warning"
ENDSWITCH
RETURN "INVALID VEHICLE"
ENDFUNC
FUNC STRING SCGW_GET_VEHICLE_LOOP_SOUND(INT iVehicleType)
SWITCH iVehicleType
CASE ciSCGW_VEHICLE_TYPE_ICE_CREAM
RETURN "Ice_Cream_Van_Loop"
CASE ciSCGW_VEHICLE_TYPE_AMBULANCE
CASE ciSCGW_VEHICLE_TYPE_POLICE
CASE ciSCGW_VEHICLE_TYPE_FIRE
RETURN "Emergency_Siren_Loop"
CASE ciSCGW_VEHICLE_TYPE_TANK
RETURN "Tank_Loop"
CASE ciSCGW_VEHICLE_TYPE_GANG_0
CASE ciSCGW_VEHICLE_TYPE_GANG_1
CASE ciSCGW_VEHICLE_TYPE_GANG_2
CASE ciSCGW_VEHICLE_TYPE_GANG_3
RETURN "Gang_Van_Loop"
ENDSWITCH
RETURN "INVALID VEHICLE"
ENDFUNC
FUNC STRING SCGW_GET_SOUNDSET_FOR_GANG(INT iGang)
SWITCH iGang
CASE ciSCGW_GANG_GREEN
RETURN "dlc_vw_am_tw_gang_Hoods_sounds"
CASE ciSCGW_GANG_PURPLE
RETURN "dlc_vw_am_tw_gang_Punks_sounds"
CASE ciSCGW_GANG_YELLOW
RETURN "dlc_vw_am_tw_gang_Yokels_sounds"
CASE ciSCGW_GANG_BLUE
RETURN "dlc_vw_am_tw_gang_Bikers_sounds"
ENDSWITCH
RETURN "INVALID GANG"
ENDFUNC
/// PURPOSE:
/// Returns the position for the "Screen_Position" variable based on the play area
FUNC FLOAT SCGW_GET_SOUND_SCREEN_POSITION_FROM_COORDS(VECTOR_2D vCoords)
RETURN CLAMP((vCoords.x - cfSCGW_FACADE_WIDTH) / cfSCGW_PLAY_AREA_WIDTH, 0.0, 1.0)
ENDFUNC
PROC SCGW_PLAY_FIRE_AND_FORGET_FRONTEND_SOUND(STRING stSoundName)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_PLAY_FIRE_AND_FORGET_FRONTEND_SOUND - Playing: ", stSoundName)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
PLAY_SOUND_FRONTEND(-1, stSoundName, "dlc_vw_am_tw_frontend_sounds", FALSE)
ENDPROC
PROC SCGW_PROCESS_ZERO_TERRITORIES_SOUND_LOOP()
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
BOOL bShouldPlay = TRUE
IF SCGW_ServerBD.eCurrentServerState != SCGW_SERVER_STATE_RUNNING
bShouldPlay = FALSE
ENDIF
IF SCGW_IS_PLAYER_DEAD(sSCGWData.sLocalPlayer.iLocalPart)
bShouldPlay = FALSE
ENDIF
IF SCGW_UF_ServerBD.iCurrentScore[SCGW_PlayerBD[sSCGWData.sLocalPlayer.iLocalPart].iGang] > 0
bShouldPlay = FALSE
ENDIF
IF bShouldPlay
IF sSCGWData.iNoTerritoryLoopSoundId = -1
sSCGWData.iNoTerritoryLoopSoundId = GET_SOUND_ID()
ENDIF
IF HAS_SOUND_FINISHED(sSCGWData.iNoTerritoryLoopSoundId)
PLAY_SOUND_FRONTEND(sSCGWData.iNoTerritoryLoopSoundId, "Frontend_Player_No_Territory_Loop", "dlc_vw_am_tw_frontend_sounds", FALSE)
ENDIF
ELSE
IF sSCGWData.iNoTerritoryLoopSoundId != -1
AND NOT HAS_SOUND_FINISHED(sSCGWData.iNoTerritoryLoopSoundId)
STOP_SOUND(sSCGWData.iNoTerritoryLoopSoundId)
RELEASE_SOUND_ID(sSCGWData.iNoTerritoryLoopSoundId)
sSCGWData.iNoTerritoryLoopSoundId = -1
ENDIF
ENDIF
ENDPROC
PROC SCGW_START_LOOPING_GLOBAL_SOUND(STRING stSoundName, INT &iSoundId, VECTOR_2D vCoords, BOOL bPassScreenPos = TRUE)
FLOAT fScreenPos = SCGW_GET_SOUND_SCREEN_POSITION_FROM_COORDS(vCoords)
IF bPassScreenPos
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_START_LOOPING_GLOBAL_SOUND - Playing: ", stSoundName, " at ", fScreenPos)
ELSE
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_START_LOOPING_GLOBAL_SOUND - Playing: ", stSoundName)
ENDIF
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
IF iSoundId = -1
iSoundId = GET_SOUND_ID()
ENDIF
IF HAS_SOUND_FINISHED(iSoundId)
PLAY_SOUND_FRONTEND(iSoundId, stSoundName, "dlc_vw_am_tw_global_sounds", FALSE)
ENDIF
IF bPassScreenPos
SET_VARIABLE_ON_SOUND(iSoundId, "Screen_Position", fScreenPos)
ENDIF
ENDPROC
PROC SCGW_STOP_LOOPING_SOUND(INT &iSoundId)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_STOP_LOOPING_SOUND - Stopping: ", iSoundId)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
IF NOT HAS_SOUND_FINISHED(iSoundId)
STOP_SOUND(iSoundId)
ENDIF
RELEASE_SOUND_ID(iSoundId)
iSoundId = -1
ENDPROC
PROC SCGW_PLAY_FIRE_AND_FORGET_GLOBAL_SOUND(STRING stSoundName, VECTOR_2D vCoords, BOOL bPassScreenPos = TRUE)
FLOAT fScreenPos = SCGW_GET_SOUND_SCREEN_POSITION_FROM_COORDS(vCoords)
IF bPassScreenPos
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_PLAY_FIRE_AND_FORGET_GLOBAL_SOUND - Playing: ", stSoundName, "Screen Pos: ", fScreenPos)
ELSE
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_PLAY_FIRE_AND_FORGET_GLOBAL_SOUND - Playing: ", stSoundName)
ENDIF
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
INT iSoundId = GET_SOUND_ID()
PLAY_SOUND_FRONTEND(iSoundId, stSoundName, "dlc_vw_am_tw_global_sounds", FALSE)
IF bPassScreenPos
SET_VARIABLE_ON_SOUND(iSoundId, "Screen_Position", fScreenPos)
ENDIF
RELEASE_SOUND_ID(iSoundId)
ENDPROC
PROC SCGW_PLAY_GLOBAL_SOUND_FROM_PLAYER(STRING stSoundName, INT iParticipant, INT &iSoundId)
FLOAT fScreenPos = SCGW_GET_SOUND_SCREEN_POSITION_FROM_COORDS(sSCGWData.sPlayers[iParticipant].vActualPlayerPosition)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_PLAY_GLOBAL_SOUND_FROM_PLAYER - Playing: ", stSoundName, "player ", iParticipant, "Screen Pos: ", fScreenPos)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
IF iSoundId = -1
iSoundId = GET_SOUND_ID()
ENDIF
PLAY_SOUND_FRONTEND(iSoundId, stSoundName, "dlc_vw_am_tw_global_sounds", FALSE)
SET_VARIABLE_ON_SOUND(iSoundId, "Screen_Position", fScreenPos)
ENDPROC
PROC SCGW_PLAY_LOCAL_PLAYER_DEATH_SOUND(STRING stSoundName)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_PLAY_LOCAL_PLAYER_DEATH_SOUND - Playing: ", stSoundName)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
IF sSCGWData.sLocalPlayer.iDeathSoundId = -1
sSCGWData.sLocalPlayer.iDeathSoundId = GET_SOUND_ID()
ENDIF
PLAY_SOUND_FRONTEND(sSCGWData.sLocalPlayer.iDeathSoundId, stSoundName, "dlc_vw_am_tw_global_sounds", FALSE)
ENDPROC
PROC SCGW_PLAY_FIRE_AND_FORGET_GANG_SOUND(STRING stSoundName, VECTOR_2D vCoords, INT iGang)
FLOAT fScreenPos = SCGW_GET_SOUND_SCREEN_POSITION_FROM_COORDS(vCoords)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_PLAY_FIRE_AND_FORGET_GANG_SOUND - Playing: ", stSoundName, "Screen Pos: ", fScreenPos, " gang: ", iGang)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
INT iSoundId = GET_SOUND_ID()
PLAY_SOUND_FRONTEND(iSoundId, stSoundName, SCGW_GET_SOUNDSET_FOR_GANG(iGang), FALSE)
SET_VARIABLE_ON_SOUND(iSoundId, "Screen_Position", fScreenPos)
RELEASE_SOUND_ID(iSoundId)
ENDPROC
PROC SCGW_PLAY_GANG_SOUND_FROM_PLAYER(STRING stSoundName, INT iParticipant, INT &iSoundId)
FLOAT fScreenPos = SCGW_GET_SOUND_SCREEN_POSITION_FROM_COORDS(sSCGWData.sPlayers[iParticipant].vActualPlayerPosition)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_PLAY_GANG_SOUND_FROM_PLAYER - Playing: ", stSoundName, "player ", iParticipant, "Screen Pos: ", fScreenPos)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
IF iSoundId = -1
iSoundId = GET_SOUND_ID()
ENDIF
PLAY_SOUND_FRONTEND(iSoundId, stSoundName, SCGW_GET_SOUNDSET_FOR_GANG(SCGW_PlayerBD[iParticipant].iGang), FALSE)
SET_VARIABLE_ON_SOUND(iSoundId, "Screen_Position", fScreenPos)
ENDPROC
PROC SCGW_START_LOOPING_GANG_SOUND(STRING stSoundName, INT &iSoundId, VECTOR_2D vCoords, INT iGang)
FLOAT fScreenPos = SCGW_GET_SOUND_SCREEN_POSITION_FROM_COORDS(vCoords)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_START_LOOPING_GANG_SOUND - Playing: ", stSoundName, " at ", fScreenPos, " for gang: ", iGang)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableSFX
EXIT
ENDIF
#ENDIF
IF iSoundId = -1
iSoundId = GET_SOUND_ID()
ENDIF
IF HAS_SOUND_FINISHED(iSoundId)
PLAY_SOUND_FRONTEND(iSoundId, stSoundName, SCGW_GET_SOUNDSET_FOR_GANG(iGang), FALSE)
ENDIF
SET_VARIABLE_ON_SOUND(iSoundId, "Screen_Position", fScreenPos)
ENDPROC
PROC SCGW_PLAY_SHOOTING_SOUND_FOR_PLAYER(INT iParticipant, INT iShotIndex)
STRING stShotSound = ""
SWITCH SCGW_UF_PlayerBD[iParticipant].sProjectiles[iShotIndex].iShotWeaponType
CASE ciSCGW_WEAPON_PISTOL
stShotSound = "Pistol_Fire"
BREAK
CASE ciSCGW_WEAPON_AK47
stShotSound = "Assault_Rifle_Fire"
BREAK
CASE ciSCGW_WEAPON_UZI
stShotSound = "Machine_Pistol_Fire"
BREAK
CASE ciSCGW_WEAPON_SHOTGUN
stShotSound = "Shotgun_Fire"
BREAK
CASE ciSCGW_WEAPON_ROCKET
stShotSound = "Rocket_Fire"
BREAK
ENDSWITCH
IF SCGW_UF_PlayerBD[iParticipant].sProjectiles[iShotIndex].iShotWeaponType = ciSCGW_WEAPON_PISTOL
SCGW_PLAY_GANG_SOUND_FROM_PLAYER(stShotSound, iParticipant, sSCGWData.sPlayers[iParticipant].iShotSoundId)
ELSE
SCGW_PLAY_GLOBAL_SOUND_FROM_PLAYER(stShotSound, iParticipant, sSCGWData.sPlayers[iParticipant].iShotSoundId)
ENDIF
ENDPROC
PROC SCGW_PLAY_SHOOTING_SOUND_FOR_BOT(INT iBot, INT iShotIndex)
STRING stShotSound = ""
SWITCH SCGW_Bot[iBot].SCGW_UF_Player.sProjectiles[iShotIndex].iShotWeaponType
CASE ciSCGW_WEAPON_PISTOL
stShotSound = "Pistol_Fire"
BREAK
CASE ciSCGW_WEAPON_AK47
stShotSound = "Assault_Rifle_Fire"
BREAK
CASE ciSCGW_WEAPON_UZI
stShotSound = "Machine_Pistol_Fire"
BREAK
CASE ciSCGW_WEAPON_SHOTGUN
stShotSound = "Shotgun_Fire"
BREAK
CASE ciSCGW_WEAPON_ROCKET
stShotSound = "Rocket_Fire"
BREAK
ENDSWITCH
IF SCGW_Bot[iBot].SCGW_UF_Player.sProjectiles[iShotIndex].iShotWeaponType = ciSCGW_WEAPON_PISTOL
SCGW_PLAY_GANG_SOUND_FROM_PLAYER(stShotSound, iBot, sSCGWData.sPlayers[iBot].iShotSoundId)
ELSE
SCGW_PLAY_GLOBAL_SOUND_FROM_PLAYER(stShotSound, iBot, sSCGWData.sPlayers[iBot].iShotSoundId)
ENDIF
ENDPROC
// ------------------------------ MUSIC ------------------------------
/// PURPOSE:
/// Returns the music event string for the type of event passed in
FUNC STRING SCGW_GET_MUSIC_EVENT_STRING(SCGW_MUSIC_EVENT eEvent)
SWITCH eEvent
CASE SCGW_MUSIC_EVENT_TITLE_START
RETURN "CASINO_TW_TITLE_START"
CASE SCGW_MUSIC_EVENT_GAMEPLAY
RETURN "CASINO_TW_GAMEPLAY"
CASE SCGW_MUSIC_EVENT_MID_ROUND
RETURN "CASINO_TW_MID_ROUND"
CASE SCGW_MUSIC_EVENT_SUDDEN_DEATH
RETURN "CASINO_TW_SUDDEN_DEATH"
CASE SCGW_MUSIC_EVENT_STOP_MUSIC
RETURN "CASINO_TW_STOP_MUSIC"
ENDSWITCH
RETURN "INVALID MUSIC EVENT"
ENDFUNC
/// PURPOSE:
/// Triggers a music event
PROC SCGW_TRIGGER_MUSIC_EVENT(STRING stEvent)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_TRIGGER_MUSIC_EVENT - Triggering ", stEvent)
#IF IS_DEBUG_BUILD
IF sSCGWData.sDebug.bDisableMusic
EXIT
ENDIF
#ENDIF
TRIGGER_MUSIC_EVENT(stEvent)
ENDPROC
// ------------------------------ PICKUP GROUPS ------------------------------
/// PURPOSE:
/// Contains the layouts for sudden death pickups and initialises a random one
PROC SCGW_SPAWN_SUDDEN_DEATH_PICKUPS()
//Wipe any spawned pickups
INT i
FOR i = 0 TO ciSCGW_MAX_SPAWNED_PICKUPS - 1
SCGW_ServerBD.sPickups[i].iSpawnedPickupLocation = -1
SCGW_ServerBD.sPickups[i].iSpawnedPickupType = ciSCGW_PICKUPS_NONE
SCGW_ServerBD.sPickups[i].iSpawnedPickupSpawnTime = -HIGHEST_INT
ENDFOR
INT iTime = NATIVE_TO_INT(GET_NETWORK_TIME())
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_1
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_1
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
INT iSpawnGroup = GET_RANDOM_INT_IN_RANGE(0, ciSCGW_MAX_SUDDEN_DEATH_PICKUP_GROUPS)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_SPAWN_SUDDEN_DEATH_PICKUPS - Spawn Group ", iSpawnGroup)
SWITCH iSpawnGroup
CASE 0 //Pistols
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
BREAK
CASE 1 //Uzis
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
BREAK
CASE 2 //Rifles
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
BREAK
CASE 3 //Shotguns
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
BREAK
CASE 4 //Rockets
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
BREAK
ENDSWITCH
//Spawn a random pickup in the center
iSpawnGroup = GET_RANDOM_INT_IN_RANGE(0, ciSCGW_MAX_SUDDEN_DEATH_CENTER_PICKUPS)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_SPAWN_SUDDEN_DEATH_PICKUPS - Center Pickup ", iSpawnGroup)
SWITCH iSpawnGroup
CASE 0
//Nothing
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_NONE
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = -1
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = -HIGHEST_INT
BREAK
CASE 1
//Gang Cars
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_GANG_CARS
BREAK
CASE 2
//Health
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
BREAK
CASE 3
//Speed
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Contains the layouts for the initial pickup spawn and initialises a random one
PROC SCGW_SPAWN_STARTING_PICKUPS()
INT iTime = NATIVE_TO_INT(GET_NETWORK_TIME())
//Starting pistols
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_1
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_1
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
INT iSpawnGroup = GET_RANDOM_INT_IN_RANGE(0, ciSCGW_MAX_STARTING_PICKUP_GROUPS)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_SPAWN_STARTING_PICKUPS - Spawn Group ", iSpawnGroup)
SWITCH iSpawnGroup
CASE 0
//Center Gang Cars
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_GANG_CARS
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 1
//Center Random Weapon (Excluding rocket)
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = GET_RANDOM_INT_IN_RANGE(ciSCGW_PICKUPS_UZI, ciSCGW_PICKUPS_ROCKET)
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 2
//Speed
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 3
//Nothing
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Contains the layouts for mid game pickup spawns and initialises a random one
PROC SCGW_SPAWN_MID_GAME_PICKUPS()
INT iTime = NATIVE_TO_INT(GET_NETWORK_TIME())
INT iSpawnGroup = GET_RANDOM_INT_IN_RANGE(0, ciSCGW_MAX_MID_GAME_PICKUP_GROUPS)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_SPAWN_MID_GAME_PICKUPS - Spawn Group ", iSpawnGroup)
SWITCH iSpawnGroup
CASE 0
//Pistols & Uzis
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_1
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_1
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_GANG_CARS
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 1
//Shotguns and Rifles
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_1
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_1
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_GANG_CARS
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 2
//Pistols & Rockets
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_0
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_2
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 3
//Speed & Gang Backup
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_0
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_2
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_GANG_CARS
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 4
//Health & Rockets
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_0
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_2
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Contains the layouts for late game pickup spawns and initialises a random one
PROC SCGW_SPAWN_LATE_GAME_PICKUPS()
INT iTime = NATIVE_TO_INT(GET_NETWORK_TIME())
INT iSpawnGroup = GET_RANDOM_INT_IN_RANGE(0, ciSCGW_MAX_LATE_GAME_PICKUP_GROUPS)
CDEBUG1LN(DEBUG_MINIGAME, "[SCGW] [JS] SCGW_SPAWN_LATE_GAME_PICKUPS - Spawn Group ", iSpawnGroup)
SWITCH iSpawnGroup
CASE 0
//Rockets & Uzis
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_1
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_UZI
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_1
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 1
//Gang Cars and Rifles
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_1
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_SPEED
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_1
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_AK47
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 2
//Pistols & Rockets
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_0
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_2
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_PISTOL
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_GANG_CARS
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 3
//Shotguns, Health & Gang Backup
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_0
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_2
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_GANG_CARS
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_SHOTGUN
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
CASE 4
//Health & Rockets
SCGW_ServerBD.sPickups[0].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[0].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_0
SCGW_ServerBD.sPickups[0].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[1].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[1].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_0
SCGW_ServerBD.sPickups[1].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[2].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[2].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_3_2
SCGW_ServerBD.sPickups[2].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[3].iSpawnedPickupType = ciSCGW_PICKUPS_ROCKET
SCGW_ServerBD.sPickups[3].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_1_2
SCGW_ServerBD.sPickups[3].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[4].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[4].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_2_1
SCGW_ServerBD.sPickups[4].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[5].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[5].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_0_1
SCGW_ServerBD.sPickups[5].iSpawnedPickupSpawnTime = iTime
SCGW_ServerBD.sPickups[6].iSpawnedPickupType = ciSCGW_PICKUPS_HEALTH
SCGW_ServerBD.sPickups[6].iSpawnedPickupLocation = ciSCGW_PICKUP_POSITION_4_1
SCGW_ServerBD.sPickups[6].iSpawnedPickupSpawnTime = iTime
BREAK
ENDSWITCH
ENDPROC
FUNC INT SCGW_GET_PLAYER_LEADERBOARD_POSITION(INT iParticipant)
INT i
FOR i = 0 TO ciCASINO_ARCADE_LEADERBOARD_POSITIONS - 1
IF SCGW_ServerBD.sLeaderboard[i].iPlayer = iParticipant
RETURN i
ENDIF
ENDFOR
RETURN ciSCGW_LBD_DEFAULT_RANK
ENDFUNC
FUNC BOOL SCGW_IS_GANG_BOT(INT iGang)
INT iBot
FOR iBot = 0 TO ciSCGW_GANG_MAX - 1
IF SCGW_Bot[iBot].bActive
IF SCGW_Bot[iBot].SCGW_player.iGang = iGang
RETURN TRUE
ENDIF
ENDIF
ENDFOR
RETURN FALSE
ENDFUNC
#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, FLOAT w = 0.2, FLOAT h = 0.2, 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 = w
textStyle.YScale = h
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