Files
2025-09-29 00:52:08 +02:00

562 lines
18 KiB
Scheme
Executable File

USING "script_oddjob_funcs.sch"
USING "Overlay_Effects.sch"
CONST_FLOAT EXPLOSION_CAM_BOMB_PITCH 79.1
BOOL bPlayerAttached = FALSE
BOOL bPrintHeightWarning = FALSE
BOOL bStartSceneAgain = FALSE
BOOL bPrintHeighWarningHelp = FALSE
FLOAT fCamFov = 65.0
BOOL bCreatedThisFrame = FALSE
COLLISION_ARGS collisionArgs
FLOAT fHeightAtRelease = -1.0
FLOAT fLerpCount = 1.0
BOOL bPlaneCollidable = TRUE
VECTOR vOrigOrientation
//Hack wrapper functions to attach / detach the player to the dropped bomb for bounds loading
PROC ATTACH_PLAYER_TO_BOMB(ENTITY_INDEX bombProp)
//COMMENT this back in when this is working again
SPECIAL_FUNCTION_DO_NOT_USE(PLAYER_PED_ID())
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
PRINTLN("ATTACH_PLAYER_FROM_BOMB: Attaching player")
ATTACH_ENTITY_TO_ENTITY(PLAYER_PED_ID(), bombProp, 0, <<0,0,0>>, <<0,0,0>>)
SET_PLAYER_INVINCIBLE(PLAYER_ID(), TRUE)
bPlayerAttached = TRUE
ENDPROC
PROC DETACH_PLAYER_FROM_BOMB(VEHICLE_INDEX myPlane)
//Comment back in when we can attach player to bomb.
PRINTLN("DETACH_PLAYER_FROM_BOMB: Detaching player")
DETACH_ENTITY(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(),myPlane)
bPlayerAttached = FALSE
ENDPROC
FUNC BOOL EVALUATE_DROP_CONDITIONS(ARGS& myArgs, PLANE_CARGO_ARGS& cargoArgs, structPedsForConversation MyLocalPedStruct, BOOL& bPlayConvo, AIR_VARIATION myVariation = AIR_VARIATION_BOMB, BOOL bInCam = FALSE)
VECTOR playerPos
playerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
BOOL bCanDrop = TRUE
FLOAT fWaterHeight = 0
IF GET_WATER_HEIGHT_NO_WAVES(GET_ENTITY_COORDS(PLAYER_PED_ID()), fWaterHeight)
//PRINTLN("water height:", fWaterHeight, "Playerz: ", playerPos.z )
IF (playerPos.z - fWaterHeight) < 16.5
bCanDrop = FALSE
IF NOT bPrintHeighWarningHelp
PRINT_HELP("DTRFAIR_HEIGHT")
PRINTLN("bPrintHeighWarningHelp = TRUE")
bPrintHeighWarningHelp = TRUE
ENDIF
ENDIF
ENDIF
IF GET_ENTITY_HEIGHT_ABOVE_GROUND(cargoArgs.myPlane) < 6.0 OR GET_ENTITY_SPEED(PLAYER_PED_ID()) < 10
OR IS_ENTITY_IN_WATER(PLAYER_PED_ID())
IF NOT bPrintHeighWarningHelp
PRINT_HELP("DTRFAIR_HEIGHT")
PRINTLN("bPrintHeighWarningHelp = TRUE")
bPrintHeighWarningHelp = TRUE
ENDIF
bCanDrop = FALSE
ENDIF
//TODO this is currenlty breaking the abort drop cam
#IF IS_DEBUG_BUILD
FLOAT fHeight = GET_ENTITY_HEIGHT_ABOVE_GROUND(cargoArgs.myPlane)
PRINTLN("Height from ground: ", fHeight)
#ENDIF // IS_DEBUG_BUILD
IF GET_ENTITY_HEIGHT_ABOVE_GROUND(cargoArgs.myPlane) > 230 AND NOT bInCam
IF myVariation = AIR_VARIATION_BOMB AND myArgs.bDoBomb
IF bPlayConvo
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_A_ALTP", CONV_PRIORITY_VERY_HIGH)
bPlayConvo = FALSE
ENDIF
IF NOT bPrintHeightWarning
PRINT_HELP("DTRFAIR_ERR1")
PRINTLN("BOMB - HEIGHT WARNING")
bPrintHeightWarning = TRUE
ENDIF
ELSE
IF bPlayConvo
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_A_ALTP", CONV_PRIORITY_VERY_HIGH)
bPlayConvo = FALSE
ENDIF
IF NOT bPrintHeightWarning
PRINT_HELP("DTRFAIR_ERR2")
PRINTLN("PACKAGE - HEIGHT WARNING")
bPrintHeightWarning = TRUE
ENDIF
ENDIF
bCanDrop = FALSE
ENDIF
//If we're too high don't drop.. need a print as well
IF bCanDrop = FALSE //AND IS_BUTTON_JUST_PRESSED(PAD1, CROSS)
ODDJOB_PLAY_SOUND("DRUG_TRAFFIC_AIR_BOMB_DROP_ERROR_MASTER", cargoArgs.soundID)
ENDIF
RETURN bCanDrop
ENDFUNC
BOOL bInCam = FALSE
PROC TOGGLE_VISIBILITY(PLANE_CARGO_ARGS& cargoArgs, OBJECT_INDEX myEntity, BOOL bUberBombs = FALSE, BOOL bVisible = FALSE)
INT idx, idx2
PRINTLN("Calling Toggle Visibility uber, visible", bUberBombs, bVisible)
IF DOES_ENTITY_EXIST(cargoArgs.myPlane)
PRINTLN("Setting plane invisible: ", bVisible)
SET_ENTITY_VISIBLE(cargoArgs.myPlane, bVisible)
ENDIF
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
PRINTLN("Setting player invisible: ", bVisible)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), bVisible)
ENDIF
REPEAT cargoArgs.iNumPackagesTotal idx
IF DOES_ENTITY_EXIST(cargoArgs.oCargoDrop[idx]) AND myEntity <> cargoArgs.oCargoDrop[idx]
PRINTLN("Setting package invisible: ", "num: ", idx, bVisible)
SET_ENTITY_VISIBLE(cargoArgs.oCargoDrop[idx], bVisible)
IF bUberBombs
REPEAT MAX_NUMBER_CLUSTER idx2
IF DOES_ENTITY_EXIST(cargoArgs.oClusterDrop[idx][idx2])
IF IS_ENTITY_ATTACHED(cargoArgs.oClusterDrop[idx][idx2])
SET_ENTITY_VISIBLE(cargoArgs.oClusterDrop[idx][idx2], bVisible)
ENDIF
ENDIF
ENDREPEAT
ENDIF
ENDIF
ENDREPEAT
ENDPROC
FUNC BOOL IS_COLLISION_IMMINENT(ENTITY_INDEX myPlane, VECTOR vPlayerPos, FLOAT yDist = 230.0)
VECTOR planeCoord = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(myPlane, <<0,yDist,0>>)
DEBUG_MESSAGE(" yDist: ")
PRINTFLOAT(yDist)
PRINTNL()
PRINTVECTOR(planeCoord)
DEBUG_MESSAGE(" playerPos: ")
PRINTVECTOR(vPlayerPos)
PRINTNL()
//If we are really low to the ground lets bail out as well
IF GET_ENTITY_HEIGHT_ABOVE_GROUND(myPlane) < 20.0
RETURN TRUE
ENDIF
FLOAT zGround
BOOL bHasBounds = FALSE
planeCoord.z += 240.0
IF GET_GROUND_Z_FOR_3D_COORD(planeCoord, zGround)
bHasBounds = TRUE
//ELIF GET_WATER_HEIGHT_NO_WAVES(planeCoord, zGround)
//bHasBounds = TRUE
ENDIF
IF bHasBounds
DEBUG_MESSAGE("Has Bounds")
PRINTFLOAT(zGround)
PRINTNL()
PRINTFLOAT(vPlayerPos.z)
IF (zGround+15.0) > vPlayerPos.z
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDIF
DEBUG_MESSAGE("NO BOUNDS")
RETURN FALSE
ENDFUNC
FUNC BOOL IS_COLLISION_IMMINENT_WRAPPER(ENTITY_INDEX myPlane)
VECTOR vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF IS_COLLISION_IMMINENT(myPlane, vPlayerPos, 180) OR IS_COLLISION_IMMINENT(myPlane, vPlayerPos, 130)
OR IS_COLLISION_IMMINENT(myPlane, vPlayerPos, 80)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
INT testSoundID = -1
FLOAT fBlurStrength = 0.01
//This is the camera that attaches to the package and follows the bomb down
FUNC BOOL DO_EXPLOSION_CAM(PLANE_CARGO_ARGS& cargoArgs, OBJECT_INDEX& myEntity)
CLEAR_TIMECYCLE_MODIFIER()
OVERLAY_SET_SECURITY_CAM(FALSE,FALSE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT)
SET_VEHICLE_USED_FOR_PILOT_SCHOOL(cargoArgs.myPlane, TRUE)
PRINTLN("DISABLING FLIGHT SKILL - 01")
bCreatedThisFrame = TRUE
SET_ENTITY_COLLISION(myEntity, FALSE)
VECTOR vRotTemp = GET_ENTITY_ROTATION(myEntity)
vRotTemp.x = EXPLOSION_CAM_BOMB_PITCH
SET_ENTITY_ROTATION(myEntity, vRotTemp)
SET_ENTITY_ROTATION(cargoArgs.oBombDummy, vRotTemp)
SET_ENTITY_COLLISION(cargoArgs.oBombDummy, FALSE)
bInCam = TRUE
TOGGLE_VISIBILITY(cargoArgs, myEntity, FALSE)
DESTROY_CAM(cargoArgs.CamExplosion)
//exit the targeting cam
cargoArgs.bBombCam = FALSE
IF NOT DOES_CAM_EXIST(cargoArgs.CamExplosion)
cargoArgs.CamExplosion = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0,0,0>>, 65.00, FALSE)
PRINTLN("CREATING EXPLOSION CAM - 01")
ENDIF
//SET_CAM_MOTION_BLUR_STRENGTH(cargoArgs.CamExplosion, fBlurStrength)
ATTACH_CAM_TO_ENTITY(cargoArgs.CamExplosion, cargoArgs.oBombDummy, <<0.2402, 1.3324, -0.1095>>, TRUE)
POINT_CAM_AT_ENTITY(cargoArgs.CamExplosion, cargoArgs.oBombDummy, <<0.3169, -1.8554, 0.1502>>)
ATTACH_PLAYER_TO_BOMB(myEntity)
SHAKE_CAM(cargoArgs.CamExplosion, "ROAD_VIBRATION_SHAKE", 1.0)
SET_CAM_FOV(cargoArgs.CamExplosion, 65.0)
SET_CAM_ACTIVE(cargoArgs.CamExplosion, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
fCamFov = 65.0
ODDJOB_PLAY_SOUND("DRUG_TRAFFIC_AIR_BOMB_CAM_MASTER", testSoundID, TRUE)
VECTOR vProbeStart = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(cargoArgs.myPlane, <<0.0, 20.0, 0.0>>)
GET_GROUND_Z_FOR_3D_COORD(vProbeStart, fHeightAtRelease)
SET_ENTITY_COLLISION(cargoArgs.myPlane, FALSE)
bPlaneCollidable = FALSE
//SET_FOCUS_POS_AND_VEL(GET_ENTITY_COORDS(cargoArgs.myPlane), <<-60.8813, 5.0506, 122.7079>>)
RETURN TRUE
ENDFUNC
//Old targeting cam
//FUNC BOOL SETUP_BOMB_CAM(PLANE_CARGO_ARGS& cargoArgs)
//
// DEBUG_PRINT("INSIDE SETUP_BOMB_CAM")
// DESTROY_CAM(cargoArgs.CamExplosion)
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
//
// //TODO if the vehicle isn't flying.. don't do bomb cam.
// IF EVALUATE_DROP_CONDITIONS(cargoArgs)
// IF NOT DOES_CAM_EXIST(cargoArgs.CamExplosion)
// cargoArgs.CamExplosion = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0,0,0>>, 95, FALSE)
// ENDIF
//
// ATTACH_CAM_TO_ENTITY(cargoArgs.CamExplosion, cargoArgs.myPlane, <<0,-0.65,-0.60>>, TRUE)
// SET_CAM_ACTIVE(cargoArgs.CamExplosion, TRUE)
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// DISPLAY_RADAR(FALSE)
// DISPLAY_HUD(FALSE)
// DEBUG_PRINT("RETURNING TRUE ON SETUP_BOMB_CAM")
// RETURN TRUE
// ELSE
// RETURN FALSE
// ENDIF
//
//ENDFUNC
//Attach the camera to the bomb bay door view
//bCut is used to only call LAST_BOMB_CUT_SINGLE once.. hack..
FUNC BOOL SETUP_CARPET_BOMB_CAM(ARGS& myArgs, PLANE_CARGO_ARGS& cargoArgs)
DEBUG_PRINT("INSIDE SETUP_BOMB_CAM")
DESTROY_CAM(cargoArgs.CamExplosion)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
FLOAT fHeading
fHeading = fHeading
//TODO if the vehicle isn't flying.. don't do bomb cam.
structPedsForConversation temp
BOOL bPlayCon = FALSE
PRINTLN("EVALUATE_DROP_CONDITIONS VIA SETUP_CARPET_BOMB_CAM")
IF EVALUATE_DROP_CONDITIONS(myArgs, cargoArgs, temp, bPlayCon)
IF NOT DOES_CAM_EXIST(cargoArgs.CamExplosion)
fHeading = GET_ENTITY_HEADING(cargoArgs.myPlane)
cargoArgs.CamExplosion = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0, 0, 0>>, 65, FALSE)
SHAKE_CAM(cargoArgs.CamExplosion, "ROAD_VIBRATION_SHAKE", 0.5)
PRINTLN("CREATING EXPLOSION CAM - 02")
ENDIF
cargoArgs.iCutGameTimeStart = GET_GAME_TIMER()
ATTACH_CAM_TO_ENTITY(cargoArgs.CamExplosion, cargoArgs.myPlane, <<0, 1.44, -0.9565>>)
POINT_CAM_AT_ENTITY(cargoArgs.CamExplosion, cargoArgs.myPlane, <<-0.1281, -1.5596, -1.4592>>)
SET_VEHICLE_USED_FOR_PILOT_SCHOOL(cargoArgs.myPlane, TRUE)
PRINTLN("DISABLING FLIGHT SKILL - 02")
SET_CAM_ACTIVE(cargoArgs.CamExplosion, TRUE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DEBUG_PRINT("RETURNING TRUE ON SETUP_BOMB_CAM")
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDFUNC
FUNC BOOL SETUP_OPEN_BOMB_CAM(ARGS& myArgs, PLANE_CARGO_ARGS& cargoArgs)
DEBUG_PRINT("INSIDE SETUP_BOMB_CAM")
DESTROY_CAM(cargoArgs.CamExplosion)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
FLOAT fHeading
fHeading = fHeading
structPedsForConversation temp
BOOL bPlayCon = FALSE
//TODO if the vehicle isn't flying.. don't do bomb cam.
PRINTLN("EVALUATE_DROP_CONDITIONS VIA SETARGS& myArgsUP_OPEN_BOMB_CAM")
IF EVALUATE_DROP_CONDITIONS(myArgs, cargoArgs, temp, bPlayCon)
IF NOT DOES_CAM_EXIST(cargoArgs.CamExplosion)
fHeading = GET_ENTITY_HEADING(cargoArgs.myPlane)
cargoArgs.CamExplosion = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0, 0, 0>>, 65, FALSE)
PRINTLN("CREATING EXPLOSION CAM - 03")
ENDIF
ATTACH_CAM_TO_ENTITY(cargoArgs.CamExplosion, cargoArgs.myPlane, <<0.0018, -1.0467, -0.9686>>)
POINT_CAM_AT_ENTITY(cargoArgs.CamExplosion, cargoArgs.myPlane, <<0.0586, 1.9170, -1.2309>>)
SET_CAM_FOV(cargoArgs.CamExplosion, 50.0000)
SET_VEHICLE_USED_FOR_PILOT_SCHOOL(cargoArgs.myPlane, TRUE)
PRINTLN("DISABLING FLIGHT SKILL - 03")
SET_CAM_ACTIVE(cargoArgs.CamExplosion, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
DEBUG_PRINT("RETURNING TRUE ON SETUP_BOMB_CAM")
STOP_AUDIO_SCENE("BAY_DOOR_SCENE")
PRINTLN("STOP AUDIO SCENE - BAY_DOOR_SCENE VIA SETUP_OPEN_BOMB_CAM")
TRIGGER_MUSIC_EVENT("OJDA1_HATCH_OPEN")
PRINTLN("TRIGGERING MUSIC - OJDA1_HATCH_OPEN")
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDFUNC
//After all of the bombs have dropped from the plan we attach the cam to the final bomb and follow it down
PROC LAST_BOMB_CUT(PLANE_CARGO_ARGS& cargoArgs, ENTITY_INDEX myEntity)
VECTOR rotVec
rotVec = GET_CAM_ROT(cargoArgs.CamExplosion)
cargoArgs.CamTransition = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, rotVec, 65.00, TRUE)
INT iInterpTime
FLOAT fHeight = GET_ENTITY_HEIGHT_ABOVE_GROUND(cargoArgs.myPlane)
IF fHeight < 35
PRINTLN("DIST: ", GET_ENTITY_HEIGHT_ABOVE_GROUND(cargoArgs.myPlane))
iInterpTime = 3000
ATTACH_CAM_TO_ENTITY(cargoArgs.CamTransition, myEntity, <<1.0262, -9.9728, 1.8926>>, TRUE)
POINT_CAM_AT_ENTITY(cargoArgs.CamTransition, myEntity, <<0.8841, -7.0213, 2.4110>>)
ELIF fHeight < 70
PRINTLN("DIST: ", GET_ENTITY_HEIGHT_ABOVE_GROUND(cargoArgs.myPlane))
iInterpTime = 3500
ATTACH_CAM_TO_ENTITY(cargoArgs.CamTransition, myEntity, <<1.1287, -8.3258, 0.7281>>, TRUE)
POINT_CAM_AT_ENTITY(cargoArgs.CamTransition, myEntity, <<0.9513, -5.4114, 1.4169>>)
ELSE
PRINTLN("DIST: ", GET_ENTITY_HEIGHT_ABOVE_GROUND(cargoArgs.myPlane))
iInterpTime = 5000
ATTACH_CAM_TO_ENTITY(cargoArgs.CamTransition, myEntity, <<1.4631, -3.0219, -3.0115>>, TRUE)
POINT_CAM_AT_ENTITY(cargoArgs.CamTransition, myEntity, <<1.1996, -0.3242, -1.7257>>)
ENDIF
// 2nd Shot
TOGGLE_VISIBILITY(cargoArgs, NULL, TRUE, FALSE)
PRINTLN("[LAST_BOMB_CUT] Hiding plane, and bomb if they are attached.")
IF NOT IS_VECTOR_ZERO(vCamTransitionOffsetPosition) AND NOT IS_VECTOR_ZERO(vCamTransitionOffsetRotation)
cargoArgs.CamTransition01 = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, rotVec, 65.00, FALSE)
ATTACH_CAM_TO_ENTITY(cargoArgs.CamTransition01, myEntity, vCamTransitionOffsetPosition, TRUE)
POINT_CAM_AT_ENTITY(cargoArgs.CamTransition01, myEntity, vCamTransitionOffsetRotation)
ENDIF
PRINTLN("vCamTransitionOffsetPosition = ", vCamTransitionOffsetPosition)
PRINTLN("vCamTransitionOffsetRotation = ", vCamTransitionOffsetRotation)
PRINTLN("CREATING NEW CAM")
SHAKE_CAM(cargoArgs.CamTransition, "HAND_SHAKE", 2.0)
SHAKE_CAM(cargoArgs.CamTransition01, "HAND_SHAKE", 2.0)
// SET_CAM_MOTION_BLUR_STRENGTH(cargoArgs.CamTransition, 0.25)
// SET_CAM_MOTION_BLUR_STRENGTH(cargoArgs.CamTransition01, 0.25)
SET_CAM_ACTIVE_WITH_INTERP(cargoArgs.CamTransition01, cargoArgs.CamTransition, iInterpTime)
ATTACH_PLAYER_TO_BOMB(myEntity)
ODDJOB_PLAY_SOUND("DRUG_TRAFFIC_AIR_BOMB_CAM_MASTER", cargoArgs.soundID, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
ENDPROC
PROC CLEANUP_CLUSTER_CAM(PLANE_CARGO_ARGS& cargoArgs, ENTITY_INDEX myEntity, INT delay = 0)
DESTROY_CAM(cargoArgs.CamTransition)
DESTROY_CAM(cargoArgs.CamTransition01)
DESTROY_CAM(cargoArgs.CamExplosion)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
TOGGLE_VISIBILITY(cargoARgs, NULL, TRUE, TRUE)
IF bPlayerAttached
DETACH_PLAYER_FROM_BOMB(cargoArgs.myPlane)
ENDIF
cargoArgs.CamExplosion = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<1,1,1>>, <<0,0,0>>, 60.00, FALSE)
PRINTLN("CREATING EXPLOSION CAM - 04")
ODDJOB_STOP_SOUND(cargoArgs.soundID)
ATTACH_CAM_TO_ENTITY(cargoArgs.CamExplosion, cargoArgs.myPlane, <<0,-0.65,-1.60>>, TRUE)
SHAKE_CAM(cargoArgs.CamExplosion, "HAND_SHAKE", 1.5)
POINT_CAM_AT_ENTITY(cargoArgs.CamExplosion, myEntity, <<0,0,0>>)
SET_VEHICLE_USED_FOR_PILOT_SCHOOL(cargoArgs.myPlane, FALSE)
PRINTLN("ENABLING FLIGHT SKILL - 01")
SET_CAM_ACTIVE(cargoArgs.CamExplosion, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
cargoArgs.iCutGameTimeStart = 0
cargoArgs.iCutGameTime = GET_GAME_TIMER() + delay
ENDPROC
PROC CLEANUP_EXPLOSION_CAM(PLANE_CARGO_ARGS& cargoArgs, ENTITY_INDEX myEntity, INT iCargo, INT delay = 0, BOOL bDoLookBack = TRUE)
iCargo = iCargo
CLEAR_FOCUS()
// Clear the values for lerping from large to small FOV for bomb drop in the explosion cam
// fLerpCount = 0.0
IF cargoArgs.iNumReleased-1 = iCargo //OR NOT bDoLookBack
TOGGLE_VISIBILITY(cargoARgs, NULL, FALSE, TRUE)
IF bPlayerAttached
DETACH_PLAYER_FROM_BOMB(cargoArgs.myPlane)
ENDIF
SET_ENTITY_COLLISION(cargoArgs.myPlane, TRUE)
bPlaneCollidable = TRUE
DESTROY_CAM(cargoArgs.CamExplosion)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
ODDJOB_STOP_SOUND(cargoArgs.soundID)
ODDJOB_STOP_SOUND(testSoundID)
cargoArgs.iCutGameTimeStart = 0
bInCam = FALSE
DEBUG_PRINT("CALLING CLEANUP_EXPLOSION_CAM")
IF bDoLookBack AND NOT UPDATE_COLLISION_TESTS_NOW(collisionArgs, cargoArgs.myPlane)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
ENDIF
SET_VEHICLE_USED_FOR_PILOT_SCHOOL(cargoArgs.myPlane, FALSE)
PRINTLN("ENABLING FLIGHT SKILL - 02")
cargoArgs.CamExplosion = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<1,1,1>>, <<0,0,0>>, 60.00, FALSE)
PRINTLN("CREATING EXPLOSION CAM - 05")
ATTACH_CAM_TO_ENTITY(cargoArgs.CamExplosion, cargoArgs.myPlane, <<0,-0.65,-1.60>>, TRUE)
SHAKE_CAM(cargoArgs.CamExplosion, "HAND_SHAKE", 1.5)
POINT_CAM_AT_ENTITY(cargoArgs.CamExplosion, myEntity, <<0,0,0>>)
SET_FOCUS_POS_AND_VEL(GET_ENTITY_COORDS(myEntity), <<0,0,0>>)
SET_CAM_ACTIVE(cargoArgs.CamExplosion, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
cargoArgs.iCutGameTimeStart = 0
cargoArgs.iCutGameTime = GET_GAME_TIMER() + delay
ELSE
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
ENDIF
ENDIF
ENDPROC
PROC CLEANUP_CAM(PLANE_CARGO_ARGS &cargoArgs, BOOL& bClearPrints)
IF bClearPrints
CLEAR_HELP()
bClearPrints = FALSE
ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
SET_VEHICLE_USED_FOR_PILOT_SCHOOL(cargoArgs.myPlane, FALSE)
PRINTLN("ENABLING FLIGHT SKILL - 03")
IF NOT bStartSceneAgain
START_AUDIO_SCENE("BAY_DOOR_SCENE")
PRINTLN("STARTING AUDIO SCENE - BAY_DOOR_SCENE VIA CLEANUP_CAM")
bStartSceneAgain = TRUE
ENDIF
TOGGLE_VISIBILITY(cargoArgs, NULL, FALSE, TRUE)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
CLEAR_TIMECYCLE_MODIFIER()
OVERLAY_SET_SECURITY_CAM(FALSE,FALSE)
DESTROY_CAM(cargoArgs.CamExplosion)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
ENDPROC
PROC CLEANUP_QUICK_CAM(PLANE_CARGO_ARGS &cargoArgs, BOOL& bLocked, INT& iLockedIdx)
bLocked = FALSE
iLockedIdx = -1
cargoArgs.iCutGameTimeStart = 0
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
//cargoArgs.iCutGameTime = GET_GAME_TIMER()
DESTROY_CAM(cargoArgs.CamExplosion)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
SET_VEHICLE_USED_FOR_PILOT_SCHOOL(cargoArgs.myPlane, FALSE)
PRINTLN("ENABLING FLIGHT SKILL - 04")
ENDPROC