USING "minigames_helpers.sch" USING "golf.sch" USING "golf_buddies_lib.sch" ENUM GOLF_PLAYERCARD_BITS PCB_NONE = 0, PCB_HIGHLiGHT = BIT0, PCB_MP = BIT1, PCB_CREWTAG = BIT2, PCB_READY = BIT3, PCB_HIDE_BALL = BIT4, PCB_INACTIVE_HEADSET = BIT24, PCB_TALKING_HEADSET = BIT25 ENDENUM ENUM GOLF_HEADSET_STATE GOLF_HEADSET_NONE = 0, GOLF_HEADSET_INACTIVE = 1, GOLF_HEADSET_ACTIVE = 2, GOLF_HEADSET_MUTE = 3 ENDENUM PROC PLAY_GOLF_SPLASH_SOUND(GOLF_SPLASH_TEXT_ENUM eSplashEnum) IF eSplashEnum = GOLF_SPLASH_HOLE_IN_ONE CDEBUG1LN(DEBUG_GOLF,"Play hole in one sound") PLAY_SOUND_FRONTEND(-1, "GOLF_HUD_HOLE_IN_ONE_MASTER") ELIF eSplashEnum = GOLF_SPLASH_EAGLE2 OR eSplashEnum = GOLF_SPLASH_EAGLE CDEBUG1LN(DEBUG_GOLF,"Play eagle sound") PLAY_SOUND_FRONTEND(-1, "GOLF_EAGLE", "HUD_AWARDS") ELIF eSplashEnum = GOLF_SPLASH_BIRDIE CDEBUG1LN(DEBUG_GOLF,"Play birdie sound") PLAY_SOUND_FRONTEND(-1, "GOLF_BIRDIE", "HUD_AWARDS") ELIF eSplashEnum = GOLF_SPLASH_CLOSEST_TO_PIN OR eSplashEnum = GOLF_SPLASH_LONGEST_DIVE OR eSplashEnum = GOLF_SPLASH_LONGEST_HOLE CDEBUG1LN(DEBUG_GOLF,"Play new record sound") PLAY_SOUND_FRONTEND(-1, "GOLF_NEW_RECORD", "HUD_AWARDS") ELSE CDEBUG1LN(DEBUG_GOLF,"Play other splash sound") PLAY_SOUND_FRONTEND(-1, "OTHER_TEXT", "HUD_AWARDS") ENDIF ENDPROC PROC SET_SPLASH_TEXT(GOLF_HELPERS &thisHelpers, GOLF_SPLASH_TEXT_ENUM eSplashEnum = GOLF_SPLASH_NONE, STRING sSplash = NULL, STRING sStrapline = NULL, INT iNumInStrap = -1, INT iDuration = 4000) CDEBUG1LN(DEBUG_GOLF, "SPLASH - ", sSplash) HUD_COLOURS eHudColor = HUD_COLOUR_YELLOW IF (eSplashEnum >= GOLF_SPLASH_BOGEY AND eSplashEnum <= GOLF_SPLASH_BOGEY5) OR (eSplashEnum >= GOLF_SPLASH_OOB AND eSplashEnum <= GOLF_SPLASH_SCORE_LIMIT) eHudColor = HUD_COLOUR_RED ENDIF IF IS_STRING_NULL(sSplash) sSplash = "" CLEAR_GOLF_SPLASH() ELSE thisHelpers.eLastSplashText = eSplashEnum SET_GOLF_UI_FLAG(thisHelpers, GUC_SPLASH_TEXT_DISPLAYED_THIS_TURN) IF iNumInStrap >= 0 PLAY_GOLF_SPLASH_WITH_INT_IN_STRAP(sSplash, iNumInStrap, sStrapline, GOLF_SPLASH_SHARD_MIDSIZED, eHudColor, iDuration) ELSE IF eSplashEnum = GOLF_SPLASH_HOLE_IN_ONE OR eSplashEnum = GOLF_SPLASH_EAGLE2 OR eSplashEnum = GOLF_SPLASH_EAGLE OR eSplashEnum = GOLF_SPLASH_BIRDIE HUD_COLOURS eEndHudColor = HUD_COLOUR_YELLOW IF IS_GOLF_FOURSOME_MP() eEndHudColor = HUD_COLOUR_BLUE ENDIF PLAY_GOLF_SPLASH(sSplash, sStrapline, GOLF_SPLASH_SHARD_MIDSIZED, eHudColor, iDuration, FALSE, eEndHudColor) ELSE PLAY_GOLF_SPLASH(sSplash, sStrapline, GOLF_SPLASH_SHARD_MIDSIZED, eHudColor, iDuration) ENDIF ENDIF IF eSplashEnum != GOLF_SPLASH_NONE PLAY_GOLF_SPLASH_SOUND(eSplashEnum) ENDIF ENDIF ENDPROC PROC OVERWRITE_GOLF_UI_DISPLAY(GOLF_HELPERS &thisHelpers, GOLF_UI_DISPLAY_STATE uiState) thisHelpers.eCurrentGolfUIDisplay = uiState ENDPROC PROC SET_GOLF_UI_DISPLAY(GOLF_HELPERS &thisHelpers, GOLF_UI_DISPLAY_STATE uiState) thisHelpers.eCurrentGolfUIDisplay = thisHelpers.eCurrentGolfUIDisplay | uiState ENDPROC PROC CLEAR_GOLF_UI_DISPLAY(GOLF_HELPERS &thisHelpers, GOLF_UI_DISPLAY_STATE uiState) thisHelpers.eCurrentGolfUIDisplay -= thisHelpers.eCurrentGolfUIDisplay & uiState ENDPROC PROC MANAGE_GOLF_UI_DISPLAY(GOLF_HELPERS &thisHelpers) GOLF_UI_DISPLAY_STATE eDisplayUI = thisHelpers.eCurrentGolfUIDisplay IF NOT IS_MINIMAP_RENDERING() eDisplayUI -= eDisplayUI & GOLF_DISPLAY_HOLE //don't show the box if the minimap isn't rendering ENDIF IF eDisplayUI != thisHelpers.ePreviousGolfUIDisplay CDEBUG1LN(DEBUG_GOLF,"Change ui display state") IF (thisHelpers.eCurrentGolfUIDisplay & GOLF_DISPLAY_HOLE) != GOLF_DISPLAY_NONE CDEBUG1LN(DEBUG_GOLF,"GOLF_DISPLAY_HOLE") ENDIF IF (thisHelpers.eCurrentGolfUIDisplay & GOLF_DISPLAY_SHOT) != GOLF_DISPLAY_NONE CDEBUG1LN(DEBUG_GOLF,"GOLF_DISPLAY_SHOT") ENDIF IF (thisHelpers.eCurrentGolfUIDisplay & GOLF_DISPLAY_METER) != GOLF_DISPLAY_NONE CDEBUG1LN(DEBUG_GOLF,"GOLF_DISPLAY_METER") ENDIF IF (thisHelpers.eCurrentGolfUIDisplay & GOLF_DISPLAY_PLAYERCARD) != GOLF_DISPLAY_NONE CDEBUG1LN(DEBUG_GOLF,"GOLF_DISPLAY_PLAYERCARD") ENDIF //When the scoreboard is up, we don't want anything else up IF (thisHelpers.eCurrentGolfUIDisplay & GOLF_DISPLAY_SCOREBOARD) != GOLF_DISPLAY_NONE CDEBUG1LN(DEBUG_GOLF,"GOLF_DISPLAY_SCOREBOARD") BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_DISPLAY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(GOLF_DISPLAY_SCOREBOARD)) END_SCALEFORM_MOVIE_METHOD() ELSE CDEBUG1LN(DEBUG_GOLF,"GOLF_DISPLAY_UI") BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_DISPLAY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eDisplayUI)) END_SCALEFORM_MOVIE_METHOD() ENDIF thisHelpers.ePreviousGolfUIDisplay = eDisplayUI ENDIF ENDPROC FUNC TEXT_LABEL GET_SCORE_TEXT(INT iScore, INT iCurrentPar, HUD_COLOURS &eScoreColour) TEXT_LABEL txtScore IF iScore != iCurrentPar IF iScore < iCurrentPar eScoreColour = HUD_COLOUR_GREEN txtScore = "-" ELSE eScoreColour = HUD_COLOUR_RED txtScore = "+" ENDIF txtScore += ABSI(iScore - iCurrentPar) ELSE eScoreColour = HUD_COLOUR_BLACK txtScore = "E" ENDIF RETURN txtScore ENDFUNC FUNC INT GET_SCORE_ICON_FOR_HOLE(INT iHole, INT iScore, INT iPar) CDEBUG1LN(DEBUG_GOLF,"Checking icon for hole ", iHole , " score " ,iScore , " par ", iPar) IF iPar = iScore CDEBUG1LN(DEBUG_GOLF,"Par on hole ", iHole) RETURN 0 //no mark ENDIF INT iBit = BIT6 //mark hole in one iBit = SHIFT_LEFT(iBit, (iHole*2)) //shift for current hole, each hole is two bits IF iScore = 1 //we are good ELSE IF iScore < iPar CDEBUG1LN(DEBUG_GOLF,"Below on hole ", iHole) iBit = SHIFT_LEFT(iBit, 1) //shift one for below par ELSE //mark the next bit as well as the current for above par CDEBUG1LN(DEBUG_GOLF,"Above on hole ", iHole) iBit |= SHIFT_LEFT(iBit, 1) ENDIF ENDIF RETURN iBit ENDFUNC #IF NOT GOLF_IS_AI_ONLY PROC INITIALISE_PLAYERCARD_SCORES(GOLF_FOURSOME &thisFoursome) INT iPlayerIndex REPEAT GET_GOLF_FOURSOME_NUM_PLAYERS(thisFoursome) iPlayerIndex thisFoursome.playerCore[iPlayerIndex].playerCard.iCardScore = 0 ENDREPEAT ENDPROC PROC SET_PLAYERCARD_SCORES(GOLF_FOURSOME &thisFoursome, GOLF_HELPERS &thisHelpers, INT iPlayerIndex, INT iScore, BOOL bNextHole) INT iHole, iCurrentPar, iCurrentHole iCurrentHole = GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome) IF bNextHole iCurrentHole = GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome) + 1 ENDIF REPEAT iCurrentHole iHole IF IS_HOLE_IN_PLAY(thisHelpers, iHole) iCurrentPar += GET_GOLF_HOLE_PAR_STATIC(iHole) ENDIF ENDREPEAT CDEBUG1LN(DEBUG_GOLF,"Setting card score of player ", iPlayerIndex ," to ", (iScore - iCurrentPar)) thisFoursome.playerCore[iPlayerIndex].playerCard.iCardScore = (iScore - iCurrentPar) ENDPROC FUNC INT GET_SLOT_FOR_SCORE(GOLF_FOURSOME &thisFoursome, GOLF_PLAYER_SCORECARD &playerCard) INT iPlayerIndex INT iSlot = 0 REPEAT GET_GOLF_FOURSOME_NUM_PLAYERS(thisFoursome) iPlayerIndex IF NOT IS_GOLF_FOURSOME_INDEXED_PLAYER_CONTROL_FLAG_SET(thisFoursome, iPlayerIndex, GOLF_PLAYER_REMOVED) IF iPlayerIndex != playerCard.ID IF thisFoursome.playerCore[iPlayerIndex].playerCard.iCardScore < playerCard.iCardScore iSlot++ //my score is bigger then someones, increase my index ELIF thisFoursome.playerCore[iPlayerIndex].playerCard.iCardScore = playerCard.iCardScore //my score is equal to someones CDEBUG1LN(DEBUG_GOLF,"PLayer ", iPlayerIndex, " and player ", playerCard.ID, " have equal scores") IF iPlayerIndex < playerCard.ID //I have the larger player id iSlot++ ENDIF ENDIF ENDIF ENDIF ENDREPEAT RETURN iSlot ENDFUNC PROC SET_PLAYERCARD_SLOT(GOLF_HELPERS &thisHelpers, GOLF_FOURSOME &thisFoursome, GOLF_PLAYER_SCORECARD &playerCard, INT iScore, BOOL bUseLiteralName, BOOL bNextHole, INT netIndex = -1) TEXT_LABEL txtScore HUD_COLOURS eScoreColour GOLF_PLAYERCARD_BITS eStatus INT iHole, iCurrentPar, iCurrentHole IF playerCard.ID < 0 CDEBUG1LN(DEBUG_GOLF,"Trying to set card of invalid player") EXIT ENDIF iCurrentHole = GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome) IF bNextHole iCurrentHole = GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome) + 1 ENDIF REPEAT iCurrentHole iHole IF IS_HOLE_IN_PLAY(thisHelpers, iHole) iCurrentPar += GET_GOLF_HOLE_PAR_STATIC(iHole) ENDIF ENDREPEAT CDEBUG1LN(DEBUG_GOLF,"Finding score after hole ", iCurrentHole, " Score passed in is ", iScore) txtScore = GET_SCORE_TEXT(iScore, iCurrentPar, eScoreColour) CDEBUG1LN(DEBUG_GOLF,"Current player is ", GET_GOLF_FOURSOME_CURRENT_PLAYER(thisFoursome)) IF GET_GOLF_FOURSOME_CURRENT_PLAYER(thisFoursome) = playerCard.ID eStatus |= PCB_HIGHLiGHT ENDIF IF IS_GOLF_FOURSOME_MP() eStatus |= PCB_MP IF NOT IS_STRING_EMPTY(playerCard.crewTag) eStatus |= PCB_CREWTAG ENDIF PARTICIPANT_INDEX partIndex = INT_TO_PARTICIPANTINDEX(netIndex) IF NETWORK_IS_PARTICIPANT_ACTIVE(partIndex) GAMER_HANDLE gamer = GET_GAMER_HANDLE_PLAYER( NETWORK_GET_PLAYER_INDEX(partIndex) ) IF NETWORK_PLAYER_HAS_HEADSET(NETWORK_GET_PLAYER_INDEX(partIndex)) IF NETWORK_IS_PLAYER_MUTED_BY_ME(NETWORK_GET_PLAYER_INDEX(partIndex)) eStatus |= (PCB_INACTIVE_HEADSET | PCB_TALKING_HEADSET) //muted headset ELSE IF NETWORK_IS_PLAYER_TALKING(NETWORK_GET_PLAYER_INDEX(partIndex)) OR NETWORK_IS_CHATTING_IN_PLATFORM_PARTY(gamer) OR NETWORK_IS_GAMER_TALKING(gamer) eStatus |= PCB_TALKING_HEADSET //talking headset ELSE eStatus |= PCB_INACTIVE_HEADSET //inactive headset ENDIF ENDIF ENDIF ENDIF ENDIF INT iSlot = GET_SLOT_FOR_SCORE(thisFoursome, playerCard) playerCard.iCurrentSlot = iSlot CDEBUG1LN(DEBUG_GOLF,"Head shot texture for player ", playerCard.ID, " ", playerCard.mugShotName) CDEBUG1LN(DEBUG_GOLF,"Crew tag for player, ", playerCard.crewTag) CDEBUG1LN(DEBUG_GOLF,"Slot, ", iSlot) BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_PLAYERCARD_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) //spot on card SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eStatus)) //state IF bUseLiteralName SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(playerCard.sPlayerName) //Player name ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(playerCard.sPlayerName) //Player name from text file ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(playerCard.crewTag) //Crew Tag SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(playerCard.mugShotDic) SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(playerCard.mugShotName) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(playerCard.eBallColour)) //ball colour SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(txtScore) //score text SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eScoreColour)) //score colour END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_SCOREBOARD_SLOT(GOLF_HELPERS &thisHelpers, GOLF_COURSE &thisCourse, GOLF_FOURSOME &thisFoursome, GOLF_PLAYER &Player, GOLF_PLAYER_SCORECARD &playerCard, BOOL bUseLiteralName, BOOL bNextHole, BOOL bSetReady = FALSE) TEXT_LABEL txtScore TEXT_LABEL txtStrokes[18] HUD_COLOURS eScoreColour INT iScore = 0 INT iCurrentPar = 0 GOLF_PLAYERCARD_BITS eStatus INT iHole, iCurrentHole CDEBUG1LN(DEBUG_GOLF,"set scoreboard slot") DEBUG_PRINTCALLSTACK() IF playerCard.ID < 0 CDEBUG1LN(DEBUG_GOLF,"Trying to set scoreboard of invalid player") EXIT ENDIF IF bNextHole CDEBUG1LN(DEBUG_GOLF,"Set scoreboard slot for next hole") iCurrentHole = GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome) + 1 ELSE iCurrentHole = GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome) ENDIF IF GET_GOLF_FOURSOME_LOCAL_PLAYER(thisFoursome) = playerCard.ID eStatus |= PCB_HIGHLiGHT ENDIF IF IS_GOLF_FOURSOME_MP() eStatus |= PCB_MP IF NOT IS_STRING_EMPTY(playerCard.crewTag) eStatus |= PCB_CREWTAG ENDIF ENDIF IF bSetReady eStatus |= PCB_READY ENDIF REPEAT GET_GOLF_COURSE_NUM_HOLES(thisCourse) iHole IF IS_HOLE_IN_PLAY(thisHelpers, iHole) CDEBUG1LN(DEBUG_GOLF,"Score on hole ", iHole, " is ", Player.iCourseScore[iHole].iHoleScore) IF Player.iCourseScore[iHole].iHoleScore != 0 AND iHole < iCurrentHole //causes problems in total par slot when looping txtStrokes[iHole] = Player.iCourseScore[iHole].iHoleScore iScore += Player.iCourseScore[iHole].iHoleScore eStatus |= INT_TO_ENUM(GOLF_PLAYERCARD_BITS, GET_SCORE_ICON_FOR_HOLE(iHole, Player.iCourseScore[iHole].iHoleScore, GET_GOLF_HOLE_PAR(thisCourse, iHole))) iCurrentPar += GET_GOLF_HOLE_PAR(thisCourse, iHole) ELSE txtStrokes[iHole] = " " ENDIF ELSE txtStrokes[iHole] = "" ENDIF ENDREPEAT txtScore = GET_SCORE_TEXT(iScore, iCurrentPar, eScoreColour) txtScore += " (" txtScore += iScore txtScore += ")" INT iSlot = GET_SLOT_FOR_SCORE(thisFoursome, playerCard) playerCard.iScoreboardSlot = iSlot CDEBUG1LN(DEBUG_GOLF,"iScore! ",iScore, " iCurrentPar ", iCurrentPar, " txtScore ", txtScore, " slot ", iSlot) BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_SCOREBOARD_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSlot) //slot SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eStatus)) //state IF bUseLiteralName SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(playerCard.sPlayerName) //Player name ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(playerCard.sPlayerName) //Player name from text file ENDIF SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(playerCard.crewTag) //Crew Tag SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PLAYER_READY") //Ready string SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(playerCard.eBallColour)) //Ball colour SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(txtScore) //Total Score SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(eScoreColour)) //Score Colour REPEAT GET_GOLF_COURSE_NUM_HOLES(thisCourse) iHole IF IS_STRING_NULL_OR_EMPTY(txtStrokes[iHole]) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("GOLF_ENDASH") ELSE SCALEFORM_MOVIE_METHOD_ADD_PARAM_PLAYER_NAME(txtStrokes[iHole]) ENDIF ENDREPEAT END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC REMOVE_PLAYER(SCALEFORM_INDEX golfUI, INT iPlayerIndex) BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "CLEAR_PLAYERCARD_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iPlayerIndex) END_SCALEFORM_MOVIE_METHOD() BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "CLEAR_SCOREBOARD_SLOT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iPlayerIndex) END_SCALEFORM_MOVIE_METHOD() ENDPROC #ENDIF PROC SET_SHOT_DISPLAY(GOLF_HELPERS &thisHelpers, SHOT_DISPLAY_STATE shotDisplayState, STRING sLie, GOLF_LIE_TYPE shotLieDisplay, FLOAT fWindDirection, INT iWindSpeed, STRING sClubName, eCLUB_TYPE shotClubDisplay, STRING sShotName, INT iSpinPower, FLOAT fSpinDirection, INT iShotNum, BOOL bUseArrows) INT iClub = ENUM_TO_INT(shotClubDisplay) IF shotLieDisplay = LIE_UNKNOWN shotLieDisplay = LIE_UNKNOWN_UI ENDIF shotLieDisplay += INT_TO_ENUM(GOLF_LIE_TYPE, 2) //ui is off from script enum BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_SWING_DISPLAY") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(shotDisplayState)) //shot display state SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sLie) //Lie name SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(shotLieDisplay)) //Lie picture BEGIN_TEXT_COMMAND_SCALEFORM_STRING("GOLF_WIND_PLUS") //Wind speed ADD_TEXT_COMPONENT_INTEGER(iWindSpeed) END_TEXT_COMMAND_SCALEFORM_STRING() SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fWindDirection) //Wind Heading SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sClubName) //Club Name SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iClub) //Club picture SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sShotName) //normal, power, punch approach SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bUseArrows) //left right arrows next to shot name SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("GOLF_SPIN") //Spin name SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSpinPower) //Spin power SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fSpinDirection) //Spin direction BEGIN_TEXT_COMMAND_SCALEFORM_STRING("SHOT_NUM") //Shot Number ADD_TEXT_COMPONENT_INTEGER(iShotNum) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC UPDATE_SHOT_DISPLAY(GOLF_HELPERS &thisHelpers, GOLF_FOURSOME &thisFoursome, GOLF_GAME &thisGame, GOLF_PLAYER_CORE &thisPlayerCore, SWING_METER &swingMeter) eCLUB_TYPE eClub = GET_GOLF_CLUB_TYPE(thisGame.golfBag, GET_GOLF_PLAYER_CURRENT_CLUB(thisPlayerCore)) TEXT_LABEL_23 txtLie = GET_LIE_STRING_FROM_ENUM(GET_GOLF_PLAYER_LIE(thisPlayerCore)) TEXT_LABEL_23 txtClub = GET_CLUB_STRING_FROM_ENUM(eClub) TEXT_LABEL_23 txtSwing = GET_STYLE_STRING_FROM_ENUM(GET_GOLF_PLAYER_SWING_STYLE(thisPlayerCore)) FLOAT windSpeed = thisGame.fWindStrength IF windSpeed < 1.0 windSpeed = 1.0 ELIF windSpeed > 12.0 //wind speed should never really get higher then this but just incase it does, cap it windSpeed = 12.0 ENDIF BOOL bUseArrows = FALSE // IF GET_GOLF_FOURSOME_CURRENT_PLAYER(thisFoursome) != GET_GOLF_FOURSOME_LOCAL_PLAYER(thisFoursome) // bUseArrows = FALSE // ENDIF FLOAT fSpinHeading, fSpinPower fSpinHeading = GET_HEADING_FROM_VECTOR_2D(swingMeter.fXSpin, swingMeter.fYSpin) + 90 fSpinPower = (SQRT(swingMeter.fXSpin*swingMeter.fXSpin + swingMeter.fYSpin*swingMeter.fYSpin) / 128) * 200 fSpinPower = FMIN(100.0, fSpinPower+0.1) SET_SHOT_DISPLAY(thisHelpers, thisHelpers.eShotDisplayState, txtLie, GET_GOLF_PLAYER_LIE(thisPlayerCore), thisGame.fOldWindHeading, FLOOR(windSpeed), txtClub, eClub, txtSwing, FLOOR(fSpinPower), fSpinHeading, GET_GOLF_FOURSOME_CURRENT_PLAYER_SHOTS_ON_HOLE(thisFoursome)+1, bUseArrows) ENDPROC PROC SET_HOLE_DISPLAY(GOLF_HELPERS &thisHelpers, INT iHole = -1, INT iPar = -1, INT iDistance = -1) BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_HOLE_DISPLAY") BEGIN_TEXT_COMMAND_SCALEFORM_STRING("GOLF_HOLE_NUM") ADD_TEXT_COMPONENT_INTEGER(iHole) END_TEXT_COMMAND_SCALEFORM_STRING() BEGIN_TEXT_COMMAND_SCALEFORM_STRING("GOLF_PAR_NUM") ADD_TEXT_COMPONENT_INTEGER(iPar) END_TEXT_COMMAND_SCALEFORM_STRING() TEXT_LABEL_23 sUnits = "GOLF_HOLE_DIST" IF GOLF_SHOULD_USE_FOREIGN_DISTANCE() sUnits = "DIST_METER" iDistance = FLOOR(YARDS_TO_METERS( TO_FLOAT(iDistance))) ENDIF BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sUnits) ADD_TEXT_COMPONENT_INTEGER(iDistance) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_SCOREBOARD_TITLE(GOLF_HELPERS &thisHelpers) BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_SCOREBOARD_TITLE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("TITLE_STANDING") //Title SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_ALLCAPS") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_ALLCAPS") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("SCORE_ALLCAPS") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("SCORE_HOLEINONE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("SCORE_BELOW_PAR") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("SCORE_ABOVE_PAR") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_1") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_2") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_3") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_4") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_5") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_6") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_7") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_8") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("HOLE_9") END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_COURSE_PAR(GOLF_HELPERS &thisHelpers) BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "COURSE_PAR") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_5") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_4") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_3") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_4") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_4") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_3") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_4") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_5") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_4") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("PAR_TOTAL") END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC DISPLAY_SCOREBOARD(GOLF_HELPERS &thisHelpers, BOOL bVisible = FALSE) CDEBUG1LN(DEBUG_GOLF, "Seting display scoreboard to ", bVisible) IF bVisible = TRUE SET_SPLASH_TEXT(thisHelpers) //ui display flag is to let scaleform know what ui elements to display SET_GOLF_UI_DISPLAY(thisHelpers, GOLF_DISPLAY_SCOREBOARD) //this flag is for checking to see if the scoreboard is up SET_GOLF_UI_FLAG(thisHelpers, GUC_SCOREBOARD_DISPLAYED) //SET_RESULT_SCREEN_DISPLAYING_STATE(TRUE) ELSE CLEAR_GOLF_UI_DISPLAY(thisHelpers, GOLF_DISPLAY_SCOREBOARD) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_SCOREBOARD_DISPLAYED) //SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE) ENDIF ENDPROC PROC MANAGE_PLAYERCARD(GOLF_HELPERS &thisHelpers, GOLF_GAME &thisGame) IF IS_HELP_MESSAGE_BEING_DISPLAYED() CLEAR_GOLF_UI_DISPLAY(thisHelpers, GOLF_DISPLAY_PLAYERCARD) ELIF NOT IS_GOLF_CONTROL_FLAG_SET(thisGame, GCF_DISPLAY_QUITTER) SET_GOLF_UI_DISPLAY(thisHelpers, GOLF_DISPLAY_PLAYERCARD) ENDIF ENDPROC PROC SET_GOLF_HEADSET_STATE(GOLF_HELPERS &thisHelpers, INT ID, GOLF_HEADSET_STATE state) CDEBUG1LN(DEBUG_GOLF, "Setting headset state of ", ID, " to ", state, ".") BEGIN_SCALEFORM_MOVIE_METHOD(thisHelpers.golfUI, "SET_PLAYERCARD_HEADSET") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ID) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(state)) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_APEX_MARKER(SCALEFORM_INDEX golfUI, BOOL bVisible = FALSE, FLOAT fYLocation = 0.0) /* SWING_METER_SET_APEX_MARKER(visible:Boolean, position:Number, rotation:Number):Void Set characteristics of apex marker (black) visible - show or hide marker position on bar (0 = top, 1 = bottom) rotation of marker in degrees (-values = counter-clockwise) (lets not go more than -30 thru 30 to start). //*/ BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_SET_APEX_MARKER") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bVisible) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fYLocation) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_SWING_METER_FILL(SCALEFORM_INDEX golfUI, FLOAT fYLocation = 0.0, FLOAT fShotQuality = -1.0) /* SWING_METER_SET_FILL(span:Number, state:Number):Void span percentage of bar filled from top (.2 = 20%) state color to display (-1 = transparent white; 0 = white gradates to 1 = red) fromTop boolean that determines if fill comes from top or bottom (default top) //*/ BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_SET_FILL") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fYLocation) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fShotQuality) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE)//true = fill from top, false = fill from bottom END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC SET_PUTTMETER(GOLF_HELPERS &thisHelpers, SCALEFORM_INDEX golfUI, BOOL bVisible = FALSE, BOOL bForceSlowTransition = FALSE, FLOAT fXLocation = 0.0, FLOAT fYLocation = 0.0, FLOAT fHotspot = 0.0, FLOAT fHotspotSpan = 0.1) //BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_IS_TRANSITIOING") //SCALEFORM_RETURN_INDEX scaleformRetIndex = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE() //WHILE NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(scaleformRetIndex) //ENDWHILE //BOOL isTransition = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_BOOL(scaleformRetIndex) //BOOL isTransition = END_SCALEFORM_MOVIE_METHOD_BOOL() INT TransitionTime = 0 BOOL useFill = IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_USE_FILL_QUALITY) IF useFill OR thisHelpers.bShotPreviewCam OR bForceSlowTransition TransitionTime = 1000 ENDIF FLOAT adjustedHotspot = fHotSpot * (1 -(fHotspotSpan/2)) FLOAT shotQuality = ABSF(fYLocation - (adjustedHotspot + (fHotspotSpan/2))) IF NOT useFill shotQuality = -1.0 ENDIF IF NOT bVisible AND IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_SWING_METER_DISPLAYED) //AND NOT isTransition BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_TRANSITION_OUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(TransitionTime) END_SCALEFORM_MOVIE_METHOD() CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_SWING_METER_DISPLAYED) ELIF bVisible AND NOT IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_SWING_METER_DISPLAYED) FLOAT fWideScreenAdjust = 0.0 FLOAT fResolutionAdjust = 0.0 IF GET_IS_WIDESCREEN() fWideScreenAdjust = 0.095 ELIF IS_PC_VERSION() fResolutionAdjust = 0.045 ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_TRANSITION_IN") END_SCALEFORM_MOVIE_METHOD() SET_GOLF_UI_FLAG(thisHelpers, GUC_SWING_METER_DISPLAYED) BEGIN_SCALEFORM_MOVIE_METHOD(golfUI,"SWING_METER_POSITION") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(SWING_METER_POS_X - fResolutionAdjust) //x SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(SWING_METER_POS_Y - fWideScreenAdjust) //y // SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(TRUE) //position from center of swing meter END_SCALEFORM_MOVIE_METHOD() ENDIF IF NOT IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_SWING_METER_DISPLAYED) EXIT ENDIF SET_SWING_METER_FILL( golfUI, fYLocation, shotQuality) BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_SET_MARKER") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bVisible) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fYLocation) SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bVisible) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fXLocation) END_SCALEFORM_MOVIE_METHOD() /* The top of the hot spot is located at fHotspot and stretches down fHotspotSpan. We need to reposition the hot spot so that it evenly goes from 0 to 1 without going outside the meter. V = min*(1-t) + t *max, where t = fHotSpot, min = 0, max = (1-fHotspotSpan) */ BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_SET_TARGET") SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fHotspotSpan) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(adjustedHotspot) END_SCALEFORM_MOVIE_METHOD() /*default is yellow BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SWING_METER_SET_TARGET_COLOR") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(255) //r SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) //g SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) //b SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(100) //a END_SCALEFORM_MOVIE_METHOD() //*/ ENDPROC PROC SET_DISTANCE(SCALEFORM_INDEX golfUI, BOOL bVisible = FALSE, FLOAT fDistance = 0.0, FLOAT fCarry = 0.0, STRING sDistanceLable = NULL, STRING sCarryLabel = NULL, STRING sRecordLabel = NULL) IF IS_STRING_NULL(sDistanceLable) sDistanceLable = "" ENDIF IF IS_STRING_NULL(sCarryLabel) sCarryLabel = "" ENDIF IF IS_STRING_NULL(sRecordLabel) sRecordLabel = "" ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SET_DISTANCE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_BOOL(bVisible) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fDistance) SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fCarry) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sDistanceLable) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sCarryLabel) SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sRecordLabel) END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC STRING GET_DRIVE_PIN_TEXT_LABEL(INT iDistance) IF iDistance = 1 IF GOLF_SHOULD_USE_FOREIGN_DISTANCE() RETURN "DRIVE_PIN_M_SHORT" ELSE RETURN "DRIVE_PIN_SHORT" ENDIF ELSE IF GOLF_SHOULD_USE_FOREIGN_DISTANCE() RETURN "DRIVE_PIN_M" ELSE RETURN "DRIVE_PIN" ENDIF ENDIF RETURN "" ENDFUNC //Keeps track of which splash text need to be displayed PROC MANAGE_SPLASH_TEXT(GOLF_HELPERS &thisHelpers, GOLF_FOURSOME &thisFoursome) UNUSED_PARAMETER(thisHelpers) UNUSED_PARAMETER(thisFoursome) #IF NOT GOLF_IS_AI_ONLY INT iDist IF IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_DISPLAY_LONGEST_DRIVE) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_DISPLAY_LONGEST_DRIVE | GUC_DISPLAY_LONGEST_HOLE | GUC_DISPLAY_GIR | GUC_DISPLAY_FIR) SET_SPLASH_TEXT(thisHelpers, GOLF_SPLASH_LONGEST_DIVE, "GOLF_NEW_RECORD", PICK_STRING(GOLF_SHOULD_USE_FOREIGN_DISTANCE(), "DRIVE_LONG_M", "DRIVE_LONG"), FLOOR(GET_GOLF_STAT_LONGEST_DRIVE()), 10000) EXIT ENDIF IF IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_DISPLAY_LONGEST_HOLE) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_DISPLAY_LONGEST_HOLE | GUC_DISPLAY_GIR | GUC_DISPLAY_FIR) SET_SPLASH_TEXT(thisHelpers, GOLF_SPLASH_LONGEST_HOLE, "GOLF_NEW_RECORD", PICK_STRING(GOLF_SHOULD_USE_FOREIGN_DISTANCE(), "DRIVE_HOLE_M", "DRIVE_HOLE"), FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome))), 10000) EXIT ENDIF IF IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_DISPLAY_CLOSEST_TO_PIN) iDist = FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome))) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_DISPLAY_CLOSEST_TO_PIN | GUC_DISPLAY_GIR | GUC_DISPLAY_FIR) CDEBUG1LN(DEBUG_GOLF, "Use drive to pin line ", GET_DRIVE_PIN_TEXT_LABEL(iDist)) SET_SPLASH_TEXT(thisHelpers, GOLF_SPLASH_CLOSEST_TO_PIN, "GOLF_NEW_RECORD", GET_DRIVE_PIN_TEXT_LABEL(iDist), iDist) EXIT ENDIF IF IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_DISPLAY_GIR) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_DISPLAY_GIR | GUC_DISPLAY_FIR) IF GET_GOLF_FOURSOME_CURRENT_PLAYER_CONTROL(thisFoursome) = HUMAN_LOCAL OR GET_GOLF_FOURSOME_CURRENT_PLAYER_CONTROL(thisFoursome) = HUMAN_LOCAL_MP OR GET_GOLF_FOURSOME_CURRENT_PLAYER_CONTROL(thisFoursome) = HUMAN_NETWORK SET_SPLASH_TEXT(thisHelpers, GOLF_SPLASH_GIR, "GIR", "GOLF_G_REGULATION", -1, 2000) ENDIF EXIT ENDIF IF IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_DISPLAY_FIR) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_DISPLAY_FIR) IF GET_GOLF_FOURSOME_CURRENT_PLAYER_CONTROL(thisFoursome) = HUMAN_LOCAL OR GET_GOLF_FOURSOME_CURRENT_PLAYER_CONTROL(thisFoursome) = HUMAN_LOCAL_MP OR GET_GOLF_FOURSOME_CURRENT_PLAYER_CONTROL(thisFoursome) = HUMAN_NETWORK SET_SPLASH_TEXT(thisHelpers, GOLF_SPLASH_FIR, "FIR", "GOLF_F_REGULATION", -1, 10000) ENDIF EXIT ENDIF #ENDIF ENDPROC PROC GOLFUI_FLOATING_SET_STRENGTH(SCALEFORM_INDEX golfUI, STRING sLabel, FLOAT fStrength, FLOAT fShotTypeScalar) IF IS_STRING_NULL(sLabel) sLabel = "" ENDIF IF fStrength > 100.0 fStrength = 100.0 ELIF fStrength < 0.0 fStrength = 0.0 ENDIF fStrength *= fShotTypeScalar BEGIN_SCALEFORM_MOVIE_METHOD(golfUI, "SET_STRENGTH") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sLabel) BEGIN_TEXT_COMMAND_SCALEFORM_STRING("STRENGTH_PER") ADD_TEXT_COMPONENT_INTEGER(CEIL(fStrength)) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC GOLFUI_FLOATING_SET_SLOT_ONE(SCALEFORM_INDEX floatingUI, STRING sLabel, FLOAT fDistance, BOOL bLong) IF IS_STRING_NULL(sLabel) sLabel = "" ENDIF TEXT_LABEL sUnits IF bLong sUnits = "DIST" ELSE sUnits = "DIST_SHORT" ENDIF IF fDistance > 1000 CDEBUG1LN(DEBUG_GOLF,"Absured value for distance") // DEBUG_PRINTCALLSTACK() ENDIF IF GOLF_SHOULD_USE_FOREIGN_DISTANCE() sUnits = "DIST_METER" IF bLong fDistance = YARDS_TO_METERS(fDistance) ELSE fDistance = FEET_TO_METERS(fDistance) ENDIF ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(floatingUI, "SET_SWING_DISTANCE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sLabel) BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sUnits) ADD_TEXT_COMPONENT_INTEGER(FLOOR(fDistance)) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC GOLFUI_FLOATING_SET_SLOT_TWO(SCALEFORM_INDEX floatingUI, STRING sLabel, FLOAT fDistance, BOOL bLong) IF IS_STRING_NULL(sLabel) sLabel = "" ENDIF TEXT_LABEL sUnits IF bLong sUnits = "DIST" ELSE sUnits = "DIST_SHORT" ENDIF IF GOLF_SHOULD_USE_FOREIGN_DISTANCE() sUnits = "DIST_METER" IF bLong fDistance = YARDS_TO_METERS(fDistance) ELSE fDistance = FEET_TO_METERS(fDistance) ENDIF ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(floatingUI, "SET_PIN_DISTANCE") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sLabel) BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sUnits) ADD_TEXT_COMPONENT_INTEGER(FLOOR(fDistance)) END_TEXT_COMMAND_SCALEFORM_STRING() END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC GOLFUI_FLOATING_SET_SLOT_THREE(SCALEFORM_INDEX floatingUI, STRING sLabel, FLOAT fHeight, BOOL bLong) IF IS_STRING_NULL(sLabel) sLabel = "" ENDIF TEXT_LABEL sUnits IF bLong sUnits = "DIST_SHORT" ELSE sUnits = "DIST_INCH" ENDIF IF GOLF_SHOULD_USE_FOREIGN_DISTANCE() IF bLong sUnits = "DIST_METER" fHeight = FEET_TO_METERS(fHeight) ELSE sUnits = "DIST_CM" fHeight = INCH_TO_CM(fHeight) ENDIF ENDIF INT iDirection = 0 IF CEIL(fHeight) > 0 iDirection = 1//up arrow ELIF CEIL(fHeight) < 0 iDirection = 2//down arrow ENDIF BEGIN_SCALEFORM_MOVIE_METHOD(floatingUI, "SET_HEIGHT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(sLabel) BEGIN_TEXT_COMMAND_SCALEFORM_STRING(sUnits) ADD_TEXT_COMPONENT_INTEGER(CEIL(fHeight)) END_TEXT_COMMAND_SCALEFORM_STRING() SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iDirection) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC GOLFUI_FLOATING_TRANSITION_IN(SCALEFORM_INDEX floatingUI, INT iTimeMS) BEGIN_SCALEFORM_MOVIE_METHOD(floatingUI, "TRANSITION_IN") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTimeMS) END_SCALEFORM_MOVIE_METHOD() ENDPROC PROC GOLFUI_FLOATING_TRANSITION_OUT(SCALEFORM_INDEX floatingUI, INT iTimeMS) BEGIN_SCALEFORM_MOVIE_METHOD(floatingUI, "TRANSITION_OUT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iTimeMS) END_SCALEFORM_MOVIE_METHOD() ENDPROC FUNC FLOAT GET_GOLF_UI_POWER_SCALAR(GOLF_FOURSOME &thisFoursome) RETURN GET_GOLF_LIE_MULTIPLIER(GET_GOLF_PLAYER_LIE(thisFoursome.playerCore[GET_GOLF_FOURSOME_CURRENT_PLAYER(thisFoursome)])) * GET_SWING_STYLE_POWER_MULTIPLIER(GET_GOLF_FOURSOME_CURRENT_PLAYER_SWING_STYLE(thisFoursome)) ENDFUNC PROC GOLFUI_FLOATING_INIT_STRENGTH( SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome) FLOAT scalar = 1.0 IF NOT IS_GOLF_FOURSOME_CURRENT_PLAYER_PUTTING(thisFoursome) AND GET_GOLF_FOURSOME_CURRENT_PLAYER_SWING_STYLE(thisFoursome) != SWING_STYLE_PUNCH scalar = GET_GOLF_UI_POWER_SCALAR(thisFoursome) ENDIF GOLFUI_FLOATING_SET_STRENGTH(floatingUI, "PREVIEW_PCT", GET_GOLF_FOURSOME_CURRENT_PLAYER_METER_GOAL(thisFoursome), scalar) ENDPROC PROC GOLFUI_FLOATING_INIT_SHOT_STRENGTH( SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome) FLOAT scalar = 1.0 FLOAT currentPower = thisFoursome.swingMeter.fCurrentPowerRel IF NOT IS_GOLF_FOURSOME_CURRENT_PLAYER_PUTTING(thisFoursome) AND GET_GOLF_FOURSOME_CURRENT_PLAYER_SWING_STYLE(thisFoursome) != SWING_STYLE_PUNCH scalar = GET_GOLF_UI_POWER_SCALAR(thisFoursome) ELSE ENDIF GOLFUI_FLOATING_SET_STRENGTH(floatingUI, "PREVIEW_PCT", currentPower, scalar) ENDPROC PROC GOLFUI_FLOATING_INIT_SWING_DISTANCE(SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome) GOLFUI_FLOATING_SET_SLOT_ONE(floatingUI, "PREVIEW_DIST", MAGIC_DISTANCE_CONVERSION* METERS_TO_YARDS(VDIST( GET_GOLF_FOURSOME_CURRENT_PLAYER_BALL_POSITION(thisFoursome), GET_GOLF_FOURSOME_CURRENT_PLAYER_SHOT_ESTIMATE(thisFoursome))), GET_GOLF_FOURSOME_CURRENT_PLAYER_LIE(thisFoursome) != LIE_GREEN) ENDPROC PROC GOLFUI_FLOATING_INIT_HIT_DISTANCE(SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome) GOLFUI_FLOATING_SET_SLOT_ONE(floatingUI, "PREVIEW_DIST", 0, GET_GOLF_FOURSOME_CURRENT_PLAYER_LIE(thisFoursome) != LIE_GREEN) ENDPROC PROC GOLFUI_FLOATING_UPDATE_HIT_DISTANCE(SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome) VECTOR vHitPos = GET_GOLF_FOURSOME_CURRENT_PLAYER_BALL_POSITION(thisFoursome) VECTOR vBallPos = GET_ENTITY_COORDS( GET_GOLF_FOURSOME_CURRENT_PLAYER_BALL(thisFoursome)) FLOAT fActualDist = MAGIC_DISTANCE_CONVERSION * METERS_TO_YARDS(VDIST( vHitPos, vBallPos)) fActualDist = TO_FLOAT(FLOOR(fActualDist)) //truncate GOLFUI_FLOATING_SET_SLOT_ONE(floatingUI, "PREVIEW_DIST", fActualDist, GET_GOLF_FOURSOME_CURRENT_PLAYER_LAST_LIE(thisFoursome) != LIE_GREEN) ENDPROC PROC GOLFUI_FLOATING_INIT_PIN_DISTANCE(SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome) GOLFUI_FLOATING_SET_SLOT_TWO(floatingUI, "PREVIEW_PIN", MAGIC_DISTANCE_CONVERSION* METERS_TO_YARDS(GET_GOLF_FOURSOME_CURRENT_PLAYER_DISTANCE_TO_HOLE(thisFoursome)), GET_GOLF_FOURSOME_CURRENT_PLAYER_LIE(thisFoursome) != LIE_GREEN) ENDPROC PROC GOLFUI_FLOATING_INIT_CARRY_DISTANCE(SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome) GOLFUI_FLOATING_SET_SLOT_TWO(floatingUI, "CARRY_DIST", MAGIC_DISTANCE_CONVERSION* METERS_TO_YARDS(GET_GOLF_FOURSOME_CURRENT_PLAYER_SHOT_CARRY(thisFoursome)), TRUE) ENDPROC PROC GOLFUI_FLOATING_INIT_HEIGHT(SCALEFORM_INDEX floatingUI, GOLF_FOURSOME &thisFoursome, GOLF_COURSE &thisCourse) VECTOR ballPos = GET_GOLF_FOURSOME_CURRENT_PLAYER_BALL_POSITION(thisFoursome) VECTOR previewPos = GET_GOLF_FOURSOME_CURRENT_PLAYER_SHOT_ESTIMATE(thisFoursome) VECTOR vHolePos = GET_GOLF_HOLE_PIN_POSITION(thisCourse, GET_GOLF_FOURSOME_CURRENT_HOLE(thisFoursome)) IF VDIST2(previewPos, vHolePos) < (0.15*0.15) //player is near hole, don't count its dip as part of the hieght previewPos += <<0.5, 0.5, 1.0>> //find ground pos near hole GET_GROUND_Z_FOR_3D_COORD(previewPos, previewPos.z) ENDIF FLOAT fDistance = MAGIC_DISTANCE_CONVERSION* METERS_TO_YARDS(previewPos.z - ballPos.z) IF GET_GOLF_FOURSOME_CURRENT_PLAYER_LIE(thisFoursome) = LIE_GREEN //convert yards to inches fDistance *= (12*3) ENDIF GOLFUI_FLOATING_SET_SLOT_THREE(floatingUI, "PREVIEW_HT", fDistance, GET_GOLF_FOURSOME_CURRENT_PLAYER_LIE(thisFoursome) != LIE_GREEN) ENDPROC PROC GOLFUI_FLOATING_CLEAR_PIN_DISTANCE(SCALEFORM_INDEX floatingUI) GOLFUI_FLOATING_SET_SLOT_TWO(floatingUI, "", 0, FALSE) ENDPROC PROC GOLFUI_FLOATING_CLEAR_HEIGHT(SCALEFORM_INDEX floatingUI) GOLFUI_FLOATING_SET_SLOT_THREE(floatingUI, "", 0, FALSE) ENDPROC PROC GOLFUI_FLOATING_CLEAR_SWING_DISTANCE(SCALEFORM_INDEX floatingUI) GOLFUI_FLOATING_SET_SLOT_ONE(floatingUI, "", 0, FALSE) ENDPROC //When putting don't use the swing distnace stat PROC INITIALIZE_FLOATING_HELP_FOR_PUTTING(GOLF_FOURSOME &thisFoursome, GOLF_HELPERS &thisHelpers, GOLF_COURSE &thisCourse) GOLFUI_FLOATING_INIT_STRENGTH(thisHelpers.floatingUI, thisFoursome) //GOLFUI_FLOATING_CLEAR_SWING_DISTANCE(thisHelpers.floatingUI) GOLFUI_FLOATING_INIT_SWING_DISTANCE(thisHelpers.floatingUI, thisFoursome) GOLFUI_FLOATING_INIT_PIN_DISTANCE(thisHelpers.floatingUI, thisFoursome) GOLFUI_FLOATING_INIT_HEIGHT(thisHelpers.floatingUI, thisFoursome, thisCourse) /* VECTOR ballPos = GET_GOLF_FOURSOME_CURRENT_PLAYER_BALL_POSITION(thisFoursome) VECTOR previewPos = GET_GOLF_FOURSOME_CURRENT_PLAYER_SHOT_ESTIMATE(thisFoursome) //first slot is distance to pin, second is height GOLFUI_FLOATING_SET_SLOT_ONE(thisHelpers.floatingUI, "PREVIEW_PIN", MAGIC_DISTANCE_CONVERSION* METERS_TO_YARDS(GET_GOLF_FOURSOME_CURRENT_PLAYER_DISTANCE_TO_HOLE(thisFoursome)), "DIST_SHORT") GOLFUI_FLOATING_SET_SLOT_TWO(thisHelpers.floatingUI, "PREVIEW_HT", MAGIC_DISTANCE_CONVERSION* METERS_TO_YARDS(previewPos.z - ballPos.z), "DIST_SHORT") GOLFUI_FLOATING_SET_SLOT_THREE(thisHelpers.floatingUI, "", 0, "") //clear slot three //*/ ENDPROC PROC INITIALIZE_FLOATING_HELP_FOR_SHOT(GOLF_FOURSOME &thisFoursome, GOLF_HELPERS &thisHelpers, GOLF_COURSE &thisCourse) IF NOT IS_GOLF_UI_FLAG_SET(thisHelpers, GUC_REFRESH_FLOATING) EXIT ENDIF IF IS_GOLF_FOURSOME_CURRENT_PLAYER_PUTTING(thisFoursome) INITIALIZE_FLOATING_HELP_FOR_PUTTING(thisFoursome,thisHelpers, thisCourse) ELSE GOLFUI_FLOATING_INIT_STRENGTH(thisHelpers.floatingUI, thisFoursome) GOLFUI_FLOATING_INIT_SWING_DISTANCE(thisHelpers.floatingUI, thisFoursome) GOLFUI_FLOATING_INIT_PIN_DISTANCE(thisHelpers.floatingUI, thisFoursome) GOLFUI_FLOATING_INIT_HEIGHT(thisHelpers.floatingUI, thisFoursome, thisCourse) ENDIF CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_REFRESH_FLOATING) ENDPROC PROC INITIALIZE_FLOATING_HELP_FOR_FLIGHT(GOLF_FOURSOME &thisFoursome, GOLF_HELPERS &thisHelpers) GOLFUI_FLOATING_INIT_SHOT_STRENGTH(thisHelpers.floatingUI, thisFoursome) GOLFUI_FLOATING_INIT_HIT_DISTANCE(thisHelpers.floatingUI, thisFoursome) GOLFUI_FLOATING_CLEAR_PIN_DISTANCE(thisHelpers.floatingUI) GOLFUI_FLOATING_CLEAR_HEIGHT(thisHelpers.floatingUI) ENDPROC PROC DRAW_PUTT_METER(BOOL bEnable, GOLF_HELPERS &thisHelpers, SWING_METER &swingMeter, FLOAT fPowerMeterGoal) FLOAT XLocation = swingMeter.fCurrentAccurRel FLOAT YLocation = swingMeter.fCurrentMeterPosition YLocation /=100.0 IF XLocation < -1.0 XLocation = -1.0 ELIF XLocation > 1.0 XLocation = 1.0 ENDIF IF YLocation < 0.0 YLocation = 0.0 ELIF YLocation > 1.0 YLocation = 1.0 ENDIF SET_PUTTMETER(thisHelpers, thisHelpers.golfUI, bEnable, FALSE, XLocation, YLocation, fPowerMeterGoal/100.0) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_REFRESH_PUTT) ENDPROC PROC DRAW_SWING_METER(BOOL bEnable, GOLF_HELPERS &thisHelpers, SWING_METER &swingMeter, FLOAT fPowerMeterGoal) FLOAT XLocation = swingMeter.fCurrentAccurRel FLOAT YLocation = swingMeter.fCurrentMeterPosition YLocation /=100.0 IF XLocation < -1.0 XLocation = -1.0 ELIF XLocation > 1.0 XLocation = 1.0 ENDIF IF YLocation < 0.0 YLocation = 0.0 ELIF YLocation > 1.0 YLocation = 1.0 ENDIF SET_PUTTMETER(thisHelpers, thisHelpers.golfUI,bEnable, FALSE, XLocation, YLocation, fPowerMeterGoal/100.0) ENDPROC PROC GOLF_SETUP_INTRO_KEYS(GOLF_HELPERS &thisHelpers) STRING eSelectButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "BUDDY_SELECT", eSelectButton, FALSE, DEFAULT, TRUE, INPUT_FRONTEND_ACCEPT) ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_QUIT", eQuitButton, 1, INPUT_FRONTEND_CANCEL ) thisHelpers.golfDisplayedControls= GDCS_SETUP_INTRO_KEYS ENDPROC PROC GOLF_SETUP_SCOREBOARD_KEYS(GOLF_HELPERS &thisHelpers, BOOL bAllowContinue, BOOL bAllowQuit, BOOL bAllowScroll, BOOL bReplay, BOOL bAllowLeaderboard) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) //This is being manually set, so for the Japanese version these buttons need to be swapped STRING eContinueButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN) //Swap the X/O buttons for JPN Orbis #IF IS_JAPANESE_BUILD IF IS_PLAYSTATION_PLATFORM() eContinueButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RRIGHT) ENDIF #ENDIF STRING eScorecardButon = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RB) STRING eReplayButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT) // STRING eScrollbButton = GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUTGROUP_FRONTEND_GENERIC_UD) INT iSlot IF bAllowContinue INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_CONTINUE", eContinueButton, FALSE) iSlot++ SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_CONTINUE) ELSE CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_CONTINUE) ENDIF IF bReplay IF iSlot = 0 INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "REPLAY_TITLE", eReplayButton, FALSE) ELSE ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "REPLAY_TITLE", eReplayButton, iSlot) ENDIF iSlot++ SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_REPLAY) ELSE CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_REPLAY) ENDIF IF bAllowQuit IF iSlot = 0 INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_QUIT", eQuitButton, FALSE) ELSE ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_QUIT", eQuitButton, iSlot) ENDIF iSlot++ SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_QUIT) ELSE CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_QUIT) ENDIF IF bAllowLeaderboard IF iSlot = 0 INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_SC_INST", eScorecardButon, FALSE) ELSE ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_SC_INST", eScorecardButon, iSlot) ENDIF iSlot++ SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_SOCIAL_CLUB) ELSE CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_SOCIAL_CLUB) ENDIF IF bAllowScroll // ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "MENU_SCROLL", eScrollbButton, iSlot) // iSlot++ SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_SCROLL) ELSE CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_SCROLL) ENDIF thisHelpers.golfDisplayedControls = GDCS_SETUP_SCOREBOARD_KEYS ENDPROC PROC GOLF_SETUP_SOCIAL_CLUB_KEYS(GOLF_HELPERS &thisHelpers, BOOL bAllowQuit, BOOL bAllowProfile) STRING eBackButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) STRING eOpenGamerCardButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_SELECT) CONTROL_ACTION caQuitInput = INPUT_SCRIPT_PAD_RIGHT // Quit uses a different input on PC when on the frontend. IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_LEADERBOARD) caQuitInput = INPUT_FRONTEND_LEADERBOARD ENDIF INT iSlot INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_BACK", eBackButton, FALSE, FALSE, TRUE, INPUT_FRONTEND_CANCEL) iSlot++ IF bAllowProfile ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "SCLB_PROFILE", eOpenGamerCardButton, iSlot, INPUT_FRONTEND_SELECT) iSlot++ SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_PROFILE) ELSE CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_PROFILE) ENDIF IF bAllowQuit ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_QUIT", eQuitButton, iSlot, caQuitInput) iSlot++ SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_QUIT) ELSE CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_QUIT) ENDIF thisHelpers.golfDisplayedControls = GDCS_SETUP_SOCIAL_CLUB_KEYS ENDPROC PROC GOLF_RESET_SOCIAL_CLUB_KEYS(GOLF_HELPERS &thisHelpers) CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_SOCIAL_CLUB_UI_DISPLAYED) GOLF_SETUP_SCOREBOARD_KEYS(thisHelpers, IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_CONTINUE), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_QUIT), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_SCROLL), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_REPLAY), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_SOCIAL_CLUB)) ENDPROC PROC SETUP_GOLF_SCOREBOARD_CONTROLS(GOLF_HELPERS &thisHelpers) STRING eScorecardButon = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RRIGHT) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) // Different control checked on PC, so we can use the same control to quit the scoreboard as activate it. Also ensures we use a sensible key. IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) eScorecardButon = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RB) ENDIF //In Japan X on playstation X is back, not O #IF IS_JAPANESE_BUILD IF IS_PLAYSTATION_PLATFORM() eScorecardButon = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN) ENDIF #ENDIF INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_BACK", eScorecardButon, FALSE) IF IS_GOLF_FOURSOME_MP() ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_QUIT", eQuitButton, 1) ENDIF thisHelpers.golfDisplayedControls = GDCS_SETUP_GOLF_SCOREBOARD_CONTROLS ENDPROC PROC SETUP_GOLF_NAV_CONTROLS(GOLF_HELPERS &thisHelpers, BOOL bOnTee, BOOl bCart) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) STRING eSkipToShottButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_LB) STRING eScorecardButon = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RB) INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_QUIT", eQuitButton, FALSE) IF bCart ELSE ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_SCORECARD", eScorecardButon, 1) ENDIF IF bOnTee ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_SKIP_T", eSkipToShottButton, 2) SET_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_ON_TEE) ELSE ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_SKIP_S", eSkipToShottButton, 2) CLEAR_BITMASK_AS_ENUM(thisHelpers.golfKeysInUse, GOLF_KEY_ON_TEE) ENDIF thisHelpers.golfDisplayedControls = GDCS_SETUP_GOLF_NAV_CONTROLS ENDPROC PROC SETUP_GOLF_ADRESS_CONTROLS(GOLF_HELPERS &thisHelpers, BOOL bPutting, BOOL bAllowPreviewHole, BOOL bInShotPreview) INT iStartingIndex = 0 STRING eResetButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RRIGHT) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) STRING eSwingButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(PLAYER_CONTROL, INPUT_MOVE_DOWN_ONLY) STRING eChangeShotButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_LB) STRING ePreviewShotButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RT) STRING ePreviewHoleButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_LT) STRING eScorecardButon = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RB) STRING eChangeClubButton = GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUTGROUP_SCRIPT_DPAD_UD) STRING eAimButton = GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(PLAYER_CONTROL, INPUTGROUP_LOOK) // Different input used for Swing on PC mouse and keyboard The actual input is defined in dynamic.meta // If that input is changed then we must change this input to match. IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) eSwingButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(PLAYER_CONTROL, INPUT_ATTACK) ENDIF INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_RESET_AIM", eResetButton, FALSE) iStartingIndex++ ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_CLUB", eChangeClubButton, iStartingIndex) iStartingIndex++ ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_QUIT", eQuitButton, iStartingIndex) iStartingIndex++ ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_AIM", eAimButton, iStartingIndex) iStartingIndex++ IF NOT bInShotPreview IF bPutting ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_PUTT", eSwingButton, iStartingIndex) ELSE ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_SWING", eSwingButton, iStartingIndex) ENDIF iStartingIndex++ ENDIF ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_SHOT", eChangeShotButton, iStartingIndex) iStartingIndex++ IF NOT bInShotPreview ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_SCORECARD", eScorecardButon, iStartingIndex) iStartingIndex++ IF bAllowPreviewHole ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_PREVIEW_SH", ePreviewShotButton, iStartingIndex) ADD_BUTTON_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, CUCB_BUTTON7_2, ePreviewHoleButton) ELSE ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_PREVIEW_S", ePreviewShotButton, iStartingIndex) ENDIF iStartingIndex++ ENDIF thisHelpers.golfDisplayedControls = GDCS_SETUP_GOLF_ADRESS_CONTROLS ENDPROC PROC SETUP_GOLF_SPECTATE_COMPUTER_CONTROLS(GOLF_HELPERS &thisHelpers) STRING eSkipButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INSTR_SKIP_AI", eSkipButton, FALSE) thisHelpers.golfDisplayedControls = GDCS_SETUP_GOLF_SPECTATE_COMPUTER_CONTROLS ENDPROC PROC SETUP_GOLF_SPECTATE_MP_CONTROLS(GOLF_HELPERS &thisHelpers) STRING eCahngeViewButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_SELECT) STRING eScorecardButon = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RB) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT) INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_VIEW", eCahngeViewButton, FALSE) ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_SCORECARD", eScorecardButon, 1) ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INST_QUIT", eQuitButton, 2) thisHelpers.golfDisplayedControls = GDCS_SETUP_GOLF_SPECTATE_MP_CONTROLS ENDPROC PROC SETUP_GOLF_BALL_IN_FLIGHT_CONTROLS(GOLF_HELPERS &thisHelpers) //don't flip controls when ball is in flight STRING eDirection = GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUTGROUP_MOVE) //GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(PLAYER_CONTROL, INPUTGROUP_MOVE) STRING eSpinButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN) INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "GOLF_PLUS", eSpinButton, FALSE) ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "INSTR_SPIN", eDirection, 1) //ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "", , 2) //ADD_BUTTON_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, CUCB_BUTTON0_2, GET_CONTROL_GROUP_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUTGROUP_FRONTEND_LSTICK_ALL), "GOLF_PLUS") thisHelpers.golfDisplayedControls = GDCS_SETUP_GOLF_BALL_IN_FLIGHT_CONTROLS ENDPROC PROC SETUP_GOLF_FAIL_CONTROLS(GOLF_HELPERS &thisHelpers) STRING eResetButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) STRING eQuitButton = GET_CONTROL_INSTRUCTIONAL_BUTTONS_STRING(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL) INIT_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "FAIL_RESET", eResetButton, FALSE) ADD_LABEL_TO_COMPLEX_USE_CONTEXT(thisHelpers.useContext, "FAIL_QUIT", eQuitButton, 1) thisHelpers.golfDisplayedControls = GDCS_SETUP_GOLF_FAIL_CONTROLS ENDPROC PROC GOLF_DISPLAY_CONTROLS(GOLF_HELPERS &thisHelpers, BOOL bJapan) IF NOT IS_PLAYER_SCTV(PLAYER_ID()) AND NOT IS_TRANSITION_ACTIVE() FLOAT fWidth = 1.0 IF NOT GET_IS_WIDESCREEN() fWidth = 0.6 SET_HUD_COMPONENT_POSITION(NEW_HUD_SUBTITLE_TEXT, 0.0, -0.0375) ENDIF IF HAVE_CONTROLS_CHANGED(FRONTEND_CONTROL) OR HAVE_CONTROLS_CHANGED(PLAYER_CONTROL) CDEBUG1LN(DEBUG_GOLF, "Golf Controls Switched") SWITCH thisHelpers.golfDisplayedControls CASE GDCS_SETUP_INTRO_KEYS GOLF_SETUP_INTRO_KEYS(thisHelpers) BREAK CASE GDCS_SETUP_SCOREBOARD_KEYS GOLF_SETUP_SCOREBOARD_KEYS(thisHelpers, IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_CONTINUE), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_QUIT), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_SCROLL), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_REPLAY), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_SOCIAL_CLUB)) BREAK CASE GDCS_SETUP_SOCIAL_CLUB_KEYS GOLF_SETUP_SOCIAL_CLUB_KEYS(thisHelpers, IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_QUIT), IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_PROFILE)) BREAK CASE GDCS_SETUP_GOLF_SCOREBOARD_CONTROLS SETUP_GOLF_SCOREBOARD_CONTROLS(thisHelpers) BREAK CASE GDCS_SETUP_GOLF_NAV_CONTROLS SETUP_GOLF_NAV_CONTROLS(thisHelpers, IS_BITMASK_AS_ENUM_SET(thisHelpers.golfKeysInUse, GOLF_KEY_ON_TEE), IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())) BREAK CASE GDCS_SETUP_GOLF_ADRESS_CONTROLS CLEAR_GOLF_UI_FLAG(thisHelpers, GUC_REFRESH_INPUT) BREAK CASE GDCS_SETUP_GOLF_SPECTATE_COMPUTER_CONTROLS SETUP_GOLF_SPECTATE_COMPUTER_CONTROLS(thisHelpers) BREAK CASE GDCS_SETUP_GOLF_SPECTATE_MP_CONTROLS SETUP_GOLF_SPECTATE_MP_CONTROLS(thisHelpers) BREAK CASE GDCS_SETUP_GOLF_BALL_IN_FLIGHT_CONTROLS SETUP_GOLF_BALL_IN_FLIGHT_CONTROLS(thisHelpers) BREAK CASE GDCS_SETUP_GOLF_FAIL_CONTROLS SETUP_GOLF_FAIL_CONTROLS(thisHelpers) BREAK ENDSWITCH ENDIF // Fix for B* 2309115 IF NETWORK_TEXT_CHAT_IS_TYPING() EXIT ENDIF UPDATE_COMPLEX_USE_CONTEXT(thisHelpers.useContext, 200.0, GFX_ORDER_BEFORE_HUD, FALSE, bJapan, fWidth) ENDIF ENDPROC FUNC INT GOLF_INSTRUCTIONS_BUTTONS_GET_LINES(GOLF_FOURSOME &thisFoursome) IF NOT GET_IS_WIDESCREEN() IF NOT IS_GOLF_FOURSOME_STATE_AT_END(thisFoursome) AND GET_GOLF_FOURSOME_LOCAL_PLAYER(thisFoursome) = GET_GOLF_FOURSOME_CURRENT_PLAYER(thisFoursome) IF GET_CURRENT_LANGUAGE() = LANGUAGE_ITALIAN OR GET_CURRENT_LANGUAGE() = LANGUAGE_GERMAN OR GET_CURRENT_LANGUAGE() = LANGUAGE_SPANISH OR GET_CURRENT_LANGUAGE() = LANGUAGE_MEXICAN OR GET_CURRENT_LANGUAGE() = LANGUAGE_PORTUGUESE OR GET_CURRENT_LANGUAGE() = LANGUAGE_POLISH OR GET_CURRENT_LANGUAGE() = LANGUAGE_RUSSIAN RETURN 2 ENDIF IF GET_ASPECT_RATIO(TRUE) <= 1.7 RETURN 2 ENDIF ENDIF ENDIF RETURN 1 ENDFUNC