summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/audio/music.c17
-rw-r--r--src/base/arenaFile.c46
-rw-r--r--src/base/arenaFile.h3
-rw-r--r--src/base/main.c16
-rw-r--r--src/base/main.h1
-rw-r--r--src/base/proto.c14
-rwxr-xr-xsrc/base/textFile.c8
-rwxr-xr-xsrc/client/image.c6
-rw-r--r--src/client/saveLoad.c9
-rw-r--r--src/screen/screen_choiceArena.c15
-rw-r--r--src/screen/screen_choiceArena.h4
-rw-r--r--src/screen/screen_setting.c5
-rw-r--r--src/screen/screen_world.c4
-rw-r--r--src/server/publicServer.c17
-rw-r--r--src/server/publicServer.h3
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();