diff --git a/src/d_iwad.cpp b/src/d_iwad.cpp
index f10d48fb7d..fadb9e65ba 100644
--- a/src/d_iwad.cpp
+++ b/src/d_iwad.cpp
@@ -583,7 +583,7 @@ int FIWadManager::IdentifyVersion (TArray<FString> &wadfiles, const char *iwad,
 		// We have a -iwad parameter. Pick the first usable IWAD we found through that.
 		for (unsigned i = numFoundWads; i < mFoundWads.Size(); i++)
 		{
-			if (mFoundWads[i].mInfoIndex > 0)
+			if (mFoundWads[i].mInfoIndex >= 0)
 			{
 				picks.Push(mFoundWads[i]);
 				break;
diff --git a/src/g_shared/a_dynlightdata.cpp b/src/g_shared/a_dynlightdata.cpp
index c45d6fe9f9..fcdbcd3d10 100644
--- a/src/g_shared/a_dynlightdata.cpp
+++ b/src/g_shared/a_dynlightdata.cpp
@@ -269,7 +269,7 @@ extern int ScriptDepth;
 
 inline float ParseFloat(FScanner &sc)
 {
-   sc.GetFloat();
+   sc.MustGetFloat();
 
    return float(sc.Float);
 }
@@ -277,7 +277,7 @@ inline float ParseFloat(FScanner &sc)
 
 inline int ParseInt(FScanner &sc)
 {
-   sc.GetNumber();
+   sc.MustGetNumber();
 
    return sc.Number;
 }
diff --git a/src/gl/renderer/gl_postprocess.cpp b/src/gl/renderer/gl_postprocess.cpp
index cea7cbb3f0..142358af68 100644
--- a/src/gl/renderer/gl_postprocess.cpp
+++ b/src/gl/renderer/gl_postprocess.cpp
@@ -938,7 +938,7 @@ int FGLRenderer::PTM_BestColor (const uint32_t *pal_in, int r, int g, int b, int
 	static bool firstTime = true;
 	static float trackpowtable = 0.;
 
-	double fbestdist, fdist;
+	double fbestdist = DBL_MAX, fdist;
 	int bestcolor = 0;
 
 	if (firstTime || trackpowtable != gl_paltonemap_powtable)
diff --git a/src/gl/shaders/gl_shader.cpp b/src/gl/shaders/gl_shader.cpp
index 41b6c18a1c..6c9ee416db 100644
--- a/src/gl/shaders/gl_shader.cpp
+++ b/src/gl/shaders/gl_shader.cpp
@@ -682,6 +682,7 @@ void gl_ParseHardwareShader(FScanner &sc, int deflump)
 
 		PostProcessShader shaderdesc;
 		shaderdesc.Target = sc.String;
+		shaderdesc.Target.ToLower();
 
 		bool validTarget = false;
 		if (sc.Compare("beforebloom")) validTarget = true;
diff --git a/src/gl/shaders/gl_texshader.cpp b/src/gl/shaders/gl_texshader.cpp
index f915299099..6276d7a4fc 100644
--- a/src/gl/shaders/gl_texshader.cpp
+++ b/src/gl/shaders/gl_texshader.cpp
@@ -265,11 +265,11 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 					alpha.ShouldCycle(true);
 					alpha.SetCycleType(ParseCycleType(sc));
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					start = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					end = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					cycle = sc.Float;
 
 					alpha.SetParams(start, end, cycle);
@@ -287,11 +287,11 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 					srcFactor.ShouldCycle(true);
 					srcFactor.SetCycleType(ParseCycleType(sc));
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					start = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					end = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					cycle = sc.Float;
 
 					srcFactor.SetParams(start, end, cycle);
@@ -309,11 +309,11 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 					dstFactor.ShouldCycle(true);
 					dstFactor.SetCycleType(ParseCycleType(sc));
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					start = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					end = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					cycle = sc.Float;
 
 					dstFactor.SetParams(start, end, cycle);
@@ -351,23 +351,23 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 					g.SetCycleType(type);
 					b.SetCycleType(type);
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r1 = float(sc.Float);
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g1 = float(sc.Float);
-					sc.GetFloat();
+					sc.MustGetFloat();
 					b1 = float(sc.Float);
 
 					// get color2
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r2 = float(sc.Float);
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g2 = float(sc.Float);
-					sc.GetFloat();
+					sc.MustGetFloat();
 					b2 = float(sc.Float);
 
                   // get cycle time
-					sc.GetFloat();
+					sc.MustGetFloat();
 					cycle = sc.Float;
 
 					r.SetParams(r1, r2, cycle);
@@ -376,11 +376,11 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
                }
                else
                {
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r1 = float(sc.Float);
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g1 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					b1 = sc.Float;
 
 					r.SetParams(r1, r1, 0.f);
@@ -390,9 +390,9 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 			}
 			else if (sc.Compare("center"))
 			{
-               sc.GetFloat();
+               sc.MustGetFloat();
                centerX = sc.Float;
-               sc.GetFloat();
+               sc.MustGetFloat();
                centerY = sc.Float;
 			}
 			else if (sc.Compare("emissive"))
@@ -407,17 +407,17 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 					adjustX.ShouldCycle(true);
 					adjustY.ShouldCycle(true);
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r1 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r2 = sc.Float;
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g1 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g2 = sc.Float;
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					cycle = sc.Float;
 
 					offsetX = r1;
@@ -428,9 +428,9 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 				}
 				else
 				{
-					sc.GetFloat();
+					sc.MustGetFloat();
 					offsetX = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					offsetY = sc.Float;
 				}
 			}
@@ -447,12 +447,12 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 			}
 			else if (sc.Compare("rotate"))
 			{
-               sc.GetFloat();
+               sc.MustGetFloat();
                rotate = sc.Float;
 			}
 			else if (sc.Compare("rotation"))
 			{
-               sc.GetFloat();
+               sc.MustGetFloat();
                rotation = sc.Float;
 			}
 			else if (sc.Compare("scale"))
