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 *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)
{
char filename[PATH_MAX];
@ -177,6 +172,9 @@ int main(int argc, char **argv)
MADD(" FeatureSet %s", tilesetDataSet[tileset]);
MADD(" NumObjects 0");
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("ScrollLimits {");
@ -188,8 +186,14 @@ int main(int argc, char **argv)
MADD("}");
MADD("Gateways {");
MADD(" Version 1");
MADD(" NumGateways 0"); // FIXME
MADD(" NumGateways %d", (int)map->numGateways);
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("TileTypes {");

View File

@ -10,7 +10,8 @@
void mapFree(GAMEMAP *map)
{
free(map->psMapTiles);
free(map->mGateways);
free(map->mMapTiles);
free(map);
}
@ -51,28 +52,28 @@ GAMEMAP *mapLoad(char *filename)
|| aFileType[1] != 'a'
|| aFileType[2] != 'p')
{
debug(LOG_ERROR, "Bad header in %s", filename);
debug(LOG_ERROR, "Bad header in %s", path);
return NULL;
}
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;
}
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;
}
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;
}
/* Allocate the memory for the map */
map->psMapTiles = calloc(map->width * map->height, sizeof(*map->psMapTiles));
if (!map->psMapTiles)
map->mMapTiles = calloc(map->width * map->height, sizeof(*map->mMapTiles));
if (!map->mMapTiles)
{
debug(LOG_ERROR, "Out of memory");
return NULL;
@ -86,31 +87,31 @@ GAMEMAP *mapLoad(char *filename)
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;
}
map->psMapTiles[i].texture = texture;
map->psMapTiles[i].height = height;
map->mMapTiles[i].texture = texture;
map->mMapTiles[i].height = height;
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)
{
debug(LOG_ERROR, "Bad gateway in %s", filename);
debug(LOG_ERROR, "Bad gateway in %s", path);
return NULL;
}
map->mGateways = calloc(map->numGateways, sizeof(*map->mGateways));
for (i = 0; i < map->numGateways; i++)
{
uint8_t x0, y0, x1, y1;
if (!readU8(&x0) || !readU8(&y0) || !readU8(&x1) || !readU8(&y1))
if (!readU8(&map->mGateways[i].x1) || !readU8(&map->mGateways[i].y1)
|| !readU8(&map->mGateways[i].x2) || !readU8(&map->mGateways[i].y2))
{
debug(LOG_ERROR, "%s: Failed to read gateway info", filename);
debug(LOG_ERROR, "%s: Failed to read gateway info", path);
return NULL;
}
}

View File

@ -27,6 +27,11 @@
#define MAX_LEVEL_SIZE 20
typedef struct _gateway
{
uint8_t x1, y1, x2, y2;
} GATEWAY;
/* Information stored with each tile */
typedef struct _maptile_type
{
@ -40,15 +45,28 @@ typedef struct _maptile_type
typedef struct _mapfile_type
{
MAPTILE *psMapTiles;
uint32_t height, width, version, numGateways, numFeatures;
int32_t scrollMinX;
int32_t scrollMinY;
uint32_t scrollMaxX;
uint32_t scrollMaxY;
char levelName[MAX_LEVEL_SIZE];
// private members - don't touch! :-)
GATEWAY *mGateways;
MAPTILE *mMapTiles;
} 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 */
GAMEMAP *mapLoad(char *filename);
void mapFree(GAMEMAP *map);