Index: src/projectile.c
===================================================================
--- src/projectile.c	(revision 11370)
+++ src/projectile.c	(working copy)
@@ -1554,11 +1554,14 @@
 			{
 				/* 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 = MAX(weapondamage - armour, weapondamage / 3);
+
+				damageSoFar = interval * armourreduceddamage / GAME_TICKS_PER_SEC;
+				damageToDo = damageSoFar - (int32_t)psCurr->burnDamage;
+
 				if (damageToDo > 20) // maximum DR becomes 95% instead of previous 0%
 				{
 					damageToDo -= (damageToDo % 20); // make deterministic
Index: src/droid.c
===================================================================
--- src/droid.c	(revision 11370)
+++ src/droid.c	(working copy)
@@ -941,10 +941,16 @@
 			}
 			else
 			{
-				// do burn damage
-				damageToDo = MAX(BURN_DAMAGE - (int32_t)psDroid->armour[HIT_SIDE_FRONT][WC_HEAT], BURN_DAMAGE/3) * ((SDWORD)gameTime - (SDWORD)psDroid->burnStart) /
-								GAME_TICKS_PER_SEC;
-				damageToDo -= (SDWORD)psDroid->burnDamage;
+				/* Calculate how much damage should have
+				   been done up till now */
+				const int interval = gameTime - psDroid->burnStart;
+				const int weapondamage = BURN_DAMAGE;
+				const int armour = psDroid->armour[HIT_SIDE_FRONT][WC_HEAT];
+				const int armourreduceddamage = MAX(weapondamage - armour, weapondamage / 3);
+
+				const int damageSoFar = interval * armourreduceddamage / GAME_TICKS_PER_SEC;
+				damageToDo = damageSoFar - (int32_t)psDroid->burnDamage;
+
 				if (damageToDo > 20) // enough that DR takes effect
 				{
 					damageToDo -= (damageToDo % 20); // make deterministic

