2390 lines
73 KiB
Python
Executable File
2390 lines
73 KiB
Python
Executable File
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : magdemo2.sc //
|
|
// AUTHOR : Kenneth Ross //
|
|
// DESCRIPTION : //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// Do nothing in release mode
|
|
#IF IS_FINAL_BUILD
|
|
SCRIPT
|
|
ENDSCRIPT
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "commands_streaming.sch"
|
|
USING "commands_event.sch"
|
|
USING "commands_brains.sch"
|
|
USING "commands_cutscene.sch"
|
|
|
|
USING "player_ped_public.sch"
|
|
USING "selector_public.sch"
|
|
USING "respawn_location_private.sch"
|
|
USING "flow_reset_GAME.sch"
|
|
USING "script_blip.sch"
|
|
USING "chase_hint_cam.sch"
|
|
USING "select_mission_stage.sch"
|
|
USING "player_ped_scenes.sch"
|
|
|
|
USING "family_public.sch"
|
|
|
|
|
|
// Widget data
|
|
BOOL bKillScript
|
|
|
|
INT iJSkipStage
|
|
|
|
STRUCT Z_SKIP_DATA
|
|
INT iSelectedStage
|
|
INT iCurrentStage
|
|
BOOL bDoSkip
|
|
MissionStageMenuTextStruct SkipMenuStruct[4]
|
|
ENDSTRUCT
|
|
Z_SKIP_DATA sZSkipData
|
|
|
|
|
|
// Script data
|
|
ENUM MD_STAGE_ENUM
|
|
MD_STAGE_CREATE_INITIAL_SCENE = 0,
|
|
MD_STAGE_FRANKLIN_BASEJUMP,
|
|
MD_STAGE_TREVOR_DIVING,
|
|
MD_STAGE_MICHAEL_WALK_AROUND_CITY,
|
|
MD_STAGE_FRA2,
|
|
MD_STAGE_RESET,
|
|
MD_STAGE_CLEANUP
|
|
ENDENUM
|
|
MD_STAGE_ENUM eMDStage
|
|
|
|
INT iControl = 0
|
|
|
|
BOOL bHintCam_Set = FALSE
|
|
BOOL bHintCam_Required = FALSE
|
|
BOOL bHintCam_Active = FALSE
|
|
VECTOR vHintCamCoord
|
|
VECTOR vHintCamArea1,vHintCamArea2
|
|
FLOAT fHintCamArea
|
|
CHASE_HINT_CAM_STRUCT localChaseHintCamStruct
|
|
MODEL_NAMES eStoredModel
|
|
INT missionCandidateID = NO_CANDIDATE_ID
|
|
|
|
BOOL bSafeToProgress
|
|
BOOL bFBI4LoadSceneStart
|
|
INT iNewLoadSceneStage
|
|
|
|
BOOL bAudioScene_MikeWalk
|
|
BOOL bAudioScene_TrevWake
|
|
BOOL bAudioScene_TrevBoat
|
|
BOOL bAudioScene_TrevDive
|
|
BOOL bAudioGroup_Ranger
|
|
BOOL bAudioGroup_Tourbus
|
|
|
|
INT iNavBlockID
|
|
INT iWindSound = -1
|
|
|
|
BOOL bTriggerSpaceRangerDialogue = FALSE
|
|
|
|
// FRANKLIN STAGE
|
|
//BLIP_INDEX blipTitanPlane
|
|
VEHICLE_INDEX viBaseJumpTitan
|
|
PED_INDEX piBaseJumpTitanPilot
|
|
VEHICLE_INDEX viRanger
|
|
|
|
//MICHAEL STAGE
|
|
VEHICLE_INDEX viClosestCar, viClosestCarPrev
|
|
VEHICLE_INDEX viSuperD, viVoltic
|
|
PED_INDEX piClosestCarDriver
|
|
PED_INDEX piClosestCarDriver2
|
|
|
|
// TREVOR STAGE
|
|
BOOL bRelGroupSetup
|
|
REL_GROUP_HASH sharkGroup
|
|
BLIP_INDEX blipSharks[10]
|
|
INT iBlippedSharks
|
|
BLIP_INDEX blipBoat
|
|
BLIP_INDEX blipDiverPed
|
|
//BLIP_INDEX blipSharkLocation
|
|
//BLIP_INDEX blipWreckLocation
|
|
BLIP_INDEX blipWreckDiveLocation
|
|
PED_INDEX piDiverPed
|
|
PED_INDEX piDiverPed2
|
|
|
|
BOOL bTrevorScubaOutfitPreloaded
|
|
BOOL bUnderwaterMusic
|
|
INT iSoundID_Breathing = -1
|
|
|
|
SEQUENCE_INDEX seqDiverDelay
|
|
|
|
BOOL bModelRequest_Cargo
|
|
BOOL bModelRequest_Pilot
|
|
BOOL bModelRequest_Steve, bModelRequest_Franklin
|
|
BOOL bModelRequest_Driver
|
|
BOOL bAnimRequest_Dive, bAnimRequest_Swim
|
|
|
|
// FRANKLIN 2 STAGE
|
|
BOOL bReplayFRA2
|
|
TEXT_LABEL_15 sMissionName = "franklin2"
|
|
|
|
FUNC BOOL LOAD_MODEL_ASSET(MODEL_NAMES eModel, BOOL &bRequestFlag)
|
|
REQUEST_MODEL(eModel)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT bRequestFlag
|
|
PRINTLN("MAGDEMO: LOAD_MODEL_ASSET(", GET_MODEL_NAME_FOR_DEBUG(eModel), ")")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
bRequestFlag = TRUE
|
|
RETURN HAS_MODEL_LOADED(eModel)
|
|
ENDFUNC
|
|
PROC CLEANUP_MODEL_ASSET(MODEL_NAMES eModel, BOOL &bRequestFlag)
|
|
IF bRequestFlag
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN("MAGDEMO: CLEANUP_MODEL_ASSET(", GET_MODEL_NAME_FOR_DEBUG(eModel), ")")
|
|
#ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(eModel)
|
|
bRequestFlag = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL LOAD_ANIM_ASSET(STRING sAnimDict, BOOL &bRequestFlag)
|
|
REQUEST_ANIM_DICT(sAnimDict)
|
|
bRequestFlag = TRUE
|
|
RETURN HAS_ANIM_DICT_LOADED(sAnimDict)
|
|
ENDFUNC
|
|
PROC CLEANUP_ANIM_ASSET(STRING sAnimDict, BOOL &bRequestFlag)
|
|
IF bRequestFlag
|
|
REMOVE_ANIM_DICT(sAnimDict)
|
|
bRequestFlag = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL LOAD_AUDIO_ASSET(STRING sAudioBank, BOOL &bRequestFlag)
|
|
bRequestFlag = TRUE
|
|
RETURN REQUEST_SCRIPT_AUDIO_BANK(sAudioBank)
|
|
ENDFUNC
|
|
PROC CLEANUP_AUDIO_ASSET(STRING sAudioBank, BOOL &bRequestFlag)
|
|
IF bRequestFlag
|
|
RELEASE_NAMED_SCRIPT_AUDIO_BANK(sAudioBank)
|
|
bRequestFlag = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CLEAR_AUDIO_SCENES()
|
|
// Michael
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WALK_THROUGH_VINEWOOD")
|
|
STOP_AUDIO_SCENE("MAG_2_WALK_THROUGH_VINEWOOD")
|
|
bAudioScene_MikeWalk = FALSE
|
|
ENDIF
|
|
|
|
// Trevor
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
|
|
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
|
|
bAudioScene_TrevWake = FALSE
|
|
ENDIF
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
|
|
STOP_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
|
|
bAudioScene_TrevBoat = FALSE
|
|
ENDIF
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
|
|
STOP_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
|
|
bAudioScene_TrevDive = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CLEANUP_PREVIOUS_STAGE_ASSETS()
|
|
|
|
// Do a hard cleanup of all previous assets
|
|
// Note, this should only be called when we have switched cahracter and are processing the next stage.
|
|
|
|
/*
|
|
MD_STAGE_CREATE_INITIAL_SCENE = 0,
|
|
MD_STAGE_FRANKLIN_BASEJUMP,
|
|
MD_STAGE_TREVOR_DIVING,
|
|
MD_STAGE_MICHAEL_WALK_AROUND_CITY,
|
|
MD_STAGE_FRA2,
|
|
MD_STAGE_RESET,
|
|
MD_STAGE_CLEANUP
|
|
*/
|
|
|
|
// Cleanup Franklin stage
|
|
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_FRANKLIN_BASEJUMP)
|
|
// IF DOES_BLIP_EXIST(blipTitanPlane)
|
|
// REMOVE_BLIP(blipTitanPlane)
|
|
// ENDIF
|
|
IF DOES_ENTITY_EXIST(viBaseJumpTitan)
|
|
DELETE_VEHICLE(viBaseJumpTitan)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(piBaseJumpTitanPilot)
|
|
DELETE_PED(piBaseJumpTitanPilot)
|
|
ENDIF
|
|
|
|
REMOVE_VEHICLE_RECORDING(2, "MAGDEMOTITAN")
|
|
|
|
IF DOES_ENTITY_EXIST(viRanger)
|
|
AND IS_VEHICLE_DRIVEABLE(viRanger)
|
|
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(viRanger)
|
|
viRanger = NULL
|
|
ENDIF
|
|
|
|
// Cleanup wind sound when we jump
|
|
IF iWindSound != -1
|
|
PRINTLN("MAGDEMO: Stopping sound Helicopter_Wind")
|
|
STOP_SOUND(iWindSound)
|
|
iWindSound = -1
|
|
ENDIF
|
|
|
|
CLEANUP_MODEL_ASSET(CARGOPLANE, bModelRequest_Cargo)
|
|
CLEANUP_MODEL_ASSET(S_M_M_PILOT_01, bModelRequest_Pilot)
|
|
ENDIF
|
|
|
|
// Cleanup Trevor stage
|
|
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_MICHAEL_WALK_AROUND_CITY)
|
|
INT iBlip
|
|
REPEAT COUNT_OF(blipSharks) iBlip
|
|
IF DOES_BLIP_EXIST(blipSharks[iBlip])
|
|
REMOVE_BLIP(blipSharks[iBlip])
|
|
ENDIF
|
|
ENDREPEAT
|
|
iBlippedSharks = 0
|
|
|
|
IF DOES_ENTITY_EXIST(piDiverPed)
|
|
DELETE_PED(piDiverPed)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(piDiverPed2)
|
|
DELETE_PED(piDiverPed2)
|
|
ENDIF
|
|
IF DOES_BLIP_EXIST(blipDiverPed)
|
|
REMOVE_BLIP(blipDiverPed)
|
|
ENDIF
|
|
IF DOES_BLIP_EXIST(blipWreckDiveLocation)
|
|
REMOVE_BLIP(blipWreckDiveLocation)
|
|
ENDIF
|
|
IF DOES_BLIP_EXIST(blipBoat)
|
|
REMOVE_BLIP(blipBoat)
|
|
ENDIF
|
|
// IF DOES_BLIP_EXIST(blipSharkLocation)
|
|
// REMOVE_BLIP(blipSharkLocation)
|
|
// ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
|
|
STOP_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
|
|
bAudioScene_TrevDive = FALSE
|
|
ENDIF
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
|
|
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
|
|
bAudioScene_TrevWake = FALSE
|
|
ENDIF
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
|
|
STOP_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
|
|
bAudioScene_TrevBoat = FALSE
|
|
ENDIF
|
|
|
|
IF bTrevorScubaOutfitPreloaded
|
|
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
|
|
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
|
|
bTrevorScubaOutfitPreloaded = FALSE
|
|
ENDIF
|
|
|
|
IF bUnderwaterMusic
|
|
IF NOT HAS_SOUND_FINISHED(iSoundID_Breathing)
|
|
STOP_SOUND(iSoundID_Breathing)
|
|
ENDIF
|
|
TRIGGER_MUSIC_EVENT("MG2_STOP")
|
|
bUnderwaterMusic = FALSE
|
|
ENDIF
|
|
RELEASE_SCRIPT_AUDIO_BANK()
|
|
|
|
CLEANUP_MODEL_ASSET(IG_STEVEHAINS, bModelRequest_Steve)
|
|
|
|
CLEANUP_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
|
|
CLEANUP_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
|
|
ENDIF
|
|
|
|
// Cleanup Michael stage
|
|
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_FRA2)
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WALK_THROUGH_VINEWOOD")
|
|
STOP_AUDIO_SCENE("MAG_2_WALK_THROUGH_VINEWOOD")
|
|
bAudioScene_MikeWalk = FALSE
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(piClosestCarDriver)
|
|
DELETE_PED(piClosestCarDriver)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(piClosestCarDriver2)
|
|
DELETE_PED(piClosestCarDriver2)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(viSuperD)
|
|
DELETE_VEHICLE(viSuperD)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(SUPERD)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(viVoltic)
|
|
DELETE_VEHICLE(viVoltic)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(VOLTIC)
|
|
ENDIF
|
|
|
|
CLEANUP_MODEL_ASSET(PLAYER_ONE, bModelRequest_Franklin)
|
|
|
|
CLEANUP_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
|
|
|
|
bTriggerSpaceRangerDialogue = FALSE
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
PROC SET_HINT_CAM(VECTOR vCoord, VECTOR vArea1, VECTOR vArea2, FLOAT fWidth)
|
|
vHintCamCoord = vCoord
|
|
vHintCamArea1 = vArea1
|
|
vHintCamArea2 = vArea2
|
|
fHintCamArea = fWidth
|
|
bHintCam_Set = TRUE
|
|
ENDPROC
|
|
|
|
PROC CLEAR_HINT_CAM()
|
|
bHintCam_Set = FALSE
|
|
ENDPROC
|
|
|
|
PROC UPDATE_HINT_CAM()
|
|
|
|
bHintCam_Required = FALSE
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF bHintCam_Set
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vHintCamArea1, vHintCamArea2, fHintCamArea)
|
|
//AND IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_CIN_CAM)
|
|
bHintCam_Required = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bHintCam_Required
|
|
CONTROL_COORD_CHASE_HINT_CAM_ANY_MEANS(localChaseHintCamStruct, vHintCamCoord)
|
|
bHintCam_Active = TRUE
|
|
ELIF bHintCam_Active
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
|
bHintCam_Active = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
INT iExitBoatStage
|
|
INT iBoatSceneID
|
|
VECTOR vScenePos, vSceneRot
|
|
VEHICLE_INDEX viPlayerBoat
|
|
CAMERA_INDEX ciUnderwaterCam
|
|
|
|
PROC UPDATE_EXIT_BOAT_CAM()
|
|
|
|
SWITCH iExitBoatStage
|
|
CASE 0
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
|
|
START_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
|
|
bAudioScene_TrevDive = TRUE
|
|
ENDIF
|
|
iExitBoatStage = 7
|
|
|
|
ELIF eMDStage = MD_STAGE_TREVOR_DIVING
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
|
|
LOAD_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
|
|
LOAD_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
|
|
PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P2_SCUBA_WATER)
|
|
bTrevorScubaOutfitPreloaded = TRUE
|
|
iExitBoatStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
|
|
AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)
|
|
AND LOAD_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
|
|
AND LOAD_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
|
|
viPlayerBoat = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID(), TRUE)
|
|
iExitBoatStage++
|
|
SETTIMERA(0)
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF TIMERA() > 1250
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND DOES_ENTITY_EXIST(viPlayerBoat)
|
|
AND IS_VEHICLE_DRIVEABLE(viPlayerBoat)
|
|
|
|
//vBoatCoords = GET_ENTITY_COORDS(viPlayerBoat)
|
|
//fBoatHead = GET_ENTITY_HEADING(viPlayerBoat)
|
|
SET_ENTITY_COORDS(viPlayerBoat, <<3114.312, -401.92, 0.5>>)
|
|
SET_ENTITY_HEADING(viPlayerBoat, RAD_TO_DEG(0.840))
|
|
SET_BOAT_ANCHOR(viPlayerBoat, TRUE)
|
|
|
|
// Cut the cam to under the water
|
|
IF NOT DOES_CAM_EXIST(ciUnderwaterCam)
|
|
ciUnderwaterCam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
|
|
ENDIF
|
|
SET_CAM_ACTIVE(ciUnderwaterCam, TRUE)
|
|
SET_CAM_PARAMS(ciUnderwaterCam,<<3123.315186,-406.689240,-5.353999>>,<<19.894205,12.873194,79.032074>>,50.000000, 0)
|
|
SET_CAM_PARAMS(ciUnderwaterCam,<<3124.211670,-406.338837,-2.572298>>,<<1.050243,12.873191,83.351349>>,50.000000, 6000)
|
|
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
|
|
// Dress the player and put in dive position
|
|
SET_PED_MAX_TIME_UNDERWATER(PLAYER_PED_ID(), 100000000.00)
|
|
SET_PED_DIES_IN_WATER(PLAYER_PED_ID(), FALSE)
|
|
SET_ENABLE_SCUBA(player_ped_id(), true)
|
|
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P2_SCUBA_WATER, FALSE)
|
|
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
|
|
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
|
|
bTrevorScubaOutfitPreloaded = FALSE
|
|
|
|
vScenePos = <<0.0, 0.0, 0.0>>
|
|
vSceneRot = <<0.0, 0.0, 0.0>>
|
|
iBoatSceneID = CREATE_SYNCHRONIZED_SCENE(vScenePos, vSceneRot)
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iBoatSceneID, "missheistchem2", "Boat_Dive_Exit_Player", INSTANT_BLEND_IN, WALK_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, rbf_none, NORMAL_BLEND_IN)
|
|
ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(iBoatSceneID, viPlayerBoat, 0)
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
|
|
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
|
|
bAudioScene_TrevWake = FALSE
|
|
ENDIF
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
|
|
STOP_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
|
|
bAudioScene_TrevBoat = FALSE
|
|
ENDIF
|
|
|
|
iExitBoatStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBoatSceneID)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iBoatSceneID) >= 0.5
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
|
|
START_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
|
|
bAudioScene_TrevDive = TRUE
|
|
ENDIF
|
|
iExitBoatStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBoatSceneID)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iBoatSceneID) >= 0.8
|
|
// interp back to gameplay
|
|
|
|
|
|
//STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP(FALSE)
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, TRUE, DEFAULT_INTERP_TO_FROM_GAME)
|
|
|
|
//RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
IF DOES_CAM_EXIST(ciUnderwaterCam)
|
|
DESTROY_CAM(ciUnderwaterCam)
|
|
ENDIF
|
|
iExitBoatStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBoatSceneID)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iBoatSceneID) >= 0.99
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
SEQUENCE_INDEX seq
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_PLAY_ANIM(NULL, "SWIMMING@scuba", "dive_run", walk_BLEND_IN, walk_BLEND_OUT, 1000, AF_LOOPING | AF_NOT_INTERRUPTABLE | AF_FORCE_START)
|
|
TASK_FORCE_MOTION_STATE(null, enum_to_int(MS_diving_swim))
|
|
TASK_GO_STRAIGHT_TO_COORD(NULL, <<3159.7, -371.8, -13.0>>, PEDMOVE_RUN, -1)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
|
|
SETTIMERA(0)
|
|
CLEANUP_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
|
|
CLEANUP_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
|
|
iExitBoatStage++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF TIMERA() > 3500
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
iExitBoatStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 7
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
|
|
STOP_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
|
|
bAudioScene_TrevDive = FALSE
|
|
ENDIF
|
|
iExitBoatStage = 0
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF iExitBoatStage > 2
|
|
AND iExitBoatStage < 5
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_MAGDEMO_SCENE()
|
|
|
|
// IMPORTANT
|
|
// These need to be in sync with the scene setup in PRIVATE_SetClockTimeForSwitchScene()
|
|
|
|
SWITCH eMDStage
|
|
CASE MD_STAGE_CREATE_INITIAL_SCENE
|
|
CASE MD_STAGE_FRANKLIN_BASEJUMP
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
UNLOAD_ALL_CLOUD_HATS()
|
|
SET_CLOCK_TIME(7, 0, 0)
|
|
g_bMagDemoBJStarted = TRUE
|
|
BREAK
|
|
CASE MD_STAGE_TREVOR_DIVING
|
|
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
|
|
UNLOAD_ALL_CLOUD_HATS()
|
|
SET_CLOCK_TIME(18, 0, 0)
|
|
BREAK
|
|
CASE MD_STAGE_MICHAEL_WALK_AROUND_CITY
|
|
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
|
|
UNLOAD_ALL_CLOUD_HATS()
|
|
SET_CLOCK_TIME(22, 0, 0)
|
|
BREAK
|
|
CASE MD_STAGE_FRA2
|
|
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
|
|
UNLOAD_ALL_CLOUD_HATS()
|
|
|
|
IF g_iMagDemoVariation = 1
|
|
SET_CLOCK_TIME(22, 0, 0)
|
|
ELSE
|
|
SET_CLOCK_TIME(18, 0, 0)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
PAUSE_CLOCK(TRUE)
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Ensure the player is invincible and will not fly through windscreens
|
|
PROC UPDATE_PLAYER_PED_STATES()
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
eStoredModel = DUMMY_MODEL_FOR_SCRIPT
|
|
ELIF GET_ENTITY_MODEL(PLAYER_PED_ID()) != eStoredModel
|
|
SET_ENTITY_PROOFS(PLAYER_PED_ID(), TRUE, TRUE, TRUE, TRUE, TRUE)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen, FALSE)
|
|
SET_WANTED_LEVEL_MULTIPLIER(0)
|
|
SET_MAX_WANTED_LEVEL(0)
|
|
|
|
eStoredModel = GET_ENTITY_MODEL(PLAYER_PED_ID())
|
|
|
|
PRINTLN("MAGDEMO: UPDATE_PLAYER_PED_STATES() - States updated")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_MD_STAGE(MD_STAGE_ENUM eStage)
|
|
|
|
SWITCH eStage
|
|
CASE MD_STAGE_CREATE_INITIAL_SCENE PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)") BREAK
|
|
CASE MD_STAGE_FRANKLIN_BASEJUMP PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_FRANKLIN_BASEJUMP)") BREAK
|
|
CASE MD_STAGE_MICHAEL_WALK_AROUND_CITY PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_MICHAEL_WALK_AROUND_CITY)") BREAK
|
|
CASE MD_STAGE_TREVOR_DIVING PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_TREVOR_DIVING)") BREAK
|
|
CASE MD_STAGE_FRA2 PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_FRA2)") BREAK
|
|
CASE MD_STAGE_RESET PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_RESET)") BREAK
|
|
CASE MD_STAGE_CLEANUP PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_CLEANUP)") BREAK
|
|
ENDSWITCH
|
|
|
|
eMDStage = eStage
|
|
iControl = 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
iJSkipStage = 0
|
|
|
|
// Set the new Z-Skip stage
|
|
IF eStage = MD_STAGE_CREATE_INITIAL_SCENE
|
|
OR eStage = MD_STAGE_FRANKLIN_BASEJUMP
|
|
sZSkipData.iCurrentStage = 0 // "Franklin in helicopter"
|
|
ELIF eStage = MD_STAGE_TREVOR_DIVING
|
|
sZSkipData.iCurrentStage = 1 // "Trevor diving"
|
|
ELIF eStage = MD_STAGE_MICHAEL_WALK_AROUND_CITY
|
|
sZSkipData.iCurrentStage = 2 // "Michael walking around city"
|
|
ELIF eStage = MD_STAGE_FRA2
|
|
sZSkipData.iCurrentStage = 3 // "FRA2"
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MAGDEMO_SAFE_TO_PROCEED()
|
|
|
|
IF NOT IS_PAUSE_MENU_ACTIVE()
|
|
AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC SET_INITIAL_MAGDEMO_GAME_STATE()
|
|
|
|
g_bMagDemoActive = TRUE
|
|
|
|
bReplayFRA2 = FALSE
|
|
|
|
g_bMagDemoBJReady = FALSE
|
|
g_bMagDemoBJStarted = FALSE
|
|
g_bMagDemoREPapDone = FALSE
|
|
|
|
g_bUseCharacterFilters = TRUE
|
|
UPDATE_PLAYER_PED_TIMECYCLE_MODIFIER()
|
|
|
|
g_savedGlobals.sFlow.isGameflowActive = TRUE
|
|
RESET_GAMEFLOW()
|
|
g_savedGlobals.sFlow.isGameflowActive = FALSE
|
|
g_bTaxiHailingIsDisabled = TRUE
|
|
|
|
g_savedGlobals.sRandomEventData.iREVariationComplete[RE_PAPARAZZI] = 0
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ALLOW_RANDOM_EVENTS, TRUE)
|
|
|
|
// Unlock savehouses
|
|
Set_Savehouse_Respawn_Available(SAVEHOUSE_MICHAEL_BH, TRUE)
|
|
Set_Savehouse_Respawn_Available(SAVEHOUSE_FRANKLIN_SC, TRUE)
|
|
Set_Savehouse_Respawn_Available(SAVEHOUSE_TREVOR_CS, TRUE)
|
|
|
|
// Set characters we can switch to
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, FALSE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, FALSE)
|
|
|
|
|
|
// Update all player stats
|
|
SETUP_DEFAULT_PLAYER_STATS()
|
|
UPDATE_ALL_PLAYER_STAT_SETTINGS(GET_CURRENT_PLAYER_PED_ENUM())
|
|
|
|
REACTIVATE_ALL_OBJECT_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
|
|
REACTIVATE_ALL_WORLD_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
|
|
|
|
CLEAR_AUDIO_SCENES()
|
|
|
|
SET_DEBUG_CAM_ACTIVE(FALSE)
|
|
|
|
SET_RANDOM_TRAINS(FALSE) //740410
|
|
|
|
SCRIPT_OVERRIDES_WIND_TYPES(FALSE, "", "")
|
|
|
|
|
|
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(TRUE)
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
|
|
FORCE_CLEANUP(FORCE_CLEANUP_FLAG_MAGDEMO)
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC DO_STAGE_CREATE_INITIAL_SCENE()
|
|
|
|
// Keep screen faded out until we display prompt
|
|
IF iControl < 6
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
IF NOT IS_SCREEN_FADING_OUT()
|
|
DO_SCREEN_FADE_OUT(2500)
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("MISSION_FAILED_SCENE")
|
|
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH iControl
|
|
CASE 0
|
|
IF IS_SCREEN_FADED_OUT()
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("initial")) = 0 // Wait for all the controller scripts to be intialised before we proceed (required for runscript command line param)
|
|
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
CLEAR_AREA(<<-1368.1553, 4299.1650, 1.4856>>, 250.0, TRUE, FALSE)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1368.1553, 4299.1650, 1.4856>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 61.0253)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
VECTOR vDir
|
|
vDir = NORMALISE_VECTOR(GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(<<-1368.1553, 4299.1650, 1.4856>>, 61.0253, <<0,1,0>>) - <<-1368.1553, 4299.1650, 1.4856>>)
|
|
NEW_LOAD_SCENE_START(<<-1368.1553, 4299.1650, 1.4856>>, vDir, 1800.0)
|
|
SETTIMERA(0)
|
|
iControl++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF IS_NEW_LOAD_SCENE_ACTIVE()
|
|
IF IS_NEW_LOAD_SCENE_LOADED()
|
|
OR TIMERA() > 20000
|
|
NEW_LOAD_SCENE_STOP()
|
|
iControl++
|
|
ENDIF
|
|
ELSE
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
SET_INITIAL_MAGDEMO_GAME_STATE()
|
|
iControl++
|
|
BREAK
|
|
CASE 3
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND SET_CURRENT_SELECTOR_PED(SELECTOR_PED_FRANKLIN, TRUE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID())
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_TORSO, 11, 2)
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_FEET, 11, 0)
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_LEG, 8, 0) //#1271807
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL, 14, 0)
|
|
CLEAR_ALL_PED_PROPS(PLAYER_PED_ID())
|
|
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
REQUEST_SCRIPT("bj")
|
|
IF HAS_SCRIPT_LOADED("bj")
|
|
IF REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_MINIGAME, TRUE) = MCRET_ACCEPTED
|
|
BJ_LAUNCHER_ARGS bjLauncherArgs
|
|
g_savedGlobals.sBasejumpData.iLaunchRank = 10 // The 1K
|
|
START_NEW_SCRIPT_WITH_ARGS("bj", bjLauncherArgs, SIZE_OF(bjLauncherArgs), MISSION_STACK_SIZE)
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED("bj")
|
|
iControl++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
// Wait for basejumping script to give us the green light
|
|
IF g_bMagDemoBJReady
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
DO_SCREEN_FADE_IN(0)
|
|
ENDIF
|
|
DRAW_RECT(0.5, 0.5, 1.0, 1.0, 0, 0, 0, 255)
|
|
|
|
IF IS_SCREEN_FADED_IN()
|
|
|
|
SET_TEXT_SCALE(0.5, 0.5)
|
|
SET_TEXT_CENTRE(TRUE)
|
|
DISPLAY_TEXT(0.5, 0.4, "MD_TITLE_1")
|
|
|
|
IF IS_MAGDEMO_SAFE_TO_PROCEED()
|
|
|
|
SET_MAGDEMO_SCENE()
|
|
|
|
DO_SCREEN_FADE_OUT(0)
|
|
DO_SCREEN_FADE_IN(1000)
|
|
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
|
|
PRINTLN("MAGDEMO: Playing sound Helicopter_Wind")
|
|
iWindSound = GET_SOUND_ID()
|
|
PLAY_SOUND_FRONTEND(iWindSound, "Helicopter_Wind", "BASEJUMPS_SOUNDS")
|
|
|
|
SET_MD_STAGE(MD_STAGE_FRANKLIN_BASEJUMP)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC DO_STAGE_STAGE_FRANKLIN_BASEJUMP()
|
|
|
|
// Add park ranger to the mix group when it's available
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF NOT DOES_ENTITY_EXIST(viRanger)
|
|
VEHICLE_INDEX nearbyVehs[5]
|
|
INT iNearbyVehs = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), nearbyVehs)
|
|
INT iVeh
|
|
REPEAT iNearbyVehs iVeh
|
|
IF DOES_ENTITY_EXIST(nearbyVehs[iVeh])
|
|
AND IS_VEHICLE_DRIVEABLE(nearbyVehs[iVeh])
|
|
AND GET_ENTITY_MODEL(nearbyVehs[iVeh]) = PRANGER
|
|
ADD_ENTITY_TO_AUDIO_MIX_GROUP(nearbyVehs[iVeh], "MAG_2_RANGER_CAR_GROUP")
|
|
viRanger = nearbyVehs[iVeh]
|
|
|
|
PRINTLN("MAGDEMO: viRanger added to MAG_2_RANGER_CAR_GROUP (GET_PED_NEARBY_VEHICLES)")
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(viRanger)
|
|
VEHICLE_INDEX nearbyVeh
|
|
nearbyVeh = GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100.0, PRANGER, VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_BOATS_ONLY)
|
|
|
|
IF DOES_ENTITY_EXIST(nearbyVeh)
|
|
AND IS_VEHICLE_DRIVEABLE(nearbyVeh)
|
|
AND GET_ENTITY_MODEL(nearbyVeh) = PRANGER
|
|
ADD_ENTITY_TO_AUDIO_MIX_GROUP(nearbyVeh, "MAG_2_RANGER_CAR_GROUP")
|
|
viRanger = nearbyVeh
|
|
|
|
PRINTLN("MAGDEMO: viRanger added to MAG_2_RANGER_CAR_GROUP (GET_CLOSEST_VEHICLE)")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Cleanup wind sound when we jump
|
|
IF iWindSound != -1
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)
|
|
PRINTLN("MAGDEMO: Stopping sound Helicopter_Wind")
|
|
STOP_SOUND(iWindSound)
|
|
iWindSound = -1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH iControl
|
|
CASE 0
|
|
|
|
// Set up - TODO
|
|
|
|
// Set characters we can switch to
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, FALSE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE)
|
|
|
|
REQUEST_VEHICLE_RECORDING(2, "MAGDEMOTITAN")
|
|
|
|
LOAD_MODEL_ASSET(CARGOPLANE, bModelRequest_Cargo)
|
|
LOAD_MODEL_ASSET(S_M_M_PILOT_01, bModelRequest_Pilot)
|
|
iControl++
|
|
BREAK
|
|
|
|
CASE 1
|
|
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(2, "MAGDEMOTITAN")
|
|
AND HAS_MODEL_LOADED(CARGOPLANE)
|
|
AND HAS_MODEL_LOADED(S_M_M_PILOT_01)
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF IS_PED_IN_PARACHUTE_FREE_FALL(PLAYER_PED_ID())
|
|
|
|
viBaseJumpTitan = CREATE_VEHICLE(CARGOPLANE, GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(2, 0.0, "MAGDEMOTITAN"))
|
|
piBaseJumpTitanPilot = CREATE_PED_INSIDE_VEHICLE(viBaseJumpTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(piBaseJumpTitanPilot, TRUE)
|
|
|
|
START_PLAYBACK_RECORDED_VEHICLE(viBaseJumpTitan, 2, "MAGDEMOTITAN")
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(viBaseJumpTitan, 26000.0)
|
|
SET_ENTITY_LOD_DIST(viBaseJumpTitan, 4000)
|
|
SET_VEHICLE_LOD_MULTIPLIER(viBaseJumpTitan, 100.0)
|
|
SET_VEHICLE_ENGINE_ON(viBaseJumpTitan, TRUE, TRUE)
|
|
|
|
// blipTitanPlane = CREATE_BLIP_FOR_VEHICLE(viBaseJumpTitan, FALSE, TRUE)
|
|
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 3
|
|
// Wait for the basejump script to end
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("bj")) = 0
|
|
Mission_Over(missionCandidateID)
|
|
missionCandidateID = NO_CANDIDATE_ID
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
// Wait for player to switch to Michael
|
|
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_TREVOR)
|
|
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
// IF DOES_BLIP_EXIST(blipTitanPlane)
|
|
// REMOVE_BLIP(blipTitanPlane)
|
|
// ENDIF
|
|
IF DOES_ENTITY_EXIST(viBaseJumpTitan)
|
|
DELETE_VEHICLE(viBaseJumpTitan)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(piBaseJumpTitanPilot)
|
|
DELETE_PED(piBaseJumpTitanPilot)
|
|
ENDIF
|
|
|
|
REMOVE_VEHICLE_RECORDING(2, "MAGDEMOTITAN")
|
|
|
|
CLEANUP_MODEL_ASSET(CARGOPLANE, bModelRequest_Cargo)
|
|
CLEANUP_MODEL_ASSET(S_M_M_PILOT_01, bModelRequest_Pilot)
|
|
|
|
CLEAR_HINT_CAM()
|
|
SET_MD_STAGE(MD_STAGE_TREVOR_DIVING)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF iControl = 3
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1368.1553, 4299.1650, 1.4856>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 61.0253)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ELIF iControl = 4
|
|
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_TREVOR) //, PR_TYPE_AMBIENT)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
VECTOR vBlipDiveLocation = <<3096.9629, -401.3707, 0.0>>
|
|
//VECTOR vBlipWreckLocation = <<3181.4639, -345.3424, -31.1768>>
|
|
BOOL bBoatBlipCreated
|
|
BOOL bSharksSpotted = FALSE
|
|
|
|
PROC DO_STAGE_TREVOR_DIVING()
|
|
|
|
// Blip the boat then the dive location
|
|
IF NOT DOES_BLIP_EXIST(blipBoat)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
|
|
AND NOT bBoatBlipCreated
|
|
|
|
PED_VEH_DATA_STRUCT sVehData
|
|
VECTOR vTemp
|
|
FLOAT fTemp
|
|
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(CHAR_TREVOR, PR_SCENE_T_NAKED_ISLAND, sVehData, vTemp, fTemp, vTemp, fTemp)
|
|
VEHICLE_INDEX nearbyVehs[5]
|
|
INT iNearbyVehs = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), nearbyVehs)
|
|
INT iVeh
|
|
REPEAT iNearbyVehs iVeh
|
|
IF DOES_ENTITY_EXIST(nearbyVehs[iVeh])
|
|
AND IS_VEHICLE_DRIVEABLE(nearbyVehs[iVeh])
|
|
AND GET_ENTITY_MODEL(nearbyVehs[iVeh]) = sVehData.model
|
|
|
|
blipBoat = CREATE_BLIP_FOR_VEHICLE(nearbyVehs[iVeh], FALSE, FALSE)
|
|
bBoatBlipCreated = TRUE
|
|
SET_VEHICLE_RADIO_ENABLED(nearbyVehs[iVeh], FALSE)
|
|
SET_VEH_RADIO_STATION(nearbyVehs[iVeh], "RADIO_06_COUNTRY")
|
|
SET_CUSTOM_RADIO_TRACK_LIST("RADIO_06_COUNTRY", "MAGDEMO2_RADIO_DINGHY", TRUE)
|
|
iVeh = iNearbyVehs+1//Bail
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
ELSE
|
|
IF IS_PED_INJURED(PLAYER_PED_ID())
|
|
OR IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
|
|
START_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
|
|
bAudioScene_TrevBoat = TRUE
|
|
ENDIF
|
|
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
|
|
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
|
|
bAudioScene_TrevWake = FALSE
|
|
ENDIF
|
|
|
|
|
|
IF DOES_BLIP_EXIST(blipBoat)
|
|
|
|
REMOVE_BLIP(blipBoat)
|
|
|
|
VEHICLE_INDEX vehID = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
IF DOES_ENTITY_EXIST(vehID)
|
|
AND IS_VEHICLE_DRIVEABLE(vehID)
|
|
SET_VEHICLE_RADIO_ENABLED(vehID, TRUE)
|
|
ENDIF
|
|
|
|
blipWreckDiveLocation = CREATE_BLIP_FOR_COORD(vBlipDiveLocation)
|
|
SET_BLIP_ROUTE(blipWreckDiveLocation, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Blip the sharks
|
|
IF eMDStage = MD_STAGE_TREVOR_DIVING
|
|
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS()
|
|
IF NOT bRelGroupSetup
|
|
TEXT_LABEL_15 sRelGroup
|
|
sRelGroup = "SHARKPET"
|
|
ADD_RELATIONSHIP_GROUP(sRelGroup, sharkGroup)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, sharkGroup)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, sharkGroup, RELGROUPHASH_PLAYER)
|
|
bRelGroupSetup = TRUE
|
|
ENDIF
|
|
|
|
// Make all sharks friendly
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
PED_INDEX nearbyPeds[10]
|
|
INT iNearbyPeds = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), nearbyPeds)
|
|
INT iPed
|
|
REPEAT iNearbyPeds iPed
|
|
IF DOES_ENTITY_EXIST(nearbyPeds[iPed])
|
|
AND NOT IS_PED_INJURED(nearbyPeds[iPed])
|
|
IF GET_ENTITY_MODEL(nearbyPeds[iPed]) = A_C_SHARKTIGER
|
|
AND GET_PED_RELATIONSHIP_GROUP_HASH(nearbyPeds[iPed]) != sharkGroup
|
|
AND IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
|
|
//AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), nearbyPeds[iPed]) < 150.0
|
|
PRINTLN("MAGDEMO: Processing shark, ped_index=", NATIVE_TO_INT(nearbyPeds[iPed]))
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(nearbyPeds[iPed], sharkGroup)
|
|
|
|
IF iBlippedSharks < COUNT_OF(blipSharks)-1
|
|
blipSharks[iBlippedSharks] = CREATE_BLIP_FOR_PED(nearbyPeds[iPed], FALSE)
|
|
SET_BLIP_ROUTE(blipSharks[iBlippedSharks], FALSE)
|
|
iBlippedSharks++
|
|
ENDIF
|
|
|
|
// IF DOES_BLIP_EXIST(blipSharkLocation)
|
|
// REMOVE_BLIP(blipSharkLocation)
|
|
// ENDIF
|
|
IF DOES_BLIP_EXIST(blipDiverPed)
|
|
REMOVE_BLIP(blipDiverPed)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bSharksSpotted = FALSE
|
|
IF IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), nearbyPeds[iPed]) < 30.0
|
|
IF GET_ENTITY_MODEL(nearbyPeds[iPed]) = A_C_SHARKTIGER
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(PLAYER_PED_ID(), "DROWNING","WAVELOAD_PAIN_TREVOR", SPEECH_PARAMS_FORCE_FRONTEND)
|
|
bSharksSpotted = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDREPEAT
|
|
ENDIF
|
|
ELSE
|
|
IF iBlippedSharks > 0
|
|
INT iBlip
|
|
REPEAT COUNT_OF(blipSharks) iBlip
|
|
IF DOES_BLIP_EXIST(blipSharks[iBlip])
|
|
REMOVE_BLIP(blipSharks[iBlip])
|
|
ENDIF
|
|
ENDREPEAT
|
|
iBlippedSharks = 0
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Manage music
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("Underwater")
|
|
IF IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
|
|
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
IF NOT bUnderwaterMusic
|
|
TRIGGER_MUSIC_EVENT("MG2_DIVE")
|
|
iSoundID_Breathing = GET_SOUND_ID()
|
|
PLAY_SOUND_FROM_ENTITY(iSoundID_Breathing, "UW_Rebreather", PLAYER_PED_ID())
|
|
bUnderwaterMusic = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF bUnderwaterMusic
|
|
IF NOT HAS_SOUND_FINISHED(iSoundID_Breathing)
|
|
STOP_SOUND(iSoundID_Breathing)
|
|
ENDIF
|
|
TRIGGER_MUSIC_EVENT("MG2_STOP")
|
|
bUnderwaterMusic = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Hold the end of the switch spline
|
|
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
IF bTrevorScubaOutfitPreloaded
|
|
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
|
|
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
|
|
bTrevorScubaOutfitPreloaded = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
VECTOR vStartPosition
|
|
SWITCH iControl
|
|
CASE 0
|
|
|
|
IF NOT DOES_BLIP_EXIST(blipBoat)
|
|
bBoatBlipCreated = FALSE
|
|
ENDIF
|
|
|
|
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_THIRD_PERSON_MEDIUM)
|
|
|
|
CLEANUP_PREVIOUS_STAGE_ASSETS()
|
|
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
|
|
START_AUDIO_SCENE("MAG_2_WAKE_UP")
|
|
bAudioScene_TrevWake = TRUE
|
|
ENDIF
|
|
|
|
// Set characters we can switch to
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, FALSE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
// We're now going to give the outfit in script
|
|
SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE(PLAYER_ID(), FALSE)
|
|
ENDIF
|
|
|
|
SET_PED_MAX_TIME_UNDERWATER(PLAYER_PED_ID(), 1000000.0)
|
|
SET_PED_DIES_IN_WATER(PLAYER_PED_ID(), FALSE)
|
|
SET_ENABLE_SCUBA(PLAYER_PED_ID(), TRUE)
|
|
|
|
//Request assets
|
|
REQUEST_WAYPOINT_RECORDING("MAGDEMODIVE2")
|
|
REQUEST_WAYPOINT_RECORDING("MAGDEMODIVE3")
|
|
LOAD_MODEL_ASSET(IG_STEVEHAINS, bModelRequest_Steve)
|
|
REQUEST_SCRIPT_AUDIO_BANK("Underwater")
|
|
|
|
bSharksSpotted = FALSE
|
|
|
|
iControl++
|
|
BREAK
|
|
|
|
CASE 1
|
|
//Wait for assets to load
|
|
IF GET_IS_WAYPOINT_RECORDING_LOADED("MAGDEMODIVE3")
|
|
AND GET_IS_WAYPOINT_RECORDING_LOADED("MAGDEMODIVE2")
|
|
AND HAS_MODEL_LOADED(IG_STEVEHAINS)
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 2
|
|
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vBlipDiveLocation, <<30.0, 30.0, 30.0>>)
|
|
AND IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
|
|
IF DOES_BLIP_EXIST(blipWreckDiveLocation)
|
|
REMOVE_BLIP(blipWreckDiveLocation)
|
|
// blipWreckLocation = CREATE_BLIP_FOR_COORD(vBlipWreckLocation)
|
|
// SET_BLIP_COLOUR(blipWreckLocation, BLIP_COLOUR_GREEN)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//When trevor gets close to the boatwreck spawn the diver.
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<3158.247803,-222.377258,-51.817005>>, <<3197.752197,-433.242889,-3.360249>>, 131.000000, FALSE, FALSE)
|
|
AND NOT IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
|
|
AND IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
|
|
AND NOT DOES_BLIP_EXIST(blipWreckDiveLocation)
|
|
|
|
// IF DOES_BLIP_EXIST(blipWreckLocation)
|
|
// REMOVE_BLIP(blipWreckLocation)
|
|
// ENDIF
|
|
|
|
WAYPOINT_RECORDING_GET_COORD("MAGDEMODIVE3", 7, vStartPosition)
|
|
piDiverPed = CREATE_PED(PEDTYPE_MISSION, IG_STEVEHAINS, vStartPosition)
|
|
|
|
WAYPOINT_RECORDING_GET_COORD("MAGDEMODIVE2", 0, vStartPosition)
|
|
piDiverPed2 = CREATE_PED(PEDTYPE_MISSION, IG_STEVEHAINS, vStartPosition)
|
|
|
|
blipDiverPed = CREATE_BLIP_FOR_PED(piDiverPed, FALSE)
|
|
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,2), 1, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,3), 2, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,6), 1, 0, 0) //(feet)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,7), 0, 0, 0) //(teef)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,8), 1, 0, 0) //(accs)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,9), 1, 0, 0) //(task)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,10), 0, 0, 0) //(decl)
|
|
SET_PED_PROP_INDEX(piDiverPed, INT_TO_ENUM(PED_PROP_POSITION,1), 1, 0)
|
|
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,2), 1, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,3), 2, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,6), 1, 0, 0) //(feet)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,7), 0, 0, 0) //(teef)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,8), 1, 0, 0) //(accs)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,9), 1, 0, 0) //(task)
|
|
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,10), 0, 0, 0) //(decl)
|
|
SET_PED_PROP_INDEX(piDiverPed2, INT_TO_ENUM(PED_PROP_POSITION,1), 1, 0)
|
|
|
|
SET_PED_MAX_TIME_UNDERWATER(piDiverPed, 1000000.0)
|
|
SET_PED_DIES_IN_WATER(piDiverPed, FALSE)
|
|
SET_ENABLE_SCUBA(piDiverPed, TRUE)
|
|
SET_PED_STEERS_AROUND_PEDS(piDiverPed, FALSE)
|
|
SET_PED_NAME_DEBUG(piDiverPed, "piDiverPed")
|
|
TASK_FOLLOW_WAYPOINT_RECORDING(piDiverPed, "MAGDEMODIVE3", 7, EWAYPOINT_USE_TIGHTER_TURN_SETTINGS)
|
|
|
|
SET_PED_MAX_TIME_UNDERWATER(piDiverPed2, 1000000.0)
|
|
SET_PED_DIES_IN_WATER(piDiverPed2, FALSE)
|
|
SET_ENABLE_SCUBA(piDiverPed2, TRUE)
|
|
SET_PED_STEERS_AROUND_PEDS(piDiverPed2, FALSE)
|
|
SET_PED_STEERS_AROUND_PEDS(piDiverPed2, FALSE)
|
|
SET_PED_NAME_DEBUG(piDiverPed2, "piDiverPed2")
|
|
|
|
OPEN_SEQUENCE_TASK(seqDiverDelay)
|
|
TASK_PAUSE(NULL, 500)
|
|
TASK_FOLLOW_WAYPOINT_RECORDING(NULL, "MAGDEMODIVE2", 0, EWAYPOINT_USE_TIGHTER_TURN_SETTINGS)
|
|
CLOSE_SEQUENCE_TASK(seqDiverDelay)
|
|
TASK_PERFORM_SEQUENCE(piDiverPed2, seqDiverDelay)
|
|
CLEAR_SEQUENCE_TASK(seqDiverDelay)
|
|
|
|
iControl++
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
RESET_PLAYER_STAMINA(PLAYER_ID())
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<3161.642578,-298.652344,-15.723236>>, <<3096.343994,-167.582458,-29.656219>>, 46.750000)
|
|
|
|
IF iBlippedSharks = 0
|
|
// blipSharkLocation = CREATE_BLIP_FOR_COORD(<<3114.1111, -190.8658, -31.0156>>)
|
|
// SET_BLIP_COLOUR(blipSharkLocation, BLIP_COLOUR_GREEN)
|
|
|
|
IF DOES_BLIP_EXIST(blipDiverPed)
|
|
REMOVE_BLIP(blipDiverPed)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 4
|
|
|
|
RESET_PLAYER_STAMINA(PLAYER_ID())
|
|
|
|
//Cleanup
|
|
IF NOT IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
|
|
IF DOES_ENTITY_EXIST(piDiverPed)
|
|
DELETE_PED(piDiverPed)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(piDiverPed2)
|
|
DELETE_PED(piDiverPed2)
|
|
ENDIF
|
|
IF DOES_BLIP_EXIST(blipDiverPed)
|
|
REMOVE_BLIP(blipDiverPed)
|
|
ENDIF
|
|
// IF DOES_BLIP_EXIST(blipWreckLocation)
|
|
// REMOVE_BLIP(blipWreckLocation)
|
|
// ENDIF
|
|
IF DOES_BLIP_EXIST(blipBoat)
|
|
REMOVE_BLIP(blipBoat)
|
|
ENDIF
|
|
// IF DOES_BLIP_EXIST(blipSharkLocation)
|
|
// REMOVE_BLIP(blipSharkLocation)
|
|
// ENDIF
|
|
|
|
CLEANUP_MODEL_ASSET(IG_STEVEHAINS, bModelRequest_Steve)
|
|
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 5
|
|
// nothing to do.
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Wait for player to switch to Michael
|
|
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_MICHAEL)
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
CLEAR_HINT_CAM()
|
|
SET_MD_STAGE(MD_STAGE_MICHAEL_WALK_AROUND_CITY)
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
VECTOR vWarpCoords[3]
|
|
FLOAT fHeading[3]
|
|
|
|
// Next to boat
|
|
vWarpCoords[0] = <<2793.1936, -1433.4767, -0.5368>>
|
|
fHeading[0] = 155.1430
|
|
// Above sunken ship
|
|
vWarpCoords[1] = <<3268.8042, -437.3923, 5.5>>
|
|
fHeading[1] = 353.9825
|
|
// In water
|
|
vWarpCoords[2] = <<3220.5657, -357.8888, -36.1978>>
|
|
fHeading[2] = 253.1632
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF iJSkipStage = 0
|
|
IF IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
|
|
iJSkipStage++
|
|
ENDIF
|
|
ELIF iJSkipStage = 1
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWarpCoords[iJSkipStage], FALSE) < 10.0
|
|
OR NOT IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
|
|
iJSkipStage++
|
|
ENDIF
|
|
ELIF iJSkipStage = 2
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWarpCoords[iJSkipStage]) < 10.0
|
|
iJSkipStage++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF iJSkipStage = 0
|
|
VEHICLE_INDEX tempVeh = GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100.0, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_BOATS_ONLY)
|
|
IF DOES_ENTITY_EXIST(tempVeh)
|
|
AND IS_VEHICLE_DRIVEABLE(tempVeh)
|
|
AND IS_THIS_MODEL_A_BOAT(GET_ENTITY_MODEL(tempVeh))
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), tempVeh, VS_DRIVER)
|
|
ENDIF
|
|
ELIF iJSkipStage = 1
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
VEHICLE_INDEX tempVeh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
IF DOES_ENTITY_EXIST(tempVeh)
|
|
AND IS_VEHICLE_DRIVEABLE(tempVeh)
|
|
SET_ENTITY_COORDS(tempVeh, vWarpCoords[iJSkipStage], TRUE, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(tempVeh)
|
|
SET_ENTITY_HEADING(tempVeh, fHeading[iJSkipStage])
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ENDIF
|
|
ENDIF
|
|
ELIF iJSkipStage = 2
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoords[iJSkipStage])
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeading[iJSkipStage])
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ELSE
|
|
iControl = 5
|
|
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_MICHAEL) //, PR_TYPE_AMBIENT)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
//BLIP_INDEX blipClosestCar
|
|
|
|
PROC DO_STAGE_MICHAEL_WALK_AROUND_CITY()
|
|
|
|
// Add park ranger to the mix group when it's available
|
|
IF bTriggerSpaceRangerDialogue
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
PED_INDEX nearbyPeds[10]
|
|
INT iNearbyPeds = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), nearbyPeds)
|
|
INT iPed
|
|
REPEAT iNearbyPeds iPed
|
|
IF DOES_ENTITY_EXIST(nearbyPeds[iPed])
|
|
AND NOT IS_PED_INJURED(nearbyPeds[iPed])
|
|
IF GET_ENTITY_MODEL(nearbyPeds[iPed]) = U_M_Y_RSRanger_01
|
|
AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), nearbyPeds[iPed]) < 5.0
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(nearbyPeds[iPed], "PBSH_AXAA", "SPACERANGER", "SPEECH_PARAMS_FORCE")
|
|
bTriggerSpaceRangerDialogue = FALSE
|
|
iPed = iNearbyPeds+1// Bail
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
SWITCH iControl
|
|
CASE 0
|
|
|
|
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_THIRD_PERSON_NEAR)
|
|
|
|
CLEANUP_PREVIOUS_STAGE_ASSETS()
|
|
|
|
bSafeToProgress = FALSE
|
|
|
|
// Set characters we can switch to
|
|
IF g_iMagDemoVariation = 1
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
|
|
ELSE
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
|
|
INCRAMENT_Pause_Outro_Count()
|
|
ENDIF
|
|
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_WALK_THROUGH_VINEWOOD")
|
|
START_AUDIO_SCENE("MAG_2_WALK_THROUGH_VINEWOOD")
|
|
bAudioScene_MikeWalk = TRUE
|
|
ENDIF
|
|
|
|
// Set up - TODO
|
|
bTriggerSpaceRangerDialogue = TRUE
|
|
|
|
REQUEST_MODEL(SUPERD)
|
|
REQUEST_MODEL(VOLTIC)
|
|
LOAD_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
|
|
iControl++
|
|
BREAK
|
|
|
|
CASE 1
|
|
IF HAS_MODEL_LOADED(SUPERD)
|
|
AND HAS_MODEL_LOADED(VOLTIC)
|
|
AND LOAD_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(viSuperD)
|
|
viSuperD = CREATE_VEHICLE(SUPERD, <<374.5235, 159.3893, 102.0563>>, 340.6834)
|
|
SET_VEHICLE_ENGINE_ON(viSuperD,true,true)
|
|
piClosestCarDriver = CREATE_PED_INSIDE_VEHICLE(viSuperD, PEDTYPE_MISSION, G_M_Y_BALLASOUT_01)
|
|
|
|
viClosestCar = viSuperD
|
|
|
|
viVoltic = CREATE_VEHICLE(VOLTIC, <<387.8163, 210.5225, 102.0972>>, 161.3396)
|
|
SET_VEHICLE_ENGINE_ON(viVoltic,true,true)
|
|
piClosestCarDriver2 = CREATE_PED_INSIDE_VEHICLE(viVoltic, PEDTYPE_MISSION, G_M_Y_BALLASOUT_01)
|
|
|
|
SET_VEHICLE_RADIO_ENABLED(viVoltic, TRUE)
|
|
SET_VEHICLE_RADIO_LOUD(viVoltic, TRUE)
|
|
//SET_VEH_RADIO_STATION(viClosestCar, "RADIO_03_HIPHOP_NEW")
|
|
TASK_VEHICLE_DRIVE_TO_COORD(piClosestCarDriver2, viVoltic, <<484.2128, 87.5613, 96.0259>>, 7.5, DRIVINGSTYLE_NORMAL, SUPERD, DRIVINGMODE_STOPFORCARS, 2.0, 5.0)
|
|
SETTIMERA(0)
|
|
|
|
CLEANUP_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
|
|
|
|
ENDIF
|
|
|
|
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
|
|
AND NOT Is_Player_Timetable_Scene_In_Progress()
|
|
IF NOT IS_ENTITY_DEAD(viSuperD)
|
|
SET_VEHICLE_RADIO_ENABLED(viSuperD, TRUE)
|
|
SET_VEHICLE_RADIO_LOUD(viSuperD, TRUE)
|
|
//SET_VEH_RADIO_STATION(viClosestCar, "RADIO_03_HIPHOP_NEW")
|
|
TASK_VEHICLE_DRIVE_WANDER(piClosestCarDriver, viSuperD, 7.0, DRIVINGMODE_STOPFORCARS)
|
|
SETTIMERA(0)
|
|
|
|
LOAD_MODEL_ASSET(PLAYER_ONE, bModelRequest_Franklin) //#1271792
|
|
|
|
iControl++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF DOES_ENTITY_EXIST(viClosestCar)
|
|
AND TIMERA() > 5000
|
|
AND viClosestCarPrev <> viClosestCar
|
|
AND (IS_VEHICLE_DRIVEABLE(viClosestCar) AND GET_IS_VEHICLE_ENGINE_RUNNING(viClosestCar))
|
|
AND GET_ENTITY_MODEL(viClosestCar) <> TAXI
|
|
SET_VEHICLE_RADIO_ENABLED(viClosestCar, TRUE)
|
|
SET_VEHICLE_RADIO_LOUD(viClosestCar, TRUE)
|
|
viClosestCarPrev = viClosestCar
|
|
SETTIMERA(0)
|
|
ELSE
|
|
//SET_VEHICLE_AS_NO_LONGER_NEEDED(viClosestCar)
|
|
//SET_PED_AS_NO_LONGER_NEEDED(piClosestCarDriver)
|
|
// REMOVE_BLIP(blipClosestCar)
|
|
viClosestCar = GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 26.6, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES)
|
|
// blipClosestCar= CREATE_BLIP_FOR_VEHICLE(viClosestCar)
|
|
ENDIF
|
|
|
|
//is what you want
|
|
//you can optionally control the station via SET_VEH_RADIO_STATION
|
|
//but SET_VEHICLE_RADIO_LOUD will ensure it gets a radio station, and will play it a little louder than normal
|
|
|
|
// Delete the voltic and superd when they get out of range
|
|
// -SUPERD
|
|
IF DOES_ENTITY_EXIST(viSuperD)
|
|
AND IS_VEHICLE_DRIVEABLE(viSuperD)
|
|
AND DOES_ENTITY_EXIST(piClosestCarDriver)
|
|
AND NOT IS_PED_INJURED(piClosestCarDriver)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(viSuperD, <<391.999237,306.042023,101.397812>>, <<450.516998,285.500183,107.205986>>, 43.437500)
|
|
DELETE_PED(piClosestCarDriver)
|
|
DELETE_VEHICLE(viSuperD)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(SUPERD)
|
|
ENDIF
|
|
// -VOLTIC
|
|
IF DOES_ENTITY_EXIST(viVoltic)
|
|
AND IS_VEHICLE_DRIVEABLE(viVoltic)
|
|
AND DOES_ENTITY_EXIST(piClosestCarDriver2)
|
|
AND NOT IS_PED_INJURED(piClosestCarDriver2)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(viVoltic, <<501.130402,107.262054,94.584984>>, <<485.152954,71.751945,102.145523>>, 36.250000)
|
|
DELETE_PED(piClosestCarDriver2)
|
|
DELETE_VEHICLE(viVoltic)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(VOLTIC)
|
|
ENDIF
|
|
|
|
CLEANUP_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
|
|
|
|
|
|
// Wait for player to switch to Franklin
|
|
IF NOT bSafeToProgress
|
|
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_MICHAEL)
|
|
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
bSafeToProgress = TRUE
|
|
ENDIF
|
|
ELIF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_FRANKLIN)
|
|
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
|
|
CLEAR_HINT_CAM()
|
|
SET_MD_STAGE(MD_STAGE_FRA2)
|
|
|
|
IF DOES_ENTITY_EXIST(piClosestCarDriver)
|
|
DELETE_PED(piClosestCarDriver)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(piClosestCarDriver2)
|
|
DELETE_PED(piClosestCarDriver2)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(viSuperD)
|
|
DELETE_VEHICLE(viSuperD)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(SUPERD)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(viVoltic)
|
|
DELETE_VEHICLE(viVoltic)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(VOLTIC)
|
|
ENDIF
|
|
|
|
CLEAR_HINT_CAM()
|
|
|
|
SET_MD_STAGE(MD_STAGE_FRA2)
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
VECTOR vWarpCoords[4]
|
|
FLOAT fHeading[4]
|
|
|
|
// Pamela Drake
|
|
vWarpCoords[0] = <<381.7144, 157.2653, 102.1663>>
|
|
fHeading[0] = 181.7842
|
|
// Vinewoord Blvrd
|
|
vWarpCoords[1] = <<358.4988, 160.7451, 102.0595>>
|
|
fHeading[1] = 72.3215
|
|
// Impotent Rage
|
|
vWarpCoords[2] = <<309.0139, 175.9244, 102.9660>>
|
|
fHeading[2] = 39.0201
|
|
// Celeb
|
|
vWarpCoords[3] = <<266.9224, 149.1344, 103.5237>>
|
|
fHeading[3] = 160.7408
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF (iJSkipStage < COUNT_OF(vWarpCoords))
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWarpCoords[iJSkipStage]) < 10.0
|
|
iJSkipStage++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF (iJSkipStage < COUNT_OF(vWarpCoords))
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoords[iJSkipStage])
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeading[iJSkipStage])
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ELIF g_bMagDemoREPapDone
|
|
|
|
iControl = 2
|
|
INCRAMENT_Pause_Outro_Count()
|
|
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_FRANKLIN) //, PR_TYPE_AMBIENT)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC DO_STAGE_FRA2()
|
|
|
|
SWITCH iControl
|
|
CASE 0
|
|
CLEANUP_PREVIOUS_STAGE_ASSETS()
|
|
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE)
|
|
|
|
iControl++
|
|
BREAK
|
|
CASE 1
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
|
|
REQUEST_SCRIPT(sMissionName)
|
|
IF HAS_SCRIPT_LOADED(sMissionName)
|
|
IF REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_STORY, TRUE) = MCRET_ACCEPTED
|
|
g_bMagDemoFRA2Passed = FALSE
|
|
g_bMagDemoFRA2Ready = FALSE
|
|
START_NEW_SCRIPT(sMissionName, MISSION_STACK_SIZE)
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED(sMissionName)
|
|
iControl++
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
|
|
bReplayFRA2 = (NOT g_bMagDemoFRA2Passed)
|
|
missionCandidateID = NO_CANDIDATE_ID
|
|
g_savedGlobals.sFlow.isGameflowActive = TRUE
|
|
RESET_GAMEFLOW()
|
|
g_savedGlobals.sFlow.isGameflowActive = FALSE
|
|
SET_MD_STAGE(MD_STAGE_RESET)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC DO_STAGE_FBI4()
|
|
|
|
SWITCH iControl
|
|
CASE 0
|
|
CLEANUP_PREVIOUS_STAGE_ASSETS()
|
|
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
|
|
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE)
|
|
|
|
// Set stored data for Trevor
|
|
SETUP_DEFAULT_PLAYER_VARIATIONS(CHAR_TREVOR)
|
|
g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR].iDrawableVariation[PED_COMP_TORSO] = 0
|
|
g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR].iDrawableVariation[PED_COMP_LEG] = 0
|
|
g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR].iDrawableVariation[PED_COMP_FEET] = 0
|
|
g_sLastStoredPlayerPedClothes[CHAR_TREVOR] = g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR]
|
|
|
|
bFBI4LoadSceneStart = TRUE
|
|
iNewLoadSceneStage = 0
|
|
|
|
iControl++
|
|
BREAK
|
|
CASE 1
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
|
|
REQUEST_SCRIPT(sMissionName)
|
|
IF HAS_SCRIPT_LOADED(sMissionName)
|
|
IF REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_STORY, TRUE) = MCRET_ACCEPTED
|
|
g_bMagDemoFRA2Passed = FALSE
|
|
g_bMagDemoFRA2Ready = FALSE
|
|
START_NEW_SCRIPT(sMissionName, MISSION_STACK_SIZE)
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED(sMissionName)
|
|
iControl++
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iControl++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
|
|
IF bFBI4LoadSceneStart
|
|
IF iNewLoadSceneStage = 0
|
|
IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
|
|
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS()
|
|
PRINTLN("MAGDEMO: Starting new load scene for FBI4 [1]")
|
|
NEW_LOAD_SCENE_START_SPHERE(<<1376.7286, -2079.4268, 50.9983>>, 400.0)
|
|
iNewLoadSceneStage++
|
|
ENDIF
|
|
ELIF iNewLoadSceneStage = 1
|
|
IF IS_CUTSCENE_PLAYING()
|
|
iNewLoadSceneStage++
|
|
ENDIF
|
|
ELIF iNewLoadSceneStage = 2
|
|
IF NOT IS_CUTSCENE_PLAYING()
|
|
PRINTLN("MAGDEMO: Stopping new load scene for FBI4 [1]")
|
|
IF IS_NEW_LOAD_SCENE_ACTIVE()
|
|
NEW_LOAD_SCENE_STOP()
|
|
ENDIF
|
|
bFBI4LoadSceneStart = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
|
|
bReplayFRA2 = (NOT g_bMagDemoFRA2Passed)
|
|
missionCandidateID = NO_CANDIDATE_ID
|
|
g_savedGlobals.sFlow.isGameflowActive = TRUE
|
|
RESET_GAMEFLOW()
|
|
g_savedGlobals.sFlow.isGameflowActive = FALSE
|
|
SET_MD_STAGE(MD_STAGE_RESET)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE: Cleans up all script assets and states.
|
|
PROC CLEANUP_SCRIPT(BOOL bTerminateScript)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
|
|
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
CLEAR_HINT_CAM()
|
|
|
|
missionCandidateID = NO_CANDIDATE_ID
|
|
|
|
eStoredModel = DUMMY_MODEL_FOR_SCRIPT
|
|
|
|
g_bMagDemoFBI2Retry = FALSE
|
|
g_bMagDemoFRA2Retry = FALSE
|
|
g_bMagdemoTakingOverSwitch = FALSE
|
|
g_bMagdemoDoTakeOverSwitch = FALSE
|
|
|
|
|
|
IF iWindSound != -1
|
|
PRINTLN("MAGDEMO: Stopping sound Helicopter_Wind")
|
|
STOP_SOUND(iWindSound)
|
|
iWindSound = -1
|
|
ENDIF
|
|
|
|
IF bRelGroupSetup
|
|
REMOVE_RELATIONSHIP_GROUP(sharkGroup)
|
|
bRelGroupSetup = FALSE
|
|
ENDIF
|
|
|
|
// Ending magdemo so ensure gameplay can resume
|
|
IF bTerminateScript
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
//g_bMagDemoActive = FALSE
|
|
|
|
REMOVE_NAVMESH_BLOCKING_OBJECT(iNavBlockID)
|
|
|
|
// Reset flags
|
|
g_bTaxiHailingIsDisabled = FALSE
|
|
|
|
DO_SCREEN_FADE_IN(1000)
|
|
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
PAUSE_CLOCK(FALSE)
|
|
SCRIPT_OVERRIDES_WIND_TYPES(FALSE, "", "")
|
|
|
|
SET_RANDOM_TRAINS(TRUE) //740410
|
|
|
|
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(FALSE)
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC DO_STAGE_RESET()
|
|
|
|
IF bFBI4LoadSceneStart
|
|
PRINTLN("MAGDEMO: Stopping new load scene for FBI4 [1]")
|
|
IF IS_NEW_LOAD_SCENE_ACTIVE()
|
|
NEW_LOAD_SCENE_STOP()
|
|
ENDIF
|
|
bFBI4LoadSceneStart = FALSE
|
|
ENDIF
|
|
|
|
// Fade out and then delete all assets
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
IF NOT IS_SCREEN_FADING_OUT()
|
|
DO_SCREEN_FADE_OUT(2500)
|
|
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
ENDIF
|
|
|
|
// Only process when player is alive
|
|
ELIF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
CLEANUP_PREVIOUS_STAGE_ASSETS()
|
|
|
|
CLEANUP_SCRIPT(FALSE)
|
|
|
|
SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)
|
|
|
|
// Failed FRA2 so retry
|
|
IF bReplayFRA2
|
|
#IF IS_DEBUG_BUILD
|
|
OR (sZSkipData.bDoSkip AND (sZSkipData.iSelectedStage = 3) AND g_iMagDemoVariation = 0) // "FRA2"
|
|
#ENDIF
|
|
|
|
|
|
PRINTSTRING("test one")PRINTNL()
|
|
|
|
VECTOR vPlayerCoord, vPlayerCreateCoord, vLoadSceneCoord
|
|
FLOAT fPlayerCoord, fPlayerCreateCoord
|
|
|
|
MODEL_NAMES ePlayerVehModel
|
|
|
|
IF g_iMagDemoVariation = 1 //FBI4
|
|
vPlayerCoord = <<1376.7286, -2079.4268, 50.9983>>
|
|
fPlayerCoord = 15.5269
|
|
|
|
vLoadSceneCoord = vPlayerCoord + (<<-768.1193, 5323.7915, 75.8220>> - <<-766.7336, 5324.4829, 73.7515>>)
|
|
|
|
vPlayerCreateCoord = <<1381.4761, -2072.2507, 50.9983>>
|
|
fPlayerCreateCoord = 38.3348
|
|
|
|
ePlayerVehModel = TRASH
|
|
ELSE //FRANKLIN2
|
|
vPlayerCoord = <<-766.7336, 5324.4829, 73.7515>>
|
|
fPlayerCoord = 256.4759
|
|
|
|
vLoadSceneCoord = <<-768.1193, 5323.7915, 75.8220>>
|
|
|
|
vPlayerCreateCoord = <<-760.3937, 5322.8789, 73.3588>>
|
|
fPlayerCreateCoord = 261.4380
|
|
|
|
ePlayerVehModel = BUFFALO2
|
|
ENDIF
|
|
|
|
SET_INITIAL_MAGDEMO_GAME_STATE()
|
|
|
|
g_bMagDemoFRA2Retry = TRUE
|
|
|
|
// Set up the fra2 scene
|
|
// --------
|
|
// --------
|
|
// --------
|
|
// --------
|
|
// --------
|
|
// --------
|
|
|
|
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_FRANKLIN, TRUE)
|
|
|
|
PRINTSTRING("test one.one - wait on creating franklin")PRINTNL()
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
|
|
// Fade in and give control back
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_AREA(vPlayerCoord, 500.0, TRUE, TRUE)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), vPlayerCoord)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), fPlayerCoord)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P1_DEFAULT, FALSE)
|
|
ENDIF
|
|
|
|
NEW_LOAD_SCENE_START(vLoadSceneCoord, <<-6.0072, -0.0000, -96.6791>>, 500.0)
|
|
WHILE NOT IS_NEW_LOAD_SCENE_LOADED()
|
|
|
|
PRINTSTRING("test one.two - wait on loadscene [")PRINTVECTOR(vLoadSceneCoord)PRINTSTRING("]")PRINTNL()
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
NEW_LOAD_SCENE_STOP()
|
|
|
|
|
|
IF (ePlayerVehModel = BUFFALO2)
|
|
VEHICLE_INDEX vehID
|
|
WHILE NOT CREATE_PLAYER_VEHICLE(vehID, CHAR_FRANKLIN, vPlayerCreateCoord, fPlayerCreateCoord, TRUE, VEHICLE_TYPE_CAR)
|
|
PRINTSTRING("test one.three = wait on creating vehicle")PRINTNL()
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
IF DOES_ENTITY_EXIST(vehID)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vehID)
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehID)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehID)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
REQUEST_SCRIPT(sMissionName)
|
|
WHILE NOT HAS_SCRIPT_LOADED(sMissionName)
|
|
|
|
PRINTSTRING("test one.four - wait on starting mission script")PRINTNL()
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
WHILE REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_STORY, TRUE) != MCRET_ACCEPTED
|
|
|
|
PRINTSTRING("test one.five - wait on registering mission")PRINTNL()
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
|
|
g_bMagDemoFRA2Passed = FALSE
|
|
g_bMagDemoFRA2Ready = FALSE
|
|
START_NEW_SCRIPT(sMissionName, MISSION_STACK_SIZE)
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED(sMissionName)
|
|
|
|
// Wait for the mission script to give us to all clear
|
|
WHILE NOT g_bMagDemoFRA2Ready
|
|
|
|
PRINTSTRING("test one.six - wait on g_bMagDemoFRA2Ready")PRINTNL()
|
|
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
DO_SCREEN_FADE_IN(1000)
|
|
ENDIF
|
|
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
|
|
|
|
// --------
|
|
// --------
|
|
// --------
|
|
// --------
|
|
// --------
|
|
// --------
|
|
|
|
SET_MD_STAGE(MD_STAGE_FRA2)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
sZSkipData.bDoSkip = FALSE
|
|
#ENDIF
|
|
|
|
PRINTSTRING("test two")PRINTNL()
|
|
|
|
|
|
// Set up the scene if we have used the Z-Skip menu
|
|
#IF IS_DEBUG_BUILD
|
|
ELIF sZSkipData.bDoSkip
|
|
|
|
SET_INITIAL_MAGDEMO_GAME_STATE()
|
|
|
|
IF (sZSkipData.iSelectedStage = 0) // "Franklin basejumping scene"
|
|
|
|
PRINTSTRING("test three")PRINTNL()
|
|
|
|
// Let the initial scene set this one up
|
|
SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)
|
|
|
|
ELIF (sZSkipData.iSelectedStage = 1) // "Trevor diving"
|
|
|
|
|
|
PRINTSTRING("test five")PRINTNL()
|
|
|
|
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_TREVOR, TRUE)
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID())
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_TORSO, 16, 0)
|
|
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_LEG, 22, 0)
|
|
CLEAR_ALL_PED_PROPS(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<2803.9402, -1441.6550, 0.2566>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 60.2669)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ENDIF
|
|
|
|
SET_MD_STAGE(MD_STAGE_TREVOR_DIVING)
|
|
|
|
// Create the dead peds
|
|
g_eRecentlySelectedScene = PR_SCENE_T_NAKED_ISLAND
|
|
REQUEST_SCRIPT("player_scene_t_tie")
|
|
WHILE NOT HAS_SCRIPT_LOADED("player_scene_t_tie")
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
START_NEW_SCRIPT("player_scene_t_tie", FRIEND_STACK_SIZE)
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED("player_scene_t_tie")
|
|
|
|
// Create the boat
|
|
PED_VEH_DATA_STRUCT sVehData
|
|
VECTOR vTemp
|
|
FLOAT fTemp
|
|
VEHICLE_INDEX tempVeh
|
|
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(CHAR_TREVOR, PR_SCENE_T_NAKED_ISLAND, sVehData, vTemp, fTemp, vTemp, fTemp)
|
|
REQUEST_MODEL(sVehData.model)
|
|
WHILE NOT HAS_MODEL_LOADED(sVehData.model)
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
tempVeh = CREATE_VEHICLE(sVehData.model,
|
|
<<2785.829,-1433.771,0.506>>, //<<2793.1936, -1433.4767, -0.5368>>,
|
|
60.1532, //155.1434,
|
|
FALSE, FALSE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(tempVeh)
|
|
SET_VEHICLE_COLOURS(tempVeh, 0, 0)
|
|
SET_VEHICLE_RADIO_ENABLED(tempVeh, TRUE)
|
|
SET_VEH_RADIO_STATION(tempVeh, "RADIO_06_COUNTRY")
|
|
SET_VEHICLE_EXTRA_COLOURS(tempVeh, 0, 0)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sVehData.model)
|
|
ENDIF
|
|
|
|
// Fade in and give control back
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
// Make sure player gets the scuba gear
|
|
SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE(PLAYER_ID(), TRUE)
|
|
|
|
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 200.00, TRUE, TRUE)
|
|
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
DO_SCREEN_FADE_IN(1000)
|
|
ENDIF
|
|
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(tempVeh)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(tempVeh)
|
|
ENDIF
|
|
|
|
PRINTSTRING("test six")PRINTNL()
|
|
|
|
ELIF (sZSkipData.iSelectedStage = 2) // "Michael walking around city"
|
|
OR (sZSkipData.iSelectedStage = 3 AND g_iMagDemoVariation = 1) // "FBI4"
|
|
|
|
PRINTSTRING("test four")PRINTNL()
|
|
|
|
|
|
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_MICHAEL, TRUE)
|
|
WAIT(0)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(0)
|
|
ENDIF
|
|
ENDWHILE
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_BLACK_SUIT, FALSE)
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<389.0900, 178.8800, 102.1781>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 146.8972)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ENDIF
|
|
|
|
// Fade in and give control back
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 200.00, TRUE, TRUE)
|
|
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
DO_SCREEN_FADE_IN(1000)
|
|
ENDIF
|
|
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
SET_MD_STAGE(MD_STAGE_MICHAEL_WALK_AROUND_CITY)
|
|
|
|
IF (sZSkipData.iSelectedStage = 3 AND g_iMagDemoVariation = 1) // "FBI4"
|
|
SET_MD_STAGE(MD_STAGE_FRA2)
|
|
INCRAMENT_Pause_Outro_Count()
|
|
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_FRANKLIN) //, PR_TYPE_AMBIENT)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
sZSkipData.bDoSkip = FALSE
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
PRINTSTRING("test seven")PRINTNL()
|
|
|
|
SET_MAGDEMO_SCENE()
|
|
|
|
PRINTSTRING("test eight")PRINTNL()
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
INT iDebugStage
|
|
PROC SETUP_MAGDEMO_WIDGETS()
|
|
START_WIDGET_GROUP("MAGDEMO 2")
|
|
|
|
ADD_WIDGET_BOOL("Kill script", bKillScript)
|
|
ADD_WIDGET_INT_READ_ONLY("Stage", iDebugStage)
|
|
ADD_WIDGET_INT_READ_ONLY("Stage control", iControl)
|
|
|
|
ADD_WIDGET_BOOL("bAudioScene_MikeWalk", bAudioScene_MikeWalk)
|
|
ADD_WIDGET_BOOL("bAudioScene_TrevWake", bAudioScene_TrevWake)
|
|
ADD_WIDGET_BOOL("bAudioScene_TrevBoat", bAudioScene_TrevBoat)
|
|
ADD_WIDGET_BOOL("bAudioScene_TrevDive", bAudioScene_TrevDive)
|
|
ADD_WIDGET_BOOL("bAudioGroup_Ranger", bAudioGroup_Ranger)
|
|
ADD_WIDGET_BOOL("bAudioGroup_Tourbus", bAudioGroup_Tourbus)
|
|
|
|
STOP_WIDGET_GROUP()
|
|
|
|
sZSkipData.SkipMenuStruct[0].sTxtLabel = "Franklin base jumping"
|
|
sZSkipData.SkipMenuStruct[1].sTxtLabel = "Trevor diving"
|
|
sZSkipData.SkipMenuStruct[2].sTxtLabel = "Michael walking around city"
|
|
|
|
|
|
IF g_iMagDemoVariation = 1
|
|
sZSkipData.SkipMenuStruct[3].sTxtLabel = "FBI4"
|
|
ELSE
|
|
sZSkipData.SkipMenuStruct[3].sTxtLabel = "FRA2"
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC MAINTAIN_MAGDEMO_WIDGETS()
|
|
|
|
iDebugStage = ENUM_TO_INT(eMDStage)
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE()
|
|
IF GET_HASH_KEY(GET_NAME_OF_SCRIPT_TO_AUTOMATICALLY_START()) != GET_HASH_KEY(GET_THIS_SCRIPT_NAME())
|
|
SET_MD_STAGE(MD_STAGE_CLEANUP)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF bKillScript
|
|
SET_MD_STAGE(MD_STAGE_CLEANUP)
|
|
ENDIF
|
|
|
|
IF eMDStage != MD_STAGE_RESET
|
|
AND eMDStage != MD_STAGE_CLEANUP
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF LAUNCH_MISSION_STAGE_MENU(sZSkipData.SkipMenuStruct, sZSkipData.iSelectedStage, sZSkipData.iCurrentStage, FALSE, "MAGDEMO 2", FALSE)
|
|
sZSkipData.bDoSkip = TRUE
|
|
SET_MD_STAGE(MD_STAGE_RESET)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
SCRIPT
|
|
|
|
/*
|
|
NOTES
|
|
|
|
-runscript=magdemo2
|
|
startup.sc checks if the magdemo2 has been specificed and sets the g_bMagDemoActive to TRUE.
|
|
It then requests and starts this script once main_persistent.sc has been started.
|
|
main.sc no longer fades the game in if g_bMagDemoActive is set to TRUE.
|
|
player_controller.sc no longer sets a random character on startup if g_bMagDemoActive is set to TRUE.
|
|
|
|
- DO_STAGE_CREATE_INITIAL_SCENE()
|
|
This proc must wait for initial.sc to terminate for the force cleanup to be successful.
|
|
|
|
*/
|
|
|
|
PRINTLN("LAUNCHING MAGDEMO 2 SCRIPT")
|
|
PRINTLN("...variation=", g_iMagDemoVariation)
|
|
|
|
|
|
bAudioScene_MikeWalk = bAudioScene_MikeWalk
|
|
bAudioScene_TrevWake = bAudioScene_TrevWake
|
|
bAudioScene_TrevBoat = bAudioScene_TrevBoat
|
|
bAudioScene_TrevDive = bAudioScene_TrevDive
|
|
bAudioGroup_Ranger = bAudioGroup_Ranger
|
|
bAudioGroup_Tourbus = bAudioGroup_Tourbus
|
|
|
|
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
|
|
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU)
|
|
CLEANUP_SCRIPT(TRUE)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SETUP_MAGDEMO_WIDGETS()
|
|
#ENDIF
|
|
|
|
|
|
IF g_iMagDemoVariation = 1
|
|
sMissionName = "fbi4"
|
|
ELSE
|
|
sMissionName = "franklin2"
|
|
ENDIF
|
|
|
|
|
|
iNavBlockID = ADD_NAVMESH_BLOCKING_OBJECT( <<257.373, 154.617, 104.466>>, <<5.025, 2.9, 3.175>>, -0.351, FALSE )
|
|
|
|
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_SHARK, RELGROUPHASH_PLAYER)
|
|
|
|
WHILE TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
MAINTAIN_MAGDEMO_WIDGETS()
|
|
#ENDIF
|
|
|
|
SWITCH eMDStage
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
/// CREATE INITIAL SCENE
|
|
CASE MD_STAGE_CREATE_INITIAL_SCENE
|
|
DO_STAGE_CREATE_INITIAL_SCENE()
|
|
BREAK
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
/// FRANKLIN BASE JUMPING
|
|
CASE MD_STAGE_FRANKLIN_BASEJUMP
|
|
DO_STAGE_STAGE_FRANKLIN_BASEJUMP()
|
|
BREAK
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
/// TREVOR WAKES ON BEACH THEN GOES DIVING
|
|
CASE MD_STAGE_TREVOR_DIVING
|
|
DO_STAGE_TREVOR_DIVING()
|
|
BREAK
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
/// MICHAEL EXITS RESTAURANT AND WALKS AROUND CITY
|
|
CASE MD_STAGE_MICHAEL_WALK_AROUND_CITY
|
|
DO_STAGE_MICHAEL_WALK_AROUND_CITY()
|
|
BREAK
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
/// TRIGGER FRA2 MISSION
|
|
CASE MD_STAGE_FRA2
|
|
|
|
IF g_iMagDemoVariation = 1
|
|
DO_STAGE_FBI4()
|
|
ELSE
|
|
DO_STAGE_FRA2()
|
|
ENDIF
|
|
BREAK
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
/// RESET
|
|
CASE MD_STAGE_RESET
|
|
DO_STAGE_RESET()
|
|
BREAK
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
/// CLEANUP
|
|
CASE MD_STAGE_CLEANUP
|
|
CLEANUP_SCRIPT(TRUE)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
UPDATE_EXIT_BOAT_CAM()
|
|
|
|
UPDATE_HINT_CAM()
|
|
|
|
UPDATE_PLAYER_PED_STATES()
|
|
|
|
// #826620 block shocking events throughout entire magdemo
|
|
SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_AFFECTS_OTHERS)
|
|
SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_POTENTIALLY_DANGEROUS)
|
|
SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_SERIOUS_DANGER)
|
|
|
|
// #739576 always suppress scenario exits
|
|
SUPPRESS_NORMAL_SCENARIO_EXITS_NEXT_FRAME()
|
|
|
|
// #725141
|
|
SUPPRESS_SCENARIO_ATTRACTION_NEXT_FRAME()
|
|
|
|
// #728489
|
|
SUPPRESS_BREAKOUT_SCENARIO_EXITS_NEXT_FRAME()
|
|
|
|
// #831289 and #824566
|
|
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_PED_PURSUE_WHEN_HIT_BY_CAR, FALSE)
|
|
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_PED_STEAL_VEHICLE, FALSE)
|
|
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_PED_JAY_WALK_LIGHTS, FALSE)
|
|
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_ON_FOOT_FROM_VEHICLE, FALSE)
|
|
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_ON_FOOT, FALSE)
|
|
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_VEHICLE_WARNING, FALSE)
|
|
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_VEHICLE_FLEE, FALSE)
|
|
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_VEHICLE_DRIVING_FAST, FALSE)
|
|
|
|
// #834333
|
|
SUPPRESS_AGITATION_EVENTS_NEXT_FRAME()
|
|
|
|
// #1249237
|
|
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE, FALSE)
|
|
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_VEHICLE_FLEE_SPAWNED, FALSE)
|
|
|
|
|
|
WAIT(0)
|
|
|
|
ENDWHILE
|
|
ENDSCRIPT
|
|
#ENDIF
|