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

230 lines
7.1 KiB
Scheme
Executable File

USING "script_oddjob_funcs.sch"
USING "Towing.sch"
FUNC BOOL SETUP_SPECIAL_CAM(TOW_CAM_ARGS& towArgs, ENTITY_INDEX entity, INT& iToggle)
DESTROY_CAM(towArgs.towCam)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
VECTOR vAttach
VECTOR vPoint
FLOAT fFov
MODEL_NAMES mnBrokenDownVehicle
UNUSED_PARAMETER(iToggle)
SWITCH chosenNodeType
CASE NODE_TYPE_DYNAMIC
vAttach = <<-1.4812, -0.4765, 0.7772>> //<<-2.0617, -0.0898, 1.0993>>
vPoint = <<0.6369, 1.5805, 0.2461>> //<<-0.1480, 2.0858, 0.3219>>
fFov = 50
BREAK
CASE NODE_TYPE_HANDI //and sexxxx
//outside of car
//IF iToggle = 0
vAttach = <<0.4088, 2.5854, 1.3483>>
vPoint = <<-0.1605, -0.2434, 0.5274>>
fFov = 50
//iToggle = 1
// ELSE
// //insdie of car
// vAttach = <<-0.4883, -2.1660, 1.1279>>
// vPoint = <<0.3760, 0.6225, 0.4367>>
// fFov = 52.3985
// iToggle = 0
// ENDIF
BREAK
CASE NODE_TYPE_ABANDON
mnBrokenDownVehicle = GET_ENTITY_MODEL(entity)
SWITCH mnBrokenDownVehicle
CASE buccaneer
vAttach = <<0.2323, 0.4607, 0.6705>>
vPoint = <<1.2216, -2.3210, 0.1387>>
PRINTLN("MODEL = BUCCANEER")
BREAK
//---------------------------------------
CASE FUTO
vAttach = <<0.2335, 0.4782, 0.6074>>
vPoint = <<1.2177, -2.2207, -0.2570>>
PRINTLN("MODEL = FUTO")
BREAK
//---------------------------------------
CASE MANANA
vAttach = <<0.2692, 0.2233, 0.5622>>
vPoint = <<1.1703, -2.3976, -0.5863>>
PRINTLN("MODEL = MANANA")
BREAK
//---------------------------------------
CASE RUINER
vAttach = <<0.3012, 0.2936, 0.3770>>
vPoint = <<0.9845, -2.4433, -0.6440>>
PRINTLN("MODEL = RUINER")
BREAK
//---------------------------------------
CASE TORNADO3
vAttach = <<0.3196, 0.6089, 0.4949>>
vPoint = <<0.8955, -2.2021, -0.3804>>
PRINTLN("MODEL = TORNADO3")
BREAK
//---------------------------------------
CASE VOODOO2
vAttach = <<0.3016, 0.5664, 0.5030>>
vPoint = <<0.7218, -2.1898, -0.6047>>
PRINTLN("MODEL = VOODOO2")
BREAK
//---------------------------------------
CASE SURFER2
vAttach = <<0.1942, 1.6207, 0.6794>>
vPoint = <<0.9982, -1.1537, -0.1309>>
PRINTLN("MODEL = SURFER2")
BREAK
//---------------------------------------
CASE EMPEROR2
vAttach = <<0.2288, 0.5263, 0.6031>>
vPoint = <<1.3152, -2.0483, -0.4883>>
PRINTLN("MODEL = EMPEROR2")
BREAK
//---------------------------------------
CASE STANIER
vAttach = <<0.2013, 0.6176, 0.5514>>
vPoint = <<1.0234, -2.1522, -0.2563>>
PRINTLN("MODEL = STANIER")
BREAK
//---------------------------------------
CASE TAILGATER
vAttach = <<0.2166, 0.6582, 0.5162>>
vPoint = <<1.2456, -2.0704, -0.1882>>
PRINTLN("MODEL = TAILGATER")
BREAK
//---------------------------------------
DEFAULT
vAttach = <<-0.0255, 0.4396, 0.6165>>
vPoint = <<2.1178, -1.5317, -0.1047>>
PRINTLN("USING DEFAULT")
BREAK
ENDSWITCH
fFov = 61.4303
BREAK
CASE NODE_TYPE_ACCIDENT
vAttach = <<3.1631, 4.1912, 1.4362>>
vPoint = <<1.1460, 2.1282, 0.6146>>
fFov = 45
BREAK
ENDSWITCH
IF NOT DOES_CAM_EXIST(towArgs.towCam)
towArgs.towCam = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0,0,0>>, fFov, FALSE)
ENDIF
ATTACH_CAM_TO_ENTITY(towArgs.towCam, entity, vAttach)
POINT_CAM_AT_ENTITY(towArgs.towCam, entity, vPoint)
SET_CAM_CONTROLS_MINI_MAP_HEADING(towArgs.towCam, TRUE)
SET_CAM_ACTIVE(towArgs.towCam, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
RETURN TRUE
ENDFUNC
//Camera that looks at the train from inside the stalled car
FUNC BOOL SETUP_TRAIN_CAM(TOW_CAM_ARGS& towArgs, ENTITY_INDEX entity, ENTITY_INDEX train, INT& iToggle, BOOL bDisablePedCam)
VECTOR vTemp, vTemp2
FLOAT fDistance
DEBUG_MESSAGE("SETUP_TRAIN_CAM")
DESTROY_CAM(towArgs.towCam)
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(towArgs.towCam)
towArgs.towCam = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<0,0,0>>, <<0,0,0>>, 45, FALSE)
SET_CAM_CONTROLS_MINI_MAP_HEADING(towArgs.towCam, TRUE)
ENDIF
IF bDisablePedCam
IF iToggle = 0
iToggle = 1
ENDIF
ENDIF
IF iToggle = 0
PRINTLN("iToggle = 0")
vTemp = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(entity, <<0.8612, 0.2242, 0.6459>>)
fDistance = GET_ENTITY_DISTANCE_FROM_LOCATION(train, vTemp)
vTemp2 = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(entity, <<-1.0507, -0.0044, 0.6659>>)
IF fDistance < GET_ENTITY_DISTANCE_FROM_LOCATION(train, vTemp2)
ATTACH_CAM_TO_ENTITY(towArgs.towCam, entity, <<-1.0507, -0.0044, 0.6659>>)
//SET_CAM_COORD(towArgs.towCam, vTemp2)
POINT_CAM_AT_ENTITY(towArgs.towCam, entity, <<1.9171, 0.4113, 0.5271>>)
SET_CAM_FOV(towArgs.towCam, 45.0000)
// Stop train scene if it's running
IF IS_AUDIO_SCENE_ACTIVE("TOWING_FOCUS_CAM_INSIDE_TRAIN")
STOP_AUDIO_SCENE("TOWING_FOCUS_CAM_INSIDE_TRAIN")
PRINTLN("STOPPING AUDIO SCENE - TOWING_FOCUS_CAM_INSIDE_TRAIN")
ENDIF
// Start inside care if it's not running
IF NOT IS_AUDIO_SCENE_ACTIVE("TOWING_FOCUS_CAM_INSIDE_CAR")
START_AUDIO_SCENE("TOWING_FOCUS_CAM_INSIDE_CAR")
PRINTLN("STARTING AUDIO SCENE - TOWING_FOCUS_CAM_INSIDE_CAR")
ENDIF
ELSE
ATTACH_CAM_TO_ENTITY(towArgs.towCam, entity, <<0.8612, 0.2242, 0.6459>>)
//SET_CAM_COORD(towArgs.towCam, vTemp)
POINT_CAM_AT_ENTITY(towArgs.towCam, entity, <<-2.1158, -0.0459, 0.3911>>)
SET_CAM_FOV(towArgs.towCam, 50.0000)
// Stop train scene if it's running
IF IS_AUDIO_SCENE_ACTIVE("TOWING_FOCUS_CAM_INSIDE_TRAIN")
STOP_AUDIO_SCENE("TOWING_FOCUS_CAM_INSIDE_TRAIN")
PRINTLN("STOPPING AUDIO SCENE - TOWING_FOCUS_CAM_INSIDE_TRAIN")
ENDIF
// Start inside care if it's not running
IF NOT IS_AUDIO_SCENE_ACTIVE("TOWING_FOCUS_CAM_INSIDE_CAR")
START_AUDIO_SCENE("TOWING_FOCUS_CAM_INSIDE_CAR")
PRINTLN("STARTING AUDIO SCENE - TOWING_FOCUS_CAM_INSIDE_CAR")
ENDIF
ENDIF
iToggle++
ELIF iToggle = 1
PRINTLN("iToggle = 1")
ATTACH_CAM_TO_ENTITY(towArgs.towCam, train, <<-0.0021, 6.5179, 3.2083>>)
POINT_CAM_AT_ENTITY(towArgs.towCam, train, <<0.0107, 9.1227, 1.7200>>)
SET_CAM_FOV(towArgs.towCam, 67.9193)
iToggle = 0
IF IS_AUDIO_SCENE_ACTIVE("TOWING_FOCUS_CAM_INSIDE_CAR")
STOP_AUDIO_SCENE("TOWING_FOCUS_CAM_INSIDE_CAR")
PRINTLN("STOPPING AUDIO SCENE INSIDE CAR - 02")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("TOWING_FOCUS_CAM_INSIDE_TRAIN")
START_AUDIO_SCENE("TOWING_FOCUS_CAM_INSIDE_TRAIN")
PRINTLN("GOING INSIDE TRAIN")
ENDIF
ENDIF
SET_CAM_ACTIVE(towArgs.towCam, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
towArgs.iCamTime = GET_GAME_TIMER()
RETURN TRUE
ENDFUNC
PROC CLEANUP_CAM(TOW_CAM_ARGS& towArgs)
towArgs.iCamTime = 0
DESTROY_CAM(towArgs.towCam)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
ENDPROC