Singleplayer works with Teammode

origin
stpohle 21 years ago
parent 7df4ebe083
commit 4992371527

@ -1,4 +1,4 @@
/* $Id: game.c,v 1.94 2004/09/26 22:06:57 stpohle Exp $
/* $Id: game.c,v 1.95 2004/09/26 22:34:02 stpohle Exp $
game.c - procedures for the game. */
#include <string.h>
@ -517,7 +517,7 @@ static void game_showresultteam () {
_team *team; // pointer to the team
_player *pl[MAX_PLAYERS]; // players in the team (sorted)
int cnt;
} tdata[MAX_TEAMS]; // hold some team informations (sorted)
} tdata[MAX_TEAMS+1]; // hold some team informations (sorted)
int t_count = 0, p_maxcount = 0, p_sumcount = 0;
int sx, sy, p_y, p_x , dx, dy, col, x;
SDL_Rect dest, src;
@ -548,23 +548,41 @@ static void game_showresultteam () {
}
/* sort all players dependsing on the number of wins they have */
for (t_nr = 0; t_nr < t_count; t_nr++) for (p_nr = 0, tdata[t_nr].cnt = 0; p_nr < MAX_PLAYERS; p_nr++)
if (tdata[t_nr].team->players[p_nr] != NULL && PS_IS_used (tdata[t_nr].team->players[p_nr]->state)) {
tdata[t_nr].pl[tdata[t_nr].cnt] = tdata[t_nr].team->players[p_nr];
i = tdata[t_nr].cnt;
for (t_nr = 0; t_nr <= t_count; t_nr++) for (p_nr = 0, tdata[t_nr].cnt = 0; p_nr < MAX_PLAYERS; p_nr++) {
if (t_nr < t_count) {
if (tdata[t_nr].team->players[p_nr] != NULL && PS_IS_used (tdata[t_nr].team->players[p_nr]->state)) {
tdata[t_nr].pl[tdata[t_nr].cnt] = tdata[t_nr].team->players[p_nr];
i = tdata[t_nr].cnt;
while (i > 0 && (tdata[t_nr].pl[i-1]->wins < tdata[t_nr].team->players[p_nr]->wins
|| (tdata[t_nr].pl[i-1]->wins == tdata[t_nr].team->players[p_nr]->wins
&& tdata[t_nr].pl[i-1]->points < tdata[t_nr].team->players[p_nr]->points))) {
tdata[t_nr].pl[i] = tdata[t_nr].pl[i-1];
i--;
tdata[t_nr].pl[i] = tdata[t_nr].team->players[p_nr];
while (i > 0 && (tdata[t_nr].pl[i-1]->wins < tdata[t_nr].team->players[p_nr]->wins
|| (tdata[t_nr].pl[i-1]->wins == tdata[t_nr].team->players[p_nr]->wins
&& tdata[t_nr].pl[i-1]->points < tdata[t_nr].team->players[p_nr]->points))) {
tdata[t_nr].pl[i] = tdata[t_nr].pl[i-1];
i--;
tdata[t_nr].pl[i] = tdata[t_nr].team->players[p_nr];
}
tdata[t_nr].cnt++;
}
}
else { /* sort all players also the ones which are not in a team */
if (players[p_nr].team_nr == -1 && PS_IS_used (players[p_nr].state)) {
tdata[t_nr].pl[tdata[t_nr].cnt] = &players[p_nr];
i = tdata[t_nr].cnt;
while (i > 0 && (tdata[t_nr].pl[i-1]->wins < players[p_nr].wins
|| (tdata[t_nr].pl[i-1]->wins == players[p_nr].wins
&& tdata[t_nr].pl[i-1]->points < players[p_nr].points))) {
tdata[t_nr].pl[i] = tdata[t_nr].pl[i-1];
i--;
tdata[t_nr].pl[i] = &players[p_nr];
}
tdata[t_nr].cnt++;
}
tdata[t_nr].cnt++;
}
}
/* check the max number of players in one team and number of all players */
for (t_nr = 0, p_maxcount = 0; t_nr < t_count; t_nr++)
for (t_nr = 0, p_maxcount = 0; t_nr <= t_count; t_nr++) /* t_count + 1 */
if (p_maxcount < tdata[t_nr].cnt) p_maxcount = tdata[t_nr].cnt;
for (p_sumcount = 0, p_nr = 0; p_nr < MAX_PLAYERS; p_nr++)
@ -575,20 +593,23 @@ static void game_showresultteam () {
do {
p_x++;
p_y = 0; // calc. again for this setting
for (t_nr = 0; t_nr < t_count; t_nr++) {
for (t_nr = 0; t_nr <= t_count; t_nr++) {
p_y += ceil ((float)(((float) tdata[t_nr].cnt) / ((float)p_x)));
}
if (p_y == 0) p_y = 1;
dy = (gfx.res.y - 100 - (SHOWRESULT_TEAMHEAD * t_count)) / p_y;
dy = (gfx.res.y - 100 - (SHOWRESULT_TEAMHEAD * (t_count + 1))) / p_y;
} while (dy < SHOWRESULT_TEAMPLAYER);
if (dy > 2*SHOWRESULT_TEAMPLAYER) dy = 2*SHOWRESULT_TEAMPLAYER;
/* draw everything */
sy = (gfx.res.y - (SHOWRESULT_TEAMHEAD * t_count + dy * p_y)) / 2;
for (t_nr = 0; t_nr < t_count; t_nr++) {
sx = (gfx.res.y - strlen (tdata[t_nr].team->name) * font[1].size.x) / 2;
sprintf (text, "%s Victorys %d (%d)", tdata[t_nr].team->name, tdata[t_nr].team->wins, tdata[t_nr].team->points);
sy = (gfx.res.y - (SHOWRESULT_TEAMHEAD * (t_count + 1) + dy * p_y)) / 2;
for (t_nr = 0; t_nr <= t_count; t_nr++) {
if (t_nr < t_count) /* normal teams */
sprintf (text, "%s Victorys %d (%d)", tdata[t_nr].team->name, tdata[t_nr].team->wins, tdata[t_nr].team->points);
else
sprintf (text, "Players without a Team");
sx = (gfx.res.y - strlen (text) * font[0].size.x) / 2;
font_drawbold (sx, sy+3, text, 0, COLOR_brown, 1);
font_draw (sx, sy+3, text, 0, COLOR_yellow);
sy += SHOWRESULT_TEAMHEAD;
@ -601,7 +622,7 @@ static void game_showresultteam () {
col = 0;
x = sx;
}
dest.x = x;
dest.y = sy;
src.w = dest.w = tdata[t_nr].pl[p_nr]->gfx->small_image->w;
@ -609,7 +630,7 @@ static void game_showresultteam () {
src.x = 0;
src.y = 0;
gfx_blit (tdata[t_nr].pl[p_nr]->gfx->small_image, &src, gfx.screen, &dest, 1);
sprintf (text, "%s(%d/%d)", tdata[t_nr].pl[p_nr]->name, tdata[t_nr].pl[p_nr]->wins, tdata[t_nr].pl[p_nr]->points);
font_draw (x + GFX_SMALLPLAYERIMGSIZE_X*2, sy + 2, text, 0, 0);
x += dx;

Loading…
Cancel
Save