diff --git a/src/doomdef.h b/src/doomdef.h
index 32771163e2fc1e7c336e6ee48e45bf0e7f802152..d3fe9d3a2e442a9ecccfe844da8fe24839567716 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -446,7 +446,7 @@ extern INT32 cv_debug;
 
 #define DBG_BASIC       0x0001
 #define DBG_DETAILED    0x0002
-#define DBG_RANDOMIZER  0x0004
+#define DBG_PLAYER      0x0004
 #define DBG_RENDER      0x0008
 #define DBG_NIGHTSBASIC 0x0010
 #define DBG_NIGHTS      0x0020
@@ -456,6 +456,7 @@ extern INT32 cv_debug;
 #define DBG_MEMORY      0x0200
 #define DBG_SETUP       0x0400
 #define DBG_LUA         0x0800
+#define DBG_RANDOMIZER  0x1000
 
 // =======================
 // Misc stuff for later...
diff --git a/src/st_stuff.c b/src/st_stuff.c
index a513a028c646eb191a763ec55a7fe73cef973d57..ac4ee60ead72960a516c354aadc34d34db542eee 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -455,7 +455,8 @@ static void ST_DrawNightsOverlayNum(fixed_t x /* right border */, fixed_t y, fix
 // Devmode information
 static void ST_drawDebugInfo(void)
 {
-	INT32 height = 0;
+	INT32 height = 0, h = 8, w = 18, lowh;
+	void (*textfunc)(INT32, INT32, INT32, const char *);
 
 	if (!(stplyr->mo && cv_debug))
 		return;
@@ -464,135 +465,135 @@ static void ST_drawDebugInfo(void)
 
 	if ((moviemode == MM_GIF && cv_gif_downscale.value) || vid.dupx == 1)
 	{
-		if (cv_debug & DBG_BASIC)
-		{
-			const fixed_t d = AngleFixed(stplyr->mo->angle);
-			V_DrawRightAlignedString(320,  0, VFLAGS, va("X: %6d", stplyr->mo->x>>FRACBITS));
-			V_DrawRightAlignedString(320,  8, VFLAGS, va("Y: %6d", stplyr->mo->y>>FRACBITS));
-			V_DrawRightAlignedString(320, 16, VFLAGS, va("Z: %6d", stplyr->mo->z>>FRACBITS));
-			V_DrawRightAlignedString(320, 24, VFLAGS, va("A: %6d", FixedInt(d)));
+		textfunc = V_DrawRightAlignedString;
+		lowh = ((vid.height/vid.dupy) - 16);
+	}
+	else
+	{
+		textfunc = V_DrawRightAlignedSmallString;
+		h /= 2;
+		w /= 2;
+		lowh = 0;
+	}
 
-			height += 4*9;
-		}
+#define V_DrawDebugLine(str) if (lowh && (height > lowh))\
+							{\
+								V_DrawRightAlignedThinString(320,  8+lowh, VFLAGS|V_REDMAP, "SOME INFO NOT VISIBLE");\
+								return;\
+							}\
+							textfunc(320, height, VFLAGS, str);\
+							height += h;
 
-		if (cv_debug & (DBG_MEMORY|DBG_RANDOMIZER|DBG_DETAILED))
-		{
-			V_DrawRightAlignedThinString(320,   height, VFLAGS|V_REDMAP, "INFO NOT AVAILABLE");
-			V_DrawRightAlignedThinString(320, 8+height, VFLAGS|V_REDMAP, "AT THIS RESOLUTION");
-		}
+#define V_DrawDebugFlag(f, str) textfunc(width, height, VFLAGS|f, str);\
+								width -= w
+
+	if (cv_debug & DBG_MEMORY)
+	{
+		V_DrawDebugLine(va("Heap: %8sKB", sizeu1(Z_TotalUsage()>>10)));
+
+		height += h/2;
 	}
-	else
+
+	if (cv_debug & DBG_RANDOMIZER) // randomizer testing
 	{
-#define h 4
-#define dist 2
-#define V_DrawDebugLine(str) V_DrawRightAlignedSmallString(320, height, VFLAGS, str);\
-								height += h
-
-		if (cv_debug & DBG_MEMORY)
-		{
-			V_DrawDebugLine(va("Heap: %8sKB", sizeu1(Z_TotalUsage()>>10)));
-
-			height += dist;
-		}
-
-		if (cv_debug & DBG_RANDOMIZER) // randomizer testing
-		{
-			fixed_t peekres = P_RandomPeek();
-			peekres *= 10000;     // Change from fixed point
-			peekres >>= FRACBITS; // to displayable decimal
-
-			V_DrawDebugLine(va("Init: %08x", P_GetInitSeed()));
-			V_DrawDebugLine(va("Seed: %08x", P_GetRandSeed()));
-			V_DrawDebugLine(va("==  :    .%04d", peekres));
-
-			height += dist;
-		}
-
-		if (cv_debug & DBG_DETAILED)
-		{
-#define V_DrawDebugFlag(f, str) V_DrawRightAlignedSmallString(w, height, VFLAGS|f, str);\
-								w -= 9
-			const fixed_t d = AngleFixed(stplyr->drawangle);
-			INT32 w = 320;
-
-			V_DrawDebugLine(va("SHIELD: %5x", stplyr->powers[pw_shield]));
-			V_DrawDebugLine(va("SCALE: %5d%%", (stplyr->mo->scale*100)>>FRACBITS));
-			V_DrawDebugLine(va("CARRY: %5x", stplyr->powers[pw_carry]));
-			V_DrawDebugLine(va("AIR: %4d, %3d", stplyr->powers[pw_underwater], stplyr->powers[pw_spacetime]));
-			V_DrawDebugLine(va("ABILITY: %3d, %3d", stplyr->charability, stplyr->charability2));
-			V_DrawDebugLine(va("ACTIONSPD: %5d", stplyr->actionspd>>FRACBITS));
-			V_DrawDebugLine(va("PEEL: %3d", stplyr->dashmode));
-			V_DrawDebugLine(va("SCOREADD: %3d", stplyr->scoreadd));
-
-			// Flags
-			V_DrawDebugFlag(((stplyr->pflags & PF_SHIELDABILITY)  ? V_GREENMAP : V_REDMAP), "SH");
-			V_DrawDebugFlag(((stplyr->pflags & PF_THOKKED)        ? V_GREENMAP : V_REDMAP), "TH");
-			V_DrawDebugFlag(((stplyr->pflags & PF_STARTDASH)      ? V_GREENMAP : V_REDMAP), "ST");
-			V_DrawDebugFlag(((stplyr->pflags & PF_SPINNING)       ? V_GREENMAP : V_REDMAP), "SP");
-			V_DrawDebugFlag(((stplyr->pflags & PF_NOJUMPDAMAGE)   ? V_GREENMAP : V_REDMAP), "ND");
-			V_DrawDebugFlag(((stplyr->pflags & PF_JUMPED)         ? V_GREENMAP : V_REDMAP), "JD");
-			V_DrawDebugFlag(((stplyr->pflags & PF_STARTJUMP)      ? V_GREENMAP : V_REDMAP), "SJ");
-			V_DrawDebugFlag(0, "PF/SF:");
-			height += h;
-			w = 320;
-			V_DrawDebugFlag(((stplyr->pflags & PF_INVIS)          ? V_GREENMAP : V_REDMAP), "*I");
-			V_DrawDebugFlag(((stplyr->pflags & PF_NOCLIP)         ? V_GREENMAP : V_REDMAP), "*C");
-			V_DrawDebugFlag(((stplyr->pflags & PF_GODMODE)        ? V_GREENMAP : V_REDMAP), "*G");
-			V_DrawDebugFlag(((stplyr->charflags & SF_SUPER)       ? V_GREENMAP : V_REDMAP), "SU");
-			V_DrawDebugFlag(((stplyr->pflags & PF_APPLYAUTOBRAKE) ? V_GREENMAP : V_REDMAP), "AA");
-			V_DrawDebugFlag(((stplyr->pflags & PF_SLIDING)        ? V_GREENMAP : V_REDMAP), "SL");
-			V_DrawDebugFlag(((stplyr->pflags & PF_BOUNCING)       ? V_GREENMAP : V_REDMAP), "BO");
-			V_DrawDebugFlag(((stplyr->pflags & PF_GLIDING)        ? V_GREENMAP : V_REDMAP), "GL");
-			height += h;
-
-			V_DrawDebugLine(va("CEILINGZ: %6d", stplyr->mo->ceilingz>>FRACBITS));
-			V_DrawDebugLine(va("FLOORZ: %6d", stplyr->mo->floorz>>FRACBITS));
-
-			V_DrawDebugLine(va("CMOMX: %6d", stplyr->cmomx>>FRACBITS));
-			V_DrawDebugLine(va("CMOMY: %6d", stplyr->cmomy>>FRACBITS));
-			V_DrawDebugLine(va("PMOMZ: %6d", stplyr->mo->pmomz>>FRACBITS));
-
-			w = 320;
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_APPLYPMOMZ)      ? V_GREENMAP : V_REDMAP), "AP");
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_SPRUNG)          ? V_GREENMAP : V_REDMAP), "SP");
-			//V_DrawDebugFlag(((stplyr->mo->eflags & MFE_PUSHED)          ? V_GREENMAP : V_REDMAP), "PU"); -- not relevant to players
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_GOOWATER)        ? V_GREENMAP : V_REDMAP), "GW");
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_VERTICALFLIP)    ? V_GREENMAP : V_REDMAP), "VF");
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_JUSTSTEPPEDDOWN) ? V_GREENMAP : V_REDMAP), "JS");
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_UNDERWATER)      ? V_GREENMAP : V_REDMAP), "UW");
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_TOUCHWATER)      ? V_GREENMAP : V_REDMAP), "TW");
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_JUSTHITFLOOR)    ? V_GREENMAP : V_REDMAP), "JH");
-			V_DrawDebugFlag(((stplyr->mo->eflags & MFE_ONGROUND)        ? V_GREENMAP : V_REDMAP), "OG");
-			V_DrawDebugFlag(0, "MFE:");
-			height += h;
-
-			V_DrawDebugLine(va("MOMX: %6d", stplyr->rmomx>>FRACBITS));
-			V_DrawDebugLine(va("MOMY: %6d", stplyr->rmomy>>FRACBITS));
-			V_DrawDebugLine(va("MOMZ: %6d", stplyr->mo->momz>>FRACBITS));
-
-			V_DrawDebugLine(va("SPEED: %6d", stplyr->speed>>FRACBITS));
-
-			V_DrawDebugLine(va("DRAWANGLE: %6d", FixedInt(d)));
-
-			height += dist;
-#undef V_DrawDebugFlag
-		}
+		fixed_t peekres = P_RandomPeek();
+		peekres *= 10000;     // Change from fixed point
+		peekres >>= FRACBITS; // to displayable decimal
 
