map2lnd: Convert gateway information.
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@6766 4a71c877-e1ca-e34f-864e-861f7616d084master
parent
5e1895ac70
commit
a348f2683b
|
@ -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 {");
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue