|
|
@ -118,7 +118,8 @@ static int domenu(menuname whichmenu, int (*pause)(void)) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return 0; |
|
|
|
menudelta = 0; |
|
|
|
return menuexit; |
|
|
|
} |
|
|
|
|
|
|
|
static void menustart() { |
|
|
@ -172,84 +173,13 @@ static void addexit(char *item,...) { |
|
|
|
|
|
|
|
/* game menues */ |
|
|
|
|
|
|
|
static void drawjoinscreen(void) { |
|
|
|
int i; |
|
|
|
char name[17]; |
|
|
|
char temp[64]; |
|
|
|
|
|
|
|
#define JX (IXSIZE/3) |
|
|
|
#define JY (IYSIZE/4) |
|
|
|
|
|
|
|
clear(); |
|
|
|
centerbig(20,"JOIN NETWORK GAME"); |
|
|
|
drawbigstring(JX,JY,"SLOT NAME"); |
|
|
|
for(i=0;i<MAXNETNODES;++i) |
|
|
|
{ |
|
|
|
if(!netnodes[i].used) continue; |
|
|
|
memmove(name,netnodes[i].name,16); |
|
|
|
name[16]=0; |
|
|
|
sprintf(temp," %d %s",i+1,name); |
|
|
|
drawbigstring(JX,JY+(i+1)*bigfontyspace,temp); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static int tryjoin(int which) { |
|
|
|
int res; |
|
|
|
|
|
|
|
if (0 == (res = send_join(&gamelistentries[which].netname, playername))) |
|
|
|
return 0; |
|
|
|
|
|
|
|
for ( ;; ) { |
|
|
|
switch (res) { |
|
|
|
case 1: return 0; |
|
|
|
case 2: |
|
|
|
drawjoinscreen(); |
|
|
|
copyup(); |
|
|
|
break; |
|
|
|
case 3: return 1; |
|
|
|
default: break; |
|
|
|
} |
|
|
|
scaninput(); |
|
|
|
while(anydown()) { |
|
|
|
switch(takedown()) { |
|
|
|
case 0x1b: |
|
|
|
send_quit(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
res=scaninvite(200); |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static void main_menu(void) { |
|
|
|
int sel; |
|
|
|
|
|
|
|
while(!exitflag) { |
|
|
|
menustart(); |
|
|
|
additem("BOMBER MAIN MENU"); |
|
|
|
additem("EXIT GAME"); |
|
|
|
additem("START SINGLE PLAYER GAME"); |
|
|
|
additem("OPTIONS"); |
|
|
|
// additem("REMAP MOVEMENT KEYS"); |
|
|
|
additem("START NETWORK GAME"); |
|
|
|
additem("JOIN NETWORK GAME"); |
|
|
|
sel=domenu(MENU_MAIN, NULL); |
|
|
|
if(!sel) {exitflag=1;break;} |
|
|
|
if(sel==1) {gamemode=1;break;} |
|
|
|
if(sel==2) {gamemode=2;break;} |
|
|
|
if(sel==3) {gamemode=3;break;} |
|
|
|
if(sel==4) {gamemode=4;break;} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
char *densities[]={"PACKED","HIGH","MEDIUM","LOW"}; |
|
|
|
char *generosities[]={"LOW","MEDIUM","HIGH","RIDICULOUS"}; |
|
|
|
|
|
|
|
static void config_menu(void) { |
|
|
|
int sel; |
|
|
|
|
|
|
|
for(;;) { |
|
|
|
while (!exitflag) { |
|
|
|
menustart(); |
|
|
|
additem("GAME OPTIONS"); |
|
|
|
additem("RETURN TO MAIN MENU"); |
|
|
@ -258,30 +188,29 @@ static void config_menu(void) { |
|
|
|
additem("INITIAL FLAME LENGTH: %d",configopts.flames+1); |
|
|
|
additem("INITIAL NUMBER OF BOMBS: %d",configopts.bombs+1); |
|
|
|
sel=domenu(MENU_CONFIG, NULL); |
|
|
|
if(!sel) {gamemode=0;break;} |
|
|
|
if(sel==1) { |
|
|
|
switch (sel) { |
|
|
|
case 0: |
|
|
|
return; |
|
|
|
case 1: |
|
|
|
configopts.density+=menudelta; |
|
|
|
configopts.density&=3; |
|
|
|
} |
|
|
|
if(sel==2) { |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
configopts.generosity+=menudelta; |
|
|
|
configopts.generosity&=3; |
|
|
|
} |
|
|
|
if(sel==3) { |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
configopts.flames+=menudelta; |
|
|
|
configopts.flames&=7; |
|
|
|
} |
|
|
|
if(sel==4) { |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
configopts.bombs+=menudelta; |
|
|
|
configopts.bombs&=7; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void failure(char *str,...) { |
|
|
|
gamemode=0; |
|
|
|
} |
|
|
|
|
|
|
|
static void draw_host_game(void) { |
|
|
|
int i; |
|
|
|
char *name; |
|
|
@ -319,13 +248,12 @@ static void host_game(void) { |
|
|
|
case 0x1b: |
|
|
|
unregistergame(); |
|
|
|
cancel_network_game(); |
|
|
|
gamemode=0; |
|
|
|
return; |
|
|
|
case ' ': |
|
|
|
case 13: |
|
|
|
unregistergame(); |
|
|
|
if (begin_network_game()) { |
|
|
|
gamemode=5; |
|
|
|
run_network_game(); |
|
|
|
return; |
|
|
|
} |
|
|
|
send_invites(); |
|
|
@ -338,8 +266,58 @@ static void host_game(void) { |
|
|
|
send_invites(); |
|
|
|
draw_host_game(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
gamemode=0; |
|
|
|
static void drawjoinscreen(void) { |
|
|
|
int i; |
|
|
|
char name[17]; |
|
|
|
char temp[64]; |
|
|
|
|
|
|
|
#define JX (IXSIZE/3) |
|
|
|
#define JY (IYSIZE/4) |
|
|
|
|
|
|
|
clear(); |
|
|
|
centerbig(20,"JOIN NETWORK GAME"); |
|
|
|
drawbigstring(JX,JY,"SLOT NAME"); |
|
|
|
for (i = 0; i < MAXNETNODES; ++i) { |
|
|
|
if(!netnodes[i].used) continue; |
|
|
|
memmove(name,netnodes[i].name,16); |
|
|
|
name[16]=0; |
|
|
|
sprintf(temp," %d %s",i+1,name); |
|
|
|
drawbigstring(JX,JY+(i+1)*bigfontyspace,temp); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static int tryjoin(int which) { |
|
|
|
int res; |
|
|
|
|
|
|
|
if (0 == (res = send_join(&gamelistentries[which].netname, playername))) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
while (!exitflag) { |
|
|
|
switch (res) { |
|
|
|
case 1: |
|
|
|
failure("Game closed"); |
|
|
|
return 0; |
|
|
|
case 2: |
|
|
|
drawjoinscreen(); |
|
|
|
copyup(); |
|
|
|
break; |
|
|
|
case 3: return 1; |
|
|
|
default: break; |
|
|
|
} |
|
|
|
scaninput(); |
|
|
|
while(anydown()) { |
|
|
|
switch(takedown()) { |
|
|
|
case 0x1b: |
|
|
|
send_quit(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
res=scaninvite(200); |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
static int join_game_pause(void) { |
|
|
@ -353,7 +331,6 @@ static void join_game(void) { |
|
|
|
int sel = -1; |
|
|
|
|
|
|
|
if (!searchgames()) { |
|
|
|
gamemode = 0; |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
@ -372,33 +349,49 @@ static void join_game(void) { |
|
|
|
addexit("EXIT"); |
|
|
|
} |
|
|
|
sel = domenu(MENU_JOIN, join_game_pause); |
|
|
|
if (menudelta < 0) sel = -1; |
|
|
|
} |
|
|
|
stop_search(); |
|
|
|
|
|
|
|
if(menuexit == sel || !gamelistsize) { |
|
|
|
gamemode=0; |
|
|
|
return; |
|
|
|
} |
|
|
|
if(!tryjoin(sel)) { |
|
|
|
gamemode=0; |
|
|
|
return; |
|
|
|
} |
|
|
|
network = NETWORK_SLAVE; |
|
|
|
gamemode=5; |
|
|
|
run_network_game(); |
|
|
|
} |
|
|
|
|
|
|
|
void (*modefunctions[])()= { |
|
|
|
main_menu, |
|
|
|
run_single_player, |
|
|
|
config_menu, |
|
|
|
host_game, |
|
|
|
join_game, |
|
|
|
run_network_game, |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
void mainloop(void) { |
|
|
|
exitflag=0; |
|
|
|
while(!exitflag) |
|
|
|
modefunctions[gamemode](); |
|
|
|
int sel; |
|
|
|
|
|
|
|
exitflag = 0; |
|
|
|
while(!exitflag) { |
|
|
|
menustart(); |
|
|
|
additem("BOMBER MAIN MENU"); |
|
|
|
additem("EXIT GAME"); |
|
|
|
additem("START SINGLE PLAYER GAME"); |
|
|
|
additem("OPTIONS"); |
|
|
|
// additem("REMAP MOVEMENT KEYS"); |
|
|
|
additem("START NETWORK GAME"); |
|
|
|
additem("JOIN NETWORK GAME"); |
|
|
|
sel=domenu(MENU_MAIN, NULL); |
|
|
|
if (menudelta < 0) sel = -1; |
|
|
|
switch (sel) { |
|
|
|
case 0: |
|
|
|
return; |
|
|
|
case 1: |
|
|
|
run_single_player(); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
config_menu(); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
host_game(); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
join_game(); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |