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

258 lines
9.1 KiB
Scheme
Executable File

USING "commands_graphics.sch"
USING "commands_debug.sch"
USING "globals.sch"
USING "script_useContext.sch"
USING "minigame_big_message.sch"
USING "minigame_midsized_message.sch"
USING "tennis_player.sch"
USING "end_screen.sch"
USING "net_celebration_screen.sch"
ENUM TENNIS_HEADSET_ENUM
THE_NONE = 0,
THE_INACTIVE,
THE_ACTIVE,
THE_MUTED,
THE_MAX_STATES
ENDENUM
FUNC STRING GET_STRING_FROM_TENNIS_HEADSET_ENUM( TENNIS_HEADSET_ENUM eState )
SWITCH eState
CASE THE_NONE RETURN "THE_NONE"
CASE THE_INACTIVE RETURN "THE_INACTIVE"
CASE THE_ACTIVE RETURN "THE_ACTIVE"
CASE THE_MUTED RETURN "THE_MUTED"
CASE THE_MAX_STATES RETURN "THE_MAX_STATES"
ENDSWITCH
RETURN "unknown TENNIS_HEADSET_ENUM"
ENDFUNC
/// PURPOSE:
ENUM UI_STATE_ENUM
TENNIS_UI_SET_INIT, //0
TENNIS_UI_SET_SELECT,
TENNIS_UI_SET_CONVO,
TENNIS_UI_DIFF_INIT,
TENNIS_UI_DIFF_SELECT,
TENNIS_UI_REMATCH, //5
TENNIS_UI_AIM,
TENNIS_UI_SPIN1,
TENNIS_UI_SPIN2,
TENNIS_UI_STROKES,
TENNIS_UI_HELP_SERVE, //10
TENNIS_UI_PLAYING,
TENNIS_UI_STRONG_SWING,
TENNIS_UI_VETERAN,
TENNIS_UI_SCOREBOARD,
TENNIS_UI_FAR_AWAY, //15
TENNIS_UI_STR_INFO,
TENNIS_UI_QUIT
ENDENUM
ENUM TENNIS_UI_FLAGS
TUF_SHOW_SCOREBOARD = BIT0,
TUF_SHOW_SERVE_METER = BIT1,
TUF_NO_SPLASH = BIT2,
TUF_ANALOG_UP = BIT3,
TUF_ANALOG_DOWN = BIT4,
TUF_QUIT_WAIT = BIT5,
TUF_MP_QUIT_BUTTON_SET = BIT6,
TUF_SWING_METER_POS_SET = BIT7,
TUF_UI_POST_SERVE = BIT8,
TUF_NO_DYNA_CAM = BIT9,
TUF_SECOND_SERVE = BIT10,
TUF_FOULED = BIT11,
TUF_SIDE_CHANGING = BIT12,
TUF_SHOW_SERVE_MESSAGE = BIT13,
TUF_TIMER_SOUND_PLAYED = BIT14,
TUF_ANALOG_LEFT = BIT15,
TUF_PLAYER_CARD_SHOULD_SHOW = BIT16, // Quit Flag
TUF_SCOREBOARD_SHOULD_SHOW = BIT17, // Quit Flag
TUF_HIDING_SCORE_UI = BIT18,
TUF_SHOW_OPP_X_MARKER = BIT19, // Used when we want to show the opponent's X Marker (MP Tutorial only right now)
TUF_HIT_BEFORE_BOUNCE = BIT20, // Used when the opponent hit the ball before a bounce on a serve
TUF_SCLB_BUTTONS_INITED = BIT21,
TUF_QUIT_OUTSIDE_COURT = BIT22,
TUF_RETURNING_FROM_QUIT = BIT23,
TUF_GAME_WON = BIT24, // MP ONLY
TUF_SET_WON = BIT25, // MP ONLY
TUF_MATCH_WON = BIT26, // Function differs between MP and SP. In MP it's a trigger, in SP it's a gate.
TUF_TIEBREAK_HELP_SHOULD_SHOW = BIT27,
TUF_STATE_CONTROL_FLAG = BIT28,
TUF_ANALOG_RIGHT = BIT29,
TUF_SHOW_SCLB = BIT30
ENDENUM
FUNC STRING GET_STRING_FROM_TENNIS_UI_FLAG(TENNIS_UI_FLAGS eFlag)
RETURN PICK_STRING(eFlag = TUF_SHOW_SCOREBOARD, "TUF_SHOW_SCOREBOARD",
PICK_STRING(eFlag = TUF_SHOW_SERVE_METER, "TUF_SHOW_SERVE_METER",
PICK_STRING(eFlag = TUF_NO_SPLASH, "TUF_NO_SPLASH",
PICK_STRING(eFlag = TUF_ANALOG_UP, "TUF_ANALOG_UP",
PICK_STRING(eFlag = TUF_ANALOG_DOWN, "TUF_ANALOG_DOWN",
PICK_STRING(eFlag = TUF_QUIT_WAIT, "TUF_QUIT_WAIT",
PICK_STRING(eFlag = TUF_MP_QUIT_BUTTON_SET, "TUF_MP_QUIT_BUTTON_SET",
PICK_STRING(eFlag = TUF_SWING_METER_POS_SET, "TUF_SWING_METER_POS_SET",
PICK_STRING(eFlag = TUF_UI_POST_SERVE, "TUF_UI_POST_SERVE",
PICK_STRING(eFlag = TUF_NO_DYNA_CAM, "TUF_NO_DYNA_CAM",
PICK_STRING(eFlag = TUF_SECOND_SERVE, "TUF_SECOND_SERVE",
PICK_STRING(eFlag = TUF_FOULED, "TUF_FOULED",
PICK_STRING(eFlag = TUF_SIDE_CHANGING, "TUF_SIDE_CHANGING",
PICK_STRING(eFlag = TUF_SHOW_SERVE_MESSAGE, "TUF_SHOW_SERVE_MESSAGE",
PICK_STRING(eFlag = TUF_TIMER_SOUND_PLAYED, "TUF_TIMER_SOUND_PLAYED",
PICK_STRING(eFlag = TUF_ANALOG_LEFT, "TUF_ANALOG_LEFT",
PICK_STRING(eFlag = TUF_PLAYER_CARD_SHOULD_SHOW, "TUF_PLAYER_CARD_SHOULD_SHOW",
PICK_STRING(eFlag = TUF_SCOREBOARD_SHOULD_SHOW, "TUF_SCOREBOARD_SHOULD_SHOW",
PICK_STRING(eFlag = TUF_HIDING_SCORE_UI, "TUF_HIDING_SCORE_UI",
PICK_STRING(eFlag = TUF_SHOW_OPP_X_MARKER, "TUF_SHOW_OPP_X_MARKER",
PICK_STRING(eFlag = TUF_HIT_BEFORE_BOUNCE, "TUF_HIT_BEFORE_BOUNCE",
PICK_STRING(eFlag = TUF_SCLB_BUTTONS_INITED, "TUF_SCLB_BUTTONS_INITED",
PICK_STRING(eFlag = TUF_QUIT_OUTSIDE_COURT, "TUF_QUIT_OUTSIDE_COURT",
PICK_STRING(eFlag = TUF_RETURNING_FROM_QUIT, "TUF_RETURNING_FROM_QUIT",
PICK_STRING(eFlag = TUF_GAME_WON, "TUF_GAME_WON",
PICK_STRING(eFlag = TUF_SET_WON, "TUF_SET_WON",
PICK_STRING(eFlag = TUF_MATCH_WON, "TUF_MATCH_WON",
PICK_STRING(eFlag = TUF_TIEBREAK_HELP_SHOULD_SHOW, "TUF_TIEBREAK_HELP_SHOULD_SHOW",
PICK_STRING(eFlag = TUF_STATE_CONTROL_FLAG, "TUF_STATE_CONTROL_FLAG",
PICK_STRING(eFlag = TUF_ANALOG_RIGHT, "TUF_ANALOG_RIGHT",
PICK_STRING(eFlag = TUF_SHOW_SCLB, "TUF_SHOW_SCLB",
"Unknown TENNIS_UI_FLAGS enum")))))))))))))))))))))))))))))))
ENDFUNC
ENUM TENNIS_HEADSHOT_STATE
THS_REGISTER_PEDHEADSHOT = 0,
THS_IS_PEDHEADSHOT_VALID,
THS_IS_PEDHEADSHOT_READY,
THS_REQUEST_STREAMED_TEXTURE_DICT,
THS_HAS_STREAMED_TEXTURE_DICT_LOADED,
THS_FINISHED
ENDENUM
STRUCT TENNIS_MP_HEADSHOT_STRUCT
TEXT_LABEL_31 headShotTxd
PEDHEADSHOT_ID myPedHeadshot
INT iFailSafe
TENNIS_HEADSHOT_STATE eHeadshotState
ENDSTRUCT
ENUM TENNIS_UI_SECONDARY_FLAGS
TUSF_END_SCREEN_INITED = BIT0,
TUSF_MISSION_END_STINGER = BIT1,
TUSF_STOP_PROCESS_SCOREBOARD_THIS_FRAME = BIT2,
TUSF_SCLB_BUTTONS_INITED_OFFLINE = BIT3,
TUSF_SCLB_PROFILE_BUTTON_SHOWN = BIT4
ENDENUM
FUNC STRING GET_STRING_FROM_TENNIS_UI_FLAG_SET_TWO(TENNIS_UI_SECONDARY_FLAGS eFlag)
SWITCH eFlag
CASE TUSF_END_SCREEN_INITED RETURN "TUSF_END_SCREEN_INITED"
CASE TUSF_MISSION_END_STINGER RETURN "TUSF_MISSION_END_STINGER"
CASE TUSF_STOP_PROCESS_SCOREBOARD_THIS_FRAME RETURN "TUSF_STOP_PROCESS_SCOREBOARD_THIS_FRAME"
CASE TUSF_SCLB_BUTTONS_INITED_OFFLINE RETURN "TUSF_SCLB_BUTTONS_INITED_OFFLINE"
CASE TUSF_SCLB_PROFILE_BUTTON_SHOWN RETURN "TUSF_SCLB_PROFILE_BUTTON_SHOWN"
ENDSWITCH
RETURN "Unknown TENNIS_UI_SECONDARY_FLAGS enum"
ENDFUNC
STRUCT TENNIS_UI
BLIP_INDEX oppBlip
SIMPLE_USE_CONTEXT useContext
SCALEFORM_INDEX scorePanelSF
SCALEFORM_INDEX leaderboardUI
SCRIPT_SHARD_BIG_MESSAGE matchUI
INT iUIFlags
INT iPrevUIFlags
structTimer sUITimer
FLOAT fAwardViewTime
TEXT_LABEL_31 sHeadTextures[TENNIS_PLAYERS]
INT iBeepWait, iBeepTimeStamp, iMenuStamp
#IF IS_TENNIS_MULTIPLAYER
TENNIS_MP_HEADSHOT_STRUCT sHeadshots[2]
#ENDIF
END_SCREEN_DATASET thisEsd
TENNIS_UI_SECONDARY_FLAGS eUISecFlags
INT iXPToGive
INT iBets
INT iScorecardInputLockoutFrameStamp
// #IF IS_TENNIS_MULTIPLAYER
SCRIPT_SHARD_BIG_MESSAGE uiShardMS
// #ENDIF
ENDSTRUCT
PROC SET_TENNIS_UI_SCORECARD_INPUT_LOCKOUT_FRAME_STAMP(TENNIS_UI &thisUI, INT iNewStamp)
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_UI_SCORECARD_INPUT_LOCKOUT_FRAME_STAMP with iNewStamp=", iNewStamp)
thisUI.iScorecardInputLockoutFrameStamp = iNewStamp
ENDPROC
FUNC INT GET_TENNIS_UI_SCORECARD_INPUT_LOCKOUT_FRAME_STAMP(TENNIS_UI &thisUI)
RETURN thisUI.iScorecardInputLockoutFrameStamp
ENDFUNC
PROC DRAW_TENNIS_HELP_KEYS(INT iTimer = 0)
IF g_bResultScreenDisplaying
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
ENDIF
INT iScreenX, iDummy
GET_SCREEN_RESOLUTION(iScreenX, iDummy)
DRAW_MENU_HELP_SCALEFORM(iScreenX, -1, iTimer)
ENDPROC
PROC DRAW_TENNIS_INTRO_UI()
DRAW_MENU(TRUE, -1, TRUE)
ENDPROC
PROC UPDATE_TENNIS_SIMPLE_USE_CONTEXT(SIMPLE_USE_CONTEXT& useContext, BOOL bJPButtonSwitch = TRUE)
// CDEBUG3LN(DEBUG_TENNIS, "UPDATE_TENNIS_SIMPLE_USE_CONTEXT called, bJPButtonSwitch=", PICK_STRING(bJPBUttonSwitch, "TRUE", "FALSE"))
#IF IS_TENNIS_MULTIPLAYER
IF NETWORK_TEXT_CHAT_IS_TYPING()
EXIT
ENDIF
#ENDIF
UPDATE_SIMPLE_USE_CONTEXT(useContext, default, default, default, bJPButtonSwitch)
ENDPROC
PROC SET_TENNIS_UI_XP_TO_GIVE(TENNIS_UI &thisUI, INT iNewXP)
CPRINTLN(DEBUG_TENNIS, "SET_TENNIS_UI_XP_TO_GIVE :: iNewXP=", iNewXP)
thisUI.iXPToGive = iNewXP
ENDPROC
FUNC INT GET_TENNIS_UI_XP_TO_GIVE(TENNIS_UI &thisUI)
RETURN thisUI.iXPToGive
ENDFUNC
PROC SET_TENNIS_UI_BETS_DATA(TENNIS_UI &thisUI, INT iNewBetsData)
CPRINTLN(DEBUG_TENNIS, "SET_TENNIS_UI_BETS_DATA :: iNewBetsData=", iNewBetsData)
thisUI.iBets = iNewBetsData
ENDPROC
FUNC INT GET_TENNIS_UI_BETS_DATA(TENNIS_UI &thisUI)
RETURN thisUI.iBets
ENDFUNC
PROC SET_TENNIS_UI_SECONDARY_FLAG(TENNIS_UI &thisUI, TENNIS_UI_SECONDARY_FLAGS eFlag)
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_UI_SECONDARY_FLAG :: Setting ", GET_STRING_FROM_TENNIS_UI_FLAG_SET_TWO(eFlag))
thisUI.eUISecFlags = thisUI.eUISecFlags | eFlag
ENDPROC
PROC CLEAR_TENNIS_UI_SECONDARY_FLAG(TENNIS_UI &thisUI, TENNIS_UI_SECONDARY_FLAGS eFlag)
CDEBUG2LN(DEBUG_TENNIS, "CLEAR_TENNIS_UI_SECONDARY_FLAG :: Clearing ", GET_STRING_FROM_TENNIS_UI_FLAG_SET_TWO(eFlag))
thisUI.eUISecFlags -= thisUI.eUISecFlags & eFlag
ENDPROC
FUNC BOOL IS_TENNIS_UI_SECONDARY_FLAG_SET(TENNIS_UI &thisUI, TENNIS_UI_SECONDARY_FLAGS eFlag)
RETURN (ENUM_TO_INT(thisUI.eUISecFlags) & ENUM_TO_INT(eFlag)) <> 0
ENDFUNC
PROC DESTROY_TENNIS_BLIP(BLIP_INDEX& blip)
IF DOES_BLIP_EXIST(blip)
REMOVE_BLIP(blip)
ENDIF
ENDPROC
PROC SET_TENNIS_UI_MENU_STAMP(TENNIS_UI &thisUI, INT iNewStamp)
thisUI.iMenuStamp = iNewStamp
ENDPROC
FUNC INT GET_TENNIS_UI_MENU_STAMP(TENNIS_UI &thisUI)
RETURN thisUI.iMenuStamp
ENDFUNC