single player mode is back working again and with to playersupport on one computer

origin
stpohle 22 years ago
parent 2e1cc95b0a
commit 852480ea48

@ -1,4 +1,4 @@
/* $Id: menu.h,v 1.10 2004/05/20 16:55:30 stpohle Exp $ /* $Id: menu.h,v 1.11 2004/06/08 22:35:20 stpohle Exp $
* GUI for menuhandling * GUI for menuhandling
*/ */
@ -83,6 +83,7 @@ extern void menu_draw (_menu *menu);
extern void menu_draw_border (_menu *menu); extern void menu_draw_border (_menu *menu);
extern void menu_draw_background (_menu *menu, SDL_Rect *dest); extern void menu_draw_background (_menu *menu, SDL_Rect *dest);
extern inline void menu_draw_menuitem (_menuitem *m); extern inline void menu_draw_menuitem (_menuitem *m);
extern void menu_del_menuitem (_menuitem *m);
extern void menu_reload (_menu *menu); extern void menu_reload (_menu *menu);
extern inline void menu_reload_menuitem (_menuitem *m); extern inline void menu_reload_menuitem (_menuitem *m);
extern void menu_focus_next (_menu *menu); extern void menu_focus_next (_menu *menu);

@ -1,11 +1,11 @@
/* $Id: single.h,v 1.2 2004/05/20 16:55:30 stpohle Exp $ /* $Id: single.h,v 1.3 2004/06/08 22:35:24 stpohle Exp $
* single player */ * single player */
// single.c // single.c
extern void single_game_new (); extern void single_game_new ();
extern void single_create_ai (int num_players); extern void single_create_ai (int num_players);
extern void single_loop(); extern void single_loop();
extern void single_playergame (); extern void single_playergame (int second_player, int ai_players);
extern void single_menu (); extern void single_menu ();
extern int single_select_player (); extern int single_select_player ();
extern int ai_choosedir (int dir, int nearbomb, int oldpos); extern int ai_choosedir (int dir, int nearbomb, int oldpos);

@ -1,4 +1,4 @@
/* $Id: menu.c,v 1.43 2004/05/20 16:55:30 stpohle Exp $ /* $Id: menu.c,v 1.44 2004/06/08 22:35:26 stpohle Exp $
* Menuhandling */ * Menuhandling */
#include "basic.h" #include "basic.h"
@ -246,6 +246,16 @@ menu_draw_menuitem (_menuitem * m)
}; };
/* delete the menuitem from the list, mark it as not used */
void menu_del_menuitem (_menuitem *m) {
m->type = MENU_none;
m->id = -1;
m->changed = 0;
m->ptrdata = NULL;
m->list = NULL;
};
/* reload all variables into all menuelements */ /* reload all variables into all menuelements */
void void
menu_reload (_menu * menu) menu_reload (_menu * menu)

