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

1162 lines
25 KiB
XML
Executable File

USING "minigames_helpers.sch"
ENUM GOLF_LIE_TYPE
LIE_UNKNOWN = -1,
LIE_BUNKER,
LIE_CART_PATH,
LIE_FAIRWAY,
LIE_GREEN,
LIE_ROUGH,
LIE_TEE,
LIE_UNKNOWN_UI, //for comunicating with UI
LIE_WATER,
LIE_CUP,
LIE_BUSH
ENDENUM
/// PURPOSE: Data representation of a single hole of golf
STRUCT GOLF_HOLE
#IF NOT COMPILE_LOOKUPS
VECTOR vTeePosition
VECTOR vTeeSpectate[4]
VECTOR vFairwayPosition
VECTOR vHolePosition
VECTOR vGreenSpectate[4]
#ENDIF
FLOAT fHoleLength
INT iPar
OBJECT_INDEX objFlag
ENDSTRUCT
/// PURPOSE: Data representation of a single golf course
STRUCT GOLF_COURSE
GOLF_HOLE golfHole[9]
INT iNumHoles
INT iTotalPar
VECTOR vPlayerStartPosition[4]
VECTOR vCartStartPosition[4]
#IF NOT GOLF_IS_AI_ONLY
BLIP_INDEX blipFlag
#ENDIF
ENDSTRUCT
FUNC VECTOR GET_GOLF_HOLE_TEE_POSITION_STATIC(INT holeIndex)
#IF NOT PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN <<-1370.93, 173.98, 57.01 >>
BREAK
CASE 1
RETURN << -1107.26, 157.15, 62.04>>
BREAK
CASE 2
RETURN << -1312.97, 125.64, 56.39 >>
BREAK
CASE 3
RETURN << -1218.56, 107.48, 57.04 >>
BREAK
CASE 4
RETURN << -1098.15, 69.50, 53.09 >>
BREAK
CASE 5
RETURN << -987.70, -105.42, 39.59 >>
BREAK
CASE 6
RETURN << -1117.793, -104.069, 40.8406 >>
BREAK
CASE 7
RETURN << -1272.63, 38.40, 48.75 >>
BREAK
CASE 8
RETURN << -1138.38123, 0.60467, 47.98225>>
BREAK
ENDSWITCH
#ENDIF
#IF PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN << -1329.875, 52.557, 52.677>>
BREAK
CASE 1
RETURN << -1329.26, 35.458, 52.677 >>
BREAK
CASE 2
RETURN << -1330.135, 95.877, 54.98 >>
BREAK
CASE 3
RETURN << -1334.394, 103.347, 55.392 >>
BREAK
CASE 4
RETURN << -1332.059, 68.521, 52.736 >>
BREAK
CASE 5
RETURN << -1336.215, 82.867, 53.703 >>
BREAK
ENDSWITCH
#ENDIF
RETURN <<0,0,0>>
ENDFUNC
/// PURPOSE:
/// Accessor for hole tee positition
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// RETURNS:
///
FUNC VECTOR GET_GOLF_HOLE_TEE_POSITION(GOLF_COURSE &golfCourse, INT holeIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN <<0,0,0>>
ENDIF
#IF NOT COMPILE_LOOKUPS
RETURN golfCourse.golfHole[holeIndex].vTeePosition
#ENDIF
#IF COMPILE_LOOKUPS
RETURN GET_GOLF_HOLE_TEE_POSITION_STATIC(holeIndex)
#ENDIF
ENDFUNC
/// PURPOSE:
/// Accessor for hole tee spectator positition
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// spectateIndex -
/// RETURNS:
///
FUNC VECTOR GET_GOLF_HOLE_TEE_SPECTATE_POSITION(GOLF_COURSE &golfCourse, INT holeIndex, INT spectateIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN <<0,0,0>>
ENDIF
#IF NOT COMPILE_LOOKUPS
IF spectateIndex < 0 OR spectateIndex >= COUNT_OF(golfCourse.golfHole[].vTeeSpectate)
RETURN <<0,0,0>>
ENDIF
RETURN golfCourse.golfHole[holeIndex].vTeeSpectate[spectateIndex]
#ENDIF
#IF COMPILE_LOOKUPS
SWITCH holeIndex
CASE 0
SWITCH spectateIndex
CASE 0
RETURN <<-1369.2075, 166.1965, 57.0130>>
BREAK
CASE 1
RETURN <<-1367.2594, 166.6778, 57.0130>>
BREAK
CASE 2
RETURN <<-1370.8029, 167.6664, 57.0130>>
BREAK
CASE 3
RETURN <<-1371.5073, 169.5609, 57.0130>>
BREAK
CASE 4
RETURN <<-1370.8456, 164.1834, 56.8900>>
BREAK
CASE 5
RETURN <<-1367.9016, 164.2965, 56.8690>>
BREAK
ENDSWITCH
BREAK
CASE 1
SWITCH spectateIndex
CASE 0
RETURN << -1101.0491, 156.1904, 62.0401 >>
BREAK
CASE 1
RETURN << -1100.9050, 159.2561, 62.0415 >>
BREAK
CASE 2
RETURN << -1102.7826, 161.6288, 62.0412 >>
BREAK
CASE 3
RETURN << -1105.9637, 161.2863, 62.0406 >>
BREAK
CASE 4
RETURN <<-1104.4509, 163.5161, 62.0095>>
BREAK
CASE 5
RETURN <<-1099.9340, 161.6773, 62.0185>>
BREAK
ENDSWITCH
BREAK
CASE 2
SWITCH spectateIndex
CASE 0
RETURN <<-1317.0281, 128.0565, 56.4377>>
BREAK
CASE 1
RETURN <<-1315.4363, 129.9425, 56.6243>>
BREAK
CASE 2
RETURN <<-1313.4515, 131.9924, 56.8265>>
BREAK
CASE 3
RETURN <<-1317.2489, 133.3213, 56.7050>>
BREAK
CASE 4
RETURN <<-1318.7860, 131.5965, 56.4503>>
BREAK
CASE 5
RETURN <<-1320.1383, 129.2562, 56.3240>>
BREAK
ENDSWITCH
BREAK
CASE 3
SWITCH spectateIndex
CASE 0
RETURN << -1218.8939, 110.6482, 57.08 >>
BREAK
CASE 1
RETURN << -1222.2432, 110.2088, 57.08 >>
BREAK
CASE 2
RETURN << -1220.0, 111.91, 58.0703 >>
BREAK
CASE 3
RETURN << -1221.2565, 101.3278, 57.08 >>
BREAK
CASE 4
RETURN <<-1223.2966, 103.1185, 56.8130>>
BREAK
CASE 5
RETURN <<-1216.3892, 115.3967, 57.1354>>
BREAK
ENDSWITCH
BREAK
CASE 4
SWITCH spectateIndex
CASE 0
RETURN << -1104.6074, 70.6124, 53.2120 >>
BREAK
CASE 1
RETURN << -1101.6980, 73.7137, 53.1993 >>
BREAK
CASE 2
RETURN << -1103.90, 72.917, 54.30 >>
BREAK
CASE 3
RETURN << -1100.4252, 75.0875, 54.3712 >>
BREAK
CASE 4
RETURN <<-1108.5879, 72.7163, 53.4783>>
BREAK
CASE 5
RETURN <<-1107.1752, 68.8603, 53.2257>>
BREAK
ENDSWITCH
BREAK
CASE 5
SWITCH spectateIndex
CASE 0
RETURN << -984.8632, -108.5439, 39.5642 >>
BREAK
CASE 1
RETURN << -982.4098, -106.4736, 39.5732 >>
BREAK
CASE 2
RETURN << -981.2261, -103.0422, 39.5779 >>
BREAK
CASE 3
RETURN << -981.8594, -100.6231, 39.5813 >>
BREAK
CASE 4
RETURN <<-978.5359, -100.5075, 39.5193>>
BREAK
CASE 5
RETURN <<-981.4874, -109.4747, 39.2195>>
BREAK
ENDSWITCH
BREAK
CASE 6
SWITCH spectateIndex
CASE 0
RETURN << -1113.8646, -100.3123, 40.9050 >>
BREAK
CASE 1
RETURN << -1111.5592, -104.7822, 40.8405 >>
BREAK
CASE 2
RETURN << -1113.2805, -107.0443, 40.8405 >>
BREAK
CASE 3
RETURN << -1116.9398, -109.7583, 40.8608 >>
BREAK
CASE 4
RETURN <<-1110.0200, -108.1524, 40.7427>>
BREAK
CASE 5
RETURN <<-1112.8149, -103.1259, 40.8406>>
BREAK
ENDSWITCH
BREAK
CASE 7
SWITCH spectateIndex
CASE 0
RETURN << -1277.2773, 36.1405, 48.9194 >>
BREAK
CASE 1
RETURN << -1277.3438, 39.2424, 49.1028 >>
BREAK
CASE 2
RETURN << -1275.5933, 41.3619, 49.0876 >>
BREAK
CASE 3
RETURN << -1271.2444, 43.9149, 48.9679 >>
BREAK
CASE 4
RETURN <<-1279.0214, 42.0418, 49.3157>>
BREAK
CASE 5
RETURN <<-1281.1838, 37.6356, 49.3165>>
BREAK
ENDSWITCH
BREAK
CASE 8
SWITCH spectateIndex
CASE 0
RETURN <<-1138.5895, -5.6756, 47.9822>>
BREAK
CASE 1
RETURN <<-1136.4796, -5.8462, 47.9822>>
BREAK
CASE 2
RETURN <<-1134.6447, -4.3631, 47.9822>>
BREAK
CASE 3
RETURN <<-1133.7120, -2.4897, 47.9822>>
BREAK
CASE 4
RETURN <<-1133.8031, -7.8430, 47.9822>>
BREAK
CASE 5
RETURN <<-1137.6029, -9.0347, 47.8107>>
BREAK
ENDSWITCH
BREAK
ENDSWITCH
RETURN <<0,0,0>>
#ENDIF
ENDFUNC
FUNC VECTOR GET_GOLF_HOLE_PIN_POSITION_STATIC(INT holeIndex)
#IF NOT PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN << -1114.121, 220.789, 63.78 >>
BREAK
CASE 1
RETURN << -1322.07, 158.77, 56.69 >>
BREAK
CASE 2
RETURN << -1237.419, 112.988, 56.086 >>
BREAK
CASE 3
RETURN << -1096.541, 7.848, 49.63 >>
BREAK
CASE 4
RETURN << -957.386, -90.412, 39.161 >>
BREAK
CASE 5
RETURN << -1103.516, -115.163, 40.444 >>
BREAK
CASE 6
RETURN << -1290.632, 2.754, 49.217 >>
BREAK
CASE 7
RETURN << -1034.944, -83.144, 42.919>>
BREAK
CASE 8
RETURN << -1294.775, 83.51, 53.804 >>
BREAK
ENDSWITCH
#ENDIF
#IF PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN << -1329.875, 35.458, 52.677 >>
BREAK
CASE 1
RETURN << -1329.26, 52.557, 52.677>>
BREAK
CASE 2
RETURN << -1330.135, 68.521, 52.736 >>
BREAK
CASE 3
RETURN << -1334.394, 82.867, 53.703 >>
BREAK
CASE 4
RETURN << -1332.059, 95.877, 54.98 >>
BREAK
CASE 5
RETURN << -1336.215, 103.347, 55.392 >>
BREAK
ENDSWITCH
#ENDIF
RETURN <<0,0,0>>
ENDFUNC
/// PURPOSE:
/// Accessor for hole pin positition
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// RETURNS:
///
FUNC VECTOR GET_GOLF_HOLE_PIN_POSITION(GOLF_COURSE &golfCourse, INT holeIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN <<0,0,0>>
ENDIF
#IF NOT COMPILE_LOOKUPS
RETURN golfCourse.golfHole[holeIndex].vHolePosition
#ENDIF
#IF COMPILE_LOOKUPS
#IF NOT PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN << -1114.121, 220.789, 63.78 >>
BREAK
CASE 1
RETURN << -1322.07, 158.77, 56.69 >>
BREAK
CASE 2
RETURN << -1237.419, 112.988, 56.086 >>
BREAK
CASE 3
RETURN << -1096.541, 7.848, 49.63 >>
BREAK
CASE 4
RETURN << -957.386, -90.412, 39.161 >>
BREAK
CASE 5
RETURN << -1103.516, -115.163, 40.444 >>
BREAK
CASE 6
RETURN << -1290.633, 2.771, 49.219 >>
BREAK
CASE 7
RETURN << -1034.944, -83.144, 42.919>>
BREAK
CASE 8
RETURN << -1294.775, 83.51, 53.804 >>
BREAK
ENDSWITCH
#ENDIF
#IF PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN << -1329.875, 35.458, 52.677 >>
BREAK
CASE 1
RETURN << -1329.26, 52.557, 52.677>>
BREAK
CASE 2
RETURN << -1330.135, 68.521, 52.736 >>
BREAK
CASE 3
RETURN << -1334.394, 82.867, 53.703 >>
BREAK
CASE 4
RETURN << -1332.059, 95.877, 54.98 >>
BREAK
CASE 5
RETURN << -1336.215, 103.347, 55.392 >>
BREAK
ENDSWITCH
#ENDIF
RETURN <<0,0,0>>
#ENDIF
ENDFUNC
/// PURPOSE:
/// Accessor for hole fairway positition
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// RETURNS:
///
FUNC VECTOR GET_GOLF_HOLE_FAIRWAY_POSITION(GOLF_COURSE &golfCourse, INT holeIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN <<0,0,0>>
ENDIF
#IF NOT COMPILE_LOOKUPS
RETURN golfCourse.golfHole[holeIndex].vFairwayPosition
#ENDIF
#IF COMPILE_LOOKUPS
#IF NOT PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN << -1252.9742, 182.4325, 61.3071 >>
BREAK
CASE 1
RETURN << -1222.2045, 150.2919, 58.7062 >>
BREAK
CASE 2
RETURN << -1240.0823, 105.7823, 55.6871 >>
BREAK
CASE 3
RETURN << -1132.48730, 74.15947, 55.23262 >>
BREAK
CASE 4
RETURN << -1022.11084, -34.77494, 44.37743 >>
BREAK
CASE 5
RETURN << -1100.05701, -114.27702, 40.53680 >>
BREAK
CASE 6
RETURN << -1225.2073, -54.2714, 44.1932 >>
BREAK
CASE 7
RETURN << -1159.3220, -26.5465, 44.7971 >>
BREAK
CASE 8
RETURN <<-1177.1937, 34.2190, 50.8363>>
BREAK
ENDSWITCH
#ENDIF
#IF PUTTING_GREEN
SWITCH holeIndex
CASE 0
RETURN << -1329.875, 35.458, 52.677 >>
BREAK
CASE 1
RETURN << -1329.26, 52.557, 52.677>>
BREAK
CASE 2
RETURN << -1330.135, 68.521, 52.736 >>
BREAK
CASE 3
RETURN << -1334.394, 82.867, 53.703 >>
BREAK
CASE 4
RETURN << -1332.059, 95.877, 54.98 >>
BREAK
CASE 5
RETURN << -1336.215, 103.347, 55.392 >>
BREAK
ENDSWITCH
#ENDIF
RETURN <<0,0,0>>
#ENDIF
ENDFUNC
/// PURPOSE:
/// Accessor for green specatate positition
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// spectateIndex -
/// RETURNS:
///
FUNC VECTOR GET_GOLF_HOLE_GREEN_SPECTATE_POSITION(GOLF_COURSE &golfCourse, INT holeIndex, INT spectateIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN <<0,0,0>>
ENDIF
#IF NOT COMPILE_LOOKUPS
IF spectateIndex < 0 OR spectateIndex >= COUNT_OF(golfCourse.golfHole[].vGreenSpectate)
RETURN <<0,0,0>>
ENDIF
RETURN golfCourse.golfHole[holeIndex].vGreenSpectate[spectateIndex]
#ENDIF
#IF COMPILE_LOOKUPS
SWITCH holeIndex
CASE 0
SWITCH spectateIndex
CASE 0
RETURN << -1121.4823, 210.4423, 63.9292 >>
BREAK
CASE 1
RETURN << -1111.8832, 211.2035, 63.8440 >>
BREAK
CASE 2
RETURN << -1109.5812, 220.7810, 63.9314 >>
BREAK
CASE 3
RETURN << -1117.7329, 231.4756, 64.5959 >>
BREAK
CASE 4
RETURN <<-1124.8193, 232.4564, 65.1060>>
BREAK
CASE 5
RETURN <<-1114.6022, 228.6924, 64.1294>>
BREAK
CASE 6
RETURN <<-1124.3363, 220.1641, 64.0189>>
BREAK
ENDSWITCH
BREAK
CASE 1
SWITCH spectateIndex
CASE 0
RETURN << -1324.6469, 150.2405, 56.9512 >>
BREAK
CASE 1
RETURN << -1332.1470, 152.7218, 56.9449 >>
BREAK
CASE 2
RETURN << -1340.3395, 165.9850, 57.0015 >>
BREAK
CASE 3
RETURN << -1330.3406, 172.5728, 57.0822 >>
BREAK
CASE 4
RETURN <<-1325.2750, 173.1006, 57.1633>>
BREAK
CASE 5
RETURN <<-1337.1770, 158.5159, 56.9107>>
BREAK
CASE 6
RETURN <<-1320.5304, 169.4781, 56.8531>>
BREAK
ENDSWITCH
BREAK
CASE 2
SWITCH spectateIndex
CASE 0
RETURN << -1230.4810, 103.0481, 55.7491 >>
BREAK
CASE 1
RETURN << -1234.8417, 95.7965, 55.6671 >>
BREAK
CASE 2
RETURN << -1243.4578, 95.5196, 55.5717 >>
BREAK
CASE 3
RETURN << -1245.1464, 112.5895, 55.9974 >>
BREAK
CASE 4
RETURN <<-1239.0730, 119.9953, 56.4275>>
BREAK
CASE 5
RETURN <<-1232.4279, 116.2665, 56.6504>>
BREAK
CASE 6
RETURN <<-1235.9989, 119.7500, 56.4250>>
BREAK
ENDSWITCH
BREAK
CASE 3
SWITCH spectateIndex
CASE 0
RETURN << -1101.0415, 27.2703, 50.1697 >>
BREAK
CASE 1
RETURN << -1094.1313, 23.7850, 50.0870 >>
BREAK
CASE 2
RETURN << -1087.6356, 20.9966, 50.0321 >>
BREAK
CASE 3
RETURN << -1080.5242, 13.8964, 49.7340 >>
BREAK
CASE 4
RETURN << -1086.1053, 4.0804, 49.7967 >>
BREAK
CASE 5
RETURN << -1097.6541, -1.5694, 50.0125 >>
BREAK
CASE 6
RETURN << -1108.6144, -4.9012, 49.6852 >>
BREAK
ENDSWITCH
BREAK
CASE 4
SWITCH spectateIndex
CASE 0
RETURN << -949.3773, -93.7449, 39.5250 >>
BREAK
CASE 1
RETURN << -965.4772, -92.9853, 39.3605 >>
BREAK
CASE 2
RETURN << -965.3192, -101.4310, 39.4042 >>
BREAK
CASE 3
RETURN << -952.4808, -99.1808, 39.5487 >>
BREAK
CASE 4
RETURN <<-958.3450, -103.7673, 39.3340>>
BREAK
CASE 5
RETURN <<-949.2680, -87.9874, 39.3694>>
BREAK
CASE 6
RETURN <<-951.5580, -85.9542, 39.2469>>
BREAK
ENDSWITCH
BREAK
CASE 5
SWITCH spectateIndex
CASE 0
RETURN << -1098.2764, -107.6579, 40.5369 >>
BREAK
CASE 1
RETURN << -1106.5730, -106.9375, 40.6960 >>
BREAK
CASE 2
RETURN << -1111.6543, -121.3032, 40.7039 >>
BREAK
CASE 3
RETURN << -1102.0128, -127.7622, 40.6900 >>
BREAK
CASE 4
RETURN <<-1092.9447, -115.8245, 40.5376>>
BREAK
CASE 5
RETURN <<-1094.2567, -122.7798, 40.5520>>
BREAK
CASE 6
RETURN <<-1092.9913, -118.4603, 40.5422>>
BREAK
ENDSWITCH
BREAK
CASE 6
SWITCH spectateIndex
CASE 0
RETURN << -1294.8875, 10.1593, 50.3758 >>
BREAK
CASE 1
RETURN << -1288.8715, 14.8418, 49.8751 >>
BREAK
CASE 2
RETURN << -1276.2704, 11.8301, 48.5562 >>
BREAK
CASE 3
RETURN << -1283.1622, -6.8256, 48.6238 >>
BREAK
CASE 4
RETURN <<-1275.6063, -2.0290, 48.0408>>
BREAK
CASE 5
RETURN <<-1273.7120, 5.2094, 48.1840>>
BREAK
CASE 6
RETURN <<-1293.3835, 0.3131, 49.4842>>
BREAK
ENDSWITCH
BREAK
CASE 7
SWITCH spectateIndex
CASE 0
RETURN << -1041.6849, -75.4766, 43.0439 >>
BREAK
CASE 1
RETURN << -1030.3097, -76.6724, 43.2806 >>
BREAK
CASE 2
RETURN << -1029.7913, -88.4011, 43.1511 >>
BREAK
CASE 3
RETURN << -1041.5754, -92.4546, 42.8253 >>
BREAK
CASE 4
RETURN <<-1050.4659, -93.7612, 42.5099>>
BREAK
CASE 5
RETURN <<-1050.8630, -84.3568, 42.5056>>
BREAK
CASE 6
RETURN <<-1048.3430, -82.4877, 42.5625>>
BREAK
ENDSWITCH
BREAK
CASE 8
SWITCH spectateIndex
CASE 0
RETURN << -1284.5513, 76.0288, 53.9062 >>
BREAK
CASE 1
RETURN << -1282.6757, 86.4323, 53.9098 >>
BREAK
CASE 2
RETURN <<-1299.2700, 80.8423, 53.9110>>
BREAK
CASE 3
RETURN <<-1299.1049, 87.1486, 53.9145>>
BREAK
CASE 4
RETURN <<-1290.0995, 74.7491, 53.9426>>
BREAK
CASE 5
RETURN <<-1292.3124, 90.6955, 53.9123>>
BREAK
CASE 6
RETURN <<-1291.1971, 89.2305, 53.9061>>
BREAK
ENDSWITCH
BREAK
ENDSWITCH
RETURN <<0,0,0>>
#ENDIF
ENDFUNC
FUNC BOOL SHOULD_USE_GREEN_SPECATE_FOR_COORD(VECTOR vShooterCoord, INT iHole)
SWITCH iHole
CASE 0
RETURN VDIST2(vShooterCoord, <<-1118.974365,216.739594,62.148014>> ) < (8.75 * 8.75)
BREAK
CASE 1
RETURN FALSE
BREAK
CASE 2
RETURN FALSE
BREAK
CASE 3
RETURN VDIST2(vShooterCoord, <<-1098.52, 10.75, 49.73>> ) < (25.00 * 25.00)
BREAK
CASE 4
RETURN FALSE
BREAK
CASE 5
RETURN FALSE
BREAK
CASE 6
RETURN FALSE
BREAK
CASE 7
RETURN FALSE
BREAK
CASE 8
RETURN FALSE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC FLOAT GET_GOLF_HOLE_TEE_RADIUS(INT iHole)
SWITCH iHole
CASE 0
RETURN 11.26
BREAK
CASE 1
RETURN 10.38
BREAK
CASE 2
RETURN 13.40
BREAK
CASE 3
RETURN 8.94
BREAK
CASE 4
RETURN 12.80
BREAK
CASE 5
RETURN 9.42
BREAK
CASE 6
RETURN 9.42
BREAK
CASE 7
RETURN 15.00
BREAK
CASE 8
RETURN 11.69
BREAK
ENDSWITCH
RETURN 0.0
ENDFUNC
FUNC BOOL IS_POINT_NEAR_TEE_BOX(VECTOR vWorldPoint)
INT iHole
REPEAT 9 iHole
IF VDIST2(GET_GOLF_HOLE_TEE_POSITION_STATIC(iHole), vWorldPoint) < (GET_GOLF_HOLE_TEE_RADIUS(iHole) * GET_GOLF_HOLE_TEE_RADIUS(iHole))
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL IS_POINT_BAD_LIE(VECTOR vWorldPos)
RETURN IS_POINT_NEAR_POINT( vWorldPos, <<-1215.93, -15.72, 45.21>>, 2.500)
ENDFUNC
/// PURPOSE:
/// Accessor for golf hole length
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// RETURNS:
///
FUNC FLOAT GET_GOLF_HOLE_LENGTH(GOLF_COURSE &golfCourse, INT holeIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN 0.0
ENDIF
RETURN golfCourse.golfHole[holeIndex].fHoleLength
ENDFUNC
/// PURPOSE:
/// Accessor for golf hole par
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// RETURNS:
///
FUNC INT GET_GOLF_HOLE_PAR(GOLF_COURSE &golfCourse, INT holeIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN 0
ENDIF
RETURN golfCourse.golfHole[holeIndex].iPar
ENDFUNC
FUNC INT GET_GOLF_HOLE_PAR_STATIC(INT holeIndex)
SWITCH holeIndex
CASE 0
RETURN 5
BREAK
CASE 1
RETURN 4
BREAK
CASE 2
RETURN 3
BREAK
CASE 3
RETURN 4
BREAK
CASE 4
RETURN 4
BREAK
CASE 5
RETURN 3
BREAK
CASE 6
RETURN 4
BREAK
CASE 7
RETURN 5
BREAK
CASE 8
RETURN 4
BREAK
ENDSWITCH
RETURN 0
ENDFUNC
/// PURPOSE:
/// Accessor for golf hole flag object
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// RETURNS:
///
FUNC OBJECT_INDEX GET_GOLF_HOLE_FLAG(GOLF_COURSE &golfCourse, INT holeIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
RETURN NULL
ENDIF
RETURN golfCourse.golfHole[holeIndex].objFlag
ENDFUNC
/// PURPOSE:
/// Accessor for golf hole flag object
/// PARAMS:
/// golfCourse -
/// holeIndex -
/// objFlag -
PROC SET_GOLF_HOLE_FLAG(GOLF_COURSE &golfCourse, INT holeIndex, OBJECT_INDEX objFlag)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
EXIT
ENDIF
golfCourse.golfHole[holeIndex].objFlag = objFlag
ENDPROC
/// PURPOSE:
/// Accessor for golf hole flag object
/// PARAMS:
/// golfCourse -
/// holeIndex -
PROC CLEANUP_GOLF_HOLE_FLAG(GOLF_COURSE &golfCourse, INT holeIndex)
IF holeIndex < 0 OR holeIndex >= golfCourse.iNumHoles
EXIT
ENDIF
IF DOES_ENTITY_EXIST(golfCourse.golfHole[holeIndex].objFlag)
DELETE_OBJECT(golfCourse.golfHole[holeIndex].objFlag)
ENDIF
ENDPROC
/// PURPOSE:
/// Accessor for golf course number of holes
/// PARAMS:
/// golfCourse -
/// RETURNS:
///
FUNC INT GET_GOLF_COURSE_NUM_HOLES(GOLF_COURSE &golfCourse)
RETURN golfCourse.iNumHoles
ENDFUNC
/// PURPOSE:
/// Accessor for golf course start position
/// PARAMS:
/// golfCourse -
/// playerIndex -
/// RETURNS:
///
FUNC VECTOR GET_GOLF_COURSE_START_POSITION(GOLF_COURSE &golfCourse, INT playerIndex)
IF playerIndex < 0 OR playerIndex >= COUNT_OF(golfCourse.vPlayerStartPosition)
RETURN <<0,0,0>>
ENDIF
RETURN golfCourse.vPlayerStartPosition[playerIndex]
ENDFUNC
/// PURPOSE:
/// Accessor for golf course cart position
/// PARAMS:
/// golfCourse -
/// playerIndex -
/// RETURNS:
///
FUNC VECTOR GET_GOLF_COURSE_CART_POSITION(GOLF_COURSE &golfCourse, INT playerIndex)
IF playerIndex < 0 OR playerIndex >= COUNT_OF(golfCourse.vCartStartPosition)
RETURN <<0,0,0>>
ENDIF
RETURN golfCourse.vCartStartPosition[playerIndex]
ENDFUNC
/// PURPOSE:
/// Accessor for golf course current player foursome hole
/// PARAMS:
/// golfCourse -
/// RETURNS:
///
FUNC INT GET_GOLF_COURSE_PLAYER_HOLE()
RETURN g_sGolfGlobals.CurrrentPlayerHole
ENDFUNC
/// PURPOSE:
/// Accessor for golf course current player foursome hole
/// PARAMS:
/// golfCourse -
/// iCurrentPlayerHole -
PROC SET_GOLF_COURSE_PLAYER_HOLE(INT iCurrentPlayerHole)
g_sGolfGlobals.CurrrentPlayerHole = iCurrentPlayerHole
ENDPROC
/// PURPOSE:
/// Accessor for golf course
/// PARAMS:
/// golfCourse -
FUNC INT GET_GOLF_COURSE_TOTAL_PAR(GOLF_COURSE &golfCourse)
RETURN golfCourse.iTotalPar
ENDFUNC
/// PURPOSE:
/// Accessor for golf course
/// PARAMS:
/// golfCourse -
/// iTotalPar -
PROC SET_GOLF_COURSE_TOTAL_PAR(GOLF_COURSE &golfCourse, INT iTotalPar)
golfCourse.iTotalPar = iTotalPar
ENDPROC
FUNC BOOL IS_GOLF_LIE_UNPLAYABLE(GOLF_LIE_TYPE lieType)
RETURN lieType = LIE_BUSH OR lieType = LIE_CART_PATH
ENDFUNC
FUNC GOLF_LIE_TYPE GET_GOLF_LIE_TYPE_FROM_MATERIAL(MATERIAL_NAMES lastMatHit)
SWITCH lastMatHit
CASE GOLF_ROUGH
CASE GOLF_ROUGH2
RETURN LIE_ROUGH
CASE GOLF_HARD_VEG3
CASE GOLF_SOFT_VEG
CASE GOLF_HARD_VEG1
CASE GOLF_HARD_VEG2
CASE GOLF_DIRT_TRACK
CASE GOLF_HARD_VEG4
RETURN LIE_BUSH
BREAK
CASE GOLF_MISC
CASE GOLF_FLAG_POLE
RETURN LIE_CUP
BREAK
CASE GOLF_PATH1
CASE GOLF_PATH2
CASE GOLF_CART_PATH
CASE GOLF_ROCKS
CASE GOLF_SAND //golf path can be compact sand
RETURN LIE_CART_PATH
BREAK
CASE GOLF_FAIRWAY
RETURN LIE_FAIRWAY
BREAK
CASE GOLF_GREEN
RETURN LIE_GREEN
BREAK
CASE GOLF_BUNKER
RETURN LIE_BUNKER
BREAK
CASE GOLF_WATER_HAZARD
RETURN LIE_WATER
BREAK
ENDSWITCH
#IF NOT GOLF_IS_AI_ONLY
CDEBUG1LN(DEBUG_GOLF,"Material not an enum ", lastMatHit)
#ENDIF
RETURN LIE_UNKNOWN
ENDFUNC
FUNC TEXT_LABEL_23 GET_LIE_STRING_FROM_ENUM(GOLF_LIE_TYPE eLie)
TEXT_LABEL_23 txtLie = "LIE_"
SWITCH eLie
CASE LIE_TEE
txtLie += "TEE"
BREAK
CASE LIE_FAIRWAY
txtLie += "FAIRWAY"
BREAK
CASE LIE_ROUGH
txtLie += "ROUGH"
BREAK
CASE LIE_BUNKER
txtLie += "BUNKER"
BREAK
CASE LIE_GREEN
txtLie += "GREEN"
BREAK
CASE LIE_CART_PATH
txtLie += "PATH"
BREAK
CASE LIE_WATER
txtLie += "WATER"
BREAK
DEFAULT
txtLie += "UNKNOWN"
BREAK
ENDSWITCH
RETURN txtLie
ENDFUNC
//Gets the center of the course, not complete
FUNC VECTOR GET_GOLF_COURSE_CENTER(GOLF_COURSE &thisCourse)
UNUSED_PARAMETER(thisCourse)
RETURN <<-1175, 40, 57>>
ENDFUNC