team menu added, network prepared for teammode. little menuhandling fixes in single player game and gfx selection

origin
stpohle 21 years ago
parent 546811c439
commit 140b270a54

@ -1,4 +1,19 @@
$Id: ChangeLog,v 1.76 2004/06/16 00:41:27 stpohle Exp $ $Id: ChangeLog,v 1.77 2004/09/12 20:54:24 stpohle Exp $
* NEED TO FIX: Server starts the game soo fast that the
client's ignore the gamestat for a running game.
Check if all players are ready.
* FINISH TEAM MODE.
* NEED TO FIX: Network Version Error. There is no
possible Escape.
- fixed: Single Player Menu there was no ESC key working
- fixed: Player Selection Screen (single player)
ESC key wasn't working and also closing the program
haven't worked.
Version 0.11.3 Version 0.11.3

18
TODO

@ -1,18 +1,4 @@
$Id: TODO,v 1.42 2004/08/08 23:18:45 stpohle Exp $ $Id: TODO,v 1.43 2004/09/12 20:54:24 stpohle Exp $
**************************************************************
* All Todo entry are to make at the WebPage: *
* http://sourceforge.net/tracker/?group_id=79449&atid=556632 *
* So i can drop this file soon. *
**************************************************************
- better configuration for home made map files EMPTY FILE...
- more specials
- network joining menu
Add: information about the playernames and the point list.
- we need some more sound for picking up items.
- ranking system, done by the bomberclonemserv

@ -5,7 +5,7 @@ dnl Please disable it in the Anjuta project configuration
AC_INIT(configure.in) AC_INIT(configure.in)
AC_CANONICAL_TARGET AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE(bomberclone, 0.11.4) AM_INIT_AUTOMAKE(bomberclone, 0.11.4test)
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)

