1636 lines
70 KiB
Python
Executable File
1636 lines
70 KiB
Python
Executable File
//////////////////////////////////////////////////////////////////////
|
|
/* bj.sc */
|
|
/* Author: DJ Jones */
|
|
/* Single player script for base jump activity. */
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
USING "cutscene_public.sch"
|
|
USING "minigames_helpers.sch"
|
|
USING "minigame_uiinputs.sch"
|
|
USING "socialclub_leaderboard.sch"
|
|
USING "minigame_big_message.sch"
|
|
USING "minigame_stats_tracker_helpers.sch"
|
|
USING "script_oddjob_funcs.sch"
|
|
USING "traffic_default_values.sch"
|
|
USING "mission_titles_private.sch"
|
|
USING "rgeneral_include.sch"
|
|
USING "vector_id_public.sch"
|
|
//USING "traffic.sch"
|
|
// See blip_ambient.sch and vector_id_public.sch for more includes
|
|
USING "bj_tweak.sch"
|
|
USING "bj_input.sch"
|
|
USING "bj_camera.sch"
|
|
USING "bj_ui.sch"
|
|
USING "bj_input_lib.sch"
|
|
USING "bj_camera_lib.sch"
|
|
#IF IS_DEBUG_BUILD USING "bj_debug.sch" #ENDIF
|
|
USING "bj_core.sch"
|
|
USING "bj_ui_lib.sch"
|
|
|
|
//this needed to be tweaked for NextGen
|
|
//B* 1741550
|
|
CONST_FLOAT LOAD_SCENE_FAR_CLIP 4000.0
|
|
|
|
// Turn on when volume tool is needed.
|
|
CONST_INT iUSE_Z_VOLUMES 0
|
|
#IF iUSE_Z_VOLUMES
|
|
USING "z_volumes.sch"
|
|
#ENDIF
|
|
|
|
// Script entry point.
|
|
SCRIPT(BJ_LAUNCHER_ARGS bjLauncherArgs)
|
|
|
|
STREAMED_MODEL assets[iBJ_STREAMS]
|
|
MODEL_NAMES launchDriverModel
|
|
MODEL_NAMES targetDriverModel
|
|
BJ_ARGS bjArgs
|
|
BJ_INPUT input
|
|
BJ_CAMERA_SET cameraSet
|
|
BJ_UI bjUI
|
|
BJ_GAME_STATE gameState
|
|
BJ_GATE_CHECK_RESULT gateCheckResult
|
|
BJ_SCORECARD_RETURN_VALUE scorecardReturn
|
|
SCRIPT_SCALEFORM_BIG_MESSAGE bigMessageUI
|
|
MG_FAIL_SPLASH bjSplashStruct
|
|
MG_FAIL_FADE_EFFECT bjDeathEffect
|
|
BJ_JUMP_ID eJumpID
|
|
PED_PARACHUTE_LANDING_TYPE savedLandingType = PPLT_INVALID
|
|
TIMEOFDAY currentTime
|
|
structTimer flowTimer
|
|
structTimer camTimer
|
|
structTimer inputTimer
|
|
structTimer radioTimer
|
|
structTimer dialogueTimer
|
|
structTimer tEndDelayTimer
|
|
structTimer tmrDropoff
|
|
structTimer tmrFade
|
|
structTimer tmrDitch
|
|
structTimer tmrSave
|
|
structTimer tmrOnlookers
|
|
structTimer tmrLandingAlpha
|
|
structTimer tmrAnticipation
|
|
structTimer tmrUnfreeze
|
|
structTimer tmrCutsceneDlg
|
|
structTimer tmrObjective
|
|
structPedsForConversation conversationPedStruct
|
|
VEHICLE_INDEX launchVehicle = bjLauncherArgs.myHeli
|
|
VEHICLE_INDEX targetVehicle
|
|
VEHICLE_INDEX targetFlatbed
|
|
VEHICLE_INDEX extraVehicle
|
|
VEHICLE_INDEX exitVehicle
|
|
VEHICLE_INDEX vehDriving
|
|
VEHICLE_INDEX vehNearby[3]
|
|
VEHICLE_INDEX vehPlayer
|
|
VEHICLE_COMBAT_AVOIDANCE_AREA_INDEX bjCombatAvoidanceArea
|
|
PED_INDEX launchDriverPed = bjLauncherArgs.myPilot
|
|
PED_INDEX targetDriverPed
|
|
PED_INDEX onlookerArray[iBJ_MAX_ONLOOKERS]
|
|
BLIP_INDEX curGateBlip, nextGateBlip
|
|
SEQUENCE_INDEX jumpSequence
|
|
SEQUENCE_INDEX seqCutscene
|
|
CHECKPOINT_INDEX curCheckpoint
|
|
CHECKPOINT_INDEX nextCheckpoint
|
|
SCALEFORM_INDEX bjUI_Leaderboard
|
|
WEAPON_TYPE playerWeapon
|
|
STRING bjFailString = "BJ_FAIL"
|
|
STRING bjFailStrapline = ""
|
|
TEXT_LABEL_15 sMessage
|
|
VECTOR vLookCamRot
|
|
//VECTOR vCameraPos
|
|
VECTOR vCameraDir
|
|
VECTOR vPlayerTlprt
|
|
VECTOR BJ_TARGET_VEHICLE_LOCATE = <<5, 5, 10>>
|
|
VECTOR vCameraVelocity
|
|
VECTOR vFocalPoint, vFocalOffset
|
|
VECTOR vBaseLookCamRot
|
|
FLOAT fBaseLookCamFOV
|
|
FLOAT rewardFactor = 1.0
|
|
FLOAT fLastScreenPosX, fLastScreenPosY, fLastGutterRotation
|
|
FLOAT fLandingDistance = -1
|
|
INT iSoundID_01 = -1
|
|
INT iCurrentGate, iGates
|
|
INT iCurCheckpoint = -1
|
|
INT iGatesHit
|
|
INT iAccuracy, iReward
|
|
INT iJumpID = g_savedGlobals.sBasejumpData.iLaunchRank
|
|
INT iMessagingFlags
|
|
INT bitDif
|
|
INT iNumPlayerLines = 1
|
|
INT iSceneID = -1
|
|
INT iVehicleCount
|
|
INT iJumpIndex
|
|
INT iAnticipation
|
|
INT iWindSound
|
|
INT iParachuteTint
|
|
INT iParachutePackTint
|
|
INT iParachuteReserveTint
|
|
BOOL bAllClear, bBASEJumpClear, bSkydiveClear, bPlayerDiedLanding
|
|
BOOL bRetry, bFlyaway
|
|
BOOL bHasLanded
|
|
BOOL bDebugPass, bDebugFail, bDebugSkip
|
|
BOOL bWanderFail
|
|
BOOL bLBToggle = FALSE
|
|
BOOL bCatchUpCam
|
|
BOOL bCutsceneStarted
|
|
BOOL bRestartedFromDeath
|
|
BOOL bCutsceneDlg
|
|
BOOL bFirstFrame = TRUE
|
|
BOOL bCutsceneSkip
|
|
BOOL bFinishedFailScreen = FALSE
|
|
BOOL bPlayerFinishedInVehicle = FALSE
|
|
BOOL bUseElevationWind
|
|
BOOL bUseCustomWind = TRUE
|
|
BOOL bDoesPlayerHaveOwnParachute = FALSE
|
|
BOOL bDoesPlayerHaveReserveParachute = FALSE
|
|
BOOL bWinScreenKeyPressed = FALSE
|
|
|
|
IF DOES_ENTITY_EXIST(bjLauncherArgs.lastPlrVehicle)
|
|
vehPlayer = bjLauncherArgs.lastPlrVehicle
|
|
ELSE
|
|
vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
ENDIF
|
|
|
|
bDoesPlayerHaveOwnParachute = HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), GADGETTYPE_PARACHUTE)
|
|
|
|
bDoesPlayerHaveReserveParachute = GET_PLAYER_HAS_RESERVE_PARACHUTE(PLAYER_ID())
|
|
|
|
IF bDoesPlayerHaveOwnParachute
|
|
GET_PLAYER_PARACHUTE_TINT_INDEX(PLAYER_ID(), iParachuteTint)
|
|
GET_PLAYER_PARACHUTE_PACK_TINT_INDEX(PLAYER_ID(), iParachutePackTint)
|
|
ENDIF
|
|
|
|
IF bDoesPlayerHaveReserveParachute
|
|
GET_PLAYER_RESERVE_PARACHUTE_TINT_INDEX(PLAYER_ID(), iParachuteReserveTint)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(vehPlayer)
|
|
SET_ENTITY_AS_MISSION_ENTITY(vehPlayer, TRUE, TRUE)
|
|
ENDIF
|
|
|
|
IF IS_SCRIPT_GLOBAL_SHAKING()
|
|
STOP_SCRIPT_GLOBAL_SHAKING(FALSE)
|
|
ENDIF
|
|
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_REPEAT_PLAY|FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_SP_TO_MP)
|
|
BJ_SCRIPT_CLEANUP(bjArgs, bjUI_Leaderboard, launchVehicle, targetVehicle, extraVehicle, vehNearby, vehPlayer, conversationPedStruct, launchDriverPed, targetDriverPed, onlookerArray, iWindSound, iNumPlayerLines, curGateBlip, nextGateBlip, eJumpID, bjCombatAvoidanceArea, bDoesPlayerHaveOwnParachute)
|
|
ENDIF
|
|
|
|
IF iJumpID < 0
|
|
SCRIPT_ASSERT("Did not get a valid jump, so quitting")
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF IS_BIT_SET(g_savedGlobals.sBasejumpData.iCompletedFlags, iJumpID)
|
|
rewardFactor = 0.10
|
|
ENDIF
|
|
|
|
eJumpID = INT_TO_ENUM(BJ_JUMP_ID, iJumpID)
|
|
|
|
MINIGAME_DISPLAY_MISSION_TITLE(ENUM_TO_INT(MINIGAME_BASEJUMPING))
|
|
|
|
CLEAR_HELP()
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
DISABLE_CHEAT(CHEAT_TYPE_ALL, TRUE)
|
|
|
|
SET_FAKE_MINIMAP_MAX_ALTIMETER_HEIGHT(1500)
|
|
|
|
BJ_GET_JUMP_INFORMATION_BY_ID(bjArgs, eJumpID)
|
|
|
|
//make sure we grab the stuff from the launcher script (bjLauncherArgs)
|
|
IF DOES_ENTITY_EXIST(launchDriverPed)
|
|
SET_ENTITY_AS_MISSION_ENTITY(launchDriverPed, TRUE, TRUE)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(launchVehicle)
|
|
SET_ENTITY_AS_MISSION_ENTITY(launchVehicle, TRUE, TRUE)
|
|
IF BJ_GET_ARG_DROPOFF_MODEL(bjArgs) <> DUMMY_MODEL_FOR_SCRIPT
|
|
AND GET_ENTITY_MODEL(launchVehicle) = BJ_GET_ARG_DROPOFF_MODEL(bjArgs)
|
|
extraVehicle = launchVehicle
|
|
launchVehicle = NULL
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Main loop.
|
|
WHILE TRUE
|
|
IF NOT bFirstFrame
|
|
WAIT(0)
|
|
ELSE
|
|
bFirstFrame = FALSE
|
|
ENDIF
|
|
|
|
// See if the user wants to quit the script.
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
|
|
bDebugPass = TRUE
|
|
ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
|
|
bDebugFail = TRUE
|
|
ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
|
|
bDebugSkip = TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
#IF iUSE_Z_VOLUMES
|
|
#IF IS_DEBUG_BUILD
|
|
UPDATE_ZVOLUME_WIDGETS()
|
|
#ENDIF
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD IF gameState >= BJGAMESTATE_CUTSCENE
|
|
BJ_UPDATE_DEBUG(bjArgs, ENUM_TO_INT(gameState), iCurrentGate, iGates, launchVehicle)
|
|
ENDIF #ENDIF
|
|
|
|
// Update the last time the player was known to be alive.
|
|
IF gameState >= BJGAMESTATE_FREE_JUMP AND gameState <= BJGAMESTATE_PROCESS_DATA
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
currentTime = GET_CURRENT_TIMEOFDAY()
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableTakeOffParachutePack, TRUE)
|
|
ENDIF
|
|
|
|
BJ_HIDE_HUD_AND_DISABLE_CONTROLS_EVERY_FRAME()
|
|
|
|
// Collect input.
|
|
BJ_GET_LOCAL_INPUT(input)
|
|
|
|
BJ_UPDATE_MUSIC(bjUI, gameState)
|
|
BJ_UPDATE_AUDIO_SCENES(bjUI, gameState, eJumpID, bRetry)
|
|
|
|
// Act based on the current game state.
|
|
SWITCH gameState
|
|
// Perform initialization, begin streaming
|
|
CASE BJGAMESTATE_INIT
|
|
DISABLE_SELECTOR()
|
|
|
|
IF IS_SCREEN_FADING_OUT()
|
|
BREAK
|
|
ENDIF
|
|
|
|
BJ_CLEANUP_SOCIAL_CLUB_LEADERBOARD()
|
|
|
|
//setup for escaping death
|
|
SET_FAIL_FADE_EFFECT_SCRIPT_CONTROL(TRUE)
|
|
|
|
REMOVE_HELP_FROM_FLOW_QUEUE("AM_H_BASEJ")
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
PRINTLN("Turning off roads for BJ")
|
|
SET_ROADS_IN_ANGLED_AREA(<<-832.271, -1525.112, -100>>, <<-1187.833, -1876.646, 100>>, 50, TRUE, FALSE)
|
|
bjCombatAvoidanceArea = ADD_VEHICLE_COMBAT_ANGLED_AVOIDANCE_AREA(<<-832.271, -1525.112, -100>>, <<-1187.833, -1876.646, 100>>, 50)
|
|
ELIF eJumpID = BJJUMPID_CRANE
|
|
PRINTLN("Turning off roads for BJ")
|
|
SET_ROADS_IN_ANGLED_AREA(<<-129.031, -726.381, 35>>, <<-38.185, -465.801, 100>>, 75, TRUE, FALSE)
|
|
ELIF eJumpID = BJJUMPID_MAZE_BANK
|
|
PRINTLN("Clearing BJ start location")
|
|
DELETE_VEHICLE_GEN_VEHICLES_IN_AREA(<< -74.9632, -827.4467, 324.9521>>, 25, TRUE)
|
|
CLEAR_AREA(<< -74.9632, -827.4467, 324.9521>>, 25, TRUE)
|
|
ELIF eJumpID = BJJUMPID_GOLF_COURSE
|
|
PRINTLN("Clearing BJ start location")
|
|
DELETE_VEHICLE_GEN_VEHICLES_IN_AREA(<< -74.9632, -827.4467, 324.9521>>, 25, TRUE)
|
|
CLEAR_AREA(<< -807.0730, 330.8846, 232.6766>>, 25, TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(launchVehicle)
|
|
START_TIMER_NOW(tmrFade)
|
|
ENDIF
|
|
|
|
IF eJumpID = BJJUMPID_RIVER_CLIFF
|
|
OR eJumpID = BJJUMPID_ROCK_CLIFF
|
|
OR eJumpID = BJJUMPID_CRANE
|
|
IF DOES_ENTITY_EXIST(bjLauncherArgs.objLaunchPack)
|
|
SET_ENTITY_AS_MISSION_ENTITY(bjLauncherArgs.objLaunchPack, DEFAULT, TRUE)
|
|
DELETE_OBJECT(bjLauncherArgs.objLaunchPack)
|
|
ENDIF
|
|
|
|
//BJ_UPDATE_GATES(bjArgs, targetVehicle, targetDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, FALSE, rewardFactor)
|
|
BJ_SETUP_CUTSCENE_CAMERAS(cameraSet, bjArgs, eJumpID, eJumpID = BJJUMPID_RIVER_CLIFF)
|
|
bCutsceneStarted = TRUE
|
|
ENDIF
|
|
|
|
gameState = BJGAMESTATE_LOAD_CUTSCENE
|
|
BREAK
|
|
|
|
// Stream the surrounding area.
|
|
CASE BJGAMESTATE_LOAD_CUTSCENE
|
|
IF IS_SCREEN_FADED_OUT()
|
|
OR ((eJumpID = BJJUMPID_CRANE
|
|
OR eJumpID = BJJUMPID_RIVER_CLIFF
|
|
OR eJumpID = BJJUMPID_ROCK_CLIFF) AND NOT bRetry)
|
|
// IF eJumpID = BJJUMPID_RIVER_CLIFF OR eJumpID = BJJUMPID_ROCK_CLIFF
|
|
// BJ_UPDATE_GATES(bjArgs, targetVehicle, targetDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, FALSE, rewardFactor)
|
|
// ENDIF
|
|
|
|
IF NOT bRetry
|
|
IF eJumpID <> BJJUMPID_CRANE AND eJumpID <> BJJUMPID_RIVER_CLIFF AND eJumpID <> BJJUMPID_ROCK_CLIFF
|
|
vCameraDir = BJ_GET_COURSE_INITIAL_CAMERA_ROTATION_BY_ID(eJumpID)
|
|
vCameraDir = NORMALISE_VECTOR(<<COS(vCameraDir.z), SIN(vCameraDir.z), TAN(vCameraDir.x)>>)
|
|
IF BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD(eJumpID)
|
|
NEW_LOAD_SCENE_START(BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID), vCameraDir, LOAD_SCENE_FAR_CLIP)
|
|
ELSE
|
|
PRINTLN("BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD returned false, so not running new load scene")
|
|
ENDIF
|
|
ENDIF
|
|
BJ_INIT_JUMP(bjArgs, eJumpID, assets, launchDriverModel, targetDriverModel, bjUI_Leaderboard, iAnticipation)
|
|
|
|
ELSE
|
|
// bjUI_Leaderboard = REQUEST_SC_LEADERBOARD_UI()
|
|
IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
// Taken from heli look cam generation.
|
|
vFocalOffset = 1.2 * <<SIN(-97.4239 + BJ_GET_ARG_LAUNCH_HEADING(bjArgs)), -COS(-97.4239 + BJ_GET_ARG_LAUNCH_HEADING(bjArgs)), 0.0>>
|
|
vFocalPoint = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(launchVehicle, <<1.12046, -0.317773, 1.3385>>)
|
|
vFocalOffset = ROTATE_VECTOR_ABOUT_Z(vFocalOffset, 8.9090)
|
|
IF BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD(eJumpID)
|
|
NEW_LOAD_SCENE_START(vFocalPoint + vFocalOffset, vFocalOffset, LOAD_SCENE_FAR_CLIP)
|
|
ELSE
|
|
PRINTLN("BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD returned false, so not running new load scene")
|
|
ENDIF
|
|
ELSE
|
|
vCameraDir = <<-10.0, 0.0, BJ_GET_ARG_LAUNCH_HEADING(bjArgs)>>
|
|
vCameraDir = NORMALISE_VECTOR(<<COS(vCameraDir.z), SIN(vCameraDir.z), TAN(vCameraDir.x)>>)
|
|
IF BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD(eJumpID)
|
|
NEW_LOAD_SCENE_START(BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID), vCameraDir, LOAD_SCENE_FAR_CLIP)
|
|
ELSE
|
|
PRINTLN("BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD returned false, so not running new load scene")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bRetry OR eJumpID = BJJUMPID_MAZE_BANK OR eJumpID = BJJUMPID_GOLF_COURSE OR eJumpID = BJJUMPID_NORTH_CLIFF
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
SPECIAL_FUNCTION_DO_NOT_USE(PLAYER_PED_ID())
|
|
ENDIF
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID), FALSE)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), BJ_GET_ARG_LAUNCH_HEADING(bjArgs))
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
ENDIF
|
|
|
|
gameState = BJGAMESTATE_STREAMING
|
|
|
|
ELSE
|
|
IF (NOT IS_SCREEN_FADING_OUT()) AND ((NOT IS_TIMER_STARTED(tmrFade)) OR GET_TIMER_IN_SECONDS(tmrFade) > 0.05)
|
|
IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID())
|
|
DO_SCREEN_FADE_OUT(iLAUNCH_FADE_OUT_TIME)
|
|
ELSE
|
|
DO_SCREEN_FADE_OUT(iFADE_OUT_TIME)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Wait for fade out and streaming to finish.
|
|
CASE BJGAMESTATE_STREAMING
|
|
// IF NOT IS_SCREEN_FADED_OUT()
|
|
// AND (eJumpID = BJJUMPID_RIVER_CLIFF OR eJumpID = BJJUMPID_ROCK_CLIFF)
|
|
// BJ_UPDATE_GATES(bjArgs, targetVehicle, targetDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, FALSE, rewardFactor)
|
|
// ENDIF
|
|
|
|
IF BJ_IS_STREAMING_COMPLETE(assets, flowTimer, bjUI_Leaderboard, eJumpID, iAnticipation, (eJumpID <> BJJUMPID_CRANE AND eJumpID <> BJJUMPID_RIVER_CLIFF AND eJumpID <> BJJUMPID_ROCK_CLIFF))
|
|
CANCEL_TIMER(flowTimer)
|
|
BJ_SETUP_JUMP(bjArgs, conversationPedStruct, iGates, launchVehicle, targetVehicle, extraVehicle, targetFlatbed, exitVehicle, launchDriverPed, targetDriverPed, launchDriverModel, targetDriverModel, radioTimer, eJumpID, iSceneID)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID(), TRUE)
|
|
IF (NOT bRetry) AND (NOT bCutsceneStarted)
|
|
BJ_SETUP_CUTSCENE_CAMERAS(cameraSet, bjArgs, eJumpID)
|
|
ENDIF
|
|
//onlooker stuff:
|
|
#IF IS_DEBUG_BUILD IF NOT bRetry
|
|
BJ_SETUP_DEBUG(bjArgs, eJumpID)
|
|
ENDIF #ENDIF
|
|
|
|
gameState = BJGAMESTATE_POST_STREAM
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Wait an additional amount of time for setup to complete before fading in.
|
|
CASE BJGAMESTATE_POST_STREAM
|
|
// IF NOT IS_SCREEN_FADED_OUT()
|
|
// AND (eJumpID = BJJUMPID_RIVER_CLIFF OR eJumpID = BJJUMPID_ROCK_CLIFF)
|
|
// BJ_UPDATE_GATES(bjArgs, targetVehicle, targetDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, FALSE, rewardFactor)
|
|
// ENDIF
|
|
|
|
IF NOT IS_TIMER_STARTED(flowTimer) AND NOT bRetry
|
|
ODDJOB_ENTER_CUTSCENE()
|
|
START_TIMER_NOW(flowTimer)
|
|
ELIF (IS_TIMER_STARTED(flowTimer) AND GET_TIMER_IN_SECONDS(flowTimer) > 0.2) OR bRetry
|
|
IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID)) AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "oddjobs@basejump@", "Heli_door_loop")
|
|
// nothing
|
|
ELIF bRetry
|
|
DO_SCREEN_FADE_OUT(iFADE_OUT_TIME)
|
|
IF IS_TIMER_STARTED(flowTimer)
|
|
CANCEL_TIMER(flowTimer)
|
|
ENDIF
|
|
IF BJ_GET_ARG_DROPOFF_MODEL(bjArgs) <> DUMMY_MODEL_FOR_SCRIPT
|
|
FREEZE_ENTITY_POSITION(extraVehicle, FALSE)
|
|
START_TIMER_NOW(tmrDropoff)
|
|
ENDIF
|
|
gameState = BJGAMESTATE_CUTSCENE
|
|
|
|
ELSE
|
|
CANCEL_TIMER(flowTimer)
|
|
IF IS_SCREEN_FADED_OUT()
|
|
WAIT(1000)
|
|
SET_CAM_ACTIVE_WITH_INTERP(BJ_GET_CAMERA_OBJECT(cameraSet, BJCAMERAID_SECONDARY_CAM), BJ_GET_CAMERA_OBJECT(cameraSet, BJCAMERAID_PRIMARY_CAM), iCUTSCENE_INTERP_DUR)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
DO_SCREEN_FADE_IN(iFADE_IN_TIME)
|
|
ENDIF
|
|
|
|
// IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
// dlgLabel = BJ_GET_ARG_DIALOGUE_LABEL(bjArgs)
|
|
// ELSE
|
|
// dlgLabel = BJ_GET_MODIFIED_PLAYER_DIALOGUE_LABEL(bjArgs)
|
|
// ENDIF
|
|
//
|
|
// BJ_PLAY_DIALOGUE_LINE(conversationPedStruct, BJ_GET_ARG_CUTSCENE_DLG_ROOT(bjArgs), dlgLabel )
|
|
|
|
NEW_LOAD_SCENE_STOP()
|
|
|
|
IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
// Taken from heli look cam generation.
|
|
vFocalOffset = 1.2 * <<SIN(-97.4239 + BJ_GET_ARG_LAUNCH_HEADING(bjArgs)), -COS(-97.4239 + BJ_GET_ARG_LAUNCH_HEADING(bjArgs)), 0.0>>
|
|
vFocalPoint = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(launchVehicle, <<1.12046, -0.317773, 1.3385>>)
|
|
vFocalOffset = ROTATE_VECTOR_ABOUT_Z(vFocalOffset, 8.9090)
|
|
IF BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD(eJumpID)
|
|
NEW_LOAD_SCENE_START(vFocalPoint + vFocalOffset, vFocalOffset, LOAD_SCENE_FAR_CLIP)
|
|
ELSE
|
|
PRINTLN("BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD returned false, so not running new load scene")
|
|
ENDIF
|
|
ELSE
|
|
vCameraDir = <<-10.0, 0.0, BJ_GET_ARG_LAUNCH_HEADING(bjArgs)>>
|
|
vCameraDir = NORMALISE_VECTOR(<<COS(vCameraDir.z), SIN(vCameraDir.z), TAN(vCameraDir.x)>>)
|
|
IF BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD(eJumpID)
|
|
NEW_LOAD_SCENE_START(BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID), vCameraDir, LOAD_SCENE_FAR_CLIP)
|
|
ELSE
|
|
PRINTLN("BJ_IS_SCREEN_FADED_WITH_PLAYER_NEAR_LOAD_SCENE_COORD returned false, so not running new load scene")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (NOT IS_VECTOR_ZERO(BJ_GET_CUTSCENE_WALK_START_BY_ID(eJumpID))) AND (NOT IS_ENTITY_DEAD(PLAYER_PED_ID()))
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableTakeOffParachutePack, TRUE)
|
|
IF GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID())
|
|
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), BJ_GET_CUTSCENE_WALK_START_BY_ID(eJumpID))
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), GET_HEADING_BETWEEN_VECTORS(BJ_GET_CUTSCENE_WALK_START_BY_ID(eJumpID), BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID)))
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableTakeOffParachutePack, TRUE)
|
|
|
|
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 5, 0)
|
|
ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL, 1, 0)
|
|
ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL, 3, 0)
|
|
ENDIF
|
|
|
|
OPEN_SEQUENCE_TASK(seqCutscene)
|
|
IF BJ_GET_CUTSCENE_WALK_DELAY_BY_ID(eJumpID) > 0
|
|
TASK_STAND_STILL(NULL, BJ_GET_CUTSCENE_WALK_DELAY_BY_ID(eJumpID))
|
|
ENDIF
|
|
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID), PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, BJ_GET_ARG_LAUNCH_HEADING(bjArgs))
|
|
TASK_GO_STRAIGHT_TO_COORD(NULL, BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID), PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP, BJ_GET_ARG_LAUNCH_HEADING(bjArgs))
|
|
CLOSE_SEQUENCE_TASK(seqCutscene)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seqCutscene)
|
|
CLEAR_SEQUENCE_TASK(seqCutscene)
|
|
ENDIF
|
|
|
|
IF NOT BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), vehNearby)
|
|
ENDIF
|
|
|
|
REPEAT COUNT_OF(vehNearby) iVehicleCount
|
|
IF DOES_ENTITY_EXIST(vehNearby[iVehicleCount]) AND NOT IS_ENTITY_DEAD(vehNearby[iVehicleCount])
|
|
IF VDIST2(GET_ENTITY_COORDS(vehNearby[iVehicleCount], FALSE), GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)) < 2500.0
|
|
SET_ENTITY_LOD_DIST(vehNearby[iVehicleCount], 1000)
|
|
SET_VEHICLE_LOD_MULTIPLIER(vehNearby[iVehicleCount], 5)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(vehNearby[iVehicleCount], TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
IF BJ_GET_ARG_DROPOFF_MODEL(bjArgs) <> DUMMY_MODEL_FOR_SCRIPT
|
|
//FREEZE_ENTITY_POSITION(extraVehicle, FALSE)
|
|
START_TIMER_NOW(tmrDropoff)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
IF BJ_GET_ANTICIPATION_DELAY_BY_ID(eJumpID, iAnticipation) > 0.0
|
|
START_TIMER_NOW(tmrAnticipation)
|
|
ENDIF
|
|
|
|
gameState = BJGAMESTATE_CUTSCENE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Play a custcene showing the player, vehicles, and targets.
|
|
CASE BJGAMESTATE_CUTSCENE
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(200.0)
|
|
ENDIF
|
|
|
|
// Handle debug pass/fail.
|
|
IF bDebugPass OR bDebugFail
|
|
IF IS_SCREEN_FADED_OUT() OR IS_SCREEN_FADING_OUT()
|
|
DO_SCREEN_FADE_IN(300)
|
|
WAIT(300)
|
|
ENDIF
|
|
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE, DEFAULT_INTERP_TO_FROM_GAME, TRUE, TRUE)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
gameState = BJGAMESTATE_PROCESS_DATA
|
|
|
|
// See if it's time to go to setup.
|
|
ELIF IS_SCREEN_FADED_OUT()
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
//LOAD_SCENE(BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID))
|
|
IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
BJ_SETUP_HELI_LOOK_CAMERA(cameraSet, bjArgs, vLookCamRot, vFocalPoint, vFocalOffset, launchVehicle, vBaseLookCamRot, fBaseLookCamFOV)
|
|
iWindSound = GET_SOUND_ID()
|
|
IF bUseCustomWind
|
|
PLAY_SOUND_FROM_ENTITY(iWindSound, "Helicopter_Wind_Idle", launchVehicle, "BASEJUMPS_SOUNDS")
|
|
ENDIF
|
|
IF bUseElevationWind
|
|
SCRIPT_OVERRIDES_WIND_ELEVATION(TRUE, HASH("WEATHER_TYPES_HIGH_ELEVATION_BASE_JUMP_HELI"))
|
|
ENDIF
|
|
ELSE
|
|
IF IS_SCRIPT_GLOBAL_SHAKING()
|
|
STOP_SCRIPT_GLOBAL_SHAKING(FALSE)
|
|
ENDIF
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE, DEFAULT_INTERP_TO_FROM_GAME, TRUE, TRUE)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ENDIF
|
|
|
|
CLEAR_PED_WETNESS(PLAYER_PED_ID())
|
|
CLEAR_PED_ENV_DIRT(PLAYER_PED_ID())
|
|
CLEAR_PED_BLOOD_DAMAGE(PLAYER_PED_ID())
|
|
RESET_PED_VISIBLE_DAMAGE(PLAYER_PED_ID())
|
|
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
|
|
gameState = BJGAMESTATE_SETUP_JUMP
|
|
|
|
ELSE
|
|
//BJ_UPDATE_GATES(bjArgs, targetVehicle, launchDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, FALSE, rewardFactor)
|
|
|
|
IF NOT bCutsceneDlg
|
|
IF NOT IS_TIMER_STARTED(tmrCutsceneDlg)
|
|
START_TIMER_NOW(tmrCutsceneDlg)
|
|
ELIF GET_TIMER_IN_SECONDS(tmrCutsceneDlg) > 4.0
|
|
OR (BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID)) AND GET_TIMER_IN_SECONDS(tmrCutsceneDlg) > 0.5)
|
|
CREATE_CONVERSATION(conversationPedStruct, "OJBJAUD", BJ_GET_ARG_CUTSCENE_DLG_ROOT(bjArgs), CONV_PRIORITY_HIGH)
|
|
bCutsceneDlg = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// See if it's time to fade the screen out or go to setup.
|
|
IF NOT IS_SCREEN_FADING_OUT() AND NOT bRetry
|
|
IF BJ_UPDATE_CUTSCENE(bjArgs, eJumpID, extraVehicle, cameraSet, input, camTimer, inputTimer, tmrDropoff, tmrAnticipation, iAnticipation, bFlyaway, bCutsceneSkip, bDebugSkip)
|
|
CLEAR_HELP()
|
|
bDebugSkip = FALSE
|
|
|
|
// Start fade out and wait (see above).
|
|
IF BJ_GET_ARG_CUTSCENE_FADE(bjArgs)
|
|
DO_SCREEN_FADE_OUT(iFADE_OUT_TIME)
|
|
|
|
// Go immediately to setup.
|
|
ELSE
|
|
|
|
//SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
gameState = BJGAMESTATE_SETUP_JUMP
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Load the scene near the player.
|
|
CASE BJGAMESTATE_SETUP_JUMP
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(200.0)
|
|
ENDIF
|
|
|
|
CLEAR_RANK_REDICTION_DETAILS()
|
|
|
|
SC_LEADERBOARD_CACHE_CLEAR_ALL()
|
|
|
|
//BJ_UPDATE_GATES(bjArgs, targetVehicle, launchDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, FALSE, rewardFactor)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
IF bRetry AND bRestartedFromDeath
|
|
SET_CLOCK_TIME(GET_TIMEOFDAY_HOUR(currentTime), GET_TIMEOFDAY_MINUTE(currentTime), GET_TIMEOFDAY_SECOND(currentTime))
|
|
ENDIF
|
|
WAIT(2000)
|
|
IF bRetry
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
RESTART_TIMER_NOW(tmrUnfreeze)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableTakeOffParachutePack, TRUE)
|
|
ENDIF
|
|
WHILE GET_TIMER_IN_SECONDS(tmrUnfreeze) < 1.1
|
|
WAIT(0)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableTakeOffParachutePack, TRUE)
|
|
ENDIF
|
|
ENDWHILE
|
|
CANCEL_TIMER(tmrUnfreeze)
|
|
ENDIF
|
|
DO_SCREEN_FADE_IN(iFADE_IN_TIME)
|
|
ENDIF
|
|
|
|
// Set up the first gate.
|
|
IF DOES_ENTITY_EXIST(targetVehicle) AND NOT IS_ENTITY_DEAD(targetVehicle)
|
|
curGateBlip = ADD_BLIP_FOR_COORD(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(targetVehicle, BJ_GET_ARG_TARGET_VEHICLE_OFFSET(bjArgs)))
|
|
SET_BLIP_COLOUR(curGateBlip, BLIP_COLOUR_YELLOW)
|
|
SHOW_HEIGHT_ON_BLIP(curGateBlip, TRUE)
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(curGateBlip, "BJ_BLIP_TGT")
|
|
ELSE
|
|
curGateBlip = ADD_BLIP_FOR_COORD(BJ_GET_ARG_TARGET_POSITION(bjArgs, 0))
|
|
SET_BLIP_COLOUR(curGateBlip, BLIP_COLOUR_YELLOW)
|
|
IF iGates = 1
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(curGateBlip, "BJ_BLIP_TGT")
|
|
ELSE
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(curGateBlip, "BJ_BLIP_CHK")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_BLIP_SCALE(curGateBlip, fCUR_BLIP_SCALE)
|
|
|
|
// Set up the second gate.
|
|
IF iGates > 1
|
|
nextGateBlip = ADD_BLIP_FOR_COORD(BJ_GET_ARG_TARGET_POSITION(bjArgs, 1))
|
|
SET_BLIP_COLOUR(nextGateBlip, BLIP_COLOUR_YELLOW)
|
|
SHOW_HEIGHT_ON_BLIP(curGateBlip, TRUE)
|
|
SET_BLIP_SCALE(nextGateBlip, fNEXT_BLIP_SCALE)
|
|
IF iGates = 2
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(nextGateBlip, "BJ_BLIP_TGT")
|
|
ELSE
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(nextGateBlip, "BJ_BLIP_CHK")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// If we have a target vehicle, move it to its start position.
|
|
IF DOES_ENTITY_EXIST(targetVehicle) AND NOT IS_ENTITY_DEAD(targetVehicle)
|
|
SET_ENTITY_LOD_DIST(targetVehicle, 2000)
|
|
IF DOES_ENTITY_EXIST(targetDriverPed) AND NOT IS_PED_INJURED(targetDriverPed)
|
|
//make sure we stop the car/truck/boat from whatever it was tasked for in the cutscene.
|
|
CLEAR_PED_TASKS(targetDriverPed)
|
|
ENDIF
|
|
IF BJ_IS_MODEL_TRAIN(BJ_GET_ARG_TARGET_MODEL(bjArgs))
|
|
DELETE_MISSION_TRAIN(targetVehicle)
|
|
ELSE
|
|
SET_ENTITY_COORDS(targetVehicle, BJ_GET_ARG_TARGET_POSITION(bjArgs, 0))
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//if current jump has been completed..
|
|
IF IS_BIT_SET(g_savedGlobals.sBasejumpData.iCompletedFlags, ENUM_TO_INT(BJ_GET_ARG_STATIC_BLIP(bjArgs)) - ENUM_TO_INT(STATIC_BLIP_AMBIENT_BASEJUMP_HARBOR))
|
|
//set smoke trail color
|
|
SET_PLAYER_CAN_LEAVE_PARACHUTE_SMOKE_TRAIL(PLAYER_ID(), TRUE)
|
|
//set random color
|
|
SET_PLAYER_PARACHUTE_SMOKE_TRAIL_COLOR(PLAYER_ID(), GET_RANDOM_INT_IN_RANGE(0, 256), GET_RANDOM_INT_IN_RANGE(0, 256), GET_RANDOM_INT_IN_RANGE(0, 256))
|
|
ELSE
|
|
PRINTLN("HAVEN'T FINISHED THIS JUMP YET! jump id is.. ", ENUM_TO_INT(BJ_GET_ARG_STATIC_BLIP(bjArgs)) - ENUM_TO_INT(STATIC_BLIP_AMBIENT_BASEJUMP_HARBOR))
|
|
ENDIF
|
|
|
|
// If we're in a drivable launch vehicle, give player control.
|
|
IF BJ_IS_MODEL_GROUND_VEH(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
ODDJOB_EXIT_CUTSCENE(TRUE, TRUE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
RESTART_TIMER_NOW(radioTimer)
|
|
gameState = BJGAMESTATE_FREE_JUMP
|
|
BAWSAQ_INCREMENT_MODIFIER( BSMF_SM_PARA )
|
|
ELIF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
ODDJOB_EXIT_CUTSCENE(FALSE, FALSE)
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
gameState = BJGAMESTATE_HELI_LOOK
|
|
BAWSAQ_INCREMENT_MODIFIER( BSMF_SM_PARA )
|
|
ELSE
|
|
//SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE)
|
|
//FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
ODDJOB_EXIT_CUTSCENE(TRUE, TRUE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableTakeOffParachutePack, TRUE)
|
|
//vCatchUpPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
|
|
gameState = BJGAMESTATE_FREE_JUMP
|
|
BAWSAQ_INCREMENT_MODIFIER( BSMF_SM_PARA )
|
|
ENDIF
|
|
|
|
IF eJumpID = BJJUMPID_CRANE
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_DisableLadderClimbing, TRUE)
|
|
ENDIF
|
|
|
|
// Tell the pickup chopper to leave.
|
|
IF (NOT bFlyaway) AND DOES_ENTITY_EXIST(extraVehicle)
|
|
BJ_START_DROPOFF_HELI_SEQ(extraVehicle, TRUE)
|
|
bFlyaway = TRUE
|
|
ENDIF
|
|
|
|
// We need to set up the camera here if we didn't fade out.
|
|
IF NOT BJ_GET_ARG_CUTSCENE_FADE(bjArgs)
|
|
IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID))
|
|
BJ_SETUP_HELI_LOOK_CAMERA(cameraSet, bjArgs, vLookCamRot, vFocalPoint, vFocalOffset, launchVehicle, vBaseLookCamRot, fBaseLookCamFOV)
|
|
// NEW_LOAD_SCENE_STOP()
|
|
// vCameraPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(launchVehicle, <<1.63971, -1.48999, 2.2019>>)
|
|
// vCameraDir = <<-44.8000, 0.0000, -20.2737>>
|
|
// vCameraDir.z += GET_ENTITY_HEADING(launchVehicle)
|
|
// vCameraDir = NORMALISE_VECTOR(<<COS(vCameraDir.z), SIN(vCameraDir.z), TAN(vCameraDir.x)>>)
|
|
// NEW_LOAD_SCENE_START(vCameraPos, vCameraDir, LOAD_SCENE_FAR_CLIP)
|
|
ELSE
|
|
IF BJ_GET_ARG_HOLD_LAST_CUTSCENE_FRAME(bjArgs) AND NOT bCutsceneSkip AND NOT bRetry
|
|
//hold camera
|
|
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP(TRUE)
|
|
ELIF eJumpID = BJJUMPID_MAZE_BANK // ugly, so sue me
|
|
AND NOT IS_PLAYER_IN_FIRST_PERSON_CAMERA()
|
|
SET_CAM_COORD(BJ_GET_CAMERA_OBJECT(cameraSet, BJCAMERAID_PRIMARY_CAM), <<-76.7226, -829.9866, 326.0427>>)
|
|
SET_CAM_ROT(BJ_GET_CAMERA_OBJECT(cameraSet, BJCAMERAID_PRIMARY_CAM), <<0.8541, 0.0000, -17.0120>>)
|
|
SET_CAM_FOV(BJ_GET_CAMERA_OBJECT(cameraSet, BJCAMERAID_PRIMARY_CAM), 53.8830)
|
|
SET_CAM_ACTIVE(BJ_GET_CAMERA_OBJECT(cameraSet, BJCAMERAID_PRIMARY_CAM), TRUE)
|
|
//vCatchUpPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
|
|
ELSE
|
|
IF IS_SCRIPT_GLOBAL_SHAKING()
|
|
STOP_SCRIPT_GLOBAL_SHAKING(FALSE)
|
|
ENDIF
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE, DEFAULT_INTERP_TO_FROM_GAME, TRUE, TRUE)
|
|
ENDIF
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
NEW_LOAD_SCENE_STOP()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
//setup the player with his own parachute, otherwise give a random one.
|
|
IF bDoesPlayerHaveOwnParachute
|
|
IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), GADGETTYPE_PARACHUTE)
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, 1)
|
|
ENDIF
|
|
SET_PED_PARACHUTE_TINT_INDEX(PLAYER_PED_ID(), iParachuteTint)
|
|
|
|
IF bDoesPlayerHaveReserveParachute
|
|
IF NOT GET_PLAYER_HAS_RESERVE_PARACHUTE(PLAYER_ID())
|
|
SET_PLAYER_HAS_RESERVE_PARACHUTE(PLAYER_ID())
|
|
ENDIF
|
|
SET_PED_RESERVE_PARACHUTE_TINT_INDEX(PLAYER_PED_ID(), iParachuteReserveTint)
|
|
ENDIF
|
|
ELSE
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, 1)
|
|
SET_PED_PARACHUTE_TINT_INDEX(PLAYER_PED_ID(), GET_RANDOM_INT_IN_RANGE()%8)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), GADGETTYPE_PARACHUTE)
|
|
|
|
// Re-request the skydiving anims, since they seem to get unloaded by this point.
|
|
REQUEST_ANIM_DICT("skydive@base")
|
|
REQUEST_ANIM_DICT("skydive@freefall")
|
|
REQUEST_ANIM_DICT("skydive@parachute@chute")
|
|
REQUEST_ANIM_DICT("skydive@parachute@")
|
|
BREAK
|
|
|
|
// Run or drive off a cliff or building.
|
|
CASE BJGAMESTATE_FREE_JUMP
|
|
//check if player died.
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
gameState = BJGAMESTATE_LOSER
|
|
BREAK
|
|
ELIF bDebugFail OR bDebugPass OR BJ_CHECK_WANDER_FAIL(bjArgs, eJumpID, bWanderFail)// OR NOT IS_PLAYER_PLAYING(PLAYER_ID())
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
gameState = BJGAMESTATE_PROCESS_DATA
|
|
ELSE
|
|
IF eJumpID = BJJUMPID_CRANE
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_DisableLadderClimbing, IS_ENTITY_IN_AREA(PLAYER_PED_ID(), <<-118.4, -973.1, 295.2>>, <<-117.1, -975.7, 297.7>>))
|
|
ENDIF
|
|
|
|
IF bDebugSkip
|
|
vPlayerTlprt = BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1)
|
|
vPlayerTlprt.z += 100.0
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), vPlayerTlprt)
|
|
bDebugSkip = FALSE
|
|
ENDIF
|
|
|
|
IF NOT bCatchUpCam
|
|
IF eJumpID = BJJUMPID_MAZE_BANK
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_ACCELERATE)
|
|
OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_BRAKE)
|
|
OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_LR)
|
|
OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_UD)
|
|
OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_EXIT)
|
|
OR (NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()))
|
|
//OR VDIST2(vCatchUpPlayerPos, GET_ENTITY_COORDS(PLAYER_PED_ID())) > 0.04 // 0.2^2
|
|
RENDER_SCRIPT_CAMS(FALSE, TRUE, 1300, TRUE, TRUE)
|
|
//STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP(TRUE)
|
|
bCatchUpCam = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BJ_UPDATE_RADIO(radioTimer)
|
|
BJ_UPDATE_GATES(bjArgs, targetVehicle, launchDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, TRUE, rewardFactor)
|
|
BJ_SET_PLAYER_UNARMED(playerWeapon)
|
|
|
|
IF IS_TIMER_STARTED(flowTimer)
|
|
IF GET_TIMER_IN_SECONDS(flowTimer) > 10.0
|
|
BJ_UPDATE_PLAYER_DIALOGUE(dialogueTimer, iNumPlayerLines)
|
|
ENDIF
|
|
ELSE
|
|
START_TIMER_AT(flowTimer, 0)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(extraVehicle) AND NOT IS_ENTITY_DEAD(extraVehicle)
|
|
IF NOT IS_ENTITY_ON_SCREEN(extraVehicle)
|
|
AND VDIST2(GET_ENTITY_COORDS(extraVehicle), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 40000.0 // 200^2
|
|
PED_INDEX tempPed
|
|
tempPed = GET_PED_IN_VEHICLE_SEAT(extraVehicle)
|
|
IF NOT IS_PED_INJURED(tempPed)
|
|
DELETE_PED(tempPed)
|
|
ENDIF
|
|
DELETE_VEHICLE(extraVehicle)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Print an objective to drive or jump off the cliff.
|
|
IF NOT IS_BIT_SET(iMessagingFlags, 0)
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
OR NOT IS_TIMER_STARTED(tmrObjective)
|
|
RESTART_TIMER_NOW(tmrObjective)
|
|
ELIF GET_TIMER_IN_SECONDS(tmrObjective) > 0.25
|
|
sMessage = BJ_GET_FREE_JUMP_OBJECTIVE(eJumpID)
|
|
PRINT_NOW(sMessage, DEFAULT_GOD_TEXT_TIME, 0)
|
|
CANCEL_TIMER(tmrObjective)
|
|
SET_BIT(iMessagingFlags, 0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Print a help text to ditch the vehicle.
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
BJ_ADJUST_AUDIO_SCENE_FOR_ON_FOOT_JUMPS(bjUI, TRUE)
|
|
vehDriving = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID(), TRUE)
|
|
IF IS_VEHICLE_DRIVEABLE(vehDriving) AND IS_ENTITY_IN_AIR(vehDriving)
|
|
IF NOT IS_BIT_SET(iMessagingFlags, 1)
|
|
IF NOT IS_TIMER_STARTED(tmrDitch)
|
|
START_TIMER_NOW(tmrDitch)
|
|
ELIF GET_TIMER_IN_SECONDS(tmrDitch) > 0.15
|
|
PRINT_HELP("BJ_VEHHELP")
|
|
CANCEL_TIMER(tmrDitch)
|
|
SET_BIT(iMessagingFlags, 1)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
CLEAR_BIT(iMessagingFlags, 1)
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("BJ_VEHHELP")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
IF IS_TIMER_STARTED(tmrDitch)
|
|
CANCEL_TIMER(tmrDitch)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
BJ_ADJUST_AUDIO_SCENE_FOR_ON_FOOT_JUMPS(bjUI, FALSE)
|
|
CLEAR_BIT(iMessagingFlags, 1)
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("BJ_VEHHELP")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
IF IS_TIMER_STARTED(tmrDitch)
|
|
CANCEL_TIMER(tmrDitch)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// If the player is skydiving, move on to that state.
|
|
IF GET_PED_PARACHUTE_STATE(PLAYER_PED_ID()) <> PPS_INVALID
|
|
IF eJumpID = BJJUMPID_CRANE
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_DisableLadderClimbing, FALSE)
|
|
ENDIF
|
|
CASCADE_SHADOWS_SET_AIRCRAFT_MODE(TRUE)
|
|
SET_AUDIO_FLAG("DisableFlightMusic", FALSE)
|
|
gameState = BJGAMESTATE_SKYDIVING
|
|
CANCEL_TIMER(flowTimer)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Can move camera and press a button to jump.
|
|
CASE BJGAMESTATE_HELI_LOOK
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(200.0)
|
|
ENDIF
|
|
|
|
// Check for changes in wind state from rag.
|
|
#IF IS_DEBUG_BUILD
|
|
IF bUseElevationWind <> bjw.bUseElevationWind
|
|
bUseElevationWind = bjw.bUseElevationWind
|
|
SCRIPT_OVERRIDES_WIND_ELEVATION(bUseElevationWind, HASH("WEATHER_TYPES_HIGH_ELEVATION_BASE_JUMP_HELI"))
|
|
ENDIF
|
|
|
|
IF bUseCustomWind <> bjw.bUseCustomWind
|
|
bUseCustomWind = bjw.bUseCustomWind
|
|
IF bUseCustomWind
|
|
PLAY_SOUND_FROM_ENTITY(iWindSound, "Helicopter_Wind_Idle", launchVehicle, "BASEJUMPS_SOUNDS")
|
|
ELSE
|
|
STOP_SOUND(iWindSound)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// Handle debug pass/fail.
|
|
IF bDebugPass OR bDebugFail
|
|
IF IS_SCREEN_FADED_OUT() OR IS_SCREEN_FADING_OUT()
|
|
DO_SCREEN_FADE_IN(300)
|
|
WAIT(300)
|
|
ENDIF
|
|
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
|
|
IF IS_SCRIPT_GLOBAL_SHAKING()
|
|
STOP_SCRIPT_GLOBAL_SHAKING(FALSE)
|
|
ENDIF
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
gameState = BJGAMESTATE_PROCESS_DATA
|
|
|
|
ELSE
|
|
BJ_UPDATE_RADIO(radioTimer)
|
|
BJ_UPDATE_GATES(bjArgs, targetVehicle, launchDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, TRUE, rewardFactor)
|
|
BJ_SET_PLAYER_UNARMED(playerWeapon)
|
|
|
|
IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(eJumpID)) AND NOT IS_ENTITY_DEAD(launchVehicle)
|
|
BJ_UPDATE_HELI_MOTION(launchVehicle, BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID))
|
|
ENDIF
|
|
|
|
IF IS_TIMER_STARTED(flowTimer)
|
|
IF GET_TIMER_IN_SECONDS(flowTimer) > 10.0
|
|
BJ_UPDATE_PLAYER_DIALOGUE(dialogueTimer, iNumPlayerLines)
|
|
ENDIF
|
|
ELSE
|
|
START_TIMER_AT(flowTimer, 0)
|
|
ENDIF
|
|
|
|
// Wait for the player to press the launch button.
|
|
IF BJ_UPDATE_HELI_LOOK_CAMERA(bjArgs, cameraSet, input, inputTimer, vLookCamRot, vCameraVelocity, vFocalPoint, vFocalOffset) OR bDebugSkip
|
|
CANCEL_TIMER(flowTimer)
|
|
CLEAR_HELP()
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
// If we are launching out of a chopper, leave the vehicle now and use a fixed camera.
|
|
IF DOES_ENTITY_EXIST(launchVehicle) AND NOT IS_ENTITY_DEAD(launchVehicle)
|
|
SET_ENTITY_COORDS(launchVehicle, BJ_GET_COURSE_PLAYER_LOCATION_BY_ID(eJumpID))
|
|
SET_ENTITY_HEADING(launchVehicle, BJ_GET_ARG_LAUNCH_HEADING(bjArgs))
|
|
FREEZE_ENTITY_POSITION(launchVehicle, TRUE)
|
|
iSceneId = CREATE_SYNCHRONIZED_SCENE (<<0,0,0>>, <<0,0,0>>)
|
|
ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(iSceneId, launchVehicle, GET_ENTITY_BONE_INDEX_BY_NAME(launchVehicle, "Chassis"))
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iSceneId, "oddjobs@basejump@", "Heli_jump", SLOW_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT | SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_TAG_SYNC_OUT)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iSceneID, 0.6)
|
|
|
|
BJ_SETUP_HELI_JUMP_CAMERA(launchVehicle, cameraSet, camTimer)
|
|
NEW_LOAD_SCENE_STOP()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bUseElevationWind
|
|
SCRIPT_OVERRIDES_WIND_ELEVATION(FALSE, HASH("WEATHER_TYPES_HIGH_ELEVATION_BASE_JUMP_HELI"))
|
|
ENDIF
|
|
|
|
PLAY_SOUND_FROM_ENTITY(iWindSound, "Helicopter_Wind", launchVehicle, "BASEJUMPS_SOUNDS")
|
|
|
|
bDebugSkip = FALSE
|
|
gameState = BJGAMESTATE_HELI_JUMP
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Player is jumping from his spot. No player control.
|
|
CASE BJGAMESTATE_HELI_JUMP
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(200.0)
|
|
ENDIF
|
|
|
|
BJ_UPDATE_RADIO(radioTimer)
|
|
BJ_UPDATE_GATES(bjArgs, targetVehicle, launchDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, TRUE, rewardFactor)
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSceneId)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iSceneId) > 0.92
|
|
OPEN_SEQUENCE_TASK(jumpSequence)
|
|
TASK_FORCE_MOTION_STATE(NULL, ENUM_TO_INT(MS_PARACHUTING))
|
|
TASK_PARACHUTE(NULL, TRUE)
|
|
CLOSE_SEQUENCE_TASK(jumpSequence)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), jumpSequence)
|
|
CLEAR_SEQUENCE_TASK(jumpSequence)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// If launching from a helicopter, wait a specified amount of time.
|
|
IF DOES_ENTITY_EXIST(launchVehicle)
|
|
IF BJ_UPDATE_HELI_JUMP_CAMERA(cameraSet, camTimer, vFocalPoint, vFocalOffset, vLookCamRot, vBaseLookCamRot, fBaseLookCamFOV)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(PLAYER_PED_ID(), launchVehicle, FALSE)
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "oddjobs@basejump@", "Heli_jump")
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
DISPLAY_RADAR(TRUE)
|
|
IF IS_SCRIPT_GLOBAL_SHAKING()
|
|
STOP_SCRIPT_GLOBAL_SHAKING(FALSE)
|
|
ENDIF
|
|
SET_AUDIO_FLAG("DisableFlightMusic", FALSE)
|
|
CASCADE_SHADOWS_SET_AIRCRAFT_MODE(TRUE)
|
|
gameState = BJGAMESTATE_SKYDIVING
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Active gameplay, either in skydive or parachute state.
|
|
CASE BJGAMESTATE_SKYDIVING
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(200.0)
|
|
ENDIF
|
|
|
|
//bug:2437600
|
|
#IF USE_REPLAY_RECORDING_TRIGGERS
|
|
IF g_sSelectorUI.bFeedAddedForRecording
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PARACHUTE_DEPLOY)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
//bug:2437600
|
|
#IF USE_REPLAY_RECORDING_TRIGGERS
|
|
IF g_sSelectorUI.bFeedAddedForRecording
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PARACHUTE_DEPLOY)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
//check if player died.
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
gameState = BJGAMESTATE_LOSER
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF bDebugPass OR bDebugFail
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
gameState = BJGAMESTATE_PROCESS_DATA
|
|
|
|
ELIF BJ_IS_BUTTON_JUST_PRESSED_WITH_DELAY(input, BJBUTTON_RETRY)
|
|
#IF USE_REPLAY_RECORDING_TRIGGERS
|
|
and !g_sSelectorUI.bFeedAddedForRecording
|
|
#ENDIF
|
|
|
|
SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), TRUE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
DO_SCREEN_FADE_OUT(iFADE_OUT_TIME)
|
|
WHILE IS_SCREEN_FADING_OUT()
|
|
BJ_UPDATE_GATES(bjArgs, targetVehicle, targetDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, TRUE, rewardFactor)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
BJ_RESET_ON_RETRY(bjArgs, bjUI_Leaderboard, bjUI, iMessagingFlags, targetDriverPed, onlookerArray, vehPlayer, targetVehicle, targetFlatbed, extraVehicle, vehNearby, curCheckpoint, nextCheckpoint, curGateBlip, nextGateBlip, iCurrentGate, iCurCheckpoint, iGatesHit, iNumPlayerLines, iAccuracy, eJumpID, gateCheckResult, savedLandingType, tEndDelayTimer, tmrLandingAlpha, vCameraVelocity, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, bFlyaway, bDebugPass, bDebugFail, bDebugSkip, bLBToggle, bPlayerDiedLanding, bjCombatAvoidanceArea)
|
|
bRetry = TRUE
|
|
gameState = BJGAMESTATE_INIT
|
|
ELSE
|
|
BJ_UPDATE_ONLOOKERS(tmrOnlookers, onlookerArray)
|
|
|
|
IF bDebugSkip
|
|
vPlayerTlprt = BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1)
|
|
SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), vPlayerTlprt)
|
|
bDebugSkip = FALSE
|
|
ENDIF
|
|
|
|
BJ_UPDATE_RADIO(radioTimer)
|
|
|
|
// If we have a target vehicle, start it on its path
|
|
IF BJ_IS_MODEL_TRAIN(BJ_GET_ARG_TARGET_MODEL(bjArgs))
|
|
IF NOT DOES_ENTITY_EXIST(targetVehicle) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), BJ_GET_ARG_TARGET_POSITION(bjArgs, 0), FALSE) <= fTRAIN_TGT_START_MOVING
|
|
targetVehicle = CREATE_MISSION_TRAIN(6, BJ_GET_ARG_TARGET_POSITION(bjArgs, 0), TRUE)
|
|
IF NOT IS_ENTITY_DEAD(targetVehicle)
|
|
SET_TRAIN_CRUISE_SPEED(targetVehicle, 7.5)
|
|
ENDIF
|
|
ENDIF
|
|
ELIF DOES_ENTITY_EXIST(targetVehicle) AND NOT IS_ENTITY_DEAD(targetVehicle) AND NOT IS_VECTOR_ZERO(BJ_GET_ARG_TARGET_POSITION(bjArgs, 0))
|
|
IS_PED_INJURED(targetDriverPed)
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), targetVehicle, FALSE) <= fGROUND_TGT_START_MOVING
|
|
VECTOR targetCoords
|
|
IF eJumpID = BJJUMPID_CRANE
|
|
targetCoords = <<28.8687, -299.1065, 46.5693>>
|
|
ELSE
|
|
targetCoords = <<-819.7591, -1512.2285, 0.1336>>
|
|
ENDIF
|
|
|
|
IF GET_SCRIPT_TASK_STATUS(targetDriverPed, SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
|
|
IF eJumpID = BJJUMPID_CRANE
|
|
TASK_VEHICLE_MISSION_COORS_TARGET(targetDriverPed, targetVehicle, targetCoords, MISSION_GOTO, 5.0, DF_ForceStraightLine | DF_PreventBackgroundPathfinding, 5.0, 10.0)
|
|
ELSE
|
|
TASK_VEHICLE_MISSION_COORS_TARGET(targetDriverPed, targetVehicle, targetCoords, MISSION_GOTO, 5.0, DF_ForceStraightLine, 4.0, -1 )
|
|
ENDIF
|
|
ELSE
|
|
//updating task every frame doesnt work for the boat.
|
|
BJ_UPDATE_MOVING_TARGET_SPEED(targetVehicle)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
gateCheckResult = BJ_UPDATE_GATES(bjArgs, targetVehicle, targetDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, TRUE, TRUE, rewardFactor)
|
|
|
|
IF gateCheckResult = BJGATECHECK_PASS OR gateCheckResult >= BJGATECHECK_FAIL
|
|
PRINTLN("Checking gatecheck pass or fail...")
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
IF gateCheckResult >= BJGATECHECK_FAIL
|
|
PRINTLN("Failed! Or failed for being too far!")
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_PRINTS()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
|
|
|
|
IF eJumpID = BJJUMPID_CRANE
|
|
CLEAR_PED_TASKS(targetDriverPed)
|
|
SET_PED_CONFIG_FLAG(targetDriverPed, PCF_NeverReactToPedOnRoof, TRUE)
|
|
ENDIF
|
|
|
|
INT iPedCounter
|
|
REPEAT COUNT_OF(onlookerArray) iPedCounter
|
|
IF DOES_ENTITY_EXIST(onlookerArray[iPedCounter]) AND NOT IS_ENTITY_DEAD(onlookerArray[iPedCounter])
|
|
CLEAR_PED_TASKS(onlookerArray[iPedCounter])
|
|
onlookerArray[iPedCounter] = NULL
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
gameState = BJGAMESTATE_PROCESS_DATA
|
|
ENDIF
|
|
|
|
BJ_UPDATE_INGAME_UI(bjUI, bjArgs, eJumpID, iGates)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE BJGAMESTATE_PROCESS_DATA
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(200.0)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(targetDriverPed) AND NOT IS_ENTITY_DEAD(targetDriverPed)
|
|
IF GET_SCRIPT_TASK_STATUS(targetDriverPed, SCRIPT_TASK_STAND_STILL) <> WAITING_TO_START_TASK
|
|
AND GET_SCRIPT_TASK_STATUS(targetDriverPed, SCRIPT_TASK_STAND_STILL) <> PERFORMING_TASK
|
|
CLEAR_PED_TASKS(targetDriverPed)
|
|
TASK_STAND_STILL(targetDriverPed, -1)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (NOT bDebugPass) AND (NOT bDebugFail) AND (NOT bWanderFail)
|
|
//wait for player to stop falling or ragdolling or rolling (with timeout)
|
|
IF NOT IS_TIMER_STARTED(tEndDelayTimer)
|
|
IF NOT IS_TIMER_STARTED(inputTimer)
|
|
START_TIMER_NOW(inputTimer)
|
|
ENDIF
|
|
// Make sure all blips are gone.
|
|
IF DOES_BLIP_EXIST(curGateBlip)
|
|
REMOVE_BLIP(curGateBlip)
|
|
ENDIF
|
|
IF DOES_BLIP_EXIST(nextGateBlip)
|
|
REMOVE_BLIP(nextGateBlip)
|
|
ENDIF
|
|
IF iCurCheckpoint > -1
|
|
DELETE_CHECKPOINT(curCheckpoint)
|
|
DELETE_CHECKPOINT(nextCheckpoint) // No way to see if this exists
|
|
iCurCheckpoint = -1
|
|
ENDIF
|
|
START_TIMER_AT(tEndDelayTimer, 0)
|
|
ENDIF
|
|
|
|
IF NOT IS_TIMER_STARTED(tmrLandingAlpha)
|
|
START_TIMER_NOW(tmrLandingAlpha)
|
|
ENDIF
|
|
|
|
IF BJ_GET_ARG_TARGET_MODEL(bjArgs) = DUMMY_MODEL_FOR_SCRIPT
|
|
|
|
// [aarong] - I changed this BJ_DRAW_FINAL_GATE_POST_LANDING(BJ_GET_ARG_TARGET_POSITION(bjArgs iGates - 1), tmrLandingAlpha) for below as it did not build
|
|
BJ_DRAW_FINAL_GATE_POST_LANDING(BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1), tmrLandingAlpha)
|
|
ENDIF
|
|
|
|
//if we have a target vehicle, check if we're "crash landing" near it
|
|
//this is for the case the player lets go of the parachute early to land
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF DOES_ENTITY_EXIST(targetVehicle) AND (NOT IS_ENTITY_DEAD(targetVehicle)) AND (NOT IS_ENTITY_DEAD(PLAYER_PED_ID()))
|
|
AND (IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), targetVehicle, BJ_TARGET_VEHICLE_LOCATE))
|
|
OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), BJ_GET_ARG_TARGET_POSITION(bjArgs, iCurrentGate), BJ_TARGET_VEHICLE_LOCATE)
|
|
OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
BOOL bBreak
|
|
bBreak = FALSE
|
|
IF IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
AND (DOES_ENTITY_EXIST(targetVehicle) AND NOT IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), targetVehicle))
|
|
PRINTLN("Ped is still in the air and we're close to the target (but not touching)!")
|
|
bBreak = TRUE
|
|
ELIF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
PRINTLN("Ped is ragdolling and we're close to the target!")
|
|
// PRINTLN("Player is ragdolling and we're close to the target!")
|
|
bBreak = TRUE
|
|
// ELIF DOES_ENTITY_EXIST(targetVehicle) AND IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), targetVehicle)
|
|
// PRINTLN("Ped is touching the target! Waiting to see if he's able to get on top before hitting the ground/water")
|
|
// BREAK
|
|
ENDIF
|
|
|
|
IF bBreak
|
|
IF BJ_IS_BUTTON_JUST_PRESSED_WITH_DELAY(input, BJBUTTON_RETRY)
|
|
#IF USE_REPLAY_RECORDING_TRIGGERS
|
|
AND !g_sSelectorUI.bFeedAddedForRecording
|
|
#ENDIF
|
|
SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), TRUE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
DO_SCREEN_FADE_OUT(iFADE_OUT_TIME)
|
|
WHILE IS_SCREEN_FADING_OUT()
|
|
BJ_UPDATE_GATES(bjArgs, targetVehicle, targetDriverPed, onlookerArray, curCheckpoint, nextCheckpoint, iCurrentGate, iCurCheckpoint, iGatesHit, iGates, iAccuracy, curGateBlip, nextGateBlip, iSoundID_01, savedLandingType, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, FALSE, TRUE, rewardFactor)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
BJ_RESET_ON_RETRY(bjArgs, bjUI_Leaderboard, bjUI, iMessagingFlags, targetDriverPed, onlookerArray, vehPlayer, targetVehicle, targetFlatbed, extraVehicle, vehNearby, curCheckpoint, nextCheckpoint, curGateBlip, nextGateBlip, iCurrentGate, iCurCheckpoint, iGatesHit, iNumPlayerLines, iAccuracy, eJumpID, gateCheckResult, savedLandingType, tEndDelayTimer, tmrLandingAlpha, vCameraVelocity, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, bFlyaway, bDebugPass, bDebugFail, bDebugSkip, bLBToggle, bPlayerDiedLanding, bjCombatAvoidanceArea)
|
|
bRetry = TRUE
|
|
gameState = BJGAMESTATE_INIT
|
|
ENDIF
|
|
BREAK
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//check if player died.
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
gameState = BJGAMESTATE_LOSER
|
|
BREAK
|
|
ENDIF
|
|
|
|
//short wait in case player recovers landing
|
|
IF (bDebugPass OR bDebugFail OR bWanderFail)
|
|
OR (IS_TIMER_STARTED(tEndDelayTimer) AND GET_TIMER_IN_SECONDS(tEndDelayTimer) > 0.25)
|
|
IF IS_TIMER_STARTED(tEndDelayTimer) AND GET_TIMER_IN_SECONDS(tEndDelayTimer) > 0.25
|
|
////////////////////THIS WILL OVERWRITE OUR RESULTS FROM BJ_UPDATE_GATES!!!!!!
|
|
BJ_PERFORM_FINAL_LANDING_CHECK(BJ_GET_ARG_TARGET_POSITION(bjArgs, iCurrentGate), targetVehicle, targetDriverPed, gateCheckResult, iAccuracy, fLandingDistance)
|
|
////////////////////THIS WILL OVERWRITE OUR RESULTS FROM BJ_UPDATE_GATES!!!!!!
|
|
ENDIF
|
|
|
|
CANCEL_TIMER(tEndDelayTimer)
|
|
IF bDebugPass OR gateCheckResult = BJGATECHECK_PASS
|
|
bigMessageUI.siMovie = REQUEST_MG_BIG_MESSAGE()
|
|
WHILE NOT HAS_SCALEFORM_MOVIE_LOADED(bigMessageUI.siMovie)
|
|
WAIT(0)
|
|
IF BJ_GET_ARG_TARGET_MODEL(bjArgs) = DUMMY_MODEL_FOR_SCRIPT
|
|
BJ_DRAW_FINAL_GATE_POST_LANDING(BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1), tmrLandingAlpha)
|
|
ENDIF
|
|
bigMessageUI.siMovie = REQUEST_MG_BIG_MESSAGE()
|
|
ENDWHILE
|
|
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
IF NOT IS_PED_INJURED(targetDriverPed)
|
|
CREATE_CONVERSATION(conversationPedStruct, "OJBJAUD", "BJ_01D", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES, DO_NOT_ADD_TO_BRIEF_SCREEN)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
gameState = BJGAMESTATE_WINNER
|
|
|
|
IF NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_PROCESS_SCORE)
|
|
PRINTLN("Passed!")
|
|
bitDif = ENUM_TO_INT(STATIC_BLIP_AMBIENT_BASEJUMP_HARBOR)
|
|
SET_BIT(g_savedGlobals.sBasejumpData.iCompletedFlags, ENUM_TO_INT(BJ_GET_ARG_STATIC_BLIP(bjArgs)) - bitDif)
|
|
SET_STATIC_BLIP_HAS_CHECKMARK(BJ_GET_ARG_STATIC_BLIP(bjArgs), TRUE)
|
|
|
|
// Check for unlockables - Extreme 4 RCM, infinite parachute pack, completion percentage
|
|
bAllClear = TRUE
|
|
bBASEJumpClear = TRUE
|
|
bSkydiveClear = TRUE
|
|
REPEAT BJJUMPIDS iJumpIndex
|
|
IF NOT IS_BIT_SET(g_savedGlobals.sBasejumpData.iCompletedFlags, iJumpIndex)
|
|
// heli = skydive, no heli = base jump
|
|
IF BJ_IS_MODEL_HELI(BJ_GET_LAUNCH_VEHICLE_BY_ID(INT_TO_ENUM(BJ_JUMP_ID, iJumpIndex)))
|
|
bSkydiveClear = FALSE
|
|
ELSE
|
|
bBaseJumpClear = FALSE
|
|
ENDIF
|
|
bAllClear = FALSE
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// Allow Extreme 4 and infinite parachute pack?
|
|
IF bAllClear AND (NOT GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EXTREME4_BJUMPS_FINISHED))
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_EXTREME4_BJUMPS_FINISHED, TRUE)
|
|
ENDIF
|
|
|
|
// Allow BASE jump and skydive completion percentages?
|
|
IF bBASEJumpClear
|
|
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_MG_BASEJ)
|
|
ENDIF
|
|
IF bSkydiveClear
|
|
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_MG_SKYD)
|
|
ENDIF
|
|
|
|
BJ_CALCULATE_REWARD(iGatesHit, iGates, iAccuracy, iReward, rewardFactor)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
|
|
ENDIF
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_PROCESS_SCORE, TRUE)
|
|
SET_AUTOSAVE_IGNORES_ON_MISSION_FLAG(TRUE)
|
|
START_TIMER_NOW(tmrSave)
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
ENDIF
|
|
|
|
ELIF bDebugFail OR bWanderFail OR gateCheckResult >= BJGATECHECK_FAIL
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
IF NOT bWanderFail
|
|
BJ_PLAY_FAIL_DIALOGUE()
|
|
ENDIF
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
bPlayerDiedLanding = TRUE
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_ONLINE()
|
|
SETUP_MINIGAME_INSTRUCTION_INPUTS(bjUI.uiControls, FALSE, INPUT_FRONTEND_ACCEPT, "BJ_CONTINUE", INPUT_FRONTEND_X, "BJ_RETRY")
|
|
ELSE
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_SHOWING_OFFLINE_LB_BUTTON, TRUE)
|
|
SETUP_MINIGAME_INSTRUCTION_INPUTS(bjUI.uiControls, FALSE, INPUT_FRONTEND_ACCEPT, "BJ_CONTINUE", INPUT_FRONTEND_X, "BJ_RETRY", INPUT_FRONTEND_LEADERBOARD, "HUD_INPUT68")
|
|
ENDIF
|
|
gameState = BJGAMESTATE_LOSER
|
|
|
|
ELSE
|
|
PRINTLN("gateCheckResult is BJGATECHECK_NONE")
|
|
ENDIF
|
|
|
|
CANCEL_TIMER(inputTimer)
|
|
ENDIF
|
|
BREAK
|
|
|
|
// We have a winner and are displaying the win UI.
|
|
CASE BJGAMESTATE_WINNER
|
|
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) // B*2239651 - Disabling pause_alternate during end screens (to avoid clash when exiting leaderboards)
|
|
|
|
// BJ_UPDATE_SPLASH_SCREEN(bigMessageUI)
|
|
IF NOT bDebugPass AND NOT bDebugFail
|
|
IF CAN_WRITE_TO_LEADERBOARD() AND NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB)
|
|
BJ_LOAD_SOCIAL_CLUB_LEADERBOARD(eJumpID)
|
|
IF BJ_DO_RANK_PREDICTION(eJumpID, iAccuracy, fLandingDistance, iReward)
|
|
SETUP_MINIGAME_INSTRUCTION_INPUTS(bjUI.uiControls, FALSE, INPUT_FRONTEND_ENDSCREEN_ACCEPT, "BJ_CONTINUE", INPUT_FRONTEND_ENDSCREEN_EXPAND, "BJ_RETRY", INPUT_FRONTEND_LEADERBOARD, "HUD_INPUT68")
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
bPlayerFinishedInVehicle = IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF BJ_GET_ARG_TARGET_MODEL(bjArgs) = DUMMY_MODEL_FOR_SCRIPT
|
|
BJ_DRAW_FINAL_GATE_POST_LANDING(BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1), tmrLandingAlpha)
|
|
ENDIF
|
|
|
|
// Update the win screen, only read the keys while player hasn't chosen to exit basejumping
|
|
IF NOT bWinScreenKeyPressed
|
|
scorecardReturn = BJ_UPDATE_SCORECARD_UI(eJumpID, bjUI, bjUI_Leaderboard, input, iGatesHit, iGates, iAccuracy, iReward, rewardFactor, bLBToggle)
|
|
bWinScreenKeyPressed = (scoreCardReturn = BJSCORECARD_EXIT)
|
|
ENDIF
|
|
|
|
// If the screen is fading, wait for it to finish.
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF iJumpID = ENUM_TO_INT(BJJUMPID_HARBOR)
|
|
SET_ROADS_IN_ANGLED_AREA(<<-832.271, -1525.112, -100>>, <<-1187.833, -1876.646, 100>>, 50, FALSE, TRUE)
|
|
ELIF iJumpID = ENUM_TO_INT(BJJUMPID_CRANE)
|
|
SET_ROADS_IN_ANGLED_AREA(<<-129.031, -726.381, 35>>, <<-38.185, -465.801, 100>>, 75, FALSE, TRUE)
|
|
ENDIF
|
|
BJ_SCRIPT_PASS(bjArgs, bjUI_Leaderboard, launchVehicle, targetVehicle, extraVehicle, vehNearby, vehPlayer, conversationPedStruct, launchDriverPed, targetDriverPed, onlookerArray, iWindSound, iNumPlayerLines, curGateBlip, nextGateBlip, eJumpID, bjCombatAvoidanceArea, bDoesPlayerHaveOwnParachute)
|
|
|
|
// If the screen is not fading, update player input & state.
|
|
ELIF (NOT IS_SCREEN_FADING_OUT()) AND ((NOT IS_AUTOSAVE_REQUEST_IN_PROGRESS()) OR GET_TIMER_IN_SECONDS(tmrSave) >= 2.0)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DIVE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_ALTERNATE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CIN_CAM)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CINEMATIC_UD)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CINEMATIC_UP_ONLY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CINEMATIC_DOWN_ONLY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CINEMATIC_LR)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
|
|
|
|
IF IS_TIMER_STARTED(inputTimer)
|
|
// Player wants to quit (or time is up).
|
|
IF scorecardReturn = BJSCORECARD_EXIT OR GET_TIMER_IN_SECONDS(inputTimer) >= fPOST_WIN_TIMEOUT OR
|
|
((NOT IS_PED_INJURED(PLAYER_PED_ID())) AND IS_PED_JACKING(PLAYER_PED_ID()) OR (!bPlayerFinishedInVehicle AND IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE))) //check if player is getting into or jacking a veh
|
|
//Set the end screen animating out when the timer's expired
|
|
IF (NOT bWinScreenKeyPressed)
|
|
ENDSCREEN_START_TRANSITION_OUT(bjUi.bjEndScreen)
|
|
bWinScreenKeyPressed = TRUE
|
|
ENDIF
|
|
//Only finish when the end screen stops rendering
|
|
IF RENDER_ENDSCREEN(bjUI.bjEndScreen)
|
|
//last chance write if we havent yet.
|
|
IF NOT bDebugPass AND NOT bDebugFail
|
|
IF CAN_WRITE_TO_LEADERBOARD() AND NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB)
|
|
IF BJ_DO_RANK_PREDICTION(eJumpID, iAccuracy, fLandingDistance, iReward)
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDSCREEN_SHUTDOWN(bjUI.bjEndScreen)
|
|
CANCEL_TIMER(tmrSave)
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_ROADS_IN_ANGLED_AREA(<<-832.271, -1525.112, -100>>, <<-1187.833, -1876.646, 100>>, 50, FALSE, TRUE)
|
|
ELIF eJumpID = BJJUMPID_CRANE
|
|
SET_ROADS_IN_ANGLED_AREA(<<-129.031, -726.381, 35>>, <<-38.185, -465.801, 100>>, 75, FALSE, TRUE)
|
|
ENDIF
|
|
BJ_SCRIPT_PASS(bjArgs, bjUI_Leaderboard, launchVehicle, targetVehicle, extraVehicle, vehNearby, vehPlayer, conversationPedStruct, launchDriverPed, targetDriverPed, onlookerArray, iWindSound, iNumPlayerLines, curGateBlip, nextGateBlip, eJumpID, bjCombatAvoidanceArea, bDoesPlayerHaveOwnParachute)
|
|
ENDIF
|
|
|
|
// Player wants to retry.
|
|
ELIF scorecardReturn = BJSCORECARD_RETRY
|
|
IF NOT bDebugPass AND NOT bDebugFail
|
|
IF CAN_WRITE_TO_LEADERBOARD() AND NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB)
|
|
IF BJ_DO_RANK_PREDICTION(eJumpID, iAccuracy, fLandingDistance, iReward)
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDSCREEN_SHUTDOWN(bjUI.bjEndScreen)
|
|
CANCEL_TIMER(tmrSave)
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_POPULATE_SCORECARD, FALSE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
DO_SCREEN_FADE_OUT(iFADE_OUT_TIME)
|
|
WHILE IS_SCREEN_FADING_OUT()
|
|
WAIT(0)
|
|
IF BJ_GET_ARG_TARGET_MODEL(bjArgs) = DUMMY_MODEL_FOR_SCRIPT
|
|
BJ_DRAW_FINAL_GATE_POST_LANDING(BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1), tmrLandingAlpha)
|
|
ENDIF
|
|
ENDWHILE
|
|
|
|
BJ_RESET_ON_RETRY(bjArgs, bjUI_Leaderboard, bjUI, iMessagingFlags, targetDriverPed, onlookerArray, vehPlayer, targetVehicle, targetFlatbed, extraVehicle, vehNearby, curCheckpoint, nextCheckpoint, curGateBlip, nextGateBlip, iCurrentGate, iCurCheckpoint, iGatesHit, iNumPlayerLines, iAccuracy, eJumpID, gateCheckResult, savedLandingType, tEndDelayTimer, tmrLandingAlpha, vCameraVelocity, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, bFlyaway, bDebugPass, bDebugFail, bDebugSkip, bLBToggle, bPlayerDiedLanding, bjCombatAvoidanceArea)
|
|
bRetry = TRUE
|
|
gameState = BJGAMESTATE_INIT
|
|
BREAK //make sure we dont reset the UI flags and play the EOM SFX again.
|
|
|
|
ELIF bLBToggle
|
|
IF GET_TIMER_IN_SECONDS(inputTimer) > fPOST_WIN_TIMEOUT - 5.0
|
|
RESTART_TIMER_AT(inputTimer, fPOST_WIN_TIMEOUT - 5.0)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
START_TIMER_AT(inputTimer, 0)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// We have a loser and are displaying the retry/quit controls.
|
|
CASE BJGAMESTATE_LOSER
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
bPlayerFinishedInVehicle = IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) // B*2239651 - Disabling pause_alternate during end screens (to avoid clash when exiting leaderboards)
|
|
|
|
// we failed so no reward.
|
|
IF iReward > 0
|
|
iReward = 0
|
|
ENDIF
|
|
|
|
IF NOT bDebugPass AND NOT bDebugFail
|
|
IF CAN_WRITE_TO_LEADERBOARD() AND NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB)
|
|
BJ_LOAD_SOCIAL_CLUB_LEADERBOARD(eJumpID)
|
|
IF BJ_DO_RANK_PREDICTION(eJumpID, iAccuracy, fLandingDistance, iReward)
|
|
SETUP_MINIGAME_INSTRUCTION_INPUTS(bjUI.uiControls, FALSE, INPUT_FRONTEND_ACCEPT, "BJ_CONTINUE", INPUT_FRONTEND_X, "BJ_RETRY", INPUT_FRONTEND_LEADERBOARD, "HUD_INPUT68")
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_STARTED_FAIL_EFFECTS)
|
|
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
bRestartedFromDeath = TRUE
|
|
ELSE
|
|
bRestartedFromDeath = FALSE
|
|
ENDIF
|
|
|
|
CANCEL_MUSIC_EVENT("OJBJ_START")
|
|
CANCEL_MUSIC_EVENT("OJBJ_JUMPED")
|
|
CANCEL_MUSIC_EVENT("OJBJ_LANDED")
|
|
TRIGGER_MUSIC_EVENT("OJBJ_STOP")
|
|
|
|
// Make sure all blips are gone.
|
|
IF DOES_BLIP_EXIST(curGateBlip)
|
|
REMOVE_BLIP(curGateBlip)
|
|
ENDIF
|
|
IF DOES_BLIP_EXIST(nextGateBlip)
|
|
REMOVE_BLIP(nextGateBlip)
|
|
ENDIF
|
|
IF eJumpID = BJJUMPID_HARBOR
|
|
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(200.0)
|
|
ENDIF
|
|
|
|
bigMessageUI.siMovie = REQUEST_MG_BIG_MESSAGE()
|
|
WHILE NOT HAS_SCALEFORM_MOVIE_LOADED(bigMessageUI.siMovie)
|
|
IF BJ_GET_ARG_TARGET_MODEL(bjArgs) = DUMMY_MODEL_FOR_SCRIPT
|
|
BJ_DRAW_FINAL_GATE_POST_LANDING(BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1), tmrLandingAlpha)
|
|
ENDIF
|
|
WAIT(0)
|
|
bigMessageUI.siMovie = REQUEST_MG_BIG_MESSAGE()
|
|
ENDWHILE
|
|
IF bRestartedFromDeath
|
|
MG_INIT_FAIL_FADE_EFFECT(bjDeathEffect)
|
|
ELSE
|
|
MG_INIT_FAIL_SPLASH_SCREEN(bjSplashStruct)
|
|
ENDIF
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_STARTED_FAIL_EFFECTS, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT bRestartedFromDeath AND IS_PED_INJURED(PLAYER_PED_ID())
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_STARTED_FAIL_EFFECTS, FALSE)
|
|
BREAK
|
|
ENDIF
|
|
|
|
IF BJ_GET_ARG_TARGET_MODEL(bjArgs) = DUMMY_MODEL_FOR_SCRIPT
|
|
BJ_DRAW_FINAL_GATE_POST_LANDING(BJ_GET_ARG_TARGET_POSITION(bjArgs, iGates - 1), tmrLandingAlpha)
|
|
ENDIF
|
|
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
SWITCH GET_PLAYER_PED_ENUM(PLAYER_PED_ID())
|
|
CASE CHAR_MICHAEL
|
|
bjFailStrapline = "BJ_FAIL_M"
|
|
BREAK
|
|
CASE CHAR_FRANKLIN
|
|
bjFailStrapline = "BJ_FAIL_F"
|
|
BREAK
|
|
CASE CHAR_TREVOR
|
|
bjFailStrapline = "BJ_FAIL_T"
|
|
BREAK
|
|
ENDSWITCH
|
|
ELIF bWanderFail
|
|
bjFailStrapline = "BJ_FAIL_02" //abandonded
|
|
ELSE
|
|
bjFailStrapline = "BJ_FAIL_01" //landed too far
|
|
ENDIF
|
|
|
|
bFinishedFailScreen = FALSE
|
|
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CIN_CAM)
|
|
|
|
IF bRestartedFromDeath
|
|
bFinishedFailScreen = MG_UPDATE_FAIL_FADE_EFFECT(bjDeathEffect, bjSplashStruct, bigMessageUI, bjFailString, bjFailStrapline, bRetry)
|
|
ELSE
|
|
bFinishedFailScreen = MG_UPDATE_FAIL_SPLASH_SCREEN(bigMessageUI, bjSplashStruct, bjFailString, bjFailStrapline, bRetry, FAIL_SPLASH_ENABLE_PLAYER_CONTROL | FAIL_SPLASH_FADE_ON_RETRY | FAIL_SPLASH_ALLOW_ABANDON | FAIL_SPLASH_ENABLE_SOUNDS | FAIL_SPLASH_ENABLE_FX)//| FAIL_SPLASH_ANIMATE_SUB )
|
|
ENDIF
|
|
|
|
IF bFinishedFailScreen
|
|
IF bRetry
|
|
//last chance write if we havent yet.
|
|
IF NOT bDebugPass AND NOT bDebugFail
|
|
IF CAN_WRITE_TO_LEADERBOARD() AND NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB)
|
|
IF BJ_DO_RANK_PREDICTION(eJumpID, iAccuracy, fLandingDistance, iReward)
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
PRINTLN("reset on retry!")
|
|
BJ_RESET_ON_RETRY(bjArgs, bjUI_Leaderboard, bjUI, iMessagingFlags, targetDriverPed, onlookerArray, vehPlayer, targetVehicle, targetFlatbed, extraVehicle, vehNearby, curCheckpoint, nextCheckpoint, curGateBlip, nextGateBlip, iCurrentGate, iCurCheckpoint, iGatesHit, iNumPlayerLines, iAccuracy, eJumpID, gateCheckResult, savedLandingType, tEndDelayTimer, tmrLandingAlpha, vCameraVelocity, fLastScreenPosX, fLastScreenPosY, fLastGutterRotation, bHasLanded, bFlyaway, bDebugPass, bDebugFail, bDebugSkip, bLBToggle, bPlayerDiedLanding, bjCombatAvoidanceArea)
|
|
gameState = BJGAMESTATE_INIT
|
|
ELSE
|
|
//last chance write if we havent yet.
|
|
IF NOT bDebugPass AND NOT bDebugFail
|
|
IF CAN_WRITE_TO_LEADERBOARD() AND NOT BJ_GET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB)
|
|
IF BJ_DO_RANK_PREDICTION(eJumpID, iAccuracy, fLandingDistance, iReward)
|
|
BJ_SET_UI_FLAG(bjUI, BJUIFLAG_FINISHED_WRITING_TO_LB, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BJ_SCRIPT_FAIL(bRestartedFromDeath, bjArgs, bjUI_Leaderboard, launchVehicle, targetVehicle, extraVehicle, vehNearby, vehPlayer, conversationPedStruct, launchDriverPed, targetDriverPed, onlookerArray, iWindSound, iNumPlayerLines, curGateBlip, nextGateBlip, eJumpID, bjCombatAvoidanceArea, bDoesPlayerHaveOwnParachute)
|
|
ENDIF
|
|
CLEANUP_MG_BIG_MESSAGE(bigMessageUI)
|
|
ENDIF
|
|
|
|
gateCheckResult = BJGATECHECK_NONE
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDWHILE
|
|
ENDSCRIPT
|