break;
}
}
-
+
if (i == Map_Count)
{
bprint( "Maplist contains no usable maps! Resetting it to default map list.\n" );
cvar_set("g_maplist", shufflewords(autocvar_g_maplist));
}
-float leaderfrags;
+float leaderscore;
+float secondscore;
+int fragsleftlast;
float WinningCondition_Scores(float limit, float leadlimit)
{
float limitreached;
if(MUTATOR_CALLHOOK(Scores_CountFragsRemaining))
// these modes always score in increments of 1, thus this makes sense
{
- if(leaderfrags != WinningConditionHelper_topscore)
+ if (leaderscore != WinningConditionHelper_topscore ||
+ secondscore != WinningConditionHelper_secondscore)
{
- leaderfrags = WinningConditionHelper_topscore;
+ int fragsleft = 0;
+
+ leaderscore = WinningConditionHelper_topscore;
+ secondscore = WinningConditionHelper_secondscore;
if (limit)
{
- if (leaderfrags == limit - 1)
+ if (leaderscore == limit - 1)
+ fragsleft |= BIT(1);
+ else if (leaderscore == limit - 2)
+ fragsleft |= BIT(2);
+ else if (leaderscore == limit - 3)
+ fragsleft |= BIT(3);
+ }
+ if (leadlimit)
+ {
+ if (leaderscore == leadlimit + secondscore - 1)
+ fragsleft |= BIT(1);
+ else if (leaderscore == leadlimit + secondscore - 2)
+ fragsleft |= BIT(2);
+ else if (leaderscore == leadlimit + secondscore - 3)
+ fragsleft |= BIT(3);
+ }
+
+ fragsleft = fragsleft & -fragsleft; // lowest significant bit
+
+ if (fragsleftlast != fragsleft) // do not announce same remaining frags multiple times
+ {
+ if (fragsleft & BIT(1))
Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_1);
- else if (leaderfrags == limit - 2)
+ else if (fragsleft & BIT(2))
Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_2);
- else if (leaderfrags == limit - 3)
+ else if (fragsleft & BIT(3))
Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_REMAINING_FRAG_3);
+
+ fragsleftlast = fragsleft;
}
}
}