From 9c13cee9f0e49f33b55004a39b0bfe6d153338f7 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Tue, 9 Jan 2018 22:22:10 +0000 Subject: [PATCH] Hack up support for pk3s in Custom FOF setup, fix stray ! preventing blockmap from loading --- src/p_setup.c | 6 +++--- src/p_spec.c | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/p_setup.c b/src/p_setup.c index 45a5442ff..497bba445 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2003,16 +2003,16 @@ static boolean P_LoadRawBlockMap(UINT8 *data, size_t count, const char *lumpname return false; #else // Check if the lump is named "BLOCKMAP" - if (!lumpname || !memcmp(lumpname, "BLOCKMAP", 8) != 0) + if (!lumpname || memcmp(lumpname, "BLOCKMAP", 8) != 0) { - CONS_Printf("No blockmap lump found for pk3!"); + CONS_Printf("No blockmap lump found for pk3!\n"); return false; } if (!count || count >= 0x20000) return false; - CONS_Printf("Reading blockmap lump for pk3..."); + CONS_Printf("Reading blockmap lump for pk3...\n"); // no need to malloc anything, assume the data is uncompressed for now count /= 2; diff --git a/src/p_spec.c b/src/p_spec.c index 797aba049..498ebcf7d 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -6305,8 +6305,21 @@ void P_SpawnSpecials(INT32 fromnetsave) case 259: // Make-Your-Own FOF! if (lines[i].sidenum[1] != 0xffff) { - UINT8 *data = W_CacheLumpNum(lastloadedmaplumpnum + ML_SIDEDEFS,PU_STATIC); + UINT8 *data; UINT16 b; + char *lumpfullName = (wadfiles[WADFILENUM(lastloadedmaplumpnum)]->lumpinfo + LUMPNUM(lastloadedmaplumpnum))->name2; + + if (!strnicmp(lumpfullName + strlen(lumpfullName) - 4, ".wad", 4)) // welp it's a map wad in a pk3 + { // HACK: Open wad file rather quickly so we can get the data from the sidedefs lump + UINT8 *wadData = W_CacheLumpNum(lastloadedmaplumpnum, PU_STATIC); + filelump_t *fileinfo = (filelump_t *)(wadData + ((wadinfo_t *)wadData)->infotableofs); + fileinfo += ML_SIDEDEFS; // we only need the SIDEDEFS lump + data = Z_Malloc(fileinfo->size, PU_STATIC, NULL); + M_Memcpy(data, wadData + fileinfo->filepos, fileinfo->size); // copy data + Z_Free(wadData); // we're done with this now + } + else // phew it's just a WAD + data = W_CacheLumpNum(lastloadedmaplumpnum + ML_SIDEDEFS,PU_STATIC); for (b = 0; b < (INT16)numsides; b++) {