diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-09-02 22:07:07 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-09-02 22:07:07 +0000 |
| commit | 7c4d8699b2e9ba64f98bd2a0290080726fa8ccfe (patch) | |
| tree | bdb43761035b14a4ad1dd2d86c7e12a89963a0a0 | |
| parent | f8204ae7059f1b49c01c72e1bc9647f366cb34b9 (diff) | |
- areny su ulozene v *.zip archivoch
( totalne rozmrdany zdrojovy kod -- zajtra to dokoncim )
git-svn-id: http://opensvn.csie.org/tuxanci_ng@263 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | cmake/FindZZIP.cmake | 30 | ||||
| -rw-r--r-- | data/arena/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | data/arena/ba_in_a_captivity_of_8-bit.zip | bin | 0 -> 72799 bytes | |||
| -rw-r--r-- | data/arena/construction_site.zip | bin | 0 -> 1006877 bytes | |||
| -rw-r--r-- | data/arena/for_a_good_night.zip | bin | 0 -> 403585 bytes | |||
| -rw-r--r-- | data/arena/in_a_captivity_of_8-bit.zip | bin | 0 -> 102859 bytes | |||
| -rw-r--r-- | data/arena/night_workshift.zip | bin | 0 -> 1031695 bytes | |||
| -rw-r--r-- | src/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | src/base/arenaFile.c | 97 | ||||
| -rw-r--r-- | src/base/arenaFile.h | 32 | ||||
| -rw-r--r-- | src/base/proto.c | 10 | ||||
| -rwxr-xr-x | src/client/image.c | 11 | ||||
| -rw-r--r-- | src/client/saveLoad.c | 7 | ||||
| -rw-r--r-- | src/screen/screen_choiceArena.c | 28 | ||||
| -rw-r--r-- | src/screen/screen_choiceArena.h | 3 | ||||
| -rw-r--r-- | src/screen/screen_setting.c | 6 | ||||
| -rw-r--r-- | src/screen/screen_world.c | 4 | ||||
| -rw-r--r-- | src/screen/screen_world.h | 3 |
19 files changed, 183 insertions, 59 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index cf35312..89846cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,6 +178,7 @@ IF ( NOT Win AND NOT Server ) FIND_PACKAGE ( SDL REQUIRED ) FIND_PACKAGE ( SDL_image REQUIRED ) FIND_PACKAGE ( SDL_ttf REQUIRED ) + FIND_PACKAGE ( ZZIP REQUIRED ) IF ( NOT NO_Audio ) FIND_PACKAGE ( SDL_mixer REQUIRED ) ENDIF ( NOT NO_Audio ) diff --git a/cmake/FindZZIP.cmake b/cmake/FindZZIP.cmake new file mode 100644 index 0000000..75b46a5 --- /dev/null +++ b/cmake/FindZZIP.cmake @@ -0,0 +1,30 @@ +# - Find zzip +# Find the native ZZIP includes and library +# +# ZZIP_INCLUDE_DIR - where to find zzip.h, etc. +# ZZIP_LIBRARIES - List of libraries when using zzip. +# ZZIP_FOUND - True if zzip found. + + +IF (ZZIP_INCLUDE_DIR) + # Already in cache, be silent + SET(ZZIP_FIND_QUIETLY TRUE) +ENDIF (ZZIP_INCLUDE_DIR) + +FIND_PATH(ZZIP_INCLUDE_DIR zzip.h) + +SET(ZZIP_NAMES zzip) +FIND_LIBRARY(ZZIP_LIBRARY NAMES ${ZZIP_NAMES} ) + +# handle the QUIETLY and REQUIRED arguments and set ZZIP_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZZIP DEFAULT_MSG ZZIP_LIBRARY ZZIP_INCLUDE_DIR) + +IF(ZZIP_FOUND) + SET( ZZIP_LIBRARIES ${ZZIP_LIBRARY} ) +ELSE(ZZIP_FOUND) + SET( ZZIP_LIBRARIES ) +ENDIF(ZZIP_FOUND) + +MARK_AS_ADVANCED( ZZIP_LIBRARY ZZIP_INCLUDE_DIR ) diff --git a/data/arena/CMakeLists.txt b/data/arena/CMakeLists.txt index 36cdae3..9a7fdd1 100644 --- a/data/arena/CMakeLists.txt +++ b/data/arena/CMakeLists.txt @@ -7,7 +7,7 @@ ############################################################################### # CURRENT DIRECTORY FILES ############################################################################### -FILE ( GLOB files "*.map" ) +FILE ( GLOB files "*.zip" ) INSTALL ( FILES ${files} DESTINATION ${CMAKE_INSTALL_DATADIR}/${APPNAME}/arena/ ) ###############################################################################
\ No newline at end of file diff --git a/data/arena/ba_in_a_captivity_of_8-bit.zip b/data/arena/ba_in_a_captivity_of_8-bit.zip Binary files differnew file mode 100644 index 0000000..57df09f --- /dev/null +++ b/data/arena/ba_in_a_captivity_of_8-bit.zip diff --git a/data/arena/construction_site.zip b/data/arena/construction_site.zip Binary files differnew file mode 100644 index 0000000..3b14bd8 --- /dev/null +++ b/data/arena/construction_site.zip diff --git a/data/arena/for_a_good_night.zip b/data/arena/for_a_good_night.zip Binary files differnew file mode 100644 index 0000000..9c5830b --- /dev/null +++ b/data/arena/for_a_good_night.zip diff --git a/data/arena/in_a_captivity_of_8-bit.zip b/data/arena/in_a_captivity_of_8-bit.zip Binary files differnew file mode 100644 index 0000000..b0d07e6 --- /dev/null +++ b/data/arena/in_a_captivity_of_8-bit.zip diff --git a/data/arena/night_workshift.zip b/data/arena/night_workshift.zip Binary files differnew file mode 100644 index 0000000..6b719bb --- /dev/null +++ b/data/arena/night_workshift.zip diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d61f4c3..650c9a9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,14 +7,14 @@ IF ( Server ) LINK_LIBRARIES ( ${CMAKE_DL_LIBS} ) ELSE ( Server ) IF ( NO_Audio ) - LINK_LIBRARIES ( ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLTTF_LIBRARY} ) + LINK_LIBRARIES ( ${ZZIP_LIBRARY} ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLTTF_LIBRARY} ) ELSE ( NO_Audio ) - LINK_LIBRARIES ( ${SDL_LIBRARY} ${SDLMIXER_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLTTF_LIBRARY} ) + LINK_LIBRARIES ( ${ZZIP_LIBRARY} ${SDL_LIBRARY} ${SDLMIXER_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLTTF_LIBRARY} ) ENDIF ( NO_Audio ) ENDIF ( Server ) IF ( Win ) IF ( NLS ) - LINK_LIBRARIES ( ${LIB_GETTEXT} ${LIB_INTL} ${LIB_GETTEXTPO} ${LIBGETTEXTSRC} ) + LINK_LIBRARIES ( ${LIB_ZZIP} {LIB_GETTEXT} ${LIB_INTL} ${LIB_GETTEXTPO} ${LIBGETTEXTSRC} ) ENDIF ( NLS ) LINK_LIBRARIES ( wsock32 ) ELSE ( Win ) @@ -54,7 +54,7 @@ SET ( SRC_base ${WORKDIR}/base/director ${WORKDIR}/base/idManager ${WORKDIR}/base/homeDirector ${WORKDIR}/base/proto ${WORKDIR}/base/shareFunction ${WORKDIR}/base/buffer - + ${WORKDIR}/base/archive ${WORKDIR}/net/dns ) diff --git a/src/base/arenaFile.c b/src/base/arenaFile.c index bd048b0..25e0582 100644 --- a/src/base/arenaFile.c +++ b/src/base/arenaFile.c @@ -14,6 +14,7 @@ #include "item.h" #include "director.h" #include "modules.h" +#include "archive.h" #ifndef PUBLIC_SERVER #include "configFile.h" @@ -60,6 +61,18 @@ int getArenaValue(char *line, char *env, char *val, int len) } +image_t* loadImageFromArena(arenaFile_t *arenaFile, char *filename, char *group, char *name, int alpha) +{ + char *extractFile; + image_t *image; + + extractFile = extractFileFromArchive(arenaFile->path, filename); + image = addImageData(extractFile, alpha, name, group); + deleteExtractFile(extractFile); + + return image; +} + static void cmd_arena(arena_t **arena, char *line) { char str_image[STR_SIZE]; @@ -95,7 +108,7 @@ static void cmd_loadModule(char *line) #ifndef PUBLIC_SERVER -static void cmd_loadImage(char *line) +static void cmd_loadImage(arenaFile_t *arenaFile, char *line) { char str_file[STR_SIZE]; char str_name[STR_SIZE]; @@ -107,7 +120,11 @@ static void cmd_loadImage(char *line) return; if (getArenaValue(line, "alpha", str_alpha, STR_SIZE) != 0) return; - addImageData(str_file, isYesOrNO(str_alpha), str_name, IMAGE_GROUP_USER); + + 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) @@ -139,13 +156,11 @@ int getArenaCount() return listArenaFile->count; } -static char *getArenaStatus(int id, char *s) +static char *getArenaStatus(textFile_t *ts, char *s) { - textFile_t *ts; int len; int i; - ts = (textFile_t *) listArenaFile->list[id]; len = strlen(s); for( i = 0; i < ts->text->count; i++ ) { char *line; @@ -156,44 +171,56 @@ static char *getArenaStatus(int id, char *s) return NULL; } -char *getArenaName(int id) +char *getArenaName(arenaFile_t *arenaFile) { char *ret; - ret = getArenaStatus(id, "name"); + ret = getArenaStatus(arenaFile->map, "name"); return ( ret != NULL ? ret : "arena_no_name" ); } -char *getArenaNetName(int id) +char *getArenaNetName(arenaFile_t *arenaFile) { char *ret; - ret = getArenaStatus(id, "netName"); + ret = getArenaStatus(arenaFile->map, "netName"); return ( ret != NULL ? ret : "arena_no_net_name" ); } -int getArenaIdFormNetName(char *s) +arenaFile_t* getArenaFileFormNetName(char *s) { int i; for (i = 0; i < listArenaFile->count; i++) - if (strcmp(getArenaNetName(i), s) == 0) - return i; - return -1; + { + arenaFile_t *arenaFile; + + arenaFile = (arenaFile_t *)listArenaFile->list[i]; + if (strcmp(getArenaNetName(arenaFile), s) == 0) + return arenaFile; + } + + return NULL; +} + +char *getArenaImage(arenaFile_t *arenaFile) +{ + return getArenaStatus(arenaFile->map, "screen"); } -char *getArenaImage(int id) +arenaFile_t* getArenaFile(int n) { - return getArenaStatus(id, "screen"); + return (arenaFile_t *)listArenaFile->list[n]; } -arena_t* getArena(int id) +arena_t* getArena(arenaFile_t *arenaFile) { textFile_t *ts; arena_t *arena = NULL; // no warninng int i; - ts = (textFile_t *) listArenaFile->list[id]; + ts = (textFile_t *) arenaFile->map; + for( i = 0 ; i < ts->text->count ; i++ ) { char *line; @@ -201,7 +228,7 @@ arena_t* getArena(int id) cmdModule(line); #ifndef PUBLIC_SERVER if (strncmp(line, "loadImage", 9) == 0) - cmd_loadImage(line); + cmd_loadImage(arenaFile, line); if (strncmp(line, "loadMusic", 9) == 0) cmd_loadMusic(line); if (strncmp(line, "playMusic", 9) == 0) @@ -215,9 +242,32 @@ arena_t* getArena(int id) //if( strncmp(line, "teleport", 8) == 0 )cmd_teleport(arena, line); //if( strncmp(line, "pipe", 4) == 0 )cmd_pipe(arena, line); } + return arena; } +arenaFile_t* newArenaFile(char *path) +{ + arenaFile_t *new; + char *extractFile; + + new = malloc( sizeof(arenaFile_t) ); + new->path = strdup(path); + + extractFile = extractFileFromArchive(path, "mapa.map"); + new->map = loadTextFile(extractFile); + deleteExtractFile(extractFile); + + return new; +} + +void destroyArenaFile(arenaFile_t *p) +{ + destroyTextFile(p->map); + free(p->path); + free(p); +} + void initArenaFile() { director_t *p; @@ -231,18 +281,19 @@ void initArenaFile() p = loadDirector(PATH_ARENA); for (i = 0; i < p->list->count; i++) { char *line; - + line = (char *)( p->list->list[i] ); - if (strstr(line, ".map") != NULL && + if (strstr(line, ".zip") != NULL && strstr(line, "~") == NULL) { char path[STR_PATH_SIZE]; sprintf(path, PATH_ARENA "%s", line); #ifdef DEBUG - printf(_("Loading map file: %s\n"), line); + printf(_("Loading arena: %s\n"), line); #endif accessExistFile(path); - addList(listArenaFile, loadTextFile(path)); + + addList(listArenaFile, newArenaFile(path)); } } //printf("No. of Arens: %d\n", listArenaFile->count); @@ -252,5 +303,5 @@ void initArenaFile() void quitArenaFile() { isArenaFileInit = FALSE; - destroyListItem(listArenaFile, destroyTextFile); + destroyListItem(listArenaFile, destroyArenaFile); } diff --git a/src/base/arenaFile.h b/src/base/arenaFile.h index 75efec8..b4ca92b 100644 --- a/src/base/arenaFile.h +++ b/src/base/arenaFile.h @@ -5,15 +5,27 @@ #include "main.h" #include "arena.h" + #include "textFile.h" - extern int getArenaValue(char *line, char *env, char *val, int len); - extern bool_t isArenaFileInicialized(); - extern void initArenaFile(); - extern int getArenaCount(); - extern char *getArenaName(int id); - extern char *getArenaNetName(int id); - extern int getArenaIdFormNetName(char *s); - extern char *getArenaImage(int id); - extern arena_t* getArena(int id); - extern void quitArenaFile(); + +typedef struct +{ + char *path; + textFile_t *map; +} arenaFile_t; + +extern bool_t isAreaFileInicialized(); +extern int getArenaValue(char *line, char *env, char *val, int len); +extern int getArenaCount(); +extern char *getArenaName(arenaFile_t *arenaFile); +extern char *getArenaNetName(arenaFile_t *arenaFile); +extern arenaFile_t* getArenaFileFormNetName(char *s); +extern char *getArenaImage(arenaFile_t *arenaFile); +extern image_t* loadImageFromArena(arenaFile_t *arenaFile, char *filename, char *group, char *name, int alpha); +extern arenaFile_t* getArenaFile(int n); +extern arena_t* getArena(arenaFile_t *arenaFile); +extern arenaFile_t* newArenaFile(char *path); +extern void initArenaFile(); +extern void quitArenaFile(); + #endif diff --git a/src/base/proto.c b/src/base/proto.c index ca10743..9c9163e 100644 --- a/src/base/proto.c +++ b/src/base/proto.c @@ -228,7 +228,8 @@ void proto_send_status_server(int type, client_t *client) clients = getCurrentArena()->spaceTux->listIndex->count; maxclients = getServerMaxClients(); uptime = (unsigned int)getUpdateServer(); - arena = getArenaNetName( getChoiceArenaId() ); + //arena = getArenaNetName( getChoiceArenaId() ); + //TODO snprintf(msg, STR_PROTO_SIZE, "name: %s\n" @@ -346,10 +347,12 @@ 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 //proto_send(type, client, msg); protoSendClient(type, client, msg, CHECK_FRONT_TYPE_CHECK, check_id); @@ -385,7 +388,8 @@ void proto_recv_init_client(char *msg) return; } - setWorldArena( getArenaIdFormNetName(arena_name) ); + //setWorldArena( getArenaIdFormNetName(arena_name) ); + //TODO arena = getCurrentArena(); arena->max_countRound = n; diff --git a/src/client/image.c b/src/client/image.c index bcac02c..86f80af 100755 --- a/src/client/image.c +++ b/src/client/image.c @@ -40,8 +40,15 @@ static SDL_Surface *loadImage(const char *filename, int alpha) char str[STR_PATH_SIZE]; - sprintf(str, PATH_IMAGE "%s", filename); - + if( filename[0] != '/' ) + { + sprintf(str, PATH_IMAGE "%s", filename); + } + else + { + strcpy(str, filename); + } + accessExistFile(str); if( ( tmp = IMG_Load(str) ) == NULL ) diff --git a/src/client/saveLoad.c b/src/client/saveLoad.c index a02a80f..15ad143 100644 --- a/src/client/saveLoad.c +++ b/src/client/saveLoad.c @@ -59,11 +59,13 @@ 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()), arena->countRound, arena->max_countRound); +*/ + //TODO addList(textFile->text, strdup(str)); @@ -105,7 +107,8 @@ static arena_t* loadArenaFromLine(char *line) sscanf(line, "%s %s %d %d", cmd, name, &countRound, &max_countRound); - setWorldArena( getArenaIdFormNetName(name) ); + //setWorldArena( getArenaIdFormNetName(name) ); + //TODO arena = getCurrentArena(); arena->max_countRound = max_countRound; diff --git a/src/screen/screen_choiceArena.c b/src/screen/screen_choiceArena.c index 6d10649..ca14c0c 100644 --- a/src/screen/screen_choiceArena.c +++ b/src/screen/screen_choiceArena.c @@ -29,7 +29,7 @@ static widget_t *button_play; static widget_t *button_back; static list_t *listWidgetButtonimage; -static int choiceArenaId; +static arenaFile_t* currentArena; void startScreenChoiceArena() { @@ -90,7 +90,7 @@ static void eventWidgetButtonImage(void *p) if( buttonimage == this ) { setWidgetButtonimageActive(this, TRUE); - choiceArenaId = i; + currentArena = getArenaFile(i); } else { @@ -99,18 +99,23 @@ static void eventWidgetButtonImage(void *p) } } -int getChoiceArenaId() +arenaFile_t* getChoiceArenaId() { - return choiceArenaId; + return currentArena; } void setChoiceArenaId(int n) { widget_t *widget_buttonimage; - choiceArenaId = n; + if( n < 0 ) + { + return; + } + + currentArena = getArenaFile(n); - widget_buttonimage = (widget_t *)listWidgetButtonimage->list[choiceArenaId]; + widget_buttonimage = (widget_t *)listWidgetButtonimage->list[n]; setWidgetButtonimageActive(widget_buttonimage, TRUE); } @@ -143,14 +148,21 @@ void initScreenChoiceArena() button_play = newWidgetButton(_("play"), WINDOW_SIZE_X-200, WINDOW_SIZE_Y-100, eventWidget); listWidgetButtonimage = newList(); - choiceArenaId = 0; + currentArena = NULL; for( i = 0 ; i < getArenaCount() ; i++ ) { widget_t *widget_buttonimage; + arenaFile_t* arenaFile; int x, y; - image = addImageData(getArenaImage(i), IMAGE_NO_ALPHA, "none", IMAGE_GROUP_BASE); + arenaFile = getArenaFile(i); + //image = addImageData(getArenaImage(i), IMAGE_NO_ALPHA, "none", IMAGE_GROUP_BASE); + image = loadImageFromArena(arenaFile, + getArenaImage(arenaFile), + IMAGE_GROUP_BASE, + "none", + IMAGE_NO_ALPHA); x = 100 + 200 * ( i - 3 * ( i/3 ) ); y = 150 + 200 * ( i/3 ); diff --git a/src/screen/screen_choiceArena.h b/src/screen/screen_choiceArena.h index 22989ce..1e38ee8 100644 --- a/src/screen/screen_choiceArena.h +++ b/src/screen/screen_choiceArena.h @@ -4,13 +4,14 @@ #define SCREEN_CHOICE_ARENA #include "main.h" +#include "arenaFile.h" #define SCREENSHOT_ARENA_WIDTH 160 #define SCREENSHOT_ARENA_HEIGHT 107 extern void drawScreenChoiceArena(); extern void eventScreenChoiceArena(); -extern int getChoiceArenaId(); +extern arenaFile_t* getChoiceArenaId(); extern void setChoiceArenaId(int n); extern void initScreenChoiceArena(); extern void quitScreenChoiceArena(); diff --git a/src/screen/screen_setting.c b/src/screen/screen_setting.c index 452164d..229d34d 100644 --- a/src/screen/screen_setting.c +++ b/src/screen/screen_setting.c @@ -281,7 +281,8 @@ static void initSettingFile() #endif loadValueFromConfigFile(configFile, "ARENA", val, STR_SIZE, "FAGN"); - setChoiceArenaId( getArenaIdFormNetName(val) ); + //setChoiceArenaId( getArenaIdFormNetName(val) ); + //TODO saveTextFile(configFile); } @@ -320,7 +321,8 @@ static void saveAndDestroyConfigFile() setValueInConfigFile(configFile, "SOUND", getYesOrNo(getWidgetCheckStatus(check_sound))); #endif - setValueInConfigFile(configFile, "ARENA", getArenaNetName(getChoiceArenaId())); + //setValueInConfigFile(configFile, "ARENA", getArenaNetName(getChoiceArenaId())); + //TODO saveTextFile(configFile); destroyTextFile(configFile); diff --git a/src/screen/screen_world.c b/src/screen/screen_world.c index 52e92be..d6febf7 100644 --- a/src/screen/screen_world.c +++ b/src/screen/screen_world.c @@ -71,9 +71,9 @@ void setGameType() } } -void setWorldArena(int id) +void setWorldArena(arenaFile_t *arenaFile) { - arena = getArena(id); + arena = getArena(arenaFile); #ifndef NO_SOUND playMusic(arena->music, MUSIC_GROUP_USER); diff --git a/src/screen/screen_world.h b/src/screen/screen_world.h index a0358a7..35c02ba 100644 --- a/src/screen/screen_world.h +++ b/src/screen/screen_world.h @@ -6,6 +6,7 @@ #include "main.h" #include "myTimer.h" #include "tux.h" +#include "arenaFile.h" #include "arena.h" #define TIMER_END_ARENA 5000 @@ -14,7 +15,7 @@ extern bool_t isScreenWorldInicialized(); extern void initWorld(); -extern void setWorldArena(int id); +extern void setWorldArena(arenaFile_t *arenaFile); extern void setWorldEnd(); extern void countRoundInc(); extern tux_t* getControlTux(int control_type); |