void draw_logo () { SDL_Rect dest; dest.x = dest.y = 0; dest.w = gfx.res.x; dest.h = gfx.res.y; SDL_BlitSurface (gfx.logo, NULL, gfx.screen, NULL); gfx_blitupdaterectadd (&dest); };
void redraw_logo (int x, int y, int w, int h) { SDL_Rect src, dest; dest.w = src.w = w; dest.h = src.h = h; dest.x = x; dest.y = y; src.x = x; src.y = y; SDL_BlitSurface (gfx.logo, &src, gfx.screen, &dest); gfx_blitupdaterectadd (&dest); };
void game_draw_info () { int i, x, j, col; char text[255]; char scrtext[255]; SDL_Rect src, dest; if (GT_MP && (chat.oldscreen == NULL || chat.window.x != 4 || chat.window.y != 4.5 * 16)) { chat_show (4, 4.5 * 16, gfx.res.x - 8, gfx.offset.y - 4.5 * 16); chat_setactive (0, 0); } if (bman.updatestatusbar) { redraw_logo (0, 0, gfx.res.x, (4.5 * 16)); dest.x = dest.y = 0; dest.h = 4.5 * 16; dest.w = gfx.res.x; gfx_blitupdaterectadd (&dest); /* In Multiplayer mode draw Player names and count the players who are still alife. */ for (x = 0, j = 0, i = 0; i < MAX_PLAYERS; i++) if ((players[i].state & PSFM_used) != 0) { if (players[i].gfx_nr != -1 && PS_IS_used (players[i].state)) { src.x = 0; src.y = 0; src.w = dest.w = players[i].gfx->small_image->w; src.h = dest.h = players[i].gfx->small_image->h; dest.x = x; dest.y = j - 4; SDL_BlitSurface (players[i].gfx->small_image, &src, gfx.screen, &dest); } sprintf (scrtext, "%10s:%d %1d %1d", players[i].name, players[i].wins, players[i].points, players[i].nbrKilled); if (!PS_IS_alife (players[i].state)) { // Player is dead if ((players[i].state & PSF_used) != PSF_used) col = 4; else col = 3; } else { // player is alife if (bman.gametype == GT_team) col = teams[players[i].team_nr].col; else col = 0; } font_draw (x, j, scrtext, 0, col); x = x + 180; if (x >= gfx.res.x - (120 + 170)) { x = 0; j = j + 1.5 * font[0].size.x; } } x = gfx.res.x - 120; sprintf (text, "Bombs: %2d", players[bman.p_nr].bombs_n); font_draw (x, 0, text, 0, 0); sprintf (text, "Range: %2d", players[bman.p_nr].range); font_draw (x, 16, text, 0, 0); sprintf (text, "Speed: %1.1f", players[bman.p_nr].speed * 10); font_draw (x, 32, text, 0, 0); if (players[bman.p_nr].special.type != 0) { col = players[bman.p_nr].special.type + FT_sp_trigger - 1; dest.x = x - 32; dest.y = 16; dest.w = gfx.menu_field[col]->w; dest.h = gfx.menu_field[col]->h; SDL_BlitSurface (gfx.menu_field[col], NULL, gfx.screen, &dest); } if (bman.state == GS_ready && GT_MP_PTPM) font_gfxdraw (100, 32, "Press F4 to start the game", 0, COLOR_yellow, 0xFFFF); else if (bman.state == GS_ready) font_gfxdraw (100, 32, "Waiting for the Server to Start", 0, COLOR_yellow, 0xFFFF); } /* draw the warning part */ if (map.state != MS_normal) { hurrywarn_to -= timediff; if (bman.updatestatusbar || hurrywarn_to <= 0.0 || hurrywarn_to > HURRYWARN_TO_BLINKING) { hurrywarn_to = HURRYWARN_TO_BLINKING; hurrywarn_state = !hurrywarn_state; if (hurrywarn_state) { font_drawbold ((gfx.res.x - strlen ("HURRY HURRY") * font[1].size.x) / 2, 40, "HURRY HURRY", 1, 0, 2); font_draw ((gfx.res.x - strlen ("HURRY HURRY") * font[1].size.x) / 2, 40, "HURRY HURRY", 1, 1); } else { font_drawbold ((gfx.res.x - strlen ("HURRY HURRY") * font[1].size.x) / 2, 40, "HURRY HURRY", 1, 1, 2); font_draw ((gfx.res.x - strlen ("HURRY HURRY") * font[1].size.x) / 2, 40, "HURRY HURRY", 1, 0); } dest.x = dest.y = 0; dest.h = 4.5 * 16; dest.w = gfx.res.x; gfx_blitupdaterectadd (&dest); } } if (debug) debug_ingameinfo (); bman.updatestatusbar = 0; };
/* this is needed to draw the whole uppdate of everything */ void draw_netupdatestate (char st) { char text[255]; unsigned char b; int y = 0, b1, z, zx = 200, i, j, s = map.size.y + MAX_PLAYERS + GAME_MAX_TUNNELS; SDL_Rect src, dest; z = gfx.res.x - zx - 30 - 8; for (i = 0; i < MAX_PLAYERS; i++) if (PS_IS_used (players[i].state)) { y += 50; if (st) { redraw_logo (0, y, gfx.res.x, y + 50); if (players[i].gfx_nr != -1) { dest.w = src.w = players[i].gfx->small_image->w; dest.h = src.h = players[i].gfx->small_image->h; src.x = players[i].gfx->small_image->w * down; src.y = 0; dest.x = 50; dest.y = y; SDL_BlitSurface (players[i].gfx->small_image, &src, gfx.screen, &dest); gfx_blitupdaterectadd (&dest); } dest.x = zx; dest.y = y; dest.w = menulistimages[1][0]->w; dest.h = menulistimages[1][0]->h; gfx_blit (menulistimages[1][0], NULL, gfx.screen, &dest, 10000); dest.x = z + zx + 4; gfx_blit (menulistimages[1][2], NULL, gfx.screen, &dest, 10000); // draw the bottom left and right of the list dest.y = y + 29; gfx_blit (menulistimages[1][8], NULL, gfx.screen, &dest, 10000); dest.x = zx; gfx_blit (menulistimages[1][6], NULL, gfx.screen, &dest, 10000); //top & bottom for (j = 4; j < z + 4; j += 4) { dest.x = j + zx; dest.y = y; gfx_blit (menulistimages[1][1], NULL, gfx.screen, &dest, 10000); dest.y = y + 29; gfx_blit (menulistimages[1][7], NULL, gfx.screen, &dest, 10000); } //left &right for (j = 4; j < 29; j += 4) { dest.x = zx; dest.y = y + j; gfx_blit (menulistimages[1][3], NULL, gfx.screen, &dest, 10000); dest.x = z + zx + 4; gfx_blit (menulistimages[1][5], NULL, gfx.screen, &dest, 10000); } sprintf (text, "%s", players[i].name); font_draw (80, y, text, 0, 4); } // calc percentage, this a range from 0 to 255) switch (players[i].net.net_istep) { case 3: sprintf (text, "Getting Tunnel Data %d.", players[i].net.net_status); b = (players[i].net.net_status + 1) * 255 / s; break; case 2: sprintf (text, "Getting Field Data %d of %d.", players[i].net.net_status, map.size.y); b = (players[i].net.net_status + 1 + GAME_MAX_TUNNELS) * 255 / s; break; case 1: sprintf (text, "Getting Player Data %d of %d.", players[i].net.net_status, MAX_PLAYERS); b = (players[i].net.net_status + 1 + GAME_MAX_TUNNELS + map.size.y) * 255 / s; break; default: sprintf (text, "Ready"); b = 255; break; } //draw bar if (b > 0) { b1 = b * z / 255; dest.x = zx + 4; dest.y = y + 4; dest.w = menubuttonimages[2][0]->w; dest.h = menubuttonimages[2][0]->h; gfx_blit (menubuttonimages[2][0], NULL, gfx.screen, &dest, 10000); dest.x = zx + 4 + b1 - menubuttonimages[1][2]->w; if (dest.x < zx + 4) dest.x = zx + 4; dest.w = menubuttonimages[2][2]->w; dest.h = menubuttonimages[2][2]->h; gfx_blit (menubuttonimages[2][2], NULL, gfx.screen, &dest, 10000); if (b1 > menubuttonimages[2][0]->w + menubuttonimages[2][2]->w) { dest.w = menubuttonimages[2][1]->w; dest.h = menubuttonimages[2][1]->h; for (j = menubuttonimages[2][0]->w; j < b1 - menubuttonimages[2][2]->w; j += menubuttonimages[2][1]->w) { dest.x = j + zx + 4; gfx_blit (menubuttonimages[2][1], NULL, gfx.screen, &dest, 10000); } } } // draw old status in case of debug if (!players[i].net.net_istep) font_draw (80, y + 20, text, 0, 4); else if (debug) { redraw_logo (80, y + 35, gfx.res.x - 80, 15); font_draw (80, y + 35, text, 0, 4); } } gfx_blitdraw (); return; }