-		if (cv_debug & DBG_BASIC)
-		{
-			const fixed_t d = AngleFixed(stplyr->mo->angle);
-			V_DrawDebugLine(va("X: %6d", stplyr->mo->x>>FRACBITS));
-			V_DrawDebugLine(va("Y: %6d", stplyr->mo->y>>FRACBITS));
-			V_DrawDebugLine(va("Z: %6d", stplyr->mo->z>>FRACBITS));
-			V_DrawDebugLine(va("A: %6d", FixedInt(d)));
+		V_DrawDebugLine(va("Init: %08x", P_GetInitSeed()));
+		V_DrawDebugLine(va("Seed: %08x", P_GetRandSeed()));
+		V_DrawDebugLine(va("==  :    .%04d", peekres));
 
-			//height += dist;
-		}
+		height += h/2;
+	}
+
+	if (cv_debug & DBG_PLAYER)
+	{
+		INT32 width = 320;
+		const fixed_t d = AngleFixed(stplyr->drawangle);
+
+		V_DrawDebugLine(va("SHIELD: %5x", stplyr->powers[pw_shield]));
+		V_DrawDebugLine(va("SCALE: %5d%%", (stplyr->mo->scale*100)>>FRACBITS));
+		V_DrawDebugLine(va("CARRY: %5x", stplyr->powers[pw_carry]));
+		V_DrawDebugLine(va("AIR: %4d, %3d", stplyr->powers[pw_underwater], stplyr->powers[pw_spacetime]));
+		V_DrawDebugLine(va("ABILITY: %3d, %3d", stplyr->charability, stplyr->charability2));
+		V_DrawDebugLine(va("ACTIONSPD: %5d", stplyr->actionspd>>FRACBITS));
+		V_DrawDebugLine(va("PEEL: %3d", stplyr->dashmode));
+		V_DrawDebugLine(va("SCOREADD: %3d", stplyr->scoreadd));
+
+		// Flags
+		V_DrawDebugFlag(((stplyr->pflags & PF_SHIELDABILITY)  ? V_GREENMAP : V_REDMAP), "SH");
+		V_DrawDebugFlag(((stplyr->pflags & PF_THOKKED)        ? V_GREENMAP : V_REDMAP), "TH");
+		V_DrawDebugFlag(((stplyr->pflags & PF_STARTDASH)      ? V_GREENMAP : V_REDMAP), "ST");
+		V_DrawDebugFlag(((stplyr->pflags & PF_SPINNING)       ? V_GREENMAP : V_REDMAP), "SP");
+		V_DrawDebugFlag(((stplyr->pflags & PF_NOJUMPDAMAGE)   ? V_GREENMAP : V_REDMAP), "ND");
+		V_DrawDebugFlag(((stplyr->pflags & PF_JUMPED)         ? V_GREENMAP : V_REDMAP), "JD");
+		V_DrawDebugFlag(((stplyr->pflags & PF_STARTJUMP)      ? V_GREENMAP : V_REDMAP), "SJ");
+		V_DrawDebugFlag(0, "PF/SF:");
+		height += h;
+		width = 320;
+		V_DrawDebugFlag(((stplyr->pflags & PF_INVIS)          ? V_GREENMAP : V_REDMAP), "*I");
+		V_DrawDebugFlag(((stplyr->pflags & PF_NOCLIP)         ? V_GREENMAP : V_REDMAP), "*C");
+		V_DrawDebugFlag(((stplyr->pflags & PF_GODMODE)        ? V_GREENMAP : V_REDMAP), "*G");
+		V_DrawDebugFlag(((stplyr->charflags & SF_SUPER)       ? V_GREENMAP : V_REDMAP), "SU");
+		V_DrawDebugFlag(((stplyr->pflags & PF_APPLYAUTOBRAKE) ? V_GREENMAP : V_REDMAP), "AA");
+		V_DrawDebugFlag(((stplyr->pflags & PF_SLIDING)        ? V_GREENMAP : V_REDMAP), "SL");
+		V_DrawDebugFlag(((stplyr->pflags & PF_BOUNCING)       ? V_GREENMAP : V_REDMAP), "BO");
+		V_DrawDebugFlag(((stplyr->pflags & PF_GLIDING)        ? V_GREENMAP : V_REDMAP), "GL");
+		height += h;
+
+		V_DrawDebugLine(va("DRAWANGLE: %6d", FixedInt(d)));
+
+		height += h/2;
 	}
 
