diff --git a/src/basic.h b/src/basic.h index 6fe8cb8..113dcfd 100644 --- a/src/basic.h +++ b/src/basic.h @@ -149,7 +149,7 @@ enum _playerstateflags { #define PSFM_alife (PSF_used + PSF_alife + PSF_playing) #define PS_IS_dead(__ps) (((__ps) & (PSFM_alife)) == (PSFM_used)) #define PS_IS_alife(__ps) (((__ps) & (PSFM_alife)) == (PSFM_alife)) -#define PS_IS_netplayer(__ps) (((__ps) & (PSFM_alife + PSF_net)) == (PSF_net + PSFM_alife)) +#define PS_IS_netplayer(__ps) (((__ps) & (PSFM_used + PSF_net)) != 0) #define PS_IS_playing(__ps) (((__ps) & (PSFM_used)) == (PSFM_used)) #define PS_IS_used(__ps) (((__ps) & (PSFM_used)) != 0) diff --git a/src/network.c b/src/network.c index 705f238..f5c392b 100644 --- a/src/network.c +++ b/src/network.c @@ -1,4 +1,4 @@ -/* $Id: network.c,v 1.20 2003/05/13 22:10:58 patty21 Exp $ */ +/* $Id: network.c,v 1.21 2003/05/13 22:38:15 stpohle Exp $ */ /* network routines. */ @@ -537,12 +537,12 @@ net_game_send_player (int p_nr) if (GT_MP_PTPM) { for (p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_used (bman.players[p].state) && p != bman.p_nr) + 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]); } else if (p_nr == bman.p_nr) { for (p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_used (bman.players[p].state) && p != bman.p_nr) + 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]); } }; @@ -555,7 +555,7 @@ net_game_send_playermove (int p_nr, int mustsend) _player *pl; for (p = 0; p < MAX_PLAYERS; p++) - if (PS_IS_used (bman.players[p].state) && p != bman.p_nr) { + if (PS_IS_netplayer (bman.players[p].state) && p != bman.p_nr) { pl = &bman.players[p_nr]; pl->net.pkgopt.send_to--; @@ -583,7 +583,7 @@ net_game_send_bomb (int p, int b) return; for (pl = 0; pl < MAX_PLAYERS; pl++) - if (PS_IS_used (bman.players[pl].state) && pl != bman.p_nr) + if (PS_IS_netplayer (bman.players[pl].state) && pl != bman.p_nr) send_bombdata (&bman.players[pl].net.addr, p, b, &bman.players[p].bombs[b]); }; @@ -599,7 +599,7 @@ net_game_send_field (int x, int y) return; for (pl = 0; pl < MAX_PLAYERS; pl++) - if (PS_IS_used (bman.players[pl].state) && pl != bman.p_nr) + if (PS_IS_netplayer (bman.players[pl].state) && pl != bman.p_nr) send_field (&bman.players[pl].net.addr, x, y, &bman.field[x][y]); }; @@ -631,7 +631,7 @@ net_delplayer (int pl_nr) if (GT_MP_PTPM && (GS_WAITRUNNING || bman.state == GS_update)) { for (i = 1; i < MAX_PLAYERS; i++) - if (PS_IS_used (bman.players[i].state)) { + if (PS_IS_netplayer (bman.players[i].state)) { send_quit (&bman.players[i].net.addr, host, port); j++; } @@ -669,7 +669,7 @@ net_send_servermode () int i; for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_used (bman.players[i].state) && i != bman.p_nr) + if (PS_IS_netplayer (bman.players[i].state) && i != bman.p_nr) send_servermode (&bman.players[i].net.addr, i); if (GT_MP_PTPM && bman.notifygamemaster) /* send notification the the gamemaster */ @@ -686,7 +686,7 @@ net_send_players () j; for (j = 0; j < MAX_PLAYERS; j++) - if (PS_IS_used (bman.players[j].state) && j != bman.p_nr) + if (PS_IS_netplayer (bman.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, @@ -702,7 +702,7 @@ net_send_chat (char *text, signed char notigamesrv) int i; for (i = 0; i < MAX_PLAYERS; i++) - if (PS_IS_used (bman.players[i].state) && i != bman.p_nr) + if (PS_IS_netplayer (bman.players[i].state) && i != bman.p_nr) send_chat (&bman.players[i].net.addr, text); if (GT_MP_PTPM && bman.notifygamemaster && notigamesrv == 1) /* send notification the the gamemaster */ @@ -718,7 +718,7 @@ 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_used (bman.players[i].state) && i != bman.p_nr) + if (PS_IS_netplayer (bman.players[i].state) && i != bman.p_nr) send_ill (&bman.players[i].net.addr, p_nr, &bman.players[p_nr]); }; @@ -779,3 +779,21 @@ net_new_game () bman.players[bman.p_nr].state &= (0xFF - PSF_net); // we are the local player bman.last_ex_nr = 1; }; + + + +/* send special use elements into the network */ +void +net_game_send_special (int pl_nr) +{ + int pl; + + d_printf ("Send Special Data %d\n", pl_nr); + + if (pl_nr < 0 || pl_nr >= MAX_PLAYERS) + return; + + for (pl = 0; pl < MAX_PLAYERS; pl++) + if (PS_IS_netplayer (bman.players[pl].state) && pl != pl_nr) + send_special (&bman.players[pl].net.addr, pl_nr, bman.players[pl_nr].special); +}; diff --git a/src/network.h b/src/network.h index 4ba7201..233c298 100644 --- a/src/network.h +++ b/src/network.h @@ -74,6 +74,7 @@ extern void net_game_send_player (int p_nr); extern void net_game_send_playermove (int p_nr, int mustsend); extern void net_game_send_bomb (int p, int b); extern void net_game_send_field (int x, int y); +extern void net_game_send_special (int pl_nr); extern void net_game_fillsockaddr (); extern void net_game_send_ill (int p_nr); extern void net_delplayer (int pl_nr); diff --git a/src/player.c b/src/player.c index 937ef5b..55070f6 100644 --- a/src/player.c +++ b/src/player.c @@ -505,7 +505,7 @@ player_calcpos () for (p = 0; p < MAX_PLAYERS; p++) { pl = &bman.players[p]; - if (PS_IS_netplayer (pl->state) && pl->m != 0) { + if (PS_IS_netplayer (pl->state) && PS_IS_alife (pl->state) && pl->m != 0) { if (pl->speeddat == 0 || pl->speed == 1 || pl->speed == 3) pl->speeddat = 1;