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