bsputil: fix wad export from bsp with missing textures
We need to skip over the textures with missing data lumps in the BSP, i.e. having data offset -1. Signed-off-by: Kevin Shanahan <kmshanah@disenchant.net>
This commit is contained in:
parent
063880eeda
commit
bdd2ac6127
|
|
@ -48,11 +48,18 @@ ExportWad(FILE *wadfile, bsp2_t *bsp)
|
||||||
lumpinfo_t lump;
|
lumpinfo_t lump;
|
||||||
dtexdata_t texdata;
|
dtexdata_t texdata;
|
||||||
miptex_t *miptex;
|
miptex_t *miptex;
|
||||||
int i, j, size, filepos;
|
int i, j, size, filepos, numvalid;
|
||||||
|
|
||||||
texdata = bsp->dtexdata;
|
texdata = bsp->dtexdata;
|
||||||
|
|
||||||
|
/* Count up the valid lumps */
|
||||||
|
numvalid = 0;
|
||||||
|
for (i = 0; i < texdata.header->nummiptex; i++)
|
||||||
|
if (texdata.header->dataofs[i] >= 0)
|
||||||
|
numvalid++;
|
||||||
|
|
||||||
memcpy(&header.identification, "WAD2", 4);
|
memcpy(&header.identification, "WAD2", 4);
|
||||||
header.numlumps = texdata.header->nummiptex;
|
header.numlumps = numvalid;
|
||||||
header.infotableofs = sizeof(header);
|
header.infotableofs = sizeof(header);
|
||||||
|
|
||||||
/* Byte-swap header and write out */
|
/* Byte-swap header and write out */
|
||||||
|
|
@ -60,9 +67,12 @@ ExportWad(FILE *wadfile, bsp2_t *bsp)
|
||||||
header.infotableofs = LittleLong(header.infotableofs);
|
header.infotableofs = LittleLong(header.infotableofs);
|
||||||
fwrite(&header, sizeof(header), 1, wadfile);
|
fwrite(&header, sizeof(header), 1, wadfile);
|
||||||
|
|
||||||
/* miptex data will follow the lump headers */
|
/* Miptex data will follow the lump headers */
|
||||||
filepos = sizeof(header) + sizeof(lump) * texdata.header->nummiptex;
|
filepos = sizeof(header) + numvalid * sizeof(lump);
|
||||||
for (i = 0; i < texdata.header->nummiptex; i++) {
|
for (i = 0; i < texdata.header->nummiptex; i++) {
|
||||||
|
if (texdata.header->dataofs[i] < 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
miptex = (miptex_t *)(texdata.base + texdata.header->dataofs[i]);
|
miptex = (miptex_t *)(texdata.base + texdata.header->dataofs[i]);
|
||||||
|
|
||||||
lump.filepos = filepos;
|
lump.filepos = filepos;
|
||||||
|
|
@ -82,6 +92,8 @@ ExportWad(FILE *wadfile, bsp2_t *bsp)
|
||||||
fwrite(&lump, sizeof(lump), 1, wadfile);
|
fwrite(&lump, sizeof(lump), 1, wadfile);
|
||||||
}
|
}
|
||||||
for (i = 0; i < texdata.header->nummiptex; i++) {
|
for (i = 0; i < texdata.header->nummiptex; i++) {
|
||||||
|
if (texdata.header->dataofs[i] < 0)
|
||||||
|
continue;
|
||||||
miptex = (miptex_t *)(texdata.base + texdata.header->dataofs[i]);
|
miptex = (miptex_t *)(texdata.base + texdata.header->dataofs[i]);
|
||||||
size = sizeof(*miptex) + miptex->width * miptex->height / 64 * 85;
|
size = sizeof(*miptex) + miptex->width * miptex->height / 64 * 85;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue