From bdd2ac61271b7d65631b6fd9c573b3d0b47d3b45 Mon Sep 17 00:00:00 2001 From: Kevin Shanahan Date: Fri, 21 Feb 2014 09:21:35 +1030 Subject: [PATCH] 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 --- bsputil/bsputil.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/bsputil/bsputil.c b/bsputil/bsputil.c index c3608abe..467e6dd6 100644 --- a/bsputil/bsputil.c +++ b/bsputil/bsputil.c @@ -48,11 +48,18 @@ ExportWad(FILE *wadfile, bsp2_t *bsp) lumpinfo_t lump; dtexdata_t texdata; miptex_t *miptex; - int i, j, size, filepos; + int i, j, size, filepos, numvalid; 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); - header.numlumps = texdata.header->nummiptex; + header.numlumps = numvalid; header.infotableofs = sizeof(header); /* Byte-swap header and write out */ @@ -60,9 +67,12 @@ ExportWad(FILE *wadfile, bsp2_t *bsp) header.infotableofs = LittleLong(header.infotableofs); fwrite(&header, sizeof(header), 1, wadfile); - /* miptex data will follow the lump headers */ - filepos = sizeof(header) + sizeof(lump) * texdata.header->nummiptex; + /* Miptex data will follow the lump headers */ + filepos = sizeof(header) + numvalid * sizeof(lump); for (i = 0; i < texdata.header->nummiptex; i++) { + if (texdata.header->dataofs[i] < 0) + continue; + miptex = (miptex_t *)(texdata.base + texdata.header->dataofs[i]); lump.filepos = filepos; @@ -82,6 +92,8 @@ ExportWad(FILE *wadfile, bsp2_t *bsp) fwrite(&lump, sizeof(lump), 1, wadfile); } for (i = 0; i < texdata.header->nummiptex; i++) { + if (texdata.header->dataofs[i] < 0) + continue; miptex = (miptex_t *)(texdata.base + texdata.header->dataofs[i]); size = sizeof(*miptex) + miptex->width * miptex->height / 64 * 85;