diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/audio/music.c | 17 | ||||
| -rw-r--r-- | src/base/arenaFile.c | 46 | ||||
| -rw-r--r-- | src/base/arenaFile.h | 3 | ||||
| -rw-r--r-- | src/base/main.c | 16 | ||||
| -rw-r--r-- | src/base/main.h | 1 | ||||
| -rw-r--r-- | src/base/proto.c | 14 | ||||
| -rwxr-xr-x | src/base/textFile.c | 8 | ||||
| -rwxr-xr-x | src/client/image.c | 6 | ||||
| -rw-r--r-- | src/client/saveLoad.c | 9 | ||||
| -rw-r--r-- | src/screen/screen_choiceArena.c | 15 | ||||
| -rw-r--r-- | src/screen/screen_choiceArena.h | 4 | ||||
| -rw-r--r-- | src/screen/screen_setting.c | 5 | ||||
| -rw-r--r-- | src/screen/screen_world.c | 4 | ||||
| -rw-r--r-- | src/server/publicServer.c | 17 | ||||
| -rw-r--r-- | src/server/publicServer.h | 3 |
16 files changed, 115 insertions, 55 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 650c9a9..4504227 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -4,7 +4,7 @@ # LINKING ( for binary ) ############################################################################### IF ( Server ) - LINK_LIBRARIES ( ${CMAKE_DL_LIBS} ) + LINK_LIBRARIES ( ${ZZIP_LIBRARY} ${CMAKE_DL_LIBS} ) ELSE ( Server ) IF ( NO_Audio ) LINK_LIBRARIES ( ${ZZIP_LIBRARY} ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLTTF_LIBRARY} ) diff --git a/src/audio/music.c b/src/audio/music.c index f2ac6e1..f1c5cd8 100644 --- a/src/audio/music.c +++ b/src/audio/music.c @@ -50,13 +50,26 @@ static Mix_Music* loadMixMusic(char *file) { Mix_Music *mixer; char str[STR_PATH_SIZE]; + #ifdef DEBUG printf(_("Loading music file: %s\n"), file); #endif - sprintf(str, PATH_MUSIC "%s", file); + + if( isFillPath(file) ) + { + strcpy(str, file); + } + else + { + sprintf(str, PATH_MUSIC "%s", file); + } + accessExistFile(str); + mixer = Mix_LoadMUS(str); - if( mixer == NULL ) { + + if( mixer == NULL ) + { fprintf(stderr, _("Unable to load music from file: %s\n"), file); return NULL; } diff --git a/src/base/arenaFile.c b/src/base/arenaFile.c index 25e0582..6c50d34 100644 --- a/src/base/arenaFile.c +++ b/src/base/arenaFile.c @@ -61,6 +61,7 @@ int getArenaValue(char *line, char *env, char *val, int len) } +#ifndef PUBLIC_SERVER image_t* loadImageFromArena(arenaFile_t *arenaFile, char *filename, char *group, char *name, int alpha) { char *extractFile; @@ -73,6 +74,18 @@ image_t* loadImageFromArena(arenaFile_t *arenaFile, char *filename, char *group, return image; } +#ifndef NO_SOUND +void loadMusicFromArena(arenaFile_t *arenaFile, char *filename, char *group, char *name) +{ + char *extractFile; + + extractFile = extractFileFromArchive(arenaFile->path, filename); + addMusic(extractFile, name, group); + deleteExtractFile(extractFile); +} +#endif +#endif + static void cmd_arena(arena_t **arena, char *line) { char str_image[STR_SIZE]; @@ -121,13 +134,13 @@ static void cmd_loadImage(arenaFile_t *arenaFile, char *line) if (getArenaValue(line, "alpha", str_alpha, STR_SIZE) != 0) return; - printf("str_file=%s str_name=%s str_alpha=%s\n", str_file, str_name, str_alpha); + //printf("str_file=%s str_name=%s str_alpha=%s\n", str_file, str_name, str_alpha); loadImageFromArena(arenaFile, str_file, IMAGE_GROUP_USER, str_name, isYesOrNO(str_alpha)); //addImageData(str_file, isYesOrNO(str_alpha), str_name, IMAGE_GROUP_USER); } -static void cmd_loadMusic(char *line) +static void cmd_loadMusic(arenaFile_t *arenaFile, char *line) { char str_file[STR_SIZE]; char str_name[STR_SIZE]; @@ -137,7 +150,8 @@ static void cmd_loadMusic(char *line) if (getArenaValue(line, "name", str_name, STR_SIZE) != 0) return; #ifndef NO_SOUND - addMusic(str_file, str_name, MUSIC_GROUP_USER); + //addMusic(str_file, str_name, MUSIC_GROUP_USER); + loadMusicFromArena(arenaFile, str_file, MUSIC_GROUP_USER, str_name); #endif } @@ -190,7 +204,7 @@ char *getArenaNetName(arenaFile_t *arenaFile) arenaFile_t* getArenaFileFormNetName(char *s) { int i; - +// for (i = 0; i < listArenaFile->count; i++) { arenaFile_t *arenaFile; @@ -213,6 +227,25 @@ arenaFile_t* getArenaFile(int n) return (arenaFile_t *)listArenaFile->list[n]; } +int getArenaFileID(arenaFile_t *arenaFile) +{ + int i; + + for (i = 0; i < listArenaFile->count; i++) + { + arenaFile_t *this; + + this = (arenaFile_t *)listArenaFile->list[i]; + + if( this == arenaFile) + { + return i; + } + } + + return -1; +} + arena_t* getArena(arenaFile_t *arenaFile) { textFile_t *ts; @@ -230,7 +263,7 @@ arena_t* getArena(arenaFile_t *arenaFile) if (strncmp(line, "loadImage", 9) == 0) cmd_loadImage(arenaFile, line); if (strncmp(line, "loadMusic", 9) == 0) - cmd_loadMusic(line); + cmd_loadMusic(arenaFile, line); if (strncmp(line, "playMusic", 9) == 0) cmd_playMusic(arena, line); #endif @@ -254,7 +287,7 @@ arenaFile_t* newArenaFile(char *path) new = malloc( sizeof(arenaFile_t) ); new->path = strdup(path); - extractFile = extractFileFromArchive(path, "mapa.map"); + extractFile = extractFileFromArchive(path, "arena.map"); new->map = loadTextFile(extractFile); deleteExtractFile(extractFile); @@ -283,6 +316,7 @@ void initArenaFile() char *line; line = (char *)( p->list->list[i] ); + if (strstr(line, ".zip") != NULL && strstr(line, "~") == NULL) { char path[STR_PATH_SIZE]; diff --git a/src/base/arenaFile.h b/src/base/arenaFile.h index b4ca92b..4f1cdc5 100644 --- a/src/base/arenaFile.h +++ b/src/base/arenaFile.h @@ -21,8 +21,11 @@ extern char *getArenaName(arenaFile_t *arenaFile); extern char *getArenaNetName(arenaFile_t *arenaFile); extern arenaFile_t* getArenaFileFormNetName(char *s); extern char *getArenaImage(arenaFile_t *arenaFile); +#ifndef PUBLIC_SERVER extern image_t* loadImageFromArena(arenaFile_t *arenaFile, char *filename, char *group, char *name, int alpha); +#endif extern arenaFile_t* getArenaFile(int n); +extern int getArenaFileID(arenaFile_t *arenaFile); extern arena_t* getArena(arenaFile_t *arenaFile); extern arenaFile_t* newArenaFile(char *path); extern void initArenaFile(); diff --git a/src/base/main.c b/src/base/main.c index 62f433a..18ff5f3 100644 --- a/src/base/main.c +++ b/src/base/main.c @@ -112,6 +112,22 @@ int tryExistFile (const char *s) return 0; } +int isFillPath(const char *path) +{ + assert( path != NULL); + +#ifndef __WIN32__ + if( path[0] == '/' ) // for Unix-like systems ;) +#else + if( path[1] == ':' ) // for Windows-like systems ;) +#endif + { + return 1; + } + + return 0; +} + #ifdef __WIN32__ int WINAPI WinMain( HINSTANCE hInstance, diff --git a/src/base/main.h b/src/base/main.h index b50e56c..3555550 100644 --- a/src/base/main.h +++ b/src/base/main.h @@ -22,6 +22,7 @@ extern bool_t isParamFlag(char *s); extern char *getString(int n); extern int* newInt(int x); + extern int isFillPath(const char *path); extern void accessExistFile(const char *s); extern int tryExistFile (const char *s); #endif diff --git a/src/base/proto.c b/src/base/proto.c index 9c9163e..5097146 100644 --- a/src/base/proto.c +++ b/src/base/proto.c @@ -228,8 +228,7 @@ void proto_send_status_server(int type, client_t *client) clients = getCurrentArena()->spaceTux->listIndex->count; maxclients = getServerMaxClients(); uptime = (unsigned int)getUpdateServer(); - //arena = getArenaNetName( getChoiceArenaId() ); - //TODO + arena = getArenaNetName( getChoiceArena() ); snprintf(msg, STR_PROTO_SIZE, "name: %s\n" @@ -347,12 +346,10 @@ void proto_send_init_server(int type, client_t *client, client_t *client2) #endif check_id = getNewIDcount(0); -/* + snprintf(msg, STR_PROTO_SIZE, "init %d %d %d %d %s %d\n", client2->tux->id, client2->tux->x, client2->tux->y, - count, getArenaNetName( getChoiceArenaId() ), check_id); -*/ - //TODO + count, getArenaNetName( getChoiceArena() ), check_id); //proto_send(type, client, msg); protoSendClient(type, client, msg, CHECK_FRONT_TYPE_CHECK, check_id); @@ -388,10 +385,9 @@ void proto_recv_init_client(char *msg) return; } - //setWorldArena( getArenaIdFormNetName(arena_name) ); - //TODO - arena = getCurrentArena(); + setWorldArena( getArenaFileFormNetName(arena_name) ); + arena = getCurrentArena(); arena->max_countRound = n; tux = newTux(); diff --git a/src/base/textFile.c b/src/base/textFile.c index b7668ef..48e5044 100755 --- a/src/base/textFile.c +++ b/src/base/textFile.c @@ -14,11 +14,8 @@ textFile_t* newTextFile(char *s) textFile_t *new; char path[STR_PATH_SIZE]; assert( s != NULL ); -#ifndef __WIN32__ - if( s[0] == '/' ) -#else - if( s[1] == ':' ) -#endif + + if( isFillPath(s) ) { strcpy(path, s); } @@ -28,6 +25,7 @@ textFile_t* newTextFile(char *s) strcat(path, "/"); strcat(path, s); } + new = malloc(sizeof(textFile_t)); new->file = strdup(path); new->text = newList(); diff --git a/src/client/image.c b/src/client/image.c index 86f80af..4c4010c 100755 --- a/src/client/image.c +++ b/src/client/image.c @@ -40,13 +40,13 @@ static SDL_Surface *loadImage(const char *filename, int alpha) char str[STR_PATH_SIZE]; - if( filename[0] != '/' ) + if( isFillPath(filename) ) { - sprintf(str, PATH_IMAGE "%s", filename); + strcpy(str, filename); } else { - strcpy(str, filename); + sprintf(str, PATH_IMAGE "%s", filename); } accessExistFile(str); diff --git a/src/client/saveLoad.c b/src/client/saveLoad.c index 15ad143..be7933b 100644 --- a/src/client/saveLoad.c +++ b/src/client/saveLoad.c @@ -59,13 +59,11 @@ static void action_saveItem(space_t *space, item_t *item, textFile_t *textFile) static void saveContextArenaToTextFile(textFile_t *textFile, arena_t *arena) { char str[STR_PROTO_SIZE]; -/* + sprintf(str, "ARENA %s %d %d", - getArenaNetName(getChoiceArenaId()), + getArenaNetName(getChoiceArena()), arena->countRound, arena->max_countRound); -*/ - //TODO addList(textFile->text, strdup(str)); @@ -107,8 +105,7 @@ static arena_t* loadArenaFromLine(char *line) sscanf(line, "%s %s %d %d", cmd, name, &countRound, &max_countRound); - //setWorldArena( getArenaIdFormNetName(name) ); - //TODO + setWorldArena( getArenaFileFormNetName(name) ); arena = getCurrentArena(); arena->max_countRound = max_countRound; diff --git a/src/screen/screen_choiceArena.c b/src/screen/screen_choiceArena.c index ca14c0c..b12b8ec 100644 --- a/src/screen/screen_choiceArena.c +++ b/src/screen/screen_choiceArena.c @@ -99,23 +99,20 @@ static void eventWidgetButtonImage(void *p) } } -arenaFile_t* getChoiceArenaId() +arenaFile_t* getChoiceArena() { return currentArena; } -void setChoiceArenaId(int n) +void setChoiceArena(arenaFile_t *arenaFile) { widget_t *widget_buttonimage; + int id; - if( n < 0 ) - { - return; - } - - currentArena = getArenaFile(n); + id = getArenaFileID(arenaFile); + currentArena = arenaFile; - widget_buttonimage = (widget_t *)listWidgetButtonimage->list[n]; + widget_buttonimage = (widget_t *)listWidgetButtonimage->list[id]; setWidgetButtonimageActive(widget_buttonimage, TRUE); } diff --git a/src/screen/screen_choiceArena.h b/src/screen/screen_choiceArena.h index 1e38ee8..8ff3a0c 100644 --- a/src/screen/screen_choiceArena.h +++ b/src/screen/screen_choiceArena.h @@ -11,8 +11,8 @@ extern void drawScreenChoiceArena(); extern void eventScreenChoiceArena(); -extern arenaFile_t* getChoiceArenaId(); -extern void setChoiceArenaId(int n); +extern arenaFile_t* getChoiceArena(); +extern void setChoiceArena(arenaFile_t *arenaFile); extern void initScreenChoiceArena(); extern void quitScreenChoiceArena(); diff --git a/src/screen/screen_setting.c b/src/screen/screen_setting.c index 229d34d..c79acaf 100644 --- a/src/screen/screen_setting.c +++ b/src/screen/screen_setting.c @@ -281,8 +281,7 @@ static void initSettingFile() #endif loadValueFromConfigFile(configFile, "ARENA", val, STR_SIZE, "FAGN"); - //setChoiceArenaId( getArenaIdFormNetName(val) ); - //TODO + setChoiceArena( getArenaFileFormNetName(val) ); saveTextFile(configFile); } @@ -321,7 +320,7 @@ static void saveAndDestroyConfigFile() setValueInConfigFile(configFile, "SOUND", getYesOrNo(getWidgetCheckStatus(check_sound))); #endif - //setValueInConfigFile(configFile, "ARENA", getArenaNetName(getChoiceArenaId())); + setValueInConfigFile(configFile, "ARENA", getArenaNetName(getChoiceArena())); //TODO saveTextFile(configFile); diff --git a/src/screen/screen_world.c b/src/screen/screen_world.c index d6febf7..36ccddb 100644 --- a/src/screen/screen_world.c +++ b/src/screen/screen_world.c @@ -134,7 +134,7 @@ void prepareArena() switch( getNetTypeGame() ) { case NET_GAME_TYPE_NONE : - setWorldArena( getChoiceArenaId() ); + setWorldArena( getChoiceArena() ); addNewItem(arena->spaceItem, ID_UNKNOWN); getSettingCountRound(&arena->max_countRound); @@ -165,7 +165,7 @@ void prepareArena() break; case NET_GAME_TYPE_SERVER : - setWorldArena( getChoiceArenaId() ); + setWorldArena( getChoiceArena() ); addNewItem(arena->spaceItem, ID_UNKNOWN); getSettingCountRound(&arena->max_countRound); diff --git a/src/server/publicServer.c b/src/server/publicServer.c index 27fcead..8770300 100644 --- a/src/server/publicServer.c +++ b/src/server/publicServer.c @@ -39,9 +39,9 @@ #include "dns.h" -static int arenaId; static arena_t *arena; static bool_t isSignalEnd; +static arenaFile_t *choice_arenaFile; extern int errno; @@ -227,6 +227,13 @@ static int initPublicServerNetwork() return ret; } +static void loadArena() +{ + choice_arenaFile = getArenaFileFormNetName( getSetting("ARENA", "--arena", "FAGN") ); + arena = getArena(choice_arenaFile); + setCurrentArena(arena); +} + int initPublicServer() { int ret; @@ -250,9 +257,7 @@ int initPublicServer() initHeightScore( getSetting("SCORE_FILE", "--score-file", "/tmp/heightscore") ); - arenaId = getArenaIdFormNetName( getSetting("ARENA", "--arena", "FAGN") ); - arena = getArena(arenaId); - setCurrentArena(arena); + loadArena(); for( i = 0 ; i < atoi(getSetting("ITEM", "--item", "10")) ; i++ ) { @@ -279,9 +284,9 @@ int initPublicServer() return 0; } -int getChoiceArenaId() +arenaFile_t* getChoiceArena() { - return arenaId; + return choice_arenaFile; } void eventPublicServer() diff --git a/src/server/publicServer.h b/src/server/publicServer.h index c8ab7f4..f6aa29c 100644 --- a/src/server/publicServer.h +++ b/src/server/publicServer.h @@ -4,13 +4,14 @@ #define PUBLIC_SERVER_H #include "arena.h" +#include "arenaFile.h" #define WORLD_COUNT_ROUND_UNLIMITED -1 extern char *getSetting(char *env, char *param, char *default_val); extern void countRoundInc(); extern int initPublicServer(); -extern int getChoiceArenaId(); +extern arenaFile_t* getChoiceArena(); extern void eventPublicServer(); extern void my_handler_quit(int n); extern void quitPublicServer(); |