diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..eb06156b4673c7656512ed16528b0edbbada3970
--- /dev/null
+++ b/README.md
@@ -0,0 +1,22 @@
+# Sonic Robo Blast 2
+
+[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
+[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
+
+[Sonic Robo Blast 2](https://srb2.org/) is a 3D Sonic the Hedgehog fangame based on a modified version of [Doom Legacy](http://doomlegacy.sourceforge.net/).
+
+## Dependencies
+- NASM (x86 builds only)
+- SDL2 (Linux/OS X only)
+- SDL2-Mixer (Linux/OS X only)
+- libupnp (Linux/OS X only)
+- libgme (Linux/OS X only)
+
+Warning: 64-bit builds are not netgame compatible with 32-bit builds. Use at your own risk.
+
+## Compiling
+
+See [SRB2 Wiki/Source code compiling](http://wiki.srb2.org/wiki/Source_code_compiling)
+
+## Disclaimer
+Sonic Team Junior is in no way affiliated with SEGA or Sonic Team. We do not claim ownership of any of SEGA's intellectual property used in SRB2.
diff --git a/readme.txt b/readme.txt
deleted file mode 100644
index c1898d491f0291bbfad2bd09b8b2cbc7b673e9ee..0000000000000000000000000000000000000000
--- a/readme.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-Here it is! SRB2 v2.1.14 source code!
-(why do we keep the version number up to date
-	when everything else in this file is hilariously old?
-	- Inuyasha)
-
-
-Win32 with Visual C (6SP6+Processor Pack OR 7)
-~~~
-
-2 VC++ 6.0 project files are included:
-
-Win32/DirectX/FMOD
-src\win32\wLegacy.dsw
-You'll need FMOD to compile this version (www.fmod.org)
-or
-Win32/SDL/SDL_mixer
-src\sdl\Win32SDL.dsp
-You'll need SDL and SDL_mixer for this version (www.libsdl.org)
-
-Both needs NASM (http://sourceforge.net/projects/nasm)
-For PNG screenshot, libPNG, and Zlib (from http://gnuwin32.sourceforge.net/)
-
-No warranty, support, etc. of any kind is offered,
-just plain old as is.
-Some bits of code are still really scary.
-Go nuts!
-
-
-Win32 with Dev-C++ (http://bloodshed.net/ free!)
-~~~
-2 Dev-C++ project files are included:
-
-Win32/DirectX/FMOD
-src\win32\SRB2.dev
-or
-Win32/SDL/SDL_mixer
-src\sdl\Win32SDL.dev
-You'll need SDL and SDL_mixer for this version (www.libsdl.org)
-libPNG and Zlib (from http://gnuwin32.sourceforge.net/)
-Note there are precompiled libpng.a and libz.a for Mingw
-
-you will need NASM for both SDL/SDL_mixer and DirectX/FMOD
-and you need DirectX 6 (or up) Dev-Paks to compile DirectX version
-
-GNU/Linux
-~~~
-
-Dependencies:
-  SDL 1.2.7 or better (from libsdl.org)
-  SDL_Mixer 1.2.2(.7 for file-less music playback) (from libsdl.org)
-  Nasm (use NOASM=1 if you don't have it or have an non-i386 system, I think)
-  libPNG 1.2.7
-  Zlib 1.2.3
-  The Xiph.org libogg and libvorbis libraries
-  The OpenGL headers (from Mesa, usually shipped with your X.org or XFree
-    installation, so you needn't worry, most likely)
-  GCC 3.x toolchain and binutils
-  GNU Make
-
-Build instructions:
-
-make -C src LINUX=1
-
-Build instructions (64 bit):
-
-make -C src LINUX64=1
-
-Build instructions to build for Wii Linux/SRB2Wii on a PowerPC system,
-follow cross-compiling instructions for cross-compiling on a x86 system:
-
-make -C src LINUX=1 WIILINUX=1
-
-Build instructions to build for Pandora (Linux) on a ARM system,
-follow cross-compiling instructions for cross-compiling on a x86 system:
-
-make -C src PANDORA=1
-
-Solaris
-~~~
-
-Dependencies:
-  SDL 1.2.5 or better (from libsdl.org)
-  SDL_Mixer 1.2.2(.7 for file-less music playback) (from libsdl.org)
-  libPNG 1.2.7
-  Zlib 1.2.3
-  The Xiph.org libogg and libvorbis libraries
-  The OpenGL headers (from Mesa, usually shipped with your X.org or XFree
-    installation, so you needn't worry, most likely)
-  GCC 3.x toolchain and binutils
-  GNU Make
-
-  You can get all these programs/libraries from the Companion CD (except SDL_mixer and OpenGL)
-
-Build instructions:
-
-gmake -C src SOLARIS=1
-
-FreeBSD
-~~~
-
-Dependencies:
-  SDL 1.2.7 or better (from libsdl.org)
-  SDL_Mixer 1.2.2(.7 for file-less music playback) (from libsdl.org)
-  Nasm (use NOASM=1 if you don't have it or have an non-i386 system, I think)
-  libPNG 1.2.7
-  Zlib 1.2.3
-  The Xiph.org libogg and libvorbis libraries
-  The OpenGL headers (from Mesa, usually shipped with your X.org or XFree
-    installation, so you needn't worry, most likely)
-  GCC 3.x toolchain and binutils
-  GNU Make
-
-Build instructions:
-
-gmake -C src FREEBSD=1
-
-DJGPP/DOS
-~~~
-
-Dependencies:
-  Allegro 3.12 game programming library, (from
-  http://alleg.sourceforge.net/index.html)
-  Nasm (use NOASM=1 if you don't have it)
-  libsocket (from http://homepages.nildram.co.uk/~phekda/richdawe/lsck/) or
-  Watt-32 (from http://www.bgnett.no/~giva/)
-  GCC 3.x toolchain and binutils
-  GNU Make
-
-Build instructions:
-
-make -C src # to link with Watt-32, add WATTCP=1
-      # for remote debugging over the COM port, add RDB=1
-
-Notes:
- use tools\djgpp\all313.diff to update Allegro to a "more usable" version ;)
- Example: E:\djgpp\allegro>patch -p# < D:\SRB2Code\1.1\srb2\tools\djgpp\all313.diff
-
-Windows CE
-~~~
-
-Dependencies:
-  SDL 1.27
-
-Build instructions:
-
-use src\SDL\WinCE\SRB2CE.vcw
-
--------------------------------------------------------------------------------
-
-binaries will turn in up in bin/
-
-note: read the src/makefile for more options
-
-- Sonic Team Junior
-http://www.srb2.org
diff --git a/src/doomdef.h b/src/doomdef.h
index 66e649ee0f14be7d4cf3e609760dc23f77b11595..fb8ab1ca270aa10d6adc856665f79f762ccfa79c 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -60,6 +60,7 @@
 #endif
 
 #ifdef _WINDOWS
+#define NONET
 #if !defined (HWRENDER) && !defined (NOHW)
 #define HWRENDER
 #endif
diff --git a/src/g_game.c b/src/g_game.c
index f891b010591cccd4d5b23188d32902a84751956e..84db90132b0b1dafebaf77b8f48411eaec2b0534 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -5579,7 +5579,7 @@ boolean G_CheckDemoStatus(void)
 		WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker
 		md5_buffer((char *)p+16, demo_p - (p+16), p); // make a checksum of everything after the checksum in the file.
 #endif
-		saved = FIL_WriteFile(demoname, demobuffer, demo_p - demobuffer); // finally output the file.
+		saved = FIL_WriteFile(va(pandf, srb2home, demoname), demobuffer, demo_p - demobuffer); // finally output the file.
 		free(demobuffer);
 		demorecording = false;
 
diff --git a/src/i_tcp.c b/src/i_tcp.c
index eca218c804dde4eabf59963d6a752d2c3aed0fa6..f6212458b889f9ff3a70321e54bd9aa7c8951f42 100644
--- a/src/i_tcp.c
+++ b/src/i_tcp.c
@@ -56,7 +56,9 @@
 //#define NONET
 #endif
 
-#ifndef NONET
+#ifdef NONET
+#undef HAVE_MINIUPNPC
+#else
 #ifdef USE_WINSOCK1
 #include <winsock.h>
 #elif !defined (SCOUW2) && !defined (SCOUW7) && !defined (__OS2__)
diff --git a/src/m_misc.c b/src/m_misc.c
index 457214e339e66b5897d0451f21f2798d99f24d63..cfe73d88fa60cad5f1d5c9bb93ea82f47eec5f30 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -1675,6 +1675,7 @@ char *M_GetToken(const char *inputString)
 			|| stringToUse[startPos] == '\r'
 			|| stringToUse[startPos] == '\n'
 			|| stringToUse[startPos] == '\0'
+			|| stringToUse[startPos] == '"' // we're treating this as whitespace because SLADE likes adding it for no good reason
 			|| inComment != 0)
 			&& startPos < stringLength)
 	{
@@ -1742,6 +1743,7 @@ char *M_GetToken(const char *inputString)
 			&& stringToUse[endPos] != ','
 			&& stringToUse[endPos] != '{'
 			&& stringToUse[endPos] != '}'
+			&& stringToUse[endPos] != '"' // see above
 			&& inComment == 0)
 			&& endPos < stringLength)
 	{
diff --git a/src/p_map.c b/src/p_map.c
index d8c48fa4f64251666d649657edf3e0c4ecdd5506..c4616db489601cc6584c0b0ec0dd8239bf9d2b1a 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -1271,7 +1271,7 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y)
 			topheight = P_GetFOFTopZ(thing, newsubsec->sector, rover, x, y, NULL);
 			bottomheight = P_GetFOFBottomZ(thing, newsubsec->sector, rover, x, y, NULL);
 
-			if (rover->flags & FF_GOOWATER && !(thing->flags & MF_NOGRAVITY))
+			if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER) && !(thing->flags & MF_NOGRAVITY))
 			{
 				// If you're inside goowater and slowing down
 				fixed_t sinklevel = FixedMul(thing->info->height/6, thing->scale);
diff --git a/src/p_mobj.c b/src/p_mobj.c
index e1a1820af419f4e242dbf0cdb070d8e70599e8f4..5e5961d41d1d617371bb341352b5abb0e060e497 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -1278,25 +1278,23 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 
 		for (rover = mo->subsector->sector->ffloors; rover; rover = rover->next)
 		{
-			if (!(rover->flags & FF_EXISTS))
+			if (!(rover->flags & FF_EXISTS) || !P_InsideANonSolidFFloor(mo, rover)) // P_InsideANonSolidFFloor checks for FF_EXISTS itself, but let's not always call this function
 				continue;
 
-			if (P_InsideANonSolidFFloor(mo, rover))
-			{
-				if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER))
-					goopgravity = true;
-				if (rover->master->frontsector->gravity)
-				{
-					gravityadd = -FixedMul(gravity,
-						(FixedDiv(*rover->master->frontsector->gravity>>FRACBITS, 1000)));
+			if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER))
+				goopgravity = true;
 
-					if (rover->master->frontsector->verticalflip && gravityadd > 0)
-						mo->eflags |= MFE_VERTICALFLIP;
+			if (!(rover->master->frontsector->gravity))
+				continue;
 
-					no3dfloorgrav = false;
-					break;
-				}
-			}
+			gravityadd = -FixedMul(gravity,
+				(FixedDiv(*rover->master->frontsector->gravity>>FRACBITS, 1000)));
+
+			if (rover->master->frontsector->verticalflip && gravityadd > 0)
+				mo->eflags |= MFE_VERTICALFLIP;
+
+			no3dfloorgrav = false;
+			break;
 		}
 	}
 
@@ -1318,28 +1316,20 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 
 	if (mo->player)
 	{
-		if (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly]
-		|| (mo->state >= &states[S_PLAY_SPC1] && mo->state <= &states[S_PLAY_SPC4])))
-			gravityadd = gravityadd/3; // less gravity while flying
-		if (mo->player->pflags & PF_GLIDING)
-			gravityadd = gravityadd/3; // less gravity while gliding
-		if (mo->player->climbing)
-			gravityadd = 0;
-		if (mo->player->pflags & PF_NIGHTSMODE)
+		if ((mo->player->pflags & PF_GLIDING)
+		|| (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly]
+			|| (mo->state >= &states[S_PLAY_SPC1] && mo->state <= &states[S_PLAY_SPC4]))))
+			gravityadd = gravityadd/3; // less gravity while flying/gliding
+		if (mo->player->climbing || (mo->player->pflags & PF_NIGHTSMODE))
 			gravityadd = 0;
 
+		if (!(mo->flags2 & MF2_OBJECTFLIP) != !(mo->player->powers[pw_gravityboots])) // negated to turn numeric into bool - would be double negated, but not needed if both would be
 		{
-			UINT8 bits = 0;
-			if (mo->flags2 & MF2_OBJECTFLIP)
-				bits ^= 1;
-			if (mo->player->powers[pw_gravityboots])
-				bits ^= 1;
-			if (bits & 1)
-			{
-				gravityadd = -gravityadd;
-				mo->eflags ^= MFE_VERTICALFLIP;
-			}
+			gravityadd = -gravityadd;
+			mo->eflags ^= MFE_VERTICALFLIP;
 		}
+		if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way
+			P_PlayerFlip(mo);
 	}
 	else
 	{
@@ -1347,10 +1337,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 		if (mo->flags2 & MF2_OBJECTFLIP)
 		{
 			mo->eflags |= MFE_VERTICALFLIP;
-			if (gravityadd < 0) // Don't sink, only rise up
-				gravityadd *= -1;
 			if (mo->z + mo->height >= mo->ceilingz)
 				gravityadd = 0;
+			else if (gravityadd < 0) // Don't sink, only rise up
+				gravityadd *= -1;
 		}
 		else //Otherwise, sort through the other exceptions.
 		{
@@ -1396,9 +1386,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 	if (goopgravity)
 		gravityadd = -gravityadd/5;
 
-	if (mo->player && !!(mo->eflags & MFE_VERTICALFLIP) != wasflip)
-		P_PlayerFlip(mo);
-
 	gravityadd = FixedMul(gravityadd, mo->scale);
 
 	return gravityadd;
@@ -1553,6 +1540,7 @@ static void P_PushableCheckBustables(mobj_t *mo)
 		if (node->m_sector->ffloors)
 		{
 			ffloor_t *rover;
+			fixed_t topheight, bottomheight;
 
 			for (rover = node->m_sector->ffloors; rover; rover = rover->next)
 			{
@@ -1565,37 +1553,39 @@ static void P_PushableCheckBustables(mobj_t *mo)
 
 				if (!rover->master->frontsector->crumblestate)
 				{
+					topheight = P_GetFOFTopZ(mo, node->m_sector, rover, mo->x, mo->y, NULL);
+					bottomheight = P_GetFOFBottomZ(mo, node->m_sector, rover, mo->x, mo->y, NULL);
 					// Height checks
 					if (rover->flags & FF_SHATTERBOTTOM)
 					{
-						if (mo->z+mo->momz + mo->height < *rover->bottomheight)
+						if (mo->z+mo->momz + mo->height < bottomheight)
 							continue;
 
-						if (mo->z+mo->height > *rover->bottomheight)
+						if (mo->z+mo->height > bottomheight)
 							continue;
 					}
 					else if (rover->flags & FF_SPINBUST)
 					{
-						if (mo->z+mo->momz > *rover->topheight)
+						if (mo->z+mo->momz > topheight)
 							continue;
 
-						if (mo->z+mo->height < *rover->bottomheight)
+						if (mo->z+mo->height < bottomheight)
 							continue;
 					}
 					else if (rover->flags & FF_SHATTER)
 					{
-						if (mo->z+mo->momz > *rover->topheight)
+						if (mo->z+mo->momz > topheight)
 							continue;
 
-						if (mo->z+mo->momz + mo->height < *rover->bottomheight)
+						if (mo->z+mo->momz + mo->height < bottomheight)
 							continue;
 					}
 					else
 					{
-						if (mo->z >= *rover->topheight)
+						if (mo->z >= topheight)
 							continue;
 
-						if (mo->z+mo->height < *rover->bottomheight)
+						if (mo->z+mo->height < bottomheight)
 							continue;
 					}
 
@@ -6935,6 +6925,7 @@ void P_MobjThinker(mobj_t *mobj)
 					{
 						mobj->flags &= ~MF_NOGRAVITY;
 						P_SetMobjState(mobj, S_NIGHTSDRONE1);
+						mobj->flags2 |= MF2_DONTDRAW;
 					}
 				}
 				else if (mobj->tracer && mobj->tracer->player)
diff --git a/src/p_spec.c b/src/p_spec.c
index 30b08ebb1d1ae880978f8de6fa3a09b98718d599..5dac8d34b31d55c676f138ed80b6d951a48a3969 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -509,7 +509,7 @@ void P_ParseAnimationDefintion(SINT8 istexture, INT32 *i)
 	animdefsToken = M_GetToken(NULL);
 	if (animdefsToken == NULL)
 	{
-		I_Error("Error parsing TEXTURES lump: Unexpected end of file where \"%s\"'s animation speed should be", animdefs[*i].startname);
+		I_Error("Error parsing ANIMDEFS lump: Unexpected end of file where \"%s\"'s animation speed should be", animdefs[*i].startname);
 	}
 	endPos = NULL;
 #ifndef AVOID_ERRNO
@@ -523,7 +523,7 @@ void P_ParseAnimationDefintion(SINT8 istexture, INT32 *i)
 #endif
 		|| animSpeed < 0) // Number is not positive
 	{
-		I_Error("Error parsing TEXTURES lump: Expected a positive integer for \"%s\"'s animation speed, got \"%s\"", animdefs[*i].startname, animdefsToken);
+		I_Error("Error parsing ANIMDEFS lump: Expected a positive integer for \"%s\"'s animation speed, got \"%s\"", animdefs[*i].startname, animdefsToken);
 	}
 	animdefs[*i].speed = animSpeed;
 	Z_Free(animdefsToken);
diff --git a/src/p_user.c b/src/p_user.c
index f390650f43d31101f1431c07331cc3e635f44b93..3867137adf75d4f09e5ec59138ec302d1e3d319b 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -1692,6 +1692,7 @@ static void P_CheckBustableBlocks(player_t *player)
 		if (node->m_sector->ffloors)
 		{
 			ffloor_t *rover;
+			fixed_t topheight, bottomheight;
 
 			for (rover = node->m_sector->ffloors; rover; rover = rover->next)
 			{
@@ -1717,42 +1718,45 @@ static void P_CheckBustableBlocks(player_t *player)
 					if (!(rover->flags & FF_SHATTER) && (rover->flags & FF_ONLYKNUX) && !(player->charability == CA_GLIDEANDCLIMB))
 						continue;
 
+					topheight = P_GetFOFTopZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
+					bottomheight = P_GetFOFBottomZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
+
 					// Height checks
 					if (rover->flags & FF_SHATTERBOTTOM)
 					{
-						if (player->mo->z+player->mo->momz + player->mo->height < *rover->bottomheight)
+						if (player->mo->z+player->mo->momz + player->mo->height < bottomheight)
 							continue;
 
-						if (player->mo->z+player->mo->height > *rover->bottomheight)
+						if (player->mo->z+player->mo->height > bottomheight)
 							continue;
 					}
 					else if (rover->flags & FF_SPINBUST)
 					{
-						if (player->mo->z+player->mo->momz > *rover->topheight)
+						if (player->mo->z+player->mo->momz > topheight)
 							continue;
 
-						if (player->mo->z + player->mo->height < *rover->bottomheight)
+						if (player->mo->z + player->mo->height < bottomheight)
 							continue;
 					}
 					else if (rover->flags & FF_SHATTER)
 					{
-						if (player->mo->z + player->mo->momz > *rover->topheight)
+						if (player->mo->z + player->mo->momz > topheight)
 							continue;
 
-						if (player->mo->z+player->mo->momz + player->mo->height < *rover->bottomheight)
+						if (player->mo->z+player->mo->momz + player->mo->height < bottomheight)
 							continue;
 					}
 					else
 					{
-						if (player->mo->z >= *rover->topheight)
+						if (player->mo->z >= topheight)
 							continue;
 
-						if (player->mo->z + player->mo->height < *rover->bottomheight)
+						if (player->mo->z + player->mo->height < bottomheight)
 							continue;
 					}
 
 					// Impede the player's fall a bit
-					if (((rover->flags & FF_SPINBUST) || (rover->flags & FF_SHATTER)) && player->mo->z >= *rover->topheight)
+					if (((rover->flags & FF_SPINBUST) || (rover->flags & FF_SHATTER)) && player->mo->z >= topheight)
 						player->mo->momz >>= 1;
 					else if (rover->flags & FF_SHATTER)
 					{
@@ -6976,6 +6980,7 @@ static void P_MovePlayer(player_t *player)
 		msecnode_t *node; // only place it's being used in P_MovePlayer now
 		fixed_t oldx;
 		fixed_t oldy;
+		fixed_t floorz, ceilingz;
 
 		oldx = player->mo->x;
 		oldy = player->mo->y;
@@ -6993,31 +6998,34 @@ static void P_MovePlayer(player_t *player)
 			if (node->m_sector->ffloors)
 			{
 				ffloor_t *rover;
+				fixed_t topheight, bottomheight;
 
 				for (rover = node->m_sector->ffloors; rover; rover = rover->next)
 				{
-					if (!(rover->flags & FF_EXISTS)) continue;
+					if (!(rover->flags & FF_EXISTS) || !(rover->flags & FF_BLOCKPLAYER))
+						continue;
 
-					if ((rover->flags & FF_BLOCKPLAYER))
+					topheight = P_GetFOFTopZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
+					bottomheight = P_GetFOFBottomZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
+					if (topheight > player->mo->z && bottomheight < player->mo->z)
 					{
-						if (*rover->topheight > player->mo->z && *rover->bottomheight < player->mo->z)
-						{
-							P_ResetPlayer(player);
-							S_StartSound(player->mo, sfx_s3k4a);
-							player->climbing = 5;
-							player->mo->momx = player->mo->momy = player->mo->momz = 0;
-							break;
-						}
+						P_ResetPlayer(player);
+						S_StartSound(player->mo, sfx_s3k4a);
+						player->climbing = 5;
+						player->mo->momx = player->mo->momy = player->mo->momz = 0;
+						break;
 					}
 				}
 			}
 
-			if (player->mo->z+player->mo->height > node->m_sector->ceilingheight
+			floorz = P_GetFloorZ(player->mo, node->m_sector, player->mo->x, player->mo->y, NULL);
+			ceilingz = P_GetCeilingZ(player->mo, node->m_sector, player->mo->x, player->mo->y, NULL);
+
+			if (player->mo->z+player->mo->height > ceilingz
 				&& node->m_sector->ceilingpic == skyflatnum)
 				continue;
 
-			if (node->m_sector->floorheight > player->mo->z
-				|| node->m_sector->ceilingheight < player->mo->z)
+			if (floorz > player->mo->z || ceilingz < player->mo->z)
 			{
 				P_ResetPlayer(player);
 				S_StartSound(player->mo, sfx_s3k4a);
diff --git a/src/st_stuff.c b/src/st_stuff.c
index ca315ce2740d832de80ecbe345a0f82f06843f3d..3562a9b713ef11bfec43436917ca56afbfa700bb 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -974,7 +974,7 @@ static void ST_drawNiGHTSHUD(void)
 	if (cv_debug & DBG_NIGHTSBASIC)
 		minlink = 0;
 
-	// Cheap hack: don't display when the score is showing
+	// Cheap hack: don't display when the score is showing (it popping up for a split second when exiting a map is intentional)
 	if (stplyr->texttimer && stplyr->textvar == 4)
 		minlink = INT32_MAX;