diff --git a/src/projectile.c b/src/projectile.c
index 63a9043..4a64f77 100644
--- a/src/projectile.c
+++ b/src/projectile.c
@@ -1554,11 +1554,16 @@ static void proj_checkBurnDamage( BASE_OBJECT *apsList, PROJECTILE *psProj)
 			{
 				/* Calculate how much damage should have
 				   been done up till now */
-				damageSoFar = (gameTime - psCurr->burnStart)
-				              * MAX((int32_t)weaponIncenDamage(psStats,psProj->player) - (int32_t)psCurr->armour[HIT_SIDE_FRONT][WC_HEAT], weaponIncenDamage(psStats,psProj->player)/3)
-				              / GAME_TICKS_PER_SEC;
-				damageToDo = (SDWORD)damageSoFar
-				             - (SDWORD)psCurr->burnDamage;
+				const int interval = gameTime - psCurr->burnStart;
+				const int weapondamage = weaponIncenDamage(psStats, psProj->player);
+				const int armour = psCurr->armour[HIT_SIDE_FRONT][WC_HEAT];
+				const int armourreduceddamage = weapondamage - armour;
+				const int minimaldamage = weapondamage / 3;
+				const int realdamage = MAX(armourreduceddamage, minimaldamage);
+
+				damageSoFar = interval * realdamage / GAME_TICKS_PER_SEC;
+				damageToDo = damageSoFar - psCurr->burnDamage;
+
 				if (damageToDo > 20) // maximum DR becomes 95% instead of previous 0%
 				{
 					damageToDo -= (damageToDo % 20); // make deterministic

