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