USING "minigames_helpers.sch" USING "minigame_UIInputs.sch" USING "socialclub_leaderboard.sch" USING "script_conversion.sch" USING "cheat_controller_public.sch" USING "golf_buddies.sch" USING "script_usecontext.sch" USING "golf_splash.sch" #IF NOT DEFINED(COMPILE_LOOKUPS) CONST_INT COMPILE_LOOKUPS 0 #ENDIF #IF NOT DEFINED(PUTTING_GREEN) CONST_INT PUTTING_GREEN 0 #ENDIF #IF NOT DEFINED(GOLF_IS_AI_ONLY) CONST_INT GOLF_IS_AI_ONLY 0 #ENDIF #IF NOT DEFINED(GOLF_USE_FALLTHROUGH_WORLD_CHECK) CONST_INT GOLF_USE_FALLTHROUGH_WORLD_CHECK 0 #ENDIF #IF IS_DEBUG_BUILD VECTOR vRingScale = <<0, 0, 1>> VECTOR vRingColour = <<0.037, 0.185, 0>> Float fRingAlpha = 0.0 VECTOR vDebugBounds1 = <<-1274.15, 186.79, 61.970>> VECTOR vDebugBounds2 = << -1255.380, 185.870, 0.0>> VECTOR vDebugBounds3 = << -1326.063, 192.648, 61.760>> VECTOR vDebugBounds4 = <<-1325.440, 183.78, 0.0>> VECTOR vDebugBounds5 = << -1159.35, 226.630, 70>> VECTOR vDebugBounds6 = <<-1152.920, 203.93, 0.0>> BOOL bDisableNaturalClubSpinEffects = FALSE #ENDIF BOOL bPCGolfControlsSetup = FALSE /// PURPOSE: /// Initialises the PC controls in a safe way PROC SETUP_PC_GOLF_CONTROLS() IF bPCGolfControlsSetup = FALSE INIT_PC_SCRIPTED_CONTROLS("Golf") bPCGolfControlsSetup = TRUE ENDIF ENDPROC // Cleans up the golf controls in a safe way PROC CLEANUP_PC_GOLF_CONTROLS() IF bPCGolfControlsSetup SHUTDOWN_PC_SCRIPTED_CONTROLS() bPCGolfControlsSetup = FALSE ENDIF ENDPROC /// PURPOSE: /// Meters to yards conversion, since the game runs on meters, but golf is traditionally represented in Yards/Feet /// PARAMS: /// fMeters - Meters to convert to yards /// RETURNS: /// Number of yards FUNC FLOAT METERS_TO_YARDS(FLOAT fMeters) RETURN fMeters * 1.0936133 ENDFUNC FUNC FLOAT YARDS_TO_METERS(FLOAT fYards) RETURN fYards/1.0936133 ENDFUNC FUNC FLOAT FEET_TO_METERS(FLOAT fFeet) RETURN fFeet*0.3048 ENDFUNC FUNC FLOAT INCH_TO_CM(FLOAT fInch) RETURN fInch * 2.54 ENDFUNC /// PURPOSE: /// Meters to feet conversion, since the game runs on meters, but golf is traditionally represented in Yards/Feet /// PARAMS: /// fMeters - Meters to convert to feet /// RETURNS: /// Number of feet //FUNC FLOAT METERS_TO_FEET(FLOAT fMeters) // RETURN fMeters * 3.2808 //ENDFUNC TWEAK_FLOAT MAGIC_DISTANCE_CONVERSION 1.85 // This is so we can make the existing hole seem like the right length. Displayed distances are multiplied by this, and club tunings are divided by //TWEAK_FLOAT predictWood1 1.0 //TWEAK_FLOAT predictWood3 1.0 //TWEAK_FLOAT predictWood5 70.0 //TWEAK_FLOAT predictIron3 65.0 //TWEAK_FLOAT predictIron4 60.0 //TWEAK_FLOAT predictIron5 55.0 //TWEAK_FLOAT predictIron6 50.0 //TWEAK_FLOAT predictIron7 45.0 //TWEAK_FLOAT predictIron8 40.0 //TWEAK_FLOAT predictIron9 35.0 //TWEAK_FLOAT predictPitch 30.0 //TWEAK_FLOAT predictSand 25.0 //TWEAK_FLOAT predictLob 20.0 TWEAK_INT CONST_TEE_PREVIEW_0 1000 TWEAK_INT CONST_TEE_PREVIEW_1 1300 TWEAK_INT CONST_TEE_PREVIEW_2 2500 TWEAK_INT CONST_TEE_PREVIEW_3 1200 TWEAK_INT CONST_TEE_PREVIEW_4 2000 TWEAK_INT CONST_TEE_PREVIEW_5 1800 TWEAK_INT CONST_TEE_PREVIEW_6 2000 TWEAK_INT CONST_TEE_PREVIEW_7 1800 TWEAK_INT CONST_TEE_PREVIEW_8 2100 TWEAK_INT CONST_GRAPH_TYPE 1 /// PURPOSE: Bitfield enum for controlling help and objective prints ENUM GOLF_STREAMING_FLAGS GSF_NO_STREAM_FLAG = 0, GSF_STREAM_CUTBACK_AFTER_SHOT = BIT0, GSF_STREAM_NEXT_SHOT_FOR_SKIPPING = BIT1, GSF_END_GAME_XP_CALCULATED = BIT2, GSF_SET_HELPER_BLIP_ADDRESS_NAME = BIT10, GSF_SET_HELPER_BLIP_IN_FLIGHT_NAME = BIT11, GSF_SKIP_AI_PRESSED = BIT12, GSF_REACTION_CAMERA_SET_UP = BIT13, GSF_SUCCESSFUL_LEADERBOARD_WRITE = BIT17, GSF_DONT_ALLOW_SOCIAL_CLUB = BIT18, GSF_SCORECARD_SOUND_PLAYED = BIT19, GSF_SCORECARD_STREAMVOL_LOADED = BIT20, GSF_SCORECARD_STREAMVOL_LOADINGNEXT = BIT21, GSF_SCORECARD_INITIAL_LOAD_DONE = BIT22, GSF_FORCE_SCORECARD_VOL_LOAD = BIT23, GSF_TURNED_OFF_EXPANDED_MAP = BIT24 ENDENUM /// PURPOSE: Enumeration for the state machine for the golf scripts ENUM GOLF_MINIGAME_STATE GMS_UNDEFINED = -1, GMS_PRE_INIT, GMS_PRE_INIT_WAIT, GMS_INIT, GMS_INIT_STREAMING_DONE, GMS_INIT_POST_STREAMING, GMS_INIT_DONE, GMS_PLAY_GOLF, GMS_EXIT_OK, GMS_SCOREBOARD_OVERRIDE, GMS_CLEANUP, GMS_OUTRO_QUIT, GMS_OUTRO_INIT, GMS_OUTRO, GMS_REMATCH, GMS_FAIL, GMS_RESET ENDENUM CONST_INT BIT31 (BIT30 * 2) // -2147483648 for 32-bit signed int, this definition works with code. /// PURPOSE: Bitfield enumeration for human player control to commmunicate with AI foursomes ENUM GOLF_CONTROL_FLAGS GCF_NO_FLAGS = 0, GCF_PLAYER_SKIP = BIT0, GCF_PLAYER_DONE_WITH_HOLE = BIT1, GCF_PLAYER_DONE_WITH_SHOT = BIT2, GCF_AI_HIT_BALL_THIS_FRAME = BIT3, GCF_WAS_PERFECT_HIT = BIT4, GCF_BALL_JUST_HIT = BIT5, GCF_BALL_JUST_LAND = BIT6, GCF_BALL_OOB = BIT7, GCF_STOP_INPUT = BIT8, GCF_TELPORT_CART = BIT9, GCF_MOVE_TO_REMATCH_SCREEN = BIT10, GCF_MP_START_QUIT_MENU = BIT11, GCF_MP_SYNC_SPLASH_TEXT = BIT12, GCF_MOVE_TO_NEXT_SHOT_MP = BIT13, GCF_MOVE_TO_NEXT_HOLE_MP = BIT14, GCF_MOVE_TO_NEXT_HOLE_MP_OVERRIDE = BIT15, GCF_OPPONENT_DONE_WITH_SHOT = BIT16, GCF_DONE_WITH_GAME = BIT17, GCF_PLAYED_HIT_PARTICLE_EFFECT_MP = BIT18, GCF_PLAYED_LAND_PARTICLE_EFFECT_MP = BIT19, GCF_PLAYED_HIT_SOUND_EFFECT_MP = BIT20, GCF_PLAYED_LAND_SOUND_EFFECT_MP = BIT21, GCF_TURN_OFF_SCOREBOARD_MP_OVERRIDE = BIT22, GCF_MP_OUTRO = BIT23, //send game to outro scene GCF_MP_PLAYED_BALL_IN_HOLE_SOUND = BIT24, GCF_BALL_IN_CUP_SOUND = BIT25, GCF_DISPLAY_QUITTER = BIT26, GCF_USING_CUTSCENE_SHADOW = BIT27, GCF_BALL_POP_SOUND = BIT28, GCF_BALL_IN_FOLIAGE = BIT29, GCF_IS_FRIEND_ACTIVITY = BIT30, GCF_PLAYER_NO_SKIP = BIT31 // This is so dangerous ENDENUM //Flags for the server ENUM GOLF_CONTROL_FLAGS2 GCF2_NO_FLAG = 0, GCF2_NEW_GOLFER_IS_SET = BIT1, GCF2_SYNC_BALL_IN_WATER_SOUND = BIT2, GCF2_BALL_CONTACT_SYNCED = BIT5, GCF2_GO_TO_REMATCH = BIT6, GCF2_PLAYER_HAS_TELEPORTED = BIT7, GCF2_DETACH_GOLF_CLUB = BIT8, GFC2_DISPLAYING_QUITING_PLAYER = BIT9, GFC2_AT_GOLF_SCOREBOARD = BIT10, GCF2_KICK_PLAYER = BIT12, GCF2_VIEWING_ADDRESS_BALL = BIT20 ENDENUM ENUM GOLF_UI_CONTROL GUC_NONE = 0, GUC_REFRESH_PERMANENT = BIT0, GUC_REFRESH_INPUT = BIT1, GUC_REFRESH_PUTT = BIT2, GUC_REFRESH_NAVIGATE = BIT3, GUC_REFRESH_ADDRESS = BIT4, GUC_REFRESH_SWING = BIT5, GUC_REFRESH_FLIGHT = BIT6, GUC_REFRESH_AT_REST = BIT7, GUC_REFRESH_IN_HOLE = BIT8, GUC_REFRESH_FLOATING = BIT10, GUC_REFRESH_GOLF_TRAIL = BIT11, GUC_MP_PLAYERS_ADDED = BIT12, GUC_USE_FILL_QUALITY = BIT13, GUC_DISABLE_UI = BIT14, GUC_END_GOLF_SCOREBOARD = BIT15, GUC_DISABLE_FADE_IN = BIT16, GUC_DISPLAY_NEW_BEST_SCORE = BIT17, GUC_DISPLAY_FIR = BIT18, GUC_DISPLAY_GIR = BIT19, GUC_DISPLAY_LONGEST_DRIVE = BIT20, GUC_DISPLAY_LONGEST_HOLE = BIT21, GUC_DISPLAY_CLOSEST_TO_PIN = BIT22, GUC_SPLASH_TEXT_DISPLAYED_THIS_TURN = BIT23, GUC_SOCIAL_CLUB_BOARD_DISPLAYED = BIT24, GUC_SOCIAL_CLUB_UI_DISPLAYED = BIT25, GUC_SWING_METER_DISPLAYED = BIT26, GUC_END_GAME_SPLASH_DISPLAYED = BIT27, GUC_STYLE_HELP_DISPLAYED = BIT28, GUC_SELECT_PLAYERS_DISPLAYED = BIT29, GUC_SCOREBOARD_DISPLAYED = BIT30 ENDENUM ENUM GOLF_DIALOGUE_FLAG GDF_NONE = 0, GDF_PARTNER_SAID_AIM_WARNING = BIT0, GDF_PLAYER_GET_IN_CART = BIT1 ENDENUM ENUM GOLF_HELP_DISPLAYED_FLAG GHD_NONE = 0, GHD_WOOD_DISPLAYED = BIT1, GHD_IRON_DISPLAYED = BIT2, GHD_WEDGE_DISPLAYED = BIT3, GHD_PUTTER_DISPLAYED = BIT4, GHD_STYLE_POWER_DISPLAYED = BIT5, GHD_STYLE_APPROACH_DISPLAYED = BIT6, GHD_STLYE_PUNCH_DISPLAYED = BIT7, GHD_WARNING_UNPLAYABLE_LIE = BIT8, GHD_WARNING_NEAR_LIMIT = BIT9, GHD_WARNING_HAZARD_ROUGH = BIT10, GHD_WARNING_HAZARD_SAND = BIT11, GHD_WARNING_KICK_FOR_TIME = BIT12, GHD_DISPLAY_UNPLAYABLE_LIE_HELP = BIT15, GHD_DISPLAY_SCORECARD_HELP = BIT26, GHD_START_TIE = BIT27, GHD_APPROCH_BALL_FOOT_DISPLAYED = BIT28, GHD_GOLF_TERMINATED_DISPLAYED = BIT30 ENDENUM ENUM GOLF_KEYS_IN_USE_FLAG GOLF_KEY_NONE = 0, GOLF_KEY_SOCIAL_CLUB = BIT1, GOLF_KEY_CONTINUE = BIT2, GOLF_KEY_SCROLL = BIT3, GOLF_KEY_QUIT = BIT4, GOLF_KEY_REPLAY = BIT5, GOLF_KEY_PROFILE = BIT6, GOLF_KEY_ON_TEE = BIT7 ENDENUM ENUM GOLF_OOB_REASON OOB_NONE = 0, OOB_WATER, OOB_UKNOWN_LIE, OOB_ON_WRONG_GREEN, OOB_UNPLAYABLE_LIE, OOB_OUTSIDE_BOUNDING_PLANES, OOB_OUTSIDE_HOLE_BOUNDING_SPHERES, OOB_RESTRICTIVE_POSITION ENDENUM ENUM GOLF_STATS_FLAG GSF_NONE = 0, GSF_UPDATED_STAT_SCORE = BIT1, //Updated Birdie Stat recently, so we should avoid calling it until the next hole GSF_UPDATE_SOME_OTHER_STAT = BIT2 ENDENUM //List of splash text, used for syncing splash text over network ENUM GOLF_SPLASH_TEXT_ENUM GOLF_SPLASH_NONE = 0, GOLF_SPLASH_HOLE_IN_ONE, GOLF_SPLASH_EAGLE2, GOLF_SPLASH_EAGLE, GOLF_SPLASH_BIRDIE, GOLF_SPLASH_PAR, GOLF_SPLASH_BOGEY, GOLF_SPLASH_BOGEY2, GOLF_SPLASH_BOGEY3, GOLF_SPLASH_BOGEY4, GOLF_SPLASH_BOGEY5, GOLF_SPLASH_FIR, GOLF_SPLASH_GIR, GOLF_SPLASH_LONGEST_DIVE, GOLF_SPLASH_LONGEST_HOLE, GOLF_SPLASH_CLOSEST_TO_PIN, GOLF_SPLASH_OOB, GOLF_SPLASH_WATER, GOLF_SPLASH_UNPLAYABLE, GOLF_SPLASH_OBSTRUCTED, GOLF_SPLASH_SCORE_LIMIT, GOLF_SPLASH_PERFECT_HIT ENDENUM ENUM GOLF_UI_DISPLAY_STATE GOLF_DISPLAY_NONE = 0, GOLF_DISPLAY_HOLE = BIT0, GOLF_DISPLAY_SHOT = BIT1, GOLF_DISPLAY_METER = BIT2, GOLF_DISPLAY_PLAYERCARD = BIT3, GOLF_DISPLAY_SCOREBOARD = BIT4, GOLF_DISPLAY_ALL = -1 ENDENUM ENUM SHOT_DISPLAY_STATE SHOT_DISPLAY_NONE = 0, SHOT_DISPLAY_LIE = BIT0, SHOT_DISPLAY_WIND = BIT1, SHOT_DISPLAY_CLUB = BIT2, SHOT_DISPLAY_SWING = BIT3, SHOT_DISPLAY_SPIN = BIT4, SHOT_DISPLAY_SHOT_NUM = BIT5, SHOT_DISPLAY_ALL = -1 ENDENUM ENUM GOLF_DISPLAYED_CONTROLS_STATE GDCS_NONE = 0, GDCS_SETUP_INTRO_KEYS, GDCS_SETUP_SCOREBOARD_KEYS, GDCS_SETUP_SOCIAL_CLUB_KEYS, GDCS_SETUP_GOLF_SCOREBOARD_CONTROLS, GDCS_SETUP_GOLF_NAV_CONTROLS, GDCS_SETUP_GOLF_ADRESS_CONTROLS, GDCS_SETUP_GOLF_SPECTATE_COMPUTER_CONTROLS, GDCS_SETUP_GOLF_SPECTATE_MP_CONTROLS, GDCS_SETUP_GOLF_BALL_IN_FLIGHT_CONTROLS, GDCS_SETUP_GOLF_FAIL_CONTROLS ENDENUM USING "golf_clubs.sch" /// PURPOSE: Single data representation for the golf game - contains global data used by all foursomes STRUCT GOLF_GAME GOLF_BAG golfBag VECTOR vWindDirection FLOAT fOldWindHeading FLOAT fWindStrength FLOAT fOldWindStrength GOLF_CONTROL_FLAGS golfControlFlags BOOL bPlayoffGame = FALSE INT iPlayoffRound = 0 ENDSTRUCT USING "golf_course.sch" USING "golf_swing_meter.sch" USING "golf_player.sch" USING "golf_foursome.sch" /// PURPOSE: State machine for intro cutscene ENUM GOLF_INTRO_STATE GIS_INTRO_FLYOVER_INIT, GIS_INTRO_FLYOVER_CAMERA1, GIS_INTRO_FLYOVER_CAMERA2, GIS_INTRO_FLYOVER_CAMERA3, GIS_INTRO_FLYOVER_CLEANUP, GIS_INTRO_FLYOVER_OVER ENDENUM //the type of camera the spectating player is using ENUM SPECTATOR_CAMERA_STATE GOLF_SPECTATOR_ADDRESS_CAM = 0, GOLF_SPECTATOR_CINEMATIC_CAM, GOLF_SPECTATOR_POV_CAM ENDENUM STRUCT GOLF_TRAIL VECTOR position0, velocity0, checkPointPos FLOAT velocityScale, z1 VECTOR radius, colorStart, colorMid, colorEnd, vAlpha INT numControlPoints, tessellation BOOL ascend FLOAT pixelThickness, pixelExpansion, fadeOpacity, fadeExponentBias, textureFill ENDSTRUCT STRUCT GOLF_INSTRUCTIONS FLOAT fInstrRectX FLOAT fInstrRectY FLOAT fInstrRectWidth FLOAT fInstrRectHeight FLOAT fInstrTextX FLOAT fInstrTextY ENDSTRUCT /// PURPOSE: Utility and helper data used by the local machine player for display of his foursome and thier play STRUCT GOLF_HELPERS SCALEFORM_INDEX golfUI SCALEFORM_INDEX floatingUI SCALEFORM_INDEX leaderboardUI COMPLEX_USE_CONTEXT useContext GOLF_UI_DISPLAY_STATE eCurrentGolfUIDisplay GOLF_UI_DISPLAY_STATE ePreviousGolfUIDisplay SHOT_DISPLAY_STATE eShotDisplayState GOLF_UI_CONTROL golfUIControl GOLF_DIALOGUE_FLAG golfDialogueFlag GOLF_HELP_DISPLAYED_FLAG golfHelpDisplayed //the help text was displayed, display no longer GOLF_HELP_DISPLAYED_FLAG golfHelpDisplaying //the help text is currently displaying INT golfKeysInUse GOLF_STATS_FLAG golfStatsFlag GOLF_TRAIL golfTrail GOLF_INSTRUCTIONS golfInstructionsBox GOLF_BUDDIES currentBuddies REL_GROUP_HASH golfersRelationshipHash GROUP_INDEX golfGroupIndex PED_VARIATION_STRUCT sPedVariations PED_VARIATION_STRUCT sFriendVariation PED_VARIATION_STRUCT sFriendVariationB VEHICLE_INDEX playerLastVehicle MODEL_NAMES vehicleName INT iVehicleColor INT iTimesPlayedGolf structPedsForConversation golfConversation //CHASE_HINT_CAM_STRUCT localChaseHintCamStruct GOLF_STREAMING_FLAGS golfStreaming INT soundRolling = -1 CAMERA_INDEX camNavigate CAMERA_INDEX camNavigate2 CAMERA_INDEX camFlight CAMERA_INDEX camAddress CAMERA_INDEX camPreview CAMERA_INDEX camPreviewSplineForward CAMERA_INDEX camLookAtGreen CAMERA_INDEX camReaction CAMERA_INDEX camMPApproach CAMERA_INDEX camUpStart CAMERA_INDEX camUpEnd CAMERA_INDEX camPauseAnimCamera CAMERA_INDEX camFlyover1, camFlyover2, camFlyover2End, camFlyover3 // VECTOR vMPApproachStartPos // VECTOR vMPApproachStartRot FLOAT fPreviewSplinePhase FLOAT fHoleSplinePhase, fHoleSplineStartPhase VECTOR vPreviewCamFinalPos VECTOR vAdressCamStartPos VECTOR vSpectateCamOffset INT iNumTimesFallThroughWorldCheckFailed VECTOR vLastSafeBallPosition VECTOR vLastGoodAddressCamPos FLOAT fCosShotAngleDevation FLOAT fPlayerHeadingAtShot GOLF_INTRO_STATE introState SPECTATOR_CAMERA_STATE spectatorCamState BOOL bTransitionToShotCamOver BOOL bShotPreviewCam INT bGreenPreviewCam BOOL bJustSwitchedSpectatorCam BOOL bIntroSkipped INT iNumAutoSwings INT iBlockNavMeshIndex = -1 INT iLastEndCameraIndex INT iMatchHistoryID BOOL bJustExitQuit BOOL bGameIsReplay BOOL bPlayerInVehicle BOOL bAllowPlayerViewCam BOOL bWantsTeleport BOOL bKeepPlayerInvisible[MP_GOLF_MAX_PLAYERS] STRUCTTIMER uiTimer // Generic UI timer (used for scoreboards, etc STRUCTTIMER navTimer // Generic gameplay timer STRUCTTIMER inputTimer // Generic input timer STRUCTTIMER cameraTimer // Generic camera timer STRUCTTIMER resetTimer STRUCTTIMER taskTimer STRUCTTIMER idleSpeechTimer STRUCTTIMER idleTimer STRUCTTIMER quitTimer //when player quits, gives us a little delay to display stuff STRUCTTIMER skipTimer //Timeout for skiping to the next player shot GOLF_SPLASH_TEXT_ENUM eLastSplashText SWING_STYLE eLastPuttStyle SWING_STYLE eLastSwingStyle // Moved from PLAYER struct OBJECT_INDEX objLongestDriveMarker BLIP_INDEX blipCenterOfCourse BLIP_INDEX blipPlayersBalls[MP_GOLF_MAX_PLAYERS] BLIP_INDEX blipCurrentHole BLIP_INDEX blipCurrentEstimate BOOL bInputCleared BOOL bWin = FALSE BOOL bEndResetScriptCam = TRUE INT iStartingHole INT iEndingHole INT iXPGained VEHICLE_SETUP_STRUCT sPlayerVehicle STREAMVOL_ID steamVolNextShot STREAMVOL_ID streamVolScorecard TEXT_LABEL_31 sAudioContext TEXT_LABEL_23 sFailReason PED_INDEX pedAudio INT iCastroIndex = -1 GOLF_DISPLAYED_CONTROLS_STATE golfDisplayedControls #IF GOLF_IS_MP PED_INDEX pedSpectating SCENARIO_BLOCKING_INDEX golfScenarioBlockingIndex PED_COMP_NAME_ENUM eFeetProp = DUMMY_PED_COMP #ENDIF ENDSTRUCT CONST_INT MAX_NUMBER_OF_GOLF_TRAIL_PROBES 13 #IF NOT GOLF_IS_AI_ONLY SHAPETEST_INDEX golfTrailShapeTest[MAX_NUMBER_OF_GOLF_TRAIL_PROBES] //INT iFramesForResults INT iGolfShapeTestFlags INT iLastSectionCompleted VECTOR vLastValidIntersect GOLF_LIE_TYPE eIntersectLie INT iGolfResetSceneID = -1 BOOL bAllowLeaderboardUpload = TRUE #ENDIF #IF IS_DEBUG_BUILD BOOL displayLines = FALSE BOOL bDebugDrawForces = FALSE // DEBUG BOOL bReattachClub BOOL bDebugDrawAI BOOL bRepositionPlayer BOOL bOcclusionCheck BOOL bInfiniteShots BOOL bDisplayStats BOOL bMaxSpin BOOL bTestReplay #IF GOLF_IS_AI_ONLY BOOL bAmbientGolfersOff = FALSE #ENDIF #ENDIF TWEAK_FLOAT DIST_TO_GREEN_HACK 55.0 #IF NOT GOLF_IS_AI_ONLY TWEAK_FLOAT ACCEPTABLE_DRIVE_DIST 100.0 #ENDIF TWEAK_FLOAT WIND_MULTIPLIER 0.5 TWEAK_FLOAT SPIN_MULTIPLIER_GROUND_DURATTION 25.0 TWEAK_FLOAT SPIN_MULTIPLIER_V_AIR 0.05 TWEAK_FLOAT SPIN_MULTIPLIER_H_AIR 0.2 TWEAK_FLOAT VELOCITY_DAMPEN_GREEN_C 2.960 TWEAK_FLOAT VELOCITY_DAMPEN_GREEN_V 0.0 TWEAK_FLOAT VELOCITY_DAMPEN_GREEN_A 0.0 TWEAK_FLOAT VELOCITY_DAMPEN_GREEN_APROACH 0.85 TWEAK_FLOAT VELOCITY_DAMPEN_FAIRWAY 0.85 TWEAK_FLOAT VELOCITY_DAMPEN_ROUGH 0.85 TWEAK_FLOAT VELOCITY_DAMPEN_BUNKER 0.35 TWEAK_FLOAT VELOCITY_DAMPEN_WATER 0.5 TWEAK_FLOAT VELOCITY_DAMPEN_CART_PATH 0.89 TWEAK_FLOAT VELOCITY_DAMPEN_FOLIAGE -5.0 TWEAK_FLOAT CART_PATH_BOUNCE_MULTIPLIER 0.75 TWEAK_FLOAT FAIRWAY_BOUNCE_MULTIPLIER 0.5 TWEAK_FLOAT GREEN_BOUNCE_MULTIPLIER 0.3 TWEAK_FLOAT ROUGH_BOUNCE_MULTIPLIER 0.25 TWEAK_FLOAT SAND_BOUNCE_MULTIPLIER 0.0 TWEAK_FLOAT CART_BOUNCE_SPEED_OVER_GROUND 0.2 TWEAK_FLOAT FAIRWAY_BOUNCE_SPEED_OVER_GROUND 0.55 TWEAK_FLOAT GREEN_BOUNCE_SPEED_OVER_GROUND 0.55 TWEAK_FLOAT ROUGH_BOUNCE_SPEED_OVER_GROUND 0.5 TWEAK_FLOAT SAND_BOUNCE_SPEED_OVER_GROUND 0.2 TWEAK_FLOAT BALL_VELOCITY_THRESHOLD_BOUNCE 9.5 TWEAK_FLOAT BALL_VELOCITY_THRESHOLD_NORMAL 0.5 TWEAK_FLOAT BALL_VELOCITY_THRESHOLD_GREEN 0.25 TWEAK_FLOAT BALL_VELOCITY_THRESHOLD_HOLE 6.0 TWEAK_FLOAT BALL_RADIUS 4.0 // m TWEAK_FLOAT BALL_IN_VEHICLE_RADIUS 12.0 TWEAK_FLOAT FAR_AWAY_THRESHOLD 150.0 TWEAK_FLOAT DIST_FOR_GIMMIE 0.7 TWEAK_FLOAT MAX_ANGLE_DEVIATION 15.0 TWEAK_FLOAT GIMMIE_FORCE_RADIUS 0.1601 //0.1625 is too big, 1.60 is too small TWEAK_FLOAT BALL_IN_HOLE_RADIUS 0.1 //FLOAT NEAR_SHOT_RADIUS = 50.0 //m TWEAK_FLOAT DIST_FOR_AI_GIMMIE_EASY 1.0 TWEAK_FLOAT DIST_FOR_AI_GIMMIE_MEDIUM 1.5 TWEAK_FLOAT DIST_FOR_AI_GIMMIE_HARD 2.5 TWEAK_FLOAT SWING_METER_POS_X 0.632 TWEAK_FLOAT SWING_METER_POS_Y 0.55 FLOAT MINIMAP_POS_X = -1213.0 FLOAT MINIMAP_POS_Y = 118.179 FLOAT MINIMAP_ZOOM_RATIO = 1.0 INT MINIMAP_ANGLE = 0 TWEAK_FLOAT fWoodlHitTime 0.160 TWEAK_FLOAT fIronHitTime 0.134 TWEAK_FLOAT fWedgeHitTime 0.119 TWEAK_FLOAT fPuttHitTime 0.159 TWEAK_FLOAT fPowerAdjustPreviewLineApproach 1.060 TWEAK_FLOAT fPowerAdjustPreviewLinePunch 1.08 TWEAK_FLOAT fLoftAdjustPreviewLine 0.04 VECTOR vApproachBallOffset = <<0.57, 0.030, 0>> FLOAT fApproachBallHeadingOffset = 50.0 CONST_FLOAT PREVIEWCAM_LERP 0.3 CONST_FLOAT CLOSE_PED_DIST2 1.0 //1*1 // Sand trap values CONST_FLOAT SAND_STEP_DISTANCE 0.5 CONST_FLOAT SAND_STEP_GAP 0.25 CONST_FLOAT SAND_STEP_HEIGHT 1.0 CONST_FLOAT SAND_STEP_WIDTH 1.0 CONST_FLOAT GOLF_BALL_BLIP_SCALE 0.67 #IF GOLF_IS_MP TWEAK_FLOAT fAutoSwingTime 60.0 // number of seconds before auto swing #ENDIF CONST_INT iMaxNumOfAutoSwingsBeforeKick 3 BOOL bDrivingRangeMode = FALSE// Debug BOOL bPerfectAccuracyMode = FALSE// Debug BOOL bDisableWindEffects = FALSE// Debug BOOL bDisableSpinEffects = FALSE #IF NOT GOLF_IS_AI_ONLY #IF IS_DEBUG_BUILD VECTOR vDebugShotPosition INT iDebugShotHole INT iDebugShotNumber INT iDebugShotLie BOOL bDebugShotUse = FALSE BOOL bDebugHardCodedShotUse = FALSE BOOL bMakePutt = FALSE BOOL bStopMPTimer = FALSE BOOL bHitOpponentBall = FALSE BOOL bUseDebugWind = FALSE INT iSetScore BOOL bSetPlayerScore[4] BOOL bGolfPause FLOAT fDebugBlendWeight BOOL bUseDebugBlendWeight #ENDIF #ENDIF BOOL bFlagPassed = FALSE CONST_INT NUM_ITERATIONS_IN_ESTIMATE 50 CONST_FLOAT MAX_EXPECTED_FLIGHT_TIME 5.0 CONST_FLOAT f_Vertical_decel -9.81 CONST_FLOAT f_forward_decel -4.0 //// ACCESSORS FOR HELPER STRUCT /// /// /// PURPOSE: /// Accessor for GOLF_HELPER long drive marker FUNC OBJECT_INDEX GET_GOLF_HELPER_LONG_DRIVE_MARKER(GOLF_HELPERS &thisHelpers) RETURN thisHelpers.objLongestDriveMarker ENDFUNC /// PURPOSE: /// Accessor for GOLF_HELPER shot blip FUNC BLIP_INDEX GET_GOLF_HELPER_BALL_BLIP(GOLF_HELPERS &thisHelpers, INT iPlayer) RETURN thisHelpers.blipPlayersBalls[iPlayer] ENDFUNC /// PURPOSE: /// Accessor for GOLF_HELPER shot blip PROC SET_GOLF_HELPER_BALL_BLIP(GOLF_HELPERS &thisHelpers, BLIP_INDEX blipCurrentShot, INT iPlayer) thisHelpers.blipPlayersBalls[iPlayer] = blipCurrentShot ENDPROC PROC CLEANUP_GOLF_HELPER_BALL_BLIP(GOLF_HELPERS &thisHelpers, INT iPlayer) IF DOES_BLIP_EXIST(thisHelpers.blipPlayersBalls[iPlayer]) REMOVE_BLIP(thisHelpers.blipPlayersBalls[iPlayer]) ENDIF ENDPROC PROC CLEANUP_GOLF_HELPER_ALL_BALL_BLIPS(GOLF_HELPERS &thisHelpers) INT index FOR index = 0 TO COUNT_OF(thisHelpers.blipPlayersBalls)-1 CLEANUP_GOLF_HELPER_BALL_BLIP(thisHelpers, index) ENDFOR ENDPROC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip FUNC BLIP_INDEX GET_GOLF_HELPER_HOLE_BLIP(GOLF_HELPERS &thisHelpers) RETURN thisHelpers.blipCurrentHole ENDFUNC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip PROC SET_GOLF_HELPER_HOLE_BLIP(GOLF_HELPERS &thisHelpers, BLIP_INDEX blipCurrentHole) thisHelpers.blipCurrentHole = blipCurrentHole ENDPROC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip PROC CLEANUP_GOLF_HELPER_HOLE_BLIP(GOLF_HELPERS &thisHelpers) IF DOES_BLIP_EXIST(thisHelpers.blipCurrentHole) REMOVE_BLIP(thisHelpers.blipCurrentHole) ENDIF ENDPROC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip FUNC BLIP_INDEX GET_GOLF_HELPER_ESTIMATE_BLIP(GOLF_HELPERS &thisHelpers) RETURN thisHelpers.blipCurrentEstimate ENDFUNC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip PROC SET_GOLF_HELPER_ESTIMATE_BLIP(GOLF_HELPERS &thisHelpers, BLIP_INDEX blipCurrentEstimate) thisHelpers.blipCurrentEstimate = blipCurrentEstimate ENDPROC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip PROC CLEANUP_GOLF_HELPER_ESTIMATE_BLIP(GOLF_HELPERS &thisHelpers) IF DOES_BLIP_EXIST(thisHelpers.blipCurrentEstimate) REMOVE_BLIP(thisHelpers.blipCurrentEstimate) ENDIF ENDPROC /* cart no longer has blip /// PURPOSE: /// Accessor for GOLF_HELPER hole blip FUNC BLIP_INDEX GET_GOLF_HELPER_VEHICLE_BLIP(GOLF_HELPERS &thisHelpers) RETURN thisHelpers.blipCurrentVehicle ENDFUNC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip PROC SET_GOLF_HELPER_VEHICLE_BLIP(GOLF_HELPERS &thisHelpers, BLIP_INDEX blipCurrentVehicle) thisHelpers.blipCurrentVehicle = blipCurrentVehicle ENDPROC /// PURPOSE: /// Accessor for GOLF_HELPER hole blip PROC CLEANUP_GOLF_HELPER_VEHICLE_BLIP(GOLF_HELPERS &thisHelpers) REMOVE_BLIP(thisHelpers.blipCurrentVehicle) ENDPROC //*/ /// PURPOSE: /// Accessor for GOLF_HELPER input cleared bool FUNC BOOL GET_GOLF_HELPER_INPUT_CLEARED(GOLF_HELPERS &thisHelpers) RETURN thisHelpers.bInputCleared ENDFUNC /// PURPOSE: /// Accessor for GOLF_HELPER input cleared bool PROC SET_GOLF_HELPER_INPUT_CLEARED(GOLF_HELPERS &thisHelpers, BOOL bInputCleared) thisHelpers.bInputCleared = bInputCleared ENDPROC /// PURPOSE: Helper function to get the servers game/mission state /// RETURNS: The server game state. FUNC GOLF_CONTROL_FLAGS GET_GOLF_CONTROL_FLAGS(GOLF_GAME &golfGame) RETURN golfGame.golfControlFlags ENDFUNC PROC OVERWRITE_GOLF_CONTROL_FLAGS(GOLF_GAME &golfGame, GOLF_CONTROL_FLAGS golfControlFlags) golfGame.golfControlFlags = golfControlFlags ENDPROC PROC SET_GOLF_CONTROL_FLAG(GOLF_GAME &golfGame, GOLF_CONTROL_FLAGS golfControlFlags) golfGame.golfControlFlags = golfGame.golfControlFlags | golfControlFlags ENDPROC PROC CLEAR_GOLF_CONTROL_FLAG(GOLF_GAME &golfGame, GOLF_CONTROL_FLAGS golfControlFlags) golfGame.golfControlFlags -= golfGame.golfControlFlags & golfControlFlags ENDPROC FUNC BOOL IS_GOLF_CONTROL_FLAG_SET(GOLF_GAME &golfGame, GOLF_CONTROL_FLAGS golfControlFlags) RETURN (golfGame.golfControlFlags & golfControlFlags) != GCF_NO_FLAGS ENDFUNC PROC RESET_GLOBAL_GOLF_DATA() g_sGolfGlobals.CurrrentPlayerHole = -1 g_sGolfGlobals.GlobalGolfControlFlag = ENUM_TO_INT(GGCF_NO_FLAGS) ENDPROC FUNC GOLF_UI_CONTROL GET_GOLF_UI_FLAGS(GOLF_HELPERS &golfHelpers) RETURN golfHelpers.golfUIControl ENDFUNC PROC OVERWRITE_GOLF_UI_FLAGS(GOLF_HELPERS &golfHelpers, GOLF_UI_CONTROL golfUIControl) golfHelpers.golfUIControl = golfUIControl ENDPROC PROC SET_GOLF_UI_FLAG(GOLF_HELPERS &golfHelpers, GOLF_UI_CONTROL golfUIControl) golfHelpers.golfUIControl = golfHelpers.golfUIControl | golfUIControl ENDPROC PROC CLEAR_GOLF_UI_FLAG(GOLF_HELPERS &golfHelpers, GOLF_UI_CONTROL golfUIControl) golfHelpers.golfUIControl -= golfHelpers.golfUIControl & golfUIControl ENDPROC FUNC BOOL IS_GOLF_UI_FLAG_SET(GOLF_HELPERS &golfHelpers, GOLF_UI_CONTROL golfUIControl) RETURN (golfHelpers.golfUIControl & golfUIControl) != GUC_NONE ENDFUNC //Keep track is a ui element has ever been displayed FUNC GOLF_HELP_DISPLAYED_FLAG GET_GOLF_HELP_DISPLAYED_FLAG(GOLF_HELPERS &golfHelpers) RETURN golfHelpers.golfHelpDisplayed ENDFUNC PROC OVERWRITE_GOLF_HELP_DISPLAYED_FLAG(GOLF_HELPERS &golfHelpers, GOLF_HELP_DISPLAYED_FLAG golfHelpDisplayed) golfHelpers.golfHelpDisplayed = golfHelpDisplayed ENDPROC PROC SET_GOLF_HELP_DISPLAYED_FLAG(GOLF_HELPERS &golfHelpers, GOLF_HELP_DISPLAYED_FLAG golfHelpDisplayed) golfHelpers.golfHelpDisplayed = golfHelpers.golfHelpDisplayed| golfHelpDisplayed ENDPROC PROC CLEAR_GOLF_HELP_DISPLAYED_FLAG(GOLF_HELPERS &golfHelpers, GOLF_HELP_DISPLAYED_FLAG golfHelpDisplayed) golfHelpers.golfHelpDisplayed -= golfHelpers.golfHelpDisplayed & golfHelpDisplayed ENDPROC FUNC BOOL IS_GOLF_HELP_DISPLAYED_FLAG_SET(GOLF_HELPERS &golfHelpers, GOLF_HELP_DISPLAYED_FLAG golfHelpDisplayed) RETURN (golfHelpers.golfHelpDisplayed & golfHelpDisplayed) != GHD_NONE ENDFUNC PROC SET_GOLF_HELP_CURRENTLY_DISPLAYING(GOLF_HELPERS &golfHelpers, GOLF_HELP_DISPLAYED_FLAG golfHelpDisplaying) golfHelpers.golfHelpDisplaying = golfHelpers.golfHelpDisplaying| golfHelpDisplaying ENDPROC PROC CLEAR_GOLF_HELP_CURRENTLY_DISPLAYING(GOLF_HELPERS &golfHelpers, GOLF_HELP_DISPLAYED_FLAG golfHelpDisplaying) golfHelpers.golfHelpDisplaying -= golfHelpers.golfHelpDisplaying & golfHelpDisplaying ENDPROC FUNC BOOL IS_GOLF_HELP_CURRENTLY_DISPLAYING(GOLF_HELPERS &golfHelpers, GOLF_HELP_DISPLAYED_FLAG golfHelpDisplaying) RETURN (golfHelpers.golfHelpDisplaying & golfHelpDisplaying) != GHD_NONE ENDFUNC //*/ //Dialogue flag FUNC GOLF_DIALOGUE_FLAG GET_GOLF_HELP_GOLF_DIALOGUE_FLAG(GOLF_HELPERS &golfHelpers) RETURN golfHelpers.golfDialogueFlag ENDFUNC PROC OVERWRITE_GOLF_DIALOGUE_FLAG(GOLF_HELPERS &golfHelpers, GOLF_DIALOGUE_FLAG golfDialogueFlag) golfHelpers.golfDialogueFlag = golfDialogueFlag ENDPROC PROC SET_GOLF_DIALOGUE_FLAG(GOLF_HELPERS &golfHelpers, GOLF_DIALOGUE_FLAG golfDialogueFlag) golfHelpers.golfDialogueFlag = golfHelpers.golfDialogueFlag| golfDialogueFlag ENDPROC PROC CLEAR_GOLF_DIALOGUE_FLAG(GOLF_HELPERS &golfHelpers, GOLF_DIALOGUE_FLAG golfDialogueFlag) golfHelpers.golfDialogueFlag -= golfHelpers.golfDialogueFlag & golfDialogueFlag ENDPROC FUNC BOOL IS_GOLF_DIALOGUE_FLAG_SET(GOLF_HELPERS &golfHelpers, GOLF_DIALOGUE_FLAG golfDialogueFlag) RETURN (golfHelpers.golfDialogueFlag & golfDialogueFlag) != GDF_NONE ENDFUNC //*/ FUNC GOLF_STREAMING_FLAGS GET_GOLF_STREAMING_FLAGS(GOLF_HELPERS &golfHelpers) RETURN golfHelpers.golfStreaming ENDFUNC PROC OVERWRITE_GOLF_STREAMING_FLAGS(GOLF_HELPERS &golfHelpers, GOLF_STREAMING_FLAGS golfStreaming) golfHelpers.golfStreaming = golfStreaming ENDPROC PROC SET_GOLF_STREAMING_FLAG(GOLF_HELPERS &golfHelpers, GOLF_STREAMING_FLAGS golfStreaming) golfHelpers.golfStreaming = golfHelpers.golfStreaming | golfStreaming ENDPROC PROC CLEAR_GOLF_STREAMING_FLAG(GOLF_HELPERS &golfHelpers, GOLF_STREAMING_FLAGS golfStreaming) golfHelpers.golfStreaming -= golfHelpers.golfStreaming & golfStreaming ENDPROC FUNC BOOL IS_GOLF_STREAMING_FLAG_SET(GOLF_HELPERS &golfHelpers, GOLF_STREAMING_FLAGS golfStreaming) RETURN (golfHelpers.golfStreaming & golfStreaming) != GSF_NO_STREAM_FLAG ENDFUNC PROC SET_GOLF_STATS_FLAG(GOLF_HELPERS &golfHelpers, GOLF_STATS_FLAG golfStatsFlag) golfHelpers.golfStatsFlag = golfHelpers.golfStatsFlag | golfStatsFlag ENDPROC PROC CLEAR_GOLF_STATS_FLAG(GOLF_HELPERS &golfHelpers, GOLF_STATS_FLAG golfStatsFlag) golfHelpers.golfStatsFlag -= golfHelpers.golfStatsFlag & golfStatsFlag ENDPROC FUNC BOOL IS_GOLF_STATS_FLAG_SET(GOLF_HELPERS &golfHelpers, GOLF_STATS_FLAG golfStatsFlag) RETURN (golfHelpers.golfStatsFlag & golfStatsFlag) != GSF_NONE ENDFUNC FUNC STRING GET_GOLF_TEXTURE_DICTIONARY_NAME() RETURN "GolfPutting" ENDFUNC FUNC BOOL IS_GOLF_FOURSOME_MP() #IF GOLF_IS_MP RETURN TRUE #ENDIF RETURN FALSE ENDFUNC PROC GOLF_PRINT_HELP(STRING txtHelp, BOOL bForever = FALSE, BOOL bNoSound = FALSE) IF IS_GOLF_SPLASH_DISPLAYING() AND IS_GOLF_FOURSOME_MP() EXIT ENDIF IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(txtHelp) //CDEBUG1LN(DEBUG_GOLF,"Displaying help ", txtHelp) bForever = bForever IF bForever IF bNoSound //this will probably assert PRINT_HELP_FOREVER_WITH_STRING_NO_SOUND (txtHelp, "") ELSE PRINT_HELP_FOREVER(txtHelp) ENDIF ELSE IF bNoSound PRINT_HELP_NO_SOUND(txtHelp) ELSE PRINT_HELP(txtHelp) ENDIF ENDIF ENDIF ENDPROC PROC GOLF_PRINT_GOD_TEXT(STRING txtHelp) //IF NOT IS_THIS_PRINT_BEING_DISPLAYED(txtHelp) PRINT_NOW(txtHelp, DEFAULT_GOD_TEXT_TIME, 1) //ENDIF ENDPROC PROC SET_GOLF_TRAIL_INTERSECT_FLAG(BOOL bSet) bSet = bSet #IF NOT GOLF_IS_AI_ONLY IF bSet SET_BIT(iGolfShapeTestFlags, 13) ELSE CLEAR_BIT(iGolfShapeTestFlags, 13) ENDIF #ENDIF ENDPROC PROC SET_GOLF_TRAIL_STYLE_CHANGE_FLAG(BOOL bSet) bSet = bSet #IF NOT GOLF_IS_AI_ONLY IF bSet SET_BIT(iGolfShapeTestFlags, 14) ELSE CLEAR_BIT(iGolfShapeTestFlags, 14) ENDIF #ENDIF ENDPROC PROC SET_GOLF_SHAPE_TEST_CREATE_FLAG(INT index, BOOl bSet) bSet = bSet index = index #IF NOT GOLF_IS_AI_ONLY IF bSet SET_BIT(iGolfShapeTestFlags, index) ELSE CLEAR_BIT(iGolfShapeTestFlags, index) ENDIF #ENDIF ENDPROC FUNC BOOL IS_GOLF_TRAIL_INTERSECT_FLAG_SET() #IF NOT GOLF_IS_AI_ONLY RETURN IS_BIT_SET(iGolfShapeTestFlags, 13) #ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_GOLF_TRAIL_STYLE_CHANGE_FLAG_SET() #IF NOT GOLF_IS_AI_ONLY RETURN IS_BIT_SET(iGolfShapeTestFlags, 14) #ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_GOLF_SHAPE_TEST_CREATE_FLAG_SET(INT index) index = index #IF NOT GOLF_IS_AI_ONLY RETURN IS_BIT_SET(iGolfShapeTestFlags, index) #ENDIF RETURN FALSE ENDFUNC PROC SET_GOLF_SHPAE_TEST_LAST_COMPLETED_SECTION(INT iSection) iSection = iSection #IF NOT GOLF_IS_AI_ONLY iLastSectionCompleted = iSection #ENDIF ENDPROC FUNC INT GET_GOLF_SHAPE_TEST_LAST_COMPLETED_SECTION() #IF NOT GOLF_IS_AI_ONLY RETURN iLastSectionCompleted #ENDIF RETURN 0 ENDFUNC PROC SET_GOLF_SHAPE_TEST_LAST_VALID_INTERSECT(VECTOR vIntersect) vIntersect.z = vIntersect.z #IF NOT GOLF_IS_AI_ONLY vLastValidIntersect = vIntersect #ENDIF ENDPROC FUNC VECTOR GET_GOLF_SHAPE_TEST_LAST_VALID_INTERSECT() #IF NOT GOLF_IS_AI_ONLY RETURN vLastValidIntersect #ENDIF RETURN <<0,0,0>> ENDFUNC PROC SET_GOLF_INTERSECT_LIE(GOLF_LIE_TYPE eLieType) eLieType = eLieType #IF NOT GOLF_IS_AI_ONLY eIntersectLie = eLieType #ENDIF ENDPROC FUNC GOLF_LIE_TYPE GET_GOLF_INTERSECT_LIE() #IF NOT GOLF_IS_AI_ONLY RETURN eIntersectLie #ENDIF RETURN LIE_UNKNOWN ENDFUNC FUNC BOOL IS_GOLF_LIE_SAFE(GOLF_LIE_TYPE lieType) // CDEBUG1LN(DEBUG_GOLF,"Intersect lie is ", GET_GOLF_INTERSECT_LIE()) IF lieType = LIE_FAIRWAY OR lieType = LIE_ROUGH OR lieType = LIE_GREEN RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_GOLF_LIE_SAFE_FOR_TELEPORT(GOLF_LIE_TYPE lieType) IF lieType = LIE_FAIRWAY OR lieType = LIE_ROUGH OR lieType = LIE_GREEN OR lieType = LIE_CART_PATH RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC CLEAR_GOLF_LINE_FLAGS() CDEBUG1LN(DEBUG_GOLF,"Clearing line flags") INT i //CDEBUG1LN(DEBUG_GOLF,"Clearing golf line flags") REPEAT MAX_NUMBER_OF_GOLF_TRAIL_PROBES i SET_GOLF_SHAPE_TEST_CREATE_FLAG(i, FALSE) ENDREPEAT SET_GOLF_SHPAE_TEST_LAST_COMPLETED_SECTION(0) SET_GOLF_TRAIL_INTERSECT_FLAG(FALSE) //DEBUG_PRINTCALLSTACK() ENDPROC FUNC VECTOR CONVERT_GOLF_ROTATION_TO_DIRECTION_VECTOR(VECTOR vRot) RETURN <<-SIN(vRot.z) * COS(vRot.x), COS(vRot.z) * COS(vRot.x), SIN(vRot.x)>> ENDFUNC //Finds the z value and checks if the change is too dramatic so we don't end up in a tree or something FUNC BOOL GOLF_FIND_GROUND_Z(VECTOR &retVector, FLOAT fTolerance = 2.0, FLOAT fZOffset = 1.0) FLOAT fHeight IF GET_GROUND_Z_FOR_3D_COORD(retVector+<<0,0,fZOffset>>, fHeight) IF ABSF(retVector.z - fHeight) < fTolerance //make sure the change in z position isn't too dramatic retVector.z = fHeight RETURN TRUE ELSE RETURN FALSE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_MAKE_PUTT_SET() #IF IS_DEBUG_BUILD #IF NOT GOLF_IS_AI_ONLY RETURN bMakePutt #ENDIF #ENDIF RETURN FALSE ENDFUNC FUNC BOOL GOLF_CAN_DISPLAY_SOCAIL_CLUB_LEADERBOARD() RETURN NETWORK_IS_SIGNED_ONLINE() AND NETWORK_IS_SIGNED_IN() AND SCRIPT_IS_CLOUD_AVAILABLE() AND IS_PLAYER_ONLINE() ENDFUNC FUNC STRING GET_GOLF_BASIC_ANIMATION_DICTIONARY_NAME() RETURN "MINI@GOLFAI" ENDFUNC FUNC STRING GET_GOLF_EXTRA_ANIMATION_DICTIONARY_NAME() RETURN "MINI@GOLF" ENDFUNC FUNC STRING GET_GOLF_ANIMATION_DICTIONARY_NAME(BOOL bUseExtraAnimations = FALSE) #IF GOLF_IS_AI_ONLY RETURN GET_GOLF_BASIC_ANIMATION_DICTIONARY_NAME() #ENDIF IF NOT bUseExtraAnimations RETURN GET_GOLF_BASIC_ANIMATION_DICTIONARY_NAME() ELSE RETURN GET_GOLF_EXTRA_ANIMATION_DICTIONARY_NAME() ENDIF ENDFUNC FUNC BOOL IS_GOLF_FULL_ROUND(GOLF_HELPERS &thisHelpers) RETURN thisHelpers.iStartingHole = 0 AND thisHelpers.iEndingHole = 8 ENDFUNC FUNC BOOL IS_HOLE_IN_PLAY(GOLF_HELPERS &thisHelpers, INT iHole) RETURN thisHelpers.iStartingHole <= iHole AND iHole <= thisHelpers.iEndingHole ENDFUNC FUNC BOOL IS_GOLF_CAM_ACTIVE(CAMERA_INDEX &golfCam) IF DOES_CAM_EXIST(golfCam) IF IS_CAM_ACTIVE(golfCam) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_GOLF_CAM_RENDERING(CAMERA_INDEX &golfCam) IF IS_GOLF_CAM_ACTIVE(golfCam) RETURN IS_CAM_RENDERING(golfCam) ENDIF RETURN FALSE ENDFUNC FUNC enumCharacterList GET_GOLF_PED_ENUM(PED_INDEX pedIndex) IF GET_PLAYER_PED_ENUM(pedIndex) = NO_CHARACTER RETURN GET_NPC_PED_ENUM(pedIndex) ENDIF RETURN GET_PLAYER_PED_ENUM(pedIndex) ENDFUNC FUNC BOOL GOLF_SHOULD_USE_FOREIGN_DISTANCE() RETURN DOES_CURRENT_LANGUAGE_USE_METRIC_SYSTEM() AND GET_CURRENT_LANGUAGE() != LANGUAGE_JAPANESE AND GET_CURRENT_LANGUAGE() != LANGUAGE_CHINESE AND GET_CURRENT_LANGUAGE() != LANGUAGE_KOREAN AND GET_CURRENT_LANGUAGE() != LANGUAGE_CHINESE_SIMPLIFIED //RETURN TRUE ENDFUNC PROC FREEZE_GOLF_BALL(OBJECT_INDEX golfBall, BOOL bFreeze) FREEZE_ENTITY_POSITION(golfBall, bFreeze) ENDPROC #IF NOT GOLF_IS_AI_ONLY USING "golf_stats.sch" #ENDIF