1098 lines
42 KiB
Python
Executable File
1098 lines
42 KiB
Python
Executable File
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : rollercoaster.sc
|
|
// AUTHOR : Aaron Gandaa
|
|
// DESCRIPTION : This Controls The Rollercoaster
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
//----------------------
|
|
// INCLUDES
|
|
//----------------------
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "rgeneral_include.sch"
|
|
USING "commands_brains.sch"
|
|
USING "RC_Helper_Functions.sch"
|
|
USING "net_fps_cam.sch"
|
|
USING "Fairground_Shared.sch"
|
|
USING "RC_Asset_Public.sch"
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
USING "shared_debug.sch"
|
|
#ENDIF
|
|
|
|
//----------------------
|
|
// ENUM
|
|
//----------------------
|
|
ENUM eRCoasterState
|
|
RCS_SPEEDUP,
|
|
RCS_ACTIVE,
|
|
RCS_SLOWDOWN,
|
|
RCS_STOPPED
|
|
ENDENUM
|
|
|
|
ENUM eRCoasterSoundCmd
|
|
RCSND_NULL,
|
|
RCSND_PLAYBRAKES,
|
|
RCSND_PLAYPULLOFF,
|
|
RCSND_PLAYBIGSTOP,
|
|
RCSND_PLAYCROWD,
|
|
RCSND_PLAYRATCHET,
|
|
RCSND_STOPRATCHET
|
|
ENDENUM
|
|
|
|
//----------------------
|
|
// CONSTANTS
|
|
//----------------------
|
|
CONST_INT NUM_POINTS 234
|
|
|
|
//----------------------
|
|
// STRUCT
|
|
//----------------------
|
|
STRUCT SPEED_CHANGE
|
|
INT iPointIndex
|
|
FLOAT fNewFactor
|
|
eRCoasterSoundCmd sndCommand
|
|
ENDSTRUCT
|
|
|
|
STRUCT RCOASTER_CAR
|
|
VECTOR vPosition
|
|
FLOAT tIValue = 0.0
|
|
INT iPointIndex[4] // we interpolate between p1 and p2
|
|
OBJECT_INDEX mObjectID
|
|
FLOAT fPointIndex
|
|
BOOL bIsSourceCar
|
|
ENDSTRUCT
|
|
|
|
//----------------------
|
|
// VARIABLES
|
|
//----------------------
|
|
MODEL_NAMES dummyRCModel = PROP_LD_TEST_01
|
|
ASSET_REQUESTER asRequester
|
|
|
|
VECTOR vSplinePoint[NUM_POINTS]
|
|
VECTOR vCarOffset = <<0, 0, 1.7>>
|
|
INT iSplinePointsUsed
|
|
|
|
BOOL bInfiniteRide = FALSE
|
|
|
|
FLOAT tInterpolateRate = 0
|
|
|
|
RCOASTER_CAR sourceCar
|
|
RCOASTER_CAR targetCar
|
|
eRCoasterState rCoasterState
|
|
FIRST_PERSON_CAM_STRUCT fpsCam
|
|
BOOL bSkipped = FALSE
|
|
|
|
OBJECT_INDEX rollerCarTurnOffProp[4]
|
|
CAMERA_INDEX initialCamera
|
|
|
|
INT iRollerSoundID = -1
|
|
INT iRatchetSoundID = -1
|
|
INT iPadVibrateTime = 32
|
|
INT iPadVibrateFreq = 32
|
|
INT iPadRungSkip = 3
|
|
|
|
INT iNextSpeechTime = 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
BOOL bShowDebugPoint
|
|
INT iDebugPoint
|
|
BOOL bShowDebugCar
|
|
BOOL bReset
|
|
#ENDIF
|
|
|
|
FLOAT fSinShakeFactor = 0.25
|
|
FLOAT fSpeedMultiple = 1.75
|
|
FLOAT fSpeedFactor = 1.0
|
|
INT iSpeedCounter = 0
|
|
|
|
SPEED_CHANGE speedChange[32]
|
|
INT iSpeedChangesUsed = 0
|
|
INT iSpeedPointShift = 0
|
|
|
|
//----------------------
|
|
// FUNCTIONS
|
|
//----------------------
|
|
|
|
/// PURPOSE:
|
|
/// Adds a point to the spline list
|
|
/// PARAMS:
|
|
/// x - xcoord
|
|
/// y - ycoord
|
|
/// z - zcoord
|
|
PROC ADD_SPEED_CHANGE(INT iRung, FLOAT sf, eRCoasterSoundCmd snd)
|
|
|
|
IF (iSpeedChangesUsed >= COUNT_OF(speedChange))
|
|
speedChange[COUNT_OF(speedChange) - 1].iPointIndex = 232
|
|
speedChange[COUNT_OF(speedChange) - 1].fNewFactor = 0.01
|
|
speedChange[COUNT_OF(speedChange) - 1].sndCommand = RCSND_NULL
|
|
SCRIPT_ASSERT("EXTEND SPEED CHANGE ARRAY")
|
|
EXIT
|
|
ENDIF
|
|
|
|
speedChange[iSpeedChangesUsed].iPointIndex = iRung + iSpeedPointShift
|
|
IF (speedChange[iSpeedChangesUsed].iPointIndex >= NUM_POINTS)
|
|
speedChange[iSpeedChangesUsed].iPointIndex = NUM_POINTS - 1
|
|
ENDIF
|
|
|
|
speedChange[iSpeedChangesUsed].fNewFactor = sf
|
|
speedChange[iSpeedChangesUsed].sndCommand = snd
|
|
iSpeedChangesUsed ++
|
|
ENDPROC
|
|
|
|
FUNC VECTOR GET_SPLINE_POINT(INT sp)
|
|
INT ind = (sp % iSplinePointsUsed)
|
|
RETURN vSplinePoint[ind]
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Adds a point to the spline list
|
|
/// PARAMS:
|
|
/// x - xcoord
|
|
/// y - ycoord
|
|
/// z - zcoord
|
|
PROC ADD_ROLLER_COASTER_SPLINE_POINT(FLOAT x, FLOAT y, FLOAT z)
|
|
vSplinePoint[NUM_POINTS - 1 - iSplinePointsUsed].x = x
|
|
vSplinePoint[NUM_POINTS - 1 - iSplinePointsUsed].y = y
|
|
vSplinePoint[NUM_POINTS - 1 - iSplinePointsUsed].z = z
|
|
iSplinePointsUsed ++
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Adds all point to roller coaster spline
|
|
PROC SETUP_ROLLER_COASTER_POINTS()
|
|
iSplinePointsUsed = 0
|
|
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1642.8782, -1123.9034, 16.8750)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1644.4199, -1125.7399, 16.8748)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1645.8953, -1127.4989, 16.8755)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1647.4370, -1129.3353, 16.8753)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1648.7561, -1130.9084, 16.8753)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1650.2980, -1132.7448, 16.8750)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1651.6171, -1134.3177, 16.8751)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1653.1589, -1136.1542, 16.8748)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1654.4781, -1137.7273, 16.8748)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1656.0354, -1139.5836, 16.8755)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1657.5308, -1141.3647, 16.8737)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1658.9907, -1143.1060, 16.8658)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1660.4988, -1144.9023, 16.6238)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1661.9602, -1146.6438, 16.1105)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1663.4008, -1148.3608, 15.6586)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1664.8406, -1150.0760, 15.3486)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1666.3196, -1151.8391, 15.2158)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1667.8478, -1153.6605, 15.2110)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.4388, -1155.5143, 15.2169)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1671.2697, -1156.9758, 15.2531)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1673.3928, -1158.0062, 15.3676)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1675.6748, -1158.6094, 15.5443)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1678.0298, -1158.7679, 15.7925)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1680.3654, -1158.4532, 16.0340)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1682.5842, -1157.6477, 16.2480)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1684.6084, -1156.4354, 16.4506)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1686.3657, -1154.8607, 16.6232)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1687.7472, -1152.9507, 16.7552)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1688.7185, -1150.8003, 16.8714)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1689.2633, -1148.5048, 16.9875)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1689.3574, -1146.1498, 17.1035)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1688.9308, -1143.8290, 17.2199)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1688.0691, -1141.6328, 17.3360)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1686.8066, -1139.6399, 17.4523)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1685.1660, -1137.9503, 17.5683)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1683.2061, -1136.6370, 17.6846)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1681.0320, -1135.7218, 17.8007)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1678.7236, -1135.2341, 17.9169)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1676.3694, -1135.2588, 18.0330)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1674.0613, -1135.7456, 18.1492)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1671.8885, -1136.6627, 18.2653)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.9409, -1137.9832, 18.3814)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1668.3221, -1139.7002, 18.4976)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1667.0603, -1141.6923, 18.6138)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1666.1997, -1143.8888, 18.7300)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1665.8157, -1146.2086, 18.8460)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1665.9152, -1148.5652, 18.9622)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1666.4609, -1150.8588, 19.0783)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1667.4324, -1153.0096, 19.1946)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1668.8496, -1154.8859, 19.3106)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1670.6064, -1156.4585, 19.4267)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1672.6309, -1157.6694, 19.5429)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1674.7874, -1158.4460, 19.6567)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1676.3906, -1158.7170, 19.7777)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1678.2314, -1158.8010, 19.9530)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1680.2209, -1158.6627, 20.1677)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1682.4105, -1158.2969, 20.4143)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1684.6401, -1157.6542, 20.6740)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1686.8926, -1156.7153, 20.9358)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1689.1161, -1155.4551, 21.1866)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1691.2562, -1153.8446, 21.4132)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1693.2592, -1151.8575, 21.6023)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1695.0718, -1149.4667, 21.7407)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1696.5510, -1146.8528, 21.8203)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1697.6345, -1144.2366, 21.8563)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.3623, -1141.6365, 21.8562)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.7628, -1139.0817, 21.8259)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.8662, -1136.6012, 21.7715)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.7009, -1134.2245, 21.6989)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.2970, -1131.9816, 21.6144)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1697.6823, -1129.9008, 21.5238)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1696.8884, -1128.0118, 21.4334)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1695.9435, -1126.3444, 21.3490)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1694.7991, -1124.8711, 21.2657)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1693.0948, -1123.2388, 21.1190)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1691.1541, -1121.8994, 20.9810)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1689.0249, -1120.8865, 20.8585)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1686.7622, -1120.2255, 20.7582)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1684.4233, -1119.9338, 20.6861)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1682.0681, -1120.0188, 20.6475)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1679.7571, -1120.4772, 20.6471)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1677.5493, -1121.2968, 20.6883)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1675.5024, -1122.4581, 20.7732)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1673.6677, -1123.9282, 20.9032)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1672.0916, -1125.6687, 21.0783)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1670.8145, -1127.6348, 21.2971)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.8662, -1129.7750, 21.5574)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.2704, -1132.0343, 21.8556)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.0382, -1134.3553, 22.1878)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.1746, -1136.6805, 22.5487)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.6760, -1138.9525, 22.9324)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1670.5276, -1141.1157, 23.3331)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1671.7087, -1143.1173, 23.7443)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1673.1904, -1144.9082, 24.1589)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1674.9377, -1146.4446, 24.5706)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1676.9064, -1147.6877, 24.9723)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1679.0508, -1148.6053, 25.3575)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1681.3174, -1149.1740, 25.7202)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1683.6499, -1149.3767, 26.0545)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1685.9912, -1149.2075, 26.3554)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1688.2795, -1148.6644, 26.6179)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1690.4568, -1147.7628, 26.8390)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1692.4642, -1146.5227, 27.0161)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1694.2517, -1144.9762, 27.1481)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1695.7679, -1143.1614, 27.2346)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1696.9746, -1141.1267, 27.2771)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1697.8401, -1138.9249, 27.2778)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.3427, -1136.6143, 27.2402)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.4657, -1134.2546, 27.1688)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1698.2115, -1131.9075, 27.0692)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1697.5850, -1129.6331, 26.9473)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1696.6025, -1127.4823, 26.7859)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1695.2893, -1125.5192, 26.5684)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1693.6843, -1123.7948, 26.2981)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1691.8325, -1122.3545, 25.9974)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1689.7773, -1121.2262, 25.6751)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1687.7130, -1120.2112, 25.2977)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1685.6340, -1119.2595, 24.7922)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1683.5103, -1118.3479, 24.1724)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1681.3713, -1117.4534, 23.4526)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1679.2483, -1116.5497, 22.6476)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1677.1699, -1115.6144, 21.7713)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1675.1399, -1114.6670, 20.8298)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1673.2024, -1113.7692, 19.8983)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1671.3074, -1112.8669, 19.0396)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1669.3944, -1111.9049, 18.3093)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1667.4021, -1110.8213, 17.7619)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1665.3357, -1109.6078, 17.4552)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1663.5355, -1108.4518, 17.3517)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1661.6692, -1107.1594, 17.3564)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1659.7676, -1105.7582, 17.4696)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1657.8624, -1104.2756, 17.6914)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1655.9844, -1102.7385, 18.0218)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1654.1650, -1101.1741, 18.4604)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1652.4335, -1099.6101, 19.0069)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1650.7800, -1098.0374, 19.6917)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1649.1323, -1096.3979, 20.4530)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1647.4886, -1094.7059, 21.0879)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1645.8455, -1092.9713, 21.3809)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1644.2002, -1091.1968, 21.0723)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1642.6226, -1089.4341, 20.1230)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1641.1335, -1087.7332, 18.9288)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1639.7681, -1086.1489, 17.8822)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1638.4410, -1084.6035, 17.2995)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1636.9349, -1082.8141, 17.1529)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1635.3969, -1080.9722, 17.1524)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1633.8970, -1079.2336, 17.1531)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1632.3602, -1077.3932, 17.1529)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1631.0459, -1075.8159, 17.1529)
|
|
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1629.5092, -1073.9755, 17.1526)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1628.1962, -1072.3995, 17.1529)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1626.8193, -1070.7322, 17.4133)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1625.4014, -1069.0214, 17.9281)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1623.9257, -1067.2517, 18.5038)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1622.4509, -1065.4816, 19.0797)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1620.9749, -1063.7124, 19.6554)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1619.4995, -1061.9426, 20.2312)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1618.0242, -1060.1727, 20.8071)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1616.4891, -1058.3323, 21.2475)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1614.9408, -1056.5389, 21.5640)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1613.1627, -1054.9889, 21.7555)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1611.1027, -1053.8331, 21.9471)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1608.8370, -1053.1915, 22.1368)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1606.4882, -1053.0118, 22.3259)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1604.1523, -1053.3499, 22.5146)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1601.9521, -1054.1923, 22.7019)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1599.9624, -1055.4534, 22.8885)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1598.3180, -1057.1431, 23.0742)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1597.0596, -1059.1360, 23.2587)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1596.2314, -1061.3428, 23.4426)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1595.9446, -1063.6799, 23.6253)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1596.1294, -1066.0291, 23.8069)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1596.8149, -1068.2800, 23.9876)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1597.9860, -1070.3235, 24.1670)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1599.5387, -1072.0948, 24.3456)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1601.4530, -1073.4615, 24.5229)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1603.6150, -1074.3973, 24.6991)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1605.9164, -1074.8805, 24.8739)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1608.2719, -1074.8021, 25.0476)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1610.5616, -1074.2589, 25.2202)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1612.6801, -1073.2433, 25.3914)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1614.5176, -1071.7698, 25.5611)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1616.0275, -1069.9612, 25.7295)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1617.0846, -1067.8661, 25.8962)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1617.6753, -1065.5863, 26.0615)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1617.8007, -1063.2428, 26.2248)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1617.3602, -1060.9271, 26.3871)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1616.4683, -1058.7489, 26.5474)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1615.1421, -1056.8156, 26.7056)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1613.4026, -1055.2264, 26.8622)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1611.3824, -1054.0143, 27.0169)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1609.1584, -1053.2924, 27.1687)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1606.8099, -1053.0631, 27.3184)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1604.4631, -1053.3021, 27.4662)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1602.2571, -1054.0916, 27.6101)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1600.2434, -1055.3115, 27.7515)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1598.5408, -1056.9186, 27.8892)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1597.2394, -1058.8844, 28.0238)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1596.3568, -1061.0701, 28.1540)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1595.9899, -1063.3827, 28.2781)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1596.1273, -1065.7351, 28.3966)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1596.7319, -1068.0179, 28.5072)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1597.8579, -1070.0784, 28.6005)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1599.3303, -1071.9681, 28.6213)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1600.8860, -1073.8184, 28.4356)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1602.4453, -1075.6714, 27.9888)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1604.0881, -1077.6168, 27.4895)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1605.4225, -1079.2003, 27.0316)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1606.9303, -1080.9944, 26.8780)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1608.3499, -1082.6810, 26.9447)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1609.3530, -1083.8743, 27.4738)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1611.1270, -1085.9802, 28.7125)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1612.7308, -1087.8850, 29.8581)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1614.0735, -1089.4801, 30.4043)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1614.8247, -1090.3718, 30.4459)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1615.6266, -1091.3273, 30.3721)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1616.6858, -1092.5889, 30.0253)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1617.4144, -1093.4617, 29.5944)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1618.7480, -1095.0547, 28.8046)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1620.6028, -1097.2742, 27.7044)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1622.8733, -1099.9885, 26.3576)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1624.0875, -1101.4403, 25.6371)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1625.3727, -1102.9783, 24.8741)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1626.7218, -1104.5914, 24.0733)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1628.1248, -1106.2698, 23.2405)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1629.5734, -1108.0032, 22.3803)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1631.0604, -1109.7802, 21.4979)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1632.5737, -1111.5923, 20.5988)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1634.1086, -1113.4274, 19.6878)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1635.6544, -1115.2764, 18.7701)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1636.9026, -1116.7670, 18.0427)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1638.1215, -1118.2239, 17.4692)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1639.5778, -1119.9695, 17.0890)
|
|
ADD_ROLLER_COASTER_SPLINE_POINT( -1641.2195, -1121.9272, 16.8752)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOASTER]: Points Used", iSplinePointsUsed)
|
|
ENDPROC
|
|
|
|
PROC SETUP_RCOASTER_CAR(RCOASTER_CAR &rp, INT index, FLOAT t = 0.0)
|
|
INT i
|
|
|
|
/*
|
|
rp.iPointIndex[0] = index + 2
|
|
rp.iPointIndex[1] = index + 1
|
|
rp.iPointIndex[2] = index
|
|
rp.iPointIndex[3] = index - 1
|
|
*/
|
|
|
|
rp.iPointIndex[0] = index - 2
|
|
rp.iPointIndex[1] = index - 1
|
|
rp.iPointIndex[2] = index
|
|
rp.iPointIndex[3] = index + 1
|
|
|
|
// wrap these so that they don't go over spline index
|
|
REPEAT COUNT_OF(rp.iPointIndex) i
|
|
IF (rp.iPointIndex[i] < 0)
|
|
rp.iPointIndex[i] += iSplinePointsUsed
|
|
ENDIF
|
|
|
|
IF (rp.iPointIndex[i] >= iSplinePointsUsed)
|
|
rp.iPointIndex[i] -= iSplinePointsUsed
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
// set t
|
|
rp.tIValue = t
|
|
rp.vPosition = CALCULATE_SPLINE_POINT(vSplinePoint[rp.iPointIndex[0]], vSplinePoint[rp.iPointIndex[1]], vSplinePoint[rp.iPointIndex[2]], vSplinePoint[rp.iPointIndex[3]], rp.tIValue)
|
|
rp.vPosition += vCarOffset
|
|
|
|
rp.mObjectID = CREATE_OBJECT_NO_OFFSET(dummyRCModel, rp.vPosition)
|
|
IF IS_ENTITY_OK(rp.mObjectID)
|
|
SET_ENTITY_COLLISION(rp.mObjectID, FALSE)
|
|
SET_ENTITY_VISIBLE(rp.mObjectID, FALSE)
|
|
FREEZE_ENTITY_POSITION(rp.mObjectID, TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC UPDATE_RCOASTER_CAR(RCOASTER_CAR &rp)
|
|
FLOAT oldt = rp.tIValue
|
|
|
|
rp.tIValue += (tInterpolateRate * fSpeedFactor * fSpeedMultiple * TIMESTEP())
|
|
IF (rp.tIValue >= 1.0)
|
|
rp.tIValue -= 1.0
|
|
|
|
/*
|
|
rp.iPointIndex[0] = rp.iPointIndex[1]
|
|
rp.iPointIndex[1] = rp.iPointIndex[2]
|
|
rp.iPointIndex[2] = rp.iPointIndex[3]
|
|
rp.iPointIndex[3] --
|
|
IF (rp.iPointIndex[3] < 0)
|
|
rp.iPointIndex[3] += iSplinePointsUsed
|
|
ENDIF
|
|
*/
|
|
|
|
rp.iPointIndex[0] = rp.iPointIndex[1]
|
|
rp.iPointIndex[1] = rp.iPointIndex[2]
|
|
rp.iPointIndex[2] = rp.iPointIndex[3]
|
|
rp.iPointIndex[3] ++
|
|
IF (rp.iPointIndex[3] >= iSplinePointsUsed)
|
|
rp.iPointIndex[3] -= iSplinePointsUsed
|
|
ENDIF
|
|
|
|
IF rp.iPointIndex[3] % iPadRungSkip = 0
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL, iPadVibrateTime, iPadVibrateFreq)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
rp.vPosition = CALCULATE_SPLINE_POINT(vSplinePoint[rp.iPointIndex[0]], vSplinePoint[rp.iPointIndex[1]], vSplinePoint[rp.iPointIndex[2]], vSplinePoint[rp.iPointIndex[3]], rp.tIValue)
|
|
rp.vPosition += vCarOffset
|
|
IF IS_ENTITY_OK(rp.mObjectID) AND (oldt <> rp.tIValue)
|
|
SET_ENTITY_COORDS_NO_OFFSET(rp.mObjectID, rp.vPosition)
|
|
ENDIF
|
|
|
|
rp.fPointIndex = TO_FLOAT(rp.iPointIndex[1]) + rp.tIValue
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Hides the Rollercoaster Props
|
|
PROC HIDE_ROLLERCOASTER_PROPS()
|
|
INT i
|
|
|
|
// 140.00 DEGRESS
|
|
|
|
rollerCarTurnOffProp[0] = GET_CLOSEST_OBJECT_OF_TYPE(<<-1643.5242, -1124.6805, 17.4326>>, 2.0, PROP_ROLLER_CAR_01)
|
|
rollerCarTurnOffProp[1] = GET_CLOSEST_OBJECT_OF_TYPE(<<-1645.1455, -1126.6127, 17.4326>>, 2.0, PROP_ROLLER_CAR_02)
|
|
rollerCarTurnOffProp[2] = GET_CLOSEST_OBJECT_OF_TYPE(<<-1646.7676, -1128.5453, 17.4326>>, 2.0, PROP_ROLLER_CAR_02)
|
|
rollerCarTurnOffProp[3] = GET_CLOSEST_OBJECT_OF_TYPE(<<-1648.3896, -1130.4784, 17.4326>>, 2.0, PROP_ROLLER_CAR_02)
|
|
|
|
REPEAT COUNT_OF(rollerCarTurnOffProp) i
|
|
|
|
//
|
|
|
|
IF DOES_ENTITY_EXIST(rollerCarTurnOffProp[i])
|
|
SET_ENTITY_AS_MISSION_ENTITY(rollerCarTurnOffProp[i])
|
|
SET_ENTITY_VISIBLE(rollerCarTurnOffProp[i], FALSE)
|
|
SET_ENTITY_COLLISION(rollerCarTurnOffProp[i], FALSE)
|
|
SET_ENTITY_INVINCIBLE(rollerCarTurnOffProp[i], TRUE)
|
|
ENDIF
|
|
//SAFE_RELEASE_OBJECT(rollerCarTurnOffProp[i])
|
|
ENDREPEAT
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Shows the Rollercoaster Props
|
|
PROC SHOW_ROLLERCOASTER_PROPS()
|
|
INT i
|
|
|
|
IF NOT IS_ENTITY_OK(rollerCarTurnOffProp[0])
|
|
rollerCarTurnOffProp[0] = CREATE_OBJECT(PROP_ROLLER_CAR_01, <<-1643.5242, -1124.6805, 17.4326>>)
|
|
ENDIF
|
|
IF NOT IS_ENTITY_OK(rollerCarTurnOffProp[1])
|
|
rollerCarTurnOffProp[1] = CREATE_OBJECT(PROP_ROLLER_CAR_02, <<-1645.1455, -1126.6127, 17.4326>>)
|
|
ENDIF
|
|
IF NOT IS_ENTITY_OK(rollerCarTurnOffProp[2])
|
|
rollerCarTurnOffProp[2] = CREATE_OBJECT(PROP_ROLLER_CAR_02, <<-1646.7676, -1128.5453, 17.4326>>)
|
|
ENDIF
|
|
IF NOT IS_ENTITY_OK(rollerCarTurnOffProp[3])
|
|
rollerCarTurnOffProp[3] = CREATE_OBJECT(PROP_ROLLER_CAR_02, <<-1648.3896, -1130.4784, 17.4326>>)
|
|
ENDIF
|
|
|
|
|
|
REPEAT COUNT_OF(rollerCarTurnOffProp) i
|
|
IF IS_ENTITY_OK(rollerCarTurnOffProp[i])
|
|
SET_ENTITY_HEADING(rollerCarTurnOffProp[i], 140.0)
|
|
SET_ENTITY_VISIBLE(rollerCarTurnOffProp[i], TRUE)
|
|
SET_ENTITY_COLLISION(rollerCarTurnOffProp[i], TRUE)
|
|
FREEZE_ENTITY_POSITION(rollerCarTurnOffProp[i], TRUE)
|
|
SET_ENTITY_INVINCIBLE(rollerCarTurnOffProp[i], TRUE)
|
|
SAFE_RELEASE_OBJECT(rollerCarTurnOffProp[i])
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
PROC CALCULATE_SPEED_FACTOR()
|
|
FLOAT fPointDiff
|
|
FLOAT fSpeedDiff
|
|
FLOAT t
|
|
INT is2 = iSpeedCounter + 1
|
|
|
|
/*
|
|
IF (is2 >= COUNT_OF(speedChange))
|
|
is2 -= COUNT_OF(speedChange)
|
|
ENDIF
|
|
*/
|
|
|
|
IF (iSpeedCounter >= COUNT_OF(speedChange))
|
|
iSpeedCounter = 0
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (is2 >= COUNT_OF(speedChange))
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (sourceCar.fPointIndex < speedChange[iSpeedCounter].iPointIndex)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (sourceCar.fPointIndex >= speedChange[is2].iPointIndex)
|
|
iSpeedCounter = is2
|
|
CPRINTLN(DEBUG_AMBIENT, "SPEED CHANGE HIT:", iSpeedCounter)
|
|
|
|
/*
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID())
|
|
// sound
|
|
SWITCH (speedChange[iSpeedCounter].sndCommand)
|
|
CASE RCSND_PLAYBIGSTOP
|
|
CPRINTLN(DEBUG_AMBIENT, " - SPEED CHANGE BIG STOP")
|
|
PLAY_SOUND_FROM_ENTITY(-1, "BIG_STOP", PLAYER_PED_ID(), "LEVIATHAN_SOUNDSET")
|
|
BREAK
|
|
CASE RCSND_PLAYBRAKES
|
|
CPRINTLN(DEBUG_AMBIENT, " - SPEED CHANGE BRAKES")
|
|
PLAY_SOUND_FROM_ENTITY(-1, "BREAKS", PLAYER_PED_ID(), "LEVIATHAN_SOUNDSET")
|
|
BREAK
|
|
CASE RCSND_PLAYCROWD
|
|
CPRINTLN(DEBUG_AMBIENT, " - SPEED CHANGE CROWD")
|
|
PLAY_SOUND_FROM_ENTITY(-1, "CROWD", PLAYER_PED_ID(), "LEVIATHAN_SOUNDSET")
|
|
BREAK
|
|
CASE RCSND_PLAYPULLOFF
|
|
CPRINTLN(DEBUG_AMBIENT, " - SPEED CHANGE PULL OFF")
|
|
PLAY_SOUND_FROM_ENTITY(-1, "PULL_OFF", PLAYER_PED_ID(), "LEVIATHAN_SOUNDSET")
|
|
BREAK
|
|
CASE RCSND_PLAYRATCHET
|
|
SAFE_STOP_AND_RELEASE_SOUND_ID(iRatchetSoundID)
|
|
CPRINTLN(DEBUG_AMBIENT, " - SPEED CHANGE RATCHET")
|
|
|
|
iRatchetSoundID = GET_SOUND_ID()
|
|
PLAY_SOUND_FROM_ENTITY(iRatchetSoundID, "PULL_OFF", PLAYER_PED_ID(), "LEVIATHAN_SOUNDSET")
|
|
BREAK
|
|
CASE RCSND_STOPRATCHET
|
|
CPRINTLN(DEBUG_AMBIENT, " - SPEED CHANGE RATCHET STOP")
|
|
SAFE_STOP_AND_RELEASE_SOUND_ID(iRatchetSoundID)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
*/
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (is2 >= COUNT_OF(speedChange))
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (speedChange[iSpeedCounter].fNewFactor = speedChange[is2].fNewFactor)
|
|
fspeedFactor = speedChange[iSpeedCounter].fNewFactor
|
|
EXIT
|
|
ENDIF
|
|
|
|
fPointDiff = TO_FLOAT(ABSI(speedChange[iSpeedCounter + 1].iPointIndex - speedChange[iSpeedCounter].iPointIndex))
|
|
fSpeedDiff = (speedChange[is2].fNewFactor - speedChange[iSpeedCounter].fNewFactor)
|
|
|
|
t = 1.0 - ((TO_FLOAT(speedChange[is2].iPointIndex) - sourceCar.fPointIndex) / fPointDiff)
|
|
fSpeedFactor = speedChange[iSpeedCounter].fNewFactor + (t * fSpeedDiff)
|
|
|
|
IF (speedChange[iSpeedCounter].fNewFactor < speedChange[is2].fNewFactor)
|
|
fSpeedFactor = CLAMP(fSpeedFactor, speedChange[iSpeedCounter].fNewFactor, speedChange[is2].fNewFactor)
|
|
ELSE
|
|
fSpeedFactor = CLAMP(fSpeedFactor, speedChange[is2].fNewFactor, speedChange[iSpeedCounter].fNewFactor)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
//----------------------
|
|
// DEBUG VARIABLES
|
|
//----------------------
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID m_WidgetGroup
|
|
BOOL bQuitScript = FALSE
|
|
#ENDIF
|
|
|
|
//----------------------
|
|
// DEBUG FUNCTIONS
|
|
//----------------------
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
/// PURPOSE:
|
|
/// Setups Debug Widgets
|
|
PROC SETUP_DEBUG_WIDGETS()
|
|
SET_PROFILING_OF_THIS_SCRIPT(TRUE)
|
|
m_WidgetGroup = START_WIDGET_GROUP("Fairground - Rollercoaster")
|
|
ADD_WIDGET_BOOL("Quit Script", bQuitScript)
|
|
ADD_WIDGET_BOOL("Infinite Ride", bInfiniteRide)
|
|
ADD_WIDGET_FLOAT_SLIDER("fSinShake", fSinShakeFactor, 0.0, 10.0, 0.0025)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Multiple", fSpeedMultiple, 0.0, 30.0, 0.0025)
|
|
ADD_WIDGET_FLOAT_SLIDER("Interpolate Rate", tInterpolateRate, 0.0, 100.0, 0.0025)
|
|
ADD_WIDGET_FLOAT_SLIDER("Speed Factor", fSpeedFactor, 0.0, 20.0, 0.0025)
|
|
ADD_WIDGET_INT_READ_ONLY("Current Point", sourceCar.iPointIndex[1])
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Rail Float", sourceCar.fPointIndex)
|
|
ADD_WIDGET_VECTOR_SLIDER("Car Offset", vCarOffset, -10.0, 10.0, 0.25)
|
|
ADD_WIDGET_INT_READ_ONLY("Speed Counter", iSpeedCounter)
|
|
ADD_WIDGET_INT_SLIDER("Pad Shake Time", iPadVibrateTime, 0, 5000, 16)
|
|
ADD_WIDGET_INT_SLIDER("Pad Shake Freq", iPadVibrateFreq, 0, 256, 1)
|
|
ADD_WIDGET_INT_SLIDER("Pad Rung Skip", iPadRungSkip, 1, 64, 1)
|
|
|
|
ADD_WIDGET_BOOL("Show Debug Point", bShowDebugPoint)
|
|
ADD_WIDGET_INT_SLIDER("Debug Point", iDebugPoint, -1, COUNT_OF(vSplinePoint) - 1, 1)
|
|
ADD_WIDGET_BOOL("Show Debug Car", bShowDebugCar)
|
|
START_WIDGET_GROUP("FPS Camera")
|
|
ADD_WIDGET_INT_SLIDER("Look X Limit", fpsCam.iLookXLimit, -360, 360, 1)
|
|
ADD_WIDGET_INT_SLIDER("Look Y Limit", fpsCam.iLookYLimit, -360, 360, 1)
|
|
STOP_WIDGET_GROUP()
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Removes Debug Widgets
|
|
PROC CLEANUP_DEBUG_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(m_WidgetGroup)
|
|
DELETE_WIDGET_GROUP(m_WidgetGroup)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|
|
//----------------------
|
|
// SCRIPT FUNCTIONS
|
|
//----------------------
|
|
|
|
/// PURPOSE:
|
|
/// Cleanups Script and terminates thread - this should be the last function called
|
|
PROC SCRIPT_CLEANUP(BOOL bNice = FALSE)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "Rollercoaster Cleanup Nice:", bNice)
|
|
|
|
STOP_STREAM()
|
|
IF IS_AUDIO_SCENE_ACTIVE("FAIRGROUND_RIDES_LEVIATHAN")
|
|
STOP_AUDIO_SCENE("FAIRGROUND_RIDES_LEVIATHAN")
|
|
ENDIF
|
|
|
|
IF (bNice)
|
|
CLEAR_HELP()
|
|
CLEAR_BIT(g_iRepeatPlayBits, ENUM_TO_INT(RPB_FROZEN_ON_ROLLERCOASTER))
|
|
SAFE_FADE_SCREEN_OUT_TO_BLACK()
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CLEANUP_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_FAIRG)
|
|
CLEAR_FIRST_PERSON_CAMERA(fpsCam)
|
|
SAFE_STOP_AND_RELEASE_SOUND_ID(iRollerSoundID)
|
|
SAFE_STOP_AND_RELEASE_SOUND_ID(iRatchetSoundID)
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
|
|
IF IS_ENTITY_ATTACHED(PLAYER_PED_ID())
|
|
DETACH_ENTITY(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
SHOW_ROLLERCOASTER_PROPS()
|
|
|
|
SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), <<-1631.3481, -1112.6509, 12.0206>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 316.4640)
|
|
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE)
|
|
|
|
RC_END_CUTSCENE_MODE()
|
|
|
|
IF (bNice)
|
|
CLEAR_HELP()
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK)
|
|
WAIT(125)
|
|
ENDIF
|
|
|
|
DISABLE_CELLPHONE(FALSE)
|
|
REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE("fairgroundHub")
|
|
|
|
IF (bNice)
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK(500, FALSE)
|
|
DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_UNLOGGED_SMALL_ACTION, COST_ROLLERCOASTER)
|
|
ENDIF
|
|
|
|
UNLOAD_REQUESTED_ASSETS(asRequester)
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
//----------------------
|
|
// UPDATE FUNCTIONS
|
|
//----------------------
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
/// PURPOSE:
|
|
/// Updates Debug Widgets and draw debug stuff
|
|
PROC UPDATE_DEBUG_WIDGETS()
|
|
INT i
|
|
INT n
|
|
VECTOR v
|
|
|
|
IF (bQuitScript)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF (iDebugPoint > iSplinePointsUsed - 1)
|
|
iDebugPoint = 0
|
|
ENDIF
|
|
|
|
IF (iDebugPoint < 0)
|
|
iDebugPoint = iSplinePointsUsed - 1
|
|
ENDIF
|
|
|
|
IF (bShowDebugPoint)
|
|
DRAW_DEBUG_SPHERE(vSplinePoint[iDebugPoint], 0.125, 255, 0, 0, 255)
|
|
DRAW_DEBUG_CIRCLE(vSplinePoint[iDebugPoint], 1, 255, 0, 0, 255)
|
|
DRAW_DEBUG_LINE(vSplinePoint[iDebugPoint] + <<0, 0, -5>>, vSplinePoint[iDebugPoint] - <<0, 0, -5>>, 255, 0, 0, 255)
|
|
ENDIF
|
|
|
|
IF (bShowDebugCar)
|
|
DRAW_DEBUG_SPHERE(GET_ENTITY_COORDS(targetCar.mObjectID), 0.125, 0, 255, 0, 255)
|
|
DRAW_DEBUG_SPHERE(GET_ENTITY_COORDS(sourceCar.mObjectID), 0.125, 255, 0, 0, 255)
|
|
DRAW_DEBUG_LINE_WITH_TWO_COLOURS(GET_ENTITY_COORDS(targetCar.mObjectID), GET_ENTITY_COORDS(sourceCar.mObjectID), 0, 255, 0, 255, 255, 0, 0, 255)
|
|
DRAW_DEBUG_LINE(GET_ENTITY_COORDS(sourceCar.mObjectID), GET_ENTITY_COORDS(sourceCar.mObjectID) + (GET_ENTITY_FORWARD_VECTOR(sourceCar.mObjectID) * 2.0))
|
|
ENDIF
|
|
|
|
IF (bReset)
|
|
SETUP_RCOASTER_CAR(sourceCar, 0)
|
|
SETUP_RCOASTER_CAR(targetCar, 1)
|
|
tInterpolateRate = 0
|
|
ENDIF
|
|
|
|
IF (bShowDebugPoint)
|
|
i = 0
|
|
REPEAT COUNT_OF(speedChange) i
|
|
n = speedChange[i].iPointIndex
|
|
IF (n >= 0) AND (n < iSplinePointsUsed)
|
|
v = vSplinePoint[n]
|
|
DRAW_DEBUG_SPHERE(v, 0.0625)
|
|
DRAW_DEBUG_LINE(v, v + <<0, 0, 4 * speedChange[i].fNewFactor>>)
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
PROC UPDATE_ROLLERCOASTER_STATE()
|
|
SWITCH (rCoasterState)
|
|
CASE RCS_SPEEDUP
|
|
tInterpolateRate += (GET_FRAME_TIME() / 2.0)
|
|
IF (tInterpolateRate >= 5.0)
|
|
tInterpolateRate = 5.0
|
|
rCoasterState = RCS_ACTIVE
|
|
ENDIF
|
|
BREAK
|
|
CASE RCS_ACTIVE
|
|
IF (sourceCar.iPointIndex[1] = (NUM_POINTS - 10)) AND (bInfiniteRide = FALSE)
|
|
rCoasterState = RCS_SLOWDOWN
|
|
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID())
|
|
PLAY_SOUND_FROM_ENTITY(-1, "BIG_STOP", PLAYER_PED_ID())
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE RCS_SLOWDOWN
|
|
tInterpolateRate -= (GET_FRAME_TIME())
|
|
IF (tInterpolateRate <= 0.0)
|
|
tInterpolateRate = 0.0
|
|
rCoasterState = RCS_STOPPED
|
|
ENDIF
|
|
BREAK
|
|
CASE RCS_STOPPED
|
|
WAIT(1500)
|
|
SCRIPT_CLEANUP(TRUE)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Updates the Rollercoaster
|
|
PROC UPDATE_ROLLERCOASTER()
|
|
UPDATE_ROLLERCOASTER_STATE()
|
|
UPDATE_RCOASTER_CAR(targetCar)
|
|
UPDATE_RCOASTER_CAR(sourceCar)
|
|
SET_ENTITY_ROTATION_FACE_ENTITY(sourceCar.mObjectID, targetCar.mObjectID)
|
|
ENDPROC
|
|
|
|
//----------------------
|
|
// MAIN SCRIPT
|
|
//----------------------
|
|
SCRIPT
|
|
INT i
|
|
VECTOR v
|
|
VECTOR v1, v2
|
|
|
|
FLOAT pitch, yaw
|
|
INT iCameraTimer
|
|
FLOAT fSinShake, fSinShakeYaw
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOASTER] - ROLLERCOASTER SETUP - 107")
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_REPEAT_PLAY)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
RC_START_CUTSCENE_MODE(<<0, 0, 0>>, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE)
|
|
SET_BIT(g_iRepeatPlayBits, ENUM_TO_INT(RPB_FROZEN_ON_ROLLERCOASTER))
|
|
|
|
IF NOT DOES_CAM_EXIST(initialCamera)
|
|
initialCamera = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<-1652.2273, -1120.9301, 22.4479>>, <<9.2388, -0.0000, -131.6249>>, 50.1098, TRUE)
|
|
SET_CAM_PARAMS(initialCamera, <<-1652.2273, -1120.9301, 22.4479>>, <<9.2388, -0.0000, -131.6249>>, 50.1098)
|
|
SET_CAM_ACTIVE(initialCamera, TRUE)
|
|
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOASTER] - SETUP CAMERA")
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID())
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID())
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOASTER] - FORCE PEDS OFF VEHICLE")
|
|
ENDIF
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
|
|
CLEAR_AREA_OF_PROJECTILES(GET_ENTITY_COORDS(PLAYER_PED_ID()), 60.0)
|
|
STOP_FIRE_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 60.0)
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOASTER] - ASSET LOAD START")
|
|
ADD_ASSET_REQUEST_FOR_MODEL(asRequester, 0, dummyRCModel)
|
|
ADD_ASSET_REQUEST_FOR_MODEL(asRequester, 1, PROP_ROLLER_CAR_01)
|
|
ADD_ASSET_REQUEST_FOR_MODEL(asRequester, 2, PROP_ROLLER_CAR_02)
|
|
//ADD_ASSET_REQUEST_FROM_STRING(asRequester, 3, ASSET_AUDIOBANK, "SCRIPT\\FAIRGROUND_LEVIATHAN_01")
|
|
//ADD_ASSET_REQUEST_FROM_STRING(asRequester, 4, ASSET_AUDIOBANK, "SCRIPT\\FAIRGROUND_LEVIATHAN_02")
|
|
//ADD_ASSET_REQUEST_FROM_STRING(asRequester, 5, ASSET_AUDIOBANK, "SCRIPT\\FAIRGROUND_LEVIATHAN_03")
|
|
|
|
WHILE NOT LOAD_STREAM("LEVIATHON_RIDE_MASTER")
|
|
RC_DISABLE_CONTROL_ACTIONS_FOR_LEAD_IN()
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
PLAY_STREAM_FRONTEND()
|
|
IF DOES_CAM_EXIST(initialCamera)
|
|
SET_CAM_PARAMS(initialCamera, <<-1651.5007, -1118.3954, 23.5181>>, <<3.4350, -0.0000, -152.2412>>, 50.1098, 5000)
|
|
iCameraTimer = GET_GAME_TIMER() + 5000
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOASTER] - START PAN")
|
|
ENDIF
|
|
|
|
WHILE NOT HAVE_ASSET_REQUESTS_LOADED(asRequester)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
RC_DISABLE_CONTROL_ACTIONS_FOR_LEAD_IN()
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
|
|
|
|
|
|
IF IS_ENTITY_OK(GET_PLAYERS_LAST_VEHICLE())
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOASTER] - RESOLVE VEHICLE")
|
|
IF IS_ENTITY_SMALLER_THAN_MODEL(GET_PLAYERS_LAST_VEHICLE(), BAGGER)
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA( <<-1633.429810,-1111.998413,11.022523>>, <<-1661.270386,-1142.659790,25.517223>>, 12.000000, <<-1630.9520, -1107.5804, 12.0215>>, 51.9704)
|
|
ELIF IS_ENTITY_SMALLER_THAN_MODEL(GET_PLAYERS_LAST_VEHICLE(), SANDKING)
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA( <<-1633.429810,-1111.998413,11.022523>>, <<-1661.270386,-1142.659790,25.517223>>, 12.000000, <<-1636.3438, -1106.2410, 12.0261>>, 52.3427)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
fSpeedFactor = 0.5
|
|
|
|
ADD_SPEED_CHANGE(1, 0.5, RCSND_PLAYPULLOFF)
|
|
ADD_SPEED_CHANGE(2, 0.5, RCSND_PLAYRATCHET)
|
|
ADD_SPEED_CHANGE(13, 0.5, RCSND_NULL)
|
|
ADD_SPEED_CHANGE(14, 0.3, RCSND_NULL)
|
|
ADD_SPEED_CHANGE(15, 0.2, RCSND_NULL)
|
|
ADD_SPEED_CHANGE(16, 0.1, RCSND_NULL)
|
|
ADD_SPEED_CHANGE(17, 0.05, RCSND_STOPRATCHET)
|
|
ADD_SPEED_CHANGE(18, 0.05, RCSND_NULL)
|
|
ADD_SPEED_CHANGE(19, 1.0, RCSND_PLAYPULLOFF)
|
|
ADD_SPEED_CHANGE(20, 1.0, RCSND_PLAYCROWD)
|
|
//ADD_SPEED_CHANGE(24, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(31, 1.0, RCSND_PLAYPULLOFF)
|
|
ADD_SPEED_CHANGE(34, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(45, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(60, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(69, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(81, 1.0, RCSND_PLAYBIGSTOP)
|
|
ADD_SPEED_CHANGE(84, 0.75, RCSND_PLAYBRAKES)
|
|
ADD_SPEED_CHANGE(90, 0.75, RCSND_PLAYRATCHET)
|
|
ADD_SPEED_CHANGE(94, 0.75, RCSND_STOPRATCHET)
|
|
ADD_SPEED_CHANGE(95, 1.0, RCSND_PLAYPULLOFF)
|
|
ADD_SPEED_CHANGE(97, 1.0, RCSND_PLAYCROWD)
|
|
|
|
ADD_SPEED_CHANGE(118, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(130, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(155, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(172, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(184, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(197, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(216, 1.0, RCSND_PLAYCROWD)
|
|
ADD_SPEED_CHANGE(222, 1.0, RCSND_PLAYBIGSTOP)
|
|
ADD_SPEED_CHANGE(232, 0.01, RCSND_NULL)
|
|
|
|
DUMMY_REFERENCE_INT(iSpeedCounter)
|
|
|
|
|
|
SETUP_ROLLER_COASTER_POINTS()
|
|
HIDE_ROLLERCOASTER_PROPS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SETUP_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "SETTING UP SOURCE CAR")
|
|
SETUP_RCOASTER_CAR(sourceCar, 1)
|
|
WAIT(0)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "SETTING UP TARGET CAR")
|
|
SETUP_RCOASTER_CAR(targetCar, 2)
|
|
sourceCar.bIsSourceCar = TRUE
|
|
DISABLE_CELLPHONE(TRUE)
|
|
|
|
WAIT(0)
|
|
|
|
// attach player to camera
|
|
UPDATE_ROLLERCOASTER()
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID()) AND IS_ENTITY_OK(sourceCar.mObjectID)
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1648.4, -1127.6, 18.3>>)
|
|
ATTACH_ENTITY_TO_ENTITY(PLAYER_PED_ID(), sourceCar.mObjectID, 0, <<0, 0, 0>>, <<0, 0, 0>>)
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
WHILE (GET_GAME_TIMER() < iCameraTimer)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
IF DOES_CAM_EXIST(initialCamera)
|
|
SET_CAM_ACTIVE(initialCamera, FALSE)
|
|
DESTROY_CAM(initialCamera)
|
|
ENDIF
|
|
|
|
// set up camera
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID())
|
|
fpsCam.iLookXLimit = 60
|
|
fpsCam.iLookYLimit = 20
|
|
v = GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_HEAD, <<0, -0.25, 0>>)
|
|
INIT_FIRST_PERSON_CAMERA(fpsCam, v, GET_ENTITY_ROTATION(sourceCar.mObjectID), 50.0, fpsCam.iLookXLimit, fpsCam.iLookYLimit)
|
|
ATTACH_CAM_TO_ENTITY(fpsCam.theCam, PLAYER_PED_ID(), <<0, 0, 0.5>>)
|
|
ENDIF
|
|
|
|
// update camera once
|
|
WAIT(0)
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID()) AND IS_ENTITY_OK(targetCar.mObjectID)
|
|
GET_PITCH_AND_HEADING_FROM_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(targetCar.mObjectID), pitch, yaw)
|
|
UPDATE_FIRST_PERSON_CAMERA(fpsCam)
|
|
SET_CAM_ROT(fpsCam.theCam, <<pitch, 0, yaw>> + fpsCam.vCamRotOffsetCurrent)
|
|
ENDIF
|
|
|
|
START_AUDIO_SCENE("FAIRGROUND_RIDES_LEVIATHAN")
|
|
iNextSpeechTime = GET_GAME_TIMER() + 5000
|
|
/*
|
|
iRollerSoundID = GET_SOUND_ID()
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID())
|
|
PLAY_SOUND_FROM_ENTITY(iRollerSoundID, "MAIN", PLAYER_PED_ID(), "LEVIATHAN_SOUNDSET")
|
|
ENDIF
|
|
*/
|
|
|
|
PRINT_HELP("FGND_SKIPRIDE")
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL, 1000, 255)
|
|
|
|
WHILE (TRUE)
|
|
#IF IS_DEBUG_BUILD
|
|
UPDATE_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
CALCULATE_SPEED_FACTOR()
|
|
UPDATE_ROLLERCOASTER()
|
|
|
|
i = sourceCar.iPointIndex[1]
|
|
v1 = NORMALISE_VECTOR(GET_SPLINE_POINT(i + 1) - GET_SPLINE_POINT(i))
|
|
v2 = NORMALISE_VECTOR(GET_SPLINE_POINT(i + 4) - GET_SPLINE_POINT(i))
|
|
fSinShakeYaw = 1.0 - (DOT_PRODUCT(v2, v1))
|
|
|
|
fSinShake = SIN( ((sourceCar.fPointIndex) - FLOOR(sourceCar.fPointIndex)) * 360.0) * fSinShakeFactor
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID()) AND IS_ENTITY_OK(targetCar.mObjectID)
|
|
GET_PITCH_AND_HEADING_FROM_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(targetCar.mObjectID), pitch, yaw)
|
|
UPDATE_FIRST_PERSON_CAMERA(fpsCam)
|
|
SET_CAM_ROT(fpsCam.theCam, <<pitch + fSinShake, 0, yaw + (fSinShake * (fSinShakeYaw * 2.0))>> + fpsCam.vCamRotOffsetCurrent)
|
|
ENDIF
|
|
|
|
RC_DISABLE_CONTROL_ACTIONS_FOR_LEAD_IN()
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
ENDIF
|
|
|
|
// Play audio comment every 8-13 seconds. Plays excited comment if speed > 0.5
|
|
IF GET_GAME_TIMER() > iNextSpeechTime //IF (GET_RANDOM_INT_IN_RANGE(0, 10) = 0)
|
|
IF fSpeedFactor > 0.01
|
|
IF fSpeedFactor > 0.5 //IF GET_RANDOM_BOOL()
|
|
PLAY_PED_AMBIENT_SPEECH_NATIVE(PLAYER_PED_ID(), "ROLLERCOASTER_CHAT_EXCITED", "SPEECH_PARAMS_FORCE_FRONTEND")
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOSTER]: PLAY EXCITED CHAT")
|
|
ELSE
|
|
PLAY_PED_AMBIENT_SPEECH_NATIVE(PLAYER_PED_ID(), "ROLLERCOASTER_CHAT_NORMAL", "SPEECH_PARAMS_FORCE_FRONTEND")
|
|
CPRINTLN(DEBUG_AMBIENT, "[ROLLERCOSTER]: PLAY NORMAL CHAT")
|
|
ENDIF
|
|
iNextSpeechTime = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(8000, 13000)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// handle quitting
|
|
IF (bSkipped = FALSE)
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SKIP_CUTSCENE)
|
|
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CONTEXT)
|
|
SAFE_FADE_SCREEN_OUT_TO_BLACK(500, FALSE)
|
|
bSkipped = TRUE
|
|
ENDIF
|
|
ELIF IS_SCREEN_FADED_OUT()
|
|
SCRIPT_CLEANUP(TRUE)
|
|
ELIF NOT IS_SCREEN_FADING_OUT()
|
|
bSkipped = FALSE
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
ENDSCRIPT
|
|
|