diff --git a/src/game.c b/src/game.c index 1f93849..c58f0b1 100644 --- a/src/game.c +++ b/src/game.c @@ -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 @@ -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;