diff --git a/src/dedicated/i_system.c b/src/dedicated/i_system.c
index 7949a8bd7aeec5530f3336b73049843be65aa645..23c0149ca789bcdd34bc464590b1edc67398ddbf 100644
--- a/src/dedicated/i_system.c
+++ b/src/dedicated/i_system.c
@@ -999,20 +999,8 @@ static void I_GetConsoleEvents(void)
 static void I_StartupConsole(void)
 {
 	HANDLE ci, co;
-	const INT32 ded = M_CheckParm("-dedicated");
-	BOOL gotConsole = FALSE;
-	if (M_CheckParm("-console") || ded)
-		gotConsole = AllocConsole();
-#ifdef _DEBUG
-	else if (M_CheckParm("-noconsole") && !ded)
-#else
-	else if (!M_CheckParm("-console") && !ded)
-#endif
-	{
-		FreeConsole();
-		gotConsole = FALSE;
-	}
-
+	BOOL gotConsole = AllocConsole();
+	consolevent = !M_CheckParm("-noconsole");
 	if (gotConsole)
 	{
 		SetConsoleTitleA("SRB2 Console");
@@ -1040,12 +1028,7 @@ static inline void I_ShutdownConsole(void){}
 static void I_GetConsoleEvents(void){}
 static inline void I_StartupConsole(void)
 {
-#ifdef _DEBUG
 	consolevent = !M_CheckParm("-noconsole");
-#else
-	consolevent = M_CheckParm("-console");
-#endif
-
 	framebuffer = M_CheckParm("-framebuffer");
 
 	if (framebuffer)
diff --git a/src/dedicated/i_threads.c b/src/dedicated/i_threads.c
index 6902e23a52da14cf1861df5c1f194a4ea617af17..55c0a069e5d3f42e03c8286d4862f87e9c8f4a8e 100644
--- a/src/dedicated/i_threads.c
+++ b/src/dedicated/i_threads.c
@@ -157,7 +157,7 @@ void I_wake_all_cond(I_cond *anchor)
 	pthread_mutex_lock(&thread_lock);
 	if (*anchor == NULL)
 	{
-		*anchor = malloc(sizeof(pthread_t));
+		*anchor = malloc(sizeof(pthread_cond_t));
 		pthread_cond_init(*anchor, NULL);
 	}
 	pthread_mutex_unlock(&thread_lock);
diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c
index 51ebe39383373f8ff2ae5582616be5e9c8d3cda8..1bf3caf65fa502f70b447374b6b21600d6261c87 100644
--- a/src/lua_hooklib.c
+++ b/src/lua_hooklib.c
@@ -498,7 +498,9 @@ static int call_string_hooks(Hook_State *hook)
 
 static int call_mobj_type_hooks(Hook_State *hook, mobjtype_t mobj_type)
 {
-	if (mobj_type == MT_NULL && (
+	int numCalls = call_mapped(hook, &mobjHookIds[mobj_type][hook->hook_type]);
+
+	if (numCalls > 0 && mobj_type == MT_NULL && (
 		   hook->hook_type == MOBJ_HOOK(MobjThinker    )
 		|| hook->hook_type == MOBJ_HOOK(MobjCollide    )
 		|| hook->hook_type == MOBJ_HOOK(MobjLineCollide)
@@ -514,7 +516,7 @@ static int call_mobj_type_hooks(Hook_State *hook, mobjtype_t mobj_type)
 			mobjHookNames[hook->hook_type])
 		);
 
-	return call_mapped(hook, &mobjHookIds[mobj_type][hook->hook_type]);
+	return numCalls;
 }
 
 static void call_hud_hooks
diff --git a/src/p_saveg.c b/src/p_saveg.c
index aad7351f0de17052aec347c01c061c9a7acad7be..d6f8d23c57dca656dd5d133ccd07c911a7b62bd8 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -1501,13 +1501,13 @@ static void UnArchiveSectors(save_t *save_p)
 			sectors[i].ceilingheight = P_ReadFixed(save_p);
 		if (diff & SD_FLOORPIC)
 		{
-			sectors[i].floorpic = P_AddLevelFlatRuntime((char *)save_p);
-			save_p += 8;
+			sectors[i].floorpic = P_AddLevelFlatRuntime((char *)&save_p->buf[save_p->pos]);
+			save_p->pos += 8;
 		}
 		if (diff & SD_CEILPIC)
 		{
-			sectors[i].ceilingpic = P_AddLevelFlatRuntime((char *)save_p);
-			save_p += 8;
+			sectors[i].ceilingpic = P_AddLevelFlatRuntime((char *)&save_p->buf[save_p->pos]);
+			save_p->pos += 8;
 		}
 		if (diff & SD_LIGHT)
 			sectors[i].lightlevel = P_ReadINT16(save_p);
diff --git a/src/r_main.c b/src/r_main.c
index 50293341dd952e30b4b7f5e4f285e22bd8752ce5..32e3138eb07fbe1abc736c382cc66de389084b64 100644
--- a/src/r_main.c
+++ b/src/r_main.c
@@ -1152,8 +1152,14 @@ void R_SetupFrame(player_t *player)
 
 		if (quake.epicenter) {
 			// Calculate 3D distance from epicenter, using the camera.
-			fixed_t xydist = R_PointToDist2(thiscam->x, thiscam->y, quake.epicenter->x, quake.epicenter->y);
-			fixed_t dist = R_PointToDist2(0, thiscam->z, xydist, quake.epicenter->z);
+			fixed_t xydist, dist;
+			if (P_MobjWasRemoved(r_viewmobj)) {
+				xydist = R_PointToDist2(thiscam->x, thiscam->y, quake.epicenter->x, quake.epicenter->y);
+				dist = R_PointToDist2(0, thiscam->z, xydist, quake.epicenter->z);
+			} else {
+				xydist = R_PointToDist2(r_viewmobj->x, r_viewmobj->y, quake.epicenter->x, quake.epicenter->y);
+				dist = R_PointToDist2(0, r_viewmobj->z, xydist, quake.epicenter->z);
+			}
 
 			// More effect closer to epicenter, outside of radius = no effect
 			if (!quake.radius || dist > quake.radius)
diff --git a/src/r_things.c b/src/r_things.c
index 432b5e10bc9c13e55c2df316ce6da45d27560fe8..50855e2fc6630b370657f2093b08fda305a4a780 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -279,6 +279,14 @@ static boolean GetFramesAndRotationsFromShortLumpName(
 		*ret_rotation2 = R_Char2Rotation(name[7]);
 		if (*ret_frame2 >= 64 || *ret_rotation2 == 255)
 			return false;
+
+		// TRNSLATE is a valid but extremely unlikely sprite name:
+		// * The sprite name is "TRNS"
+		// * The frame is L, rotation A; mirrored to frame T, rotation E
+		// In the very unfortunate event that TRNSLATE is found between sprite lumps,
+		// this name check prevents it from being added as a sprite, when it actually isn't.
+		if (memcmp(name, "TRNSLATE", 8) == 0)
+			return false;
 	}
 	else
 	{
diff --git a/src/w_wad.c b/src/w_wad.c
index 4a69001136f0c4af286ecc66f55cbf1cddf6a5e2..4a1d44548b75b801343cd60a81f8c80bec7bcf17 100644
--- a/src/w_wad.c
+++ b/src/w_wad.c
@@ -2657,7 +2657,8 @@ static lumpchecklist_t folderblacklist[] =
 {
 	{"Lua/", 4},
 	{"SOC/", 4},
-	{"Sprites/",  8},
+	{"Sprites/", 8},
+	{"LongSprites/", 12},
 	{"Textures/", 9},
 	{"Patches/", 8},
 	{"Flats/", 6},