|
|
@ -11,7 +11,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
extern int UpdateRects_nr;
|
|
|
|
extern int UpdateRects_nr;
|
|
|
|
|
|
|
|
|
|
|
|
static Uint32 timediff;
|
|
|
|
static Uint32 timediff,
|
|
|
|
|
|
|
|
timediff1;
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
game_draw_info ()
|
|
|
|
game_draw_info ()
|
|
|
@ -21,37 +22,42 @@ game_draw_info ()
|
|
|
|
j;
|
|
|
|
j;
|
|
|
|
char text[255];
|
|
|
|
char text[255];
|
|
|
|
char scrtext[255];
|
|
|
|
char scrtext[255];
|
|
|
|
SDL_Rect src, dest;
|
|
|
|
SDL_Rect src,
|
|
|
|
|
|
|
|
dest;
|
|
|
|
redraw_logo (0, 0, gfx.res.x, 3*16);
|
|
|
|
|
|
|
|
if (bman.updatestatusbar) {gfx_AddUpdateRect (0,0, gfx.res.x, 3*16);bman.updatestatusbar=0;}
|
|
|
|
redraw_logo (0, 0, gfx.res.x, 3 * 16);
|
|
|
|
|
|
|
|
if (bman.updatestatusbar) {
|
|
|
|
|
|
|
|
gfx_AddUpdateRect (0, 0, gfx.res.x, 3 * 16);
|
|
|
|
|
|
|
|
bman.updatestatusbar = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
bman.players_nr = 0;
|
|
|
|
bman.players_nr = 0;
|
|
|
|
|
|
|
|
|
|
|
|
/* draw Player names */
|
|
|
|
|
|
|
|
if (GT_MP_PTP) {
|
|
|
|
if (GT_MP_PTP) {
|
|
|
|
|
|
|
|
/* 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++)
|
|
|
|
for (x = 0, j = 0, i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
if ((bman.players[i].state & PSFM_used) != 0) {
|
|
|
|
if ((bman.players[i].state & PSFM_used) != 0) {
|
|
|
|
|
|
|
|
|
|
|
|
if (bman.players[i].gfx_nr != -1 && PS_IS_used (bman.players[i].state)) {
|
|
|
|
if (bman.players[i].gfx_nr != -1 && PS_IS_used (bman.players[i].state)) {
|
|
|
|
src.x = 3 * bman.players[i].gfx->smal_size.x;
|
|
|
|
src.x = 3 * bman.players[i].gfx->smal_size.x;
|
|
|
|
src.y = 0;
|
|
|
|
src.y = 0;
|
|
|
|
src.w = dest.w = bman.players[i].gfx->smal_size.x;
|
|
|
|
src.w = dest.w = bman.players[i].gfx->smal_size.x;
|
|
|
|
src.h = dest.h = bman.players[i].gfx->smal_size.y;
|
|
|
|
src.h = dest.h = bman.players[i].gfx->smal_size.y;
|
|
|
|
|
|
|
|
|
|
|
|
dest.x = x;
|
|
|
|
dest.x = x;
|
|
|
|
dest.y = j - 4;
|
|
|
|
dest.y = j - 4;
|
|
|
|
|
|
|
|
|
|
|
|
SDL_BlitSurface (bman.players[i].gfx->smal_image, &src, gfx.screen, &dest);
|
|
|
|
SDL_BlitSurface (bman.players[i].gfx->smal_image, &src, gfx.screen, &dest);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sprintf (scrtext, "%10s:%2d", bman.players[i].name, bman.players[i].points);
|
|
|
|
sprintf (scrtext, "%10s:%2d", bman.players[i].name, bman.players[i].points);
|
|
|
|
if ((bman.players[i].state & PSFM_alife) != PSFM_alife) { // Player is dead
|
|
|
|
if ((bman.players[i].state & PSFM_alife) != PSFM_alife) { // Player is dead
|
|
|
|
draw_text (x, j, scrtext, 0);
|
|
|
|
draw_text (x, j, scrtext, 0);
|
|
|
|
if ((bman.players[i].state & PSF_used) != PSF_used)
|
|
|
|
if ((bman.players[i].state & PSF_used) != PSF_used)
|
|
|
|
draw_text (x, j, "-------------", 1);
|
|
|
|
draw_text (x, j, "-------------", 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else { // players is alife
|
|
|
|
else { // players is alife
|
|
|
|
draw_text (x, j, scrtext, 1);
|
|
|
|
draw_text (x, j, scrtext, 1);
|
|
|
|
bman.players_nr++;
|
|
|
|
bman.players_nr++;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -63,6 +69,12 @@ game_draw_info ()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
/* in single mode count the player's who are still alife */
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
|
|
|
|
if (PS_IS_alife (bman.players[i].state))
|
|
|
|
|
|
|
|
bman.players_nr++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x = gfx.res.x - 120;
|
|
|
|
x = gfx.res.x - 120;
|
|
|
|
sprintf (text, "Bombs: %2d", bman.players[bman.p_nr].bombs_n);
|
|
|
|
sprintf (text, "Bombs: %2d", bman.players[bman.p_nr].bombs_n);
|
|
|
@ -76,31 +88,30 @@ game_draw_info ()
|
|
|
|
draw_text (100, 32, "Press F4 to start the game", 1);
|
|
|
|
draw_text (100, 32, "Press F4 to start the game", 1);
|
|
|
|
else if (bman.state == GS_ready)
|
|
|
|
else if (bman.state == GS_ready)
|
|
|
|
draw_text (100, 32, "Waiting for the Server to Start", 1);
|
|
|
|
draw_text (100, 32, "Waiting for the Server to Start", 1);
|
|
|
|
// gfx_AddUpdateRect (100, 32, gfx.res.x - 100, 16);
|
|
|
|
|
|
|
|
|
|
|
|
redraw_logo (0, gfx.res.y - gfx.font.size.y, gfx.res.x, gfx.res.y);
|
|
|
|
redraw_logo (0, gfx.res.y - gfx.font.size.y, gfx.res.x, gfx.res.y);
|
|
|
|
|
|
|
|
|
|
|
|
if (debug) { /* do some debug informations on the screen */
|
|
|
|
if (debug) { /* do some debug informations on the screen */
|
|
|
|
for (x = 0; x < bman.fieldsize.x; x++)
|
|
|
|
for (x = 0; x < bman.fieldsize.x; x++)
|
|
|
|
draw_stone (x, bman.fieldsize.y - 1);
|
|
|
|
draw_stone (x, bman.fieldsize.y-1);
|
|
|
|
if (GT_MP_PTP) {
|
|
|
|
if (GT_MP_PTP) {
|
|
|
|
sprintf (text, "NET_STAT: [");
|
|
|
|
sprintf (text, "NET_STAT: [");
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
for (i = 0 ; i < MAX_PLAYERS; i++)
|
|
|
|
sprintf (text, "%s%3d ", text, bman.players[i].net.pkgopt.send_set);
|
|
|
|
sprintf (text, "%s%3d ", text, bman.players[i].net.pkgopt.send_set);
|
|
|
|
text[strlen (text) + 1] = 0;
|
|
|
|
text[strlen(text)+1] = 0;
|
|
|
|
text[strlen (text)] = ']';
|
|
|
|
text[strlen(text)] = ']';
|
|
|
|
draw_text (0, gfx.res.y - (gfx.font.size.y << 1), text, 1);
|
|
|
|
draw_text (0, gfx.res.y - (gfx.font.size.y << 1), text, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sprintf (text, "TILESET: %s Tframe: %d Tloop: %d", gfx.tileset, timediff, timediff1);
|
|
|
|
sprintf (text, "TILESET: %s Timediff: %d", gfx.tileset, timediff);
|
|
|
|
sprintf (text, "%s GFX_RECTS:%d", text, UpdateRects_nr);
|
|
|
|
sprintf (text, "%s GFX_RECTS:%d", text, UpdateRects_nr);
|
|
|
|
draw_text (0, gfx.res.y - gfx.font.size.y, text, 1);
|
|
|
|
draw_text (0, gfx.res.y - gfx.font.size.y, text, 1);
|
|
|
|
gfx_AddUpdateRect (0, gfx.res.y - (gfx.font.size.y << 1), gfx.res.x, gfx.font.size.y << 1);
|
|
|
|
gfx_AddUpdateRect (0, gfx.res.y - (gfx.font.size.y << 1), gfx.res.x, gfx.font.size.y << 1);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (chat.visible == 0 && GT_MP_PTP) {
|
|
|
|
if (chat.visible == 0 && GT_MP_PTP) {
|
|
|
|
chat_show (4, 3 * 16, gfx.res.x - 4, gfx.offset.y);
|
|
|
|
chat_show (4, 3*16, gfx.res.x - 4, gfx.offset.y);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -111,8 +122,7 @@ game_loop ()
|
|
|
|
Uint8 *keys;
|
|
|
|
Uint8 *keys;
|
|
|
|
int done = 0;
|
|
|
|
int done = 0;
|
|
|
|
Uint32 timeloop1;
|
|
|
|
Uint32 timeloop1;
|
|
|
|
int move=0;
|
|
|
|
int gameovertimeout = TIME_FACTOR * 5; // gameovertimeout
|
|
|
|
int gameovertimeout = TIME_FACTOR * 5; // gameovertimeout
|
|
|
|
|
|
|
|
unsigned char key_bomb = 0; // last state of the bomb key
|
|
|
|
unsigned char key_bomb = 0; // last state of the bomb key
|
|
|
|
|
|
|
|
|
|
|
|
draw_logo ();
|
|
|
|
draw_logo ();
|
|
|
@ -125,7 +135,8 @@ game_loop ()
|
|
|
|
timestamp = SDL_GetTicks (); // needed for time sync.
|
|
|
|
timestamp = SDL_GetTicks (); // needed for time sync.
|
|
|
|
|
|
|
|
|
|
|
|
d_gamedetail ("GAME START");
|
|
|
|
d_gamedetail ("GAME START");
|
|
|
|
draw_players();
|
|
|
|
draw_players ();
|
|
|
|
|
|
|
|
|
|
|
|
while (!done && (bman.state == GS_running || bman.state == GS_ready)) {
|
|
|
|
while (!done && (bman.state == GS_running || bman.state == GS_ready)) {
|
|
|
|
if (SDL_PollEvent (&event) != 0)
|
|
|
|
if (SDL_PollEvent (&event) != 0)
|
|
|
|
switch (event.type) {
|
|
|
|
switch (event.type) {
|
|
|
@ -176,35 +187,33 @@ game_loop ()
|
|
|
|
bman.state = GS_startup;
|
|
|
|
bman.state = GS_startup;
|
|
|
|
done = 1;
|
|
|
|
done = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
move=bman.players[bman.p_nr].m;
|
|
|
|
|
|
|
|
chat_loop (&event);
|
|
|
|
chat_loop (&event);
|
|
|
|
if (move ||dead_playerani () || GT_MP_PTP) restore_players_screen ();
|
|
|
|
|
|
|
|
player_ilness_loop ();
|
|
|
|
restore_players_screen ();
|
|
|
|
|
|
|
|
dead_playerani ();
|
|
|
|
|
|
|
|
player_ilness_loop (bman.p_nr);
|
|
|
|
|
|
|
|
|
|
|
|
if ((bman.players[bman.p_nr].state & PSFM_alife) == PSFM_alife)
|
|
|
|
if ((bman.players[bman.p_nr].state & PSFM_alife) == PSFM_alife)
|
|
|
|
move_player ();
|
|
|
|
move_player ();
|
|
|
|
|
|
|
|
|
|
|
|
player_calcpos ();
|
|
|
|
player_calcpos ();
|
|
|
|
|
|
|
|
|
|
|
|
if (bman.gametype != GT_single)
|
|
|
|
if (bman.gametype != GT_single)
|
|
|
|
network_loop ();
|
|
|
|
network_loop ();
|
|
|
|
else
|
|
|
|
else
|
|
|
|
single_loop ();
|
|
|
|
single_loop ();
|
|
|
|
|
|
|
|
|
|
|
|
/* this will even set the variable "bman.player_nr"
|
|
|
|
/* this will even set the variable "bman.player_nr"
|
|
|
|
to let us know how much Players are still left */
|
|
|
|
to let us know how much Players are still left */
|
|
|
|
|
|
|
|
bomb_loop ();
|
|
|
|
if (bomb_loop () || move || GT_MP_PTP) draw_players ();
|
|
|
|
draw_players ();
|
|
|
|
move=0;
|
|
|
|
|
|
|
|
game_draw_info ();
|
|
|
|
game_draw_info ();
|
|
|
|
gfx_UpdateRects ();
|
|
|
|
gfx_UpdateRects ();
|
|
|
|
|
|
|
|
|
|
|
|
/* check if there is only one player left and the game is in multiplayer mode
|
|
|
|
/* check if there is only one player left and the game is in multiplayer mode
|
|
|
|
and if there the last dieing animation is done */
|
|
|
|
and if there the last dieing animation is done */
|
|
|
|
if ((GT_MP_PTPM) && bman.players_nr < 2)
|
|
|
|
if (bman.players_nr < 2)
|
|
|
|
gameovertimeout--;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* check if we died and we are in single mode and the animation is done */
|
|
|
|
|
|
|
|
if (bman.gametype == GT_single && !PS_IS_alife(bman.players[bman.p_nr].state))
|
|
|
|
|
|
|
|
gameovertimeout--;
|
|
|
|
gameovertimeout--;
|
|
|
|
|
|
|
|
|
|
|
|
if (gameovertimeout <= 0) {
|
|
|
|
if (gameovertimeout <= 0) {
|
|
|
@ -214,18 +223,19 @@ game_loop ()
|
|
|
|
|
|
|
|
|
|
|
|
// calculate time sync.
|
|
|
|
// calculate time sync.
|
|
|
|
timeloop1 = SDL_GetTicks ();
|
|
|
|
timeloop1 = SDL_GetTicks ();
|
|
|
|
timediff = timeloop1 - timestamp; // only for debugging needed
|
|
|
|
timediff = timeloop1 - timestamp; // only for debugging needed
|
|
|
|
|
|
|
|
|
|
|
|
while (timeloop1 - timestamp >= 0 && timeloop1 - timestamp < 20) {
|
|
|
|
while (timeloop1 - timestamp >= 0 && timeloop1 - timestamp < 20) {
|
|
|
|
s_delay (20 - (timeloop1 - timestamp) - 1);
|
|
|
|
s_delay (20 - (timeloop1 - timestamp) - 1);
|
|
|
|
timeloop1 = SDL_GetTicks ();
|
|
|
|
timeloop1 = SDL_GetTicks ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timediff1 = timeloop1 - timestamp;
|
|
|
|
timestamp = timeloop1;
|
|
|
|
timestamp = timeloop1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
chat_show (-1, -1, -1, -1);
|
|
|
|
chat_show (-1, -1, -1, -1);
|
|
|
|
|
|
|
|
|
|
|
|
d_gamedetail ("GAME END");
|
|
|
|
d_gamedetail ("GAME END");
|
|
|
|
d_printf ("done = %d\n", done);
|
|
|
|
d_printf ("done = %d\n", done);
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -235,22 +245,20 @@ game_loop ()
|
|
|
|
void
|
|
|
|
void
|
|
|
|
game_end ()
|
|
|
|
game_end ()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
|
|
/* count the points */
|
|
|
|
/* count the points */
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
if (PS_IS_used (bman.players[i].state)) {
|
|
|
|
if (PS_IS_used (bman.players[i].state)) {
|
|
|
|
if (PS_IS_alife (bman.players[i].state)) {
|
|
|
|
if (PS_IS_alife (bman.players[i].state)) {
|
|
|
|
bman.lastwinner = i;
|
|
|
|
bman.lastwinner = i;
|
|
|
|
bman.players[i].wins++;
|
|
|
|
bman.players[i].wins++;
|
|
|
|
bman.players[i].points += bman.players_nr_s;
|
|
|
|
bman.players[i].points += bman.players_nr_s;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* check which player is now free ,i.e. disconnected during the game and was playing */
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
|
|
|
|
if ((bman.players[i].state & PSF_used ) == 0)
|
|
|
|
|
|
|
|
bman.players[i].state = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* check which player is now free ,i.e. disconnected during the game and was playing */
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
|
|
|
|
if ((bman.players[i].state & PSF_used) == 0)
|
|
|
|
|
|
|
|
bman.players[i].state = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|