/// PC Benchmark script USING "rage_builtins.sch" USING "globals.sch" USING "script_player.sch" USING "script_DEBUG.sch" USING "commands_script.sch" USING "commands_entity.sch" USING "commands_ped.sch" USING "commands_misc.sch" USING "RC_Helper_Functions.sch" USING "commands_event.sch" USING "savegame_private.sch" USING "flow_reset_game.sch" USING "script_misc.sch" //USING "flow_public_game.sch" ENUM BENCHMARK_STATE BENCHMARK_STATE_INIT, BENCHMARK_STATE_WARP_TO_AREA_FADE_OUT, BENCHMARK_STATE_WARP_TO_AREA_FADE_IN, BENCHMARK_STATE_WARP_TO_AREA_TIMELAPSE, BENCHMARK_STATE_JET_FLYBY, BENCHMARK_STATE_INTERP_JET_TO_PED, BENCHMARK_STATE_WANTED_LEVEL, BENCHMARK_STATE_FINISHED, BENCHMARK_STATE_MAX ENDENUM BENCHMARK_STATE m_eCurrentBenchmarkState = BENCHMARK_STATE_INIT //ENUM BENCHMARK_BLOCK_REASON // BMBR_NONE = 0, // // BMBR_FORCE_CLEANUP_OCCURRED, // BMBR_ALREADY_RUNNING, // BMBR_PLAYER_SWITCH_IN_PROGRESS, // BMBR_TIMETABLE_SCENE_IN_PROGRESS, // BMBR_IN_TAXI, // BMBR_LOCKED_INTO_TRIGGER, // BMBR_ON_RAMPAGE, // BMBR_IN_GARAGE, // BMBR_IN_SHOP, // BMBR_RESULT_SCREEN_DISPLAYING, // BMBR_AUTOSAVE_IN_PROGRESS, // BMBR_TRANSITION_ACTIVE, // BMBR_PLAYER_IS_WANTED, // BMBR_PLAYER_BEING_ARRESTED, // BMBR_REPEAT_PLAY_ACTIVE, // BMBR_FINALE_CHOICE_RUNNING, // BMBR_ON_MISSION, // BMBR_NOT_SAFE_TO_SAVE, // BMBR_CUTSCENE_RUNNING //ENDENUM FEATURE_BLOCK_REASON m_eFeatureBlockReason BOOL m_bPausedGameForAlertScreen BOOL m_bSaveBenchmarkResults = FALSE BOOL m_bCurrentlyBenchmarking = FALSE FLOAT m_fFramesPerSecondToDisplay INT m_iCurrentFramesPerSecondArraySlot = 0 CONST_INT FPS_ARRAY_SIZE 10 FLOAT m_fFramesPerSecondArray[FPS_ARRAY_SIZE] INT m_iBenchmarkIterationsToDo INT m_iBenchmarkIterationsDone INT m_iBenchmarkPassToDo //FLOAT m_fRectCentreX = 0.131 //FLOAT m_fRectCentreY = 0.14 //FLOAT m_fRectWidth = 0.162 //FLOAT m_fRectHeight = 0.07 //INT m_iRectAlpha = 180 FLOAT m_fFPSStringX = 0.5 FLOAT m_fFPSStringY = 0.9 // Player pos and heading when starting the benchmarking VECTOR vPlayerStartPosition FLOAT fPlayerStartHeading CONST_INT NUM_WARP_TO_AREA_POSITIONS 5 INT m_iCurrentWarpToAreaPosition VECTOR m_vWarpToAreaPosition[NUM_WARP_TO_AREA_POSITIONS] FLOAT m_fWarpToAreaHeading[NUM_WARP_TO_AREA_POSITIONS] VECTOR m_vCamPosStart[NUM_WARP_TO_AREA_POSITIONS] VECTOR m_vCamRotStart[NUM_WARP_TO_AREA_POSITIONS] VECTOR m_vCamPosDest[NUM_WARP_TO_AREA_POSITIONS] VECTOR m_vCamRotDest[NUM_WARP_TO_AREA_POSITIONS] INT m_iTimeToWaitBeforeWarp BOOL m_bDoneWarpToAreaFadeIn BOOL m_bDoneWarpToAreaFadeOut VEHICLE_INDEX m_vehJet MODEL_NAMES m_modelJet = LAZER INT m_iJetCarRecording = 000 STRING m_sJetCarRecording = "pc_bench" FLOAT m_fJetStartAtCarrecTime = 4500 INT m_iJetSetupTimer INT m_iInterpToJetTime = 10000 INT m_iInterpFromJetAtCarrecTime = 104000 INT m_iTimeInterpFromJetToPed = 10000 INT m_iInterpFromJetToPedTimer FLOAT m_fJetRecordingPlaybackSpeed = 2.0 BOOL m_bStartedCinematicCamOnJet = FALSE BOOL m_bStoppedCinematicCamOnJet = FALSE INT m_iStartCinematicCamOnJetAtCarrecTime = 32000 INT m_iStopCinematicCamOnJetAtCarrecTime = 100000 VEHICLE_INDEX m_vehCar MODEL_NAMES m_modelCar = PATRIOT VECTOR m_vCarPos = <<295.5545, 175.0924, 103.0558>> FLOAT m_fCarHeading = 66.6414 BOOL m_bDoneRepopulate CONST_INT NUM_PED_GANG 3 PED_INDEX m_pedGang[NUM_PED_GANG] MODEL_NAMES m_modelGang[NUM_PED_GANG] VECTOR m_vPedGang0 = <<299.0901, 184.7974, 103.1263>> FLOAT m_fPedGang0 = 142.0870 REL_GROUP_HASH relGroupPeds BOOL m_bPedEnteredCar INT m_iShockingEvent INT m_iGangCarRecording = 001 STRING m_sGangCarRecording = "pc_bench" CONST_INT NUM_TRAFFIC_JAM 2 VEHICLE_INDEX m_vehTrafficJam[NUM_TRAFFIC_JAM] MODEL_NAMES m_modelVehTrafficJam[NUM_TRAFFIC_JAM] PED_INDEX m_pedTrafficJam[NUM_TRAFFIC_JAM] MODEL_NAMES m_modelPedTrafficJam[NUM_TRAFFIC_JAM] VECTOR m_vTrafficJam[NUM_TRAFFIC_JAM] FLOAT m_fTrafficJam[NUM_TRAFFIC_JAM] VEHICLE_INDEX m_vehTanker MODEL_NAMES m_modelTanker = TANKER CAMERA_INDEX m_camExplosion BOOL m_bCreatedTrafficJam BOOL m_bCarExploded INT m_iWantedLevelTimer INT m_iTimeUntilEndWanted = 70000 INT m_iExplodeCarTimer INT m_iExplodeAmbientCarsTimer INT m_iFadeTime = 500 CAMERA_INDEX m_cameraInterp CAMERA_INDEX m_cameraInterp2 structTimelapse m_sTimelapse TIMEOFDAY m_todReference INT m_iSkipToHour FLOAT m_fAmbientPedDensity = 0.0 FLOAT m_fAmbientVehicleDensity = 0.0 FLOAT m_fAmbientScenarioDensity = 0.0 BOOL m_bUseCinematicCamera = FALSE VEHICLE_INDEX m_vehLastPlayerVehicle = NULL #IF IS_DEBUG_BUILD WIDGET_GROUP_ID widgetBenchmark BOOL m_bOutputJetRecordingPos = FALSE BOOL m_bOutputGangCarPlaybackPosition = FALSE PROC BENCHMARK_CREATE_WIDGET() IF NOT DOES_WIDGET_GROUP_EXIST(widgetBenchmark) CPRINTLN(DEBUG_MISSION, "BENCHMARK: creating benchmark widget") widgetBenchmark = START_WIDGET_GROUP("Benchmark widgets") ADD_WIDGET_BOOL("Use cinematic camera during vehicle sections", m_bUseCinematicCamera) ADD_WIDGET_FLOAT_SLIDER("Ambient ped density", m_fAmbientPedDensity, 0.0, 2.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Ambient vehicle density", m_fAmbientVehicleDensity, 0.0, 2.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Ambient scenario density", m_fAmbientScenarioDensity, 0.0, 2.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Jet start at carrec time", m_fJetStartAtCarrecTime, 0.0, 30000.0, 500.0) ADD_WIDGET_FLOAT_SLIDER("Jet recording playback speed", m_fJetRecordingPlaybackSpeed, 1.0, 10.0, 1.0) ADD_WIDGET_BOOL("m_bOutputJetRecordingPos", m_bOutputJetRecordingPos) ADD_WIDGET_INT_SLIDER("Camera interp to jet time", m_iInterpToJetTime, 0, 30000, 1000) ADD_WIDGET_INT_SLIDER("Camera interp from jet at carrec time", m_iInterpFromJetAtCarrecTime, 0, 150000, 1000) ADD_WIDGET_INT_SLIDER("Camera interp to ped time", m_iTimeInterpFromJetToPed, 0, 15000, 1000) ADD_WIDGET_BOOL("Output gang car playback position", m_bOutputGangCarPlaybackPosition) //ADD_WIDGET_FLOAT_SLIDER("m_fRectCentreX", m_fRectCentreX, 0.0, 1.0, 0.001) //ADD_WIDGET_FLOAT_SLIDER("m_fRectCentreY", m_fRectCentreY, 0.0, 1.0, 0.001) //ADD_WIDGET_FLOAT_SLIDER("m_fRectWidth", m_fRectWidth, 0.0, 1.0, 0.001) //ADD_WIDGET_FLOAT_SLIDER("m_fRectHeight", m_fRectHeight, 0.0, 1.0, 0.001) //ADD_WIDGET_INT_SLIDER("m_iRectAlpha", m_iRectAlpha, 0, 255, 1) ADD_WIDGET_FLOAT_SLIDER("m_fFPSStringX", m_fFPSStringX, 0.0, 1.0, 0.001) ADD_WIDGET_FLOAT_SLIDER("m_fFPSStringY", m_fFPSStringY, 0.0, 1.0, 0.001) STOP_WIDGET_GROUP() ENDIF ENDPROC PROC BENCHMARK_CLEANUP_WIDGET() IF DOES_WIDGET_GROUP_EXIST(widgetBenchmark) CPRINTLN(DEBUG_MISSION, "BENCHMARK: removing benchmark widget") DELETE_WIDGET_GROUP(widgetBenchmark) ENDIF ENDPROC #ENDIF PROC BENCHMARK_COMMANDS_TO_RUN_EVERY_FRAME() REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() // Suppress replay recording because it'll likely affect benchmark results DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() DISABLE_CINEMATIC_BONNET_CAMERA_THIS_UPDATE() SET_SCENARIO_PED_DENSITY_MULTIPLIER_THIS_FRAME(m_fAmbientScenarioDensity, m_fAmbientScenarioDensity) SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(m_fAmbientVehicleDensity) SET_RANDOM_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(m_fAmbientVehicleDensity) SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.5) // Fewer parked vehicles to take up vehicle spots SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(m_fAmbientPedDensity) HIDE_HUD_AND_RADAR_THIS_FRAME() DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_SELECT) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LEADERBOARD) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_SOCIAL_CLUB) DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_SOCIAL_CLUB_SECONDARY) ENDPROC PROC BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK(INT iTime = 500, BOOL bWaitForFade = TRUE) IF IS_SCREEN_FADED_IN() IF NOT IS_SCREEN_FADING_OUT() DO_SCREEN_FADE_OUT(iTime) IF bWaitForFade WHILE NOT IS_SCREEN_FADED_OUT() BENCHMARK_COMMANDS_TO_RUN_EVERY_FRAME() WAIT(0) ENDWHILE ENDIF ENDIF ENDIF ENDPROC PROC BENCHMARK_SAFE_FADE_SCREEN_IN_FROM_BLACK(INT iTime = 500, BOOL bWaitForFade = TRUE) IF IS_SCREEN_FADED_OUT() OR IS_SCREEN_FADING_OUT() IF NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(iTime) SHUTDOWN_LOADING_SCREEN() ENDIF ENDIF IF bWaitForFade WHILE NOT IS_SCREEN_FADED_IN() BENCHMARK_COMMANDS_TO_RUN_EVERY_FRAME() WAIT(0) ENDWHILE ENDIF ENDPROC PROC BENCHMARK_CLEANUP_WARP_TO_AREA() CPRINTLN(DEBUG_MISSION, "BENCHMARK: cleaning up BENCHMARK_STATE_WARP_TO_AREA") RENDER_SCRIPT_CAMS(FALSE, FALSE) DESTROY_ALL_CAMS() ENDPROC PROC BENCHMARK_CLEANUP_JET_FLYBY() CPRINTLN(DEBUG_MISSION, "BENCHMARK: cleaning up BENCHMARK_STATE_JET_FLYBY") IF IS_ENTITY_ALIVE(m_vehJet) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(m_vehJet) STOP_PLAYBACK_RECORDED_VEHICLE(m_vehJet) ENDIF IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), m_vehJet) SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF ENDIF SAFE_DELETE_VEHICLE(m_vehJet) REMOVE_VEHICLE_RECORDING(m_iJetCarRecording, m_sJetCarRecording) SET_MODEL_AS_NO_LONGER_NEEDED(m_modelJet) RENDER_SCRIPT_CAMS(FALSE, FALSE) DESTROY_ALL_CAMS() ENDPROC PROC BENCHMARK_CLEANUP_GANG_CAR_MODELS() SET_MODEL_AS_NO_LONGER_NEEDED(m_modelCar) INT i = 0 REPEAT NUM_PED_GANG i SET_MODEL_AS_NO_LONGER_NEEDED(m_modelGang[i]) ENDREPEAT ENDPROC PROC BENCHMARK_CLEANUP_TRAFFIC_JAM_MODELS() INT i = 0 REPEAT NUM_TRAFFIC_JAM i SET_MODEL_AS_NO_LONGER_NEEDED(m_modelPedTrafficJam[i]) SET_MODEL_AS_NO_LONGER_NEEDED(m_modelVehTrafficJam[i]) ENDREPEAT SET_MODEL_AS_NO_LONGER_NEEDED(m_modelTanker) ENDPROC PROC BENCHMARK_CLEANUP_WANTED_LEVEL() CPRINTLN(DEBUG_MISSION, "BENCHMARK: cleaning up BENCHMARK_STATE_WANTED_LEVEL") SET_DISPATCH_COPS_FOR_PLAYER(PLAYER_ID(), FALSE) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) SET_MAX_WANTED_LEVEL(5) IF IS_ENTITY_ALIVE(m_vehCar) SET_ENTITY_INVINCIBLE(m_vehCar, FALSE) SET_VEHICLE_DOORS_LOCKED(m_vehCar, VEHICLELOCK_UNLOCKED) IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), m_vehCar) SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF ENDIF INT i = 0 REPEAT NUM_PED_GANG i SAFE_RELEASE_PED(m_pedGang[i]) ENDREPEAT IF IS_ENTITY_ALIVE(m_vehTrafficJam[0]) SET_ENTITY_LOAD_COLLISION_FLAG(m_vehTrafficJam[0], FALSE) ENDIF i = 0 REPEAT NUM_TRAFFIC_JAM i SAFE_RELEASE_PED(m_pedTrafficJam[i]) SAFE_RELEASE_VEHICLE(m_vehTrafficJam[i]) ENDREPEAT IF IS_ENTITY_ALIVE(m_vehTanker) FREEZE_ENTITY_POSITION(m_vehTanker, FALSE) ENDIF SAFE_RELEASE_VEHICLE(m_vehTanker) REMOVE_RELATIONSHIP_GROUP(relGroupPeds) SAFE_DELETE_VEHICLE(m_vehCar) SET_MODEL_AS_NO_LONGER_NEEDED(m_modelCar) REMOVE_VEHICLE_RECORDING(m_iGangCarRecording, m_sGangCarRecording) REMOVE_ALL_SHOCKING_EVENTS(FALSE) RENDER_SCRIPT_CAMS(FALSE, FALSE) DESTROY_ALL_CAMS() ENDPROC /// PURPOSE: /// Gets called if the benchmark was started via the command line / landing screen and we don't need to do any cleanup, only fade to black and quit the game PROC BENCHMARK_QUIT_GAME() CPRINTLN(DEBUG_MISSION, "BENCHMARK: fade out to black, quit game and terminate benchmark script") BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK() // If launched from landing menu, restart game (close and re-open) IF LANDING_SCREEN_STARTED_END_USER_BENCHMARK() RESTART_GAME() ELSE QUIT_GAME() ENDIF TERMINATE_THIS_THREAD() ENDPROC PROC BENCHMARK_CLEANUP(BOOL b_DoFullCleanup = TRUE) CPRINTLN(DEBUG_MISSION, "BENCHMARK: starting basic cleanup") CLEAR_PRINTS() CLEAR_HELP() SAFE_RELEASE_VEHICLE(m_vehLastPlayerVehicle) BENCHMARK_CLEANUP_GANG_CAR_MODELS() BENCHMARK_CLEANUP_TRAFFIC_JAM_MODELS() BENCHMARK_CLEANUP_WARP_TO_AREA() BENCHMARK_CLEANUP_JET_FLYBY() BENCHMARK_CLEANUP_WANTED_LEVEL() CPRINTLN(DEBUG_MISSION, "BENCHMARK: finished basic cleanup") IF b_DoFullCleanup = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: starting full cleanup") CLEAR_ADDITIONAL_TEXT(MISSION_TEXT_SLOT, TRUE) #IF IS_DEBUG_BUILD BENCHMARK_CLEANUP_WIDGET() #ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE,DEFAULT,FALSE) SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), FALSE) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(PLAYER_PED_ID(), KNOCKOFFVEHICLE_DEFAULT) ENDIF SET_CINEMATIC_MODE_ACTIVE(FALSE) SET_CONTROL_SHAKE_SUPPRESSED_ID(PLAYER_CONTROL, -1) CLEAR_WEATHER_TYPE_PERSIST() RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE") //BENCHMARK_SAFE_FADE_SCREEN_IN_FROM_BLACK(m_iFadeTime, FALSE) // The subsequent QUEUE_MISSION_REPEAT_LOAD handles fading in now //Reload pre-benchmark save QUEUE_MISSION_REPEAT_LOAD() CPRINTLN(DEBUG_MISSION, "BENCHMARK: finished full cleanup so terminating benchmark script") TERMINATE_THIS_THREAD() ENDIF ENDPROC PROC ADVANCE_BENCHMARK_STATE() m_eCurrentBenchmarkState = INT_TO_ENUM(BENCHMARK_STATE, ENUM_TO_INT(m_eCurrentBenchmarkState) + 1) ENDPROC PROC START_BENCHMARKING() IF m_bCurrentlyBenchmarking = FALSE m_bCurrentlyBenchmarking = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: start benchmarking") START_END_USER_BENCHMARK() ENDIF ENDPROC PROC STOP_BENCHMARKING() CLEAR_HELP() // Clear the quit benchmarking help text IF m_bCurrentlyBenchmarking = TRUE m_bCurrentlyBenchmarking = FALSE CPRINTLN(DEBUG_MISSION, "BENCHMARK: stop benchmarking") STOP_END_USER_BENCHMARK() m_bSaveBenchmarkResults = TRUE // At least one benchmark has completed so we need to output the results when exiting this benchmarking script ENDIF ENDPROC PROC BENCHMARK_REPOPULATE_WORLD() INSTANTLY_FILL_PED_POPULATION() INSTANTLY_FILL_VEHICLE_POPULATION() POPULATE_NOW() ENDPROC PROC RETURN_PLAYER_TO_START_BENCHMARK_POSITION() IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND NOT IS_VECTOR_ZERO(vPlayerStartPosition) IF IS_ENTITY_ALIVE(m_vehLastPlayerVehicle) CPRINTLN(DEBUG_MISSION, "BENCHMARK: warping player to his starting vehicle") SET_ENTITY_VISIBLE(m_vehLastPlayerVehicle, TRUE) SET_VEHICLE_DOORS_LOCKED(m_vehLastPlayerVehicle, VEHICLELOCK_UNLOCKED) FREEZE_ENTITY_POSITION(m_vehLastPlayerVehicle, FALSE) SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), m_vehLastPlayerVehicle, VS_DRIVER) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) SET_VEHICLE_ON_GROUND_PROPERLY(m_vehLastPlayerVehicle) ELSE CPRINTLN(DEBUG_MISSION, "BENCHMARK: warping player to his starting location") SET_ENTITY_COORDS(PLAYER_PED_ID(), vPlayerStartPosition) SET_ENTITY_HEADING(PLAYER_PED_ID(), fPlayerStartHeading) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) ENDIF SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) WAIT_FOR_WORLD_TO_LOAD(vPlayerStartPosition) BENCHMARK_REPOPULATE_WORLD() ENDIF ENDPROC PROC HANDLE_EXITING_BENCHMARKING() IF m_eCurrentBenchmarkState != BENCHMARK_STATE_INIT IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("BMARK_EXIT") IF IS_SCREEN_FADED_IN() //CPRINTLN(DEBUG_MISSION, "BENCHMARK: displaying help text BMARK_EXIT") PRINT_HELP_FOREVER("BMARK_EXIT") ENDIF ELSE IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() CPRINTLN(DEBUG_MISSION, "BENCHMARK: Player quit benchmarking.") STOP_BENCHMARKING() // TODO 2320901 - Ensure benchmark results are saved out when quitting early. IF m_bSaveBenchmarkResults CPRINTLN(DEBUG_MISSION, "BENCHMARK: Saving benchmark results as we quit early.") SAVE_END_USER_BENCHMARK() ENDIF IF UI_STARTED_END_USER_BENCHMARK() BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK(m_iFadeTime, TRUE) //RETURN_PLAYER_TO_START_BENCHMARK_POSITION() // The QUEUE_MISSION_REPEAT_LOAD in BENCHMARK_CLEANUP() handles repositioning the player now //BENCHMARK_SAFE_FADE_SCREEN_IN_FROM_BLACK(m_iFadeTime, FALSE) // The QUEUE_MISSION_REPEAT_LOAD in BENCHMARK_CLEANUP() handles repositioning the player now BENCHMARK_CLEANUP() ELSE BENCHMARK_QUIT_GAME() ENDIF RESET_END_USER_BENCHMARK() ENDIF ENDIF ENDIF ENDPROC PROC DISPLAY_FPS() IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("BMARK_EXIT") // Looks cleaner to have this appear when the help text does m_fFramesPerSecondArray[m_iCurrentFramesPerSecondArraySlot] = 1 / GET_SYSTEM_TIME_STEP() //CPRINTLN(DEBUG_MISSION, "BENCHMARK: array slot ", m_iCurrentFramesPerSecondArraySlot," = ", m_fFramesPerSecondArray[m_iCurrentFramesPerSecondArraySlot]) m_iCurrentFramesPerSecondArraySlot++ IF m_iCurrentFramesPerSecondArraySlot = FPS_ARRAY_SIZE // We've filled the array so work out the average and reset it m_iCurrentFramesPerSecondArraySlot = 0 // Reset the current slot FLOAT fNewFramesPerSecondToDisplay = 0.0 INT i = 0 REPEAT FPS_ARRAY_SIZE i fNewFramesPerSecondToDisplay += m_fFramesPerSecondArray[i] ENDREPEAT m_fFramesPerSecondToDisplay = fNewFramesPerSecondToDisplay / FPS_ARRAY_SIZE //CPRINTLN(DEBUG_MISSION, "BENCHMARK: m_fFramesPerSecondToDisplay updated to ", m_fFramesPerSecondToDisplay) ENDIF IF m_fFramesPerSecondToDisplay > 0.0 /*FLOAT fRectCentreX = m_fRectCentreX FLOAT fRectCentreY = m_fRectCentreY FLOAT fRectWidth = m_fRectWidth FLOAT fFPSStringX = m_fFPSStringX FLOAT fFPSStringY = m_fFPSStringY FLOAT fScreenAspectRatio = GET_SCREEN_ASPECT_RATIO() // Set the position of the "fps" text and rectangle depending on the screen aspect ratio IF (fScreenAspectRatio > 1.24 AND fScreenAspectRatio < 1.26) // 1.250000 1280x1024 fRectCentreX = 0.168 fRectCentreY = m_fRectCentreY fRectWidth = 0.231 fFPSStringX = 0.057 fFPSStringY = m_fFPSStringY ELIF (fScreenAspectRatio > 1.33 AND fScreenAspectRatio < 1.34) // 1.333333 // 800x600 1024x768 1152x864 1280x960 fRectCentreX = 0.161 fRectCentreY = m_fRectCentreY fRectWidth = 0.216 fFPSStringX = 0.056 fFPSStringY = m_fFPSStringY ELIF (fScreenAspectRatio > 1.35 AND fScreenAspectRatio < 1.36) // 1.353638 1600x1200 fRectCentreX = 0.153 fRectCentreY = m_fRectCentreY fRectWidth = 0.207 fFPSStringX = m_fFPSStringX fFPSStringY = m_fFPSStringY ELIF (fScreenAspectRatio > 1.55 AND fScreenAspectRatio < 1.57) // 1.562500 1600x1024 fRectCentreX = 0.140 fRectCentreY = 0.198 fRectWidth = 0.181 fFPSStringX = m_fFPSStringX fFPSStringY = 0.159 ELIF (fScreenAspectRatio > 1.59 AND fScreenAspectRatio < 1.61) // 1.600000 1280x800 1680x1050 fRectCentreX = 0.138 fRectCentreY = 0.189 fRectWidth = 0.176 fFPSStringX = m_fFPSStringX fFPSStringY = 0.149 ELIF (fScreenAspectRatio > 1.62 AND fScreenAspectRatio < 1.63) // 1.624365 1920x1200 fRectCentreX = 0.137 fRectCentreY = 0.186 fRectWidth = 0.173 fFPSStringX = m_fFPSStringX fFPSStringY = 0.146 ELIF (fScreenAspectRatio > 1.66 AND fScreenAspectRatio < 1.67) // 1.666667 1280x768 fRectCentreX = 0.136 fRectCentreY = 0.172 fRectWidth = 0.172 fFPSStringX = m_fFPSStringX fFPSStringY = 0.132 ELSE // 1.77778 1280x720 1600x900 1920x1080 // 1.770833 1360x768 // 1.778646 1366x768 fRectCentreX = m_fRectCentreX fRectCentreY = m_fRectCentreY fRectWidth = m_fRectWidth fFPSStringX = m_fFPSStringX fFPSStringY = m_fFPSStringY ENDIF DRAW_RECT(fRectCentreX+0.5, fRectCentreY, fRectWidth, m_fRectHeight, 0, 0, 0, m_iRectAlpha)*/ SET_TEXT_JUSTIFICATION(FONT_CENTRE) SET_TEXT_OUTLINE() DISPLAY_TEXT_WITH_FLOAT(m_fFPSStringX, m_fFPSStringY, "BMARK_FPS", m_fFramesPerSecondToDisplay, 1) ENDIF ENDIF ENDPROC PROC BENCHMARK_SET_WEATHER(INT iWeather) SWITCH iWeather CASE 0 SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY") BREAK CASE 1 SET_WEATHER_TYPE_NOW_PERSIST("SMOG") BREAK CASE 2 SET_WEATHER_TYPE_NOW_PERSIST("RAIN") BREAK CASE 3 SET_WEATHER_TYPE_NOW_PERSIST("CLEAR") BREAK CASE 4 SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY") BREAK ENDSWITCH ENDPROC PROC BENCHMARK_LOAD_JET_FLYBY_ASSETS() REQUEST_MODEL(m_modelJet) REQUEST_VEHICLE_RECORDING(m_iJetCarRecording, m_sJetCarRecording) WHILE NOT HAS_MODEL_LOADED(m_modelJet) AND NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(m_iJetCarRecording, m_sJetCarRecording) WAIT(0) ENDWHILE CPRINTLN(DEBUG_MISSION, "BENCHMARK: loaded jet flyby assets") ENDPROC PROC BENCHMARK_SETUP_JET_FLYBY() IF m_iCurrentWarpToAreaPosition = 4 AND m_iTimeToWaitBeforeWarp > -1 AND (GET_GAME_TIMER() - m_iJetSetupTimer) > (m_iTimeToWaitBeforeWarp - 5000) IF NOT IS_ENTITY_ALIVE(m_vehJet) VECTOR v_pos, v_rot v_pos = GET_POSITION_OF_VEHICLE_RECORDING_ID_AT_TIME(GET_VEHICLE_RECORDING_ID(m_iJetCarRecording, m_sJetCarRecording), m_fJetStartAtCarrecTime) v_rot = GET_ROTATION_OF_VEHICLE_RECORDING_ID_AT_TIME(GET_VEHICLE_RECORDING_ID(m_iJetCarRecording, m_sJetCarRecording), m_fJetStartAtCarrecTime) m_vehJet = CREATE_VEHICLE(m_modelJet, v_pos, v_rot.z) SET_ENTITY_INVINCIBLE(m_vehJet, TRUE) SET_VEHICLE_ENGINE_ON(m_vehJet, TRUE, TRUE) SET_VEHICLE_CAN_BE_VISIBLY_DAMAGED(m_vehJet, FALSE) SET_VEHICLE_CAN_BREAK(m_vehJet, FALSE) SET_ENTITY_PROOFS(m_vehJet, TRUE, TRUE, TRUE, TRUE, TRUE) CONTROL_LANDING_GEAR(m_vehJet, LGC_RETRACT_INSTANT) SET_ENTITY_LOD_DIST(m_vehJet, 5000) START_PLAYBACK_RECORDED_VEHICLE(m_vehJet, m_iJetCarRecording, m_sJetCarRecording) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(m_vehJet) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(m_vehJet, m_fJetStartAtCarrecTime) ENDIF SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), m_vehJet) m_iTimeToWaitBeforeWarp = -1 m_fAmbientPedDensity = 2.0 m_fAmbientVehicleDensity = 2.0 m_fAmbientScenarioDensity = 1.0 ENDIF ENDIF ENDPROC PROC REQUEST_CAR_AND_PED_MODELS() REQUEST_MODEL(m_modelCar) INT i = 0 REPEAT NUM_PED_GANG i REQUEST_MODEL(m_modelGang[i]) ENDREPEAT REQUEST_VEHICLE_RECORDING(m_iGangCarRecording, m_sGangCarRecording) ENDPROC PROC BENCHMARK_CREATE_CAR_AND_PEDS() IF NOT IS_ENTITY_ALIVE(m_vehCar) REQUEST_CAR_AND_PED_MODELS() IF NOT HAS_MODEL_LOADED(m_modelCar) EXIT ENDIF INT i = 0 REPEAT NUM_PED_GANG i IF NOT HAS_MODEL_LOADED(m_modelGang[i]) EXIT ENDIF ENDREPEAT IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(m_iGangCarRecording, m_sGangCarRecording) EXIT ENDIF VECTOR v_pos, v_rot v_pos = GET_POSITION_OF_VEHICLE_RECORDING_ID_AT_TIME(GET_VEHICLE_RECORDING_ID(m_iGangCarRecording, m_sGangCarRecording), 0) v_rot = GET_ROTATION_OF_VEHICLE_RECORDING_ID_AT_TIME(GET_VEHICLE_RECORDING_ID(m_iGangCarRecording, m_sGangCarRecording), 0) CLEAR_AREA(v_pos, 5.0, TRUE) m_vehCar = CREATE_VEHICLE(m_modelCar, v_pos, v_rot.z) SET_VEHICLE_TYRES_CAN_BURST(m_vehCar, FALSE) SET_VEHICLE_WHEELS_CAN_BREAK(m_vehCar, FALSE) SET_VEHICLE_ALARM(m_vehCar, FALSE) SET_DISABLE_PRETEND_OCCUPANTS(m_vehCar, TRUE) SET_ENTITY_LOD_DIST(m_vehCar, 200) SET_VEHICLE_STRONG(m_vehCar, TRUE) SET_VEHICLE_HAS_STRONG_AXLES(m_vehCar, TRUE) SET_ENTITY_INVINCIBLE(m_vehCar, TRUE) SET_VEHICLE_MOD_KIT(m_vehCar, 0) SET_VEHICLE_MOD(m_vehCar, MOD_ARMOUR, 2) SET_VEHICLE_MOD(m_vehCar, MOD_ENGINE, 3) SET_VEHICLE_MOD(m_vehCar, MOD_BRAKES, 2) SET_VEHICLE_MOD(m_vehCar, MOD_GEARBOX, 2) SET_VEHICLE_MOD(m_vehCar, MOD_WHEELS, 10) SET_VEHICLE_MOD(m_vehCar, MOD_REAR_WHEELS, 10) TOGGLE_VEHICLE_MOD(m_vehCar, MOD_TOGGLE_XENON_LIGHTS, TRUE) TOGGLE_VEHICLE_MOD(m_vehCar, MOD_TOGGLE_NITROUS, TRUE) TOGGLE_VEHICLE_MOD(m_vehCar, MOD_TOGGLE_HYDRAULICS, TRUE) TOGGLE_VEHICLE_MOD(m_vehCar, MOD_TOGGLE_TYRE_SMOKE, TRUE) TOGGLE_VEHICLE_MOD(m_vehCar, MOD_TOGGLE_SUBWOOFER, TRUE) SET_VEHICLE_COLOURS(m_vehCar, 0, 0) SET_VEHICLE_EXTRA_COLOURS(m_vehCar, 0, 0) SET_VEHICLE_NUMBER_PLATE_TEXT_INDEX(m_vehCar, 1) ADD_RELATIONSHIP_GROUP("rel_group_peds", relGroupPeds) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, relGroupPeds) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupPeds, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupPeds, RELGROUPHASH_COP) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_COP, relGroupPeds) m_pedGang[0] = CREATE_PED(PEDTYPE_MISSION, m_modelGang[0], m_vPedGang0, m_fPedGang0) m_pedGang[1] = CREATE_PED_INSIDE_VEHICLE(m_vehCar, PEDTYPE_MISSION, m_modelGang[1], VS_BACK_LEFT) m_pedGang[2] = CREATE_PED_INSIDE_VEHICLE(m_vehCar, PEDTYPE_MISSION, m_modelGang[2], VS_BACK_RIGHT) i = 0 REPEAT NUM_PED_GANG i IF IS_ENTITY_ALIVE(m_pedGang[i]) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(m_pedGang[i], TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(m_pedGang[i], relGroupPeds) SET_PED_SUFFERS_CRITICAL_HITS(m_pedGang[i], FALSE) SET_PED_CAN_BE_TARGETTED(m_pedGang[i], FALSE) SET_PED_CONFIG_FLAG(m_pedGang[i], PCF_DontInfluenceWantedLevel, TRUE) SET_PED_CONFIG_FLAG(m_pedGang[i], PCF_GetOutBurningVehicle, FALSE) SET_PED_CONFIG_FLAG(m_pedGang[i], PCF_DontAllowToBeDraggedOutOfVehicle, TRUE) SET_PED_CONFIG_FLAG(m_pedGang[i], PCF_AllowMedicsToAttend, FALSE) SET_PED_CONFIG_FLAG(m_pedGang[i], PCF_WillFlyThroughWindscreen, FALSE) SET_ENTITY_INVINCIBLE(m_pedGang[i], TRUE) ENDIF ENDREPEAT CPRINTLN(DEBUG_MISSION, "BENCHMARK: created gang car and peds") BENCHMARK_CLEANUP_GANG_CAR_MODELS() ENDIF ENDPROC PROC REQUEST_TRAFFIC_JAM_MODELS() INT i = 0 REPEAT NUM_TRAFFIC_JAM i REQUEST_MODEL(m_modelVehTrafficJam[i]) REQUEST_MODEL(m_modelPedTrafficJam[i]) ENDREPEAT REQUEST_MODEL(m_modelTanker) ENDPROC FUNC BOOL ARE_TRAFFIC_JAM_MODELS_LOADED() REQUEST_TRAFFIC_JAM_MODELS() INT i = 0 REPEAT NUM_TRAFFIC_JAM i IF NOT HAS_MODEL_LOADED(m_modelVehTrafficJam[i]) RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(m_modelPedTrafficJam[i]) RETURN FALSE ENDIF ENDREPEAT IF NOT HAS_MODEL_LOADED(m_modelTanker) RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL IS_TRAFFIC_JAM_CREATED() IF m_bCreatedTrafficJam = TRUE RETURN TRUE ENDIF IF ARE_TRAFFIC_JAM_MODELS_LOADED() CLEAR_AREA(m_vTrafficJam[0], 10.0, TRUE) INT i = 0 REPEAT NUM_TRAFFIC_JAM i m_vehTrafficJam[i] = CREATE_VEHICLE(m_modelVehTrafficJam[i], m_vTrafficJam[i], m_fTrafficJam[i]) SET_VEHICLE_ON_GROUND_PROPERLY(m_vehTrafficJam[i]) m_pedTrafficJam[i] = CREATE_PED_INSIDE_VEHICLE(m_vehTrafficJam[i], PEDTYPE_MISSION, m_modelPedTrafficJam[i], VS_DRIVER) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(m_pedTrafficJam[i], TRUE) ENDREPEAT SET_ENTITY_LOAD_COLLISION_FLAG(m_vehTrafficJam[0], TRUE) m_vehTanker = CREATE_VEHICLE(m_modelTanker, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(m_vehTrafficJam[0], <<0, -50, 10>>), m_fTrafficJam[0]) ATTACH_VEHICLE_TO_TRAILER(m_vehTrafficJam[0], m_vehTanker) SET_TRAILER_LEGS_RAISED(m_vehTanker) FREEZE_ENTITY_POSITION(m_vehTanker, TRUE) m_bCreatedTrafficJam = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: created traffic jam cars and peds") BENCHMARK_CLEANUP_TRAFFIC_JAM_MODELS() RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC BENCHMARK_PED_ENTER_CAR() IF m_iInterpFromJetToPedTimer > -1 //AND (GET_GAME_TIMER() - m_iInterpFromJetToPedTimer) > 5000 // Make him walk immediately, rather than waiting for 5 seconds then running AND IS_ENTITY_ALIVE(m_vehCar) AND IS_ENTITY_ALIVE(m_pedGang[0]) IF IS_PED_IN_VEHICLE(m_pedGang[0], m_vehCar) IF m_bPedEnteredCar = FALSE CPRINTLN(DEBUG_MISSION, "BENCHMARK: ped entered car") m_bPedEnteredCar = TRUE INT i = 0 REPEAT NUM_PED_GANG i IF IS_ENTITY_ALIVE(m_pedGang[i]) GIVE_WEAPON_TO_PED(m_pedGang[i], WEAPONTYPE_MICROSMG, -1, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(m_pedGang[i], FALSE) SET_ENTITY_INVINCIBLE(m_pedGang[i], FALSE) ENDIF ENDREPEAT IF m_bUseCinematicCamera = TRUE SET_CINEMATIC_MODE_ACTIVE(TRUE) ENDIF IF m_iShockingEvent = 0 m_iShockingEvent = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_SEEN_WEAPON_THREAT, PLAYER_PED_ID()) ENDIF m_fAmbientVehicleDensity = 0.5 // Reduce traffic for the police chase BENCHMARK_CLEANUP_JET_FLYBY() ENDIF ELSE REQUEST_TRAFFIC_JAM_MODELS() IF NOT IsPedPerformingTask(m_pedGang[0], SCRIPT_TASK_ENTER_VEHICLE) TASK_ENTER_VEHICLE(m_pedGang[0], m_vehCar, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVE_WALK) CPRINTLN(DEBUG_MISSION, "BENCHMARK: tasked ped to enter car") ENDIF IF m_bDoneRepopulate = FALSE BENCHMARK_REPOPULATE_WORLD() m_bDoneRepopulate = TRUE ENDIF ENDIF ENDIF ENDPROC PROC BENCHMARK_CAR_RAM_TANKER() IF m_bPedEnteredCar = TRUE AND IS_ENTITY_ALIVE(m_vehCar) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(m_vehCar) START_PLAYBACK_RECORDED_VEHICLE(m_vehCar, m_iGangCarRecording, m_sGangCarRecording) CPRINTLN(DEBUG_MISSION, "BENCHMARK: starting playback on gang car") ELSE SET_PLAYBACK_SPEED(m_vehCar, 0.7) SUPPRESS_LOSING_WANTED_LEVEL_IF_HIDDEN_THIS_FRAME(PLAYER_ID()) SET_PLAYER_WANTED_CENTRE_POSITION(PLAYER_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID())) UPDATE_WANTED_POSITION_THIS_FRAME(PLAYER_ID()) #IF IS_DEBUG_BUILD IF m_bOutputGangCarPlaybackPosition = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: playback on gang car position ", GET_POSITION_IN_RECORDING(m_vehCar)) ENDIF #ENDIF ENDIF ENDIF ENDPROC PROC BENCHMARK_HANDLE_EXPLOSION_CAMERA() IF NOT DOES_CAM_EXIST(m_camExplosion) AND IS_ENTITY_ALIVE(m_vehCar) AND IS_ENTITY_ALIVE(m_vehTanker) AND GET_DISTANCE_BETWEEN_ENTITIES(m_vehCar, m_vehTanker) < 30 m_camExplosion = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<-503.5369, 261.8961, 88.6503>>, <<-0.1443, -0.0000, 103.3085>>, 50.0, TRUE) SHAKE_CAM(m_camExplosion, "HAND_SHAKE", 0.5) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_CINEMATIC_MODE_ACTIVE(FALSE) CPRINTLN(DEBUG_MISSION, "BENCHMARK: changed to final cam") FREEZE_ENTITY_POSITION(m_vehTanker, FALSE) ENDIF ENDPROC FUNC BOOL IS_THIS_MODEL_A_COP(MODEL_NAMES modelPed) IF modelPed = S_M_Y_Cop_01 OR modelPed = S_F_Y_Cop_01 RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC BENCHMARK_MOVE_VEHICLES_AHEAD_OF_CAR() IF IS_ENTITY_ALIVE(m_vehCar) VEHICLE_INDEX veh_random = GET_RANDOM_VEHICLE_IN_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(m_vehCar,<<0,20,0>>), 5.0, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES) IF IS_VEHICLE_OK(veh_random) AND veh_random != m_vehCar PED_INDEX ped_random = GET_PED_IN_VEHICLE_SEAT(veh_random) IF IS_ENTITY_ALIVE(ped_random) AND NOT IsPedPerformingTask(ped_random, SCRIPT_TASK_SMART_FLEE_PED) AND NOT IS_THIS_MODEL_A_COP(GET_ENTITY_MODEL(ped_random)) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped_random, TRUE) SET_PED_FLEE_ATTRIBUTES(ped_random, FA_USE_VEHICLE, TRUE) SET_PED_FLEE_ATTRIBUTES(ped_random, FA_DISABLE_EXIT_VEHICLE, TRUE) TASK_SMART_FLEE_PED(ped_random, PLAYER_PED_ID(), 300, -1) SET_PED_KEEP_TASK(ped_random, TRUE) CPRINTLN(DEBUG_MISSION, "BENCHMARK: set an ambient car to flee") ENDIF SAFE_RELEASE_PED(ped_random) ENDIF SAFE_RELEASE_VEHICLE(veh_random) ENDIF ENDPROC PROC BENCHMARK_BLOW_UP_NEARBY_VEHICLES() IF m_bCarExploded = TRUE AND (GET_GAME_TIMER() - m_iExplodeAmbientCarsTimer) > 250 AND IS_ENTITY_ALIVE(PLAYER_PED_ID()) m_iExplodeAmbientCarsTimer = GET_GAME_TIMER() VEHICLE_INDEX carArray[20] INT iNumCars = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), carArray) INT i = 0 REPEAT iNumCars i IF IS_ENTITY_ALIVE(carArray[i]) AND carArray[i] != m_vehCar //AND carArray[i] != m_vehTanker //AND carArray[i] != m_vehTrafficJam[0] //AND carArray[i] != m_vehTrafficJam[1] AND IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(carArray[i])) // Don't explode helicopters AND GET_DISTANCE_BETWEEN_ENTITIES(carArray[i], PLAYER_PED_ID()) < 20 EXPLODE_VEHICLE(carArray[i]) CPRINTLN(DEBUG_MISSION, "BENCHMARK: exploded car array ", i) EXIT ENDIF ENDREPEAT ENDIF ENDPROC FUNC BOOL SHOULD_TRAFFIC_JAM_EXPLODE() IF m_bCarExploded = TRUE RETURN FALSE // Don't explode the traffic jam if it's already been exploded ENDIF IF (GET_GAME_TIMER() - m_iWantedLevelTimer) > m_iTimeUntilEndWanted // Safety timer in case none of the below occurs CPRINTLN(DEBUG_MISSION, "BENCHMARK: timer elapsed so SHOULD_TRAFFIC_JAM_EXPLODE returning true") RETURN TRUE ENDIF IF IS_ENTITY_ALIVE(m_vehTanker) AND IS_ENTITY_TOUCHING_ENTITY(m_vehCar, m_vehTanker) // Gang car touches tanker CPRINTLN(DEBUG_MISSION, "BENCHMARK: gang car is touching tanker so SHOULD_TRAFFIC_JAM_EXPLODE returning true") EXPLODE_VEHICLE(m_vehTanker) RETURN TRUE ENDIF IF IS_ENTITY_ALIVE(m_vehTrafficJam[0]) AND IS_ENTITY_TOUCHING_ENTITY(m_vehCar, m_vehTrafficJam[0]) // Gang car touches truck pulling the tanker CPRINTLN(DEBUG_MISSION, "BENCHMARK: gang car is touching truck so SHOULD_TRAFFIC_JAM_EXPLODE returning true") EXPLODE_VEHICLE(m_vehTrafficJam[0]) RETURN TRUE ENDIF IF DOES_CAM_EXIST(m_camExplosion) AND GET_ENTITY_SPEED(m_vehCar) < 1 AND GET_DISTANCE_BETWEEN_ENTITIES(m_vehCar, m_vehTanker) < 15 // Gang car is stopped near tanker, probably there's another vehicle blocking the gang car ramming the tanker CPRINTLN(DEBUG_MISSION, "BENCHMARK: gang car is stopped near tanker so SHOULD_TRAFFIC_JAM_EXPLODE returning true") RETURN TRUE ENDIF IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(m_vehCar) AND GET_POSITION_IN_RECORDING(m_vehCar) > 849.0 CPRINTLN(DEBUG_MISSION, "BENCHMARK: gang car playback position is greater than 849.0") RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC SET_STARTING_PASS_TO_DO() IF m_iBenchmarkPassToDo = -1 m_iCurrentWarpToAreaPosition = 0 ELSE m_iCurrentWarpToAreaPosition = m_iBenchmarkPassToDo ENDIF CPRINTLN(DEBUG_MISSION, "BENCHMARK: m_iCurrentWarpToAreaPosition initially set to = ", m_iCurrentWarpToAreaPosition) ENDPROC PROC RESET_BENCHMARK_VARS() m_iInterpFromJetToPedTimer = -1 m_bDoneRepopulate = FALSE m_bPedEnteredCar = FALSE m_iShockingEvent = 0 m_bCreatedTrafficJam = FALSE m_bCarExploded = FALSE m_iExplodeCarTimer = -1 m_fAmbientPedDensity = 0.0 m_fAmbientVehicleDensity = 0.0 m_fAmbientScenarioDensity = 0.0 ENDPROC //================== // BENCHMARK STATES //================== PROC BENCHMARK_INIT() IF g_savedGlobals.sFlow.isGameflowActive // B* 2106274 CPRINTLN(DEBUG_MISSION, " - benchmark.sc - BENCHMARK_INIT - Creating a restore point with autosave as g_savedGlobals.sFlow.isGameflowActive = TRUE.") CPRINTLN(DEBUG_MISSION, "BENCHMARK: Performing pre-init save and script cleanup") Store_RepeatPlay_Snapshot() PERFORM_PRE_SAVEGAME_ROUTINE(FALSE,TRUE) QUEUE_MISSION_REPEAT_SAVE_FOR_BENCHMARK_TEST() WHILE GET_STATUS_OF_MISSION_REPEAT_SAVE() = SAVEGAME_OPERATION_IN_PROGRESS WAIT(0) CPRINTLN(debug_mission,"BENCHMARK: Waiting for repeat play save to finish") ENDWHILE //Quit if the savegame failed IF GET_STATUS_OF_MISSION_REPEAT_SAVE() = SAVEGAME_OPERATION_FAILED CPRINTLN(DEBUG_MISSION,"BENCHMARK: Repeat play save failed. exiting.") TERMINATE_THIS_THREAD() EXIT ELSE CPRINTLN(DEBUG_MISSION,"BENCHMARK: Repeat play save was successful.") ENDIF //Run general script cleanup if this is done RUN_GENERAL_SCRIPT_CLEANUP() ELSE CPRINTLN(DEBUG_MISSION, " - benchmark.sc - BENCHMARK_INIT - Skipped the restore save point as g_savedGlobals.sFlow.isGameflowActive = FALSE.") ENDIF CPRINTLN(DEBUG_MISSION, "BENCHMARK: doing init") CPRINTLN(DEBUG_MISSION, "BENCHMARK: fScreenAspectRatio ", GET_SCREEN_ASPECT_RATIO()) CLEAR_PRINTS() CLEAR_HELP() FORCE_CLOSE_TEXT_INPUT_BOX() IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), TRUE) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(PLAYER_PED_ID(), KNOCKOFFVEHICLE_NEVER) ENDIF SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE,DEFAULT,FALSE) SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), TRUE) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) SET_CONTROL_SHAKE_SUPPRESSED_ID(PLAYER_CONTROL, 1) // See B*1820422 #IF IS_DEBUG_BUILD BENCHMARK_CREATE_WIDGET() #ENDIF WAIT(100) BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK(m_iFadeTime, TRUE) ANIMPOSTFX_STOP_ALL() // B*2204861 REQUEST_ADDITIONAL_TEXT("BMARK", MISSION_TEXT_SLOT) WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT) WAIT(0) ENDWHILE CPRINTLN(DEBUG_MISSION, "BENCHMARK: Starting to wait for building swaps to complete...") WHILE NOT g_bInitialBuildingStatesSet WAIT(0) ENDWHILE CPRINTLN(DEBUG_MISSION, "BENCHMARK: ...Finished waiting for building swaps to complete.") RESET_BENCHMARK_VARS() m_iBenchmarkIterationsToDo = GET_BENCHMARK_ITERATIONS() IF m_iBenchmarkIterationsToDo < 1 m_iBenchmarkIterationsToDo = 1 ENDIF CPRINTLN(DEBUG_MISSION, "BENCHMARK: m_iBenchmarkIterationsToDo = ", m_iBenchmarkIterationsToDo) m_iBenchmarkPassToDo = GET_BENCHMARK_PASS() IF m_iBenchmarkPassToDo < -1 OR m_iBenchmarkPassToDo >= NUM_WARP_TO_AREA_POSITIONS m_iBenchmarkPassToDo = -1 ENDIF CPRINTLN(DEBUG_MISSION, "BENCHMARK: m_iBenchmarkPassToDo = ", m_iBenchmarkPassToDo) SET_STARTING_PASS_TO_DO() m_vWarpToAreaPosition[0] = <<-9.8369, -1474.0880, 29.5453>> // Franklin house 1 m_vWarpToAreaPosition[1] = <<806.0358, 1101.2482, 306.0945>> // Vinewood sign m_vWarpToAreaPosition[2] = <<2005.9663, 3803.6094, 31.1808>> // Trevor's trailer m_vWarpToAreaPosition[3] = <<-1713.2614, -1077.4807, 12.0172>> // Pleasure pier m_vWarpToAreaPosition[4] = <<-663.8303, 4484.1050, 69.2669>> // Waterfall m_fWarpToAreaHeading[0] = 5.4894 m_fWarpToAreaHeading[1] = 348.7347 m_fWarpToAreaHeading[2] = 60.1616 m_fWarpToAreaHeading[3] = 18.8230 m_fWarpToAreaHeading[4] = 238.4128 m_vCamPosStart[0] = <<-3.0097, -1484.3165, 41.1898>> m_vCamPosStart[1] = <<804.6505, 1184.0697, 347.4004>> m_vCamPosStart[2] = <<1987.1251, 3810.7661, 33.2256>> m_vCamPosStart[3] = <<-1705.3199, -1074.6646, 21.6983>> m_vCamPosStart[4] = <<-608.3302, 4463.3027, 23.4348>> m_vCamRotStart[0] = <<0.5292, -0.0000, 24.6248>> m_vCamRotStart[1] = <<-7.4378, -0.0000, 110.8038>> m_vCamRotStart[2] = <<-2.1421, -0.0000, 37.1211>> m_vCamRotStart[3] = <<1.5777, -0.0000, -163.0528>> m_vCamRotStart[4] = <<-1.9612, 0.0000, -127.5001>> m_vCamPosDest[0] = <<-13.8420, -1454.4639, 32.9113>> m_vCamPosDest[1] = <<771.2347, 1091.1151, 337.3588>> m_vCamPosDest[2] = <<1967.3821, 3840.4832, 54.8269>> m_vCamPosDest[3] = <<-1731.1056, -1098.6263, 24.3947>> m_vCamPosDest[4] = <<-615.5822, 4508.3086, 110.3908>> m_vCamRotDest[0] = <<-2.4231, 0.0000, 1.8101>> m_vCamRotDest[1] = <<-4.9158, -0.0000, 22.8592>> m_vCamRotDest[2] = <<-1.2952, -0.0000, 62.8825>> m_vCamRotDest[3] = <<-3.3930, -0.0000, -109.8041>> m_vCamRotDest[4] = <<-22.8700, 0.0000, -133.0594>> m_modelGang[0] = G_M_M_ArmBoss_01 m_modelGang[1] = G_M_M_ArmGoon_01 m_modelGang[2] = G_M_M_ArmLieut_01 m_modelVehTrafficJam[0] = PHANTOM m_modelVehTrafficJam[1] = BOXVILLE m_modelPedTrafficJam[0] = S_M_Y_Construct_01 m_modelPedTrafficJam[1] = S_M_M_Trucker_01 m_vTrafficJam[0] = <<-542.9353, 245.1501, 82.0225>> m_vTrafficJam[1] = <<-543.4668, 235.8478, 81.8742>> m_fTrafficJam[0] = 173.5275 m_fTrafficJam[1] = 191.9280 ADVANCE_BENCHMARK_STATE() ENDPROC PROC BENCHMARK_WARP_TO_AREA_FADE_OUT() CPRINTLN(DEBUG_MISSION, "BENCHMARK: starting warp to area ", m_iCurrentWarpToAreaPosition) BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK(m_iFadeTime, TRUE) BENCHMARK_CLEANUP_WARP_TO_AREA() IF m_iCurrentWarpToAreaPosition = 0 AND IS_VECTOR_ZERO(vPlayerStartPosition) AND m_vehLastPlayerVehicle = NULL AND IS_ENTITY_ALIVE(PLAYER_PED_ID()) vPlayerStartPosition = GET_ENTITY_COORDS(PLAYER_PED_ID()) fPlayerStartHeading = GET_ENTITY_HEADING(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) m_vehLastPlayerVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) ENDIF IF IS_ENTITY_ALIVE(m_vehLastPlayerVehicle) CPRINTLN(DEBUG_MISSION, "BENCHMARK: stored last player vehicle") SET_ENTITY_COORDS(m_vehLastPlayerVehicle, vPlayerStartPosition) SET_ENTITY_HEADING(m_vehLastPlayerVehicle, fPlayerStartHeading) FREEZE_ENTITY_POSITION(m_vehLastPlayerVehicle, TRUE) ENDIF ENDIF SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), m_vWarpToAreaPosition[m_iCurrentWarpToAreaPosition], m_fWarpToAreaHeading[m_iCurrentWarpToAreaPosition]) IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) ENDIF SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) CLEAR_AREA(m_vWarpToAreaPosition[m_iCurrentWarpToAreaPosition], 100.0, TRUE) IF IS_ENTITY_ALIVE(m_vehLastPlayerVehicle) SET_VEHICLE_DOORS_LOCKED(m_vehLastPlayerVehicle, VEHICLELOCK_LOCKED) // So no ambient peds will get in and drive off while the player is elsewhere during the benchmark SET_ENTITY_VISIBLE(m_vehLastPlayerVehicle, FALSE) ENDIF WAIT_FOR_WORLD_TO_LOAD(m_vWarpToAreaPosition[m_iCurrentWarpToAreaPosition], 100, FLAG_MAPDATA | FLAG_COLLISIONS_MOVER, 15000) // Try to ensure streaming requests are completed before we fade in and start the benchmark timing BENCHMARK_REPOPULATE_WORLD() BENCHMARK_SET_WEATHER(m_iCurrentWarpToAreaPosition) IF m_iCurrentWarpToAreaPosition = 4 BENCHMARK_LOAD_JET_FLYBY_ASSETS() ENDIF SET_CLOCK_TIME(12, 0, 0) m_bDoneWarpToAreaFadeIn = FALSE m_bDoneWarpToAreaFadeOut = FALSE ADVANCE_BENCHMARK_STATE() ENDPROC PROC BENCHMARK_WARP_TO_AREA_FADE_IN() IF REQUEST_AMBIENT_AUDIO_BANK("TIME_LAPSE") m_iTimeToWaitBeforeWarp = 15000 m_sTimelapse.splineCamera = CREATE_CAM("DEFAULT_SPLINE_CAMERA") ADD_CAM_SPLINE_NODE(m_sTimelapse.splineCamera, m_vCamPosStart[m_iCurrentWarpToAreaPosition], m_vCamRotStart[m_iCurrentWarpToAreaPosition], m_iTimeToWaitBeforeWarp) ADD_CAM_SPLINE_NODE(m_sTimelapse.splineCamera, m_vCamPosDest[m_iCurrentWarpToAreaPosition], m_vCamRotDest[m_iCurrentWarpToAreaPosition], m_iTimeToWaitBeforeWarp) SET_CAM_SPLINE_PHASE(m_sTimelapse.splineCamera, 0.0) SET_CAM_FOV(m_sTimelapse.splineCamera, 50) SET_CAM_SPLINE_SMOOTHING_STYLE(m_sTimelapse.splineCamera, CAM_SPLINE_SLOW_IN_OUT_SMOOTH) SET_CAM_ACTIVE(m_sTimelapse.splineCamera, TRUE) CPRINTLN(DEBUG_MISSION, "BENCHMARK: setup spline camera for area ", m_iCurrentWarpToAreaPosition, ", from ", m_vCamPosStart[m_iCurrentWarpToAreaPosition], " to ", m_vCamPosDest[m_iCurrentWarpToAreaPosition]) m_sTimelapse.iTimeSkipStage = 0 SET_TODS_CUTSCENE_RUNNING(m_sTimelapse, TRUE, FALSE, 0) m_todReference = GET_CURRENT_TIMEOFDAY() ADD_TIME_TO_TIMEOFDAY(m_todReference, 0, 0, 23, 0) m_iSkipToHour = GET_TIMEOFDAY_HOUR(m_todReference) CPRINTLN(DEBUG_MISSION, "BENCHMARK: set timelapse running for area ", m_iCurrentWarpToAreaPosition, ", m_iSkipToHour = ", m_iSkipToHour) IF m_iCurrentWarpToAreaPosition = 4 m_iJetSetupTimer = GET_GAME_TIMER() ENDIF ADVANCE_BENCHMARK_STATE() ENDIF ENDPROC PROC BENCHMARK_WARP_TO_AREA_TIMELAPSE() IF m_bDoneWarpToAreaFadeIn = FALSE AND DOES_CAM_EXIST(m_sTimelapse.splineCamera) AND GET_CAM_SPLINE_PHASE(m_sTimelapse.splineCamera) > 0.05 BENCHMARK_SAFE_FADE_SCREEN_IN_FROM_BLACK(m_iFadeTime, FALSE) START_BENCHMARKING() m_bDoneWarpToAreaFadeIn = TRUE ENDIF // Start fading out just before the timelapse has finished IF m_bDoneWarpToAreaFadeOut = FALSE AND m_iCurrentWarpToAreaPosition < NUM_WARP_TO_AREA_POSITIONS-1 AND DOES_CAM_EXIST(m_sTimelapse.splineCamera) AND GET_CAM_SPLINE_PHASE(m_sTimelapse.splineCamera) > 0.88 STOP_BENCHMARKING() BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK(m_iFadeTime, FALSE) m_bDoneWarpToAreaFadeOut = TRUE ENDIF BENCHMARK_SETUP_JET_FLYBY() // Setup the jet flyby for the next benchmark // Wait for the timelapse to finish IF SKIP_TO_TIME_DURING_SPLINE_CAMERA(m_iSkipToHour, 0, "EXTRASUNNY", "cirrocumulus", m_sTimelapse, 0.0) CPRINTLN(DEBUG_MISSION, "BENCHMARK: done timelapse for area ", m_iCurrentWarpToAreaPosition) // Manually cleanup assets instead of calling SET_TODS_CUTSCENE_RUNNING(sTimelapse, FALSE) because that will do its own fade which we don't want to do here IF IS_AUDIO_SCENE_ACTIVE("TOD_SHIFT_SCENE") STOP_SOUND(m_sTimelapse.iSplineStageSound) STOP_AUDIO_SCENE("TOD_SHIFT_SCENE") ENDIF CASCADE_SHADOWS_SET_CASCADE_BOUNDS_SCALE(0.6) CASCADE_SHADOWS_ENABLE_ENTITY_TRACKER(FALSE) CASCADE_SHADOWS_ENABLE_FREEZER(FALSE) IF g_savedGlobals.sVehicleGenData.eMissionVehTimeStamp != INVALID_TIMEOFDAY g_savedGlobals.sVehicleGenData.eMissionVehTimeStamp = GET_CURRENT_TIMEOFDAY() ENDIF m_iCurrentWarpToAreaPosition++ IF m_iCurrentWarpToAreaPosition < NUM_WARP_TO_AREA_POSITIONS IF m_iBenchmarkPassToDo = -1 // GET_BENCHMARK_PASS wasn't set so do all passes m_eCurrentBenchmarkState = BENCHMARK_STATE_WARP_TO_AREA_FADE_OUT ELSE // GET_BENCHMARK_PASS was set to something so the user only wanted to do one particular pass, it's been done so finish this iteration BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK(m_iFadeTime, TRUE) m_eCurrentBenchmarkState = BENCHMARK_STATE_FINISHED ENDIF ELSE SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) RENDER_SCRIPT_CAMS(FALSE, TRUE, m_iInterpToJetTime, FALSE) ADVANCE_BENCHMARK_STATE() ENDIF ENDIF ENDPROC PROC BENCHMARK_JET_FLYBY() IF IS_ENTITY_ALIVE(m_vehJet) AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(m_vehJet) SET_PLAYBACK_SPEED(m_vehJet, m_fJetRecordingPlaybackSpeed) INT iCurrentCarrecTime = ROUND(GET_TIME_POSITION_IN_RECORDING(m_vehJet)) #IF IS_DEBUG_BUILD IF m_bOutputJetRecordingPos = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: get_time_position_in_recording = ", iCurrentCarrecTime) ENDIF #ENDIF IF iCurrentCarrecTime > m_iInterpFromJetAtCarrecTime CPRINTLN(DEBUG_MISSION, "BENCHMARK: done jet flyby") ADVANCE_BENCHMARK_STATE() ELIF m_bStartedCinematicCamOnJet = FALSE IF iCurrentCarrecTime > m_iStartCinematicCamOnJetAtCarrecTime IF m_bUseCinematicCamera = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: started cinematic cam on jet at carrec time ", iCurrentCarrecTime) SET_CINEMATIC_MODE_ACTIVE(TRUE) ENDIF m_bStartedCinematicCamOnJet = TRUE REQUEST_CAR_AND_PED_MODELS() // Start requesting the car and ped models for the next section ENDIF ELIF m_bStoppedCinematicCamOnJet = FALSE IF iCurrentCarrecTime > m_iStopCinematicCamOnJetAtCarrecTime IF m_bUseCinematicCamera = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: stopped cinematic cam on jet at carrec time ", iCurrentCarrecTime) SET_CINEMATIC_MODE_ACTIVE(FALSE) ENDIF m_bStoppedCinematicCamOnJet = TRUE ENDIF ENDIF ENDIF ENDPROC PROC BENCHMARK_INTERP_JET_TO_PED() IF NOT DOES_CAM_EXIST(m_cameraInterp) m_cameraInterp = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, GET_FINAL_RENDERED_CAM_COORD(), GET_FINAL_RENDERED_CAM_ROT(), GET_FINAL_RENDERED_CAM_FOV()) m_cameraInterp2 = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<295.1843, 168.9212, 111.3010>>, <<-43.0954, 0.0000, 1.3863>>, GET_FINAL_RENDERED_CAM_FOV()) SET_CAM_ACTIVE_WITH_INTERP(m_cameraInterp2, m_cameraInterp, m_iTimeInterpFromJetToPed) RENDER_SCRIPT_CAMS(TRUE, FALSE, DEFAULT_INTERP_TO_FROM_GAME, FALSE) CPRINTLN(DEBUG_MISSION, "BENCHMARK: started camera interp from jet to ground") m_iInterpFromJetToPedTimer = GET_GAME_TIMER() ENDIF BENCHMARK_CREATE_CAR_AND_PEDS() BENCHMARK_PED_ENTER_CAR() // 250 ms after the interp starts, warp the player into the patriot if it has been created by that point, if not warp the player to where the car will be created so he doesn't continue zooming off in the jet and cause world drop out IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND (GET_GAME_TIMER() - m_iInterpFromJetToPedTimer) > 250 IF IS_ENTITY_ALIVE(m_vehCar) IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), m_vehCar) SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), m_vehCar) CPRINTLN(DEBUG_MISSION, "BENCHMARK: teleported player into car") ENDIF ELSE IF IS_ENTITY_ALIVE(m_vehJet) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), m_vehJet) SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), m_vCarPos, m_fCarHeading) CPRINTLN(DEBUG_MISSION, "BENCHMARK: teleported player out of jet") ENDIF ENDIF ENDIF IF (GET_GAME_TIMER() - m_iInterpFromJetToPedTimer) > m_iTimeInterpFromJetToPed AND IS_ENTITY_ALIVE(m_vehCar) AND IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), m_vehCar) CPRINTLN(DEBUG_MISSION, "BENCHMARK: done interp from jet to ped") m_iWantedLevelTimer = GET_GAME_TIMER() ADVANCE_BENCHMARK_STATE() ENDIF ENDPROC PROC BENCHMARK_WANTED_LEVEL() IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < 2 SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), FALSE) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 2) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) SET_MAX_WANTED_LEVEL(2) SET_DISPATCH_COPS_FOR_PLAYER(PLAYER_ID(), TRUE) ENDIF BENCHMARK_PED_ENTER_CAR() IF IS_TRAFFIC_JAM_CREATED() BENCHMARK_CAR_RAM_TANKER() BENCHMARK_HANDLE_EXPLOSION_CAMERA() BENCHMARK_MOVE_VEHICLES_AHEAD_OF_CAR() BENCHMARK_BLOW_UP_NEARBY_VEHICLES() ENDIF IF NOT IS_ENTITY_ALIVE(m_vehCar) IF m_iExplodeCarTimer = -1 m_iExplodeCarTimer = GET_GAME_TIMER() ELIF (GET_GAME_TIMER() - m_iExplodeCarTimer) > 5000 CPRINTLN(DEBUG_MISSION, "BENCHMARK: done wanted level") STOP_BENCHMARKING() BENCHMARK_SAFE_FADE_SCREEN_OUT_TO_BLACK(m_iFadeTime, TRUE) BENCHMARK_CLEANUP_WANTED_LEVEL() ADVANCE_BENCHMARK_STATE() ENDIF ELIF SHOULD_TRAFFIC_JAM_EXPLODE() IF GET_ENTITY_HEALTH(m_vehCar) > 0.0 SET_ENTITY_INVINCIBLE(m_vehCar, FALSE) SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), TRUE) // B*2047835, player is in m_vehCar so ensure we set the player back to invincible SET_VEHICLE_TYRES_CAN_BURST(m_vehCar, TRUE) SET_VEHICLE_WHEELS_CAN_BREAK(m_vehCar, TRUE) SET_VEHICLE_STRONG(m_vehCar, FALSE) EXPLODE_VEHICLE(m_vehCar) m_bCarExploded = TRUE m_iExplodeAmbientCarsTimer = GET_GAME_TIMER() CPRINTLN(DEBUG_MISSION, "BENCHMARK: set car on fire") ENDIF ENDIF ENDPROC PROC BENCHMARK_FINISHED() CPRINTLN(DEBUG_MISSION, "BENCHMARK: done all benchmarks") IF m_bSaveBenchmarkResults = TRUE CPRINTLN(DEBUG_MISSION, "BENCHMARK: saving benchmark results") SAVE_END_USER_BENCHMARK() ENDIF m_iBenchmarkIterationsDone++ CPRINTLN(DEBUG_MISSION, "BENCHMARK: m_iBenchmarkIterationsDone = ", m_iBenchmarkIterationsDone, " m_iBenchmarkIterationsToDo = ", m_iBenchmarkIterationsToDo) IF m_iBenchmarkIterationsDone >= m_iBenchmarkIterationsToDo IF UI_STARTED_END_USER_BENCHMARK() RESET_END_USER_BENCHMARK() //RETURN_PLAYER_TO_START_BENCHMARK_POSITION() // The QUEUE_MISSION_REPEAT_LOAD in BENCHMARK_CLEANUP() handles repositioning the player now BENCHMARK_CLEANUP() ELSE BENCHMARK_QUIT_GAME() RESET_END_USER_BENCHMARK() ENDIF ELSE BENCHMARK_CLEANUP(FALSE) CPRINTLN(DEBUG_MISSION, "BENCHMARK: finished cleanup for iteration ", m_iBenchmarkIterationsDone) RESET_BENCHMARK_VARS() SET_STARTING_PASS_TO_DO() m_eCurrentBenchmarkState = BENCHMARK_STATE_WARP_TO_AREA_FADE_OUT ENDIF ENDPROC /// PURPOSE: Returns whether running the benchmark is currently blocked and why //FUNC BENCHMARK_BLOCK_REASON GET_BENCHMARK_BLOCKED_REASON() // // IF HAS_FORCE_CLEANUP_OCCURRED() // CPRINTLN(DEBUG_MISSION, "BENCHMARK: HAS_FORCE_CLEANUP_OCCURRED returned true") // RETURN BMBR_FORCE_CLEANUP_OCCURRED // ELIF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_OF_THIS_SCRIPT_NAME()) > 1 // CPRINTLN(DEBUG_MISSION, "BENCHMARK: benchmark is already running") // RETURN BMBR_ALREADY_RUNNING // ELIF IS_PLAYER_SWITCH_IN_PROGRESS() // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player switch is in progress") // RETURN BMBR_PLAYER_SWITCH_IN_PROGRESS // ELIF Is_Player_Timetable_Scene_In_Progress() // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player timetable scene is in progress") // RETURN BMBR_TIMETABLE_SCENE_IN_PROGRESS // ELIF g_bPlayerIsInTaxi // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player is in a taxi") // RETURN BMBR_IN_TAXI // ELIF g_bPlayerLockedInToTrigger = TRUE // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player is locked in to trigger a mission") // RETURN BMBR_LOCKED_INTO_TRIGGER // ELIF g_bIsOnRampage = TRUE // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player is on a rampage") // RETURN BMBR_ON_RAMPAGE // ELIF g_sVehicleGenNSData.bInGarage = TRUE // OR GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = g_intPlayerGarage // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player is in a garage") // RETURN BMBR_IN_GARAGE // ELIF (IS_PLAYER_IN_ANY_SHOP() OR IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP() OR IS_ANY_SHOP_INTRO_RUNNING() OR IS_PLAYER_IN_BARBER_CHAIR_OR_DOING_BARBER_INTRO()) // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player is in a shop") // RETURN BMBR_IN_SHOP // ELIF IS_RESULT_SCREEN_DISPLAYING() // CPRINTLN(DEBUG_MISSION, "BENCHMARK: result screen is displaying") // RETURN BMBR_RESULT_SCREEN_DISPLAYING // ELIF IS_AUTOSAVE_REQUEST_IN_PROGRESS() // CPRINTLN(DEBUG_MISSION, "BENCHMARK: autosave request is in progress") // RETURN BMBR_AUTOSAVE_IN_PROGRESS // ELIF IS_TRANSITION_ACTIVE() // CPRINTLN(DEBUG_MISSION, "BENCHMARK: transition is active") // RETURN BMBR_TRANSITION_ACTIVE // ELIF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0 // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player is wanted by the cops") // RETURN BMBR_PLAYER_IS_WANTED // ELIF IS_PLAYER_BEING_ARRESTED(PLAYER_ID()) // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player is being arrested") // RETURN BMBR_PLAYER_BEING_ARRESTED // ELIF IS_REPEAT_PLAY_ACTIVE(TRUE) // CPRINTLN(DEBUG_MISSION, "BENCHMARK: already playing a repeat play") // RETURN BMBR_REPEAT_PLAY_ACTIVE // ELIF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Finale_Choice")) > 0 // B*2203812 // CPRINTLN(DEBUG_MISSION, "BENCHMARK: Finale_Choice is currently running") // RETURN BMBR_FINALE_CHOICE_RUNNING // ELIF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_OFF_MISSION) // CPRINTLN(DEBUG_MISSION, "BENCHMARK: player isn't off-mission") // RETURN BMBR_ON_MISSION // ELIF NOT SAFE_TO_SAVE_GAME() // CPRINTLN(DEBUG_MISSION, "BENCHMARK: not safe to save game") // RETURN BMBR_NOT_SAFE_TO_SAVE // ELIF g_bScriptsSetSafeForCutscene = TRUE // CPRINTLN(DEBUG_MISSION, "BENCHMARK: a cutscene is in progress") // RETURN BMBR_CUTSCENE_RUNNING // ENDIF // // CPRINTLN(DEBUG_MISSION, "BENCHMARK: ok to launch benchmark") // RETURN BMBR_NONE // //ENDFUNC /// PURPOSE: /// Returns whether the benchmark should be blocked and why- includes benchmark spefic block prior to featue blocks. /// PARAMS: /// bSilenceDebug - Turn of debug logging /// bBlockDupeFeature - Check if script is already running /// RETURNS: /// FUNC FEATURE_BLOCK_REASON GET_BENCHMARK_BLOCKED_REASON(BOOL bSilenceDebug = FALSE) RETURN GET_FEATURE_BLOCKED_REASON(bSilenceDebug, TRUE) ENDFUNC SCRIPT CPRINTLN(DEBUG_MISSION, "BENCHMARK: launching benchmark script") IF HAS_FORCE_CLEANUP_OCCURRED() CPRINTLN(DEBUG_MISSION, "BENCHMARK: The benchmark has been force cleaned up.") BENCHMARK_CLEANUP(TRUE) ENDIF IF UI_STARTED_END_USER_BENCHMARK() WHILE IS_PAUSE_MENU_ACTIVE() WAIT(0) CPRINTLN(DEBUG_MISSION, "BENCHMARK:waiting for pause menu to close") ENDWHILE ENDIF IF IS_COMMANDLINE_END_USER_BENCHMARK() OR LANDING_SCREEN_STARTED_END_USER_BENCHMARK() CPRINTLN(DEBUG_MISSION, "BENCHMARK: Skipping checking for benchmark block reasons due to running from command line.") m_eFeatureBlockReason = FBR_NONE ELSE m_eFeatureBlockReason = GET_BENCHMARK_BLOCKED_REASON() ENDIF WHILE (TRUE) IF m_eFeatureBlockReason = FBR_NONE BENCHMARK_COMMANDS_TO_RUN_EVERY_FRAME() #IF IS_DEBUG_BUILD IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F) OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S) CPRINTLN(DEBUG_MISSION, "BENCHMARK: user pressed a debug key to quit") BENCHMARK_CLEANUP() ENDIF #ENDIF IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) SWITCH m_eCurrentBenchmarkState CASE BENCHMARK_STATE_INIT BENCHMARK_INIT() BREAK CASE BENCHMARK_STATE_WARP_TO_AREA_FADE_OUT BENCHMARK_WARP_TO_AREA_FADE_OUT() BREAK CASE BENCHMARK_STATE_WARP_TO_AREA_FADE_IN BENCHMARK_WARP_TO_AREA_FADE_IN() BREAK CASE BENCHMARK_STATE_WARP_TO_AREA_TIMELAPSE BENCHMARK_WARP_TO_AREA_TIMELAPSE() BREAK CASE BENCHMARK_STATE_JET_FLYBY BENCHMARK_JET_FLYBY() BREAK CASE BENCHMARK_STATE_INTERP_JET_TO_PED BENCHMARK_INTERP_JET_TO_PED() BREAK CASE BENCHMARK_STATE_WANTED_LEVEL BENCHMARK_WANTED_LEVEL() BREAK CASE BENCHMARK_STATE_FINISHED BENCHMARK_FINISHED() BREAK DEFAULT SCRIPT_ASSERT("m_eCurrentBenchmarkState is unknown") BREAK ENDSWITCH HANDLE_EXITING_BENCHMARKING() DISPLAY_FPS() ENDIF ELSE // The benchmark cannot launch so display the alert screen and wait for user input SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF NOT IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF m_bPausedGameForAlertScreen = FALSE CPRINTLN(DEBUG_MISSION, "BENCHMARK: pausing game and displaying alert screen") SET_GAME_PAUSED(TRUE) m_bPausedGameForAlertScreen = TRUE ENDIF HIDE_LOADING_ON_FADE_THIS_FRAME() SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_FADE) STRING strFBLabel = GET_FEATURE_BLOCK_MESSAGE_TEXT(m_eFeatureBlockReason) SET_WARNING_MESSAGE("FBR_GENERIC", FE_WARNING_CONTINUE, DEFAULT, DEFAULT, DEFAULT, "FBR_BENCHMARK", strFBLabel) ELSE SET_GAME_PAUSED(FALSE) CPRINTLN(DEBUG_MISSION, "BENCHMARK: unpausing game and terminating thread") TERMINATE_THIS_THREAD() ENDIF ENDIF WAIT(0) ENDWHILE ENDSCRIPT