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
*/
@ -83,6 +83,7 @@ extern void menu_draw (_menu *menu);
extern void menu_draw_border (_menu *menu);
extern void menu_draw_background (_menu *menu, SDL_Rect *dest);
extern inline void menu_draw_menuitem (_menuitem *m);
extern void menu_del_menuitem (_menuitem *m);
extern void menu_reload (_menu *menu);
extern inline void menu_reload_menuitem (_menuitem *m);
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.c
extern void single_game_new ();
extern void single_create_ai (int num_players);
extern void single_loop();
extern void single_playergame ();
extern void single_playergame (int second_player, int ai_players);
extern void single_menu ();
extern int single_select_player ();
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 */
#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 */
void
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 */
#include <SDL.h>
@ -1043,7 +1043,7 @@ void player2_join () {
send_joingame (&players[bman.p_servnr].net.addr, bman.player2name, flags);
}
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 */
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 */
#include "basic.h"
@ -7,6 +7,8 @@
#include "player.h"
#include "single.h"
/* start a single player game and prepare everything for the game */
void
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
single_playergame ()
single_playergame (int second_player, int ai_players)
{
int p,
done = 0;
@ -605,13 +611,18 @@ single_playergame ()
strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME);
gfx_load_players (32, 32);
playermenu_selgfx (bman.p_nr);
gfx_free_players ();
if (players[bman.p_nr].gfx_nr == -1)
return;
players[bman.p_nr].state = PSF_used + PSF_alife + PSF_playing;
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;
while (!done && bman.state != GS_quit && bman.state != GS_startup) {
@ -696,16 +707,21 @@ single_loop ()
/* singleplayer menü with some options you can make */
void
void
single_menu ()
{
int menuselect = 0,
i,
p,
done = 0;
int i,
p,
eventstate = 0,
done = 0,
second_playerold = 0,
second_player = 0;
_charlist nrplayerlist[MAX_PLAYERS + 1];
_charlist *selnrplayer = &nrplayerlist[bman.ai_players];
_menu *menu;
_menuitem *pl2name = NULL;
_menuitem *aiplayer = NULL;
SDL_Event event;
/* fill in the nrplayerlist */
if (debug)
@ -721,41 +737,61 @@ single_menu ()
p++;
}
while (!done && bman.state != GS_quit) {
menu = menu_new ("Single Player", 300, 250);
menu_create_label (menu, "Number Of AI Players", -1, 55, 0, COLOR_brown);
menu_create_list (menu, "Players", -1, 80, 70, 70, nrplayerlist, &selnrplayer, 1);
menu_create_button (menu, "Map Setting", -1, 180, 150, 2);
menu_create_button (menu, "OK", -1, 220, 150, 0);
menuselect = menu_loop (menu);
menu_delete (menu);
/* read the current number of AI Players */
bman.ai_players = (selnrplayer - &nrplayerlist[0]);
if (!debug)
bman.ai_players++;
if (bman.ai_players > MAX_PLAYERS) {
d_fatal ("single_menu: bman.ai_players selection out of range (%d)\n", bman.ai_players);
bman.ai_players = 5;
}
menu = menu_new ("Single Game", 380,240);
switch (menuselect) {
case (0): // Start Game
single_playergame ();
break;
case (2): // Map Options
mapmenu ();
break;
case (-1):
done = 1;
break;
}
draw_logo ();
SDL_Flip (gfx.screen);
}
menu_create_text (menu, "numpl", 20, 50, 12, 2, COLOR_yellow, "Number of\nAI Players");
aiplayer = menu_create_list (menu, "AI Players", 40, 90, 50, 100, nrplayerlist, &selnrplayer, 3);
menu_create_entry (menu,"Player 1:",150, 50, 230, &bman.playername, LEN_PLAYERNAME, MENU_entrytext, 4);
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);
do {
/* create or destroy second playername menuentry */
if (second_player != second_playerold) {
if (pl2name != NULL && !second_player) {
menu_del_menuitem (pl2name);
pl2name = NULL;
}
if (pl2name == NULL && second_player)
pl2name = menu_create_entry (menu,"Player 2:",150,120, 230, &bman.player2name, LEN_PLAYERNAME, MENU_entrytext, 4);
second_playerold = second_player;
aiplayer->changed = 1;
menu_draw (menu);
}
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
return value the gfx of the player or -1 for escape */
int

Loading…
Cancel
Save