Maelstrom: Only use the kid shields for dangerous objects

From bb11cd800d4a2aae37e4c59ff4782f0b10209b9d Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 30 Mar 2026 05:54:50 -0700
Subject: [PATCH] Only use the kid shields for dangerous objects

---
 game/game.cpp  | 2 +-
 game/object.h  | 3 +++
 game/objects.h | 8 ++++++++
 game/player.h  | 3 +++
 4 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/game/game.cpp b/game/game.cpp
index cd81849f..ab5b814e 100644
--- a/game/game.cpp
+++ b/game/game.cpp
@@ -382,7 +382,7 @@ GamePanelDelegate::OnTick()
 		if (gGameInfo.IsKidMode()) {
 			bool enableShield = false;
 			OBJ_LOOP(i, gNumSprites) {
-				if (gSprites[i]->Collide(gPlayers[j], false)) {
+				if (gSprites[i]->IsDangerous() && gSprites[i]->Collide(gPlayers[j], false)) {
 					enableShield = true;
 					break;
 				}
diff --git a/game/object.h b/game/object.h
index 942ddb59..ce5bc994 100644
--- a/game/object.h
+++ b/game/object.h
@@ -34,6 +34,9 @@ class Object {
 	virtual int IsPlayer(void) {
 		return(0);
 	}
+	virtual int IsDangerous(void) {
+		return(solid);
+	}
 	virtual int IsRock(void) {
 		return(0);
 	}
diff --git a/game/objects.h b/game/objects.h
index aa92d3d8..1a8f3809 100644
--- a/game/objects.h
+++ b/game/objects.h
@@ -28,6 +28,10 @@ class Prize : public Object {
 	Prize(int X, int Y, int xVel, int yVel);
 	~Prize() { }
 
+	virtual int IsDangerous(void) {
+		return(0);
+	}
+
 	/* When we are run over, we give prizes! */
 	int BeenRunOver(Object *ship) {
 		int i;
@@ -242,6 +246,10 @@ class DamagedShip : public Object {
 	DamagedShip(int X, int Y, int xVel, int yVel);
 	~DamagedShip() { }
 
+	virtual int IsDangerous(void) {
+		return(0);
+	}
+
 	int BeenRunOver(Object *ship) {
 		if (!ship->IsGhost()) {
 			ship->IncrLives(1);
diff --git a/game/player.h b/game/player.h
index c41cfe72..13e140e9 100644
--- a/game/player.h
+++ b/game/player.h
@@ -46,6 +46,9 @@ class Player : public Object {
 	virtual int IsPlayer(void) {
 		return(1);
 	}
+	virtual int IsDangerous(void) {
+		return(0);
+	}
 	virtual int IsGhost(void) {
 		return Ghost;
 	}