@@ -462,17 +462,17 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 					scaleX.ShouldCycle(true);
 					scaleY.ShouldCycle(true);
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r1 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r2 = sc.Float;
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g1 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g2 = sc.Float;
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					cycle = sc.Float;
 
 					scaleX.SetParams(r1, g1, cycle);
@@ -480,9 +480,9 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 				}
 				else
 				{
-					sc.GetFloat();
+					sc.MustGetFloat();
 					scaleX.SetParams(sc.Float, sc.Float, 0.f);
-					sc.GetFloat();
+					sc.MustGetFloat();
 					scaleY.SetParams(sc.Float, sc.Float, 0.f);
 				}
 			}
@@ -510,15 +510,15 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 					vectorX.ShouldCycle(true);
 					vectorY.ShouldCycle(true);
 
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r1 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g1 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					r2 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					g2 = sc.Float;
-					sc.GetFloat();
+					sc.MustGetFloat();
 					cycle = sc.Float;
 
 					vectorX.SetParams(r1, r2, cycle);
@@ -526,9 +526,9 @@ bool FShaderLayer::ParseLayer(FScanner &sc)
 				}
 				else
 				{
-					sc.GetFloat();
+					sc.MustGetFloat();
 					vectorX.SetParams(sc.Float, sc.Float, 0.f);
-					sc.GetFloat();
+					sc.MustGetFloat();
 					vectorY.SetParams(sc.Float, sc.Float, 0.f);
 				}
 			}
diff --git a/src/gl/textures/gl_texture.cpp b/src/gl/textures/gl_texture.cpp
index e5a91fe14b..51425d40d7 100644
--- a/src/gl/textures/gl_texture.cpp
+++ b/src/gl/textures/gl_texture.cpp
@@ -564,7 +564,7 @@ void gl_ParseBrightmap(FScanner &sc, int deflump)
 	else sc.UnGet();
 
 	sc.MustGetString();
-	FTextureID no = TexMan.CheckForTexture(sc.String, type);
+	FTextureID no = TexMan.CheckForTexture(sc.String, type, FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_Overridable);
 	FTexture *tex = TexMan[no];
 
 	sc.MustGetToken('{');
diff --git a/src/polyrenderer/scene/poly_sprite.cpp b/src/polyrenderer/scene/poly_sprite.cpp
index 02cb9e6570..8bc1c50549 100644
--- a/src/polyrenderer/scene/poly_sprite.cpp
+++ b/src/polyrenderer/scene/poly_sprite.cpp
@@ -57,18 +57,17 @@ bool RenderPolySprite::GetLine(AActor *thing, DVector2 &left, DVector2 &right)
 	double thingxscalemul = spriteScale.X / tex->Scale.X;
 	double thingyscalemul = spriteScale.Y / tex->Scale.Y;
 
-	if (flipTextureX)
-		pos.X -= (tex->GetWidth() - tex->LeftOffset) * thingxscalemul;
-	else
-		pos.X -= tex->LeftOffset * thingxscalemul;
-
-	double spriteHalfWidth = thingxscalemul * tex->GetWidth() * 0.5;
+	double spriteWidth = thingxscalemul * tex->GetWidth();
 	double spriteHeight = thingyscalemul * tex->GetHeight();
 
-	pos.X += spriteHalfWidth;
+	double offsetX;
+	if (flipTextureX)
+		offsetX = (tex->GetWidth() - tex->LeftOffset) * thingxscalemul;
+	else
+		offsetX = tex->LeftOffset * thingxscalemul;
 
-	left = DVector2(pos.X - viewpoint.Sin * spriteHalfWidth, pos.Y + viewpoint.Cos * spriteHalfWidth);
-	right = DVector2(pos.X + viewpoint.Sin * spriteHalfWidth, pos.Y - viewpoint.Cos * spriteHalfWidth);
+	left = DVector2(pos.X - viewpoint.Sin * offsetX, pos.Y + viewpoint.Cos * offsetX);
+	right = DVector2(left.X + viewpoint.Sin * spriteWidth, left.Y - viewpoint.Cos * spriteWidth);
 	return true;
 }
 
