271 lines
9.3 KiB
Scheme
Executable File
271 lines
9.3 KiB
Scheme
Executable File
USING "globals.sch"
|
|
USING "tennis_mp.sch"
|
|
USING "Net_XP_func.sch"
|
|
USING "tennis_ui.sch"
|
|
|
|
// The client broadcast data
|
|
// Everyone can read this data, only the local player only the server can update it
|
|
STRUCT TENNIS_CLIENT_BD
|
|
TENNIS_MP_STATE eMPState
|
|
TENNIS_GAME_STATE_ENUM eGameState
|
|
TENNIS_GAME_STATE_ENUM ePrevGameState
|
|
PLAYER_INDEX piCurPlayerID
|
|
enumActivityResult eResult
|
|
TENNIS_HEADSET_ENUM eMyHeadset
|
|
|
|
VECTOR vPredBallPos, vPredBallVel
|
|
TENNIS_BALL_SPIN ePredSpin
|
|
|
|
INT iControlFlags
|
|
INT iFrameStamp
|
|
INT iRallyCounter
|
|
INT iWaitStamp
|
|
INT iOutroStamp
|
|
// INT iBallUpdateStamp
|
|
INT iBallCatchupTime
|
|
LAUNCH_DETAIL_ENUM eServeGrade
|
|
FMMC_EOM_DETAILS sEndOfMission
|
|
|
|
VECTOR vForward, vRight
|
|
TENNIS_PLAYER_ID eCourtside
|
|
|
|
PED_INDEX pedClones[TENNIS_PLAYERS]
|
|
ENDSTRUCT
|
|
|
|
FUNC STRING GET_STRING_FROM_TENNIS_ACTIVITY_RESULT( enumActivityResult eResult )
|
|
SWITCH eResult
|
|
CASE AR_playerWon RETURN "AR_playerWon"
|
|
CASE AR_playerQuit RETURN "AR_playerQuit"
|
|
CASE AR_buddyA_won RETURN "AR_buddyA_won"
|
|
ENDSWITCH
|
|
RETURN "unknown result"
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_OUTRO_STAMP(TENNIS_CLIENT_BD &clientBD, INT iNewStamp)
|
|
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_OUTRO_STAMP :: clientBD.iOutroStamp =, ", iNewStamp)
|
|
clientBD.iOutroStamp = iNewStamp
|
|
ENDPROC
|
|
|
|
FUNC INT GET_TENNIS_CLIENT_OUTRO_STAMP(TENNIS_CLIENT_BD &clientBD)
|
|
RETURN clientBD.iOutroStamp
|
|
ENDFUNC
|
|
|
|
//PROC SET_TENNIS_CLIENT_BALL_UPDATE_STAMP(TENNIS_CLIENT_BD &clientBD, INT iNewStamp)
|
|
// CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_BALL_UPDATE_STAMP :: iNewStamp=", iNewStamp)
|
|
// clientBD.iBallUpdateStamp = iNewStamp
|
|
//ENDPROC
|
|
//
|
|
//FUNC INT GET_TENNIS_CLIENT_BALL_UPDATE_STAMP(TENNIS_CLIENT_BD &clientBD)
|
|
// RETURN clientBD.iBallUpdateStamp
|
|
//ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_BALL_CATCHUP_TIME(TENNIS_CLIENT_BD &clientBD, INT iNewTime)
|
|
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_BALL_CATCHUP_TIME :: iNewTime=", iNewTime)
|
|
clientBD.iBallCatchupTime = iNewTime
|
|
ENDPROC
|
|
|
|
FUNC INT GET_TENNIS_CLIENT_BALL_CATCHUP_TIME(TENNIS_CLIENT_BD &clientBD)
|
|
RETURN clientBD.iBallCatchupTime
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_PRED_BALL_SPIN(TENNIS_CLIENT_BD & clientBD, TENNIS_BALL_SPIN eNewSpin)
|
|
clientBD.ePredSpin = eNewSpin
|
|
ENDPROC
|
|
|
|
FUNC TENNIS_BALL_SPIN GET_TENNIS_CLIENT_PRED_BALL_SPIN(TENNIS_CLIENT_BD & clientBD)
|
|
RETURN clientBD.ePredSpin
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_PRED_BALL_POS(TENNIS_CLIENT_BD & clientBD, VECTOR vNewPos)
|
|
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_PRED_BALL_POS vNewPos=", vNewPos)
|
|
clientBD.vPredBallPos = vNewPos
|
|
ENDPROC
|
|
|
|
FUNC VECTOR GET_TENNIS_CLIENT_PRED_BALL_POS(TENNIS_CLIENT_BD & clientBD)
|
|
RETURN clientBD.vPredBallPos
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_PRED_BALL_VEL(TENNIS_CLIENT_BD & clientBD, VECTOR vNewVel)
|
|
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_PRED_BALL_POS vNewVel=", vNewVel)
|
|
clientBD.vPredBallVel = vNewVel
|
|
ENDPROC
|
|
|
|
FUNC VECTOR GET_TENNIS_CLIENT_PRED_BALL_VEL(TENNIS_CLIENT_BD & clientBD)
|
|
RETURN clientBD.vPredBallVel
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_WAIT_STAMP(TENNIS_CLIENT_BD &clientBD, INT iNewStamp)
|
|
CPRINTLN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_WAIT_STAMP iNewStamp=", iNewStamp)
|
|
clientBD.iWaitStamp = iNewStamp
|
|
ENDPROC
|
|
|
|
FUNC INT GET_TENNIS_CLIENT_WAIT_STAMP(TENNIS_CLIENT_BD &clientBD)
|
|
RETURN clientBD.iWaitStamp
|
|
ENDFUNC
|
|
|
|
FUNC TENNIS_HEADSET_ENUM GET_TENNIS_CLIENT_HEADSET_STATE(TENNIS_CLIENT_BD &clientBD)
|
|
RETURN clientBD.eMyHeadset
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_HEADSET_STATE(TENNIS_CLIENT_BD &clientBD, TENNIS_HEADSET_ENUM eHeadset)
|
|
CDEBUG2LN( DEBUG_TENNIS, "SET_TENNIS_CLIENT_HEADSET_STATE :: setting to ", GET_STRING_FROM_TENNIS_HEADSET_ENUM( eHeadset ), " for player ", NATIVE_TO_INT( clientBD.piCurPlayerID ) )
|
|
clientBD.eMyHeadset = eHeadset
|
|
ENDPROC
|
|
|
|
PROC SET_TENNIS_CLIENT_FLAG(TENNIS_CLIENT_BD &clientBD, TENNIS_MP_CLIENT_FLAGS eFlag)
|
|
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_FLAG :: Setting ", GET_STRING_FROM_TENNIS_CLIENT_FLAG(eFlag))
|
|
SET_BITMASK_AS_ENUM(clientBD.iControlFlags, eFlag)
|
|
ENDPROC
|
|
|
|
PROC CLEAR_TENNIS_CLIENT_FLAG(TENNIS_CLIENT_BD &clientBD, TENNIS_MP_CLIENT_FLAGS eFlag)
|
|
CDEBUG2LN(DEBUG_TENNIS, "CLEAR_TENNIS_CLIENT_FLAG :: Clearing ", GET_STRING_FROM_TENNIS_CLIENT_FLAG(eFlag))
|
|
CLEAR_BITMASK_AS_ENUM(clientBD.iControlFlags, eFlag)
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_TENNIS_CLIENT_FLAG_SET(TENNIS_CLIENT_BD &clientBD, TENNIS_MP_CLIENT_FLAGS eFlag)
|
|
RETURN IS_BITMASK_AS_ENUM_SET(clientBD.iControlFlags, eFlag)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Increase the client's rally counter by 1.
|
|
/// PARAMS:
|
|
/// clientBD -
|
|
PROC INCREASE_TENNIS_CLIENT_RALLY_COUNTER(TENNIS_CLIENT_BD &clientBD)
|
|
clientBD.iRallyCounter++
|
|
CPRINTLN( DEBUG_TENNIS, "INCREASE_TENNIS_CLIENT_RALLY_COUNTER called, iRallyCounter=", clientBD.iRallyCounter )
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Tells us whether to award bonus XP or not
|
|
/// PARAMS:
|
|
/// clientBD -
|
|
/// RETURNS:
|
|
/// TRUE If the rally counter is >= RALLY_XP_THRESHOLD
|
|
FUNC BOOL SHOULD_TENNIS_CLIENT_GET_RALLY_XP_BONUS(TENNIS_CLIENT_BD &clientBD)
|
|
RETURN clientBD.iRallyCounter >= RALLY_XP_THRESHOLD
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Reset the player's rally counter to 0
|
|
/// PARAMS:
|
|
/// clientBD -
|
|
PROC RESET_TENNIS_CLIENT_RALLY_COUNTER(TENNIS_CLIENT_BD &clientBD)
|
|
CDEBUG2LN( DEBUG_TENNIS, "RESET_TENNIS_CLIENT_RALLY_COUNTER called" )
|
|
clientBD.iRallyCounter = 0
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Award the local player RALLY_XP_BONUS
|
|
PROC AWARD_TENNIS_CLIENT_RALLY_XP_BONUS()
|
|
INT iXPToGive = ROUND(RALLY_XP_BONUS * g_sMPTunables.fxp_tunable_Minigames_Tennis_Rally)
|
|
CPRINTLN(DEBUG_TENNIS, "AWARD_TENNIS_CLIENT_RALLY_XP_BONUS given, make sure this doesn't happen every frame, iXPToGive=", iXPToGive)
|
|
GIVE_LOCAL_PLAYER_XP(eXPTYPE_CO_OP_JOBFM, "XPT_TENNIS",XPTYPE_SKILL, XPCATEGORY_SKILL_TENNIS_RALLY, iXPToGive)
|
|
ENDPROC
|
|
|
|
PROC SET_TENNIS_CLIENT_SERVE_GRADE(TENNIS_CLIENT_BD &clientBD, LAUNCH_DETAIL_ENUM eServe)
|
|
clientBD.eServeGrade = eServe
|
|
ENDPROC
|
|
|
|
FUNC LAUNCH_DETAIL_ENUM GET_TENNIS_CLIENT_SERVE_GRADE(TENNIS_CLIENT_BD &clientBD)
|
|
RETURN clientBD.eServeGrade
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_ACTIVITY_RESULT(TENNIS_CLIENT_BD &clientBD, enumActivityResult eNewResult)
|
|
CDEBUG2LN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_ACTIVITY_RESULT set to ", GET_STRING_FROM_TENNIS_ACTIVITY_RESULT( eNewResult ) )
|
|
clientBD.eResult = eNewResult
|
|
ENDPROC
|
|
|
|
FUNC enumActivityResult GET_TENNIS_CLIENT_ACTIVITY_RESULT(TENNIS_CLIENT_BD &clientBD)
|
|
CDEBUG2LN(DEBUG_TENNIS, "GET_TENNIS_CLIENT_ACTIVITY_RESULT returning ", GET_STRING_FROM_TENNIS_ACTIVITY_RESULT( clientBD.eResult ) )
|
|
RETURN clientBD.eResult
|
|
ENDFUNC
|
|
|
|
PROC SET_TENNIS_CLIENT_FRAME_STAMP(TENNIS_CLIENT_BD &thisBD, INT iNewFrameStamp)
|
|
CPRINTLN(DEBUG_TENNIS, "SET_TENNIS_CLIENT_FRAME_STAMP iNewFrameStamp=", iNewFrameStamp)
|
|
thisBD.iFrameStamp = iNewFrameStamp
|
|
ENDPROC
|
|
|
|
FUNC INT GET_TENNIS_CLIENT_FRAME_STAMP(TENNIS_CLIENT_BD &thisBD)
|
|
RETURN thisBD.iFrameStamp
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// accessor
|
|
/// PARAMS:
|
|
/// thisBD -
|
|
/// RETURNS:
|
|
///
|
|
FUNC PLAYER_INDEX GET_TENNIS_MP_PI_CUR_PLAYER_ID(TENNIS_CLIENT_BD &thisBD)
|
|
RETURN thisBD.piCurPlayerID
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// mutator
|
|
/// PARAMS:
|
|
/// thisBD -
|
|
/// piID -
|
|
PROC SET_TENNIS_PI_CUR_PLAYER_ID(TENNIS_CLIENT_BD &thisBD, PLAYER_INDEX piID)
|
|
thisBD.piCurPlayerID = piID
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// accessor
|
|
/// PARAMS:
|
|
/// thisBD -
|
|
/// RETURNS:
|
|
///
|
|
FUNC TENNIS_MP_STATE GET_TENNIS_CLIENT_MP_STATE(TENNIS_CLIENT_BD &thisBD)
|
|
RETURN thisBD.eMPState
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// mutator
|
|
/// PARAMS:
|
|
/// thisBD -
|
|
/// newMPState -
|
|
PROC SET_TENNIS_CLIENT_MP_STATE(TENNIS_CLIENT_BD &thisBD, TENNIS_MP_STATE newTMPS)
|
|
IF thisBD.eMPState <> newTMPS
|
|
thisBD.eMPState = newTMPS
|
|
SET_TENNIS_CLIENT_WAIT_STAMP(thisBD, GET_GAME_TIMER() + ROUND(DESYNC_THRESHOLD * 1000))
|
|
CPRINTLN(DEBUG_TENNIS, "Game Timer: ", GET_GAME_TIMER(), " SET_TENNIS_CLIENT_MP_STATE: Client Set to MP State: ", GET_STRING_FROM_TENNIS_MP_STATE(newTMPS), ", ", thisBD.eMPState)
|
|
ELSE
|
|
CPRINTLN(DEBUG_TENNIS, "Game Timer: ", GET_GAME_TIMER(), " SET_TENNIS_CLIENT_MP_STATE: Client Already Set to MP State: ", GET_STRING_FROM_TENNIS_MP_STATE(thisBD.eMPState))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// accessor
|
|
/// PARAMS:
|
|
/// thisBD -
|
|
/// RETURNS:
|
|
///
|
|
FUNC TENNIS_GAME_STATE_ENUM GET_TENNIS_CLIENT_GAME_STATE(TENNIS_CLIENT_BD &thisBD)
|
|
RETURN thisBD.eGameState
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// accessor
|
|
/// PARAMS:
|
|
/// thisBD -
|
|
/// RETURNS:
|
|
///
|
|
FUNC TENNIS_GAME_STATE_ENUM GET_TENNIS_CLIENT_PREV_GAME_STATE(TENNIS_CLIENT_BD &thisBD)
|
|
RETURN thisBD.ePrevGameState
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets the clientBD game state and changes the MP state to lockstep
|
|
/// Will not go to lockstep if it's trying to set the state to one it already wants to go to.
|
|
/// PARAMS:
|
|
/// thisBD -
|
|
/// newTGSE -
|
|
PROC SET_TENNIS_CLIENT_GAME_STATE(TENNIS_CLIENT_BD &thisBD, TENNIS_GAME_STATE_ENUM newTGSE)
|
|
IF thisBD.eGameState <> newTGSE
|
|
thisBD.ePrevGameState = thisBD.eGameState
|
|
thisBD.eGameState = newTGSE
|
|
CPRINTLN(DEBUG_TENNIS, "Game Timer: ", GET_GAME_TIMER(), " SET_TENNIS_CLIENT_GAME_STATE: Client Requesting to go to ", GET_STRING_FROM_TENNIS_GAME_STATE(newTGSE), ", ", newTGSE)
|
|
ELSE
|
|
CPRINTLN(DEBUG_TENNIS, "Game Timer: ", GET_GAME_TIMER(), " SET_TENNIS_CLIENT_GAME_STATE: Trying to request ", GET_STRING_FROM_TENNIS_GAME_STATE(newTGSE), ". State already requested")
|
|
ENDIF
|
|
ENDPROC
|