map2lnd: Convert gateway information.

git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@6766 4a71c877-e1ca-e34f-864e-861f7616d084
master
Per Inge Mathisen 2009-03-02 18:53:08 +00:00
parent 5e1895ac70
commit a348f2683b
3 changed files with 46 additions and 23 deletions

View File

@ -34,11 +34,6 @@ typedef enum _tileset_type
static const char *tilesetDataSet[] = { "WarzoneDataC1.eds", "WarzoneDataC2.eds", "WarzoneDataC3.eds" }; static const char *tilesetDataSet[] = { "WarzoneDataC1.eds", "WarzoneDataC2.eds", "WarzoneDataC3.eds" };
static const char *tilesetTextures[] = { "texpages\\tertilesc1.pcx", "texpages\\tertilesc2.pcx", "texpages\\tertilesc3.pcx" }; static const char *tilesetTextures[] = { "texpages\\tertilesc1.pcx", "texpages\\tertilesc2.pcx", "texpages\\tertilesc3.pcx" };
static MAPTILE *mapTile(GAMEMAP *map, int x, int y)
{
return &map->psMapTiles[y * map->width + x];
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
char filename[PATH_MAX]; char filename[PATH_MAX];
@ -177,6 +172,9 @@ int main(int argc, char **argv)
MADD(" FeatureSet %s", tilesetDataSet[tileset]); MADD(" FeatureSet %s", tilesetDataSet[tileset]);
MADD(" NumObjects 0"); MADD(" NumObjects 0");
MADD(" Objects {"); MADD(" Objects {");
// %d UniqueID, %d TypeID, \"%s\" StructureName or description or \"NONAME\", %d PlayerID, \"%s\" ScriptName or \"NONAME\" MAY BE MISSING in v<3!
// fprintf(Stream, "%.2f %.2f %.2f ", Position.x, Position.y, Position.z);
// fprintf(Stream, "%.2f %.2f %.2f\n", curNode->Rotation.x, curNode->Rotation.y, curNode->Rotation.z);
MADD(" }"); MADD(" }");
MADD("}"); MADD("}");
MADD("ScrollLimits {"); MADD("ScrollLimits {");
@ -188,8 +186,14 @@ int main(int argc, char **argv)
MADD("}"); MADD("}");
MADD("Gateways {"); MADD("Gateways {");
MADD(" Version 1"); MADD(" Version 1");
MADD(" NumGateways 0"); // FIXME MADD(" NumGateways %d", (int)map->numGateways);
MADD(" Gates {"); MADD(" Gates {");
for (i = 0; i < map->numGateways; i++)
{
GATEWAY *psGate = mapGateway(map, i);
MADD(" %llu %llu %llu %llu", psGate->x1, psGate->y1, psGate->x2, psGate->y2);
}
MADD(" }"); MADD(" }");
MADD("}"); MADD("}");
MADD("TileTypes {"); MADD("TileTypes {");

View File

@ -10,7 +10,8 @@
void mapFree(GAMEMAP *map) void mapFree(GAMEMAP *map)
{ {
free(map->psMapTiles); free(map->mGateways);
free(map->mMapTiles);
free(map); free(map);
} }
@ -51,28 +52,28 @@ GAMEMAP *mapLoad(char *filename)
|| aFileType[1] != 'a' || aFileType[1] != 'a'
|| aFileType[2] != 'p') || aFileType[2] != 'p')
{ {
debug(LOG_ERROR, "Bad header in %s", filename); debug(LOG_ERROR, "Bad header in %s", path);
return NULL; return NULL;
} }
else if (map->version <= 9) else if (map->version <= 9)
{ {
debug(LOG_ERROR, "%s: Unsupported save format version %u", filename, map->version); debug(LOG_ERROR, "%s: Unsupported save format version %u", path, map->version);
return NULL; return NULL;
} }
else if (map->version > 36) else if (map->version > 36)
{ {
debug(LOG_ERROR, "%s: Undefined save format version %u", filename, map->version); debug(LOG_ERROR, "%s: Undefined save format version %u", path, map->version);
return NULL; return NULL;
} }
else if (map->width * map->height > MAP_MAXAREA) else if (map->width * map->height > MAP_MAXAREA)
{ {
debug(LOG_ERROR, "Map %s too large : %d %d", filename, map->width, map->height); debug(LOG_ERROR, "Map %s too large : %d %d", path, map->width, map->height);
return NULL; return NULL;
} }
/* Allocate the memory for the map */ /* Allocate the memory for the map */
map->psMapTiles = calloc(map->width * map->height, sizeof(*map->psMapTiles)); map->mMapTiles = calloc(map->width * map->height, sizeof(*map->mMapTiles));
if (!map->psMapTiles) if (!map->mMapTiles)
{ {
debug(LOG_ERROR, "Out of memory"); debug(LOG_ERROR, "Out of memory");
return NULL; return NULL;
@ -86,31 +87,31 @@ GAMEMAP *mapLoad(char *filename)
if (!readU16(&texture) || !readU8(&height)) if (!readU16(&texture) || !readU8(&height))
{ {
debug(LOG_ERROR, "%s: Error during savegame load", filename); debug(LOG_ERROR, "%s: Error during savegame load", path);
return NULL; return NULL;
} }
map->psMapTiles[i].texture = texture; map->mMapTiles[i].texture = texture;
map->psMapTiles[i].height = height; map->mMapTiles[i].height = height;
for (j = 0; j < MAX_PLAYERS; j++) for (j = 0; j < MAX_PLAYERS; j++)
{ {
map->psMapTiles[i].tileVisBits = (uint8_t)(map->psMapTiles[i].tileVisBits &~ (uint8_t)(1 << j)); map->mMapTiles[i].tileVisBits = (uint8_t)(map->mMapTiles[i].tileVisBits &~ (uint8_t)(1 << j));
} }
} }
if (!readU32(&gwVersion) || !readU32(&map->numGateways) || gwVersion != 1) if (!readU32(&gwVersion) || !readU32(&map->numGateways) || gwVersion != 1)
{ {
debug(LOG_ERROR, "Bad gateway in %s", filename); debug(LOG_ERROR, "Bad gateway in %s", path);
return NULL; return NULL;
} }
map->mGateways = calloc(map->numGateways, sizeof(*map->mGateways));
for (i = 0; i < map->numGateways; i++) for (i = 0; i < map->numGateways; i++)
{ {
uint8_t x0, y0, x1, y1; if (!readU8(&map->mGateways[i].x1) || !readU8(&map->mGateways[i].y1)
|| !readU8(&map->mGateways[i].x2) || !readU8(&map->mGateways[i].y2))
if (!readU8(&x0) || !readU8(&y0) || !readU8(&x1) || !readU8(&y1))
{ {
debug(LOG_ERROR, "%s: Failed to read gateway info", filename); debug(LOG_ERROR, "%s: Failed to read gateway info", path);
return NULL; return NULL;
} }
} }