@@ -81,36 +80,26 @@ void RenderPolySprite::Render(PolyRenderThread *thread, const TriMatrix &worldTo
 	const auto &viewpoint = PolyRenderer::Instance()->Viewpoint;
 	DVector3 thingpos = thing->InterpolatedPosition(viewpoint.TicFrac);
 
-	DVector3 pos = thingpos;
+	double posZ = thingpos.Z;
 
 	uint32_t spritetype = (thing->renderflags & RF_SPRITETYPEMASK);
 
 	if (spritetype == RF_FACESPRITE)
-		pos.Z -= thing->Floorclip;
+		posZ -= thing->Floorclip;
 
 	if (thing->flags2 & MF2_FLOATBOB)
-		pos.Z += thing->GetBobOffset(viewpoint.TicFrac);
+		posZ += thing->GetBobOffset(viewpoint.TicFrac);
 
 	bool flipTextureX = false;
 	FTexture *tex = GetSpriteTexture(thing, flipTextureX);
 	if (tex == nullptr || tex->UseType == FTexture::TEX_Null)
 		return;
 
-	DVector2 spriteScale = thing->Scale;
-	double thingxscalemul = spriteScale.X / tex->Scale.X;
-	double thingyscalemul = spriteScale.Y / tex->Scale.Y;
-	double spriteHalfWidth = thingxscalemul * tex->GetWidth() * 0.5;
+	double thingyscalemul = thing->Scale.Y / tex->Scale.Y;
 	double spriteHeight = thingyscalemul * tex->GetHeight();
 
-	if (flipTextureX)
-		pos.X -= (tex->GetWidth() - tex->LeftOffset) * thingxscalemul;
-	else
-		pos.X -= tex->LeftOffset * thingxscalemul;
-
-	pos.X += spriteHalfWidth;
-
-	pos.Z -= (tex->GetHeight() - tex->TopOffset) * thingyscalemul;
-	pos.Z = PerformSpriteClipAdjustment(thing, thingpos, spriteHeight, pos.Z);
+	posZ -= (tex->GetHeight() - tex->TopOffset) * thingyscalemul;
+	posZ = PerformSpriteClipAdjustment(thing, thingpos, spriteHeight, posZ);
 
 	//double depth = 1.0;
 	//visstyle_t visstyle = GetSpriteVisStyle(thing, depth);
@@ -142,7 +131,7 @@ void RenderPolySprite::Render(PolyRenderThread *thread, const TriMatrix &worldTo
 
 		vertices[i].x = (float)p.X;
 		vertices[i].y = (float)p.Y;
-		vertices[i].z = (float)(pos.Z + spriteHeight * offsets[i].second);
+		vertices[i].z = (float)(posZ + spriteHeight * offsets[i].second);
 		vertices[i].w = 1.0f;
 		vertices[i].u = (float)(offsets[i].first * tex->Scale.X);
 		vertices[i].v = (float)((1.0f - offsets[i].second) * tex->Scale.Y);
diff --git a/src/textures/texturemanager.cpp b/src/textures/texturemanager.cpp
index f7aa4926de..5039f48b60 100644
--- a/src/textures/texturemanager.cpp
+++ b/src/textures/texturemanager.cpp
@@ -699,9 +699,9 @@ void FTextureManager::LoadTextureDefs(int wadnum, const char *lumpname)
 						is32bit = !!sc.Compare("force32bit");
 						if (!is32bit) sc.UnGet();
 
-						sc.GetNumber();
+						sc.MustGetNumber();
 						width = sc.Number;
-						sc.GetNumber();
+						sc.MustGetNumber();
 						height = sc.Number;
 
 						if (lumpnum>=0)
diff --git a/src/vectors.h b/src/vectors.h
index 5fa0970f1f..95d7c5fdf7 100644
--- a/src/vectors.h
+++ b/src/vectors.h
@@ -651,6 +651,7 @@ struct TVector3
 	TVector3 &operator ^= (const TVector3 &other)
 	{
 		*this = *this ^ other;
+		return *this;
 	}
 };
 
diff --git a/src/win32/fb_d3d9.cpp b/src/win32/fb_d3d9.cpp
index d568ce60ff..ff05faca9b 100644
--- a/src/win32/fb_d3d9.cpp
+++ b/src/win32/fb_d3d9.cpp
@@ -1223,7 +1223,7 @@ void D3DFB::Flip()
 	{
 		RECT box;
 		GetClientRect(Window, &box);
-		if (box.right > 0 && box.right > 0 && (Width != box.right || Height != box.bottom))
+		if (box.right > 0 && box.bottom > 0 && (Width != box.right || Height != box.bottom))
 		{
 			Resize(box.right, box.bottom);