@ -1,4 +1,4 @@
/* $Id: basic.h,v 1.24 2004/08/30 20:01:29 stpohle Exp $ */ /* $Id: basic.h,v 1.25 2004/09/12 20:54:24 stpohle Exp $ */
/* basic types which we need everywhere */ /* basic types which we need everywhere */
#ifndef _BC_BASIC_H_ #ifndef _BC_BASIC_H_
@ -36,6 +36,7 @@
#define SPEEDMUL 1.2 #define SPEEDMUL 1.2
#define MAX_PLAYERS 8 #define MAX_PLAYERS 8
#define MAX_TEAMS 4
#define MAX_BOMBS 12 #define MAX_BOMBS 12
#define MAX_RANGE 10 #define MAX_RANGE 10
#define MAX_SPEED 0.4 #define MAX_SPEED 0.4
@ -96,7 +97,8 @@ enum _backgound { // to load some diffrent logos..
enum _gametype { enum _gametype {
GT_bomberman = 0, GT_bomberman = 0,
GT_deathmatch GT_deathmatch,
GT_team
}; };

@ -1,4 +1,4 @@
/* $Id: bomberclone.h,v 1.27 2004/06/15 15:04:37 stpohle Exp $ */ /* $Id: bomberclone.h,v 1.28 2004/09/12 20:54:24 stpohle Exp $ */
/* bomberclone.h */ /* bomberclone.h */
#ifndef _BOMBERCLONE_H_ #ifndef _BOMBERCLONE_H_
@ -155,7 +155,7 @@ extern void d_bitprint (int bits, int nr);
extern void d_fatal (char *fmt,...); extern void d_fatal (char *fmt,...);
extern void debug_ingameinfo(); extern void debug_ingameinfo();
extern void d_printsdlrect (char *text, SDL_Rect *rect); extern void d_printsdlrect (char *text, SDL_Rect *rect);
extern void d_teamdetail (char *head);
// special.c // special.c
extern void special_use (int p_nr); extern void special_use (int p_nr);

@ -1,4 +1,4 @@
/* $Id: packets.h,v 1.24 2004/05/20 16:55:30 stpohle Exp $ /* $Id: packets.h,v 1.25 2004/09/12 20:54:24 stpohle Exp $
* network packets.. */ * network packets.. */
#ifndef _PACKETS_H_ #ifndef _PACKETS_H_
@ -167,6 +167,7 @@ struct pkg_playerid {
signed char gfx_nr; // number of the graphic signed char gfx_nr; // number of the graphic
signed char state; signed char state;
signed char netflags; // network flags signed char netflags; // network flags
signed char team_nr; // team number
Sint16 points; Sint16 points;
Sint16 wins; Sint16 wins;
}; };
@ -178,6 +179,7 @@ struct pkg_playerdata {
Sint16 points; // points Sint16 points; // points
Sint16 wins; // how many times we win Sint16 wins; // how many times we win
signed char gfx_nr; // the gfx number we want to use signed char gfx_nr; // the gfx number we want to use
signed char team_nr; // teamnumber of the player
_point pos; _point pos;
unsigned char bombs_n; unsigned char bombs_n;
unsigned char range; unsigned char range;
@ -358,7 +360,7 @@ 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 do_respawn (struct pkg_respawn *r_pkg, _net_addr *addr);
extern void send_pkg (struct pkg *packet, _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_playerid (_net_addr *addr, char *name, char *pladdr, char *plport, int p_nr, int gfx_nr, int team_nr, signed char netflags);
extern void send_servermode (_net_addr *addr, int pl_nr); extern void send_servermode (_net_addr *addr, int pl_nr);
extern void send_joingame (_net_addr * addr, char *name, int flags); extern void send_joingame (_net_addr * addr, char *name, int flags);
extern void send_error (_net_addr *addr, char *text); extern void send_error (_net_addr *addr, char *text);

@ -1,4 +1,4 @@
/* $Id: player.h,v 1.2 2004/05/20 16:55:30 stpohle Exp $ /* $Id: player.h,v 1.3 2004/09/12 20:54:24 stpohle Exp $
* playerinclude file * playerinclude file
*/ */
@ -99,6 +99,7 @@ struct {
_special special; // special the player has _special special; // special the player has
char name[LEN_PLAYERNAME]; // name oder name[0] == 0 char name[LEN_PLAYERNAME]; // name oder name[0] == 0
int team_nr; // number of the team we are in or -1
unsigned char state; // status of the player unsigned char state; // status of the player
signed char in_nr; // number of the connected player entry signed char in_nr; // number of the connected player entry
@ -109,8 +110,17 @@ struct {
_net_player net; // holds all important network data _net_player net; // holds all important network data
} typedef _player; } typedef _player;
struct __team {
_player *players[MAX_PLAYERS];
char name[LEN_PLAYERNAME];
int active;
} typedef _team;
// everything what is declared in players.c // everything what is declared in players.c
extern _player *players; extern _player *players;
extern _team *teams;
extern void dead_playerani (); extern void dead_playerani ();
extern void draw_player (_player * player); extern void draw_player (_player * player);
@ -139,6 +149,8 @@ extern void player_delete (int pl_nr);
extern void player2_join (); extern void player2_join ();
extern void player2_add (int pl_nr); extern void player2_add (int pl_nr);
extern void team_update ();
// for the playerinput handling // for the playerinput handling
extern void playerinput_loop (int pl_nr); extern void playerinput_loop (int pl_nr);
@ -147,5 +159,8 @@ extern inline void playerinput_keyb_read (int pk_offset, int pl_nr);
/* playermenu.c */ /* playermenu.c */
extern void playermenu (); extern void playermenu ();
extern void playermenu_selgfx (int pl_nr); extern int playermenu_selgfx (int pl_nr);
extern void teammenu ();
#endif #endif

@ -1,4 +1,4 @@
/* $Id: configuration.c,v 1.62 2004/06/13 23:34:10 stpohle Exp $ /* $Id: configuration.c,v 1.63 2004/09/12 20:54:24 stpohle Exp $
* configuration */ * configuration */
#include <SDL.h> #include <SDL.h>
@ -19,14 +19,20 @@ config_init (int argc, char **argv)
{ {
SDL_Surface *icon_img; SDL_Surface *icon_img;
char text[255], icon[255]; char text[255], icon[255];
int i; int i, j;
srand (((int) time (NULL))); // initialize randomgenerator srand (((int) time (NULL))); // initialize randomgenerator
for (i = 0; i < MAX_PLAYERS; i++) { for (i = 0; i < MAX_PLAYERS; i++) {
players[i].gfx = NULL; /* we will select them in the wait_for_players loop */ 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 */ players[i].gfx_nr = -1; /* and even now in the singleplayer menu */
players[i].team_nr = -1; /* delete team assignment */
} }
for (i = 0; i < MAX_TEAMS; i++) {
sprintf (teams[i].name, "Team %d", i+1);
for (j = 0; j < MAX_PLAYERS; j++)
teams[i].players[j] = NULL;
}
stonelist_del (); stonelist_del ();
chat.oldscreen = NULL; chat.oldscreen = NULL;

@ -44,6 +44,27 @@ void d_playerdetail (char *head) {
}; };
void d_teamdetail (char *head) {
int p;
char name[MAX_TEAMS][LEN_PLAYERNAME];
d_printf ("---------------> %s\n", head);
d_printf ("Teams: | %-10s | %-10s | %-10s | %-10s | Players\n", teams[0].name,teams[1].name,teams[2].name,teams[3].name);
for (p = 0; p < MAX_PLAYERS; p++) {
if (teams[0].players[p] == NULL) name[0][0] = 0;
else strncpy (name[0], teams[0].players[p]->name, LEN_PLAYERNAME);
if (teams[1].players[p] == NULL) name[1][0] = 0;
else strncpy (name[1], teams[1].players[p]->name, LEN_PLAYERNAME);
if (teams[2].players[p] == NULL) name[2][0] = 0;
else strncpy (name[2], teams[2].players[p]->name, LEN_PLAYERNAME);
if (teams[3].players[p] == NULL) name[3][0] = 0;
else strncpy (name[3], teams[3].players[p]->name, LEN_PLAYERNAME);
d_printf (" | %-10s | %-10s | %-10s | %-10s | %-10s Team:%d\n", name[0], name[1], name[2], name[3], players[p].name, players[p].team_nr);
}
};
void d_bitprint (int bits, int nr) { void d_bitprint (int bits, int nr) {
int i; int i;

@ -1,4 +1,4 @@
/* $Id: gfx.c,v 1.35 2004/05/20 16:55:30 stpohle Exp $ */ /* $Id: gfx.c,v 1.36 2004/09/12 20:54:24 stpohle Exp $ */
/* gfx.c */ /* gfx.c */
#include "bomberclone.h" #include "bomberclone.h"
@ -186,8 +186,13 @@ gfx_loaddata ()
sprintf (filename, "%s/gfx/logo.png", bman.datapath); sprintf (filename, "%s/gfx/logo.png", bman.datapath);
tmpimage = IMG_Load (filename); tmpimage = IMG_Load (filename);
if (tmpimage == NULL) { if (tmpimage == NULL) {
printf ("Can't load image: %s\n", SDL_GetError ()); sprintf (bman.datapath, "../data");
exit (1); sprintf (filename, "%s/gfx/logo.png", bman.datapath);
tmpimage = IMG_Load (filename);
if (tmpimage == NULL) {
printf ("Can't load image: %s\n", SDL_GetError ());
exit (1);
}
} }
} }
tmpimage1 = scale_image (tmpimage, gfx.res.x, gfx.res.y); tmpimage1 = scale_image (tmpimage, gfx.res.x, gfx.res.y);

@ -1,4 +1,4 @@
/* $Id: main.c,v 1.26 2004/05/25 22:22:29 stpohle Exp $ */ /* $Id: main.c,v 1.27 2004/09/12 20:54:24 stpohle Exp $ */
#include "basic.h" #include "basic.h"
#include "bomberclone.h" #include "bomberclone.h"
@ -9,7 +9,8 @@
#include "single.h" #include "single.h"
_bomberclone bman; // Holds GameData _bomberclone bman; // Holds GameData
_player *players; // holds all Playerdata _player *players; // holds all Playerdata
_team *teams; // team stuff
Uint32 timestamp; // timestamp Uint32 timestamp; // timestamp
float timefactor = 0.0f; /* factor for the time time of the last loop float timefactor = 0.0f; /* factor for the time time of the last loop
@ -24,6 +25,7 @@ main (int argc, char **argv)
_menu *menu; _menu *menu;
players = malloc (sizeof (_player) * MAX_PLAYERS); players = malloc (sizeof (_player) * MAX_PLAYERS);
teams = malloc (sizeof (_team) * MAX_TEAMS);
gfxengine_init (); gfxengine_init ();
if (SDL_Init (SDL_INIT_VIDEO| SDL_INIT_NOPARACHUTE) != 0) { if (SDL_Init (SDL_INIT_VIDEO| SDL_INIT_NOPARACHUTE) != 0) {
@ -36,7 +38,7 @@ main (int argc, char **argv)
config_init (argc, argv); config_init (argc, argv);
while (menuselect != -1 && bman.state != GS_quit) { while (menuselect != -1 && bman.state != GS_quit) {
menu = menu_new ("Bomberclone", 400, 230); menu = menu_new ("Bomberclone", 400, 250); // y=230
menu_create_button (menu, "Single Game", -1, 70, 200, 0); menu_create_button (menu, "Single Game", -1, 70, 200, 0);
menu_create_button (menu, "Multiplayer Game", -1, 100, 200, 1); menu_create_button (menu, "Multiplayer Game", -1, 100, 200, 1);
menu_create_button (menu, "Options", -1, 130, 200, 2); menu_create_button (menu, "Options", -1, 130, 200, 2);

@ -1,4 +1,4 @@
/* $Id: mapmenu.c,v 1.23 2004/05/20 16:55:30 stpohle Exp $ */ /* $Id: mapmenu.c,v 1.24 2004/09/12 20:54:24 stpohle Exp $ */
/* map/tileset selection menu */ /* map/tileset selection menu */
#include "bomberclone.h" #include "bomberclone.h"
@ -128,6 +128,7 @@ mapmenu ()
case (16): /* Game Settings */ case (16): /* Game Settings */
mapgamesetting (); mapgamesetting ();
break;
} }
/* map type */ /* map type */
@ -323,11 +324,12 @@ void mapgamesetting () {
_charlist gametype [] = { _charlist gametype [] = {
{"Bomberman", NULL}, {"Bomberman", NULL},
{"Deathmatch", NULL}, {"Deathmatch", NULL},
{"Teammode", NULL}
}; };
_charlist *gametype_sel = &gametype[bman.gametype]; _charlist *gametype_sel = &gametype[bman.gametype];
_menu *menu; _menu *menu;
charlist_fillarraypointer (gametype, 2); charlist_fillarraypointer (gametype, 3);
while (menuselect != -1 && bman.state != GS_quit) { while (menuselect != -1 && bman.state != GS_quit) {
menu = menu_new ("Game Options", 420, 400); menu = menu_new ("Game Options", 420, 400);
@ -343,7 +345,7 @@ void mapgamesetting () {
menu_create_label (menu, "Game Parameter", 25, 180, 1, COLOR_brown); menu_create_label (menu, "Game Parameter", 25, 180, 1, COLOR_brown);
menu_create_entry (menu, "Bomb Time:", 25, 220, 200, &bman.bomb_tickingtime, 1200, MENU_entryfloat, 5); menu_create_entry (menu, "Bomb Time:", 25, 220, 200, &bman.bomb_tickingtime, 1200, MENU_entryfloat, 5);
menu_create_label (menu, "Gametype", 25, 250, 0, COLOR_brown); menu_create_label (menu, "Gametype", 25, 250, 0, COLOR_brown);
menu_create_list (menu, "GameType", 25, 280, 150, 50, gametype, &gametype_sel, 6); menu_create_list (menu, "GameType", 25, 280, 150, 60, gametype, &gametype_sel, 6);
menu_create_bool (menu, "Drop Items", 200, 280, 150, &bman.dropitemsondeath, 7); menu_create_bool (menu, "Drop Items", 200, 280, 150, &bman.dropitemsondeath, 7);
menu_create_button (menu, "Ok", -1, 380, 150, 0); menu_create_button (menu, "Ok", -1, 380, 150, 0);

@ -1,4 +1,4 @@
/* $Id: menu.c,v 1.45 2004/06/15 15:04:37 stpohle Exp $ /* $Id: menu.c,v 1.46 2004/09/12 20:54:24 stpohle Exp $
* Menuhandling */ * Menuhandling */
#include "basic.h" #include "basic.h"
@ -446,7 +446,7 @@ menu_event_loop (_menu * menu, SDL_Event * event, int eventstate)
case (SDL_QUIT): case (SDL_QUIT):
bman.state = GS_quit; bman.state = GS_quit;
done = 1; done = 1;
return 1; return -1;
break; break;
case (SDL_KEYDOWN): /* focus next element */ case (SDL_KEYDOWN): /* focus next element */
if (menu->oldkey == 0 && event->key.keysym.sym == SDLK_TAB) { if (menu->oldkey == 0 && event->key.keysym.sym == SDLK_TAB) {

@ -1,4 +1,4 @@
/* $Id: network.c,v 1.63 2004/05/20 16:55:30 stpohle Exp $ */ /* $Id: network.c,v 1.64 2004/09/12 20:54:24 stpohle Exp $ */
/* /*
network routines. network routines.
*/ */
@ -422,7 +422,7 @@ net_change_playerid (int pl_nr, unsigned char senddata)
if (!PS_IS_aiplayer (players[i].state) && players[i].net.addr.host[0] != 0) if (!PS_IS_aiplayer (players[i].state) && players[i].net.addr.host[0] != 0)
send_playerid (&players[i].net.addr, players[pl_nr].name, send_playerid (&players[i].net.addr, players[pl_nr].name,
players[pl_nr].net.addr.host, players[pl_nr].net.addr.port, players[pl_nr].net.addr.host, players[pl_nr].net.addr.port,
pl_nr, players[pl_nr].gfx_nr, players[pl_nr].net.flags); pl_nr, players[pl_nr].gfx_nr, players[pl_nr].team_nr, players[pl_nr].net.flags);
} }
else { else {
/* /*
@ -431,7 +431,7 @@ net_change_playerid (int pl_nr, unsigned char senddata)
if ((pl_nr == bman.p_nr || (IS_LPLAYER2 && pl_nr == bman.p2_nr)) && senddata) if ((pl_nr == bman.p_nr || (IS_LPLAYER2 && pl_nr == bman.p2_nr)) && senddata)
send_playerid (&players[bman.p_servnr].net.addr, players[pl_nr].name, send_playerid (&players[bman.p_servnr].net.addr, players[pl_nr].name,
players[pl_nr].net.addr.host, players[pl_nr].net.addr.port, players[pl_nr].net.addr.host, players[pl_nr].net.addr.port,
pl_nr, players[pl_nr].gfx_nr, players[pl_nr].net.flags); pl_nr, players[pl_nr].gfx_nr, players[pl_nr].team_nr, players[pl_nr].net.flags);
} }
player_set_gfx (&players[pl_nr], players[pl_nr].gfx_nr); player_set_gfx (&players[pl_nr], players[pl_nr].gfx_nr);
@ -762,7 +762,7 @@ net_send_players ()
for (i = 0; i < MAX_PLAYERS; i++) for (i = 0; i < MAX_PLAYERS; i++)
send_playerid (&players[j].net.addr, players[i].name, send_playerid (&players[j].net.addr, players[i].name,
players[i].net.addr.host, players[i].net.addr.port, i, players[i].net.addr.host, players[i].net.addr.port, i,
players[i].gfx_nr, players[i].net.flags); players[i].gfx_nr, players[i].team_nr, players[i].net.flags);
}; };

@ -143,6 +143,7 @@ do_joingame (struct pkg_joingame *p_jg, _net_addr * addr)
d_printf (" Player Added : Nr:[%d] Name:%10s\n", i, p_jg->name); d_printf (" Player Added : Nr:[%d] Name:%10s\n", i, p_jg->name);
pl->points = 0; pl->points = 0;
pl->wins = 0; pl->wins = 0;
pl->team_nr = -1;
} }
strncpy (pl->name, p_jg->name, LEN_PLAYERNAME); strncpy (pl->name, p_jg->name, LEN_PLAYERNAME);
player_set_gfx (pl, -1); player_set_gfx (pl, -1);
@ -173,7 +174,7 @@ do_joingame (struct pkg_joingame *p_jg, _net_addr * addr)
if (NET_CANSEND(i)) if (NET_CANSEND(i))
send_playerid (&players[i].net.addr, pl->name, pl->net.addr.host, send_playerid (&players[i].net.addr, pl->name, pl->net.addr.host,
pl->net.addr.port, pl->net.addr.pl_nr, pl->gfx_nr, pl->net.addr.port, pl->net.addr.pl_nr, pl->gfx_nr,
pl->net.flags); pl->team_nr, pl->net.flags);
} }
else if (GS_WAITRUNNING) { else if (GS_WAITRUNNING) {
@ -240,7 +241,7 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr)
*/ */
if (GT_MP_PTPM && p_id->pl_nr == -1) { if (GT_MP_PTPM && p_id->pl_nr == -1) {
for (i = 0; i < MAX_PLAYERS; i++) for (i = 0; i < MAX_PLAYERS; i++)
send_playerid (addr, players[i].name, players[i].net.addr.host, players[i].net.addr.port, i, players[i].gfx_nr, players[i].net.flags); send_playerid (addr, players[i].name, players[i].net.addr.host, players[i].net.addr.port, i, players[i].gfx_nr, players[i].team_nr, players[i].net.flags);
} }
/* /*
* check if we have to update someones data * check if we have to update someones data
@ -279,6 +280,7 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr)
if (GT_MP_PTPS) { if (GT_MP_PTPS) {
pl->points = NTOH16 (p_id->points); pl->points = NTOH16 (p_id->points);
pl->wins = NTOH16 (p_id->wins); pl->wins = NTOH16 (p_id->wins);
pl->team_nr = p_id->team_nr;
} }
/* Send all connected players the new PlayerID */ /* Send all connected players the new PlayerID */
@ -293,7 +295,7 @@ do_playerid (struct pkg_playerid *p_id, _net_addr * addr)
void void
send_playerid (_net_addr * addr, char *name, char *pladdr, char *plport, send_playerid (_net_addr * addr, char *name, char *pladdr, char *plport,
int pl_nr, int gfx_nr, signed char netflags) int pl_nr, int gfx_nr, int team_nr, signed char netflags)
{ {
struct pkg_playerid p_id; struct pkg_playerid p_id;
int vmi, int vmi,
@ -330,11 +332,13 @@ send_playerid (_net_addr * addr, char *name, char *pladdr, char *plport,
p_id.points = HTON16 (players[pl_nr].points); p_id.points = HTON16 (players[pl_nr].points);
p_id.wins = HTON16 (players[pl_nr].wins); p_id.wins = HTON16 (players[pl_nr].wins);
p_id.state = players[pl_nr].state; p_id.state = players[pl_nr].state;
p_id.team_nr = team_nr;
} }
else { else {
p_id.points = 0; p_id.points = 0;
p_id.wins = 0; p_id.wins = 0;
p_id.state = 0; p_id.state = 0;
p_id.team_nr = -1;
} }
send_pkg ((struct pkg *) &p_id, addr); send_pkg ((struct pkg *) &p_id, addr);
@ -376,7 +380,7 @@ do_servermode (struct pkg_servermode *s_mod, _net_addr * addr)
} }
/* send playerid with p_nr -1 so we get the whole playerlist */ /* send playerid with p_nr -1 so we get the whole playerlist */
send_playerid (addr, NULL, NULL, NULL, -1, -1, 0); send_playerid (addr, NULL, NULL, NULL, -1, -1, -1, 0);
} }
/* the server changed */ /* the server changed */

@ -1,4 +1,4 @@
/* $Id: player.c,v 1.85 2004/06/08 22:35:26 stpohle Exp $ /* $Id: player.c,v 1.86 2004/09/12 20:54:25 stpohle Exp $
* player.c - everything what have to do with the player */ * player.c - everything what have to do with the player */
#include <SDL.h> #include <SDL.h>
@ -1062,5 +1062,26 @@ void player2_add (int pl_nr) {
players[pl_nr].gfx = NULL; players[pl_nr].gfx = NULL;
players[pl_nr].points = 0; players[pl_nr].points = 0;
players[pl_nr].wins = 0; players[pl_nr].wins = 0;
players[pl_nr].team_nr = 0;
d_printf ("player2_add: Local Player Added with pl_nr: %d\n", pl_nr); d_printf ("player2_add: Local Player Added with pl_nr: %d\n", pl_nr);
}; };
/*
* set the teams[] witht he current player data
*/
void team_update () {
int cnt[MAX_TEAMS] = { 0,0,0,0 };
int pl;
for (pl = 0; pl < MAX_PLAYERS; pl++) {
if (PS_IS_used (players[pl].state) && players[pl].team_nr >= 0) {
teams[players[pl].team_nr].players[cnt[players[pl].team_nr]] = &players[pl];
cnt[players[pl].team_nr]++;
}
}
for (pl = 0; pl < MAX_TEAMS; pl++) for (;cnt[pl] < MAX_PLAYERS; cnt[pl]++)
teams[pl].players[cnt[pl]] = NULL;
// d_teamdetail ("Teaminformation");
}

@ -1,4 +1,4 @@
/* $Id: playermenu.c,v 1.2 2004/05/20 16:55:30 stpohle Exp $ /* $Id: playermenu.c,v 1.3 2004/09/12 20:54:25 stpohle Exp $
* *
*/ */
@ -149,7 +149,7 @@ void playermenu () {
_menuitem *list_PlayerList; _menuitem *list_PlayerList;
_charlist playerlist[MAX_PLAYERS + 1]; _charlist playerlist[MAX_PLAYERS + 1];
_charlist *playerlist_sel = &playerlist[0]; _charlist *playerlist_sel = &playerlist[0];
int i, menuselect = 0, done = 0, eventstate, pl_nr; int i, done = 0, eventstate, pl_nr;
SDL_Event event; SDL_Event event;
for (i = 0; i < MAX_PLAYERS; i++) for (i = 0; i < MAX_PLAYERS; i++)
@ -200,6 +200,7 @@ void playermenu () {
if (bman.sock != -1) if (bman.sock != -1)
network_loop (); network_loop ();
menu_draw (menu);
done = menu_event_loop (menu, &event, eventstate); done = menu_event_loop (menu, &event, eventstate);
/* /*
* check if one of the buttons was pressed * check if one of the buttons was pressed
@ -241,7 +242,7 @@ void playermenu () {
} }
s_calctimesync (); s_calctimesync ();
} while ((done == 0 || menu->focus->id != 1) && done != -1 && menuselect != -1 && menuselect != 1); } while ((done == 0 || menu->focus->id != 1) && done != -1);
if (menu->focus->id == 1 && done == 1) { if (menu->focus->id == 1 && done == 1) {
/* /*
@ -258,7 +259,7 @@ void playermenu () {
/* /*
* draw a small menu where the player has to select his gfx * draw a small menu where the player has to select his gfx
*/ */
void playermenu_selgfx (int pl_nr) { int playermenu_selgfx (int pl_nr) {
_menu *menu; _menu *menu;
int selgfx, eventstate; int selgfx, eventstate;
SDL_Event event; SDL_Event event;
@ -266,7 +267,7 @@ void playermenu_selgfx (int pl_nr) {
int done = 0; int done = 0;
if (pl_nr < 0 || pl_nr >= MAX_PLAYERS) if (pl_nr < 0 || pl_nr >= MAX_PLAYERS)
return; return -1;
selgfx = players[pl_nr].gfx_nr; selgfx = players[pl_nr].gfx_nr;
if (selgfx < 0) if (selgfx < 0)
@ -298,7 +299,7 @@ void playermenu_selgfx (int pl_nr) {
bman.state = GS_quit; bman.state = GS_quit;
done = 1; done = 1;
menu_delete (menu); menu_delete (menu);
return; return -1;
break; break;
case (SDL_KEYDOWN): case (SDL_KEYDOWN):
/* /*
@ -332,7 +333,7 @@ void playermenu_selgfx (int pl_nr) {
*/ */
else if (event.key.keysym.sym == SDLK_ESCAPE) { else if (event.key.keysym.sym == SDLK_ESCAPE) {
selgfx = -1; selgfx = -1;
done = 1; done = 2;
break; break;
} }
/* /*
@ -356,4 +357,249 @@ void playermenu_selgfx (int pl_nr) {
}; };
menu_delete (menu); menu_delete (menu);
player_set_gfx (&players[pl_nr], selgfx); player_set_gfx (&players[pl_nr], selgfx);
if (done == 2)
return -1;
return 0;
};
/*
* teammenu: Teamplay menuselection
* Show and edit all teams and the players.
*/
struct __teammenu {
struct {
_charlist names[MAX_PLAYERS];
_charlist *select;
_menuitem *item;
_menuitem *label;
} teamp, freep;
_menuitem *teamlist;
_charlist teamnames[MAX_TEAMS];
_charlist *teamsel;
};
static void teammenu_update (_menu *menu, struct __teammenu *tm);
static int inline teammenu_get_selteam (_menu *menu, struct __teammenu *tm);
static void teammenu_set_selteam (_menu *menu, struct __teammenu *tm, int teamnr);
static void teammenu_player2team (_menu *menu, struct __teammenu *tm);
static void teammenu_team2player (_menu *menu, struct __teammenu *tm);
void teammenu () {
_menu *menu;
struct __teammenu tm;
int done, eventstate, menu_id = 0, last_id = 0, last_selteam = -1;
SDL_Event event;
single_create_ai (7); // for debug only
menu = menu_new ("Team Details", 400, 350);
menu_create_text (menu, "help1", 10, 70, (250/font[0].size.x), 5, COLOR_gray, "Move the players from one team into the other by selecting them with ENTER.");
menu_create_button (menu, "Close", -1, 325, 150, 0);
/* reset all teamlist data and create element */
tm.teamsel = NULL;
tm.teamnames[0].text[0] = 0;
tm.teamnames[0].next = NULL;
tm.teamlist = menu_create_list (menu, "Teamlist", 250, 70, 150, 80, tm.teamnames, &tm.teamsel, ++menu_id);
/* reset all player data and create element*/
tm.teamp.names[0].text[0] = 0;
tm.teamp.names[0].next = NULL;
tm.teamp.select = &tm.teamp.names[0];;
tm.freep.names[0].text[0] = 0;
tm.freep.names[0].next = NULL;
tm.freep.select = &tm.freep.names[0];;
tm.freep.label = menu_create_label (menu, "Free Players", 40, 160, 0, COLOR_yellow);
tm.freep.item = menu_create_list (menu, "freeplayer", 30, 180, 150, 120, tm.freep.names, &tm.freep.select, ++menu_id);
tm.teamp.label = menu_create_label (menu, teams[0].name, 250, 160, 0, COLOR_yellow);
tm.teamp.item = menu_create_list (menu, "teamplayer", 240, 180, 150, 120, tm.teamp.names, &tm.teamp.select, ++menu_id);
/* prepare everything for the menu_loop */
menu_focus_id (menu, 1);
menu->looprunning = 1;
menu_draw (menu);
teammenu_set_selteam (menu, &tm, 0);
teammenu_update (menu, &tm);
/* the menu loop */
do {
gfx_blitdraw ();
eventstate = SDL_PollEvent (&event);
if (bman.sock != -1)
network_loop ();
menu_draw (menu);
done = menu_event_loop (menu, &event, eventstate);
/*
* check if one of the buttons was pressed
*/
if (last_id != menu->focus->id || last_selteam != teammenu_get_selteam(menu, &tm)) {
teammenu_update (menu, &tm);
}
if (done == 1 && menu->focus->id == tm.freep.item->id) { // freeplayer selected
teammenu_player2team (menu, &tm);
teammenu_update (menu, &tm);
done = 0;
}
if (done == 1 && menu->focus->id == tm.teamp.item->id) { // teamplayer selected
teammenu_team2player (menu, &tm);
teammenu_update (menu, &tm);
done = 0;
}
if (done == 1 && menu->focus->id == tm.teamlist->id) {
menu_focus_id (menu, tm.freep.item->id);
teammenu_update (menu, &tm);
done = 0;
}
s_calctimesync ();
last_id = menu->focus->id;
} while ((done == 0 || menu->focus->id != 0) && done != -1);
menu_delete (menu);
}
/*
* add the current selected playxer to the free players
*/
static void teammenu_team2player (_menu *menu, struct __teammenu *tm) {
int sel_team = teammenu_get_selteam (menu,tm);
int sel_teampl = tm->teamp.select - tm->teamp.names;
if (sel_team < 0 || sel_team >= MAX_TEAMS || sel_teampl < 0 || sel_teampl >= MAX_PLAYERS)
return;
if (teams[sel_team].players[sel_teampl] == NULL)
return;
teams[sel_team].players[sel_teampl]->team_nr = -1;
team_update ();
};
/*
* add the current selected player to the current team
*/
static void teammenu_player2team (_menu *menu, struct __teammenu *tm) {
int sel_player = tm->freep.select - tm->freep.names;
int sel_team = teammenu_get_selteam (menu,tm);
int pl;
// d_printf ("teammenu_player2team: sel_player=%d, sel_team=%d\n", sel_player, sel_team);
if (sel_team < 0 || sel_team >= MAX_TEAMS || sel_player < 0 || sel_player >= MAX_PLAYERS)
return;
/* get the player */
pl = 0;
while (pl < MAX_PLAYERS && (sel_player > 0 || players[pl].team_nr != -1)) {
if (players[pl].team_nr == -1) sel_player--;
pl++;
}
// d_printf ("teammenu_player2team: sel_player=%d, sel_team=%d, pl=\n", sel_player, sel_team, pl);
if (pl < MAX_PLAYERS && sel_player == 0 && players[pl].team_nr == -1)
players[pl].team_nr = sel_team;
team_update ();
}
/*
* update all elements on the screen
* clean the player lists for the team and free players
*/
static void teammenu_update (_menu *menu, struct __teammenu *tm) {
int pl, cnt_team, cnt_free;
// d_printf ("teammenu_update\n");
/*
* teamnames
*/
tm->teamnames[0].text[0] = 0;
tm->teamnames[0].next = NULL;
for (pl = 0; pl < MAX_TEAMS; pl++) {
if (pl > 0)
tm->teamnames[pl-1].next = &tm->teamnames[pl];
tm->teamnames[pl].next = NULL;
strncpy (tm->teamnames[pl].text, teams[pl].name, LEN_CHARENTRY);
}
strncpy (tm->teamp.label->label, tm->teamsel->text, MENU_TITLELEN);
/*
* playernames
*/
tm->freep.names[0].next = NULL;
tm->freep.names[0].text[0] = 0;
tm->teamp.names[0].next = NULL;
tm->teamp.names[0].text[0] = 0;
for (pl = 0, cnt_team = 0, cnt_free = 0; pl < MAX_PLAYERS; pl++) {
if (PS_IS_used (players[pl].state) && (players[pl].team_nr == -1 || players[pl].team_nr == teammenu_get_selteam (menu, tm))) {
_charlist *cl;
int *cnt;
/* select the right list with the right counter */
if (players[pl].team_nr == -1) {
cl = tm->freep.names;
cnt = &cnt_free;
}
else {
cl = tm->teamp.names;
cnt = &cnt_team;
}
/* set the data */
if (*cnt > 0)
cl[(*cnt)-1].next = &cl[*cnt];
strncpy (cl[*cnt].text, players[pl].name, LEN_CHARENTRY);
cl[*cnt].next = NULL;
(*cnt)++;
}
}
/* send update */
tm->freep.item->changed = 1;
tm->freep.label->changed = 1;
menu_draw_menuitem (tm->freep.item);
menu_draw_menuitem (tm->freep.label);
tm->teamp.item->changed = 1;
tm->teamp.label->changed = 1;
menu_draw_menuitem (tm->teamp.item);
menu_draw_menuitem (tm->teamp.label);
tm->teamlist->changed = 1;
menu_draw_menuitem (tm->teamlist);
}
/*
* get the current teamnumber
*/
static inline int teammenu_get_selteam (_menu *menu, struct __teammenu *tm) {
return (tm->teamsel - tm->teamnames);
};
/*
* set the current teamnumber
*/
static void teammenu_set_selteam (_menu *menu, struct __teammenu *tm, int teamnr) {
if (teamnr < 0 ) teamnr = 0;
else if (teamnr >= MAX_TEAMS) teamnr = MAX_TEAMS-1;
tm->teamsel = &tm->teamnames[teamnr];
tm->teamlist->changed = 1;
menu_draw_menuitem (tm->teamlist);
}; };

@ -1,4 +1,4 @@
/* $Id: single.c,v 1.67 2004/06/15 15:04:37 stpohle Exp $ */ /* $Id: single.c,v 1.68 2004/09/12 20:54:25 stpohle Exp $ */
/* single player */ /* single player */
#include "basic.h" #include "basic.h"
@ -571,6 +571,9 @@ single_create_ai (int num_players)
MW_IS_GFX_SELECT (gfx_sel, i); MW_IS_GFX_SELECT (gfx_sel, i);
} while (i != -1); } while (i != -1);
player_set_gfx (pl, gfx_sel); player_set_gfx (pl, gfx_sel);
pl->wins = 0;
pl->points = 0;
pl->team_nr = -1;
} }
if (pl == NULL) if (pl == NULL)
@ -615,20 +618,23 @@ single_playergame (int second_player, int ai_players)
strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME); strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME);
gfx_load_players (32, 32); gfx_load_players (32, 32);
do { do {
playermenu_selgfx (bman.p_nr); done = playermenu_selgfx (bman.p_nr);
} while (players[bman.p_nr].gfx_nr == -1); } while (players[bman.p_nr].gfx_nr == -1 && done != -1);
players[bman.p_nr].state = PSF_used + PSF_alife + PSF_playing; players[bman.p_nr].state = PSF_used + PSF_alife + PSF_playing;
strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME); strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME);
if (second_player) { if (done != -1 && second_player) {
player2_join (); player2_join ();
do { do {
playermenu_selgfx (bman.p2_nr); done = playermenu_selgfx (bman.p2_nr);
} while (players[bman.p2_nr].gfx_nr == -1); } while (players[bman.p2_nr].gfx_nr == -1 && done != -1);
} }
gfx_free_players (); gfx_free_players ();
if (done == -1)
return;
single_create_ai (ai_players); single_create_ai (ai_players);
bman.state = GS_ready; bman.state = GS_ready;
@ -783,14 +789,15 @@ single_menu ()
gfx_blitdraw (); gfx_blitdraw ();
eventstate = SDL_PollEvent (&event); eventstate = SDL_PollEvent (&event);
menu_draw (menu);
done = menu_event_loop (menu, &event, eventstate); done = menu_event_loop (menu, &event, eventstate);
if (done && menu->focus->id == 7) { if (done > 0 && menu->focus->id == 7) {
done = 0; done = 0;
mapmenu (); mapmenu ();
} }
if (done && menu->focus->id == 3) if (done > 0 && menu->focus->id == 3)
done = 0; done = 0;
s_calctimesync (); s_calctimesync ();

Loading…
Cancel
Save