From 6cb3e2f457e3ca291bb2a8319b1a8acf38fa12c3 Mon Sep 17 00:00:00 2001
From: Christoph Oelckers <coelckers@users.noreply.github.com>
Date: Mon, 21 Nov 2022 10:48:47 +0100
Subject: [PATCH] - Duke: fixed operator precedence in scrap spawning code.

---
 source/games/duke/src/actors_d.cpp               | 4 ++--
 source/games/duke/src/sectors_d.cpp              | 4 ++--
 source/games/duke/src/sectors_r.cpp              | 2 +-
 wadsrc/static/zscript/games/duke/actors/scrap.zs | 1 +
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp
index 23a75052c..7c7643583 100644
--- a/source/games/duke/src/actors_d.cpp
+++ b/source/games/duke/src/actors_d.cpp
@@ -1699,7 +1699,7 @@ static void greenslime(DDukeActor *actor)
 					auto spawned = CreateActor(actor->sector(), actor->spr.pos.plusZ(-8), PClass::FindActor("DukeScrap"), -8, DVector2(0.75, 0.75), a, vel, zvel, actor, STAT_MISC);
 					if (spawned)
 					{
-						if (spawned) spawned->spriteextra = Scrap3 + krand() & 3;
+						if (spawned) spawned->spriteextra = Scrap3 + (krand() & 3);
 						spawned->spr.pal = 6;
 					}
 				}
@@ -1815,7 +1815,7 @@ static void greenslime(DDukeActor *actor)
 			auto spawned = CreateActor(actor->sector(), actor->spr.pos.plusZ(-8), PClass::FindActor("DukeScrap"), -8, DVector2(0.75, 0.75), a, vel, zvel, actor, STAT_MISC);
 			if (spawned)
 			{
-			if (spawned) spawned->spriteextra = Scrap3 + krand() & 3;
+			if (spawned) spawned->spriteextra = Scrap3 + (krand() & 3);
 				spawned->spr.pal = 6;
 			}
 		}
diff --git a/source/games/duke/src/sectors_d.cpp b/source/games/duke/src/sectors_d.cpp
index 77d29d79a..f6d2dda12 100644
--- a/source/games/duke/src/sectors_d.cpp
+++ b/source/games/duke/src/sectors_d.cpp
@@ -1147,7 +1147,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
 			auto vel = krandf(4) + 4;
 			auto zvel = -krandf(16) - targ->vel.Z * 0.25;
 			auto spawned = CreateActor(targ->sector(), targ->spr.pos.plusZ(-8), PClass::FindActor("DukeScrap"), -8, DVector2(0.75, 0.75), a, vel, zvel, targ, STAT_MISC);
-			if (spawned) spawned->spriteextra = Scrap1 + krand() & 15;
+			if (spawned) spawned->spriteextra = Scrap1 + (krand() & 15);
 		}
 		S_PlayActorSound(GLASS_HEAVYBREAK, targ);
 		targ->Destroy();
@@ -1177,7 +1177,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
 				auto zvel = -krandf(2) - 1;
 
 				auto spawned = CreateActor(targ->sector(), DVector3(targ->spr.pos.XY(), targ->sector()->floorz - 12 - j * 2), PClass::FindActor("DukeScrap"), -8, DVector2(1, 1), a, vel, zvel, targ, 5);
-				if (spawned) spawned->spriteextra = Scrap1 + krand() & 15;
+				if (spawned) spawned->spriteextra = Scrap1 + (krand() & 15);
 
 			}
 			spawn(targ, EXPLOSION2);
diff --git a/source/games/duke/src/sectors_r.cpp b/source/games/duke/src/sectors_r.cpp
index a03600cd6..9b72fdcd7 100644
--- a/source/games/duke/src/sectors_r.cpp
+++ b/source/games/duke/src/sectors_r.cpp
@@ -2175,7 +2175,7 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
 
 				auto spawned = CreateActor(targ->sector(), DVector3(targ->spr.pos.XY(), targ->sector()->floorz - 12 - j * 2), PClass::FindActor("DukeScrap"), -8, DVector2(1, 1),
 					a, vel, zvel, targ, 5);
-				if (spawned) spawned->spriteextra = Scrap1 + krand() & 15;
+				if (spawned) spawned->spriteextra = Scrap1 + (krand() & 15);
 			}
 			spawn(targ, EXPLOSION2);
 			targ->Destroy();
diff --git a/wadsrc/static/zscript/games/duke/actors/scrap.zs b/wadsrc/static/zscript/games/duke/actors/scrap.zs
index eeb0e8299..a1e9bb0d5 100644
--- a/wadsrc/static/zscript/games/duke/actors/scrap.zs
+++ b/wadsrc/static/zscript/games/duke/actors/scrap.zs
@@ -93,6 +93,7 @@ class DukeScrap : DukeActor
 		else 
 		{
 			let frame = self.spriteextra + self.temp_data[0];
+			Console.Printf("extra = %d, temp = %d", self.spriteextra, self.temp_data[0]);
 			if (frame < 0 || frame >= ScrapMax) frame = Scrap3;
 			tspr.setSpritePic(self, frame);
 			if (brighter[frame]) tspr.shade -= 6;