// ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** // // SCRIPT NAME : TRI_Head.sch // AUTHOR : Nicholas Zippmann // DESCRIPTION : Single Player Races - Head global data file // // ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** USING "minigames_helpers.sch" //USING "minigame_uiinputs.sch" USING "script_usecontext.sch" USING "commands_xml.sch" USING "commands_water.sch" USING "screen_placements.sch" USING "minigame_big_message.sch" USING "timer_globals.sch" // Variables INT iControlFlags INT iCinCamTimer CONST_INT TRI_CAM_BUTTON_COOLDOWN 500 BLIP_INDEX blipPlayerVehicle TWEAK_INT TRI_BLOCK_QUIT_INPUT_DURATION 1000 CONST_INT TRI_ENABLE_WIDGETS 0 // 1 to use widgets #IF NOT DEFINED(TRI_RACE_IS_TRIATHLON) CONST_INT TRI_RACE_IS_TRIATHLON 0 #ENDIF // ----------------------------------- // CONSTANTS // ----------------------------------- #IF IS_DEBUG_BUILD CONST_INT TRI_DEBUG_DISPLAY_TEXT 0 CONST_FLOAT TRI_GATE_CHKPNT_OFFROAD_ARROW_SCL 3.0 // Gate checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_OFFROAD_CYLINDER_SCL 8.0 // Gate next checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_OFFROAD_FLAG_SCL 4.0 // Gate next checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_STUNT_ARROW_SCL 3.0 // Gate checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_STUNT_PLANE_SCL 5.0 // Gate checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_STUNT_RING_SCL 8.0 // Gate next checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_STUNT_FLAG_SCL 4.0 // Gate next checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_TRI_ARROW_SCL 3.0 // Gate checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_TRI_CYLINDER_SCL 8.0 // Gate next checkpoint size. CONST_FLOAT TRI_GATE_CHKPNT_TRI_FLAG_SCL 4.0 // Gate next checkpoint size. #ENDIF #IF NOT DEFINED(TRI_GATE_MAX) CONST_INT TRI_GATE_MAX 33 // Max race gates. #ENDIF CONST_INT TRI_RACER_MAX 8 // Max race racers. CONST_INT TRI_FADE_LONG_TIME 5000 // Fade time (long) (ms). CONST_INT TRI_FADE_NORM_TIME 1000 // Fade time (normal) (ms). CONST_INT TRI_FADE_QUICK_TIME 500 // Fade time (quick) (ms). CONST_FLOAT TRI_CLEAR_AREA_RADIUS 30.0 // Clear area radius (m). CONST_FLOAT TRI_ON_GROUND_DIST 10.0 // On ground distance (m). CONST_FLOAT TRI_GATE_CHKPNT_SCL 10.25 // Gate checkpoint size. CONST_FLOAT TRI_GATE_CHKPNTNXT_SCL 7.0 // Gate next checkpoint size. CONST_FLOAT TRI_GATE_BLIPCUR_SCL 1.0 // Gate current blip scale. CONST_FLOAT TRI_GATE_BLIPNXT_SCL 0.75 // Gate next blip scale. CONST_FLOAT TRI_GATE_MISS_DIST_SCL 5.0 // Gate miss distance scale. CONST_FLOAT TRI_GATE_MISS_PENALTY 5.0 // Gate miss penalty (s). CONST_FLOAT TRI_GATE_INNER_PASS_BONUS 1.0 // Gate inner pass bonus (s). CONST_FLOAT TRI_GATE_OUTTER_PASS_BONUS 0.0 // Gate Outter pass bonus (s). CONST_FLOAT TRI_GATE_OUTTER_KNIFE_BONUS 1.5 // Gate Outter Knife bonus (s). CONST_FLOAT TRI_GATE_OUTTER_INVERT_BONUS 2.0 // Gate Outter Invert bonus (s). CONST_FLOAT TRI_GATE_INNER_KNIFE_BONUS 2.5 // Gate Inner Knife bonus (s). CONST_FLOAT TRI_GATE_INNER_INVERT_BONUS 3.0 // Gate Outter pass bonus (s). CONST_FLOAT TRI_GATE_STUNT_BONUS 4.0 // Stunt Gate hit bonus CONST_FLOAT TRI_GATE_STUNT_HIT 1.5 // Stunt Gate failure to do stunt CONST_FLOAT TRI_GATE_WRONG_PENALTY 2.5 // Gate miss penalty (s). CONST_INT TRI_GATE_MISS_DISP_TIME 2500 // Gate miss display time (ms). CONST_FLOAT TRI_GATE_HEIGHT_CHECK 10.0 // Gate height check - to fix Bug # 666112 - DS CONST_FLOAT TRI_WATER_RESET_OFFSET -1.0 // Z offset for resetting player on a swimming checkpoint (m) -AsD (B* 1184990) CONST_FLOAT TRI_STUNT_INVERT_MIN -140.0 // The min amount the player needs to get the invert stunt bonus CONST_FLOAT TRI_STUNT_INVERT_MAX 140.0 // The max amount the player can be inverted to get the invert stunt bonus CONST_INT TRI_VEH_STUCK_PLANE_ROOF_TIME 1000 // Vehicle stuck time (roof) (ms). CONST_INT TRI_VEH_STUCK_PLANE_SIDE_TIME 1000 // Vehicle stuck time (side) (ms). CONST_INT TRI_VEH_STUCK_PLANE_HUNG_TIME 2000 // Vehicle stuck time (hung) (ms). CONST_INT TRI_VEH_STUCK_PLANE_JAM_TIME 2000 // Vehicle stuck time (jam) (ms). CONST_INT TRI_VEH_STUCK_BIKE_ROOF_TIME 5000 // Vehicle stuck time (roof) (ms). CONST_INT TRI_VEH_STUCK_BIKE_SIDE_TIME 20000 // Vehicle stuck time (side) (ms). CONST_INT TRI_VEH_STUCK_BIKE_HUNG_TIME 30000 // Vehicle stuck time (hung) (ms). CONST_INT TRI_VEH_STUCK_BIKE_JAM_TIME 60000 // Vehicle stuck time (jam) (ms). CONST_INT TRI_XML_HASH_MASTER -232937294 // XML hash key for "Master" string. CONST_INT TRI_XML_HASH_RACES 993425358 // XML hash key for "Races" string. CONST_INT TRI_XML_HASH_RACE -1423748980 // XML hash key for "Race" string. CONST_INT TRI_XML_HASH_FILENAME 1087019066 // XML hash key for "FileName" string. CONST_INT TRI_XML_HASH_NAME -421429484 // XML hash key for "Name" string. CONST_INT TRI_XML_HASH_TIME 258444835 // XML hash key for "Time" string. CONST_INT TRI_XML_HASH_GATES -1448335268 // XML hash key for "Gates" string. CONST_INT TRI_XML_HASH_GATE 145736838 // XML hash key for "Gate" string. CONST_INT TRI_XML_HASH_POS 18243940 // XML hash key for "Position" string. CONST_INT TRI_XML_HASH_CHKPNT 302512246 // XML hash key for "checkpoint" string CONST_INT TRI_XML_HASH_RACERS -1335331260 // XML hash key for "Racers" string. CONST_INT TRI_XML_HASH_RACER 361770114 // XML hash key for "Racer" string. CONST_INT TRI_XML_HASH_LOC -71226926 // XML hash key for "Location" string. CONST_INT TRI_XML_HASH_DRIVER 2096477759 // XML hash key for "Driver" string. CONST_INT TRI_XML_HASH_VEHICLE -584819812 // XML hash key for "Vehicle" string. CONST_INT TRI_XML_HASH_X -1828477467 // XML hash key for "X" string. CONST_INT TRI_XML_HASH_Y -2137718520 // XML hash key for "Y" string CONST_INT TRI_XML_HASH_Z -1235194722 // XML hash key for "Z" string. CONST_INT TRI_XML_HASH_H 1879302122 // XML hash key for "Z" string. CONST_INT TRI_XML_HASH_RADIUS 1337695475 // XML hash key for "Radius" string. CONST_INT TRI_XML_HASH_TYPE 828747869 // XML hash key for "Type" string. CONST_INT TRI_XML_HASH_STUNT -2122757008 // XML hash key for "Stunt" string. CONST_INT TRI_XML_HASH_MODEL 1816327236 // XML hash key for "Model" string. CONST_FLOAT TRI_HUD_NUM_WIDTH 0.0165 // HUD number width for offsetting. CONST_FLOAT TRI_HUD_CLN_WIDTH 0.0265 // HUD colon width for offsetting. CONST_FLOAT TRI_HUD_PLS_WIDTH 0.0175 // HUD plus width for offsetting. CONST_FLOAT TRI_HUD_MNS_WIDTH 0.0095 // HUD minus width for offsetting. CONST_FLOAT TRI_HUD_RADAR_POS_X 0.109 // HUD radar overlay pos (x). CONST_FLOAT TRI_HUD_RADAR_POS_Y 0.850 // HUD radar overlay pos (y). CONST_FLOAT TRI_HUD_RADAR_WIDTH 0.110 // HUD radar overlay width. CONST_FLOAT TRI_HUD_RADAR_HEIGHT 0.200 // HUD radar overlay height. CONST_FLOAT TRI_HUD_RADAR_ROT_SCL -1.0 // HUD radar overlay rot scale. CONST_FLOAT TRI_UI_CR_HEAD_POS_X 0.4 // UI choose race heading pos (x). CONST_FLOAT TRI_UI_CR_HEAD_POS_Y 0.05 // UI choose race heading pos (y). (formally .15) CONST_FLOAT TRI_UI_CR_HEAD_SCALE 0.8 // UI choose race heading scale (x/y). (formally 1.0) CONST_FLOAT TRI_UI_CR_INFO_POS_X 0.325 // UI choose race info pos (x). CONST_FLOAT TRI_UI_CR_INFO_POS_Y 0.11 // UI choose race info pos (y). (formally .25) CONST_FLOAT TRI_UI_CR_INFO_SCALE 0.5 // UI choose race info scale (x/y). CONST_FLOAT TRI_UI_CR_INFO_SPC_X1 0.23 // UI choose race info space (x1). CONST_FLOAT TRI_UI_CR_INFO_SPC_X2 0.282 // UI choose race info space (x2). CONST_FLOAT TRI_UI_CR_INFO_SPC_Y 0.052 // UI choose race info space (y). CONST_FLOAT TRI_UI_CR_SEL_POS_X 0.32 // UI choose race select pos (x). CONST_FLOAT TRI_UI_CR_SEL_POS_Y 0.895 // UI choose race select pos (y). (formally .81) CONST_FLOAT TRI_UI_CR_SEL_SCALE 0.625 // UI choose race select scale (x/y). CONST_FLOAT TRI_UI_CR_ENT_POS_X 0.435 // UI choose race enter pos (x). CONST_FLOAT TRI_UI_CR_ENT_POS_Y 0.895 // UI choose race enter pos (y). (formally .81) CONST_FLOAT TRI_UI_CR_ENT_SCALE 0.625 // UI choose race enter scale (x/y). CONST_FLOAT TRI_UI_CR_EXIT_POS_X 0.614 // UI choose race exit pos (x). CONST_FLOAT TRI_UI_CR_EXIT_POS_Y 0.895 // UI choose race exit pos (y). (formally .81) CONST_FLOAT TRI_UI_CR_EXIT_SCALE 0.625 // UI choose race exit scale (x/y). CONST_FLOAT TRI_UI_CR_RECT_POS_X 0.5 // UI choose race rectangle pos (x). CONST_FLOAT TRI_UI_CR_RECT_POS_Y 0.3 // UI choose race rectangle pos (y). (formally .5) CONST_FLOAT TRI_UI_CR_RECT_WIDTH 0.385 // UI choose race rectange width. CONST_FLOAT TRI_UI_CR_RECT_HEIGHT 1.30 // UI choose race rectangle height. CONST_INT TRI_UI_CR_RECT_ALPHA 191 // UI choose race rectange alpha. CONST_FLOAT TRI_UI_CD_NUM_SCALE 2.0 // UI countdown number scale for both x/y. CONST_FLOAT TRI_UI_CD_NUM_POS_X 0.48 // UI countdown number start position (x). CONST_FLOAT TRI_UI_CD_NUM_POS_Y 0.4 // UI countdown number start position (y). CONST_FLOAT TRI_UI_CD_NUM_TIME 1.25 // UI countdown number display for time (s). CONST_FLOAT TRI_UI_CD_GO_SCALE 2.0 // UI countdown "GO!" scale for both x/y. CONST_FLOAT TRI_UI_CD_GO_POS_X 0.44 // UI countdown "GO!" start position (x). CONST_FLOAT TRI_UI_CD_GO_POS_Y 0.4 // UI countdown "GO!" start position (y). CONST_FLOAT TRI_UI_CD_GO_TIME 1.0 // UI countdown "GO!" display for time (s). CONST_FLOAT TRI_UI_FINISH_SCALE 2.0 // UI finish scale for both x/y. CONST_FLOAT TRI_UI_FINISH_POS_X 0.4 // UI finish start position (x). CONST_FLOAT TRI_UI_FINISH_POS_Y 0.4 // UI finish start position (y). CONST_FLOAT TRI_UI_FINISH_TIME 3.0 // UI finish display for time (s). CONST_FLOAT TRI_UI_LB_HEAD_POS_X 0.4 // UI leaderboard heading pos (x). CONST_FLOAT TRI_UI_LB_HEAD_POS_Y 0.15 // UI leaderboard heading pos (y). CONST_FLOAT TRI_UI_LB_HEAD_SCALE 1.0 // UI leaderboard heading scale (x/y). CONST_FLOAT TRI_UI_LB_INFO_POS_X 0.325 // UI leaderboard info pos (x). CONST_FLOAT TRI_UI_LB_INFO_POS_Y 0.21 // UI leaderboard info pos (y). CONST_FLOAT TRI_UI_LB_INFO_SCALE 0.5 // UI leaderboard info scale (x/y). CONST_FLOAT TRI_UI_LB_INFO_SPC_X1 0.23 // UI leaderboard info space (x1). CONST_FLOAT TRI_UI_LB_INFO_SPC_X2 0.282 // UI leaderboard info space (x2). CONST_FLOAT TRI_UI_LB_INFO_SPC_Y 0.052 // UI leaderboard info space (y). CONST_FLOAT TRI_UI_LB_CONT_POS_X 0.32 // UI leaderboard select pos (x). CONST_FLOAT TRI_UI_LB_CONT_POS_Y 0.81 // UI leaderboard select pos (y). CONST_FLOAT TRI_UI_LB_CONT_SCALE 0.625 // UI leaderboard select scale (x/y). CONST_FLOAT TRI_UI_LB_EXIT_POS_X 0.614 // UI leaderboard exit pos (x). CONST_FLOAT TRI_UI_LB_EXIT_POS_Y 0.81 // UI leaderboard exit pos (y). CONST_FLOAT TRI_UI_LB_EXIT_SCALE 0.625 // UI leaderboard exit scale (x/y). CONST_FLOAT TRI_UI_LB_RECT_POS_X 0.5 // UI leaderboard rectangle pos (x). CONST_FLOAT TRI_UI_LB_RECT_POS_Y 0.5 // UI leaderboard rectangle pos (y). CONST_FLOAT TRI_UI_LB_RECT_WIDTH 0.375 // UI leaderboard rectange width. CONST_FLOAT TRI_UI_LB_RECT_HEIGHT 0.750 // UI leaderboard rectangle height. CONST_INT TRI_UI_LB_RECT_ALPHA 191 // UI leaderboard rectange alpha. CONST_INT TRI_UI_LB_RACER_LIMIT 10 // UI leaderboard racer limit. CONST_INT TRI_UI_TIME_THROTTLE 10 // UI throttle for updating the race time CONST_INT TRI_INPUT_STICK_LIMIT 128 // INPUT stick limit for both x/y. CONST_INT TRI_INPUT_STICK_DZ_X 32 // INPUT stick dead zone (x). CONST_INT TRI_INPUT_STICK_DZ_Y 32 // INPUT stick dead zone (x). CONST_FLOAT TRI_CAM_INTERP_SPEED 100.0 // CAM interp speed (m/s). CONST_INT TRI_CAM_INTERP_TIME_MIN 2000 // CAM interp time max (ms). CONST_INT TRI_CAM_INTERP_TIME_MAX 6000 // CAM interp time max (ms). CONST_FLOAT TRI_CAM_ROTATE_INC 2.0 // CAM rotate increment (deg). CONST_FLOAT TRI_CAM_ROTATE_LIMIT 89.0 // CAM rotate limit (deg). CONST_FLOAT TRI_CAM_ZOOM_INC 0.1 // CAM zoom increment (scalar). CONST_FLOAT TRI_CAM_ZOOM_LIMIT_MIN 0.5 // CAM zoom min limit (scalar). CONST_FLOAT TRI_CAM_ZOOM_LIMIT_MAX 5.0 // CAM zoom max limit (scalar). CONST_FLOAT TRI_CAM_GATE_FOCUS_DIST 50.0 // CAM gate focus distance (m). CONST_FLOAT TRI_CAM_RACER_FOCUS_DIST 10.0 // CAM racer focus distance (m). CONST_FLOAT TRI_PLANE_SPD_MAX 60.0 // Plane speed max(m/s). CONST_FLOAT TRI_TRICK_ROT_MIN 0.0 // Trick rotation min (deg). CONST_FLOAT TRI_TRICK_ROT_MID 180.0 // Trick rotation mid (deg). CONST_FLOAT TRI_TRICK_ROT_MAX 360.0 // Trick rotation max (deg). CONST_FLOAT TRI_TRICK_ROT_JUMP 90.0 // Trick rotation jump (deg). CONST_FLOAT TRI_TRICK_ROT_BUFF 30.0 // Trick rotation buffer (deg). CONST_FLOAT TRI_TRICK_LOOP_MIN 1.0 // Trick loop bonus min (s). CONST_FLOAT TRI_TRICK_LOOP_MAX 15.0 // Trick loop bonus max (s). CONST_FLOAT TRI_TRICK_ROLL_MIN 0.2 // Trick roll bonus min (s). CONST_FLOAT TRI_TRICK_ROLL_MAX 3.0 // Trick roll bonus max (s). CONST_FLOAT TRI_TRICK_INVT_TIME 10.0 // Trick invert time (s). CONST_FLOAT TRI_TRICK_INVT_MIN 0.4 // Trick invert bonus min (s). CONST_FLOAT TRI_TRICK_INVT_MAX 6.0 // Trick invert bonus max (s). CONST_FLOAT TRI_TRICK_DEGRADE 2.0 // Trick bonus degrade (^x). CONST_INT TRI_TRICK_DISP_TIME 2500 // Trick display time (ms). CONST_FLOAT CIN_CAM_TIMER_THRESHOLD 0.200 // Threshold for going into cinematic cam CONST_FLOAT CIN_CAM_TIMER_THRESHOLD_LONG 1.000 // Threshold for going back from cinematic cam, like Alwyn's stuff does CONST_INT TRI_EVENT_QUEUE_COUNT 15 // Number of events we can hold in the queue CONST_INT TRI_QUEUE_CLEAN_TIME 20000 // 20 seconds til we clean the queue CONST_FLOAT TRI_RANK_SAMPLE_TIME 2.0 // ----------------------------------- // ENUMERATIONS // ----------------------------------- // SPR Main Run. ENUM TRI_MAIN_RUN_ENUM TRI_MAIN_RUN_SETUP, TRI_MAIN_RUN_UPDATE, TRI_MAIN_RUN_CLEANUP ENDENUM // SPR Main Setup. ENUM TRI_MAIN_SETUP_ENUM TRI_MAIN_SETUP_INIT, TRI_MAIN_SETUP_FADE_OUT, TRI_MAIN_SETUP_LOAD_INIT, TRI_MAIN_SETUP_LOAD_WAIT, TRI_MAIN_SETUP_CREATE_INIT, TRI_MAIN_SETUP_CREATE_WAIT, TRI_MAIN_SETUP_PLACE_INIT, TRI_MAIN_SETUP_PLACE_WAIT, TRI_MAIN_SETUP_FADE_IN, TRI_MAIN_SETUP_WAIT, TRI_MAIN_SETUP_CLEANUP ENDENUM // SPR Main Udpate. ENUM TRI_MAIN_UPDATE_ENUM TRI_MAIN_UPDATE_INIT, TRI_MAIN_UPDATE_GET_IN_INIT, TRI_MAIN_UPDATE_GET_IN_WAIT, TRI_MAIN_UPDATE_CHOOSE_RACE, TRI_MAIN_RESETTING_LOAD, TRI_MAIN_UPDATE_ORCUT_LOAD, TRI_MAIN_QUIT_FADE_TELEPORT, TRI_MAIN_UPDATE_FADE_OUT, TRI_MAIN_UPDATE_SETUP_RACE_INIT, TRI_MAIN_UPDATE_SETUP_RACE_WAIT, TRI_MAIN_UPDATE_FADE_IN, TRI_MAIN_UPDATE_WAIT, TRI_MAIN_UPDATE_PRECLEANUP_DELAY, TRI_MAIN_RESETTING_LOAD_FADE, TRI_MAIN_UPDATE_CLEANUP ENDENUM // SPR Camera Mode. ENUM TRI_CAMERA_MODE_ENUM TRI_CAMERA_MODE_GAME, TRI_CAMERA_MODE_FREE, TRI_CAMERA_MODE_FLY ENDENUM // SPR Camera Focus. ENUM TRI_CAMERA_FOCUS_ENUM TRI_CAMERA_FOCUS_GATES, TRI_CAMERA_FOCUS_RACERS ENDENUM // SPR Move Mode. ENUM TRI_MOVE_MODE_ENUM TRI_MOVE_MODE_CAMERA, TRI_MOVE_MODE_GROUND, TRI_MOVE_MODE_PREV, TRI_MOVE_MODE_NEXT, TRI_MOVE_MODE_SELECT ENDENUM // SPR Racer Reset. ENUM TRI_RACER_RESET_ENUM TRI_RACER_RESET_FAIL_OVER, TRI_RACER_RESET_FAIL_SELECT_RETRY, TRI_RACER_RESET_FAIL_HINT, TRI_RACER_RESET_INIT, TRI_RACER_RESET_CHOOSE, TRI_RACER_RESET_FADE_OUT, TRI_RACER_QUIT_FADE_OUT, TRI_RACER_RESET_CREATE, TRI_RACER_RESET_PLACE, TRI_RACER_QUIT_PLACE, TRI_RACER_RESET_FADE_IN, TRI_RACER_QUIT_FADE_IN, TRI_RACER_RESET_WAIT, TRI_RACER_QUIT_EXIT ENDENUM // SPR Race Type. ENUM TRI_RACE_TYPE_ENUM TRI_RACE_TYPE_PLANE, TRI_RACE_TYPE_OFFROAD, TRI_RACE_TYPE_TRIATHLON ENDENUM // SPR Race Setup. ENUM TRI_RACE_SETUP_ENUM TRI_RACE_SETUP_INIT, TRI_RACE_SETUP_LOAD_INIT, TRI_RACE_SETUP_LOAD_WAIT, TRI_RACE_SETUP_CREATE_INIT, TRI_RACE_SETUP_CREATE_WAIT, TRI_RACE_SETUP_WAIT, TRI_RACE_SETUP_CLEANUP ENDENUM // SPR Race Update. ENUM TRI_RACE_UPDATE_ENUM TRI_RACE_UPDATE_INIT, TRI_RACE_UPDATE_COUNTDOWN, TRI_RACE_UPDATE_FINISH, TRI_RACE_UPDATE_LEADERBOARD, TRI_RACE_UPDATE_WAIT_ANIM_OUT, TRI_RACE_UPDATE_FADE_OUT_BEFORE_FINISH, TRI_RACE_UPDATE_FADE_IN_BEFORE_FINISH, TRI_RACE_UPDATE_WAIT, TRI_RACE_UPDATE_CLEANUP ENDENUM // SPR Race Gate stunt types ENUM TRI_RACE_STUNT_GATE_ENUM TRI_RACE_STUNT_GATE_NORMAL, TRI_RACE_STUNT_GATE_INVERTED, TRI_RACE_STUNT_GATE_SIDE_LEFT, TRI_RACE_STUNT_GATE_SIDE_RIGHT ENDENUM //SPR Gate check types ENUM TRI_RACE_GATE_STATUS TRI_RACE_GATE_STATUS_INVALID = -1, TRI_RACE_GATE_STATUS_PASS ENDENUM //SPR Gate check types ENUM TRI_RACE_CHECKPOINT_TYPE TRI_CHKPT_OFFROAD_DEFAULT = 0, TRI_CHKPT_OFFROAD_FINISH, TRI_CHKPT_STUNT_DEFAULT, TRI_CHKPT_STUNT_STUNT, TRI_CHKPT_STUNT_FINISH, TRI_CHKPT_TRI_SWIM, TRI_CHKPT_TRI_BIKE, TRI_CHKPT_TRI_RUN, TRI_CHKPT_TRI_FINISH, TRI_CHKPT_TRI_FIRST_TRANS, TRI_CHKPT_TRI_SECOND_TRANS ENDENUM ENUM TRI_RACE_GATE_FLAGS TRI_RACE_GATE_FLAG_AP_IGNORE_GROUND = BIT0, TRI_RACE_GATE_FLAG_CHECK_VEHICLE = BIT1, TRI_RACE_GATE_FLAG_DO_NOT_SNAP_TO_GROUND = BIT2, TRI_RACE_GATE_FLAG_PLAY_SOUND = BIT3 ENDENUM #IF TRI_RACE_IS_TRIATHLON // Determines how a Tri racer competes. ENUM TRI_RACER_COMPETE_MODE TRI_RACER_COMPETE_MODE_DEFAULT, TRI_RACER_COMPETE_MODE_TIRED, TRI_RACER_COMPETE_MODE_AGGRESSIVE, TRI_RACER_COMPETE_MODE_FORCED_TIRED ENDENUM #ENDIF ENUM TRI_SC_SCREEN_TEXT TRI_SC_MAIN_TITLE, TRI_SC_SCORE_TITLE, TRI_SC_AWARD_TXT, TRI_SC_SCORE_TXT, TRI_SC_HISCORE_TXT, TRI_SC_TOTAL_TXT, TRI_SC_WEAPON_TXT, TRI_SC_FIRED_TXT, TRI_SC_HITS_TXT, TRI_SC_ACC_TXT, TRI_SC_TIMEREM_TXT, TRI_SC_AWARDVAL_TXT, TRI_SC_SCOREVAL_TXT, TRI_SC_HISCOREVAL_TXT, TRI_SC_TOTALVAL_TXT, TRI_SC_WEAPONVAL_TXT, TRI_SC_BRONZE_GOAL_TXT, TRI_SC_SILVER_GOAL_TXT, TRI_SC_GOLD_GOAL_TXT ENDENUM ENUM TRI_SC_SCREEN_SPRITE TRI_SCREEN_MAIN_BACKGROUND, TRI_SC_SOCIALCLUB_IMG, TRI_SC_HITS_IMG, TRI_SC_MEDAL_AWARD_IMG, TRI_SC_BRONZE_IMG, TRI_SC_SILVER_IMG, TRI_SC_GOLD_IMG ENDENUM ENUM TRI_SC_SCREEN_RECT TRI_SC_SCORE_BG, TRI_SC_SCORE_EDGE, TRI_SC_HIT_BG, TRI_SC_INFO1_BG, TRI_SC_INFO2_BG, TRI_SC_INFO3_BG, TRI_SC_INFO4_BG, TRI_SC_INFO5_BG, TRI_SC_INFO6_BG, TRI_SC_INFO7_BG, TRI_SC_INFO8_BG, TRI_SC_BRONZE_BG, TRI_SC_SILVER_BG, TRI_SC_GOLD_BG, TRI_SC_BRONZE_OVERLAY, TRI_SC_SILVER_OVERLAY, TRI_SC_GOLD_OVERLAY ENDENUM ENUM TRI_PLAYER_RESPAWN_STATE TRI_RESPAWN_SET, TRI_RESPAWN_INIT, TRI_RESPAWN_CHECK, TRI_RESPAWN_ACTIVE, TRI_RESPAWN_WAIT, TRI_RESPAWN_INVALID ENDENUM ENUM TRI_RACE_NEWS_EVENT TRNE_INVALID = -1, TRNE_NPC_WON_SWIM, TRNE_NPC_WON_BIKE, TRNE_NPC_WON_RACE, TRNE_PLAYER_CRASH_NPC, TRNE_PLAYER_CRASH, TRNE_PLAYER_STAMINA, TRNE_PLAYER_FALLBACK, TRNE_PLAYER_RALLIED, TRNE_PLAYER_MISSED_CHECKPT, TRNE_PLAYER_IN_FIRST, TRNE_PLAYER_IN_FIRST_LONGTERM, TRNE_PLAYER_IN_LAST, TRNE_PLAYER_IN_LAST_LONGTERM, TRNE_PLAYER_IN_SECOND, TRNE_RACE_STARTED ENDENUM ENUM TRI_RACE_EVENT_FLAGS TREF_VALIDATE = BIT0, TREF_TIMESTAMP = BIT1 ENDENUM ENUM TRI_RACE_EVENT_DATA_FLAGS TREDF_EMPTY = 0, TREDF_LINE_SPOKEN = BIT0, TREDF_PED_ADDED = BIT1, TREDF_STAMINA_REGISTERED = BIT2, TREDF_RALLYING = BIT3, TREDF_FALLINGBACK = BIT4 ENDENUM // ----------------------------------- // STRUCTURES // ----------------------------------- // SPR Main. STRUCT TRI_MAIN_STRUCT INT iTRIMode TRI_MAIN_RUN_ENUM eRun StructTimer tSetup TRI_MAIN_SETUP_ENUM eSetup TRI_MAIN_UPDATE_ENUM eUpdate CAM_VIEW_MODE eStartCam ENDSTRUCT // SPR Display. STRUCT TRI_DISPLAY_STRUCT StructTimer tCnt ENDSTRUCT // SPR Input. STRUCT TRI_INPUT_STRUCT INT iLS_X, iLS_Y INT iRS_X, iRS_Y ENDSTRUCT // SPR Camera. STRUCT TRI_CAMERA_STRUCT CAMERA_INDEX Lst, Cur OBJECT_INDEX DummyCam FLOAT fZoom TRI_CAMERA_MODE_ENUM eMode TRI_CAMERA_FOCUS_ENUM eFocus ENDSTRUCT STRUCT TRI_HINT_CAM_STRUCT BOOL bActive // ENTITY_INDEX Entity VECTOR Coord // PS_HINT_CAM_ENUM HintType CAMERA_INDEX CustomCam ENDSTRUCT // SPR Gate. STRUCT TRI_GATE_STRUCT VECTOR vHeading VECTOR vPos FLOAT fRadius FLOAT fHeightCheck INT iHUDAlphaAfterPass BLIP_INDEX Blip CHECKPOINT_INDEX Chkpnt TRI_RACE_CHECKPOINT_TYPE eChkpntType INT iGateFlags BOOL bIsFading ENDSTRUCT /// Everything about the player's vehicle that he drove to the race up in. STRUCT TRI_PLAYER_VEHICLE_STRUCT BOOL bRecreateSavedVeh = FALSE BOOL bProperlyInit = FALSE INT iVehicleColor MODEL_NAMES modelName = DUMMY_MODEL_FOR_SCRIPT VEHICLE_SETUP_STRUCT sVehicleSetup ENDSTRUCT FUNC STRING GET_TRI_GATE_FLAG_NAME(TRI_RACE_GATE_FLAGS eFlag) SWITCH eFlag CASE TRI_RACE_GATE_FLAG_AP_IGNORE_GROUND RETURN "TRI_RACE_GATE_FLAG_AP_IGNORE_GROUND" CASE TRI_RACE_GATE_FLAG_CHECK_VEHICLE RETURN "TRI_RACE_GATE_FLAG_CHECK_VEHICLE" CASE TRI_RACE_GATE_FLAG_DO_NOT_SNAP_TO_GROUND RETURN "TRI_RACE_GATE_FLAG_DO_NOT_SNAP_TO_GROUND" CASE TRI_RACE_GATE_FLAG_PLAY_SOUND RETURN "TRI_RACE_GATE_FLAG_PLAY_SOUND" ENDSWITCH RETURN "Unknown TRI_RACE_GATE_FLAGS" ENDFUNC FUNC BOOL IS_TRI_GATE_FLAG_SET(TRI_GATE_STRUCT &tGateStruct, TRI_RACE_GATE_FLAGS eFlagToCheck) RETURN IS_BITMASK_AS_ENUM_SET(tGateStruct.iGateFlags, eFlagToCheck) ENDFUNC PROC SET_TRI_GATE_FLAG(TRI_GATE_STRUCT &tGateStruct, TRI_RACE_GATE_FLAGS eFlagToSet) IF NOT IS_TRI_GATE_FLAG_SET(tGateStruct, eFlagToSet) SET_BITMASK_AS_ENUM(tGateStruct.iGateFlags, eFlagToSet) CPRINTLN(DEBUG_TRIATHLON, "[Triathlon.sc->SET_TRI_CONTROL_FLAG] :: ", GET_TRI_GATE_FLAG_NAME(eFlagToSet)) ENDIF ENDPROC PROC CLEAR_TRI_GATE_FLAG(TRI_GATE_STRUCT &tGateStruct, TRI_RACE_GATE_FLAGS eFlagToClear) IF IS_TRI_GATE_FLAG_SET(tGateStruct, eFlagToClear) CLEAR_BITMASK_AS_ENUM(tGateStruct.iGateFlags, eFlagToClear) CPRINTLN(DEBUG_TRIATHLON, "[Triathlon.sc->CLEAR_TRI_CONTROL_FLAG] :: ", GET_TRI_GATE_FLAG_NAME(eFlagToClear)) ENDIF ENDPROC // SPR Racer. STRUCT TRI_RACER_STRUCT TEXT_LABEL_31 szName PED_INDEX Driver VEHICLE_INDEX Vehicle BLIP_INDEX Blip INT iGateCur, iRank FLOAT fClockTime FLOAT fPlsMnsLst FLOAT fPlsMnsTot VECTOR vStartPos FLOAT fStartHead FLOAT fAnimWait // Used only during the countdown PED_TYPE eDriverType MODEL_NAMES eDriverModel MODEL_NAMES eVehicleModel TRI_RACER_RESET_ENUM eReset structPedsForConversation pedConvo #IF TRI_RACE_IS_TRIATHLON FLOAT fMinMoveBlendRatioOnFoot, fMaxMoveBlendRatioOnFoot FLOAT fMinMoveBlendRatioInWater, fMaxMoveBlendRatioInWater FLOAT fMinBikeSpeed, fMaxBikeSpeed INT iSkillPlacement //Added this for any ai needs for use with TRI_AI_CONTROL_FLAGS primarily used for B*1516859 INT iAIBitFlags TRI_RACER_COMPETE_MODE eCompeteMode structTimer timerInCurrentCompeteMode structTimer timerRacerVehicleIdle STRING szCurrentBikeRecordingName // Necessary for Ironman, to switch a racer's waypoint vehicle recoring. #ENDIF ENDSTRUCT ENUM TRI_AI_CONTROL_FLAGS TACF_REQUEST_HELMET_ASSETS = BIT0, TACF_BANIMSPED = BIT1, TACF_BSETSPEED = BIT2, TACF_BHASBEENONABIKE = BIT3 ENDENUM FUNC STRING GET_TRI_AI_CONTROL_FLAG_NAME(TRI_AI_CONTROL_FLAGS eFlag) SWITCH eFlag CASE TACF_REQUEST_HELMET_ASSETS RETURN "TACF_REQUEST_HELMET_ASSETS" CASE TACF_BANIMSPED RETURN "TACF_BANIMSPED" CASE TACF_BSETSPEED RETURN "TACF_BSETSPEED" CASE TACF_BHASBEENONABIKE RETURN "TACF_BHASBEENONABIKE" ENDSWITCH RETURN "Unknown TRI_AI_CONTROL_FLAGS" ENDFUNC FUNC BOOL IS_TRI_AI_CONTROL_FLAG_SET(TRI_RACER_STRUCT &tRacerStruct, TRI_AI_CONTROL_FLAGS eFlagToCheck) RETURN IS_BITMASK_AS_ENUM_SET(tRacerStruct.iAIBitFlags, eFlagToCheck) ENDFUNC PROC SET_TRI_AI_CONTROL_FLAG(TRI_RACER_STRUCT &tRacerStruct, TRI_AI_CONTROL_FLAGS eFlagToSet) IF NOT IS_TRI_AI_CONTROL_FLAG_SET(tRacerStruct, eFlagToSet) SET_BITMASK_AS_ENUM(tRacerStruct.iAIBitFlags, eFlagToSet) CPRINTLN(DEBUG_TRIATHLON, "[Triathlon.sc->SET_TRI_AI_CONTROL_FLAG] :: ", GET_TRI_AI_CONTROL_FLAG_NAME(eFlagToSet)) ENDIF ENDPROC PROC CLEAR_TRI_AI_CONTROL_FLAG(TRI_RACER_STRUCT &tRacerStruct, TRI_AI_CONTROL_FLAGS eFlagToClear) IF IS_TRI_AI_CONTROL_FLAG_SET(tRacerStruct,eFlagToClear) CLEAR_BITMASK_AS_ENUM(tRacerStruct.iAIBitFlags, eFlagToClear) CPRINTLN(DEBUG_TRIATHLON, "[Triathlon.sc->CLEAR_TRI_AI_CONTROL_FLAG] :: ", GET_TRI_AI_CONTROL_FLAG_NAME(eFlagToClear)) ENDIF ENDPROC ENUM TRI_UI_FLAGS TUIF_SCLB_PROFILE_BUTTON_SHOWN = BIT0, TUIF_REPLACE_ME_FLAG = BIT1 // replace this, it's unused and just for space in the switch statement below ENDENUM FUNC STRING GET_STRING_FROM_TRI_UI_FLAG(TRI_UI_FLAGS eFlag) SWITCH eFlag CASE TUIF_SCLB_PROFILE_BUTTON_SHOWN RETURN "TUIF_SCLB_PROFILE_BUTTON_SHOWN" CASE TUIF_REPLACE_ME_FLAG RETURN "TUIF_REPLACE_ME_FLAG" ENDSWITCH RETURN "Unknown TRI_UI_FLAGS flag" ENDFUNC // SPR Race. STRUCT TRI_RACE_STRUCT StructTimer tClock FLOAT fBestClockTime FLOAT fBestSplitTime FLOAT fCinCamTimer FLOAT fCheeringTimer INT iBlockQuitInputTimer INT iNewsTickerTime, iNewsInterruptStamp INT iGateCheck INT iGateCnt, iRacerCnt INT iCountdownStamp INT iCheerMasterSound, iWallaSound INT iFrameCount STRING FailString TRI_DISPLAY_STRUCT Display StructTimer tUpdate TRI_RACE_SETUP_ENUM eSetup TRI_RACE_UPDATE_ENUM eUpdate TRI_GATE_STRUCT sGate[TRI_GATE_MAX] TRI_RACER_STRUCT Racer[TRI_RACER_MAX] MEGA_PLACEMENT_TOOLS uiScorecard SCALEFORM_INDEX uiLeaderboard SCRIPT_SCALEFORM_BIG_MESSAGE bigMessageUI OBJECT_INDEX objSwimLegBuoys[7] OBJECT_INDEX objErrantBuoy1 OBJECT_INDEX objErrantBuoy2 VECTOR vCheeringAreas[2] SCENARIO_BLOCKING_INDEX sbiStart TRI_PLAYER_RESPAWN_STATE ePlayerRespawnState BOOL bPlayerRespawning = FALSE BOOL bDidWeRestart, bRestarting TRI_UI_FLAGS eUIFlags //Latest additions are going under here since I don't see any particular order TRI_PLAYER_VEHICLE_STRUCT sPlayerVehicleData ENDSTRUCT /// PURPOSE: /// Accessor. Sets how long, in ms, the system will block Accept input on the quit screen PROC TRI_SET_BLOCK_QUIT_INPUT_TIMER( TRI_RACE_STRUCT & race ) race.iBlockQuitInputTimer = GET_GAME_TIMER() + TRI_BLOCK_QUIT_INPUT_DURATION CDEBUG2LN( DEBUG_TRIATHLON, "TRI_SET_BLOCK_QUIT_INPUT_TIMER, TRI_BLOCK_QUIT_INPUT_DURATION = ", TRI_BLOCK_QUIT_INPUT_DURATION, ", race.iBlockQuitInputTimer = ", race.iBlockQuitInputTimer ) ENDPROC /// PURPOSE: /// Accessor. Denotes when we can accept accept input on the quit screen, check against game time FUNC INT TRI_GET_BLOCK_QUIT_INPUT_TIMER( TRI_RACE_STRUCT & race ) RETURN race.iBlockQuitInputTimer ENDFUNC /// PURPOSE: /// Needs to be called during quit screen to update the timer. This is because GET_GAME_TIMER() doesn't update during the pause. PROC TRI_UPDATE_BLOCK_QUIT_INPUT_TIMER( TRI_RACE_STRUCT & race ) FLOAT fFrameTime = GET_FRAME_TIME() race.iBlockQuitInputTimer -= ROUND( fFrameTime * 1000 ) CDEBUG2LN( DEBUG_TRIATHLON, "TRI_SET_BLOCK_QUIT_INPUT_TIMER, fFrameTime = ", fFrameTime, ", race.iBlockQuitInputTimer = ", race.iBlockQuitInputTimer ) ENDPROC PROC SET_TRI_RACE_UI_FLAG(TRI_RACE_STRUCT &race, TRI_UI_FLAGS eFlag) CDEBUG2LN(DEBUG_TRIATHLON, "SET_TRI_RACE_UI_FLAG :: setting ", GET_STRING_FROM_TRI_UI_FLAG(eFlag)) race.eUIFlags = race.eUIFlags | eFlag ENDPROC PROC CLEAR_TRI_RACE_UI_FLAG(TRI_RACE_STRUCT &race, TRI_UI_FLAGS eFlag) CDEBUG2LN(DEBUG_TRIATHLON, "CLEAR_TRI_RACE_UI_FLAG :: clearing ", GET_STRING_FROM_TRI_UI_FLAG(eFlag)) race.eUIFlags -= race.eUIFlags & eFlag ENDPROC FUNC BOOL IS_TRI_RACE_UI_FLAG_SET(TRI_RACE_STRUCT &race, TRI_UI_FLAGS eFlag) RETURN (ENUM_TO_INT(race.eUIFlags) & ENUM_TO_INT(eFlag)) <> 0 ENDFUNC #IF IS_DEBUG_BUILD // SPR Widget toggle. STRUCT TRI_WIDGET_TOGGLE BOOL bCur, bLst ENDSTRUCT // SPR Widget button. STRUCT TRI_WIDGET_BUTTON BOOL bCur ENDSTRUCT // SPR Widget int. STRUCT TRI_WIDGET_INT INT iCur, iLst ENDSTRUCT // SPR Widget float. STRUCT TRI_WIDGET_FLOAT FLOAT fCur, fLst ENDSTRUCT // SPR Widget vector. STRUCT TRI_WIDGET_VECTOR VECTOR vCur, vLst ENDSTRUCT // SPR Widget Textbox. STRUCT TRI_WIDGET_TEXTBOX TEXT_WIDGET_ID WidgetID TEXT_LABEL_31 szCur, szLst ENDSTRUCT // SPR Widget Listbox. STRUCT TRI_WIDGET_LISTBOX INT iCur, iLst ENDSTRUCT // SPR Widget Gates. STRUCT TRI_WIDGET_GATES WIDGET_GROUP_ID GroupID TRI_WIDGET_BUTTON Create TRI_WIDGET_BUTTON Delete TRI_WIDGET_TOGGLE ShowAll TRI_WIDGET_BUTTON SnapSelected TRI_WIDGET_INT Selection TRI_WIDGET_VECTOR Position TRI_WIDGET_FLOAT Radius TRI_WIDGET_LISTBOX ChkpntType TRI_WIDGET_LISTBOX StuntType TRI_WIDGET_LISTBOX RelMode TRI_WIDGET_TOGGLE RelAbs TRI_WIDGET_VECTOR RelMove ENDSTRUCT // SPR Widget Racers. STRUCT TRI_WIDGET_RACERS WIDGET_GROUP_ID GroupID TRI_WIDGET_BUTTON Create TRI_WIDGET_BUTTON Delete TRI_WIDGET_TOGGLE ShowAll TRI_WIDGET_INT Selection TRI_WIDGET_TEXTBOX Name TRI_WIDGET_VECTOR Position TRI_WIDGET_FLOAT Heading TRI_WIDGET_LISTBOX DriverType TRI_WIDGET_LISTBOX DriverModel TRI_WIDGET_LISTBOX VehicleModel TRI_WIDGET_LISTBOX RelMode TRI_WIDGET_TOGGLE RelAbs TRI_WIDGET_VECTOR RelMove BOOL bRacerQueue[TRI_RACER_MAX] ENDSTRUCT // SPR Widget Race. STRUCT TRI_WIDGET_RACE WIDGET_GROUP_ID GroupID TRI_WIDGET_TEXTBOX Error //TRI_WIDGET_FLOAT Time TRI_WIDGET_TEXTBOX Name TRI_WIDGET_TEXTBOX FileName TRI_WIDGET_BUTTON Create TRI_WIDGET_LISTBOX Pick TRI_WIDGET_BUTTON Load TRI_WIDGET_BUTTON Save TRI_WIDGET_BUTTON Export TRI_WIDGET_GATES Gates TRI_WIDGET_RACERS Racers TRI_RACE_STRUCT Race ENDSTRUCT // SPR Widget Race Mode. STRUCT TRI_WIDGET_RACEMODE WIDGET_GROUP_ID GroupID ENDSTRUCT // SPR Widget Edit Mode. STRUCT TRI_WIDGET_EDITMODE WIDGET_GROUP_ID GroupID TRI_WIDGET_LISTBOX CamMode TRI_WIDGET_LISTBOX CamFocus TRI_WIDGET_RACE Race TRI_INPUT_STRUCT Input TRI_CAMERA_STRUCT Camera ENDSTRUCT // SPR Widget Main. STRUCT TRI_WIDGET_MAIN WIDGET_GROUP_ID GroupID TRI_WIDGET_LISTBOX TRIMode TRI_WIDGET_RACEMODE RaceMode TRI_WIDGET_EDITMODE EditMode ENDSTRUCT #ENDIF // IS_DEBUG_BUILD STRUCT TRI_NEWS_EVENT_NODE TRI_RACE_NEWS_EVENT eNews TRI_RACE_EVENT_FLAGS eFlags INT iTimeStamp INT iPriority ENDSTRUCT STRUCT TRI_NEWS_EVENT_DATA TRI_RACE_NEWS_EVENT eLastEvent = TRNE_INVALID TRI_NEWS_EVENT_NODE sEvents[TRI_EVENT_QUEUE_COUNT] INT iCurRank INT iLastRank INT iRallyFallbackRank structTimer sRankTimer structTimer sLastCommentaryTimer structTimer sLongRankTimer structTimer sRallyFallbackTimer TRI_RACE_EVENT_DATA_FLAGS eFlags structPedsForConversation convoStruct ENDSTRUCT // SPR Master. STRUCT TRI_MASTER_STRUCT TRI_RACE_TYPE_ENUM eRaceType VEHICLE_INDEX PlayerVeh TRI_RACE_CHECKPOINT_TYPE eDefChkPntType VECTOR vDefRcrPos FLOAT fDefRcrHead PED_TYPE eDefDrvType MODEL_NAMES eDefDrvModel MODEL_NAMES eDefVehModel TEXT_LABEL_63 szXMLPath TEXT_LABEL_63 szSCHPath TEXT_LABEL_15 szTRIPath TEXT_LABEL_31 szMainPath TEXT_LABEL_15 szRacesPath INT iRaceCur, iRaceCnt FLOAT fRaceTime[TRI_RACE_MAX] TEXT_LABEL_31 szRaceName[TRI_RACE_MAX] TEXT_LABEL_31 szRaceFileName[TRI_RACE_MAX] FLOAT fTimeGold[TRI_RACE_MAX] FLOAT fTimeBronze[TRI_RACE_MAX] INT iBS // Added for Conor's offline SCLB warning message OBJECT_INDEX oTable OBJECT_INDEX oClipboard OBJECT_INDEX oPencil PED_INDEX pedTableGuy PED_VARIATION_STRUCT sPlayerVariation BOOL bVariationRestored = FALSE BOOL bOutfitChanged = FALSE BOOL bQuitting = FALSE SIMPLE_USE_CONTEXT uiInput // Once done with testing, convert to hardcoded INT iNavBlockAreas[5] TRI_NEWS_EVENT_DATA sEventData // FLOAT fNavBlockHeadings[5] // VECTOR vNavBlockScales[5] // VECTOR vNavBlockPositions[5] //SCRIPT_SCALEFORM_UI uiInput ENDSTRUCT PROC SETUP_NAVMESH_BLOCKING_VALUES_HARDCODED(TRIATHLON_RACE_INDEX eCurrentTriRace, INT iNavIndex, VECTOR& vPos, VECTOR& vScale, FLOAT& fHeading) SWITCH eCurrentTriRace CASE TRIATHLON_RACE_VESPUCCI SWITCH iNavIndex CASE 0 vPos = << -1285.28811, -2039.94321, 1.60045 >> vScale = << 4.0, 10.2, 10.0>> fHeading = 2.3168 BREAK CASE 1 vPos = << -1268.66729, -2024.77961, 1.56780 >> vScale = << 4.0, 10.2, 10.0>> fHeading = 2.4 BREAK CASE 2 vPos = << -1227.08472, -2053.45801, 12.98837 >> vScale = << 5.0, 14.0, 10.0 >> fHeading = 2.6 BREAK CASE 3 vPos = << -1210.86499, -2052.28882, 13.0 >> vScale = << 1.96, 3.0, 10.0 >> fHeading = 2.865 BREAK CASE 4 vPos = << -1215.45227, -2065.8811, 13.0 >> vScale = << 1.63, 2.9, 10.0 >> fHeading = 2.685 BREAK ENDSWITCH BREAK CASE TRIATHLON_RACE_ALAMO_SEA SWITCH iNavIndex CASE 0 vPos = << 2384.31685, 4268.87617, 30.44363 >> vScale = << 4.0, 10.0, 10.0>> fHeading = 6.047 BREAK CASE 1 vPos = << 2384.97534, 4289.71924, 30.32816 >> vScale = << 4.0, 10.0, 10.0>> fHeading = 3.238 BREAK CASE 2 vPos = << 2436.90698, 4282.84961, 35.58720 >> vScale = << 4.5, 13.0, 10.0 >> fHeading = 3.019 BREAK CASE 3 vPos = << 2411.25024, 4298.00635, 34.98311 >> vScale = << 2.1, 3.2, 10.0 >> fHeading = 1.19 BREAK CASE 4 vPos = << 0.0, 0.0, 0.0 >> vScale = << 1.63, 2.9, 0.0 >> fHeading = 2.685 BREAK ENDSWITCH BREAK CASE TRIATHLON_RACE_IRONMAN SWITCH iNavIndex CASE 0 vPos = << 1568.879, 3829.782, 30.95098 >> vScale = << 4.0, 9.9, 10.0>> fHeading = 2.107 BREAK CASE 1 vPos = << 1586.192, 3842.765, 30.538 >> vScale = << 4.0, 9.9, 10.0>> fHeading = 2.295 BREAK CASE 2 vPos = << 1594.00220, 3810.71753, 33.55904 >> vScale = << 4.0, 12.0, 10.0 >> fHeading = 2.251 BREAK CASE 3 vPos = << 1604.67896, 3828.30786, 33.82485 >> vScale = << 1.96, 3.0, 10.0 >> fHeading = 0.876 BREAK CASE 4 vPos = << 1607.13513, 3824.38794, 33.06039 >> vScale = << 1.63, 2.9, 0.0 >> fHeading = 0.0 BREAK ENDSWITCH BREAK ENDSWITCH ENDPROC // Debug only. Only used for adjusting positions if needed. If adjusting, remember to update the hardcoded versions //PROC SETUP_NAVMESH_BLOCKING_VALUES(TRI_MASTER_STRUCT& triMaster, TRIATHLON_RACE_INDEX eCurrentTriRace) // SWITCH eCurrentTriRace // CASE TRIATHLON_RACE_VESPUCCI // // 0 - Gate left // // 1 - Gate right // // 2 - Registration tent // // 3 - Food truck 1 // // 4 - Food truck 2 // triMaster.vNavBlockPositions[0] = << -1285.28811, -2039.94321, 1.60045 >> // triMaster.vNavBlockPositions[1] = << -1268.66729, -2024.77961, 1.56780 >> // triMaster.vNavBlockPositions[2] = << -1227.08472, -2053.45801, 12.98837 >> // triMaster.vNavBlockPositions[3] = << -1210.86499, -2052.28882, 13.0 >> // triMaster.vNavBlockPositions[4] = << -1215.45227, -2065.8811, 13.0 >> // // triMaster.fNavBlockHeadings[0] = 2.3168 // triMaster.fNavBlockHeadings[1] = 2.4 // triMaster.fNavBlockHeadings[2] = 2.6 // triMaster.fNavBlockHeadings[3] = 2.865 // triMaster.fNavBlockHeadings[4] = 2.685 // // triMaster.vNavBlockScales[0] = << 4.0, 10.2, 10.0>> // triMaster.vNavBlockScales[1] = << 4.0, 10.2, 10.0>> // triMaster.vNavBlockScales[2] = << 5.0, 14.0, 10.0 >> // triMaster.vNavBlockScales[3] = << 1.96, 3.0, 10.0 >> // triMaster.vNavBlockScales[4] = << 1.63, 2.9, 10.0 >> // // CPRINTLN(DEBUG_TRIATHLON, "BLOCK_NAV_AROUND_TRIATHLON_PROPS: Blocking props at TRIATHLON_RACE_VESPUCCI location") // BREAK // CASE TRIATHLON_RACE_ALAMO_SEA // // 0 - Gate left // // 1 - Gate right // // 2 - Registration tent // // 3 - Food truck 1 // triMaster.vNavBlockPositions[0] = << 2384.31685, 4268.87617, 30.44363 >> // triMaster.vNavBlockPositions[1] = << 2384.97534, 4289.71924, 30.32816 >> // triMaster.vNavBlockPositions[2] = << 2436.90698, 4282.84961, 35.58720 >> // triMaster.vNavBlockPositions[3] = << 2411.25024, 4298.00635, 34.98311 >> // triMaster.vNavBlockPositions[4] = << 0,0,0 >> // // triMaster.vNavBlockScales[0] = << 4.0, 10.0, 10.0>> // triMaster.vNavBlockScales[1] = << 4.0, 10.0, 10.0>> // triMaster.vNavBlockScales[2] = << 4.5, 13.0, 10.0 >> // triMaster.vNavBlockScales[3] = << 2.1, 3.2, 10.0 >> // triMaster.vNavBlockScales[4] = << 1.63, 2.9, 0.0 >> // // triMaster.fNavBlockHeadings[0] = 6.047 // triMaster.fNavBlockHeadings[1] = 3.238 // triMaster.fNavBlockHeadings[2] = 3.019 // triMaster.fNavBlockHeadings[3] = 1.19 // triMaster.fNavBlockHeadings[4] = 0.0 // // CPRINTLN(DEBUG_TRIATHLON, "BLOCK_NAV_AROUND_TRIATHLON_PROPS: Blocking props at TRIATHLON_RACE_ALAMO_SEA location") // BREAK // CASE TRIATHLON_RACE_IRONMAN // // 0 - Gate left // // 1 - Gate right // // 2 - Registration tent // // 3 - Food truck 1 // // 4 - Food truck 2 // triMaster.vNavBlockPositions[0] = << 1568.879, 3829.782, 30.95098 >> // triMaster.vNavBlockPositions[1] = << 1586.192, 3842.765, 30.538 >> // triMaster.vNavBlockPositions[2] = << 1594.00220, 3810.71753, 33.55904 >> // triMaster.vNavBlockPositions[3] = << 1604.67896, 3828.30786, 33.82485 >> // triMaster.vNavBlockPositions[4] = << 1607.13513, 3824.38794, 33.06039 >> // // triMaster.fNavBlockHeadings[0] = 2.107 // triMaster.fNavBlockHeadings[1] = 2.295 // triMaster.fNavBlockHeadings[2] = 2.251 // triMaster.fNavBlockHeadings[3] = 0.876 // triMaster.fNavBlockHeadings[4] = 0.0 // // triMaster.vNavBlockScales[0] = << 4.0, 9.9, 10.0>> // triMaster.vNavBlockScales[1] = << 4.0, 9.9, 10.0>> // triMaster.vNavBlockScales[2] = << 4.0, 12.0, 10.0 >> // triMaster.vNavBlockScales[3] = << 1.96, 3.0, 10.0 >> // triMaster.vNavBlockScales[4] = << 1.63, 2.9, 0.0 >> // // CPRINTLN(DEBUG_TRIATHLON, "BLOCK_NAV_AROUND_TRIATHLON_PROPS: Blocking props at TRIATHLON_RACE_IRONMAN location") // BREAK // ENDSWITCH //ENDPROC // ===================================== // BEGIN Bitflags for Tri // ===================================== // Check if the player has been warned about failing the race /// PURPOSE: Control flags and functions (below) for controlling tri fail reasons and other stuff ENUM TRI_CONTROL_FLAGS TCF_TOLD_HOW_TO_QUIT = BIT0, TCF_WARNED_AND_LEFT_VEHICLE = BIT1, TCF_CAN_FORFEIT_ON_TRIBIKE = BIT2, TCF_SHOW_CHECKPOINTS = BIT3, TCF_NEWS_CAM_SHOWN = BIT4, TCF_NEWS_CAM_ACTIVE = BIT5, TCF_FINISHED_RACE = BIT6, TCF_SKIP_INTRO_ON_RESTART = BIT7, TCF_HAS_BEEN_ON_BIKE = BIT8, TCF_RACE_RESTARTING = BIT9, TCF_FAIL_CHECKING = BIT10, TCF_TRI_MOUNTED = BIT11, TCF_TRI_CUTSCENE_PLAYING = BIT12, TCF_TRI_SKIPPED_CUTSCENE = BIT13, TCF_INTRO_ANIM_SPEEDS_SET = BIT14, TCF_BIG_CHEERS_PLAYED = BIT15, TCF_END_MENU_CREATED = BIT16, TCF_RACER_WAYPOINTED_1 = BIT17, // These may be refactored into the racer struct if more TCFs are needed TCF_RACER_WAYPOINTED_2 = BIT18, // TCF_RACER_WAYPOINTED_3 = BIT19, // TCF_RACER_WAYPOINTED_4 = BIT20, // TCF_RACER_WAYPOINTED_5 = BIT21, // TCF_RACER_WAYPOINTED_6 = BIT22, // TCF_RACER_WAYPOINTED_7 = BIT23, // TCF_REMOVED_SWIM_GEAR = BIT24, TCF_UNPATCH_CORONA = BIT25, TCF_SHOW_SCLB = BIT26, TCF_NEWS_CAST_INTERRUPTED = BIT27, TCF_OUTRO_ASSETS_REQUESTED = BIT28, TCF_QUIT_SCREEN_ON = BIT29, TCF_QUITTING_RACE = BIT30 ENDENUM FUNC STRING GET_TRI_CONTROL_FLAG_NAME(TRI_CONTROL_FLAGS eFlag) SWITCH eFlag CASE TCF_OUTRO_ASSETS_REQUESTED RETURN "TCF_OUTRO_ASSETS_REQUESTED" CASE TCF_NEWS_CAST_INTERRUPTED RETURN "TCF_NEWS_CAST_INTERRUPTED" CASE TCF_SHOW_SCLB RETURN "TCF_SHOW_SCLB" CASE TCF_UNPATCH_CORONA RETURN "TCF_UNPATCH_CORONA" CASE TCF_END_MENU_CREATED RETURN "TCF_END_MENU_CREATED" CASE TCF_BIG_CHEERS_PLAYED RETURN "TCF_BIG_CHEERS_PLAYED" CASE TCF_RACER_WAYPOINTED_7 RETURN "TCF_RACER_WAYPOINTED_7" CASE TCF_RACER_WAYPOINTED_6 RETURN "TCF_RACER_WAYPOINTED_6" CASE TCF_RACER_WAYPOINTED_5 RETURN "TCF_RACER_WAYPOINTED_5" CASE TCF_RACER_WAYPOINTED_4 RETURN "TCF_RACER_WAYPOINTED_4" CASE TCF_RACER_WAYPOINTED_3 RETURN "TCF_RACER_WAYPOINTED_3" CASE TCF_RACER_WAYPOINTED_2 RETURN "TCF_RACER_WAYPOINTED_2" CASE TCF_RACER_WAYPOINTED_1 RETURN "TCF_RACER_WAYPOINTED_1" CASE TCF_REMOVED_SWIM_GEAR RETURN "TCF_REMOVED_SWIM_GEAR" CASE TCF_INTRO_ANIM_SPEEDS_SET RETURN "TCF_INTRO_ANIM_SPEEDS_SET" CASE TCF_TRI_SKIPPED_CUTSCENE RETURN "TCF_TRI_SKIPPED_CUTSCENE" CASE TCF_TRI_CUTSCENE_PLAYING RETURN "TCF_TRI_CUTSCENE_PLAYING" CASE TCF_TRI_MOUNTED RETURN "TCF_TRI_MOUNTED" CASE TCF_FAIL_CHECKING RETURN "TCF_FAIL_CHECKING" CASE TCF_RACE_RESTARTING RETURN "TCF_RACE_RESTARTING" CASE TCF_HAS_BEEN_ON_BIKE RETURN "TCF_HAS_BEEN_ON_BIKE" CASE TCF_SKIP_INTRO_ON_RESTART RETURN "TCF_SKIP_INTRO_ON_RESTART" CASE TCF_FINISHED_RACE RETURN "TCF_FINISHED_RACE" CASE TCF_NEWS_CAM_ACTIVE RETURN "TCF_NEWS_CAM_ACTIVE" CASE TCF_NEWS_CAM_SHOWN RETURN "TCF_NEWS_CAM_SHOWN" CASE TCF_SHOW_CHECKPOINTS RETURN "TCF_SHOW_CHECKPOINTS" CASE TCF_CAN_FORFEIT_ON_TRIBIKE RETURN "TCF_CAN_FORFEIT_ON_TRIBIKE" CASE TCF_WARNED_AND_LEFT_VEHICLE RETURN "TCF_WARNED_AND_LEFT_VEHICLE" CASE TCF_TOLD_HOW_TO_QUIT RETURN "TCF_TOLD_HOW_TO_QUIT " CASE TCF_QUIT_SCREEN_ON RETURN "TCF_QUIT_SCREEN_ON" CASE TCF_QUITTING_RACE RETURN "TCF_QUITTING_RACE" ENDSWITCH RETURN "Unknown TRI_CONTROL_FLAG" ENDFUNC FUNC BOOL IS_TRI_CONTROL_FLAG_SET(TRI_CONTROL_FLAGS eFlagToCheck) RETURN IS_BITMASK_AS_ENUM_SET(iControlFlags, eFlagToCheck) ENDFUNC PROC SET_TRI_CONTROL_FLAG(TRI_CONTROL_FLAGS eFlagToSet) IF NOT IS_TRI_CONTROL_FLAG_SET(eFlagToSet) SET_BITMASK_AS_ENUM(iControlFlags, eFlagToSet) CPRINTLN(DEBUG_TRIATHLON, "[Triathlon.sc->SET_TRI_CONTROL_FLAG] :: ", GET_TRI_CONTROL_FLAG_NAME(eFlagToSet)) ENDIF ENDPROC PROC CLEAR_TRI_CONTROL_FLAG(TRI_CONTROL_FLAGS eFlagToClear) IF IS_TRI_CONTROL_FLAG_SET(eFlagToClear) CLEAR_BITMASK_AS_ENUM(iControlFlags, eFlagToClear) CPRINTLN(DEBUG_TRIATHLON, "[Triathlon.sc->CLEAR_TRI_CONTROL_FLAG] :: ", GET_TRI_CONTROL_FLAG_NAME(eFlagToClear)) ENDIF ENDPROC // ===================================== // END Bitflags for Tri // ===================================== // ----------------------------------- // VARIABLES // ----------------------------------- // SPR Master Data (DO NOT MOVE). TRI_MASTER_STRUCT TRI_Master // ----------------------------------- // PROCS/FUNCTIONS // ----------------------------------- PROC RESET_TRI_CIN_CAM_TIMER(TRI_RACE_STRUCT &thisRace) thisRace.fCinCamTimer = 0 ENDPROC PROC INCREASE_TRI_CIN_CAM_TIMER(TRI_RACE_STRUCT &thisRace) thisRace.fCinCamTimer += GET_FRAME_TIME() ENDPROC FUNC FLOAT GET_TRI_CIN_CAM_TIMER(TRI_RACE_STRUCT &thisRace) RETURN thisRace.fCinCamTimer ENDFUNC PROC RESET_TRI_CHEERING_TIMER(TRI_RACE_STRUCT &thisRace) thisRace.fCheeringTimer = 0 ENDPROC PROC INCREASE_TRI_CHEERING_TIMER(TRI_RACE_STRUCT &thisRace) thisRace.fCheeringTimer += GET_FRAME_TIME() ENDPROC FUNC FLOAT GET_TRI_CHEERING_TIMER(TRI_RACE_STRUCT &thisRace) RETURN thisRace.fCheeringTimer ENDFUNC /// PURPOSE: /// co-opts the cheering timer, they aren't used at the same times. /// PARAMS: /// thisRace - PROC RESET_TRI_INTRO_CHATTER_TIMER(TRI_RACE_STRUCT &thisRace) thisRace.fCheeringTimer = 0 ENDPROC /// PURPOSE: /// co-opts the cheering timer, they aren't used at the same times. /// PARAMS: /// thisRace - PROC INCREASE_TRI_INTRO_CHATTER_TIMER(TRI_RACE_STRUCT &thisRace) thisRace.fCheeringTimer += GET_FRAME_TIME() ENDPROC /// PURPOSE: /// co-opts the cheering timer, they aren't used at the same times. /// PARAMS: /// thisRace - /// RETURNS: /// FUNC FLOAT GET_TRI_INTRO_CHATTER_TIMER(TRI_RACE_STRUCT &thisRace) RETURN thisRace.fCheeringTimer ENDFUNC FUNC STRING GET_STRING_FROM_PCF_FLAG( PED_CONFIG_FLAGS eFlag ) SWITCH eFlag CASE PCF_DisableDeepSurfaceAnims RETURN "PCF_DisableDeepSurfaceAnims" CASE PCF_ForceDeepSurfaceCheck RETURN "PCF_ForceDeepSurfaceCheck" ENDSWITCH RETURN "Unknown PED_CONFIG_FLAGS enum" ENDFUNC /// PURPOSE: /// Turns use of PCF_DisableDeepSurfaceAnims on and off. PROC TRI_SET_PED_CONFIG_FLAG(PED_INDEX ped, PED_CONFIG_FLAGS pcf_flag, BOOL bUse) CPRINTLN( DEBUG_TRIATHLON, "TRI_SET_PED_CONFIG_FLAG flag_", GET_STRING_FROM_PCF_FLAG( pcf_flag ), " set on ped=", NATIVE_TO_INT( ped ), ", bUse=", PICK_STRING( bUse, "TRUE", "FALSE" ) ) SET_PED_CONFIG_FLAG( ped, pcf_flag, bUse ) ENDPROC