diff --git a/include/basic.h b/include/basic.h index ae33167..0680472 100644 --- a/include/basic.h +++ b/include/basic.h @@ -1,4 +1,4 @@ -/* $Id: basic.h,v 1.5 2003/11/05 12:15:25 stpohle Exp $ */ +/* $Id: basic.h,v 1.6 2003/11/08 06:27:58 stpohle Exp $ */ /* basic types which we need everywhere */ #ifndef _BC_BASIC_H_ @@ -46,16 +46,18 @@ #define MAX_FIELDANIMATION 2048 /* number of points on the field to be animated exploding stoned or powerups*/ -#define EXPLOSIONTIMEOUT 20 +#define EXPLOSIONTIMEOUT 0.75 #define ANI_FIRETIMEOUT 2 #define ANI_BOMBTIMEOUT 1 #define ANI_PLAYERTIMEOUT 1 #define ANI_PLAYERILLTIMEOUT 1 #define ANI_STONETIMEOUT 5 -#define TIME_FACTOR 50 +// #define TIME_FACTOR 50 #define BOMB_TIMEOUT 5 -#define IL_TIMEOUT 20 +#define ILL_TIMEOUT 20 +#define ILL_SLOWSPEED 0.01 +#define ILL_FASTSPEED 0.5 #define LEN_PLAYERNAME 10 #define LEN_SERVERNAME 41 @@ -76,8 +78,8 @@ #define MENU_BG_SHADE_DARK -64 #define MENU_BG_SHADE_BRIGHT 64 -#define MW_IS_GFX_SELECT(__gfx_nr,__result) for (__result = (MAX_PLAYERS-1); (bman.players[__result].gfx_nr != __gfx_nr) && (__result >= 0); __result--); - +#define MW_IS_GFX_SELECT(__gfx_nr,__result) for (__result = (MAX_PLAYERS-1); (players[__result].gfx_nr != __gfx_nr) && (__result >= 0); __result--); + #define CUTINT(__x) (__x-floorf(__x)) // cut the integer part off #define postofield(__x) ((int)(rintf(__x))) // position to int with rounding @@ -95,18 +97,6 @@ enum _backgound { // to load some diffrent logos.. }; -enum _gametype { - GT_single = 0, - GT_multi -}; - - -enum _multitype { - MT_ptpm, // udp ptp master - MT_ptps // udp ptp client -}; - - enum _gamestate { GS_startup = 0, GS_quit, @@ -195,11 +185,11 @@ enum _bombmode { }; -enum _playerstateflags { +enum _playerstateflags { // not Set | Set PSF_used = 1, // Player Unused | Player Used PSF_net = 2, // Local Player | AI / Network Player - PSF_alife = 4, // Player is Dead | Player is Alife - PSF_playing = 8, // Watching Player | Playing Player -- as long as one don't delete + PSF_alife = 4, // Player is Dead | Player is Alife + PSF_playing = 8, // Watching Player| Playing Player -- as long as one don't delete }; #define PSFM_used (PSF_used + PSF_playing) @@ -210,6 +200,7 @@ enum _playerstateflags { #define PS_IS_playing(__ps) (((__ps) & (PSFM_used)) == (PSFM_used)) #define PS_IS_used(__ps) (((__ps) & (PSFM_used)) != 0) + enum _direction { // to handle directions better left = 0, right, diff --git a/include/bomberclone.h b/include/bomberclone.h index 12deab8..c2637c6 100644 --- a/include/bomberclone.h +++ b/include/bomberclone.h @@ -1,4 +1,4 @@ -/* $Id: bomberclone.h,v 1.5 2003/11/05 12:15:25 stpohle Exp $ */ +/* $Id: bomberclone.h,v 1.6 2003/11/08 06:27:58 stpohle Exp $ */ /* bomberclone.h */ #ifndef _BOMBERCLONE_H_ @@ -49,7 +49,7 @@ #include "keybinput.h" struct { - int to; // if (to > 0) the ilness is still working + float to; // if (to > 0) the ilness is still working int data; } typedef _playerilness; @@ -59,9 +59,8 @@ struct { int firer[4]; // range of the fire for the fire for each direction int firerst[4]; /* just save here where the direction was going to stop (-1) if the exp is still growing */ - int to; // timeout in ms after dropping the bomb. (loops * 0.0005sec) - int frame; // frame of the animation - int frameto; // timeout for the frame + float to; // timeout in ms after dropping the bomb. (loops * 0.0005sec) + float frame; // frame of the animation unsigned char r; // range of the bomb unsigned char state; // state of the bomb BS_* unsigned char mode; // mode of the bomb BM_* @@ -73,25 +72,23 @@ struct { struct { int type; // type of the special - int to; // timeout + float to; // timeout int numuse; // num of uses left int use; /* currently used set by special_use and deleted in special_loop */ } typedef _special; + struct { _gfxplayer *gfx; // pointer to the gfx information int gfx_nr; // number of the player GFX - int frame; // step of the animation - int frameto; // timeout for the animation - + float frame; // step of the animation (only integer part will shown) int illframe; - int illframeto; _pointf pos; // position on the field _pointf old; // the old position - int tunnelto; /* timeout for dont show and move player + float tunnelto; /* timeout for dont show and move player needed on the tunnel effect */ signed char d; // direction @@ -126,16 +123,15 @@ struct { struct { char datapath[512]; - _player players[MAX_PLAYERS]; int p_nr; // Playernumber 0 if you host a game or the number of the one you are. - + int p_servnr; // Playernumber of the Server int last_ex_nr; // number of the last explosion int updatestatusbar; // 1 if statusbar has to be updated unsigned char gametype; unsigned char multitype; unsigned char state; int init_timeout; // gametimeout init value - int timeout; // game timeout + float timeout; // game timeout char playername[LEN_PLAYERNAME]; int players_nr_s; // number of players at the beginning int players_nr; // number of player who are alife @@ -174,8 +170,10 @@ struct { extern _bomberclone bman; +extern _player players[MAX_PLAYERS]; extern Uint32 timestamp; extern float timefactor; +extern float timediff; extern int debug; // Game routines.. @@ -258,11 +256,12 @@ extern void d_gamedetail (char *head); extern void d_printf (char *fmt,...); extern void d_bitprint (int bits, int nr); extern void d_fatal (char *fmt,...); +extern void debug_ingameinfo(); // single.c extern void single_game_new (); -extern void single_create_ai (int players); +extern void single_create_ai (int num_players); extern void single_loop(); extern void single_playergame (); extern void single_menu (); diff --git a/include/map.h b/include/map.h index 76e9e1f..55b138a 100644 --- a/include/map.h +++ b/include/map.h @@ -1,4 +1,4 @@ -/* $Id: map.h,v 1.3 2003/09/23 20:28:24 stpohle Exp $ */ +/* $Id: map.h,v 1.4 2003/11/08 06:27:58 stpohle Exp $ */ /* map.h */ #ifndef _MAP_H_ @@ -6,15 +6,14 @@ struct __ex_field { unsigned char count; - unsigned char frame; -} typedef _ex_field; + unsigned char frame; // we may have to change this.. because the frames +} typedef _ex_field; // might have all put to float. struct __field { unsigned char type; signed char mixframe; // data for the mixed frame - Sint16 frame; // frame (frame > 0 && FS_stone) - Sint32 frameto; // frame to + float frame; // frame (frame > 0 && FS_stone) unsigned char special; // to save special stones, or the tunnel number _ex_field ex[4]; // count up every explosion there is on this field for ever direction Sint32 ex_nr; // number to identify the explosion. diff --git a/include/network.h b/include/network.h index cdd85c5..506fb7a 100644 --- a/include/network.h +++ b/include/network.h @@ -18,13 +18,14 @@ network.h file... for everything what have to do with the network stuff #define DYN_PKG_MIN_MISSING 1 #define PKG_SENDSETOPT 2 -#define GT_MP_PTPM (bman.multitype == MT_ptpm && bman.gametype == GT_multi) -#define GT_MP_PTPS (bman.multitype == MT_ptps && bman.gametype == GT_multi) -#define GT_MP_PTP ((bman.multitype == MT_ptps || bman.multitype == MT_ptpm) && bman.gametype == GT_multi) +#define GT_MP_PTPM (bman.p_nr == bman.p_servnr && bman.sock >= 0) +#define GT_MP_PTPS (bman.p_nr != bman.p_servnr && bman.sock >= 0) +#define GT_MP (bman.sock >= 0) +#define GT_SP (bman.sock <= 0) #define GS_WAITRUNNING (bman.state == GS_wait || bman.state == GS_ready || bman.state == GS_running) -#define NET_CANSEND(__pl) (( __pl == 0 || GT_MP_PTPM || (bman.players[__pl].net.flags & NETF_firewall) == 0)) +#define NET_CANSEND(__pl) (( __pl == 0 || GT_MP_PTPM || (players[__pl].net.flags & NETF_firewall) == 0)) /* Little / Big Endian Convert */ #if SDL_BYTEORDER == SDL_BIG_ENDIAN @@ -42,7 +43,9 @@ network.h file... for everything what have to do with the network stuff /* converting of float to int and other direction */ #define FTOI16(__x) ((Sint16)((float)(__x * 256.0f))) +#define FTOI32(__x) ((Sint32)((float)(__x * 1024.0f))) #define I16TOF(__x) (((float)__x) / 256.0f) +#define I32TOF(__x) (((float)__x) / 1024.0f) #ifdef _WIN32 #define _sockaddr sockaddr diff --git a/include/packets.h b/include/packets.h index 2a5e223..495ed02 100644 --- a/include/packets.h +++ b/include/packets.h @@ -76,7 +76,12 @@ struct pkg_field { struct pkgheader h; unsigned char x; unsigned char y; - _field field; + unsigned char type; + signed char mixframe; // data for the mixed frame + Sint16 frame; // frame (frame > 0 && FS_stone) + unsigned char special; // to save special stones, or the tunnel number + _ex_field ex[4]; // count up every explosion there is on this field for ever direction + Sint32 ex_nr; // number to identify the explosion. }; diff --git a/src/bomb.c b/src/bomb.c index c5583e9..053b1b1 100644 --- a/src/bomb.c +++ b/src/bomb.c @@ -1,4 +1,4 @@ -/* $Id: bomb.c,v 1.47 2003/11/05 12:15:25 stpohle Exp $ */ +/* $Id: bomb.c,v 1.48 2003/11/08 06:27:58 stpohle Exp $ */ /* everything what have to do with the bombs */ #include "bomberclone.h" @@ -9,8 +9,8 @@ draw_bomb (_bomb * bomb) { SDL_Rect src, dest; - int x = bomb->pos.x, - y = bomb->pos.y; + int x = floorf (bomb->pos.x), + y = floorf (bomb->pos.y); if (x < 0 || y < 0 || x >= map.size.x || y >= map.size.y) { d_printf ("FATAL: Draw Bomb out of range [%f,%f]\n", x, y); @@ -18,16 +18,11 @@ draw_bomb (_bomb * bomb) } if (bomb->state != BS_trigger - || ((bomb->state == BS_trigger) && (bomb->to < BOMB_TIMEOUT * TIME_FACTOR))) { + || ((bomb->state == BS_trigger) && (bomb->to < BOMB_TIMEOUT))) { /* check the framenumber */ - if (bomb->frameto-- == 0) { - bomb->frameto = ANI_BOMBTIMEOUT; - bomb->frame++; - }; - if (bomb->frame < 0 || bomb->frame >= gfx.bomb.frames || bomb->frameto > ANI_BOMBTIMEOUT) { - bomb->frame = 0; - bomb->frameto = ANI_BOMBTIMEOUT; - } + bomb->frame += timefactor; + if (bomb->frame < 0 || bomb->frame >= gfx.bomb.frames) + bomb->frame = 0.0f; } dest.w = src.w = gfx.bomb.image->w; @@ -35,7 +30,7 @@ draw_bomb (_bomb * bomb) dest.x = gfx.offset.x + x * gfx.block.x; dest.y = gfx.offset.y + y * gfx.block.y; src.x = 0; - src.y = src.h * bomb->frame; + src.y = src.h * (int)bomb->frame; stonelist_add (x, y); if (bomb->mode != BM_normal) { stonelist_add (x+1, y); @@ -51,14 +46,14 @@ void bomb_explode (int p, int b, int net) { int d; - _bomb *bomb = &bman.players[p].bombs[b]; + _bomb *bomb = &players[p].bombs[b]; d_printf ("Bomb Explode p:%d, b:%d [%f,%f]\n", p, b, bomb->pos.x, bomb->pos.y); if (bomb->ex_nr == -1) bomb->ex_nr = bman.last_ex_nr++; // set bomb explosion id - bman.players[p].bomb_lastex = b; + players[p].bomb_lastex = b; bomb->to = EXPLOSIONTIMEOUT; /* set the timeout for the fireexplosion */ bomb->state = BS_exploding; @@ -150,11 +145,11 @@ bomb_move (_bomb * bomb) /* if a network game is running send bomb data with the current information */ - if (GT_MP_PTP) { + if (GT_MP) { int b = -1, i = 0; do { - if (&bman.players[bman.p_nr].bombs[i] == bomb) + if (&players[bman.p_nr].bombs[i] == bomb) b = i; i++; } while (b == -1 && i < MAX_BOMBS); @@ -182,27 +177,29 @@ bomb_loop () _bomb *bomb; for (p = 0; p < MAX_PLAYERS; p++) { - player = &bman.players[p]; - if ((bman.players[p].state & PSFM_used) != 0) { + player = &players[p]; + if ((players[p].state & PSFM_used) != 0) { for (i = 0; i < MAX_BOMBS; i++) { bomb = &player->bombs[i]; switch (bomb->state) { case BS_ticking: case BS_trigger: - if (GT_MP_PTPM || bman.gametype == GT_single) { - if (--bomb->to == 0) // bomb will have to explode in the next loop + if (GT_MP_PTPM || GT_SP) { + bomb->to -= timediff; + if (bomb->to <= 0.0f) // bomb will have to explode in the next loop bomb_explode (p, i, 1); else draw_bomb (bomb); } else { - if (--bomb->to == 0) { // bomb did not explode -> resend bombdata + bomb->to -= timediff; + if (bomb->to <= 0.0f) { // bomb did not explode -> resend bombdata if (bomb->state == BS_ticking) - bomb->to = BOMB_TIMEOUT * TIME_FACTOR; + bomb->to = BOMB_TIMEOUT; else - bomb->to = SPECIAL_TRIGGER_TIMEOUT * TIME_FACTOR; + bomb->to = SPECIAL_TRIGGER_TIMEOUT; net_game_send_bomb (bman.p_nr, i); - bomb->to = bomb->to + ((2 * RESENDCACHE_RETRY) / TIME_FACTOR); + bomb->to = bomb->to + 2 * RESENDCACHE_RETRY; } draw_bomb (bomb); } @@ -214,15 +211,15 @@ bomb_loop () break; case BS_exploding: - if (bomb->to > 0) { + if (bomb->to > 0.0f) { do_explosion (p, i); } - if (bomb->to == 0) { // explosion done + if (bomb->to <= 0.0f) { // explosion done restore_explosion (bomb); - bomb->to = 0; + bomb->to = 0.0f; bomb->state = BS_off; } - bomb->to--; + bomb->to -= timediff; b++; break; } @@ -244,9 +241,9 @@ get_bomb_on (float x, float y, _point bombs[]) _bomb *bomb; for (i = 0, p = 0; p < MAX_PLAYERS; p++) - if ((bman.players[p].state & PSFM_used) != 0) { + if ((players[p].state & PSFM_used) != 0) { for (b = 0; b < MAX_BOMBS; b++) { - bomb = &bman.players[p].bombs[b]; + bomb = &players[p].bombs[b]; if (bomb->state == BS_ticking || bomb->state == BS_trigger) { if (bomb->pos.x-1.0f < x && bomb->pos.x+1.0f > x && bomb->pos.y-1.0f < y && bomb->pos.y+1.0f > y) { bombs[i].x = p; @@ -277,7 +274,7 @@ draw_fire (int x, int y, int d, int frame) dest.x = gfx.offset.x + x * gfx.block.x; dest.y = gfx.offset.y + y * gfx.block.y; - src.y = frame * src.w; + src.y = (int)frame * src.w; src.x = d * src.w; gfx_blit (gfx.fire.image, &src, gfx.screen, &dest, (y * 100)); @@ -335,8 +332,7 @@ restore_explosion (_bomb * bomb) && bomb->ex_nr != map.field[_x][_y].ex_nr) { map.field[_x][_y].ex_nr = bomb->ex_nr; - map.field[_x][_y].frame = 0; - map.field[_x][_y].frameto = 0; + map.field[_x][_y].frame = 0.0f; if (map.field[_x][_y].special != FT_nothing) { map.field[_x][_y].type = map.field[_x][_y].special; map.field[_x][_y].special = FT_nothing; @@ -368,7 +364,7 @@ restore_explosion (_bomb * bomb) int explosion_check_field (int x, int y, int p, int b) { - _bomb *bomb = &bman.players[p].bombs[b]; + _bomb *bomb = &players[p].bombs[b]; int pl[MAX_PLAYERS]; int i; _point bo[MAX_PLAYERS * MAX_BOMBS]; @@ -383,7 +379,7 @@ explosion_check_field (int x, int y, int p, int b) // check if any bomb have to explode.. for (i = 0; bo[i].x != -1; i++) { - tmpbomb = &bman.players[bo[i].x].bombs[bo[i].y]; + tmpbomb = &players[bo[i].x].bombs[bo[i].y]; if (tmpbomb != bomb && tmpbomb->state != BS_exploding) { tmpbomb->ex_nr = bomb->ex_nr; // set the ex_nr to identify explosions bomb_explode (bo[i].x, bo[i].y, 1); @@ -392,19 +388,17 @@ explosion_check_field (int x, int y, int p, int b) // check if any player is in the explosion for (i = 0; pl[i] != -1; i++) { - tmpplayer = &bman.players[pl[i]]; + tmpplayer = &players[pl[i]]; if (((tmpplayer->state & PSF_alife) != 0) - && (bman.gametype == GT_single - || (GT_MP_PTP && (&bman.players[bman.p_nr] == tmpplayer)))) + && (GT_SP || (GT_MP && (&players[bman.p_nr] == tmpplayer)))) player_died (tmpplayer, p); } // let the stones right beside explode if (map.field[x][y].type != FT_nothing && map.field[x][y].type != FT_tunnel && map.field[x][y].type != FT_block && bomb->ex_nr != map.field[x][y].ex_nr) - if (map.field[x][y].frame == 0) { - map.field[x][y].frameto = ANI_STONETIMEOUT; - map.field[x][y].frame = 1; + if (map.field[x][y].frame <= 0.0f) { + map.field[x][y].frame = 1.0f; stonelist_add (x, y); } @@ -423,10 +417,6 @@ draw_explosion (_bomb * bomb) dy; _point p; - bomb->frameto--; - if (bomb->frameto < 0 || bomb->frameto > ANI_FIRETIMEOUT) - bomb->frameto = ANI_FIRETIMEOUT; - for (d = 0; d < 4; d++) { switch (d) { case (left): @@ -450,11 +440,9 @@ draw_explosion (_bomb * bomb) p.y = bomb->pos.y; for (r = 0; r < bomb->firer[d]; r++) { - if (bomb->frameto == 0) { - map.field[p.x][p.y].ex[d].frame++; - if (map.field[p.x][p.y].ex[d].frame >= gfx.fire.frames) - map.field[p.x][p.y].ex[d].frame = 0; - } + map.field[p.x][p.y].ex[d].frame += timefactor; + if (map.field[p.x][p.y].ex[d].frame >= gfx.fire.frames) + map.field[p.x][p.y].ex[d].frame = 0.0f; stonelist_add (p.x, p.y); draw_fire (p.x, p.y, d, -1); p.x += dx; @@ -467,7 +455,7 @@ draw_explosion (_bomb * bomb) void do_explosion (int p, int b) { - _bomb *bomb = &bman.players[p].bombs[b]; + _bomb *bomb = &players[p].bombs[b]; int dx = 0, dy = 0, d; diff --git a/src/configuration.c b/src/configuration.c index 3092984..cbc7e7f 100644 --- a/src/configuration.c +++ b/src/configuration.c @@ -22,8 +22,8 @@ game_init (int argc, char **argv) bman.serverlist[i].name[0] = 0; for (i = 0; i < MAX_PLAYERS; i++) { - bman.players[i].gfx = NULL; /* we will select them in the wait_for_players loop */ - bman.players[i].gfx_nr = -1; /* and even now in the singleplayer menu */ + players[i].gfx = NULL; /* we will select them in the wait_for_players loop */ + players[i].gfx_nr = -1; /* and even now in the singleplayer menu */ } stonelist_del (); diff --git a/src/debug.c b/src/debug.c index 87b3aff..b357a51 100644 --- a/src/debug.c +++ b/src/debug.c @@ -35,7 +35,7 @@ void d_playerdetail (char *head) { d_printf ("---------------> %s\n", head); d_printf ("Nr Name GFX Sta Pkt Win [Addr]\n"); for (i = 0; i < MAX_PLAYERS; i++) - d_printf ("%2d %16s %3d %3d %3d %3d [%s:%s]\n",i, bman.players[i].name, bman.players[i].gfx_nr, bman.players[i].state, bman.players[i].points, bman.players[i].wins, bman.players[i].net.addr.host, bman.players[i].net.addr.port); + d_printf ("%2d %16s %3d %3d %3d %3d [%s:%s]\n",i, players[i].name, players[i].gfx_nr, players[i].state, players[i].points, players[i].wins, players[i].net.addr.host, players[i].net.addr.port); }; @@ -59,3 +59,16 @@ void d_fatal (char *fmt,...) { vfprintf (stdout, fmt, args); va_end (args); } + + +void debug_ingameinfo() { + int i; + char text[255]; + + for (i = 0; i < map.size.x; i++) + stonelist_add (i, map.size.y-1); + + redraw_logo (0, gfx.res.y-font[0].size.y, gfx.res.y, gfx.res.x); + sprintf (text, "TDiff: %2.3f TFactor: %2.3f", timediff, timefactor); + font_gfxdraw (0, gfx.res.y-font[0].size.y, text, 0, (map.size.y*256)+10); +}; diff --git a/src/field.c b/src/field.c index 8009566..08c5b1a 100644 --- a/src/field.c +++ b/src/field.c @@ -1,4 +1,4 @@ -/* $Id: field.c,v 1.47 2003/11/05 12:15:25 stpohle Exp $ */ +/* $Id: field.c,v 1.48 2003/11/08 06:27:58 stpohle Exp $ */ /* field.c - procedures which are needed to control the field */ #include "bomberclone.h" @@ -64,6 +64,8 @@ _stonelist_add (int x, int y, int recursive) _stonelist_add (x, y - 1, 0); } }; + + inline void stonelist_add (int x, int y) { @@ -119,7 +121,7 @@ draw_stone (int x, int y) field_animation_add (x, y); if (stone->frame < gfx.field[FT_stone].frames) { - src.y = stone->frame * gfx.field[FT_stone].h; + src.y = (int)stone->frame * gfx.field[FT_stone].h; dest.h = src.h = gfx.field[FT_stone].h; dest.y -= (gfx.field[stone->type].h - gfx.field[stone->type].w); srcimg = gfx.field[FT_stone].image; @@ -187,8 +189,8 @@ draw_stone (int x, int y) draw_fire (x, y, d, -1); } - if (debug) - font_gfxdraw (dest.x, dest.y, (map.bfield[x][y] == 0) ? "0" : "1", 0, (y*256) - 6); +// if (debug) +// font_gfxdraw (dest.x, dest.y, (map.bfield[x][y] == 0) ? "0" : "1", 0, (y*256) + 10); return; }; @@ -222,7 +224,7 @@ void field_clear (int x, int y) { map.field[x][y].type = FT_nothing; - if (bman.gametype != GT_single) + if (GT_MP) net_game_send_field (x, y); } @@ -232,7 +234,8 @@ void field_animation () { int i, - j; + j, + oldframe; _field *stone; for (i = 0; i < MAX_FIELDANIMATION; i++) @@ -241,17 +244,11 @@ field_animation () /* check if there is a need to animate this */ stone = &map.field[fieldani[i].x][fieldani[i].y]; - if ((stone->type == FT_stone && stone->frame > 0) || (stone->type >= FT_death)) { + if ((stone->type == FT_stone && stone->frame > 0.0f) || (stone->type >= FT_death)) { /* animate this stone */ if (stone->type == FT_stone) { - if (stone->frameto == 0) - if (stone->frame < gfx.field[FT_stone].frames) { - stone->frame++; - stone->frameto = ANI_STONETIMEOUT; - } - - if (stone->frameto > 0) - stone->frameto--; + if (stone->frame < gfx.field[FT_stone].frames) + stone->frame += timefactor; } else { /* animation is a powerup */ /* select right powerup animation */ @@ -263,14 +260,12 @@ field_animation () j = PWUP_good; /* do the animation of the FT_mixed */ - if (stone->frameto-- <= 0 || stone->frameto > ANI_STONETIMEOUT) { - stone->frameto = ANI_STONETIMEOUT; - stone->frame++; - if (stone->type == FT_mixed) { - stone->mixframe++; - if (stone->mixframe < FT_death || stone->mixframe >= FT_mixed) - stone->mixframe = FT_death; - } + oldframe = (int)stone->frame; + stone->frame += timefactor; + if ((int)stone->frame != oldframe && stone->type == FT_mixed) { + stone->mixframe++; + if (stone->mixframe < FT_death || stone->mixframe >= FT_mixed) + stone->mixframe = FT_death; } if (stone->frame >= gfx.powerup[j].frames) @@ -338,7 +333,7 @@ void field_loop () { /* single game or multiplayer master, so check field state */ - if ((GT_MP_PTPM || bman.gametype == GT_single) && bman.state == GS_running) { + if ((GT_MP_PTPM || GT_SP) && bman.state == GS_running) { /* timeout for rechecking every 5 secs the field */ if (map.state == MS_normal && map.map_selection == MAPS_randgen diff --git a/src/font.c b/src/font.c index 0b96ccc..e9be5a4 100644 --- a/src/font.c +++ b/src/font.c @@ -1,4 +1,4 @@ -/* $Id: font.c,v 1.9 2003/08/29 21:26:47 stpohle Exp $ */ +/* $Id: font.c,v 1.10 2003/11/08 06:27:58 stpohle Exp $ */ // Using Fonts in SDL #include @@ -53,7 +53,7 @@ font_gfxdraw (int x, int y, char *text, int size, int ypos) c = text[i]; src.x = font[size].size.x * (c & 15); src.y = font[size].size.y * ((c & 240) >> 4); - gfx_blit (font[size].image, &src, gfx.screen, &dest, y); + gfx_blit (font[size].image, &src, gfx.screen, &dest, ypos); dest.x += font[size].size.x; } diff --git a/src/game.c b/src/game.c index 640728c..424c433 100644 --- a/src/game.c +++ b/src/game.c @@ -1,4 +1,4 @@ -/* $Id: game.c,v 1.57 2003/11/05 12:15:25 stpohle Exp $ +/* $Id: game.c,v 1.58 2003/11/08 06:27:58 stpohle Exp $ game.c - procedures for the game. */ #include @@ -13,8 +13,7 @@ extern int blitdb_nr, blitrects_nr; -static Uint32 timediff, - timediff1; +static Uint32 game_timediff, game_timediff1; void game_draw_info () @@ -40,23 +39,23 @@ game_draw_info () /* 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 ((bman.players[i].state & PSFM_used) != 0) { + if ((players[i].state & PSFM_used) != 0) { - if (bman.players[i].gfx_nr != -1 && PS_IS_used (bman.players[i].state)) { - src.x = 3 * bman.players[i].gfx->smal_size.x; + if (players[i].gfx_nr != -1 && PS_IS_used (players[i].state)) { + src.x = 3 * players[i].gfx->smal_size.x; src.y = 0; - src.w = dest.w = bman.players[i].gfx->smal_size.x; - src.h = dest.h = bman.players[i].gfx->smal_size.y; + src.w = dest.w = players[i].gfx->smal_size.x; + src.h = dest.h = players[i].gfx->smal_size.y; dest.x = x; dest.y = j - 4; - SDL_BlitSurface (bman.players[i].gfx->smal_image, &src, gfx.screen, &dest); + SDL_BlitSurface (players[i].gfx->smal_image, &src, gfx.screen, &dest); } - sprintf (scrtext, "%10s:%2d", bman.players[i].name, bman.players[i].points); - if (!PS_IS_alife (bman.players[i].state)) { // Player is dead - if ((bman.players[i].state & PSF_used) != PSF_used) + sprintf (scrtext, "%10s:%2d", players[i].name, players[i].points); + if (!PS_IS_alife (players[i].state)) { // Player is dead + if ((players[i].state & PSF_used) != PSF_used) font_setcolor (128, 128, 128, 0); else font_setcolor (0, 0, 128, 0); @@ -77,19 +76,19 @@ game_draw_info () font_setcolor (255, 255, 255, 0); x = gfx.res.x - 120; - sprintf (text, "Bombs: %2d", bman.players[bman.p_nr].bombs_n); + sprintf (text, "Bombs: %2d", players[bman.p_nr].bombs_n); font_draw (x, 0, text, 0); - sprintf (text, "Range: %2d", bman.players[bman.p_nr].range); + sprintf (text, "Range: %2d", players[bman.p_nr].range); font_draw (x, 16, text, 0); - sprintf (text, "Speed: %1.1f", bman.players[bman.p_nr].speed*10); + sprintf (text, "Speed: %1.1f", players[bman.p_nr].speed*10); font_draw (x, 32, text, 0); - if (bman.players[bman.p_nr].special.type != 0) { + if (players[bman.p_nr].special.type != 0) { dest.x = x - 32; dest.y = 16; - dest.w = gfx.smal_special[bman.players[bman.p_nr].special.type - 1]->w; - dest.h = gfx.smal_special[bman.players[bman.p_nr].special.type - 1]->h; + dest.w = gfx.smal_special[players[bman.p_nr].special.type - 1]->w; + dest.h = gfx.smal_special[players[bman.p_nr].special.type - 1]->h; - SDL_BlitSurface (gfx.smal_special[bman.players[bman.p_nr].special.type - 1], NULL, + SDL_BlitSurface (gfx.smal_special[players[bman.p_nr].special.type - 1], NULL, gfx.screen, &dest); } @@ -106,8 +105,11 @@ game_draw_info () } } - if (chat.visible == 0 && GT_MP_PTP) + if (chat.visible == 0 && GT_MP) chat_show (4, 4.5*16, gfx.res.x - 4, gfx.offset.y); + + if (debug) + debug_ingameinfo(); }; @@ -118,14 +120,14 @@ game_loop () Uint8 *keys; int done = 0; Uint32 timeloop1; - int gameovertimeout = TIME_FACTOR * 5; // gameovertimeout + float gameovertimeout = 5.0; // gameovertimeout unsigned char key_bomb = 0; // last state of the bomb key gfx_blitupdaterectclear (); draw_logo (); draw_field (); - if (GT_MP_PTP) + if (GT_MP) net_game_fillsockaddr (); SDL_Flip (gfx.screen); @@ -146,22 +148,22 @@ game_loop () keys = SDL_GetKeyState (NULL); /* only do movements if we're alife and GS_running */ - if ((bman.players[bman.p_nr].state & PSFM_alife) == PSFM_alife && bman.state == GS_running) { + if ((players[bman.p_nr].state & PSFM_alife) == PSFM_alife && bman.state == GS_running) { if (keys[SDLK_UP]) { - bman.players[bman.p_nr].d = up; - bman.players[bman.p_nr].m = 1; + players[bman.p_nr].d = up; + players[bman.p_nr].m = 1; } if (keys[SDLK_DOWN]) { - bman.players[bman.p_nr].d = down; - bman.players[bman.p_nr].m = 1; + players[bman.p_nr].d = down; + players[bman.p_nr].m = 1; } if (keys[SDLK_RIGHT]) { - bman.players[bman.p_nr].d = right; - bman.players[bman.p_nr].m = 1; + players[bman.p_nr].d = right; + players[bman.p_nr].m = 1; } if (keys[SDLK_LEFT]) { - bman.players[bman.p_nr].d = left; - bman.players[bman.p_nr].m = 1; + players[bman.p_nr].d = left; + players[bman.p_nr].m = 1; } if (keys[SDLK_LCTRL] || keys[SDLK_RCTRL]) { if (key_bomb == 0) @@ -171,7 +173,7 @@ game_loop () else key_bomb = 0; - if ((keys[SDLK_LSHIFT] || keys[SDLK_RSHIFT]) && bman.players[bman.p_nr].special.type) { + if ((keys[SDLK_LSHIFT] || keys[SDLK_RSHIFT]) && players[bman.p_nr].special.type) { special_use (bman.p_nr); } } @@ -200,16 +202,16 @@ game_loop () player_ilness_loop (bman.p_nr); special_loop (); - if ((bman.players[bman.p_nr].state & PSFM_alife) == PSFM_alife) + if ((players[bman.p_nr].state & PSFM_alife) == PSFM_alife) move_player (bman.p_nr); - if (GT_MP_PTP) + if (GT_MP) player_calcpos (); - if (bman.gametype != GT_single) + if (GT_MP) network_loop (); - else - single_loop (); + + single_loop (); /* this will even set the variable "bman.player_nr" to let us know how much Players are still left */ @@ -221,10 +223,10 @@ game_loop () /* check if there is only one player left and the game is in multiplayer mode and if there the last dieing animation is done */ if ((bman.players_nr < 2 - && (GT_MP_PTP || (bman.gametype == GT_single && bman.ai_players > 0))) - || (bman.gametype == GT_single && bman.ai_players == 0 && bman.players_nr < 1) - || (bman.timeout <= 0 && map.state != MS_normal)) - gameovertimeout--; + && (GT_MP || (GT_SP && bman.ai_players > 0))) + || (GT_SP && bman.ai_players == 0 && bman.players_nr < 1) + || (bman.timeout <= 0.0f && map.state != MS_normal)) + gameovertimeout -= timediff; if (gameovertimeout <= 0) { d_printf ("GAME: Game Over\n"); @@ -237,17 +239,18 @@ game_loop () // calculate time sync. timeloop1 = SDL_GetTicks (); - timediff = timeloop1 - timestamp; // only for debugging needed + game_timediff = timeloop1 - timestamp; // only for debugging needed while (timeloop1 - timestamp >= 0 && timeloop1 - timestamp < 20) { s_delay (20 - (timeloop1 - timestamp) - 1); timeloop1 = SDL_GetTicks (); } - timediff1 = timeloop1 - timestamp; + game_timediff1 = timeloop1 - timestamp; timestamp = timeloop1; - timefactor = ((float)timediff1) / 20.0f; + timefactor = ((float)game_timediff1) / 20.0f; + timediff = ((float)game_timediff1) / 1000.0f; } chat_show (-1, -1, -1, -1); @@ -270,21 +273,21 @@ game_end () /* count the points */ for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_used (bman.players[i].state)) { - if (PS_IS_alife (bman.players[i].state)) { + if (PS_IS_used (players[i].state)) { + if (PS_IS_alife (players[i].state)) { bman.lastwinner = i; - bman.players[i].wins++; - bman.players[i].points += bman.players_nr_s; + players[i].wins++; + players[i].points += bman.players_nr_s; } } - if (!GT_MP_PTP) + if (GT_SP) game_showresult (); /* 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; + if ((players[i].state & PSF_used) == 0) + players[i].state = 0; } @@ -299,47 +302,46 @@ game_start () bman.players_nr_s = 0; for (p = 0; p < MAX_PLAYERS; p++) { - if (PS_IS_used (bman.players[p].state)) { + if (PS_IS_used (players[p].state)) { bman.players_nr_s++; - if (bman.players[p].gfx_nr == -1) { - bman.players[p].gfx = NULL; - bman.players[p].state &= (0xff - (PSF_alife + PSF_playing)); + if (players[p].gfx_nr == -1) { + players[p].gfx = NULL; + players[p].state &= (0xff - (PSF_alife + PSF_playing)); } else { - bman.players[p].state |= PSF_alife + PSF_playing; - bman.players[p].gfx = &gfx.players[bman.players[p].gfx_nr]; + players[p].state |= PSF_alife + PSF_playing; + players[p].gfx = &gfx.players[players[p].gfx_nr]; } } else - bman.players[p].state = 0; - - bman.players[p].bombs_n = START_BOMBS; - bman.players[p].range = START_RANGE; - bman.players[p].speed = START_SPEED; - bman.players[p].special.type = SP_nothing; - bman.players[p].m = 0; - bman.players[p].old.x = 0; - bman.players[p].old.y = 0; + players[p].state = 0; + + players[p].bombs_n = START_BOMBS; + players[p].range = START_RANGE; + players[p].speed = START_SPEED; + players[p].special.type = SP_nothing; + players[p].m = 0; + players[p].old.x = 0; + players[p].old.y = 0; bman.updatestatusbar=1; - bman.players[p].frame = 0; - bman.players[p].frameto = 0; - bman.players[p].d = 0; - bman.players[p].pos.x = -1; - bman.players[p].pos.y = -1; - bman.players[p].tunnelto = 0; + players[p].frame = 0.0f; + players[p].d = 0; + players[p].pos.x = -1; + players[p].pos.y = -1; + players[p].tunnelto = 0.0f; /* all types of illnes turn them off */ for (i = 0; i < PI_max; i++) - bman.players[p].ill[i].to = 0; + players[p].ill[i].to = 0.0f; // reset bombs for (i = 0; i < MAX_BOMBS; i++) { - bman.players[p].bombs[i].state = BS_off; - bman.players[p].bombs[i].ex_nr = -1; - bman.players[p].bombs[i].speed = 0; - bman.players[p].bombs[i].dest.x = 0; - bman.players[p].bombs[i].dest.y = 0; - bman.players[p].bombs[i].mode = BM_normal; + players[p].bombs[i].state = BS_off; + players[p].bombs[i].ex_nr = -1; + players[p].bombs[i].speed = 0; + players[p].bombs[i].dest.x = 0; + players[p].bombs[i].dest.y = 0; + players[p].bombs[i].mode = BM_normal; } } @@ -378,7 +380,7 @@ void game_showresult () { y += font[2].size.x; for (i = 0, p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_alife (bman.players[p].state)) + if (PS_IS_alife (players[p].state)) i++; if (i == 1) @@ -408,7 +410,7 @@ void game_showresult () { font_draw (x, gfx.res.y - font[0].size.y - 2, text, 0); for (i = 1, p = 0; p < MAX_PLAYERS; p++) { - if (PS_IS_used (bman.players[p].state)) { + if (PS_IS_used (players[p].state)) { if (!i) { i = 1; x = (gfx.res.x / 2) + 16; @@ -420,25 +422,25 @@ void game_showresult () { } font_setcolor (128, 128, 128, 0); - font_drawbold (x + 80, y + 4, bman.players[p].name, 0, 2); - if (PS_IS_alife (bman.players[p].state)) + font_drawbold (x + 80, y + 4, players[p].name, 0, 2); + if (PS_IS_alife (players[p].state)) font_setcolor (255, 255, 0, 0); else font_setcolor (196, 196, 196, 0); - font_draw (x + 80, y + 4, bman.players[p].name, 0); + font_draw (x + 80, y + 4, players[p].name, 0); - sprintf (text, "%3d", bman.players[p].wins); + sprintf (text, "%3d", players[p].wins); font_draw (x + 80 + (LEN_PLAYERNAME+2) * font[0].size.x, y + 4, text, 0); - sprintf (text, "%3d", bman.players[p].points); + sprintf (text, "%3d", players[p].points); font_draw (x + 80 + (LEN_PLAYERNAME+5) * font[0].size.x, y + 4, text, 0); dest.x = x; dest.y = y - 32; - src.w = dest.w = bman.players[p].gfx->ani.w; - src.h = dest.h = bman.players[p].gfx->ani.h; - src.x = bman.players[p].gfx->ani.w * down; + src.w = dest.w = players[p].gfx->ani.w; + src.h = dest.h = players[p].gfx->ani.h; + src.x = players[p].gfx->ani.w * down; src.y = 0; - gfx_blit (bman.players[p].gfx->ani.image, &src, gfx.screen, &dest, 1); + gfx_blit (players[p].gfx->ani.image, &src, gfx.screen, &dest, 1); } } diff --git a/src/gamesrv.c b/src/gamesrv.c index 2ba041f..343c1bc 100644 --- a/src/gamesrv.c +++ b/src/gamesrv.c @@ -359,9 +359,9 @@ gamesrv_playerinfo (struct game_entry *gse) pos++; for (i = 1; (i - 1 < LEN_GAMENAME) && (pos[i] != 0) && (pos[i] != '\n'); i++) - bman.players[j].name[i - 1] = pos[i]; - bman.players[j].name[i - 1] = 0;pos+=i-1; - d_printf ("Name: %s\n", bman.players[j].name); + players[j].name[i - 1] = pos[i]; + players[j].name[i - 1] = 0;pos+=i-1; + d_printf ("Name: %s\n", players[j].name); } // draw box and players j=pl*font[0].size.y+font[1].size.y+50; @@ -377,7 +377,7 @@ gamesrv_playerinfo (struct game_entry *gse) y = y + 2 + (font[1].size.y << 1); for(i=0;i 1 || dy > 1)); j++) { /* is ther any other player */ - dx = PLX - bman.players[j].pos.x; + dx = PLX - players[j].pos.x; if (dx < 0) dx = -dx; - dy = PLY - bman.players[j].pos.y; + dy = PLY - players[j].pos.y; if (dy < 0) dy = -dy; } @@ -279,8 +278,8 @@ map_set_playerposition (int usermap) } mx = my = 100; for (j = 0; j <= i; j++) { /* search smalest distance */ - dy = PLY - bman.players[j].pos.y; - dx = PLX - bman.players[j].pos.x; + dy = PLY - players[j].pos.y; + dx = PLX - players[j].pos.x; if (dy < 0) dy = -dy; if (dx < 0) @@ -410,8 +409,7 @@ map_load (FILE * fmap) for (d = 0; d < 4; d++) map.field[i][sizey].ex[d].frame = map.field[i][sizey].ex[d].count = 0; map.field[i][sizey].ex_nr = -1; - map.field[i][sizey].frame = 0; - map.field[i][sizey].frameto = 0; + map.field[i][sizey].frame = 0.0f; map.field[i][sizey].special = FT_nothing; } sizey++; diff --git a/src/mapmenu.c b/src/mapmenu.c index e4735fb..39b9bb9 100644 --- a/src/mapmenu.c +++ b/src/mapmenu.c @@ -1,4 +1,4 @@ -/* $Id: mapmenu.c,v 1.11 2003/08/29 23:50:39 stpohle Exp $ */ +/* $Id: mapmenu.c,v 1.12 2003/11/08 06:27:59 stpohle Exp $ */ /* map/tileset selection menu */ #include "bomberclone.h" @@ -378,7 +378,7 @@ mapinfo () keybinput_new (&ki); while (!done && bman.state == GS_wait) { - if (bman.gametype == GT_multi && bman.sock != -1) { + if (GT_MP && bman.sock != -1) { network_loop (); eventstate = SDL_PollEvent (&event); } diff --git a/src/menu.c b/src/menu.c index 407caa6..ef3b3b5 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,4 +1,4 @@ -/* $Id: menu.c,v 1.29 2003/07/25 12:28:50 stpohle Exp $ */ +/* $Id: menu.c,v 1.30 2003/11/08 06:27:59 stpohle Exp $ */ /* menu's for the game */ #include @@ -132,7 +132,7 @@ menu_loop (char *menutitle, _menu menu[], int lastselect) while (menuselect != -1 && done == 0) { /* do the network loop if we have to */ - if (bman.gametype == GT_multi && bman.sock != -1) { + if (GT_MP) { network_loop (); eventstate = SDL_PollEvent (&event); } @@ -257,7 +257,7 @@ menu_get_text (char *title, char *text, int len) SDL_Flip (gfx.screen); /* do the network loop if we have to */ - if (bman.gametype == GT_multi && bman.sock != -1) { + if (GT_MP) { network_loop (); eventstate = SDL_PollEvent (&event); } @@ -377,7 +377,7 @@ menu_displaymessage (char *title, char *text) while (done == 0 || (done == 1 && keypressed == 1)) { /* do the network loop if we have to */ - if (bman.gametype == GT_multi && bman.sock != -1) { + if (GT_MP) { network_loop (); eventstate = SDL_PollEvent (&event); } @@ -415,10 +415,13 @@ menu_clearkeybuff () SDL_Event event; Uint8 *keys; int i; + SDL_PollEvent (&event); keys = SDL_GetKeyState (NULL); + if (!(keys[SDLK_RETURN])) return; + for (i = 0; i < 20; i++) { s_delay (25); SDL_PollEvent (&event); @@ -426,6 +429,7 @@ menu_clearkeybuff () if (!(keys[SDLK_RETURN])) return; } + menu_displaytext ("", " Press Return ", 64, 0, 0); while (keys[SDLK_RETURN]) { s_delay (25); @@ -523,7 +527,7 @@ menu_dir_select (char *title, char *path, signed char dirflags) } /* do the network loop if we have to */ - if (bman.gametype == GT_multi && bman.sock != -1) { + if (GT_MP) { network_loop (); eventstate = SDL_PollEvent (&event); } diff --git a/src/multiwait.c b/src/multiwait.c index 7a943ff..8ca6163 100644 --- a/src/multiwait.c +++ b/src/multiwait.c @@ -96,21 +96,21 @@ mw_draw_status () /* 2. the names with points */ for (x1 = pnr = 0, y = 48; pnr < MAX_PLAYERS; pnr++) { redraw_logo (x1 * 320, y - 4, 320, 32); - if (bman.players[pnr].gfx_nr != -1 && PS_IS_used (bman.players[pnr].state)) { - src.x = 3 * bman.players[pnr].gfx->smal_size.x; + if (players[pnr].gfx_nr != -1 && PS_IS_used (players[pnr].state)) { + src.x = 3 * players[pnr].gfx->smal_size.x; src.y = 0; - src.w = dest.w = bman.players[pnr].gfx->smal_size.x; - src.h = dest.h = bman.players[pnr].gfx->smal_size.y; + src.w = dest.w = players[pnr].gfx->smal_size.x; + src.h = dest.h = players[pnr].gfx->smal_size.y; dest.x = x1 * 320; dest.y = y - 4; - gfx_blit (bman.players[pnr].gfx->smal_image, &src, gfx.screen, &dest, 0xFFFF); + gfx_blit (players[pnr].gfx->smal_image, &src, gfx.screen, &dest, 0xFFFF); } - sprintf (text, " %10s %2d %2d", bman.players[pnr].name, bman.players[pnr].wins, - bman.players[pnr].points); - if (PS_IS_used (bman.players[pnr].state)) { + sprintf (text, " %10s %2d %2d", players[pnr].name, players[pnr].wins, + players[pnr].points); + if (PS_IS_used (players[pnr].state)) { if (bman.lastwinner == pnr) font_setcolor (255, 255, 192, 0); @@ -148,7 +148,7 @@ mw_draw_gfxselect (int selgfx) xstep = gfx.res.x / MAX_PLAYERS; - if (bman.players[bman.p_nr].gfx_nr == -1) { + if (players[bman.p_nr].gfx_nr == -1) { /* draw selection */ for (i = 0; i < MAX_PLAYERS; i++) { dest.w = src.w = gfx.players[i].ani.w; @@ -210,7 +210,7 @@ mw_draw_gfxselect (int selgfx) if (select < MAX_PLAYERS && select >= 0) { /* this player have been selected */ - if (bman.players[bman.p_nr].gfx_nr == i) + if (players[bman.p_nr].gfx_nr == i) gfx_blit (gfx.players[i].ani.image, &src, gfx.screen, &dest, 0xFFFF); else gfx_blit (mw_plgfx[i], &src, gfx.screen, &dest, 0xFFFF); @@ -273,7 +273,7 @@ wait_for_players () /* check if all players are ready, and more as one player is connected */ if (GT_MP_PTPM) for (ready = 0, i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_playing (bman.players[i].state)) + if (PS_IS_playing (players[i].state)) ready++; if (ready > 1) ready = 1; @@ -324,7 +324,7 @@ wait_for_players () if (bman.p_nr != -1) { - if (keys[SDLK_LEFT] && (!keypressed) && bman.players[bman.p_nr].gfx_nr == -1) { + if (keys[SDLK_LEFT] && (!keypressed) && players[bman.p_nr].gfx_nr == -1) { i = 0; while (selgfx < 0 || selgfx >= MAX_PLAYERS || i != -1) { selgfx--; @@ -334,7 +334,7 @@ wait_for_players () } } - if (keys[SDLK_RIGHT] && (!keypressed) && bman.players[bman.p_nr].gfx_nr == -1) { + if (keys[SDLK_RIGHT] && (!keypressed) && players[bman.p_nr].gfx_nr == -1) { i = 0; while (selgfx < 0 || selgfx >= MAX_PLAYERS || i != -1) { selgfx++; @@ -345,7 +345,7 @@ wait_for_players () } /* just make sure this player is not selected twice */ - if (bman.players[bman.p_nr].gfx_nr == -1) { + if (players[bman.p_nr].gfx_nr == -1) { MW_IS_GFX_SELECT (selgfx, i); while (selgfx < 0 || selgfx >= MAX_PLAYERS || i != -1) { selgfx++; @@ -356,12 +356,12 @@ wait_for_players () } if ((keys[SDLK_LCTRL] || keys[SDLK_RCTRL]) && (!keypressed)) { - if (bman.players[bman.p_nr].gfx_nr == -1) + if (players[bman.p_nr].gfx_nr == -1) /* select player */ - bman.players[bman.p_nr].gfx_nr = selgfx; + players[bman.p_nr].gfx_nr = selgfx; else /* deselect player */ - bman.players[bman.p_nr].gfx_nr = -1; + players[bman.p_nr].gfx_nr = -1; net_change_playerid (bman.p_nr, 1); bman.updatestatusbar = 1; } diff --git a/src/netmenu.c b/src/netmenu.c index 3030421..c487920 100644 --- a/src/netmenu.c +++ b/src/netmenu.c @@ -24,8 +24,6 @@ networkmenu_joingame () /* connect if we have an Servername */ if (bman.servername[0] != 0) { bman.sock = -1; - bman.gametype = GT_multi; - bman.multitype = MT_ptps; join_multiplayer_game (); bman.servername[0] = 0; } @@ -54,8 +52,6 @@ netmenu () break; case (1): // Create a new Game bman.sock = -1; - bman.gametype = GT_multi; - bman.multitype = MT_ptpm; host_multiplayer_game (); break; case (2): // Options @@ -196,9 +192,9 @@ multiplayer_firstrun () bman.state = GS_wait; for (i = 0; i < MAX_PLAYERS; i++) { - bman.players[i].name[0] = 0; - bman.players[i].gfx_nr = -1; - bman.players[i].gfx = NULL; + players[i].name[0] = 0; + players[i].gfx_nr = -1; + players[i].gfx = NULL; } /* @@ -255,7 +251,6 @@ host_multiplayer_game () game_end (); } } - network_shutdown (); }; diff --git a/src/network.c b/src/network.c index 37ec2e8..ede354c 100644 --- a/src/network.c +++ b/src/network.c @@ -1,4 +1,4 @@ -/* $Id: network.c,v 1.42 2003/09/12 18:10:36 stpohle Exp $ */ +/* $Id: network.c,v 1.43 2003/11/08 06:27:59 stpohle Exp $ */ /* network routines. */ @@ -60,8 +60,8 @@ net_dyn_pkgoption () _net_pkgopt *npkg; for (p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_netplayer (bman.players[p].state)) { - npkg = &bman.players[p].net.pkgopt; + if (PS_IS_netplayer (players[p].state)) { + npkg = &players[p].net.pkgopt; if (npkg->to_2sec > DYN_PKG_MAX_MISSING) { if (npkg->send_set < 10) @@ -108,16 +108,16 @@ network_init () // reset playernumber and number of connected players for (i = 0; i < MAX_PLAYERS; i++) { - bman.players[i].net.addr.host[0] = 0; - bman.players[i].net.addr.port[0] = 0; - bman.players[i].name[0] = 0; - bman.players[i].gfx_nr = -1; - bman.players[i].net.timestamp = timestamp; - bman.players[i].points = 0; - bman.players[i].wins = 0; - bman.players[i].net.pingreq = 20; - bman.players[i].net.pingack = 22; - bman.players[i].state = 0; + players[i].net.addr.host[0] = 0; + players[i].net.addr.port[0] = 0; + players[i].name[0] = 0; + players[i].gfx_nr = -1; + players[i].net.timestamp = timestamp; + players[i].points = 0; + players[i].wins = 0; + players[i].net.pingreq = 20; + players[i].net.pingack = 22; + players[i].state = 0; } bman.lastwinner = -1; @@ -139,31 +139,31 @@ network_init () // if we are the server set up my data if (GT_MP_PTPM) { - strncpy (bman.players[0].name, bman.playername, LEN_PLAYERNAME); + strncpy (players[0].name, bman.playername, LEN_PLAYERNAME); bman.p_nr = 0; - bman.players[0].state = PSF_used; + players[0].state = PSF_used; if (bman.notifygamemaster) gamesrv_sendmode (bman.maxplayer, 1); } // if client send Data to the server if (GT_MP_PTPS) { - network_server_port (bman.servername, bman.players[0].net.addr.host, - LEN_SERVERNAME, bman.players[0].net.addr.port, LEN_PORT); + network_server_port (bman.servername, players[0].net.addr.host, + LEN_SERVERNAME, players[0].net.addr.port, LEN_PORT); - d_printf ("Connect To: %s[:%s]\n", bman.players[0].net.addr.host, - bman.players[0].net.addr.port); + d_printf ("Connect To: %s[:%s]\n", players[0].net.addr.host, + players[0].net.addr.port); - dns_filladdr (bman.players[0].net.addr.host, LEN_SERVERNAME, bman.players[0].net.addr.port, - LEN_PORT, bman.net_ai_family, &bman.players[0].net.addr.sAddr); - bman.players[0].net.addr.port[0] = bman.players[0].net.addr.host[0] = 0; - dns_filladdr (bman.players[0].net.addr.host, LEN_SERVERNAME, bman.players[0].net.addr.port, - LEN_PORT, bman.net_ai_family, &bman.players[0].net.addr.sAddr); + dns_filladdr (players[0].net.addr.host, LEN_SERVERNAME, players[0].net.addr.port, + LEN_PORT, bman.net_ai_family, &players[0].net.addr.sAddr); + players[0].net.addr.port[0] = players[0].net.addr.host[0] = 0; + dns_filladdr (players[0].net.addr.host, LEN_SERVERNAME, players[0].net.addr.port, + LEN_PORT, bman.net_ai_family, &players[0].net.addr.sAddr); if (bman.firewall) i = NETF_firewall; else i = 0; - send_playerid (&bman.players[0].net.addr, bman.playername, NULL, NULL, -1, -1, i); + send_playerid (&players[0].net.addr, bman.playername, NULL, NULL, -1, -1, i); } return 0; @@ -180,13 +180,13 @@ network_shutdown () if (GT_MP_PTPM) { for (i = 1; i < MAX_PLAYERS; i++) - if (bman.players[i].net.addr.host[0] != 0) - send_quit (&bman.players[i].net.addr, NULL, NULL); + if (players[i].net.addr.host[0] != 0) + send_quit (&players[i].net.addr, NULL, NULL); if (bman.notifygamemaster) gamesrv_quit (); } - else if (bman.players[0].net.addr.host[0] != 0) - send_quit (&bman.players[0].net.addr, NULL, NULL); + else if (players[0].net.addr.host[0] != 0) + send_quit (&players[0].net.addr, NULL, NULL); udp_close (bman.sock); @@ -209,23 +209,23 @@ net_check_timeout (int pl_nr) { int timeout = UDP_TIMEOUT; - if ((bman.players[pl_nr].state & (PSF_net + PSF_used)) == (PSF_used + PSF_net) - && timestamp - bman.players[pl_nr].net.timestamp > timeout - && bman.players[pl_nr].net.pingreq != bman.players[pl_nr].net.pingack) { + if ((players[pl_nr].state & (PSF_net + PSF_used)) == (PSF_used + PSF_net) + && timestamp - players[pl_nr].net.timestamp > timeout + && players[pl_nr].net.pingreq != players[pl_nr].net.pingack) { d_printf ("net_check_timeout pl_nr=%d, ack=%d, req=%d, timediff=%d\n", pl_nr, - bman.players[pl_nr].net.pingack, bman.players[pl_nr].net.pingreq, - timestamp - bman.players[pl_nr].net.timestamp); - bman.players[pl_nr].net.timestamp = timestamp; - bman.players[pl_nr].net.pingack = bman.players[pl_nr].net.pingreq; - send_ping (&bman.players[pl_nr].net.addr, bman.players[pl_nr].net.pingack + 100, + players[pl_nr].net.pingack, players[pl_nr].net.pingreq, + timestamp - players[pl_nr].net.timestamp); + players[pl_nr].net.timestamp = timestamp; + players[pl_nr].net.pingack = players[pl_nr].net.pingreq; + send_ping (&players[pl_nr].net.addr, players[pl_nr].net.pingack + 100, PKG_pingreq); } - if ((bman.players[pl_nr].state & (PSF_net + PSF_used)) == (PSF_used + PSF_net) - && timestamp - bman.players[pl_nr].net.timestamp > timeout - && bman.players[pl_nr].net.pingreq == bman.players[pl_nr].net.pingack) { + if ((players[pl_nr].state & (PSF_net + PSF_used)) == (PSF_used + PSF_net) + && timestamp - players[pl_nr].net.timestamp > timeout + && players[pl_nr].net.pingreq == players[pl_nr].net.pingack) { d_printf ("net_check_timeout pl_nr=%d, ack=%d, req=%d, timediff=%d\n", pl_nr, - bman.players[pl_nr].net.pingack, bman.players[pl_nr].net.pingreq, - timestamp - bman.players[pl_nr].net.timestamp); + players[pl_nr].net.pingack, players[pl_nr].net.pingreq, + timestamp - players[pl_nr].net.timestamp); return 1; } return 0; @@ -316,39 +316,39 @@ draw_netupdatestate () dest; for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_used (bman.players[i].state)) { + if (PS_IS_used (players[i].state)) { y += 48; redraw_logo (0, y, gfx.res.x, y + 48); - if (bman.players[i].gfx_nr != -1) { - dest.w = src.w = bman.players[i].gfx->smal_size.x; - dest.h = src.h = bman.players[i].gfx->smal_size.y; - src.x = bman.players[i].gfx->smal_size.x * down; + if (players[i].gfx_nr != -1) { + dest.w = src.w = players[i].gfx->smal_size.x; + dest.h = src.h = players[i].gfx->smal_size.y; + src.x = players[i].gfx->smal_size.x * down; src.y = 0; dest.x = 50; dest.y = y; - SDL_BlitSurface (bman.players[i].gfx->smal_image, &src, gfx.screen, &dest); + SDL_BlitSurface (players[i].gfx->smal_image, &src, gfx.screen, &dest); gfx_blitupdaterectadd (&dest); } - if (bman.players[i].net.net_istep == 0) - sprintf (text, "%s - State : READY", bman.players[i].name); + if (players[i].net.net_istep == 0) + sprintf (text, "%s - State : READY", players[i].name); else - sprintf (text, "%s - State : DOWNLOAD", bman.players[i].name); + sprintf (text, "%s - State : DOWNLOAD", players[i].name); font_draw (70, y, text, 0); text[0] = 0; - if (bman.players[i].net.net_istep == 3) - sprintf (text, "Getting Tunnel Data %d.", bman.players[i].net.net_status); + if (players[i].net.net_istep == 3) + sprintf (text, "Getting Tunnel Data %d.", players[i].net.net_status); - if (bman.players[i].net.net_istep == 2) - sprintf (text, "Getting Field Data %d of %d.", bman.players[i].net.net_status, + if (players[i].net.net_istep == 2) + sprintf (text, "Getting Field Data %d of %d.", players[i].net.net_status, map.size.x); - if (bman.players[i].net.net_istep == 1) - sprintf (text, "Getting Player Data %d of %d.", bman.players[i].net.net_status, + if (players[i].net.net_istep == 1) + sprintf (text, "Getting Player Data %d of %d.", players[i].net.net_status, MAX_PLAYERS); font_draw (70, y + 32, text, 0); @@ -369,22 +369,22 @@ net_change_playerid (int pl_nr, unsigned char senddata) Send to all connected clients the update */ for (i = 1; i < MAX_PLAYERS; i++) - if (bman.players[i].net.addr.host[0] != 0) - send_playerid (&bman.players[i].net.addr, bman.players[pl_nr].name, - bman.players[pl_nr].net.addr.host, bman.players[pl_nr].net.addr.port, - pl_nr, bman.players[pl_nr].gfx_nr, bman.players[pl_nr].net.flags); + if (players[i].net.addr.host[0] != 0) + send_playerid (&players[i].net.addr, players[pl_nr].name, + players[pl_nr].net.addr.host, players[pl_nr].net.addr.port, + pl_nr, players[pl_nr].gfx_nr, players[pl_nr].net.flags); } else { /* Send only to the Server the update and only if in_nr == bman.in_nr */ if (pl_nr == bman.p_nr && senddata) - send_playerid (&bman.players[0].net.addr, bman.players[pl_nr].name, - bman.players[pl_nr].net.addr.host, bman.players[pl_nr].net.addr.port, - pl_nr, bman.players[pl_nr].gfx_nr, bman.players[pl_nr].net.flags); + send_playerid (&players[0].net.addr, players[pl_nr].name, + players[pl_nr].net.addr.host, players[pl_nr].net.addr.port, + pl_nr, players[pl_nr].gfx_nr, players[pl_nr].net.flags); } - player_set_gfx (&bman.players[pl_nr], bman.players[pl_nr].gfx_nr); + player_set_gfx (&players[pl_nr], players[pl_nr].gfx_nr); }; @@ -420,9 +420,9 @@ net_transmit_gamedata () prepare everything for the loop */ for (x = 0; x < MAX_PLAYERS; x++) { - bman.players[x].net.timestamp = 0; - bman.players[x].net.net_status = -1; - bman.players[x].net.net_istep = 3; + players[x].net.timestamp = 0; + players[x].net.net_status = -1; + players[x].net.net_istep = 3; } y = -1; @@ -439,7 +439,7 @@ net_transmit_gamedata () /* if PTPM check if all players are ready */ if (GT_MP_PTPM) { for (p = 1, i = 1; p < MAX_PLAYERS; p++) - if (PS_IS_playing (bman.players[p].state) && bman.players[p].net.net_istep != 0) + if (PS_IS_playing (players[p].state) && players[p].net.net_istep != 0) i = 0; if (i == 1) { /* all players are ready */ done = 1; @@ -453,22 +453,22 @@ net_transmit_gamedata () /* get tunneldata */ - if ((y < GAME_MAX_TUNNELS - 1 && y == bman.players[bman.p_nr].net.net_status) + if ((y < GAME_MAX_TUNNELS - 1 && y == players[bman.p_nr].net.net_status) || y == -1) { y++; downtimestamp = timestamp; - send_tunneldata (&bman.players[0].net.addr, y, -1, -1); + send_tunneldata (&players[0].net.addr, y, -1, -1); } - else if (y < GAME_MAX_TUNNELS && y != bman.players[bman.p_nr].net.net_status + else if (y < GAME_MAX_TUNNELS && y != players[bman.p_nr].net.net_status && y >= 0 && timestamp - downtimestamp > DOWNLOAD_TIMEOUT) { /* we have got no tunnel data*/ y--; } - else if (y == GAME_MAX_TUNNELS - 1 && bman.players[bman.p_nr].net.net_status == y) { + else if (y == GAME_MAX_TUNNELS - 1 && players[bman.p_nr].net.net_status == y) { /* we have got all tunnel data */ y = -1; - bman.players[bman.p_nr].net.net_istep = --net_istep; - bman.players[bman.p_nr].net.net_status = -1; + players[bman.p_nr].net.net_istep = --net_istep; + players[bman.p_nr].net.net_status = -1; } } @@ -476,23 +476,23 @@ net_transmit_gamedata () /* get field data */ - if ((y < map.size.y - 1 && y == bman.players[bman.p_nr].net.net_status) + if ((y < map.size.y - 1 && y == players[bman.p_nr].net.net_status) || y == -1) { /* send field data req */ y++; downtimestamp = timestamp; - send_getfield (&bman.players[0].net.addr, y); + send_getfield (&players[0].net.addr, y); } - else if (y < map.size.y && y != bman.players[bman.p_nr].net.net_status + else if (y < map.size.y && y != players[bman.p_nr].net.net_status && y >= 0 && timestamp - downtimestamp > DOWNLOAD_TIMEOUT) { /* getdata timed out - we have got no field data */ y--; } - else if (y == map.size.y - 1 && bman.players[bman.p_nr].net.net_status == y) { + else if (y == map.size.y - 1 && players[bman.p_nr].net.net_status == y) { /* we have got all field data */ y = -1; - bman.players[bman.p_nr].net.net_istep = --net_istep; - bman.players[bman.p_nr].net.net_status = -1; + players[bman.p_nr].net.net_istep = --net_istep; + players[bman.p_nr].net.net_status = -1; } } @@ -500,31 +500,31 @@ net_transmit_gamedata () /* get player data */ - if ((y < MAX_PLAYERS - 1 && y == bman.players[bman.p_nr].net.net_status) || y == -1) { + if ((y < MAX_PLAYERS - 1 && y == players[bman.p_nr].net.net_status) || y == -1) { /* send player date req */ y++; downtimestamp = timestamp; - send_getplayerdata (&bman.players[0].net.addr, y); + send_getplayerdata (&players[0].net.addr, y); } - if (y < MAX_PLAYERS && y != bman.players[bman.p_nr].net.net_status && y >= 0 + if (y < MAX_PLAYERS && y != players[bman.p_nr].net.net_status && y >= 0 && timestamp - downtimestamp > DOWNLOAD_TIMEOUT) { /* we have got no player data */ y--; } - if (y == MAX_PLAYERS - 1 && bman.players[bman.p_nr].net.net_status == y) { + if (y == MAX_PLAYERS - 1 && players[bman.p_nr].net.net_status == y) { /* we have got all playerdata */ y = -1; - bman.players[bman.p_nr].net.net_istep = --net_istep; - bman.players[bman.p_nr].net.net_status = -1; + players[bman.p_nr].net.net_istep = --net_istep; + players[bman.p_nr].net.net_status = -1; downtimestamp = timestamp; - send_playerstatus (&bman.players[0].net.addr, bman.p_nr, 0, 0); + send_playerstatus (&players[0].net.addr, bman.p_nr, 0, 0); } } - if (net_istep == 0 && bman.players[bman.p_nr].net.net_status == -1 + if (net_istep == 0 && players[bman.p_nr].net.net_status == -1 && timestamp - downtimestamp > DOWNLOAD_TIMEOUT) { /* server did not send informations back */ downtimestamp = timestamp; - send_playerstatus (&bman.players[0].net.addr, bman.p_nr, 0, 0); + send_playerstatus (&players[0].net.addr, bman.p_nr, 0, 0); } } @@ -558,7 +558,7 @@ net_transmit_gamedata () /* player is only watching so just go after we have got everything go to show the field */ if (GT_MP_PTPS && bman.state == GS_update && net_istep == 0 - && bman.players[bman.p_nr].gfx_nr == -1) { + && players[bman.p_nr].gfx_nr == -1) { done = 1; bman.state = GS_running; } @@ -573,13 +573,13 @@ net_game_send_player (int p_nr) if (GT_MP_PTPM) { for (p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_netplayer (bman.players[p].state) && p != bman.p_nr) - send_playerdata (&bman.players[p].net.addr, p_nr, &bman.players[p_nr]); + if (PS_IS_netplayer (players[p].state) && p != bman.p_nr) + send_playerdata (&players[p].net.addr, p_nr, &players[p_nr]); } else if (p_nr == bman.p_nr) { for (p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_netplayer (bman.players[p].state) && p != bman.p_nr && NET_CANSEND(p)) - send_playerdata (&bman.players[p].net.addr, p_nr, &bman.players[p_nr]); + if (PS_IS_netplayer (players[p].state) && p != bman.p_nr && NET_CANSEND(p)) + send_playerdata (&players[p].net.addr, p_nr, &players[p_nr]); } }; @@ -591,12 +591,12 @@ net_game_send_playermove (int p_nr, int mustsend) _player *pl; for (p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_netplayer (bman.players[p].state) && p != bman.p_nr) { - pl = &bman.players[p_nr]; + if (PS_IS_netplayer (players[p].state) && p != bman.p_nr) { + pl = &players[p_nr]; pl->net.pkgopt.send_to--; if ((pl->net.pkgopt.send_to <= 0 || mustsend) && NET_CANSEND(p)) - send_playermove (&bman.players[p].net.addr, p_nr, pl); + send_playermove (&players[p].net.addr, p_nr, pl); /* network packet send control */ if (pl->net.pkgopt.send_to <= 0 || pl->net.pkgopt.send_to > pl->net.pkgopt.send_set) @@ -610,7 +610,7 @@ net_game_send_bomb (int p, int b) int pl; /* check if we are slave and send something else as dropping a bomb */ - if (GT_MP_PTPS && bman.players[p].bombs[b].state != BS_ticking && bman.players[p].bombs[b].state != BS_trigger) + if (GT_MP_PTPS && players[p].bombs[b].state != BS_ticking && players[p].bombs[b].state != BS_trigger) return; d_printf ("Send BombData %d, %d\n", p, b); @@ -619,8 +619,8 @@ net_game_send_bomb (int p, int b) return; for (pl = 0; pl < MAX_PLAYERS; pl++) - if (PS_IS_netplayer (bman.players[pl].state) && pl != bman.p_nr && NET_CANSEND(pl)) - send_bombdata (&bman.players[pl].net.addr, p, b, &bman.players[p].bombs[b]); + if (PS_IS_netplayer (players[pl].state) && pl != bman.p_nr && NET_CANSEND(pl)) + send_bombdata (&players[pl].net.addr, p, b, &players[p].bombs[b]); }; @@ -635,8 +635,8 @@ net_game_send_field (int x, int y) return; for (pl = 0; pl < MAX_PLAYERS; pl++) - if (PS_IS_netplayer (bman.players[pl].state) && pl != bman.p_nr && NET_CANSEND(pl)) - send_field (&bman.players[pl].net.addr, x, y, &map.field[x][y]); + if (PS_IS_netplayer (players[pl].state) && pl != bman.p_nr && NET_CANSEND(pl)) + send_field (&players[pl].net.addr, x, y, &map.field[x][y]); }; @@ -658,19 +658,19 @@ net_delplayer (int pl_nr) bman.state = GS_startup; } else { - strncpy (host, bman.players[pl_nr].net.addr.host, LEN_SERVERNAME); - strncpy (port, bman.players[pl_nr].net.addr.port, LEN_PORT); + strncpy (host, players[pl_nr].net.addr.host, LEN_SERVERNAME); + strncpy (port, players[pl_nr].net.addr.port, LEN_PORT); - bman.players[pl_nr].state &= (0xFF - (PSF_used + PSF_net + PSF_alife)); /* delete + players[pl_nr].state &= (0xFF - (PSF_used + PSF_net + PSF_alife)); /* delete player flags */ - bman.players[pl_nr].net.net_istep = 0; // needed for disconnect during the update + players[pl_nr].net.net_istep = 0; // needed for disconnect during the update bman.players_nr_s--; - bman.players[pl_nr].gfx_nr = -1; + players[pl_nr].gfx_nr = -1; if (GT_MP_PTPM && (GS_WAITRUNNING || bman.state == GS_update)) { for (i = 1; i < MAX_PLAYERS; i++) - if (PS_IS_netplayer (bman.players[i].state)) { - send_quit (&bman.players[i].net.addr, host, port); + if (PS_IS_netplayer (players[i].state)) { + send_quit (&players[i].net.addr, host, port); j++; } if (bman.notifygamemaster) @@ -694,10 +694,10 @@ net_game_fillsockaddr () int i; for (i = 0; i < MAX_PLAYERS; i++) - if (bman.players[i].net.addr.host[0] != 0 && bman.players[i].net.addr.host[0] != 0) - dns_filladdr (bman.players[i].net.addr.host, LEN_SERVERNAME, - bman.players[i].net.addr.port, LEN_PORT, bman.net_ai_family, - &bman.players[i].net.addr.sAddr); + if (players[i].net.addr.host[0] != 0 && players[i].net.addr.host[0] != 0) + dns_filladdr (players[i].net.addr.host, LEN_SERVERNAME, + players[i].net.addr.port, LEN_PORT, bman.net_ai_family, + &players[i].net.addr.sAddr); }; @@ -707,8 +707,8 @@ net_send_servermode () int i; for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_netplayer (bman.players[i].state) && i != bman.p_nr && NET_CANSEND(i)) - send_servermode (&bman.players[i].net.addr, i); + if (PS_IS_netplayer (players[i].state) && i != bman.p_nr && NET_CANSEND(i)) + send_servermode (&players[i].net.addr, i); if (GT_MP_PTPM && bman.notifygamemaster) /* send notification the the gamemaster */ gamesrv_sendmode (bman.maxplayer, bman.players_nr_s); @@ -723,11 +723,11 @@ net_send_players () j; for (j = 0; j < MAX_PLAYERS; j++) - if (PS_IS_netplayer (bman.players[j].state) && j != bman.p_nr) + if (PS_IS_netplayer (players[j].state) && j != bman.p_nr) for (i = 0; i < MAX_PLAYERS; i++) - send_playerid (&bman.players[j].net.addr, bman.players[i].name, - bman.players[i].net.addr.host, bman.players[i].net.addr.port, i, - bman.players[i].gfx_nr, bman.players[i].net.flags); + send_playerid (&players[j].net.addr, players[i].name, + players[i].net.addr.host, players[i].net.addr.port, i, + players[i].gfx_nr, players[i].net.flags); }; @@ -739,8 +739,8 @@ net_send_chat (char *text, signed char notigamesrv) int i; for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_netplayer (bman.players[i].state) && i != bman.p_nr && NET_CANSEND(i)) - send_chat (&bman.players[i].net.addr, text); + if (PS_IS_netplayer (players[i].state) && i != bman.p_nr && NET_CANSEND(i)) + send_chat (&players[i].net.addr, text); if (GT_MP_PTPM && bman.notifygamemaster && notigamesrv == 1 && bman.broadcasted_chat) /* send notification the the gamemaster */ gamesrv_sendchat (text); @@ -755,8 +755,8 @@ net_game_send_ill (int p_nr) d_printf ("net_game_send_ill (%d)\n", p_nr); for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_netplayer (bman.players[i].state) && i != bman.p_nr && NET_CANSEND(i)) - send_ill (&bman.players[i].net.addr, p_nr, &bman.players[p_nr]); + if (PS_IS_netplayer (players[i].state) && i != bman.p_nr && NET_CANSEND(i)) + send_ill (&players[i].net.addr, p_nr, &players[p_nr]); }; @@ -773,13 +773,13 @@ net_new_game () bman.players_nr = 0; bman.players_nr_s = 0; for (p = 0; p < MAX_PLAYERS; p++) { - if (PS_IS_used (bman.players[p].state)) + if (PS_IS_used (players[p].state)) bman.players_nr_s++; else - bman.players[p].state = 0; + players[p].state = 0; } - bman.players[bman.p_nr].state &= (0xFF - PSF_net); // we are the local player + players[bman.p_nr].state &= (0xFF - PSF_net); // we are the local player bman.last_ex_nr = 1; }; @@ -799,8 +799,8 @@ net_game_send_special (int pl_nr, int ex_nr) return; for (pl = 0; pl < MAX_PLAYERS; pl++) - if (PS_IS_netplayer (bman.players[pl].state) && pl != pl_nr && NET_CANSEND(pl)) - send_special (&bman.players[pl].net.addr, pl_nr, bman.players[pl_nr].special.type, ex_nr); + if (PS_IS_netplayer (players[pl].state) && pl != pl_nr && NET_CANSEND(pl)) + send_special (&players[pl].net.addr, pl_nr, players[pl_nr].special.type, ex_nr); }; @@ -816,6 +816,6 @@ net_send_mapinfo () d_printf ("Send Mapinfo\n"); for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_netplayer (bman.players[i].state) && i != bman.p_nr && NET_CANSEND(i)) - send_mapinfo (&bman.players[i].net.addr); + if (PS_IS_netplayer (players[i].state) && i != bman.p_nr && NET_CANSEND(i)) + send_mapinfo (&players[i].net.addr); }; diff --git a/src/packets.c b/src/packets.c index 4c9d241..7733248 100644 --- a/src/packets.c +++ b/src/packets.c @@ -20,6 +20,9 @@ struct _inpkg_index inpkg_index[PKG_IN_INDEX_NUM]; int inpkg_index_pos = 0; +/*** + *** help function to get the playernumber from the address. + ***/ int get_player_nr (char *host, char *port) { @@ -27,15 +30,18 @@ get_player_nr (char *host, char *port) res; for (i = 0, res = -1; (i < MAX_PLAYERS && res == -1); i++) { - if (bman.players[i].net.addr.host[0] != 0) - if ((strcmp (bman.players[i].net.addr.host, host) == 0) && - (strcmp (bman.players[i].net.addr.port, port) == 0)) + if (players[i].net.addr.host[0] != 0) + if ((strcmp (players[i].net.addr.host, host) == 0) && + (strcmp (players[i].net.addr.port, port) == 0)) res = i; } return res; } +/*** + *** Packettype: error + ***/ void send_error (_net_addr * addr, char *text) { @@ -64,9 +70,10 @@ do_error (struct pkg_error *data, _net_addr * addr) }; -/* -update the playerinformations in the game -*/ +/*** + *** Packettype: pingack/pingreq + *** Update Playerinformation, add players into the current game + ***/ void do_playerid (struct pkg_playerid *p_id, _net_addr * addr) { @@ -93,7 +100,7 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr) if (((GT_MP_PTPM && (bman.state == GS_wait && addr->pl_nr != -1)) || // PTPM change setting (GT_MP_PTPS && addr->pl_nr == 0)) && p_id->pl_nr >= 0 && p_id->pl_nr < MAX_PLAYERS) { // PTPS and information send by PTPM - pl = &bman.players[p_id->pl_nr]; + pl = &players[p_id->pl_nr]; pl->state = p_id->state; if (p_id->pl_nr != bman.p_nr && PS_IS_used (pl->state)) @@ -126,13 +133,13 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr) /* find free player slot */ if (addr->pl_nr == -1) - for (i = 0; (i < MAX_PLAYERS && PS_IS_used (bman.players[i].state)); i++); + for (i = 0; (i < MAX_PLAYERS && PS_IS_used (players[i].state)); i++); else i = addr->pl_nr; if ((i < MAX_PLAYERS) && (i < bman.maxplayer)) { /* free in_pl slot ... fill in data */ - pl = &bman.players[i]; + pl = &players[i]; pl->state = PSF_used + PSF_net; if (strncmp (pl->name, p_id->name, LEN_PLAYERNAME) == 0) @@ -164,15 +171,15 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr) send_servermode (addr, i); send_mapinfo (addr); for (j = 0; j < MAX_PLAYERS; j++) - if (bman.players[j].net.addr.host[0] != 0 || bman.players[j].name[0] != 0) - send_playerid (addr, bman.players[j].name, - bman.players[j].net.addr.host, - bman.players[j].net.addr.port, j, - bman.players[j].gfx_nr, bman.players[i].net.flags); + if (players[j].net.addr.host[0] != 0 || players[j].name[0] != 0) + send_playerid (addr, players[j].name, + players[j].net.addr.host, + players[j].net.addr.port, j, + players[j].gfx_nr, players[i].net.flags); addr->pl_nr = i; for (j = 0, i = 0; i < bman.maxplayer; i++) - if (PS_IS_used (bman.players[i].state)) + if (PS_IS_used (players[i].state)) j++; if (bman.notifygamemaster) gamesrv_sendmode (bman.maxplayer, j); @@ -235,9 +242,9 @@ send_playerid (_net_addr * addr, char *name, char *pladdr, char *plport, p_id.pl_nr = pl_nr; p_id.gfx_nr = gfx_nr; if (pl_nr != -1) { - p_id.points = HTON16 (bman.players[pl_nr].points); - p_id.wins = HTON16 (bman.players[pl_nr].wins); - p_id.state = bman.players[pl_nr].state; + p_id.points = HTON16 (players[pl_nr].points); + p_id.wins = HTON16 (players[pl_nr].wins); + p_id.state = players[pl_nr].state; } else { p_id.points = 0; @@ -249,6 +256,9 @@ send_playerid (_net_addr * addr, char *name, char *pladdr, char *plport, }; +/*** + *** Packettype: servermode + ***/ void do_servermode (struct pkg_servermode *s_mod, _net_addr * addr) { @@ -259,19 +269,12 @@ do_servermode (struct pkg_servermode *s_mod, _net_addr * addr) if (s_mod->pl_nr >= 0 && s_mod->pl_nr < MAX_PLAYERS) { bman.p_nr = s_mod->pl_nr; - bman.players[bman.p_nr].state &= (0xFF - PSF_net); - strncpy (bman.players[s_mod->pl_nr].name, bman.playername, LEN_PLAYERNAME); + players[bman.p_nr].state &= (0xFF - PSF_net); + strncpy (players[s_mod->pl_nr].name, bman.playername, LEN_PLAYERNAME); } - if (s_mod->type == GT_multi) - bman.gametype = GT_multi; - else - bman.gametype = GT_single; - bman.state = s_mod->state; map.state = s_mod->mapstate; - if (s_mod->multitype == MT_ptpm) - bman.multitype = MT_ptps; bman.players_nr_s = s_mod->players; bman.lastwinner = s_mod->last_winner; @@ -314,6 +317,9 @@ send_servermode (_net_addr * addr, int pl_nr) }; +/*** + *** Packettype: field + ***/ void send_field (_net_addr * addr, int x, int y, _field * field) { @@ -330,11 +336,14 @@ send_field (_net_addr * addr, int x, int y, _field * field) if (x < 0 || x >= map.size.x || y < 0 || y >= map.size.y) return; - memcpy (&f_dat.field, &map.field[x][y], sizeof (_field)); - f_dat.field.frame = HTON16 (f_dat.field.frame); - f_dat.field.frameto = HTON32 (f_dat.field.frameto); - f_dat.field.ex_nr = HTON32 (f_dat.field.ex_nr); + memcpy (&f_dat.ex, &map.field[x][y].ex, 4*sizeof (_ex_field)); + + f_dat.type = map.field[x][y].type; + f_dat.mixframe = map.field[x][y].mixframe; + f_dat.special = map.field[x][y].special; + f_dat.frame = HTON16 (FTOI16 (map.field[x][y].frame)); + f_dat.ex_nr = HTON32 (map.field[x][y].ex_nr); send_pkg ((struct pkg *) &f_dat, addr); }; @@ -348,23 +357,28 @@ do_field (struct pkg_field *f_dat, _net_addr * addr) if (f_dat->x < map.size.x && f_dat->y < map.size.y) { /* convert the fielddata */ - memcpy (&map.field[f_dat->x][f_dat->y], &f_dat->field, sizeof (_field)); - map.field[f_dat->x][f_dat->y].frame = NTOH16 (map.field[f_dat->x][f_dat->y].frame); - map.field[f_dat->x][f_dat->y].frameto = NTOH32 (map.field[f_dat->x][f_dat->y].frameto); - map.field[f_dat->x][f_dat->y].ex_nr = NTOH32 (map.field[f_dat->x][f_dat->y].ex_nr); + map.field[f_dat->x][f_dat->y].type = f_dat->type; + map.field[f_dat->x][f_dat->y].mixframe = f_dat->mixframe; + map.field[f_dat->x][f_dat->y].special = f_dat->special; + memcpy (&map.field[f_dat->x][f_dat->y].ex, &f_dat->ex, 4*sizeof (_ex_field)); + map.field[f_dat->x][f_dat->y].frame = I16TOF (NTOH16 (f_dat->frame)); + map.field[f_dat->x][f_dat->y].ex_nr = NTOH32 (f_dat->ex_nr); } if (bman.state == GS_running) stonelist_add (f_dat->x, f_dat->y); - if (NTOH32 (f_dat->field.ex_nr) > bman.last_ex_nr) - bman.last_ex_nr = NTOH32 (f_dat->field.ex_nr); + if (NTOH32 (f_dat->ex_nr) > bman.last_ex_nr) + bman.last_ex_nr = NTOH32 (f_dat->ex_nr); d_printf ("do_field (%d,%d) ex_nr = %d, special = %d, type = %d\n", - f_dat->x, f_dat->y, NTOH32 (f_dat->field.ex_nr), - f_dat->field.special, f_dat->field.type); + f_dat->x, f_dat->y, NTOH32 (f_dat->ex_nr), + f_dat->special, f_dat->type); }; +/*** + *** Packettype: pingack/pingreq + ***/ void do_ping (struct pkg_ping *p_dat, _net_addr * addr) { @@ -373,18 +387,17 @@ do_ping (struct pkg_ping *p_dat, _net_addr * addr) if (p_dat->h.typ == PKG_pingack) /* ping was an answer */ - bman.players[addr->pl_nr].net.pingack = NTOH32 (p_dat->data); + players[addr->pl_nr].net.pingack = NTOH32 (p_dat->data); else /* send the answer */ send_ping (addr, NTOH32 (p_dat->data), PKG_pingack); d_printf ("do_ping pl_nr[%d] (%s:%s) req=%d, ack=%d\n", addr->pl_nr, - addr->host, addr->port, bman.players[addr->pl_nr].net.pingreq, - bman.players[addr->pl_nr].net.pingack); + addr->host, addr->port, players[addr->pl_nr].net.pingreq, + players[addr->pl_nr].net.pingack); }; - void send_ping (_net_addr * addr, int data, unsigned char typ) { @@ -409,14 +422,17 @@ send_ping (_net_addr * addr, int data, unsigned char typ) } d_printf ("send_ping Player[%d] (%s:%s) req=%d, ack=%d\n", addr->pl_nr, - addr->host, addr->port, bman.players[addr->pl_nr].net.pingreq, - bman.players[addr->pl_nr].net.pingack); + addr->host, addr->port, players[addr->pl_nr].net.pingreq, + players[addr->pl_nr].net.pingack); - bman.players[addr->pl_nr].net.timestamp = timestamp; /* we need to set it here, so we can check + players[addr->pl_nr].net.timestamp = timestamp; /* we need to set it here, so we can check for the timeout again */ }; +/*** + *** Packettype: playerdata + ***/ void send_playerdata (_net_addr * addr, int p_nr, _player * pl) { @@ -440,7 +456,7 @@ send_playerdata (_net_addr * addr, int p_nr, _player * pl) p_dat.wins = HTON16 (pl->wins); p_dat.points = HTON16 (pl->points); p_dat.dead_by = pl->dead_by; - p_dat.frame = pl->frame; + p_dat.frame = HTON16 (FTOI16 (pl->frame)); p_dat.p_nr = p_nr; send_pkg ((struct pkg *) &p_dat, addr); @@ -461,7 +477,7 @@ do_playerdata (struct pkg_playerdata *p_dat, _net_addr * addr) d_printf ("do_playerdata (From: %d) p_nr: %d\n", addr->pl_nr, p_dat->p_nr); bman.updatestatusbar = 1; // force an update - pl = &bman.players[p_dat->p_nr]; + pl = &players[p_dat->p_nr]; player_set_gfx (pl, p_dat->gfx_nr); if (bman.state == GS_running && bman.p_nr != p_dat->p_nr) { @@ -476,7 +492,7 @@ do_playerdata (struct pkg_playerdata *p_dat, _net_addr * addr) pl->d = p_dat->d; pl->bombs_n = p_dat->bombs_n; pl->range = p_dat->range; - pl->frame = p_dat->frame; + pl->frame = I16TOF (NTOH16 (p_dat->frame)); pl->state = p_dat->state; } @@ -487,7 +503,7 @@ do_playerdata (struct pkg_playerdata *p_dat, _net_addr * addr) if (PS_IS_alife (pl->state) && PS_IS_dead (p_dat->state)) { /* player just died */ if (p_dat->p_nr != p_dat->dead_by) { - bman.players[p_dat->dead_by].points++; + players[p_dat->dead_by].points++; net_game_send_player (p_dat->dead_by); } } @@ -506,32 +522,14 @@ do_playerdata (struct pkg_playerdata *p_dat, _net_addr * addr) if (bman.state == GS_update && PS_IS_used (p_dat->state)) bman.players_nr_s++; - if (bman.state == GS_update && bman.players[bman.p_nr].net.net_istep == 1) - bman.players[bman.p_nr].net.net_status = p_dat->p_nr; + if (bman.state == GS_update && players[bman.p_nr].net.net_istep == 1) + players[bman.p_nr].net.net_status = p_dat->p_nr; } -void -send_playermove (_net_addr * addr, int p_nr, _player * pl) -{ - struct pkg_playermove p_dat; - - p_dat.h.typ = PKG_playermove; - p_dat.h.len = HTON16 (sizeof (struct pkg_playermove)); - p_dat.h.flags = 0; - - p_dat.pos.x = HTON16 (FTOI16 (pl->pos.x)); - p_dat.pos.y = HTON16 (FTOI16 (pl->pos.y)); - p_dat.m = pl->m; - p_dat.d = pl->d; - p_dat.p_nr = p_nr; - p_dat.speed = pl->speed; - p_dat.tunnelto = HTON16 (pl->tunnelto); - - send_pkg ((struct pkg *) &p_dat, addr); -}; - - +/*** + *** Packettype: ill + ***/ void do_ill (struct pkg_ill *ill, _net_addr * addr) { @@ -545,11 +543,9 @@ do_ill (struct pkg_ill *ill, _net_addr * addr) return; for (i = 0; i < PI_max; i++) - bman.players[ill->pl_nr].ill[i].to = NTOH16 (ill->to[i]); + players[ill->pl_nr].ill[i].to = I16TOF (NTOH16 (ill->to[i])); }; - - void send_ill (_net_addr * addr, int p_nr, _player * pl) { @@ -562,11 +558,33 @@ send_ill (_net_addr * addr, int p_nr, _player * pl) ill.pl_nr = p_nr; for (i = 0; i < PI_max; i++) - ill.to[i] = HTON16 (pl->ill[i].to); + ill.to[i] = HTON16 (FTOI16 (pl->ill[i].to)); send_pkg ((struct pkg *) &ill, addr); }; +/*** + *** Packettype: playermove + ***/ +void +send_playermove (_net_addr * addr, int p_nr, _player * pl) +{ + struct pkg_playermove p_dat; + + p_dat.h.typ = PKG_playermove; + p_dat.h.len = HTON16 (sizeof (struct pkg_playermove)); + p_dat.h.flags = 0; + + p_dat.pos.x = HTON16 (FTOI16 (pl->pos.x)); + p_dat.pos.y = HTON16 (FTOI16 (pl->pos.y)); + p_dat.m = pl->m; + p_dat.d = pl->d; + p_dat.p_nr = p_nr; + p_dat.speed = pl->speed; + p_dat.tunnelto = HTON16 (pl->tunnelto); + + send_pkg ((struct pkg *) &p_dat, addr); +}; void do_playermove (struct pkg_playermove *p_dat, _net_addr * addr) @@ -580,7 +598,7 @@ do_playermove (struct pkg_playermove *p_dat, _net_addr * addr) return; /* check if the right player is sending the information */ - pl = &bman.players[p_dat->p_nr]; + pl = &players[p_dat->p_nr]; if (addr->pl_nr != 0 && addr->pl_nr != p_dat->p_nr) return; @@ -589,10 +607,13 @@ do_playermove (struct pkg_playermove *p_dat, _net_addr * addr) pl->speed = p_dat->speed; pl->pos.x = I16TOF (HTON16 (p_dat->pos.x)); pl->pos.y = I16TOF (HTON16 (p_dat->pos.y)); - pl->tunnelto = HTON16 (p_dat->tunnelto); + pl->tunnelto = I16TOF (HTON16 (p_dat->tunnelto)); } +/*** + *** Packettype: bombdata + ***/ void do_bombdata (struct pkg_bombdata *b_dat, _net_addr * addr) { @@ -613,7 +634,7 @@ do_bombdata (struct pkg_bombdata *b_dat, _net_addr * addr) I16TOF(NTOH16 (b_dat->x)), I16TOF(NTOH16 (b_dat->y)), b_dat->p_nr, b_dat->b_nr, NTOH32 (b_dat->ex_nr)); - bomb = &bman.players[b_dat->p_nr].bombs[b_dat->b_nr]; + bomb = &players[b_dat->p_nr].bombs[b_dat->b_nr]; if (bomb->state == BS_exploding) { d_printf ("do_bombdata ---> bomb is already exploding\n"); return; @@ -636,9 +657,9 @@ do_bombdata (struct pkg_bombdata *b_dat, _net_addr * addr) bomb->pos.y = I16TOF (NTOH16 (b_dat->y)); if (bomb->state != b_dat->state && bomb->state != BS_ticking) - bomb->to = NTOH32 (b_dat->to); /* only set if the bomb isn't already ticking - to make sure the timeout won't be resetted - by an old network packet */ + bomb->to = I32TOF (NTOH32 (b_dat->to)); /* only set if the bomb isn't already ticking + to make sure the timeout won't be resetted + by an old network packet */ map.bfield[(int)bomb->pos.x][(int)bomb->pos.y] = 1; // keep the bfield up to date @@ -657,7 +678,6 @@ do_bombdata (struct pkg_bombdata *b_dat, _net_addr * addr) bman.last_ex_nr = bomb->ex_nr; }; - void send_bombdata (_net_addr * addr, int p, int b, _bomb * bomb) { @@ -667,7 +687,7 @@ send_bombdata (_net_addr * addr, int p, int b, _bomb * bomb) b_dat.h.len = HTON16 (sizeof (struct pkg_bombdata)); b_dat.x = HTON16 (FTOI16 (bomb->pos.x)); b_dat.y = HTON16 (FTOI16 (bomb->pos.y)); - b_dat.to = HTON32 (bomb->to); + b_dat.to = HTON32 (FTOI32 (bomb->to)); b_dat.r = bomb->r; b_dat.ex_nr = HTON32 (bomb->ex_nr); b_dat.state = (bomb->mode << 4) | (bomb->state); @@ -681,7 +701,11 @@ send_bombdata (_net_addr * addr, int p, int b, _bomb * bomb) send_pkg ((struct pkg *) &b_dat, addr); }; -/* recive a request for some tunneldata or receive tunneldata */ + +/*** + *** Packettype: bombdata + *** recive a request for some tunneldata or receive tunneldata + ***/ void do_tunneldata (struct pkg_tunneldata *tun_pkg, _net_addr * addr) { @@ -693,17 +717,16 @@ do_tunneldata (struct pkg_tunneldata *tun_pkg, _net_addr * addr) && NTOH16 (tun_pkg->target.x) == -1) { send_tunneldata (addr, tun_pkg->tunnel_nr, map.tunnel[tun_pkg->tunnel_nr].x, map.tunnel[tun_pkg->tunnel_nr].y); - bman.players[addr->pl_nr].net.net_status = tun_pkg->tunnel_nr; - bman.players[addr->pl_nr].net.net_istep = 3; + players[addr->pl_nr].net.net_status = tun_pkg->tunnel_nr; + players[addr->pl_nr].net.net_istep = 3; } else if (addr->pl_nr == 0 && tun_pkg->tunnel_nr < GAME_MAX_TUNNELS) { map.tunnel[tun_pkg->tunnel_nr].x = NTOH16 (tun_pkg->target.x); map.tunnel[tun_pkg->tunnel_nr].y = NTOH16 (tun_pkg->target.y); - bman.players[bman.p_nr].net.net_status = tun_pkg->tunnel_nr; + players[bman.p_nr].net.net_status = tun_pkg->tunnel_nr; } }; - /* send a tunneldata request (x && y == -1) or send tunneldata */ void send_tunneldata (_net_addr * addr, int tunnelnr, int x, int y) @@ -726,6 +749,9 @@ send_tunneldata (_net_addr * addr, int tunnelnr, int x, int y) }; +/*** + *** Packettype: quit + ***/ void send_quit (_net_addr * addr, char *plhost, char * plport) { @@ -749,8 +775,6 @@ send_quit (_net_addr * addr, char *plhost, char * plport) send_pkg ((struct pkg *) &q_dat, addr); }; - - void do_quit (struct pkg_quit *q_dat, _net_addr * addr) { @@ -773,6 +797,10 @@ do_quit (struct pkg_quit *q_dat, _net_addr * addr) } }; + +/*** + *** Packettype: getfield + ***/ void send_getfield (_net_addr * addr, int line) { @@ -797,14 +825,17 @@ do_getfield (struct pkg_getfield *gf_dat, _net_addr * addr) if (addr->pl_nr != -1 && bman.state == GS_update && GT_MP_PTPM) { if (addr->pl_nr > 0 && addr->pl_nr < MAX_PLAYERS) { - bman.players[addr->pl_nr].net.net_status = gf_dat->line; - bman.players[addr->pl_nr].net.net_istep = 2; + players[addr->pl_nr].net.net_status = gf_dat->line; + players[addr->pl_nr].net.net_istep = 2; } } send_fieldline (addr, gf_dat->line); }; +/*** + *** Packettype: fieldline + ***/ void send_fieldline (_net_addr * addr, int line) { @@ -823,8 +854,7 @@ send_fieldline (_net_addr * addr, int line) for (i = 0; i < MAX_FIELDSIZE_X; i++) { f_dat.type[i] = map.field[i][line].type; f_dat.special[i] = map.field[i][line].special; - map.field[i][line].frame = 0; - map.field[i][line].frameto = 0; + map.field[i][line].frame = 0.0f; map.field[i][line].ex_nr = 0; for (j = 0; j < 4; j++) map.field[i][line].ex[j].frame = map.field[i][line].ex[j].count = 0; @@ -853,20 +883,22 @@ do_fieldline (struct pkg_fieldline *f_dat, _net_addr * addr) return; } - if (bman.state == GS_update && bman.players[bman.p_nr].net.net_istep == 2) - bman.players[bman.p_nr].net.net_status = f_dat->line; + if (bman.state == GS_update && players[bman.p_nr].net.net_istep == 2) + players[bman.p_nr].net.net_status = f_dat->line; for (i = 0; i < MAX_FIELDSIZE_X; i++) { map.field[i][f_dat->line].type = f_dat->type[i]; map.field[i][f_dat->line].special = f_dat->special[i]; - map.field[i][f_dat->line].frameto = 0; - map.field[i][f_dat->line].frame = 0; + map.field[i][f_dat->line].frame = 0.0f; for (d = 0; d < 4; d++) map.field[i][f_dat->line].ex[d].frame = map.field[i][f_dat->line].ex[d].count = 0; } }; +/*** + *** Packettype: getplayerdata + ***/ void send_getplayerdata (_net_addr * addr, int pl) { @@ -891,14 +923,17 @@ do_getplayerdata (struct pkg_getplayerdata *gp_dat, _net_addr * addr) if (addr->pl_nr != -1 && bman.state == GS_update && GT_MP_PTPM) { if (addr->pl_nr > 0 && addr->pl_nr < MAX_PLAYERS) { - bman.players[addr->pl_nr].net.net_status = gp_dat->pl_nr; - bman.players[addr->pl_nr].net.net_istep = 1; + players[addr->pl_nr].net.net_status = gp_dat->pl_nr; + players[addr->pl_nr].net.net_istep = 1; } } - send_playerdata (addr, gp_dat->pl_nr, &bman.players[gp_dat->pl_nr]); + send_playerdata (addr, gp_dat->pl_nr, &players[gp_dat->pl_nr]); }; +/*** + *** Packettype: playerstatus + ***/ void do_playerstatus (struct pkg_playerstatus *stat, _net_addr * addr) { @@ -917,16 +952,15 @@ do_playerstatus (struct pkg_playerstatus *stat, _net_addr * addr) return; } - bman.players[addr->pl_nr].net.net_status = stat->status; - bman.players[addr->pl_nr].net.net_istep = stat->net_istep; + players[addr->pl_nr].net.net_status = stat->status; + players[addr->pl_nr].net.net_istep = stat->net_istep; if (GT_MP_PTPM) for (i = 0; i < MAX_PLAYERS; i++) - if (bman.players[i].net.addr.host[0] != 0) - send_playerstatus (&bman.players[i].net.addr, stat->pl_nr, + if (players[i].net.addr.host[0] != 0) + send_playerstatus (&players[i].net.addr, stat->pl_nr, stat->net_istep, stat->status); }; - void send_playerstatus (_net_addr * addr, int pl_nr, int net_istep, int status) { @@ -946,6 +980,9 @@ send_playerstatus (_net_addr * addr, int pl_nr, int net_istep, int status) }; +/*** + *** Packettype: chat + ***/ void do_chat (struct pkg_chat *chat_pkg, _net_addr * addr) { @@ -974,6 +1011,9 @@ send_chat (_net_addr * addr, char *text) }; +/*** + *** Packettype: pkgack + ***/ void send_pkgack (_net_addr * addr, unsigned char typ, short int id) { @@ -999,8 +1039,11 @@ do_pkgack (struct pkg_pkgack *p_ack, _net_addr * addr) rscache_del (); }; -/* Player Special - * moves/bombs... whatever will be send as we use it */ + +/*** + *** Packettype: special + *** moves/bombs... whatever will be send as we use it + ***/ void do_special (struct pkg_special *sp_pkg, _net_addr * addr) { @@ -1015,7 +1058,7 @@ do_special (struct pkg_special *sp_pkg, _net_addr * addr) if (addr->pl_nr != 0 && addr->pl_nr != sp_pkg->pl_nr) return; - bman.players[sp_pkg->pl_nr].special.type = sp_pkg->typ; + players[sp_pkg->pl_nr].special.type = sp_pkg->typ; bman.last_ex_nr = NTOH32 (sp_pkg->ex_nr); special_use (sp_pkg->pl_nr); }; @@ -1036,6 +1079,9 @@ send_special (_net_addr * addr, int p_nr, int typ, int ex_nr) }; +/*** + *** Packettype: bcmservchat + ***/ void do_bcmservchat (struct pkg_bcmservchat *packet, _net_addr * addr) { @@ -1050,6 +1096,9 @@ do_bcmservchat (struct pkg_bcmservchat *packet, _net_addr * addr) }; +/*** + *** Packettype: mapinfo + ***/ void send_mapinfo (_net_addr * addr) { @@ -1111,6 +1160,13 @@ do_mapinfo (struct pkg_mapinfo *map_pkg, _net_addr * addr) }; +/*** + *** general packet handling, like check for double recived packets + *** network type. Autoreply on PKGF_ackreq and such things. + ***/ + +/* check incoming packet, if we have got the same already if so return != -1 + if we haven't got it yet, Add to the incache and return -1 */ int inpkg_check (unsigned char typ, short int id, _net_addr * addr) { @@ -1123,7 +1179,7 @@ inpkg_check (unsigned char typ, short int id, _net_addr * addr) inpkg_index[i].typ == typ && inpkg_index[i].id == id) pos = i; if (pos == -1) { - /* packet unknown ... add to index */ + /* add to index */ if (++inpkg_index_pos >= PKG_IN_INDEX_NUM) inpkg_index_pos = 0; @@ -1135,7 +1191,7 @@ inpkg_check (unsigned char typ, short int id, _net_addr * addr) }; - +/* sends the packet and if PKGF_ackreq is set add packet to the resendcache */ void send_pkg (struct pkg *packet, _net_addr * addr) { @@ -1166,14 +1222,18 @@ fwd_pkg (struct pkg *packet, _net_addr * addr) || packet->h.typ == PKG_bombdata || packet->h.typ == PKG_chat || packet->h.typ == PKG_special) for (pl = 1; pl < MAX_PLAYERS; pl++) - if (PS_IS_netplayer (bman.players[pl].state) - && ((bman.players[pl].net.flags & NETF_firewall) == NETF_firewall - || (bman.players[addr->pl_nr].net.flags & NETF_firewall) == + if (PS_IS_netplayer (players[pl].state) + && ((players[pl].net.flags & NETF_firewall) == NETF_firewall + || (players[addr->pl_nr].net.flags & NETF_firewall) == NETF_firewall) && pl != addr->pl_nr) - send_pkg (packet, &bman.players[pl].net.addr); + send_pkg (packet, &players[pl].net.addr); }; +/* entry point for all incoming network data. determinate packet type and + forward it to all needed functions, like inpkg_check()--> send answer if needed, + if we are the server then forward the packet if needed + and go into the do_PACKETTYP function */ int do_pkg (struct pkg *packet, _net_addr * addr) { @@ -1185,8 +1245,8 @@ do_pkg (struct pkg *packet, _net_addr * addr) } /* get the addr and set the ping timeout value */ addr->pl_nr = get_player_nr (addr->host, addr->port); - bman.players[addr->pl_nr].net.timestamp = timestamp; - bman.players[addr->pl_nr].net.pingreq = bman.players[addr->pl_nr].net.pingack + 5; + players[addr->pl_nr].net.timestamp = timestamp; + players[addr->pl_nr].net.pingreq = players[addr->pl_nr].net.pingack + 5; /* test if we have any important packet */ if (packet->h.flags & PKGF_ackreq && packet->h.typ != PKG_bcmservchat) @@ -1197,7 +1257,7 @@ do_pkg (struct pkg *packet, _net_addr * addr) /* we have got this packet already */ d_printf ("-----packet ignored\n"); if (addr->pl_nr >= 0 && addr->pl_nr < MAX_PLAYERS) - bman.players[addr->pl_nr].net.pkgopt.to_2sec++; + players[addr->pl_nr].net.pkgopt.to_2sec++; return 0; } diff --git a/src/pkgcache.c b/src/pkgcache.c index 88737a9..a046c84 100644 --- a/src/pkgcache.c +++ b/src/pkgcache.c @@ -1,3 +1,11 @@ +/* $Id: pkgcache.c,v 1.7 2003/11/08 06:27:59 stpohle Exp $ + * Resendcache work, We need this to resend lost packets over the network. + * we will keep every packet with the PKGF_ackreq flag as long as we haven't + * got any answer from the destination host. And resend the packet after a givin + * time. The maximum time for a resend is 10 times if we haven't got any reply + * by then we delete the packet from the cache. By doing this the game will not + * anymore sync. with all clients. + */ #include "bomberclone.h" #include "network.h" #include "packets.h" @@ -134,15 +142,14 @@ rscache_loop () /* send it again */ d_printf ("Data Send Timeout (%s:%s) Resend now Package Fill %d, Pos %d\n", - resend_cache.entry->addr.host, resend_cache.entry->addr.port, resend_cache.fill, - pos); + resend_cache.entry->addr.host, resend_cache.entry->addr.port, resend_cache.fill,pos); udp_send (bman.sock, (char *) &resend_cache.entry->packet, NTOH16 (resend_cache.entry->packet.h.len), &resend_cache.entry->addr.sAddr, bman.net_ai_family); resend_cache.entry->timestamp = timestamp; resend_cache.entry->retry++; if (resend_cache.entry->addr.pl_nr >= 0 && resend_cache.entry->addr.pl_nr < MAX_PLAYERS) - bman.players[resend_cache.entry->addr.pl_nr].net.pkgopt.to_2sec++; + players[resend_cache.entry->addr.pl_nr].net.pkgopt.to_2sec++; } if (timestamp - resend_cache.entry->timestamp >= timeout @@ -151,7 +158,7 @@ rscache_loop () resend_cache.entry->addr.host, resend_cache.entry->addr.port, resend_cache.fill, pos); if (resend_cache.entry->addr.pl_nr >= 0 && resend_cache.entry->addr.pl_nr < MAX_PLAYERS) - bman.players[resend_cache.entry->addr.pl_nr].net.pkgopt.to_2sec++; + players[resend_cache.entry->addr.pl_nr].net.pkgopt.to_2sec++; rscache_del (); } diff --git a/src/player.c b/src/player.c index 7be9d31..e6759ea 100644 --- a/src/player.c +++ b/src/player.c @@ -28,7 +28,7 @@ draw_player (_player * player) dest.y = gfx.offset.y + player->gfx->offset.y + player->pos.y * gfx.block.y; src.x = player->d * player->gfx->ani.w; - src.y = player->frame * player->gfx->ani.h; + src.y = (int)player->frame * player->gfx->ani.h; gfx_blit (player->gfx->ani.image, &src, gfx.screen, &dest, (player->pos.y * 256) + 128); @@ -80,29 +80,29 @@ restore_players_screen () ye; for (i = 0; i < MAX_PLAYERS; i++) - if ((PS_IS_used (bman.players[i].state)) && bman.players[i].old.x >= 0.0f ) { + if ((PS_IS_used (players[i].state)) && players[i].old.x >= 0.0f ) { - if (bman.players[i].old.x < 0.0f || bman.players[i].old.x >= map.size.x - || bman.players[i].old.y < 0.0f || bman.players[i].old.y >= map.size.y) + if (players[i].old.x < 0.0f || players[i].old.x >= map.size.x + || players[i].old.y < 0.0f || players[i].old.y >= map.size.y) d_printf ("FATAL: Restore Player out of range : playernr %d [%f,%f]\n", i, - bman.players[i].old.x, bman.players[i].old.y); + players[i].old.x, players[i].old.y); else { // start and end position for the stones to redraw X Position - if (CUTINT(bman.players[i].old.x) > 0.5f) { - x = bman.players[i].old.x; - xe = bman.players[i].old.x + 2; + if (CUTINT(players[i].old.x) > 0.5f) { + x = players[i].old.x; + xe = players[i].old.x + 2; } else { - x = bman.players[i].old.x - 1; - xe = bman.players[i].old.x + 1; + x = players[i].old.x - 1; + xe = players[i].old.x + 1; } if (x < 0) x = 0; if (xe >= map.size.x) xe = map.size.x - 1; // start and end position for the stones to redraw X Position - ys = bman.players[i].old.y - 1; - ye = bman.players[i].old.y + 1; + ys = players[i].old.y - 1; + ye = players[i].old.y + 1; if (ys < 0) ys = 0; if (ye >= map.size.y) @@ -120,7 +120,7 @@ restore_players_screen () void player_check_powerup (int p_nr) { - _player *p = &bman.players[p_nr]; + _player *p = &players[p_nr]; int fx = p->pos.x; int fy = p->pos.y; int ft, @@ -186,7 +186,7 @@ player_check_powerup (int p_nr) case FT_death: player_set_ilness (p, -1); bman.updatestatusbar = 1; - if (bman.gametype != GT_single) + if (GT_SP) net_game_send_ill (bman.p_nr); field_clear (fx, fy); break; @@ -227,7 +227,7 @@ stepmove_player (int pl_nr) { _point bomb1[MAX_PLAYERS * MAX_BOMBS], bomb2[MAX_PLAYERS * MAX_BOMBS]; - _player *p = &bman.players[pl_nr]; + _player *p = &players[pl_nr]; int i, j, f; @@ -365,14 +365,14 @@ move_player (int pl_nr) int oldd, stepsleft, speed; - _player *p = &bman.players[pl_nr]; + _player *p = &players[pl_nr]; oldd = p->d; if (p->tunnelto > 0) { p->tunnelto--; p->m = 0; - if (p->tunnelto <= 0 && GT_MP_PTP) + if (p->tunnelto <= 0 && GT_MP) net_game_send_playermove (bman.p_nr, 1); } else { @@ -388,7 +388,7 @@ move_player (int pl_nr) } /* network packet send control - send data if it's time to send or if we need to */ - if (bman.gametype != GT_single) + if (GT_MP) net_game_send_playermove (pl_nr, (p->old_m == 0)); if (p->tunnelto == 0 && (map.field[postofield(p->pos.x)][postofield(p->pos.y)].type != FT_tunnel || !field_check_alldirs (postofield(p->pos.x), postofield(p->pos.y), FT_nothing))) @@ -396,7 +396,7 @@ move_player (int pl_nr) } /* the player just stopt moving so send data */ - if (bman.gametype != GT_single && p->m == 0 && p->old_m != 0) + if (GT_MP && p->m == 0 && p->old_m != 0) net_game_send_playermove (pl_nr, 1); p->old_m = p->m; // save the old state p->m = 0; @@ -421,7 +421,7 @@ void player_drop_bomb (int pl_nr) { - _player *player = &bman.players[pl_nr]; + _player *player = &players[pl_nr]; _bomb *bomb = NULL; int i; _point bombs[MAX_PLAYERS * MAX_BOMBS]; @@ -442,19 +442,19 @@ player_drop_bomb (int pl_nr) bomb->r = player->range; if (player->special.type == SP_trigger) { bomb->state = BS_trigger; - bomb->to = SPECIAL_TRIGGER_TIMEOUT * TIME_FACTOR; // 5 Secs * 200 + bomb->to = SPECIAL_TRIGGER_TIMEOUT; } else { bomb->state = BS_ticking; - bomb->to = BOMB_TIMEOUT * TIME_FACTOR; // 5 Secs * 200 + bomb->to = BOMB_TIMEOUT; } bomb->mode = BM_normal; bomb->ex_nr = -1; map.bfield[(int)bomb->pos.x][(int)bomb->pos.y] = 1; - if (bman.gametype != GT_single) { + if (GT_MP) { net_game_send_bomb (pl_nr, i); if (GT_MP_PTPS) - bomb->to = bomb->to + ((2 * RESENDCACHE_RETRY) / TIME_FACTOR); + bomb->to = bomb->to + 2 * RESENDCACHE_RETRY; } snd_play (SND_bombdrop); @@ -472,11 +472,11 @@ get_player_on (float x, float y, int pl_nr[]) p; for (i = 0, p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_alife (bman.players[p].state) && bman.players[p].tunnelto <= 0) { - if ((bman.players[p].pos.x - EXPLOSION_SAVE_DISTANCE) > x - 1.0f - && (bman.players[p].pos.x + EXPLOSION_SAVE_DISTANCE) < x + 1.0f - && (bman.players[p].pos.y - EXPLOSION_SAVE_DISTANCE) > y - 1.0f - && (bman.players[p].pos.y + EXPLOSION_SAVE_DISTANCE) < y + 1.0f) { + if (PS_IS_alife (players[p].state) && players[p].tunnelto <= 0) { + if ((players[p].pos.x - EXPLOSION_SAVE_DISTANCE) > x - 1.0f + && (players[p].pos.x + EXPLOSION_SAVE_DISTANCE) < x + 1.0f + && (players[p].pos.y - EXPLOSION_SAVE_DISTANCE) > y - 1.0f + && (players[p].pos.y + EXPLOSION_SAVE_DISTANCE) < y + 1.0f) { pl_nr[i] = p; i++; } @@ -495,11 +495,11 @@ player_died (_player * player, signed char dead_by) bman.updatestatusbar = 1; // force an update if (PS_IS_alife (player->state) && dead_by >= 0 && dead_by < MAX_PLAYERS) if (bman.p_nr != dead_by) - bman.players[dead_by].points++; + players[dead_by].points++; player->frame = 0; player->state &= (0xFF - PSF_alife); player->dead_by = dead_by; - if (GT_MP_PTP) + if (GT_MP) net_game_send_player (bman.p_nr); snd_play (SND_dead); }; @@ -510,8 +510,8 @@ draw_players () { int p; for (p = 0; p < MAX_PLAYERS; p++) { - if (PS_IS_playing (bman.players[p].state) && bman.players[p].tunnelto <= 0) - draw_player (&bman.players[p]); + if (PS_IS_playing (players[p].state) && players[p].tunnelto <= 0) + draw_player (&players[p]); } }; @@ -523,25 +523,16 @@ player_animation (_player * player) return; if (PS_IS_alife (player->state)) { - if (player->frame < player->gfx->ani.frames - && (player->frameto <= 0 || player->frameto > ANI_PLAYERTIMEOUT)) { - player->frameto = ANI_PLAYERTIMEOUT; - player->frame++; - } - if (player->frame >= player->gfx->ani.frames) - player->frame = 0; + if ((int)player->frame < player->gfx->ani.frames) + player->frame += timefactor; + if ((int)player->frame >= player->gfx->ani.frames) + player->frame = 0.0f; } if (PS_IS_dead (player->state)) { - if (player->frame < gfx.dead.frames - && (player->frameto <= 0 || player->frameto > ANI_PLAYERTIMEOUT * 2)) { - player->frameto = ANI_PLAYERTIMEOUT * 2; - player->frame++; - } + if ((int)player->frame < gfx.dead.frames) + player->frame += timefactor; } - - if (player->frameto > 0) - player->frameto--; }; @@ -550,9 +541,10 @@ dead_playerani () { int i, b = 0; + for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_dead (bman.players[i].state)) { - player_animation (&bman.players[i]); + if (PS_IS_dead (players[i].state)) { + player_animation (&players[i]); b++; } @@ -597,7 +589,7 @@ player_calcpos () p; for (p = 0; p < MAX_PLAYERS; p++) { - pl = &bman.players[p]; + pl = &players[p]; if (PS_IS_netplayer (pl->state) && PS_IS_alife (pl->state) && pl->m != 0) { oldm = pl->m; @@ -621,40 +613,36 @@ player_ilness_loop (int pl_nr) int pl[MAX_PLAYERS + 1]; /* do the illness for the network players */ - if (GT_MP_PTP) { + if (GT_MP) { for (pnr = 0; pnr < MAX_PLAYERS; pnr++) - if (pnr != pl_nr && PS_IS_alife (bman.players[pnr].state)) { - p = &bman.players[pnr]; + if (pnr != pl_nr && PS_IS_alife (players[pnr].state)) { + p = &players[pnr]; for (type = 0; type < PI_max; type++) if (p->ill[type].to > 0) { - p->ill[type].to--; - p->illframeto--; - if (p->illframeto <= 0 || p->illframeto > ANI_PLAYERILLTIMEOUT) { - p->illframeto = ANI_PLAYERILLTIMEOUT; - p->illframe++; + p->ill[type].to -= timediff; + p->illframe += timefactor; if (p->illframe < 0 || p->illframe >= gfx.ill.frames) p->illframe = 0; - } } } } /* check if we have contact with an other ill player */ - p = &bman.players[pl_nr]; + p = &players[pl_nr]; get_player_on (p->pos.x, p->pos.y, pl); for (i = 0; (pl[i] != -1 && i < MAX_PLAYERS); i++) if (pl[i] != pl_nr) { send = 0; for (type = 0; type < PI_max; type++) { - if (bman.players[pl[i]].ill[type].to > p->ill[type].to) { + if (players[pl[i]].ill[type].to > p->ill[type].to) { tmp = p->ill[type].to; player_set_ilness (p, type); - p->ill[type].to = bman.players[pl[i]].ill[type].to; + p->ill[type].to = players[pl[i]].ill[type].to; if (tmp <= 0) send = 1; } } - if (send != 0 && GT_MP_PTP) + if (send != 0 && GT_MP) net_game_send_ill (pl_nr); } @@ -665,14 +653,10 @@ player_ilness_loop (int pl_nr) if (p->ill[type].to == 0) player_clear_ilness (p, type); else { - p->illframeto--; - if (p->illframeto <= 0 || p->illframeto > ANI_PLAYERILLTIMEOUT) { - p->illframeto = ANI_PLAYERILLTIMEOUT; - p->illframe++; - if (p->illframe < 0 || p->illframe >= gfx.ill.frames) - p->illframe = 0; - } - + p->illframe += timediff; + if (p->illframe < 0 || p->illframe >= gfx.ill.frames) + p->illframe = 0; + if (type == PI_keys) { /* switch direction for player key illness */ if (p->m > 0) @@ -721,7 +705,7 @@ player_set_ilness (_player * p, int t) else p->ill[type].data = p->speed; } - p->speed = 6; + p->speed = ILL_SLOWSPEED; break; case PI_fast: if (p->ill[type].to == 0) { @@ -733,7 +717,7 @@ player_set_ilness (_player * p, int t) p->ill[type].data = p->speed; } - p->speed = 150; + p->speed = ILL_FASTSPEED; break; case PI_range: if (p->ill[type].to == 0) @@ -747,7 +731,7 @@ player_set_ilness (_player * p, int t) break; } bman.updatestatusbar = 1; - p->ill[type].to += TIME_FACTOR * IL_TIMEOUT; + p->ill[type].to += ILL_TIMEOUT; }; @@ -770,7 +754,7 @@ player_clear_ilness (_player * p, int type) break; } p->ill[type].to = 0; - if (bman.gametype != GT_single) + if (GT_MP) net_game_send_ill (bman.p_nr); bman.updatestatusbar = 1; }; diff --git a/src/single.c b/src/single.c index 917a588..307ce03 100644 --- a/src/single.c +++ b/src/single.c @@ -1,4 +1,4 @@ -/* $Id: single.c,v 1.45 2003/11/05 12:15:25 stpohle Exp $ */ +/* $Id: single.c,v 1.46 2003/11/08 06:27:59 stpohle Exp $ */ /* single player */ #include "basic.h" @@ -14,20 +14,20 @@ single_game_new () // set players variables, only the variables which depend on single games for (p = 0; p < MAX_PLAYERS; p++) { - if (PS_IS_used (bman.players[p].state)) { + if (PS_IS_used (players[p].state)) { bman.players_nr_s++; bman.players_nr++; - bman.players[p].state = PSF_used + PSF_alife + PSF_playing; + players[p].state = PSF_used + PSF_alife + PSF_playing; } else - bman.players[p].state = 0; + players[p].state = 0; } - bman.players[bman.p_nr].state = PSFM_alife; - player_set_gfx (&bman.players[bman.p_nr], bman.players[bman.p_nr].gfx_nr); + players[bman.p_nr].state = PSFM_alife; + player_set_gfx (&players[bman.p_nr], players[bman.p_nr].gfx_nr); bman.last_ex_nr = 1; - bman.gametype = GT_single; + bman.sock = -1; bman.state = GS_running; }; @@ -539,7 +539,7 @@ ai_checknewpos (_point pos, int d) /* create a giving number of ai players */ void -single_create_ai (int players) +single_create_ai (int num_players) { int p, count, @@ -547,11 +547,11 @@ single_create_ai (int players) i = 0; _player *pl; - for (count = 0; count < players; count++) { + for (count = 0; count < num_players; count++) { /* find free players */ for (pl = NULL, p = 0; (pl == NULL && p < MAX_PLAYERS); p++) - if (!(PS_IS_used (bman.players[p].state))) { - pl = &bman.players[p]; + if (!(PS_IS_used (players[p].state))) { + pl = &players[p]; sprintf (pl->name, "AI %d", count + 1); pl->state |= PSF_used + PSF_alife + PSF_playing; do { @@ -576,15 +576,15 @@ single_playergame () /* delete player from the game */ for (p = 0; p < MAX_PLAYERS; p++) { - bman.players[p].points = 0; - bman.players[p].wins = 0; - bman.players[p].state = 0; - bman.players[p].gfx_nr = -1; - bman.players[p].gfx = NULL; + players[p].points = 0; + players[p].wins = 0; + players[p].state = 0; + players[p].gfx_nr = -1; + players[p].gfx = NULL; } for (bman.p_nr = -1, p = 0; (bman.p_nr == -1 && p < MAX_PLAYERS); p++) - if (!(PS_IS_used (bman.players[p].state))) + if (!(PS_IS_used (players[p].state))) bman.p_nr = p; if (bman.p_nr >= MAX_PLAYERS) { @@ -592,11 +592,11 @@ single_playergame () exit (1); } - if ((bman.players[bman.p_nr].gfx_nr = single_select_player ()) == -1) + if ((players[bman.p_nr].gfx_nr = single_select_player ()) == -1) return; - bman.players[bman.p_nr].state = PSF_used + PSF_alife + PSF_playing; - strncpy (bman.players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME); + players[bman.p_nr].state = PSF_used + PSF_alife + PSF_playing; + strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME); single_create_ai (bman.ai_players); bman.state = GS_ready; @@ -623,8 +623,8 @@ single_loop () _airunaway rawdir; for (p = 0; p < MAX_PLAYERS; p++) - if (p != bman.p_nr && PS_IS_alife (bman.players[p].state)) { - pl = &bman.players[p]; + if (p != bman.p_nr && PS_IS_alife (players[p].state)) { + pl = &players[p]; i = ai_checkpos (pl, &plpos); @@ -672,7 +672,7 @@ single_loop () }; -/* singleplayer menü with some options you can make */ +/* singleplayer menü with some options you can make */ void single_menu () { diff --git a/src/special.c b/src/special.c index 1eafcff..b5bade9 100644 --- a/src/special.c +++ b/src/special.c @@ -1,4 +1,4 @@ -/* $Id: special.c,v 1.27 2003/11/05 12:15:25 stpohle Exp $ */ +/* $Id: special.c,v 1.28 2003/11/08 06:27:59 stpohle Exp $ */ /* special.c - procedues to control the specials */ #include "bomberclone.h" @@ -11,7 +11,7 @@ special_trigger (int p_nr) z = 0, ex_nr = bman.last_ex_nr; - _player *p = &bman.players[p_nr]; + _player *p = &players[p_nr]; // all triggered bombs will explode for (i = 0; i < MAX_BOMBS; i++) @@ -21,7 +21,7 @@ special_trigger (int p_nr) z++; // count the bombs which will explode } - if (p_nr == bman.p_nr && GT_MP_PTP && z) + if (p_nr == bman.p_nr && GT_MP && z) net_game_send_special (p_nr, ex_nr); if (z) { @@ -37,7 +37,7 @@ void special_row (int p_nr) { _bomb *b = NULL; - _player *p = &bman.players[p_nr]; + _player *p = &players[p_nr]; int x = (int)p->pos.x, y = (int)p->pos.y, dx = 0, @@ -76,12 +76,12 @@ special_row (int p_nr) b->ex_nr = -1; b->pos.x = x; b->pos.y = y; - b->to = BOMB_TIMEOUT * TIME_FACTOR + t; // 5 Secs * 200 + b->to = BOMB_TIMEOUT + t; // 5 Secs * 200 map.bfield[x][y] = 1; - if (bman.gametype != GT_single) { + if (GT_MP) { net_game_send_bomb (p_nr, i); if (GT_MP_PTPS) - b->to = b->to + ((2 * RESENDCACHE_RETRY) / TIME_FACTOR); + b->to = b->to + 2 * RESENDCACHE_RETRY; } } } @@ -92,7 +92,7 @@ void special_liquidmoved (int p_nr) { _bomb *b = NULL; - _player *p = &bman.players[p_nr]; + _player *p = &players[p_nr]; _point bombs[MAX_PLAYERS * MAX_BOMBS]; int x = (int)p->pos.x, @@ -138,7 +138,7 @@ special_liquidmoved (int p_nr) get_bomb_on (x, y, bombs); // move all bombs on that field (there should be only 1) for (i = 0; bombs[i].x != -1; i++) { - b = &bman.players[bombs[i].x].bombs[bombs[i].y]; + b = &players[bombs[i].x].bombs[bombs[i].y]; if (b->state != BS_exploding) { b->dest.x = dx; b->dest.y = dy; @@ -150,7 +150,7 @@ special_liquidmoved (int p_nr) map.bfield[x][y] = 0; map.bfield[x1][y1] = 1; stonelist_add (x, y); - if (bman.gametype != GT_single) { + if (GT_MP) { net_game_send_bomb (bombs[i].x, bombs[i].y); } } @@ -162,7 +162,7 @@ void special_push (int p_nr) { _bomb *b = NULL; - _player *p = &bman.players[p_nr]; + _player *p = &players[p_nr]; _point bombs[MAX_PLAYERS * MAX_BOMBS]; int x = (int)p->pos.x, @@ -208,7 +208,7 @@ special_push (int p_nr) get_bomb_on (x , y , bombs); // move all bombs on that field (there should be only 1) for (i = 0; bombs[i].x != -1; i++) { - b = &bman.players[bombs[i].x].bombs[bombs[i].y]; + b = &players[bombs[i].x].bombs[bombs[i].y]; if (b->state != BS_exploding) { b->dest.x = dx; b->dest.y = dy; @@ -217,7 +217,7 @@ special_push (int p_nr) map.bfield[x][y] = 0; map.bfield[x1][y1] = 1; stonelist_add (x, y); - if (bman.gametype != GT_single) { + if (GT_MP) { net_game_send_bomb (bombs[i].x, bombs[i].y); } } @@ -228,7 +228,7 @@ special_push (int p_nr) void special_pickup (int p_nr, int s_nr) { - _special *s = &bman.players[p_nr].special; + _special *s = &players[p_nr].special; s->to = 0; s->numuse = 0; @@ -236,15 +236,15 @@ special_pickup (int p_nr, int s_nr) switch (s_nr) { case SP_trigger: s->numuse = SPECIAL_TRIGGER_NUMUSE; - s->to = SPECIAL_TRIGGER_TIME * TIME_FACTOR; + s->to = SPECIAL_TRIGGER_TIME; break; case SP_row: - s->to = SPECIAL_ROW_TIME * TIME_FACTOR; + s->to = SPECIAL_ROW_TIME; break; case SP_push: case SP_moved: case SP_liquid: - s->to = SPECIAL_PUSH_TIME * TIME_FACTOR; + s->to = SPECIAL_PUSH_TIME; break; } @@ -255,22 +255,22 @@ special_pickup (int p_nr, int s_nr) void special_clear (int p_nr) { - if (bman.players[p_nr].special.type == SP_trigger) { + if (players[p_nr].special.type == SP_trigger) { _bomb *bomb; int i; /* put all bombs to normal and if the timeout is higher as usual set it to normal */ for (i = 0; i < MAX_BOMBS; i++) { - bomb = &bman.players[p_nr].bombs[i]; + bomb = &players[p_nr].bombs[i]; if (bomb->state == BS_trigger) { bomb->state = BS_ticking; - if (bomb->to > BOMB_TIMEOUT * TIME_FACTOR) - bomb->to = BOMB_TIMEOUT * TIME_FACTOR; // 5 Secs * 200 + if (bomb->to > BOMB_TIMEOUT) + bomb->to = BOMB_TIMEOUT; } } } - bman.players[p_nr].special.type = 0; + players[p_nr].special.type = 0; bman.updatestatusbar = 1; } @@ -282,7 +282,7 @@ special_loop () int p_nr; for (p_nr = 0; p_nr < MAX_PLAYERS; p_nr++) { - s = &bman.players[p_nr].special; + s = &players[p_nr].special; if (s->use) { switch (s->type) { @@ -290,25 +290,25 @@ special_loop () special_trigger (p_nr); break; case SP_row: - if (bman.players[p_nr].m) + if (players[p_nr].m) special_row (p_nr); break; case SP_push: - if (bman.players[p_nr].m) + if (players[p_nr].m) special_push (p_nr); break; case SP_liquid: case SP_moved: - if (bman.players[p_nr].m) + if (players[p_nr].m) special_liquidmoved (p_nr); break; } s->use = 0; } - if (s->type && s->to) { - s->to--; - if (!s->to) + if (s->type && (s->to > 0.0f)) { + s->to -= timediff; + if (s->to <= 0.0f) special_clear (p_nr); } } @@ -318,5 +318,5 @@ special_loop () void special_use (int p_nr) { - bman.players[p_nr].special.use = 1; + players[p_nr].special.use = 1; } diff --git a/src/tileset.c b/src/tileset.c index 83e8a83..17d3d4c 100644 --- a/src/tileset.c +++ b/src/tileset.c @@ -1,4 +1,4 @@ -/* $Id: tileset.c,v 1.9 2003/08/29 23:50:39 stpohle Exp $ */ +/* $Id: tileset.c,v 1.10 2003/11/08 06:27:59 stpohle Exp $ */ /* load and select tilesets */ #include "bomberclone.h" @@ -55,11 +55,11 @@ tileset_load (char *tilesetname) /* Calculate the Best Size of the Images */ gfx.block.x = gfx.res.x / (map.size.x + 1); - if (GT_MP_PTP && gfx.res.y == 480) + if (GT_MP && gfx.res.y == 480) gfx.block.y = (gfx.res.y - 120) / (map.size.y + 1); - else if (GT_MP_PTP && gfx.res.y == 600) + else if (GT_MP && gfx.res.y == 600) gfx.block.y = (gfx.res.y - 140) / (map.size.y + 1); - else if (GT_MP_PTP && gfx.res.y > 600) + else if (GT_MP && gfx.res.y > 600) gfx.block.y = (gfx.res.y - 160) / (map.size.y + 1); else gfx.block.y = (gfx.res.y - 48) / (map.size.y + 1);