View File

@ -27,6 +27,11 @@
#define MAX_LEVEL_SIZE 20 #define MAX_LEVEL_SIZE 20
typedef struct _gateway
{
uint8_t x1, y1, x2, y2;
} GATEWAY;
/* Information stored with each tile */ /* Information stored with each tile */
typedef struct _maptile_type typedef struct _maptile_type
{ {
@ -40,15 +45,28 @@ typedef struct _maptile_type
typedef struct _mapfile_type typedef struct _mapfile_type
{ {
MAPTILE *psMapTiles;
uint32_t height, width, version, numGateways, numFeatures; uint32_t height, width, version, numGateways, numFeatures;
int32_t scrollMinX; int32_t scrollMinX;
int32_t scrollMinY; int32_t scrollMinY;
uint32_t scrollMaxX; uint32_t scrollMaxX;
uint32_t scrollMaxY; uint32_t scrollMaxY;
char levelName[MAX_LEVEL_SIZE]; char levelName[MAX_LEVEL_SIZE];
// private members - don't touch! :-)
GATEWAY *mGateways;
MAPTILE *mMapTiles;
} GAMEMAP; } GAMEMAP;
static inline MAPTILE *mapTile(GAMEMAP *map, int x, int y)
{
return &map->mMapTiles[y * map->width + x];
}
static inline GATEWAY *mapGateway(GAMEMAP *map, int index)
{
return &map->mGateways[index];
}
/* Load the map data */ /* Load the map data */
GAMEMAP *mapLoad(char *filename); GAMEMAP *mapLoad(char *filename);
void mapFree(GAMEMAP *map); void mapFree(GAMEMAP *map);