tunnel data will be send over the network

origin
stpohle 22 years ago
parent bb3ef44533
commit 408c67b41f

@ -1,4 +1,4 @@
/* $Id: network.c,v 1.39 2003/08/10 15:10:19 stpohle Exp $ */
/* $Id: network.c,v 1.40 2003/08/24 19:52:08 stpohle Exp $ */
/*
network routines.
*/
@ -340,6 +340,9 @@ draw_netupdatestate ()
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 (bman.players[i].net.net_istep == 2)
sprintf (text, "Getting Field Data %d of %d.", bman.players[i].net.net_status,
map.size.x);
@ -419,14 +422,14 @@ net_transmit_gamedata ()
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 = 2;
bman.players[x].net.net_istep = 3;
}
y = -1;
if (GT_MP_PTPM)
net_istep = 0;
else
net_istep = 2;
net_istep = 3;
while (!done && bman.state == GS_update) {
/* the network thing */
@ -446,7 +449,33 @@ net_transmit_gamedata ()
/* if PTPS get all data */
if (GT_MP_PTPS) {
if (net_istep == 3) {
/*
get tunneldata
*/
if ((y < GAME_MAX_TUNNELS - 1 && y == bman.players[bman.p_nr].net.net_status)
|| y == -1) {
y++;
downtimestamp = timestamp;
send_tunneldata (&bman.players[0].net.addr, y, -1, -1);
}
else if (y < GAME_MAX_TUNNELS && y != bman.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) {
/* 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;
}
}
if (net_istep == 2) {
/*
get field data
*/
if ((y < map.size.y - 1 && y == bman.players[bman.p_nr].net.net_status)
|| y == -1) {
/* send field data req */
@ -468,6 +497,9 @@ net_transmit_gamedata ()
}
if (net_istep == 1) {
/*
get player data
*/
if ((y < MAX_PLAYERS - 1 && y == bman.players[bman.p_nr].net.net_status) || y == -1) {
/* send player date req */
y++;

@ -668,6 +668,45 @@ 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 */
void do_tunneldata (struct pkg_tunneldata *tun_pkg, _net_addr *addr) {
d_printf ("do_tunneldata: From %d [%s:%s] (Tunnel %d Target [%d,%d])\n", addr->pl_nr, addr->host, addr->port, tun_pkg->tunnel_nr, tun_pkg->target.x, tun_pkg->target.y);
if (addr->pl_nr != 0 && GT_MP_PTPM && tun_pkg->target.y == -1 && 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;
}
else if (addr->pl_nr == 0 && tun_pkg->tunnel_nr < GAME_MAX_TUNNELS) {
if (tun_pkg->target.x >= 0 && tun_pkg->target.x < map.size.x && tun_pkg->target.y >= 0 && tun_pkg->target.y < map.size.y) {
map.tunnel[tun_pkg->tunnel_nr].x = tun_pkg->target.x;
map.tunnel[tun_pkg->tunnel_nr].y = tun_pkg->target.y;
bman.players[bman.p_nr].net.net_status = tun_pkg->tunnel_nr;
}
else
d_printf (" values out of range\n");
}
};
/* send a tunneldata request (x && y == -1) or send tunneldata */
void send_tunneldata (_net_addr *addr, int tunnelnr, int x, int y) {
struct pkg_tunneldata tun_pkg;
d_printf ("send_tunneldata (Tunnel %d Target [%d,%d])\n", tunnelnr, x, y);
tun_pkg.h.typ = PKG_tunneldata;
tun_pkg.h.len = sizeof (struct pkg_tunneldata);
if ((GT_MP_PTPM && x != -1 && y != -1) || (GT_MP_PTPS && x == -1 && y == -1)) {
tun_pkg.tunnel_nr = tunnelnr;
tun_pkg.target.x = x;
tun_pkg.target.y = y;
send_pkg ((struct pkg*) &tun_pkg, addr);
}
};
void
send_quit (_net_addr * addr, char *plhost, char *plport)
@ -1216,6 +1255,9 @@ do_pkg (struct pkg *packet, _net_addr * addr)
case (PKG_mapinfo):
do_mapinfo ((struct pkg_mapinfo *) packet, addr);
break;
case (PKG_tunneldata):
do_tunneldata ((struct pkg_tunneldata *) packet, addr);
break;
default:
send_error (addr, "BomberClone: unknown data packet");
break;

@ -20,6 +20,7 @@ enum _network_data {
PKG_ill,
PKG_special,
PKG_mapinfo,
PKG_tunneldata,
PKG_bcmservchat = 90
};
@ -51,6 +52,13 @@ struct pkg_bcmservchat {
};
struct pkg_tunneldata {
struct pkgheader h;
signed char tunnel_nr;
_point target;
};
struct pkg_pkgack {
struct pkgheader h;
char typ;
@ -274,6 +282,7 @@ extern void do_bcmservchat (struct pkg_bcmservchat *packet, _net_addr *addr);
extern void do_ill (struct pkg_ill *ill_pkg, _net_addr *addr);
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 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);
@ -294,6 +303,7 @@ extern void send_chat (_net_addr *addr, char *text);
extern void send_ill (_net_addr *addr, int p_nr, _player *pl);
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 fwd_pkg (struct pkg *packet, _net_addr *addr);

Loading…
Cancel
Save