695 lines
25 KiB
Scheme
Executable File
695 lines
25 KiB
Scheme
Executable File
// Range_Round.sch
|
|
USING "Range_Score.sch"
|
|
|
|
CONST_FLOAT CONST_GraceResetTime 1.0
|
|
TWEAK_INT k_RANGE_TARGET_HIT_BUFFER 30 // in milliseconds
|
|
|
|
/// PURPOSE: Used to store data related to our grace period for auto weapons.
|
|
STRUCT Range_Grace
|
|
BOOL bGraceUsed // Single shot grace period when firing automatic weapons, so he doens't lose multiplier right away.
|
|
structTimer tGraceResetTimer // Eventually reset the grace period timer.
|
|
ENDSTRUCT
|
|
|
|
ENUM ROUND_INFO_FLAGS
|
|
ROUND_SHOT_FIRED = BIT0,
|
|
ROUND_TARGET_HIT = BIT1,
|
|
|
|
ROUND_PASS_NOISE_PLAYED = BIT5,
|
|
ROUND_WIPE_CAM = BIT6,
|
|
|
|
ROUND_CAN_DISPLAY_TARGET_HELP = BIT7,
|
|
|
|
// You set these.
|
|
ROUND_USE_FRAGGABLE_TARGETS = BIT9,
|
|
ROUND_USE_METAL_TARGETS = BIT10,
|
|
ROUND_USE_BACK_RANGE = BIT11,
|
|
|
|
ROUND_NO_TIME_BONUS = BIT16,
|
|
|
|
ROUND_TARGETS_ARE_INFINITE = BIT20,
|
|
ROUND_ALLOW_TIME_EXPIRY = BIT21,
|
|
ROUND_AWARDED_PERCENTAGE = BIT22,
|
|
|
|
// Don't set these.
|
|
ROUND_PLAYER_OWNS_WEAPON = BIT12,
|
|
ROUND_TIME_IS_UP = BIT13,
|
|
ROUND_PLAYED_10_SEC_WARNING = BIT14,
|
|
ROUND_PLAYED_5_SEC_WARNING = BIT15,
|
|
ROUND_FAIL_TARGET_CLEANUP = BIT17,
|
|
|
|
ROUND_PLAYER_OWNS_HG_FLASHLIGHT = BIT18,
|
|
ROUND_PLAYER_OWNS_AR_FLASHLIGHT = BIT19,
|
|
|
|
// Or this.
|
|
ROUND_HVY3_FLOAT_HELP = BIT30
|
|
ENDENUM
|
|
|
|
/// PURPOSE: This struct tends to track things on a per-loop basis.
|
|
/// There's a few things in here that aren't, like total shots.
|
|
STRUCT Range_RoundInfo
|
|
INT iTotalShots
|
|
INT iZ1Hits
|
|
INT iZ2Hits
|
|
INT iZ3Hits
|
|
INT iZ4Hits
|
|
INT iTargetsDestroyed
|
|
INT iMaxTargets
|
|
INT iStoredAmmoCount
|
|
INT iMaxActions
|
|
|
|
INT iTargetsHitThisExplosion = 0
|
|
|
|
INT iRoundFlags
|
|
INT iSFX_Warning = -1
|
|
INT iBeepTimeStamp
|
|
|
|
RANGE_ROUND_TYPE eRoundType
|
|
RANGE_WEAPON_CATEGORY eWeaponCat
|
|
RANGE_WEAPON_TYPE eWeaponType
|
|
RANGE_WEAPON_CHALLENGES eChallengeType
|
|
|
|
FLOAT fCurrentBulletDamage
|
|
FLOAT fCurrentRoundLength
|
|
FLOAT fTotalTime // I tihnk this is the total time taken...
|
|
FLOAT fStartTime
|
|
FLOAT fNoAmmoStamp // No clue what this is.
|
|
FLOAT fTotalPauseTime
|
|
FLOAT fCurrentPauseTime
|
|
|
|
structTimer sTimeLeft
|
|
structTimer sGenTimer // "Use to control misc things."
|
|
|
|
Range_Grace sGraceInfo
|
|
Range_MultiplierData sMPData
|
|
Range_ScoreData sScoreData
|
|
|
|
INT iTargetHitsCached
|
|
INT iTargetHitsBuffer
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: Contains info on a specific challenge.
|
|
STRUCT Range_Challenge
|
|
RANGE_ROUND_TYPE eRndType
|
|
RANGE_ROUND_TYPE eUnlockReq
|
|
ROUND_SCORING_STYLE eScoringStyle
|
|
|
|
INT iZ1Hits
|
|
INT iZ2Hits
|
|
INT iZ3Hits
|
|
INT iZ4Hits
|
|
|
|
INT iBronzeReq
|
|
INT iSilverReq
|
|
INT iGoldReq
|
|
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: This is the info associated with all rounds:
|
|
/// - If it's unlocked
|
|
/// - Round type
|
|
/// - Unlock Req
|
|
/// - Medal thresholds
|
|
/// This is meant to be init once, and then only the bUnlock will really change.
|
|
STRUCT Range_WeaponRounds
|
|
Range_Challenge sChallenges[NUM_WEAPON_CHALLS]
|
|
ENDSTRUCT
|
|
|
|
PROC PLAY_RANGE_SOUND(STRING sSound, BOOL bHUDDefaultSet = FALSE)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "PLAY_RANGE_SOUND :: called, playing ", sSound)
|
|
|
|
IF bHUDDefaultSet
|
|
PLAY_SOUND_FRONTEND(-1, sSound, "HUD_FRONTEND_DEFAULT_SOUNDSET")
|
|
ELSE
|
|
PLAY_SOUND_FRONTEND(-1, sSound, "HUD_MINI_GAME_SOUNDSET")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC RANGE_INCREMENT_ZONE_HITS(Range_RoundInfo & sRndInfo, INT iZone)
|
|
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
|
|
STATSENUM eStat
|
|
IF ePed = CHAR_MICHAEL
|
|
eStat = SP0_HITS_PEDS_VEHICLES
|
|
ELIF ePed = CHAR_FRANKLIN
|
|
eStat = SP1_HITS_PEDS_VEHICLES
|
|
ELIF ePed = CHAR_TREVOR
|
|
eStat = SP2_HITS_PEDS_VEHICLES
|
|
ENDIF
|
|
SWITCH iZone
|
|
CASE 1
|
|
sRndInfo.iZ1Hits++
|
|
STAT_INCREMENT(eStat, 1.0)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "RANGE_INCREMENT_ZONE_HITS: Incrementing zone ", iZone, " hits to ", sRndInfo.iZ1Hits, ", ePed=", ePed, ", eStat=", eStat)
|
|
BREAK
|
|
CASE 2
|
|
sRndInfo.iZ2Hits++
|
|
STAT_INCREMENT(eStat, 1.0)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "RANGE_INCREMENT_ZONE_HITS: Incrementing zone ", iZone, " hits to ", sRndInfo.iZ2Hits, ", ePed=", ePed, ", eStat=", eStat)
|
|
BREAK
|
|
CASE 3
|
|
sRndInfo.iZ3Hits++
|
|
STAT_INCREMENT(eStat, 1.0)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "RANGE_INCREMENT_ZONE_HITS: Incrementing zone ", iZone, " hits to ", sRndInfo.iZ3Hits, ", ePed=", ePed, ", eStat=", eStat)
|
|
BREAK
|
|
CASE 4
|
|
sRndInfo.iZ4Hits++
|
|
STAT_INCREMENT(eStat, 1.0)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "RANGE_INCREMENT_ZONE_HITS: Incrementing zone ", iZone, " hits to ", sRndInfo.iZ4Hits, ", ePed=", ePed, ", eStat=", eStat)
|
|
BREAK
|
|
DEFAULT
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "Passing an invalid Zone to RANGE_INCREMENT_ZONE_HITS :: ", iZone)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
FUNC ROUND_SCORING_STYLE GET_ROUND_SCORE_STYLE(Range_RoundInfo & sCurRoundInfo)
|
|
RETURN sCurRoundInfo.sScoreData.eScoreStyle
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Sets a round type to unlocked
|
|
/// PARAMS:
|
|
/// eRoundType - The round type to be unlocked
|
|
PROC SET_ROUND_UNLOCKED(RANGE_ROUND_TYPE eRoundType, BOOL bUnlocked = TRUE)
|
|
g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].bUnlocked = bUnlocked
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a round type to unlocked
|
|
/// PARAMS:
|
|
/// eRoundType - The round type to be unlocked
|
|
PROC SET_ROUND_PASSED(RANGE_ROUND_TYPE eRoundType, BOOL bPassed = TRUE)
|
|
g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].bPassed = bPassed
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// STores zone hits for a round, but only if they surpass the zone hits from a previous round.
|
|
PROC SET_ROUND_ZONE_HITS(RANGE_ROUND_TYPE eRoundType, INT iScore, INT iZ1, INT iZ2, INT iZ3, INT iZ4)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "SET_ROUND_ZONE_HITS :: Called")
|
|
IF (iScore > GET_RANGE_SP_HIGH_SCORE(ePlayerChar, eRoundType))
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "SET_ROUND_ZONE_HITS :: Higher Score")
|
|
g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone1Hit = iZ1
|
|
g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone2Hit = iZ2
|
|
g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone3Hit = iZ3
|
|
g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone4Hit = iZ4
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "g_savedGlobals.sRangeData[ePlayerChar].sRounds[", eRoundType, "].iZone1Hit= ", g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone1Hit, ", iZ1=", iZ1)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "g_savedGlobals.sRangeData[ePlayerChar].sRounds[", eRoundType, "].iZone2Hit= ", g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone2Hit, ", iZ2=", iZ2)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "g_savedGlobals.sRangeData[ePlayerChar].sRounds[", eRoundType, "].iZone3Hit= ", g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone3Hit, ", iZ3=", iZ3)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "g_savedGlobals.sRangeData[ePlayerChar].sRounds[", eRoundType, "].iZone4Hit= ", g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].iZone4Hit, ", iZ4=", iZ4)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the certain round is passed (CheckRoundPassed)
|
|
/// RETURNS:
|
|
/// True if this round is passed
|
|
FUNC BOOL IS_ROUND_PASSED(RANGE_ROUND_TYPE eRoundType)
|
|
// Check our saved globals
|
|
RETURN g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].bPassed
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the certain round is unlocked
|
|
/// RETURNS:
|
|
/// True if this round is unlocked (met previous requirements)
|
|
FUNC BOOL IS_ROUND_UNLOCKED(RANGE_ROUND_TYPE eRoundType)
|
|
// Check our saved globals
|
|
RETURN g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].bUnlocked
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all the range rounds have been passed
|
|
/// RETURNS:
|
|
///
|
|
FUNC BOOL HANDLE_RANGE_ROUND_COMPLETION_PERCENTAGES()
|
|
BOOL bPistolPassed = IS_ROUND_PASSED(RT_PISTOL_CHAL_1) AND IS_ROUND_PASSED(RT_PISTOL_CHAL_2) AND IS_ROUND_PASSED(RT_PISTOL_CHAL_3)
|
|
BOOL bSMGPassed = IS_ROUND_PASSED(RT_SMG_CHAL_1) AND IS_ROUND_PASSED(RT_SMG_CHAL_2) AND IS_ROUND_PASSED(RT_SMG_CHAL_3)
|
|
BOOL bARPassed = IS_ROUND_PASSED(RT_AR_CHAL_1) AND IS_ROUND_PASSED(RT_AR_CHAL_2) AND IS_ROUND_PASSED(RT_AR_CHAL_3)
|
|
BOOL bShotgunPassed = IS_ROUND_PASSED(RT_SHOTGUN_CHAL_1) AND IS_ROUND_PASSED(RT_SHOTGUN_CHAL_2) AND IS_ROUND_PASSED(RT_SHOTGUN_CHAL_3)
|
|
BOOL bLMGPassed = IS_ROUND_PASSED(RT_LMG_CHAL_1) AND IS_ROUND_PASSED(RT_LMG_CHAL_2) AND IS_ROUND_PASSED(RT_LMG_CHAL_3)
|
|
BOOL bHeavyPassed = IS_ROUND_PASSED(RT_MINIGUN_CHAL_1) AND IS_ROUND_PASSED(RT_MINIGUN_CHAL_2) AND IS_ROUND_PASSED(RT_MINIGUN_CHAL_3)
|
|
|
|
IF bPistolPassed REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_MG_SHHAN) ENDIF
|
|
IF bSMGPassed REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_MG_SHSUB) ENDIF
|
|
IF bARPassed REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_MG_SHRIF) ENDIF
|
|
IF bShotgunPassed REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_MG_SHSHO) ENDIF
|
|
IF bLMGPassed REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_MG_SHLMG) ENDIF
|
|
IF bHeavyPassed REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_MG_SHHVY) ENDIF
|
|
|
|
RETURN bPistolPassed AND bSMGPassed AND bARPassed AND bShotgunPassed AND bLMGPassed AND bHeavyPassed
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns the current highest medal for the specified round
|
|
/// PARAMS:
|
|
/// eRoundType - Which round type we are inquiring about
|
|
/// RETURNS:
|
|
/// The highest medal the player has earned in this round
|
|
FUNC RANGE_ROUND_MEDAL GET_ROUND_MEDAL(RANGE_ROUND_TYPE eRoundType)
|
|
RETURN g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets our save data to store the medal for the specified round
|
|
/// PARAMS:
|
|
/// eRoundType - The round type
|
|
/// eMedal - The medal we are awarding
|
|
PROC SET_ROUND_MEDAL(RANGE_ROUND_TYPE eRoundType, RANGE_ROUND_MEDAL eMedal)
|
|
g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal = eMedal
|
|
SET_ROUND_UNLOCKED(eRoundType, TRUE)
|
|
SET_ROUND_PASSED(eRoundType, TRUE)
|
|
|
|
PLAY_RANGE_SOUND("MEDAL_UP")
|
|
|
|
CPRINTLN( DEBUG_SHOOTRANGE, "SET_ROUND_MEDAL -- Awarding ", GET_STRING_FROM_RANGE_ROUND_MEDAL( eMedal ), " medal, ePlayerChar=", ePlayerChar, ", eRoundType=", GET_STRING_FROM_RANGE_ROUND_TYPE( eRoundType ) )
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Returns whether or not the player earned a bronze on the challenge passed in.
|
|
/// RETURNS:
|
|
/// TRUE if the player earned a bronze or better.
|
|
FUNC BOOL WAS_CHALLENGE_BRONZED(RANGE_ROUND_TYPE eRoundType)
|
|
RETURN (g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal = RRM_GOLD)
|
|
OR (g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal = RRM_SILVER)
|
|
OR(g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal = RRM_BRONZE)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns whether or not the player earned a silver on the challenge passed in.
|
|
/// RETURNS:
|
|
/// TRUE if the player earned a silver or better.
|
|
FUNC BOOL WAS_CHALLENGE_SILVERED(RANGE_ROUND_TYPE eRoundType)
|
|
RETURN (g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal = RRM_GOLD)
|
|
OR (g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal = RRM_SILVER)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns whether or not the player earned a gold on the challenge passed in.
|
|
/// RETURNS:
|
|
/// TRUE if the player earned a gold.
|
|
FUNC BOOL WAS_CHALLENGE_GOLDED(RANGE_ROUND_TYPE eRoundType)
|
|
RETURN (g_savedGlobals.sRangeData[ePlayerChar].sRounds[eRoundType].eTopMedal = RRM_GOLD)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all the range rounds have bronze medals or better
|
|
/// RETURNS:
|
|
///
|
|
FUNC BOOL ARE_ALL_RANGE_ROUNDS_BRONZED()
|
|
BOOL bPistol = WAS_CHALLENGE_BRONZED(RT_PISTOL_CHAL_1) AND WAS_CHALLENGE_BRONZED(RT_PISTOL_CHAL_2) AND WAS_CHALLENGE_BRONZED(RT_PISTOL_CHAL_3)
|
|
BOOL bSMG = WAS_CHALLENGE_BRONZED(RT_SMG_CHAL_1) AND WAS_CHALLENGE_BRONZED(RT_SMG_CHAL_2) AND WAS_CHALLENGE_BRONZED(RT_SMG_CHAL_3)
|
|
BOOL bAR = WAS_CHALLENGE_BRONZED(RT_AR_CHAL_1) AND WAS_CHALLENGE_BRONZED(RT_AR_CHAL_2) AND WAS_CHALLENGE_BRONZED(RT_AR_CHAL_3)
|
|
BOOL bShotgun = WAS_CHALLENGE_BRONZED(RT_SHOTGUN_CHAL_1) AND WAS_CHALLENGE_BRONZED(RT_SHOTGUN_CHAL_2) AND WAS_CHALLENGE_BRONZED(RT_SHOTGUN_CHAL_3)
|
|
BOOL bLMG = WAS_CHALLENGE_BRONZED(RT_LMG_CHAL_1) AND WAS_CHALLENGE_BRONZED(RT_LMG_CHAL_2) AND WAS_CHALLENGE_BRONZED(RT_LMG_CHAL_3)
|
|
BOOL bHeavy = WAS_CHALLENGE_BRONZED(RT_MINIGUN_CHAL_1) AND WAS_CHALLENGE_BRONZED(RT_MINIGUN_CHAL_2) AND WAS_CHALLENGE_BRONZED(RT_MINIGUN_CHAL_3)
|
|
RETURN bPistol AND bSMG AND bAR AND bShotgun AND bLMG AND bHeavy
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all the range rounds have been silver medals or better
|
|
/// RETURNS:
|
|
///
|
|
FUNC BOOL ARE_ALL_RANGE_ROUNDS_SILVERED()
|
|
BOOL bPistol = WAS_CHALLENGE_SILVERED(RT_PISTOL_CHAL_1) AND WAS_CHALLENGE_SILVERED(RT_PISTOL_CHAL_2) AND WAS_CHALLENGE_SILVERED(RT_PISTOL_CHAL_3)
|
|
BOOL bSMG = WAS_CHALLENGE_SILVERED(RT_SMG_CHAL_1) AND WAS_CHALLENGE_SILVERED(RT_SMG_CHAL_2) AND WAS_CHALLENGE_SILVERED(RT_SMG_CHAL_3)
|
|
BOOL bAR = WAS_CHALLENGE_SILVERED(RT_AR_CHAL_1) AND WAS_CHALLENGE_SILVERED(RT_AR_CHAL_2) AND WAS_CHALLENGE_SILVERED(RT_AR_CHAL_3)
|
|
BOOL bShotgun = WAS_CHALLENGE_SILVERED(RT_SHOTGUN_CHAL_1) AND WAS_CHALLENGE_SILVERED(RT_SHOTGUN_CHAL_2) AND WAS_CHALLENGE_SILVERED(RT_SHOTGUN_CHAL_3)
|
|
BOOL bLMG = WAS_CHALLENGE_SILVERED(RT_LMG_CHAL_1) AND WAS_CHALLENGE_SILVERED(RT_LMG_CHAL_2) AND WAS_CHALLENGE_SILVERED(RT_LMG_CHAL_3)
|
|
BOOL bHeavy = WAS_CHALLENGE_SILVERED(RT_MINIGUN_CHAL_1) AND WAS_CHALLENGE_SILVERED(RT_MINIGUN_CHAL_2) AND WAS_CHALLENGE_SILVERED(RT_MINIGUN_CHAL_3)
|
|
RETURN bPistol AND bSMG AND bAR AND bShotgun AND bLMG AND bHeavy
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all the range rounds have been passed
|
|
/// RETURNS:
|
|
///
|
|
FUNC BOOL ARE_ALL_RANGE_ROUNDS_GOLDED()
|
|
BOOL bPistol = WAS_CHALLENGE_GOLDED(RT_PISTOL_CHAL_1) AND WAS_CHALLENGE_GOLDED(RT_PISTOL_CHAL_2) AND WAS_CHALLENGE_GOLDED(RT_PISTOL_CHAL_3)
|
|
BOOL bSMG = WAS_CHALLENGE_GOLDED(RT_SMG_CHAL_1) AND WAS_CHALLENGE_GOLDED(RT_SMG_CHAL_2) AND WAS_CHALLENGE_GOLDED(RT_SMG_CHAL_3)
|
|
BOOL bAR = WAS_CHALLENGE_GOLDED(RT_AR_CHAL_1) AND WAS_CHALLENGE_GOLDED(RT_AR_CHAL_2) AND WAS_CHALLENGE_GOLDED(RT_AR_CHAL_3)
|
|
BOOL bShotgun = WAS_CHALLENGE_GOLDED(RT_SHOTGUN_CHAL_1) AND WAS_CHALLENGE_GOLDED(RT_SHOTGUN_CHAL_2) AND WAS_CHALLENGE_GOLDED(RT_SHOTGUN_CHAL_3)
|
|
BOOL bLMG = WAS_CHALLENGE_GOLDED(RT_LMG_CHAL_1) AND WAS_CHALLENGE_GOLDED(RT_LMG_CHAL_2) AND WAS_CHALLENGE_GOLDED(RT_LMG_CHAL_3)
|
|
BOOL bHeavy = WAS_CHALLENGE_GOLDED(RT_MINIGUN_CHAL_1) AND WAS_CHALLENGE_GOLDED(RT_MINIGUN_CHAL_2) AND WAS_CHALLENGE_GOLDED(RT_MINIGUN_CHAL_3)
|
|
RETURN bPistol AND bSMG AND bAR AND bShotgun AND bLMG AND bHeavy
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Set all range rounds to a specific medal
|
|
/// RETURNS:
|
|
///
|
|
PROC SET_ALL_RANGE_ROUNDS_MEDAL(RANGE_ROUND_MEDAL newMedal)
|
|
SET_ROUND_MEDAL(RT_PISTOL_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_PISTOL_CHAL_2, newMedal)
|
|
SET_ROUND_MEDAL(RT_PISTOL_CHAL_3, newMedal)
|
|
SET_ROUND_MEDAL(RT_SMG_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_SMG_CHAL_2, newMedal)
|
|
SET_ROUND_MEDAL(RT_SMG_CHAL_3, newMedal)
|
|
SET_ROUND_MEDAL(RT_AR_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_AR_CHAL_2, newMedal)
|
|
SET_ROUND_MEDAL(RT_AR_CHAL_3, newMedal)
|
|
SET_ROUND_MEDAL(RT_SHOTGUN_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_SHOTGUN_CHAL_2, newMedal)
|
|
SET_ROUND_MEDAL(RT_SHOTGUN_CHAL_3, newMedal)
|
|
SET_ROUND_MEDAL(RT_LMG_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_LMG_CHAL_2, newMedal)
|
|
SET_ROUND_MEDAL(RT_LMG_CHAL_3, newMedal)
|
|
SET_ROUND_MEDAL(RT_MINIGUN_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_MINIGUN_CHAL_2, newMedal)
|
|
SET_ROUND_MEDAL(RT_MINIGUN_CHAL_3, newMedal)
|
|
//NG Current gen owners only
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_2, newMedal)
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_3, newMedal)
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_4, newMedal)
|
|
ENDPROC
|
|
|
|
PROC SET_ALL_RANGE_ROUNDS_SPECIFIC()
|
|
// SET_ROUND_MEDAL(RT_PISTOL_CHAL_1, newMedal)
|
|
SET_ROUND_MEDAL(RT_PISTOL_CHAL_2, RRM_SILVER)
|
|
SET_ROUND_MEDAL(RT_PISTOL_CHAL_3, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_SMG_CHAL_1, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_SMG_CHAL_2, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_SMG_CHAL_3, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_AR_CHAL_1, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_AR_CHAL_2, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_AR_CHAL_3, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_SHOTGUN_CHAL_1, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_SHOTGUN_CHAL_2, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_SHOTGUN_CHAL_3, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_LMG_CHAL_1, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_LMG_CHAL_2, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_LMG_CHAL_3, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_MINIGUN_CHAL_1, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_MINIGUN_CHAL_2, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_MINIGUN_CHAL_3, RRM_GOLD)
|
|
//NG Current gen owners only
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_1, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_2, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_3, RRM_GOLD)
|
|
SET_ROUND_MEDAL(RT_RAILGUN_CHAL_4, RRM_GOLD)
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Sets all range rounds to bronze
|
|
/// RETURNS:
|
|
///
|
|
PROC SET_ALL_RANGE_ROUNDS_BRONZED()
|
|
SET_ALL_RANGE_ROUNDS_MEDAL(RRM_BRONZE)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets all range rounds to silver
|
|
/// RETURNS:
|
|
///
|
|
PROC SET_ALL_RANGE_ROUNDS_SILVERED()
|
|
SET_ALL_RANGE_ROUNDS_MEDAL(RRM_SILVER)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets all range rounds to gold
|
|
/// RETURNS:
|
|
///
|
|
PROC SET_ALL_RANGE_ROUNDS_GOLDED()
|
|
SET_ALL_RANGE_ROUNDS_MEDAL(RRM_GOLD)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Quick wrapper to let us know if the player passed or not.
|
|
/// If his score is higher then the goal score, then he has
|
|
/// RETURNS:
|
|
/// TRUE if the players score is higher then the goal score
|
|
FUNC BOOL IS_ROUND_CLEARED(Range_RoundInfo & sCurRoundInfo, Range_Challenge & sRoundChallenge)
|
|
RETURN (sCurRoundInfo.sScoreData.iP1Score >= sRoundChallenge.iBronzeReq)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if we passed this round, and if we need to unlock the next round
|
|
PROC CHECK_UNLOCK_NEXT_ROUND(Range_RoundInfo & sCurRoundInfo, Range_Challenge & sRoundChallenge)
|
|
// Did we clear the round
|
|
IF IS_ROUND_CLEARED(sCurRoundInfo, sRoundChallenge)
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "CheckUnlockNextRound -- Round passed.")
|
|
SET_ROUND_PASSED(sCurRoundInfo.eRoundType)
|
|
|
|
CDEBUG2LN(DEBUG_SHOOTRANGE, "m_RoundChoice is: ", ENUM_TO_INT(sCurRoundInfo.eRoundType))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks to see if the challenge requirement for this round is met. (IsChallengeReqMet)
|
|
/// RETURNS:
|
|
/// TRUE if it is.
|
|
FUNC BOOL IS_ROUND_CHALLENGE_REQ_MET(RANGE_ROUND_TYPE eUnlockReq, BOOL bIgnoreUnlockReq = FALSE)
|
|
IF (eUnlockReq = RT_INVALID) AND NOT bIgnoreUnlockReq
|
|
RETURN TRUE
|
|
|
|
ELIF IS_ROUND_PASSED(eUnlockReq)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns the high score for a certain round
|
|
/// PARAMS:
|
|
/// roundType - Which round we want to get our high score
|
|
/// RETURNS:
|
|
/// Returns the INT value of the high score for the passed in round
|
|
FUNC INT GET_ROUND_HIGH_SCORE(RANGE_ROUND_TYPE roundType)
|
|
RETURN GET_RANGE_SP_HIGH_SCORE(ePlayerChar, roundType)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns the high score for a certain round
|
|
/// PARAMS:
|
|
/// roundType - Which round we want to get our high score
|
|
/// RETURNS:
|
|
/// Returns the INT value of the high score for the passed in round
|
|
FUNC INT GET_ROUND_LAST_SCORE(RANGE_ROUND_TYPE roundType)
|
|
RETURN g_savedGlobals.sRangeData[ePlayerChar].sRounds[roundType].iLastScore
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Given a challenge, returns the medal requirement.
|
|
/// RETURNS:
|
|
/// Score value needed for the medal.
|
|
FUNC INT GET_MEDAL_SCORE_REQUIREMENT(Range_Challenge & sTheChallenge, RANGE_ROUND_MEDAL eForMedal)
|
|
IF (eForMedal = RRM_GOLD)
|
|
RETURN sTheChallenge.iGoldReq
|
|
ELIF (eForMedal = RRM_SILVER)
|
|
RETURN sTheChallenge.iSilverReq
|
|
ENDIF
|
|
|
|
RETURN sTheChallenge.iBronzeReq
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Given a score, returns the medal earned with that score.
|
|
FUNC RANGE_ROUND_MEDAL GET_MEDAL_FOR_SCORE(Range_Challenge & sTheChallenge, INT iScore)
|
|
IF (iScore >= sTheChallenge.iGoldReq)
|
|
RETURN RRM_GOLD
|
|
ELIF (iScore >= sTheChallenge.iSilverReq)
|
|
RETURN RRM_SILVER
|
|
ELIF (iScore >= sTheChallenge.iBronzeReq)
|
|
RETURN RRM_BRONZE
|
|
ENDIF
|
|
|
|
RETURN RRM_NONE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets a flag for the given round.
|
|
PROC SET_ROUND_FLAG(Range_RoundInfo & sCurRoundInfo, ROUND_INFO_FLAGS eFlagToSet)
|
|
sCurRoundInfo.iRoundFlags |= ENUM_TO_INT(eFlagToSet)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Clears a flag in the given round's data.
|
|
PROC CLEAR_ROUND_FLAG(Range_RoundInfo & sCurRoundInfo, ROUND_INFO_FLAGS eFlagToClear)
|
|
CLEAR_BITMASK_AS_ENUM(sCurRoundInfo.iRoundFlags, eFlagToClear)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks to see if a flag is set for the given round.
|
|
FUNC BOOL IS_ROUND_FLAG_SET(Range_RoundInfo & sCurRoundInfo, ROUND_INFO_FLAGS eFlagToChk)
|
|
RETURN (sCurRoundInfo.iRoundFlags & ENUM_TO_INT(eFlagToChk)) <> 0
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Finds the medal requirement for a round. Takes in a round and medal.
|
|
/// PARAMS:
|
|
/// eRoundType - The round type you're inquiring about
|
|
/// eMedal - The Medal you're checking the requirement for
|
|
/// RETURNS:
|
|
/// The medal requirement of eMedal. -1 if it fails to find an entry.
|
|
FUNC INT RANGE_GET_MEDAL_REQUIREMENT_OFF_ROUND_TYPE(RANGE_ROUND_TYPE eRoundType, RANGE_ROUND_MEDAL eMedal)
|
|
|
|
CDEBUG3LN(DEBUG_SHOOTRANGE, "RANGE_GET_MEDAL_REQUIREMENT_OFF_ROUND_TYPE called with ", GET_STRING_FROM_RANGE_ROUND_TYPE(eRoundType), " and ", GET_STRING_FROM_RANGE_ROUND_MEDAL(eMedal) )
|
|
|
|
SWITCH eRoundType
|
|
CASE RT_PISTOL_CHAL_1
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 1400
|
|
CASE RRM_SILVER RETURN 2000
|
|
CASE RRM_GOLD RETURN 2800
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_PISTOL_CHAL_2
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 2000
|
|
CASE RRM_SILVER RETURN 10000
|
|
CASE RRM_GOLD RETURN 20000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_PISTOL_CHAL_3
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 650
|
|
CASE RRM_SILVER RETURN 3000
|
|
CASE RRM_GOLD RETURN 15000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_SMG_CHAL_1
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 4000
|
|
CASE RRM_SILVER RETURN 6000
|
|
CASE RRM_GOLD RETURN 12000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_SMG_CHAL_2
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 1250
|
|
CASE RRM_SILVER RETURN 2500
|
|
CASE RRM_GOLD RETURN 7500
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_SMG_CHAL_3
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 3000
|
|
CASE RRM_SILVER RETURN 5000
|
|
CASE RRM_GOLD RETURN 10000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_SHOTGUN_CHAL_1
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 22
|
|
CASE RRM_SILVER RETURN 32
|
|
CASE RRM_GOLD RETURN 46
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_SHOTGUN_CHAL_2
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 290
|
|
CASE RRM_SILVER RETURN 590
|
|
CASE RRM_GOLD RETURN 700
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_SHOTGUN_CHAL_3
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 14
|
|
CASE RRM_SILVER RETURN 18
|
|
CASE RRM_GOLD RETURN 23
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_AR_CHAL_1
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 2500
|
|
CASE RRM_SILVER RETURN 3550
|
|
CASE RRM_GOLD RETURN 7550
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_AR_CHAL_2
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 4750
|
|
CASE RRM_SILVER RETURN 7500
|
|
CASE RRM_GOLD RETURN 17500
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_AR_CHAL_3
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 1000
|
|
CASE RRM_SILVER RETURN 3000
|
|
CASE RRM_GOLD RETURN 5000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_LMG_CHAL_1
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 4500
|
|
CASE RRM_SILVER RETURN 5500
|
|
CASE RRM_GOLD RETURN 7500
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_LMG_CHAL_2
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 5500
|
|
CASE RRM_SILVER RETURN 12000
|
|
CASE RRM_GOLD RETURN 40000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_LMG_CHAL_3
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 7500
|
|
CASE RRM_SILVER RETURN 19000
|
|
CASE RRM_GOLD RETURN 32000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_MINIGUN_CHAL_1
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 10000
|
|
CASE RRM_SILVER RETURN 25000
|
|
CASE RRM_GOLD RETURN 50000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_MINIGUN_CHAL_2
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 15000
|
|
CASE RRM_SILVER RETURN 30000
|
|
CASE RRM_GOLD RETURN 45000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_MINIGUN_CHAL_3
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 20000
|
|
CASE RRM_SILVER RETURN 40000
|
|
CASE RRM_GOLD RETURN 70000
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_RAILGUN_CHAL_1
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 20
|
|
CASE RRM_SILVER RETURN 22
|
|
CASE RRM_GOLD RETURN 24
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_RAILGUN_CHAL_2
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 16
|
|
CASE RRM_SILVER RETURN 20
|
|
CASE RRM_GOLD RETURN 24
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_RAILGUN_CHAL_3
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 20
|
|
CASE RRM_SILVER RETURN 26
|
|
CASE RRM_GOLD RETURN 32
|
|
ENDSWITCH
|
|
BREAK
|
|
CASE RT_RAILGUN_CHAL_4
|
|
SWITCH eMedal
|
|
CASE RRM_BRONZE RETURN 26
|
|
CASE RRM_SILVER RETURN 31
|
|
CASE RRM_GOLD RETURN 35
|
|
ENDSWITCH
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
CASSERTLN(DEBUG_SHOOTRANGE, "RANGE_GET_MEDAL_REQUIREMENT_OFF_ROUND_TYPE no case created! eRoundType=", GET_STRING_FROM_RANGE_ROUND_TYPE(eRoundType), " and eMedal=", GET_STRING_FROM_RANGE_ROUND_MEDAL(eMedal) )
|
|
|
|
RETURN -1
|
|
|
|
ENDFUNC
|
|
|
|
|