From e1ddeeedb8f2e68d775fce8409b475f92350fa51 Mon Sep 17 00:00:00 2001 From: stpohle Date: Tue, 6 May 2003 20:48:53 +0000 Subject: [PATCH] Tileset Random Function Works --- src/bomberclone.h | 5 ++- src/configuration.c | 4 +-- src/field.c | 26 ++++++++++++++- src/gfx.c | 3 +- src/menu.c | 77 ++++++++++++++++++++++++++++++++++++++++++++- src/netmenu.c | 2 ++ src/packets.c | 4 +-- src/single.c | 3 +- src/sysfunc.c | 4 +-- 9 files changed, 117 insertions(+), 11 deletions(-) diff --git a/src/bomberclone.h b/src/bomberclone.h index 26606c8..584961c 100644 --- a/src/bomberclone.h +++ b/src/bomberclone.h @@ -1,4 +1,4 @@ -/* $Id: bomberclone.h,v 1.10 2003/05/06 12:09:22 stpohle Exp $ */ +/* $Id: bomberclone.h,v 1.11 2003/05/06 20:48:53 stpohle Exp $ */ /* bomberclone.h */ #ifndef _BOMBERCLONE_H_ @@ -15,6 +15,8 @@ #include #ifdef _WIN32 #include +#define IS_DIR(a) ((a & _S_IFDIR) == _S_IFDIR) +#define IS_REG(a) ((a & _S_IFREG) == _S_IFREG) #else #include #include @@ -163,6 +165,7 @@ extern void draw_field (); extern void draw_stone (int x, int y); extern void field_new (char *filename); extern void field_set_playerposition (int usermap); +extern void tileset_random (); // everything what is declared in players.c extern void dead_playerani (); diff --git a/src/configuration.c b/src/configuration.c index 3c230b9..b85b476 100644 --- a/src/configuration.c +++ b/src/configuration.c @@ -44,8 +44,8 @@ game_init () gfx.res.x = 640; gfx.res.y = 480; gfx.bpp = 16; - tileset[0] = 0; - random_tileset = 1; + gfx.tileset[0] = 0; + gfx.random_tileset = 1; bman.fieldsize.x = 25; bman.fieldsize.y = 17; sprintf (bman.datapath, "data"); diff --git a/src/field.c b/src/field.c index f58f2e8..643f721 100644 --- a/src/field.c +++ b/src/field.c @@ -1,4 +1,4 @@ -/* $Id: field.c,v 1.11 2003/05/05 20:40:04 stpohle Exp $ */ +/* $Id: field.c,v 1.12 2003/05/06 20:48:53 stpohle Exp $ */ /* field.c - procedures which are needed to control the field */ #include @@ -372,3 +372,27 @@ field_new (char *filename) x = y = 0; } } + +/* load a random tileset */ +void +tileset_random () { + _direntry *destart, *de; + char path[LEN_PATHFILENAME]; + int max, sel; + + sprintf (path, "%s/tileset", bman.datapath); + 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) + max++; + + if (de != NULL) + strncpy (gfx.tileset, de->name, LEN_TILESETNAME); + gfx.tileset[LEN_TILESETNAME-1] = 0; +} diff --git a/src/gfx.c b/src/gfx.c index 26080fd..0bb27b0 100644 --- a/src/gfx.c +++ b/src/gfx.c @@ -661,7 +661,8 @@ void gfx_load_tileset (char *tilesetname) { SDL_Surface *tmpimage, *tmpimage1; float sfkt; - d_printf ("Loading Tileset: %s\n", tileset); + d_printf ("Loading Tileset: %s\n", tilesetname); + strncpy (tileset, tilesetname, LEN_TILESETNAME); /* Calculate the Best Size of the Images */ gfx.block.x = gfx.res.x / (bman.fieldsize.x+1); diff --git a/src/menu.c b/src/menu.c index c74f64d..bf04da0 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,4 +1,4 @@ -/* $Id: menu.c,v 1.6 2003/05/06 12:25:30 stpohle Exp $ */ +/* $Id: menu.c,v 1.7 2003/05/06 20:48:54 stpohle Exp $ */ /* menu's for the game */ #include @@ -348,5 +348,80 @@ menu_displaymessage (char *title, char *text) s_delay (100); } +}; + +/*** + *** Menu Selection of a file ior a directory + ***/ +#define DIRSCRMAX 10 +static char menu_selectedfile[LEN_PATHFILENAME]; + +/* draws the selection on the screen.. + dirstart - first entry do display + flags - flags what should be shown directorys or files + selected - Selected file in the list +*/ +int menu_dir_draw (_direntry *dirstart, signed char dirflags, _direntry *select) { + +} + +char *menu_dir_select (char *path, signed char dirflags) { + _direntry *destart, *de; + int max = 0, sel = -1, done = 0; + + /* get the directory list and count the numbers */ + destart = s_getdir (path); + for (max = 0, de = destart; de != NULL; de = de->next) + if (de->name[0] != '.' && (de->flags & dirflags) != 0) + max++; + if (max <= 0) + return NULL; + + while (done == 0 || (done == 1 && keypressed == 1)) { + + /* do the network loop if we have to */ + if (bman.gametype == GT_multi && bman.sock != -1) + network_loop (); + + if (SDL_PollEvent (&event) != 0) + switch (event.type) { + case (SDL_QUIT): + menuselect = -1; + bman.state = GS_quit; + done = 1; + } + /* keyboard handling */ + keys = SDL_GetKeyState (NULL); + if (keys[SDLK_DOWN] && event.type == SDL_KEYDOWN && keypressed == 0) { + keypressed = 1; + menuselect++; + if (menuselect >= lastentry) + menuselect = 0; + } + + if (keys[SDLK_UP] && event.type == SDL_KEYDOWN && keypressed == 0) { + keypressed = 1; + menuselect--; + if (menuselect < 0) + menuselect = lastentry - 1; + } + + if (keys[SDLK_ESCAPE] && event.type == SDL_KEYDOWN) { + keypressed = 1; + return -1; + } + if (!keys[SDLK_ESCAPE] && event.type == SDL_KEYUP) + keypressed = 0; + + if (keys[SDLK_RETURN] && event.type == SDL_KEYDOWN) { + done = 1; + keypressed = 1; + } + if (!keys[SDLK_RETURN] && event.type == SDL_KEYUP) + keypressed = 0; + + s_delay (100); + } }; +#undef DIRSCRMAX diff --git a/src/netmenu.c b/src/netmenu.c index 54ebafa..4e0e52e 100644 --- a/src/netmenu.c +++ b/src/netmenu.c @@ -190,6 +190,8 @@ host_multiplayer_game () bman.state = GS_update; net_new_game (); field_new (bman.fieldpath); + if (gfx.random_tileset) + tileset_random (); net_send_servermode (); gfx_game_init (); net_new_gamedata (); diff --git a/src/packets.c b/src/packets.c index 759efcc..eb4611a 100644 --- a/src/packets.c +++ b/src/packets.c @@ -267,7 +267,7 @@ do_servermode (struct pkg_servermode *s_mod, _net_addr * addr) bman.fieldsize.x = s_mod->fieldsize_x; bman.fieldsize.y = s_mod->fieldsize_y; } - strncpy (gfx.tileset, s_mod.tileset, LEN_TILESETNAME); + strncpy (gfx.tileset, s_mod->tileset, LEN_TILESETNAME); }; @@ -981,7 +981,7 @@ do_pkg (struct pkg *packet, _net_addr * addr) } /* check if the incoming packet have the right size */ - if (packet->h.tye == PKG_servermode && packet->h.len != sizeof (pkg_servermode)) + if (packet->h.typ == PKG_servermode && packet->h.len != sizeof (struct pkg_servermode)) send_error (addr, "pkg_servermode: packetsize incorrect."); switch (packet->h.typ) { diff --git a/src/single.c b/src/single.c index a381149..86a2fd2 100644 --- a/src/single.c +++ b/src/single.c @@ -1,4 +1,4 @@ -/* $Id: single.c,v 1.5 2003/05/05 15:53:27 stpohle Exp $ */ +/* $Id: single.c,v 1.6 2003/05/06 20:48:54 stpohle Exp $ */ /* single player */ #include "basic.h" @@ -38,6 +38,7 @@ single_game_new (int ai_players) bman.last_ex_nr = 1; field_new (bman.fieldpath); + tileset_random (); bman.players_nr_s = 1; bman.players_nr = 1; diff --git a/src/sysfunc.c b/src/sysfunc.c index 48fc632..36cf55e 100644 --- a/src/sysfunc.c +++ b/src/sysfunc.c @@ -1,4 +1,4 @@ -/* $Id: sysfunc.c,v 1.2 2003/05/06 12:09:22 stpohle Exp $ +/* $Id: sysfunc.c,v 1.3 2003/05/06 20:48:54 stpohle Exp $ sysfunc.c - this file hold some routines for the system functions.. like d_delay */ @@ -71,7 +71,7 @@ s_gethomedir () direntrys[entrynr].name[LEN_FILENAME - 1] = 0; sprintf (filename, "%s/%s\0", path, direntrys[entrynr].name); - lstat (filename, &fstat); + stat (filename, &fstat); if (S_ISREG (fstat.st_mode)) { direntrys[entrynr].flags = DF_file; direntrys[entrynr].next = &direntrys[entrynr + 1];