|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
/* $Id: single.c,v 1.65 2004/06/13 12:03:26 stpohle Exp $ */
|
|
|
|
|
/* $Id: single.c,v 1.66 2004/06/13 23:34:10 stpohle Exp $ */
|
|
|
|
|
/* single player */
|
|
|
|
|
|
|
|
|
|
#include "basic.h"
|
|
|
|
@ -556,8 +556,6 @@ single_create_ai (int num_players)
|
|
|
|
|
i = 0;
|
|
|
|
|
_player *pl;
|
|
|
|
|
|
|
|
|
|
d_printf ("single_create_ai : number of ai players %d\n", num_players);
|
|
|
|
|
|
|
|
|
|
for (count = 0; count < num_players; count++) {
|
|
|
|
|
/* find free players */
|
|
|
|
|
for (pl = NULL, p = 0; (pl == NULL && p < MAX_PLAYERS); p++)
|
|
|
|
@ -592,6 +590,9 @@ single_playergame (int second_player, int ai_players)
|
|
|
|
|
int p,
|
|
|
|
|
done = 0;
|
|
|
|
|
|
|
|
|
|
bman.p_nr = -1;
|
|
|
|
|
bman.p2_nr = -1;
|
|
|
|
|
|
|
|
|
|
/* delete player from the game */
|
|
|
|
|
for (p = 0; p < MAX_PLAYERS; p++) {
|
|
|
|
|
players[p].points = 0;
|
|
|
|
@ -599,6 +600,7 @@ single_playergame (int second_player, int ai_players)
|
|
|
|
|
players[p].state = 0;
|
|
|
|
|
players[p].gfx_nr = -1;
|
|
|
|
|
players[p].gfx = NULL;
|
|
|
|
|
memset (&players[p].net, 0x0, sizeof (_net_player));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (bman.p_nr = -1, p = 0; (bman.p_nr == -1 && p < MAX_PLAYERS); p++)
|
|
|
|
@ -612,15 +614,18 @@ single_playergame (int second_player, int ai_players)
|
|
|
|
|
|
|
|
|
|
strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME);
|
|
|
|
|
gfx_load_players (32, 32);
|
|
|
|
|
playermenu_selgfx (bman.p_nr);
|
|
|
|
|
if (players[bman.p_nr].gfx_nr == -1)
|
|
|
|
|
return;
|
|
|
|
|
do {
|
|
|
|
|
playermenu_selgfx (bman.p_nr);
|
|
|
|
|
} while (players[bman.p_nr].gfx_nr == -1);
|
|
|
|
|
|
|
|
|
|
players[bman.p_nr].state = PSF_used + PSF_alife + PSF_playing;
|
|
|
|
|
strncpy (players[bman.p_nr].name, bman.playername, LEN_PLAYERNAME);
|
|
|
|
|
|
|
|
|
|
if (second_player) {
|
|
|
|
|
player2_join ();
|
|
|
|
|
playermenu_selgfx (bman.p2_nr);
|
|
|
|
|
do {
|
|
|
|
|
playermenu_selgfx (bman.p2_nr);
|
|
|
|
|
} while (players[bman.p2_nr].gfx_nr == -1);
|
|
|
|
|
}
|
|
|
|
|
gfx_free_players ();
|
|
|
|
|
|
|
|
|
@ -748,7 +753,7 @@ single_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, "Map Options", 180, 160, 150, 7);
|
|
|
|
|
|
|
|
|
|
menu_create_button (menu, "Main Menu", 30, 220, 150, 1);
|
|
|
|
|
menu_create_button (menu, "Start", 220, 220, 150, 2);
|
|
|
|
@ -765,7 +770,7 @@ single_menu ()
|
|
|
|
|
pl2name = NULL;
|
|
|
|
|
}
|
|
|
|
|
if (pl2name == NULL && second_player)
|
|
|
|
|
pl2name = menu_create_entry (menu,"Player 2:",150,120, 230, &bman.player2name, LEN_PLAYERNAME, MENU_entrytext, 4);
|
|
|
|
|
pl2name = menu_create_entry (menu,"Player 2:",150,120, 230, &bman.player2name, LEN_PLAYERNAME, MENU_entrytext, 6);
|
|
|
|
|
|
|
|
|
|
second_playerold = second_player;
|
|
|
|
|
aiplayer->changed = 1;
|
|
|
|
@ -777,223 +782,21 @@ single_menu ()
|
|
|
|
|
|
|
|
|
|
done = menu_event_loop (menu, &event, eventstate);
|
|
|
|
|
|
|
|
|
|
if (done && menu->focus->id == 6) {
|
|
|
|
|
if (done && menu->focus->id == 7) {
|
|
|
|
|
done = 0;
|
|
|
|
|
mapmenu ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (done && menu->focus->id == 3)
|
|
|
|
|
done = 0;
|
|
|
|
|
|
|
|
|
|
s_calctimesync ();
|
|
|
|
|
} while (!done);
|
|
|
|
|
|
|
|
|
|
if (menu->focus->id == 2) {
|
|
|
|
|
bman.ai_players = selnrplayer - &nrplayerlist[0];
|
|
|
|
|
single_playergame (second_player, bman.ai_players);
|
|
|
|
|
}
|
|
|
|
|
bman.ai_players = selnrplayer - &nrplayerlist[0];
|
|
|
|
|
|
|
|
|
|
menu_delete (menu);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* single player selection
|
|
|
|
|
return value the gfx of the player or -1 for escape */
|
|
|
|
|
int
|
|
|
|
|
single_select_player ()
|
|
|
|
|
{
|
|
|
|
|
int selgfx = 0,
|
|
|
|
|
done = 0,
|
|
|
|
|
x,
|
|
|
|
|
y,
|
|
|
|
|
keypressed = 0,
|
|
|
|
|
frame = 0,
|
|
|
|
|
d = 0,
|
|
|
|
|
dto = 2,
|
|
|
|
|
newplayer = -1,
|
|
|
|
|
pos = 0,
|
|
|
|
|
i;
|
|
|
|
|
SDL_Rect dest,
|
|
|
|
|
src;
|
|
|
|
|
char text[255];
|
|
|
|
|
SDL_Event event;
|
|
|
|
|
Uint8 *keys;
|
|
|
|
|
Uint32 timeloop1;
|
|
|
|
|
|
|
|
|
|
menu_displaytext ("Loading..", "Please Wait");
|
|
|
|
|
|
|
|
|
|
dest.x = dest.y = 0;
|
|
|
|
|
dest.w = gfx.res.x;
|
|
|
|
|
dest.h = gfx.res.y;
|
|
|
|
|
|
|
|
|
|
gfx_load_players (64, 64);
|
|
|
|
|
gfx_blitupdaterectclear ();
|
|
|
|
|
|
|
|
|
|
draw_logo ();
|
|
|
|
|
|
|
|
|
|
strcpy (text, "Select your Player");
|
|
|
|
|
x = (gfx.res.x - (font[2].size.x * strlen (text)) - 64) / 2;
|
|
|
|
|
y = (gfx.res.y - font[2].size.y - 64 - 128) / 2;
|
|
|
|
|
font_gfxdrawbold (x, y, text, 2, COLOR_gray, 3, 10000);
|
|
|
|
|
font_gfxdrawbold (x, y, text, 2, COLOR_brown, 2, 10000);
|
|
|
|
|
font_gfxdraw (x, y, text, 2, COLOR_yellow, 10000);
|
|
|
|
|
|
|
|
|
|
while (!done) {
|
|
|
|
|
|
|
|
|
|
/* draw selected player */
|
|
|
|
|
frame++;
|
|
|
|
|
if (frame >= gfx.players[selgfx].ani.frames) {
|
|
|
|
|
frame = 0;
|
|
|
|
|
if (dto-- <= 0 && newplayer == -1) {
|
|
|
|
|
dto = 5;
|
|
|
|
|
if (d == up)
|
|
|
|
|
d = left;
|
|
|
|
|
else if (d == left)
|
|
|
|
|
d = down;
|
|
|
|
|
else if (d == down)
|
|
|
|
|
d = right;
|
|
|
|
|
else
|
|
|
|
|
d = up;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (newplayer != -1) {
|
|
|
|
|
SDL_Rect dest1,
|
|
|
|
|
src1;
|
|
|
|
|
|
|
|
|
|
pos += 8;
|
|
|
|
|
|
|
|
|
|
if (d == left) {
|
|
|
|
|
/* image 1 */
|
|
|
|
|
src.h = dest.h = gfx.players[selgfx].ani.h;
|
|
|
|
|
src.w = dest.w = gfx.players[selgfx].ani.w;
|
|
|
|
|
src.x = gfx.players[selgfx].ani.w * d;
|
|
|
|
|
src.y = gfx.players[selgfx].ani.h * frame;
|
|
|
|
|
dest.x = ((gfx.res.x - gfx.players[selgfx].ani.w) / 2) - pos;
|
|
|
|
|
dest.y = y + font[0].size.y + 64;
|
|
|
|
|
|
|
|
|
|
/* image 2 */
|
|
|
|
|
src1.h = dest1.h = gfx.players[newplayer].ani.h;
|
|
|
|
|
src1.w = dest1.w = gfx.players[newplayer].ani.w;
|
|
|
|
|
src1.x = gfx.players[newplayer].ani.w * d;
|
|
|
|
|
src1.y = gfx.players[newplayer].ani.h * frame;
|
|
|
|
|
dest1.x =
|
|
|
|
|
((gfx.res.x - gfx.players[newplayer].ani.w) / 2) + ((gfx.res.x / 2) + 128) -
|
|
|
|
|
pos;
|
|
|
|
|
dest1.y = y + font[0].size.y + 64;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* image 1 */
|
|
|
|
|
src.h = dest.h = gfx.players[selgfx].ani.h;
|
|
|
|
|
src.w = dest.w = gfx.players[selgfx].ani.w;
|
|
|
|
|
src.x = gfx.players[selgfx].ani.w * d;
|
|
|
|
|
src.y = gfx.players[selgfx].ani.h * frame;
|
|
|
|
|
dest.x = ((gfx.res.x - gfx.players[selgfx].ani.w) / 2) + pos;
|
|
|
|
|
dest.y = y + font[0].size.y + 64;
|
|
|
|
|
|
|
|
|
|
/* image 2 */
|
|
|
|
|
src1.h = dest1.h = gfx.players[newplayer].ani.h;
|
|
|
|
|
src1.w = dest1.w = gfx.players[newplayer].ani.w;
|
|
|
|
|
src1.x = gfx.players[newplayer].ani.w * d;
|
|
|
|
|
src1.y = gfx.players[newplayer].ani.h * frame;
|
|
|
|
|
dest1.x =
|
|
|
|
|
((gfx.res.x - gfx.players[newplayer].ani.w) / 2) - ((gfx.res.x / 2) + 128) +
|
|
|
|
|
pos;
|
|
|
|
|
dest1.y = y + font[0].size.y + 64;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
redraw_logo (0, y + font[0].size.y + 64, gfx.res.x, 128);
|
|
|
|
|
|
|
|
|
|
if (dest.x + dest.w > 0)
|
|
|
|
|
gfx_blit (gfx.players[selgfx].ani.image, &src, gfx.screen, &dest, 0);
|
|
|
|
|
if (dest1.x + dest1.w > 0)
|
|
|
|
|
gfx_blit (gfx.players[newplayer].ani.image, &src1, gfx.screen, &dest1, 0);
|
|
|
|
|
|
|
|
|
|
if (pos > (gfx.res.x / 2) + 128) {
|
|
|
|
|
selgfx = newplayer;
|
|
|
|
|
newplayer = -1;
|
|
|
|
|
pos = 0;
|
|
|
|
|
frame = 0;
|
|
|
|
|
d = down;
|
|
|
|
|
dto = 5;
|
|
|
|
|
}
|
|
|
|
|
frame++;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
src.h = dest.h = gfx.players[selgfx].ani.h;
|
|
|
|
|
src.w = dest.w = gfx.players[selgfx].ani.w;
|
|
|
|
|
src.x = gfx.players[selgfx].ani.w * d;
|
|
|
|
|
src.y = gfx.players[selgfx].ani.h * frame;
|
|
|
|
|
dest.x = (gfx.res.x - gfx.players[selgfx].ani.w) / 2;
|
|
|
|
|
dest.y = y + font[0].size.y + 64;
|
|
|
|
|
redraw_logo (dest.x, dest.y, dest.w, dest.h);
|
|
|
|
|
gfx_blit (gfx.players[selgfx].ani.image, &src, gfx.screen, &dest, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gfx_blitdraw ();
|
|
|
|
|
|
|
|
|
|
/* do the keyboard handling */
|
|
|
|
|
if (SDL_PollEvent (&event) != 0)
|
|
|
|
|
switch (event.type) {
|
|
|
|
|
case (SDL_QUIT):
|
|
|
|
|
bman.state = GS_quit;
|
|
|
|
|
bman.p_nr = -1;
|
|
|
|
|
done = 1;
|
|
|
|
|
selgfx = -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
keys = SDL_GetKeyState (NULL);
|
|
|
|
|
|
|
|
|
|
if (keys[SDLK_ESCAPE] && event.type == SDL_KEYDOWN) {
|
|
|
|
|
/* we want to quit */
|
|
|
|
|
done = 1;
|
|
|
|
|
bman.p_nr = -1;
|
|
|
|
|
keypressed = 1;
|
|
|
|
|
bman.state = GS_startup;
|
|
|
|
|
selgfx = -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (keys[SDLK_LEFT] && (!keypressed) && newplayer == -1) {
|
|
|
|
|
newplayer = selgfx - 1;
|
|
|
|
|
if (newplayer < 0)
|
|
|
|
|
newplayer = MAX_PLAYERS - 1;
|
|
|
|
|
d = left;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (keys[SDLK_RIGHT] && (!keypressed) && newplayer == -1) {
|
|
|
|
|
newplayer = selgfx + 1;
|
|
|
|
|
if (newplayer >= MAX_PLAYERS)
|
|
|
|
|
newplayer = 0;
|
|
|
|
|
d = right;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((keys[SDLK_RETURN] || keys[SDLK_RCTRL] || keys[SDLK_LCTRL]) && (!keypressed)
|
|
|
|
|
&& (event.type = SDL_KEYDOWN) && newplayer == -1) {
|
|
|
|
|
done = 1;
|
|
|
|
|
keypressed = 1;
|
|
|
|
|
// d_printf("return pressed - done=1\n");
|
|
|
|
|
}
|
|
|
|
|
if (event.type == SDL_KEYUP)
|
|
|
|
|
keypressed = 0;
|
|
|
|
|
else if (event.type == SDL_KEYDOWN)
|
|
|
|
|
keypressed = 1;
|
|
|
|
|
|
|
|
|
|
// calculate time sync.
|
|
|
|
|
timeloop1 = SDL_GetTicks ();
|
|
|
|
|
|
|
|
|
|
if (newplayer != -1)
|
|
|
|
|
i = 17;
|
|
|
|
|
else
|
|
|
|
|
i = 25;
|
|
|
|
|
|
|
|
|
|
while (timeloop1 - timestamp >= 0 && timeloop1 - timestamp < i) {
|
|
|
|
|
s_delay (i - (timeloop1 - timestamp) - 1);
|
|
|
|
|
timeloop1 = SDL_GetTicks ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
timestamp = timeloop1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gfx_free_players ();
|
|
|
|
|
if (menu->focus->id == 2)
|
|
|
|
|
single_playergame (second_player, bman.ai_players);
|
|
|
|
|
|
|
|
|
|
return selgfx;
|
|
|
|
|
menu_delete (menu);
|
|
|
|
|
};
|
|
|
|
|