From 23cdae6feb5870b375043f52adca7107d9b95037 Mon Sep 17 00:00:00 2001
From: jsalmon3 <>
Date: Mon, 21 Apr 2003 05:36:07 +0000
Subject: [PATCH] Damage is more random now

---
 src/stratagus/missile.cpp | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/stratagus/missile.cpp b/src/stratagus/missile.cpp
index 530beec78..847d4811a 100644
--- a/src/stratagus/missile.cpp
+++ b/src/stratagus/missile.cpp
@@ -422,7 +422,7 @@ local void FreeMissile(Missile* missile)
 **		(BasicDamage-Armor)+PiercingDamage
 **	damage =----------------------------------
 **				    2
-**	damage is multiplied by random 1 or 2.
+**	damage is multiplied by random between 1 and 2.
 **
 **	@todo NOTE: different targets (big are hit by some missiles better)
 **	@todo NOTE: hidden targets are hit worser.
@@ -450,14 +450,18 @@ local int CalculateDamageStats(const UnitStats* attacker_stats,
 	DebugLevel0Fn("bloodlust\n");
     }
 
-    damage = -goal_stats->Armor;
-    damage += basic_damage;
+    damage = basic_damage - goal_stats->Armor;
     if (damage < 0) {
-	damage = 0;
+	// Use minimum damage
+	if (piercing_damage < 30 && basic_damage < 30) {
+	    damage = (piercing_damage + 1) / 2;
+	} else {
+	    damage = (piercing_damage + basic_damage - 30) / 2;
+	}
+    } else {
+	damage += piercing_damage;
+	damage -= SyncRand() % ((damage + 2) / 2);
     }
-    damage += piercing_damage + 1;	// round up
-    damage /= 2;
-    damage *= ((SyncRand() >> 15) & 1) + 1;
     DebugLevel3Fn("\nDamage done [%d] %d %d ->%d\n" _C_ goal_stats->Armor _C_
 	    basic_damage _C_ piercing_damage _C_ damage);