diff --git a/include/bomberclone.h b/include/bomberclone.h index 18450d1..eabd641 100644 --- a/include/bomberclone.h +++ b/include/bomberclone.h @@ -1,4 +1,4 @@ -/* $Id: bomberclone.h,v 1.18 2004/01/25 19:36:44 stpohle Exp $ */ +/* $Id: bomberclone.h,v 1.19 2004/01/27 21:13:40 stpohle Exp $ */ /* bomberclone.h */ #ifndef _BOMBERCLONE_H_ @@ -216,6 +216,8 @@ extern void player_check_powerup (int p_nr); extern void player_set_gfx (_player *p, signed char gfx_nr); extern int player_findfreebomb (_player *player); extern int player_checkpos (int x, int y); +extern void player_checkdeath (int pnr); + // for the bomb.. extern int bomb_loop (); diff --git a/include/network.h b/include/network.h index 1419b5e..ddb6aee 100644 --- a/include/network.h +++ b/include/network.h @@ -1,4 +1,4 @@ -/* $Id: network.h,v 1.11 2004/01/25 20:32:41 stpohle Exp $ +/* $Id: network.h,v 1.12 2004/01/27 21:13:42 stpohle Exp $ * network.h file... for everything what have to do with the network stuff */ @@ -110,6 +110,7 @@ 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, int ex_nr); extern void net_game_send_dropitems (int pl_nr, _flyingitem **fiptr, int cnt); +extern void net_game_send_respawn (int pl_nr, _point pos); extern void net_game_fillsockaddr (); extern void net_game_send_ill (int p_nr); extern void net_delplayer (int pl_nr); diff --git a/include/packets.h b/include/packets.h index fc387f3..49fdf12 100644 --- a/include/packets.h +++ b/include/packets.h @@ -24,7 +24,8 @@ enum _network_data { PKG_special, PKG_mapinfo, PKG_tunneldata, - PKG_dropitem + PKG_dropitem, + PKG_respawn }; @@ -234,6 +235,14 @@ struct pkg_ill { }; +struct pkg_respawn { + struct pkgheader h; + signed char pl_nr; + signed char x; + signed char y; +}; + + struct pkg_getplayerdata { struct pkgheader h; signed char pl_nr; @@ -323,7 +332,8 @@ extern void do_special (struct pkg_special *sp_pkg, _net_addr *addr); extern void do_mapinfo (struct pkg_mapinfo *map_pkg, _net_addr *addr); extern void do_tunneldata (struct pkg_tunneldata *tun_pkg, _net_addr *addr); extern void do_dropitems (struct pkg_dropitem *di_pkg, _net_addr *addr); - +extern void do_respawn (struct pkg_respawn *r_pkg, _net_addr *addr); + extern void send_pkg (struct pkg *packet, _net_addr *addr); extern void send_playerid (_net_addr *addr, char *name, char *pladdr, char *plport, int p_nr, int gfx_nr, signed char netflags); extern void send_servermode (_net_addr *addr, int pl_nr); @@ -346,6 +356,7 @@ extern void send_special (_net_addr *addr, int p_nr, int typ, int ex_nr); extern void send_mapinfo (_net_addr *addr); extern void send_tunneldata (_net_addr *addr, int tunnelnr, int x, int y); extern void send_dropitems (_net_addr *addr, int pl_nr, _flyingitem **fitems, int cnt); +extern void send_respawn (_net_addr * addr, int plnr, _point pos); extern void fwd_pkg (struct pkg *packet, _net_addr *addr); diff --git a/src/game.c b/src/game.c index 8e2ea37..6052e4a 100644 --- a/src/game.c +++ b/src/game.c @@ -1,4 +1,4 @@ -/* $Id: game.c,v 1.72 2004/01/27 20:44:03 stpohle Exp $ +/* $Id: game.c,v 1.73 2004/01/27 21:13:44 stpohle Exp $ game.c - procedures for the game. */ #include @@ -224,6 +224,7 @@ game_loop () restore_players_screen (); dead_playerani (); player_ilness_loop (bman.p_nr); + player_checkdeath (bman.p_nr); special_loop (); if ((players[bman.p_nr].state & PSFM_alife) == PSFM_alife) @@ -257,7 +258,7 @@ game_loop () d_printf ("GAME: Game Over\n"); done = 1; } - + stonelist_draw (); gfx_blitdraw (); s_calctimesync (); diff --git a/src/network.c b/src/network.c index ad3ed42..e937df8 100644 --- a/src/network.c +++ b/src/network.c @@ -1,4 +1,4 @@ -/* $Id: network.c,v 1.55 2004/01/25 20:32:45 stpohle Exp $ */ +/* $Id: network.c,v 1.56 2004/01/27 21:13:44 stpohle Exp $ */ /* network routines. */ @@ -841,3 +841,18 @@ void send_ogc_update () { ogc_sendgamestatus (bman.sock, "BomberClone", VERSION, bman.gamename, j, bman.maxplayer, status); }; + + +/* send the respawn data to all clients and with the new position of the player */ +void net_game_send_respawn (int pl_nr, _point pos) { + int pl; + + d_printf ("Send Respawn Data %d New Position (%d,%d)\n", pl_nr, pos.x, pos.y); + + if (pl_nr < 0 || pl_nr >= MAX_PLAYERS) + return; + + for (pl = 0; pl < MAX_PLAYERS; pl++) + if (!PS_IS_aiplayer (players[pl].state) && PS_IS_netplayer (players[pl].state) && pl != pl_nr && NET_CANSEND(pl)) + send_respawn (&players[pl].net.addr, pl_nr, pos); +}; diff --git a/src/packets.c b/src/packets.c index adcfd82..9e68bb6 100644 --- a/src/packets.c +++ b/src/packets.c @@ -1220,10 +1220,7 @@ void do_special (struct pkg_special *sp_pkg, _net_addr * addr) { d_printf ("do_special (addr %d, pl_nr %d, typ %d)\n", addr->pl_nr, sp_pkg->pl_nr, sp_pkg->typ); - if (addr->pl_nr == -1) - return; - - if (sp_pkg->pl_nr == -1) + if (addr->pl_nr == -1 || sp_pkg->pl_nr == -1) return; /* check if the right player is sending the information */ @@ -1325,6 +1322,28 @@ do_mapinfo (struct pkg_mapinfo *map_pkg, _net_addr * addr) }; +/*** + *** Respawn Date Handling + ***/ +void send_respawn (_net_addr * addr, int plnr, _point pos) { + struct pkg_respawn r_dat; + + r_dat.h.typ = PKG_respawn; + r_dat.h.len = HTON16 (sizeof (struct pkg_respawn)); + r_dat.h.flags = PKGF_ackreq; + r_dat.pl_nr = plnr; + r_dat.x = pos.x; + r_dat.y = pos.y; + send_pkg ((struct pkg *) &r_dat, addr); +}; + + +void do_respawn (struct pkg_respawn *r_pkg, _net_addr *addr) { + +}; + + + /*** *** general packet handling, like check for double recived packets *** network type. Autoreply on PKGF_ackreq and such things. diff --git a/src/player.c b/src/player.c index 879ea36..4ae8ed2 100644 --- a/src/player.c +++ b/src/player.c @@ -1,4 +1,4 @@ -/* $Id: player.c,v 1.68 2004/01/27 20:44:03 stpohle Exp $ +/* $Id: player.c,v 1.69 2004/01/27 21:13:45 stpohle Exp $ * player.c - everything what have to do with the player */ #include @@ -857,3 +857,9 @@ player_findfreebomb (_player * player) return res; }; + + +/* check if a player died and check if we have to respawn */ +void player_checkdeath (int pnr) { + +}; diff --git a/src/single.c b/src/single.c index fc2d2e0..f15321d 100644 --- a/src/single.c +++ b/src/single.c @@ -1,4 +1,4 @@ -/* $Id: single.c,v 1.54 2004/01/06 20:49:59 stpohle Exp $ */ +/* $Id: single.c,v 1.55 2004/01/27 21:13:45 stpohle Exp $ */ /* single player */ #include "basic.h" @@ -692,6 +692,7 @@ single_loop () pl->m = 1; } player_ilness_loop (p); + player_checkdeath (p); move_player (p); } };