+	if (cv_debug & DBG_DETAILED)
+	{
+		INT32 width = 320;
+
+		V_DrawDebugLine(va("CEILINGZ: %6d", stplyr->mo->ceilingz>>FRACBITS));
+		V_DrawDebugLine(va("FLOORZ: %6d", stplyr->mo->floorz>>FRACBITS));
+
+		V_DrawDebugLine(va("CMOMX: %6d", stplyr->cmomx>>FRACBITS));
+		V_DrawDebugLine(va("CMOMY: %6d", stplyr->cmomy>>FRACBITS));
+		V_DrawDebugLine(va("PMOMZ: %6d", stplyr->mo->pmomz>>FRACBITS));
+
+		width = 320;
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_APPLYPMOMZ)      ? V_GREENMAP : V_REDMAP), "AP");
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_SPRUNG)          ? V_GREENMAP : V_REDMAP), "SP");
+		//V_DrawDebugFlag(((stplyr->mo->eflags & MFE_PUSHED)          ? V_GREENMAP : V_REDMAP), "PU"); -- not relevant to players
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_GOOWATER)        ? V_GREENMAP : V_REDMAP), "GW");
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_VERTICALFLIP)    ? V_GREENMAP : V_REDMAP), "VF");
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_JUSTSTEPPEDDOWN) ? V_GREENMAP : V_REDMAP), "JS");
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_UNDERWATER)      ? V_GREENMAP : V_REDMAP), "UW");
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_TOUCHWATER)      ? V_GREENMAP : V_REDMAP), "TW");
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_JUSTHITFLOOR)    ? V_GREENMAP : V_REDMAP), "JH");
+		V_DrawDebugFlag(((stplyr->mo->eflags & MFE_ONGROUND)        ? V_GREENMAP : V_REDMAP), "OG");
+		V_DrawDebugFlag(0, "MFE:");
+		height += h;
+
+		V_DrawDebugLine(va("MOMX: %6d", stplyr->rmomx>>FRACBITS));
+		V_DrawDebugLine(va("MOMY: %6d", stplyr->rmomy>>FRACBITS));
+		V_DrawDebugLine(va("MOMZ: %6d", stplyr->mo->momz>>FRACBITS));
+
+		V_DrawDebugLine(va("SPEED: %6d", stplyr->speed>>FRACBITS));
+
+		height += h/2;
+	}
+
+	if (cv_debug & DBG_BASIC)
+	{
+		const fixed_t d = AngleFixed(stplyr->mo->angle);
+		V_DrawDebugLine(va("X: %6d", stplyr->mo->x>>FRACBITS));
+		V_DrawDebugLine(va("Y: %6d", stplyr->mo->y>>FRACBITS));
+		V_DrawDebugLine(va("Z: %6d", stplyr->mo->z>>FRACBITS));
+		V_DrawDebugLine(va("A: %6d", FixedInt(d)));
+
+		//height += h/2;
+	}
+
+#undef V_DrawDebugFlag
 #undef V_DrawDebugLine
-#undef dist
-#undef h
 #undef VFLAGS
 }