From 9c13cee9f0e49f33b55004a39b0bfe6d153338f7 Mon Sep 17 00:00:00 2001
From: Monster Iestyn <iestynjealous@ntlworld.com>
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 45a5442ff0..497bba4458 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 797aba049c..498ebcf7d2 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++)
 					{
-- 
GitLab