@ -1,4 +1,4 @@
/* $Id: player.c,v 1.84 2004/05/20 16:55:30 stpohle Exp $ /* $Id: player.c,v 1.85 2004/06/08 22:35:26 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>
@ -1043,7 +1043,7 @@ void player2_join () {
send_joingame (&players[bman.p_servnr].net.addr, bman.player2name, flags); send_joingame (&players[bman.p_servnr].net.addr, bman.player2name, flags);
} }
else { /* single mode */ else { /* single mode */
for (i = 0; !PS_IS_used (players[i].state) && i < MAX_PLAYERS; i++); for (i = 0; PS_IS_used (players[i].state) && i < MAX_PLAYERS; i++);
if (i < MAX_PLAYERS) { /* free player found */ if (i < MAX_PLAYERS) { /* free player found */
player2_add (i); player2_add (i);
} }

@ -1,4 +1,4 @@
/* $Id: single.c,v 1.63 2004/05/20 16:55:30 stpohle Exp $ */ /* $Id: single.c,v 1.64 2004/06/08 22:35:26 stpohle Exp $ */
/* single player */ /* single player */
#include "basic.h" #include "basic.h"
@ -7,6 +7,8 @@
#include "player.h" #include "player.h"
#include "single.h" #include "single.h"
/* start a single player game and prepare everything for the game */
void void
single_game_new () single_game_new ()
{ {
@ -577,9 +579,13 @@ single_create_ai (int num_players)
}; };
/* single player game win/point screen */ /* single player game win/point screen
* 1. setup all player data
* 2. setup second local player and ai players
* 3. setup all other game related data
*/
void void
single_playergame () single_playergame (int second_player, int ai_players)
{ {
int p, int p,
done = 0; done = 0;
@ -605,13 +611,18 @@ single_playergame ()
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);
playermenu_selgfx (bman.p_nr); playermenu_selgfx (bman.p_nr);
gfx_free_players ();
if (players[bman.p_nr].gfx_nr == -1) if (players[bman.p_nr].gfx_nr == -1)
return; return;
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);
single_create_ai (bman.ai_players);
if (second_player) {
player2_join ();
playermenu_selgfx (bman.p2_nr);
}
gfx_free_players ();
single_create_ai (ai_players);
bman.state = GS_ready; bman.state = GS_ready;
while (!done && bman.state != GS_quit && bman.state != GS_startup) { while (!done && bman.state != GS_quit && bman.state != GS_startup) {
@ -696,16 +707,21 @@ single_loop ()
/* singleplayer menü with some options you can make */ /* singleplayer menü with some options you can make */
void void
single_menu () single_menu ()
{ {
int menuselect = 0, int i,
i,
p, p,
done = 0; eventstate = 0,
done = 0,
second_playerold = 0,
second_player = 0;
_charlist nrplayerlist[MAX_PLAYERS + 1]; _charlist nrplayerlist[MAX_PLAYERS + 1];
_charlist *selnrplayer = &nrplayerlist[bman.ai_players]; _charlist *selnrplayer = &nrplayerlist[bman.ai_players];
_menu *menu; _menu *menu;
_menuitem *pl2name = NULL;
_menuitem *aiplayer = NULL;
SDL_Event event;
/* fill in the nrplayerlist */ /* fill in the nrplayerlist */
if (debug) if (debug)
@ -721,41 +737,61 @@ single_menu ()
p++; p++;
} }
while (!done && bman.state != GS_quit) { menu = menu_new ("Single Game", 380,240);
menu = menu_new ("Single Player", 300, 250);
menu_create_label (menu, "Number Of AI Players", -1, 55, 0, COLOR_brown); menu_create_text (menu, "numpl", 20, 50, 12, 2, COLOR_yellow, "Number of\nAI Players");
menu_create_list (menu, "Players", -1, 80, 70, 70, nrplayerlist, &selnrplayer, 1); aiplayer = menu_create_list (menu, "AI Players", 40, 90, 50, 100, nrplayerlist, &selnrplayer, 3);
menu_create_button (menu, "Map Setting", -1, 180, 150, 2);
menu_create_button (menu, "OK", -1, 220, 150, 0); menu_create_entry (menu,"Player 1:",150, 50, 230, &bman.playername, LEN_PLAYERNAME, MENU_entrytext, 4);
menuselect = menu_loop (menu);
menu_delete (menu); menu_create_bool (menu, "Use Second Player", 160, 90, 210, &second_player, 5);
menu_create_button (menu, "Map Options", 180, 160, 150, 6);
menu_create_button (menu, "Main Menu", 30, 220, 150, 1);
menu_create_button (menu, "Start", 220, 220, 150, 2);
menu_focus_id (menu, 2);
menu->looprunning = 1;
menu_draw (menu);
/* read the current number of AI Players */ do {
bman.ai_players = (selnrplayer - &nrplayerlist[0]); /* create or destroy second playername menuentry */
if (!debug) if (second_player != second_playerold) {
bman.ai_players++; if (pl2name != NULL && !second_player) {
if (bman.ai_players > MAX_PLAYERS) { menu_del_menuitem (pl2name);
d_fatal ("single_menu: bman.ai_players selection out of range (%d)\n", bman.ai_players); pl2name = NULL;
bman.ai_players = 5;
} }
if (pl2name == NULL && second_player)
pl2name = menu_create_entry (menu,"Player 2:",150,120, 230, &bman.player2name, LEN_PLAYERNAME, MENU_entrytext, 4);
switch (menuselect) { second_playerold = second_player;
case (0): // Start Game aiplayer->changed = 1;
single_playergame (); menu_draw (menu);
break;
case (2): // Map Options
mapmenu ();
break;
case (-1):
done = 1;
break;
} }
draw_logo ();
SDL_Flip (gfx.screen); gfx_blitdraw ();
eventstate = SDL_PollEvent (&event);
done = menu_event_loop (menu, &event, eventstate);
if (done && menu->focus->id == 6) {
done = 0;
mapmenu ();
} }
s_calctimesync ();
} while (!done);
if (menu->focus->id == 2)
single_playergame (second_player, bman.ai_players);
menu_delete (menu);
}; };
/* single player selection /* single player selection
return value the gfx of the player or -1 for escape */ return value the gfx of the player or -1 for escape */
int int

Loading…
Cancel
Save