respawn addition

origin
stpohle 22 years ago
parent 643ecc8f17
commit 9979e58eed

@ -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 ();

@ -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);

@ -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,6 +332,7 @@ 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);
@ -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);

@ -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 <string.h>
@ -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)

@ -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);
};

@ -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.

@ -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 <SDL.h>
@ -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) {
};

@ -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);
}
};

Loading…
Cancel
Save