parent
f17f2f593d
commit
dff79a295c
@ -0,0 +1,233 @@
|
||||
|
||||
/* map/tileset selection menu */
|
||||
|
||||
#include "bomberclone.h"
|
||||
#include "gfx.h"
|
||||
|
||||
/* load a random map */
|
||||
void map_random () {
|
||||
_direntry *destart, *de, *desel;
|
||||
char path[LEN_PATHFILENAME];
|
||||
int max, sel;
|
||||
|
||||
sprintf (path, "%s/maps", bman.datapath);
|
||||
desel = destart = s_getdir (path);
|
||||
|
||||
for (max = 0, de = destart; de != NULL; de = de->next)
|
||||
if ((de->flags & DF_file) == DF_file)
|
||||
max++;
|
||||
|
||||
sel = s_random (max);
|
||||
for (max = 0, de = destart; max <= sel && de != NULL; de = de->next)
|
||||
if ((de->flags & DF_file) == DF_file) {
|
||||
desel = de;
|
||||
max++;
|
||||
}
|
||||
|
||||
d_printf ("Random Map %s (%d on %d)\n", desel->name, sel, max);
|
||||
|
||||
if (desel != NULL)
|
||||
sprintf (bman.fieldpath, "%s/maps/%s", bman.datapath, desel->name);
|
||||
}
|
||||
|
||||
|
||||
/* load a random tileset */
|
||||
void tileset_random () {
|
||||
_direntry *destart, *de, *desel;
|
||||
char path[LEN_PATHFILENAME];
|
||||
int max, sel;
|
||||
|
||||
sprintf (path, "%s/tileset", bman.datapath);
|
||||
desel = destart = s_getdir (path);
|
||||
|
||||
for (max = 0, de = destart; de != NULL; de = de->next)
|
||||
if (de->name[0] != '.' && (de->flags & DF_dir) == DF_dir)
|
||||
max++;
|
||||
|
||||
sel = s_random (max);
|
||||
for (max = 0, de = destart; max <= sel && de != NULL; de = de->next)
|
||||
if (de->name[0] != '.' && (de->flags & DF_dir) == DF_dir) {
|
||||
desel = de;
|
||||
max++;
|
||||
}
|
||||
|
||||
d_printf ("Random Tileset %s (%d on %d)\n", desel->name, sel, max);
|
||||
|
||||
if (desel != NULL)
|
||||
strncpy (gfx.tileset, desel->name, LEN_TILESETNAME);
|
||||
gfx.tileset[LEN_TILESETNAME-1] = 0;
|
||||
}
|
||||
|
||||
|
||||
/* launch the map options menu */
|
||||
void mapmenu ()
|
||||
{
|
||||
int menuselect = 0;
|
||||
char text[255], *map, pathname[LEN_PATHFILENAME], size[4];
|
||||
|
||||
_menu menu[] = {
|
||||
{0, "Random Map:"},
|
||||
{1, "Selected Map:"},
|
||||
{2, " Size X:"},
|
||||
{3, " Size Y:"},
|
||||
{4, "Random Tileset:"},
|
||||
{5, "Selected Tileset:"},
|
||||
{-2, ""},
|
||||
{6, "Return To Previous Manu"},
|
||||
{-1, ""}
|
||||
};
|
||||
|
||||
while (menuselect != -1) {
|
||||
|
||||
|
||||
switch (bman.random_map) {
|
||||
case (0):
|
||||
if(bman.fieldpath[0]==0)
|
||||
sprintf (menu[1].text, "Selected Map: < undefined >");
|
||||
else
|
||||
sprintf (menu[1].text, "Selected Map: %s", getfilename(bman.fieldpath));
|
||||
menu[1].index = 1;
|
||||
sprintf (menu[0].text, "Random Map: OFF");
|
||||
menu[2].text[0] = 0;
|
||||
menu[2].index = -2;
|
||||
menu[3].text[0] = 0;
|
||||
menu[3].index = -2;
|
||||
break;
|
||||
|
||||
case (1):
|
||||
menu[1].text[0] = 0;
|
||||
menu[1].index = -2;
|
||||
sprintf (menu[0].text, "Random Map: random file");
|
||||
menu[2].text[0] = 0;
|
||||
menu[2].index = -2;
|
||||
menu[3].text[0] = 0;
|
||||
menu[3].index = -2;
|
||||
break;
|
||||
|
||||
case (2):
|
||||
menu[1].text[0] = 0;
|
||||
menu[1].index = -2;
|
||||
sprintf (menu[0].text, "Random Map: auto-generated");
|
||||
sprintf (menu[2].text, " Size X: %d", bman.fieldsize.x);
|
||||
menu[2].index = 2;
|
||||
sprintf (menu[3].text, " Size Y: %d", bman.fieldsize.y);
|
||||
menu[3].index = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
if(gfx.random_tileset)
|
||||
{
|
||||
menu[5].text[0] = 0;
|
||||
menu[5].index = -2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(gfx.tileset[0]==0)
|
||||
sprintf (menu[5].text, "Selected Tileset: < undefined >");
|
||||
else
|
||||
sprintf (menu[5].text, "Selected Tileset: %s", gfx.tileset);
|
||||
menu[5].index = 5;
|
||||
}
|
||||
|
||||
if(gfx.random_tileset)
|
||||
sprintf (menu[4].text, "Random Tileset: random file");
|
||||
else
|
||||
sprintf (menu[4].text, "Random Tileset: OFF");
|
||||
|
||||
menuselect = menu_loop ("Map Options", menu, menuselect);
|
||||
|
||||
switch (menuselect) {
|
||||
case (0): // Random Map
|
||||
bman.random_map = (bman.random_map+2)%3;
|
||||
break;
|
||||
|
||||
case (1): // Selected Map
|
||||
sprintf (pathname , "%s/maps", bman.datapath);
|
||||
map = menu_dir_select ("Select Map", pathname, DF_file);
|
||||
if (map == NULL)
|
||||
{
|
||||
bman.fieldpath[0] = 0;
|
||||
bman.random_map = 2;
|
||||
}
|
||||
else
|
||||
sprintf (bman.fieldpath, "%s/maps/%s", bman.datapath, map);
|
||||
break;
|
||||
|
||||
case (2): // Size X
|
||||
sprintf (text, "Field Size X (%d - %d)", MIN_FIELDSIZE_X, MAX_FIELDSIZE_X);
|
||||
sprintf (size, "%d", bman.fieldsize.x);
|
||||
menu_get_text (text, size, 3);
|
||||
bman.fieldsize.x = atoi (size) | 1;
|
||||
if (bman.fieldsize.x < MIN_FIELDSIZE_X)
|
||||
bman.fieldsize.x = MIN_FIELDSIZE_X;
|
||||
if (bman.fieldsize.x > MAX_FIELDSIZE_X)
|
||||
bman.fieldsize.x = MAX_FIELDSIZE_X;
|
||||
break;
|
||||
|
||||
case (3): // Size Y
|
||||
sprintf (text, "Field Size Y (%d - %d)", MIN_FIELDSIZE_Y, MAX_FIELDSIZE_Y);
|
||||
sprintf (size, "%d", bman.fieldsize.y);
|
||||
menu_get_text (text, size, 3);
|
||||
bman.fieldsize.y = atoi (size) | 1;
|
||||
if (bman.fieldsize.y < MIN_FIELDSIZE_Y)
|
||||
bman.fieldsize.y = MIN_FIELDSIZE_Y;
|
||||
if (bman.fieldsize.y > MAX_FIELDSIZE_Y)
|
||||
bman.fieldsize.y = MAX_FIELDSIZE_Y;
|
||||
break;
|
||||
|
||||
case (4): // Random Tileset
|
||||
if (gfx.random_tileset == 1)
|
||||
gfx.random_tileset = 0;
|
||||
else
|
||||
gfx.random_tileset = 1;
|
||||
break;
|
||||
|
||||
case (5): // Selected Tileset
|
||||
sprintf (pathname , "%s/tileset", bman.datapath);
|
||||
map = menu_dir_select ("Select Tileset", pathname, DF_dir);
|
||||
if (map == NULL)
|
||||
{
|
||||
gfx.tileset[0] = 0;
|
||||
gfx.random_tileset = 1;
|
||||
}
|
||||
else
|
||||
strcpy (gfx.tileset, map);
|
||||
break;
|
||||
|
||||
case (6): // Return to previous menu
|
||||
menuselect = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Return only the file name
|
||||
char* getfilename(char* path)
|
||||
{
|
||||
int i;
|
||||
for(i=strlen(path);i>=0;i--)
|
||||
if(path[i] == '\\' || path[i] == '/')
|
||||
return path+i+1;
|
||||
return path;
|
||||
}
|
||||
|
||||
// Init the game according to options
|
||||
void init_map_tileset()
|
||||
{
|
||||
switch (bman.random_map) {
|
||||
case (0):
|
||||
field_new (bman.fieldpath);
|
||||
break;
|
||||
case (1):
|
||||
map_random ();
|
||||
field_new (bman.fieldpath);
|
||||
break;
|
||||
case (2):
|
||||
field_new (NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
if (gfx.random_tileset)
|
||||
tileset_random ();
|
||||
}
|
Loading…
Reference in new issue