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

314 lines
9.3 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_camera.sch"
USING "commands_pad.sch"
USING "commands_script.sch"
USING "RC_Helper_Functions.sch"
USING "rgeneral_include.sch"
#IF IS_DEBUG_BUILD
USING "script_debug.sch"
USING "select_mission_stage.sch"
#ENDIF
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : blimpTest.sc
// AUTHOR :
// DESCRIPTION : Test script which pilots blimp around Los Santos and allows
// the player to shoot it down.
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
CONST_INT Z_SKIP_RESET_RELEASE_WHEN_DESTROYED 0
CONST_INT Z_SKIP_RESET_DELETE_WHEN_DESTROYED 1
CONST_INT Z_SKIP_WARP_INTO_BLIMP 2
VEHICLE_INDEX vehBlimp
MODEL_NAMES modelBlimp = BLIMP
BLIP_INDEX blipBlimp
PED_INDEX pedBlimpPilot
MODEL_NAMES modelBlimpPilot = S_M_M_Pilot_02
VEHICLE_INDEX vehPlayerHelicopter
MODEL_NAMES modelPlayerHelicopter = BUZZARD
BOOL bDeleteBlimpWhenDestroyed = FALSE
#IF IS_DEBUG_BUILD
CONST_INT MAX_SKIP_MENU_LENGTH 3
MissionStageMenuTextStruct mSkipMenu[MAX_SKIP_MENU_LENGTH]
WIDGET_GROUP_ID widgetGroup
BOOL bDebug_ToggleBlip = TRUE
#ENDIF
PROC CREATE_BLIMP_BLIP()
SAFE_REMOVE_BLIP(blipBlimp)
IF IS_VEHICLE_OK(vehBlimp)
blipBlimp = CREATE_VEHICLE_BLIP(vehBlimp)
#IF IS_DEBUG_BUILD bDebug_ToggleBlip = TRUE #ENDIF
ENDIF
ENDPROC
PROC RESET_BLIMP()
IF IS_VEHICLE_OK(vehBlimp)
AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBlimp)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBlimp)
ENDIF
SAFE_REMOVE_BLIP(blipBlimp)
SAFE_DELETE_PED(pedBlimpPilot)
SAFE_DELETE_VEHICLE(vehBlimp)
REQUEST_MODEL(modelBlimp)
REQUEST_VEHICLE_RECORDING(1, "Blimp_City")
WHILE NOT HAS_MODEL_LOADED(modelBlimp)
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(1, "Blimp_City")
WAIT(0)
ENDWHILE
VECTOR v_blimp_spawn_rotation = GET_ROTATION_OF_VEHICLE_RECORDING_ID_AT_TIME(GET_VEHICLE_RECORDING_ID(1, "Blimp_City"), 0)
vehBlimp = CREATE_VEHICLE(modelBlimp, GET_POSITION_OF_VEHICLE_RECORDING_ID_AT_TIME(GET_VEHICLE_RECORDING_ID(1, "Blimp_City"), 0), v_blimp_spawn_rotation.z)
SET_MODEL_AS_NO_LONGER_NEEDED(modelBlimp)
ENDPROC
PROC CREATE_PILOT()
REQUEST_MODEL(modelBlimpPilot)
WHILE NOT HAS_MODEL_LOADED(modelBlimpPilot)
WAIT(0)
ENDWHILE
IF IS_VEHICLE_OK(vehBlimp)
pedBlimpPilot = CREATE_PED_INSIDE_VEHICLE(vehBlimp, PEDTYPE_MISSION, modelBlimpPilot)
IF IS_ENTITY_ALIVE(pedBlimpPilot)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedBlimpPilot, TRUE)
SET_PED_CONFIG_FLAG(pedBlimpPilot, PCF_RunFromFiresAndExplosions, FALSE)
SET_PED_CONFIG_FLAG(pedBlimpPilot, PCF_GetOutUndriveableVehicle, FALSE)
SET_PED_CONFIG_FLAG(pedBlimpPilot, PCF_GetOutBurningVehicle, FALSE)
ENDIF
ENDIF
IF IS_VEHICLE_OK(vehBlimp)
START_PLAYBACK_RECORDED_VEHICLE(vehBlimp, 1, "Blimp_City")
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(modelBlimpPilot)
ENDPROC
PROC RESET_PLAYER_INTO_HELICOPTER()
SAFE_RELEASE_VEHICLE(vehPlayerHelicopter)
REQUEST_MODEL(modelPlayerHelicopter)
WHILE NOT HAS_MODEL_LOADED(modelPlayerHelicopter)
WAIT(0)
ENDWHILE
IF IS_VEHICLE_OK(vehBlimp)
vehPlayerHelicopter = CREATE_VEHICLE(modelPlayerHelicopter, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehBlimp, <<50,0,15>>), 0)
SET_HELI_BLADES_FULL_SPEED(vehPlayerHelicopter)
SET_ENTITY_HEADING_FACE_ENTITY(vehPlayerHelicopter, vehBlimp)
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehPlayerHelicopter)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 500, TRUE)
ENDIF
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(modelPlayerHelicopter)
ENDPROC
PROC RESET_PLAYER_INTO_BLIMP()
IF IS_VEHICLE_OK(vehBlimp)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehBlimp)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
ENDIF
ENDPROC
PROC DO_BLIMP_EXPLOSION(VECTOR vPos)
INT iIndex
INT iNumExplosions = 12
VECTOR vOffset[12]
vOffset[0] = <<5,0,0>>
vOffset[1] = <<0,5,0>>
vOffset[2] = <<0,0,5>>
vOffset[3] = <<5,5,0>>
vOffset[4] = <<5,0,5>>
vOffset[5] = <<0,5,5>>
vOffset[6] = <<20,0,0>>
vOffset[7] = <<0,20,0>>
vOffset[8] = <<0,0,20>>
vOffset[9] = <<20,20,0>>
vOffset[10] = <<20,0,20>>
vOffset[11] = <<0,20,20>>
ADD_EXPLOSION(vPos, EXP_TAG_PLANE, 1.0)
FOR iIndex=0 TO iNumExplosions-1
ADD_EXPLOSION(vPos + vOffset[iIndex], EXP_TAG_PLANE, 1.0)
ENDFOR
ENDPROC
PROC UPDATE_BLIMP()
IF DOES_ENTITY_EXIST(vehBlimp)
IF IS_ENTITY_DEAD(vehBlimp)
OR GET_ENTITY_HEALTH(vehBlimp) <= 0
OR GET_VEHICLE_ENGINE_HEALTH(vehBlimp) <= 0
SAFE_REMOVE_BLIP(blipBlimp)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBlimp)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBlimp)
ENDIF
// Only create explosion when blimp is deleted as otherwise
// the explosion can affect the physics.
IF bDeleteBlimpWhenDestroyed = TRUE
VECTOR vBlimpPos = GET_ENTITY_COORDS(vehBlimp, FALSE)
DO_BLIMP_EXPLOSION(vBlimpPos)
ENDIF
IF bDeleteBlimpWhenDestroyed = TRUE
SAFE_DELETE_PED(pedBlimpPilot)
SAFE_DELETE_VEHICLE(vehBlimp)
ELSE
SAFE_RELEASE_PED(pedBlimpPilot)
SAFE_RELEASE_VEHICLE(vehBlimp)
ENDIF
ELIF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBlimp)
SET_PLAYBACK_SPEED(vehBlimp, 0.25)
ENDIF
ENDIF
ENDPROC
PROC Script_Cleanup()
#IF IS_DEBUG_BUILD PRINTLN("blimpTest: Cleanup") #ENDIF
IF IS_VEHICLE_OK(vehBlimp)
AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBlimp)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBlimp)
ENDIF
REMOVE_VEHICLE_RECORDING(1, "Blimp_city")
SAFE_REMOVE_BLIP(blipBlimp)
SAFE_RELEASE_PED(pedBlimpPilot)
SAFE_RELEASE_VEHICLE(vehBlimp)
SAFE_RELEASE_VEHICLE(vehPlayerHelicopter)
SET_MODEL_AS_NO_LONGER_NEEDED(modelBlimpPilot)
SET_MODEL_AS_NO_LONGER_NEEDED(modelBlimp)
SET_MODEL_AS_NO_LONGER_NEEDED(modelPlayerHelicopter)
SET_MAX_WANTED_LEVEL(6)
TERMINATE_THIS_THREAD()
ENDPROC
#IF IS_DEBUG_BUILD
PROC CHECK_FOR_BLIMP_BLIP_TOGGLE()
IF bDebug_ToggleBlip = TRUE
IF NOT DOES_BLIP_EXIST(blipBlimp)
AND IS_VEHICLE_OK(vehBlimp)
blipBlimp = CREATE_VEHICLE_BLIP(vehBlimp)
ENDIF
ELSE
IF DOES_BLIP_EXIST(blipBlimp)
SAFE_REMOVE_BLIP(blipBlimp)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks for debug keys being pressed.
PROC DEBUG_Check_Debug_Keys()
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
OR (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
OR (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
OR (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P))
Script_Cleanup()
ENDIF
INT i_new_state
IF LAUNCH_MISSION_STAGE_MENU(mSkipMenu, i_new_state)
SWITCH i_new_state
CASE Z_SKIP_RESET_RELEASE_WHEN_DESTROYED
bDeleteBlimpWhenDestroyed = FALSE
RESET_BLIMP()
CREATE_PILOT()
CREATE_BLIMP_BLIP()
RESET_PLAYER_INTO_HELICOPTER()
BREAK
CASE Z_SKIP_RESET_DELETE_WHEN_DESTROYED
bDeleteBlimpWhenDestroyed = TRUE
RESET_BLIMP()
CREATE_PILOT()
CREATE_BLIMP_BLIP()
RESET_PLAYER_INTO_HELICOPTER()
BREAK
CASE Z_SKIP_WARP_INTO_BLIMP
RESET_BLIMP()
RESET_PLAYER_INTO_BLIMP()
BREAK
ENDSWITCH
ENDIF
ENDPROC
#ENDIF
SCRIPT
#IF IS_DEBUG_BUILD PRINTLN("blimpTest: Launched") #ENDIF
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(500)
ENDIF
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_SP_TO_MP)
#IF IS_DEBUG_BUILD PRINTLN("blimpTest: Force Cleanup") #ENDIF
Script_Cleanup()
ENDIF
#IF IS_DEBUG_BUILD
mSkipMenu[Z_SKIP_RESET_RELEASE_WHEN_DESTROYED].sTxtLabel = "Reset, warp into heli, blimp released when destroyed"
mSkipMenu[Z_SKIP_RESET_DELETE_WHEN_DESTROYED].sTxtLabel = "Reset, warp into heli, blimp deleted when destroyed"
mSkipMenu[Z_SKIP_WARP_INTO_BLIMP].sTxtLabel = "Reset, warp into blimp (for carrec purposes)"
IF NOT DOES_WIDGET_GROUP_EXIST(widgetGroup)
widgetGroup = START_WIDGET_GROUP("Blimp widgets")
ADD_WIDGET_BOOL("Toggle blimp's blip on/off", bDebug_ToggleBlip)
STOP_WIDGET_GROUP()
ENDIF
#ENDIF
SET_MAX_WANTED_LEVEL(0)
RESET_BLIMP()
CREATE_PILOT()
CREATE_BLIMP_BLIP()
RESET_PLAYER_INTO_HELICOPTER()
WHILE (TRUE)
// Display 'Placeholder Mission'
SET_TEXT_COLOUR(255, 255, 255, 255)
SET_TEXT_SCALE(0.75, 0.9)
SET_TEXT_WRAP(0.0, 1.0)
DISPLAY_TEXT(0.05, 0.63, "PLCHLD_MISS")
// Display Pass and Fail instructions
SET_TEXT_COLOUR(255, 255, 255, 255)
SET_TEXT_SCALE(0.4, 0.45)
SET_TEXT_WRAP(0.0, 1.0)
DISPLAY_TEXT(0.05, 0.7, "PLCHLD_PASS")
#IF IS_DEBUG_BUILD
CHECK_FOR_BLIMP_BLIP_TOGGLE()
DEBUG_Check_Debug_Keys()
#ENDIF
UPDATE_BLIMP()
WAIT(0)
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT