summaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
Diffstat (limited to 'src/base')
-rw-r--r--src/base/arenaFile.c97
-rw-r--r--src/base/arenaFile.h32
-rw-r--r--src/base/proto.c10
3 files changed, 103 insertions, 36 deletions
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;