# HG changeset patch
# User Wuzzy <Wuzzy2@mail.ru>
# Date 1535844337 -7200
# Node ID bbea77a8dff9bf76fb6ccd219208accb1df2f0cc
# Parent  2ac3658a2a139e441b05035c5445635844b0d153
Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)

Fixes 210.

diff -r 2ac3658a2a13 -r bbea77a8dff9 ChangeLog.txt
--- a/ChangeLog.txt	Sun Sep 02 00:07:33 2018 +0200
+++ b/ChangeLog.txt	Sun Sep 02 01:25:37 2018 +0200
@@ -32,6 +32,7 @@
  * Limit hedgehog health to 268435455 to prevent some bugs
  * Fix Sudden Death starting in the second turn of a round rather than the first
  * Prevent voices from being spoken directly before a victory voice
+ * Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme)
 
 Frontend:
  + Add setting to disable audio dampening when losing window focus
diff -r 2ac3658a2a13 -r bbea77a8dff9 hedgewars/uGearsHandlersMess.pas
--- a/hedgewars/uGearsHandlersMess.pas	Sun Sep 02 00:07:33 2018 +0200
+++ b/hedgewars/uGearsHandlersMess.pas	Sun Sep 02 01:25:37 2018 +0200
@@ -307,9 +307,28 @@
         AddVisualGear(bubbleX, bubbleY, vgtBubble)
 else if Random(12) = 0 then
         AddVisualGear(bubbleX, bubbleY, vgtBubble);
+// Insta-delete gear and skip drowning animation if water is 100% opaque
 if (not SuddenDeathDmg and (WaterOpacity > $FE))
-or (SuddenDeathDmg and (SDWaterOpacity > $FE))
-or (hwRound(Gear^.Y) > Gear^.Radius + cWaterLine + cVisibleWater) then
+or (SuddenDeathDmg and (SDWaterOpacity > $FE)) then
+    begin
+    // Teleport gear to a suitable position for the damage tag in the water
+    if (WorldEdge = weSea) and (hwRound(Gear^.X) - Gear^.Radius < leftX) then
+        begin
+        if (hwRound(Gear^.X) - Gear^.Radius > leftX - 90) then
+            Gear^.X := Gear^.X - _90
+        end
+    else if (WorldEdge = weSea) and (hwRound(Gear^.X) + Gear^.Radius > rightX) then
+        begin
+        if (hwRound(Gear^.X) - Gear^.Radius < rightX + 90) then
+            Gear^.X := Gear^.X + _90
+        end
+    else
+        Gear^.Y := int2hwFloat(Gear^.Radius + cWaterLine + cVisibleWater);
+    DeleteGear(Gear);
+    exit;
+    end;
+// Delete normally if gear is outside of visible range
+if (hwRound(Gear^.Y) > Gear^.Radius + cWaterLine + cVisibleWater) then
     DeleteGear(Gear);
 end;
 
diff -r 2ac3658a2a13 -r bbea77a8dff9 hedgewars/uGearsList.pas
--- a/hedgewars/uGearsList.pas	Sun Sep 02 00:07:33 2018 +0200
+++ b/hedgewars/uGearsList.pas	Sun Sep 02 01:25:37 2018 +0200
@@ -868,8 +868,8 @@
             begin
             t:= max(Gear^.Damage, Gear^.Health);
             Gear^.Damage:= t;
-            if (((not SuddenDeathDmg) and (WaterOpacity < $FF)) or (SuddenDeathDmg and (SDWaterOpacity < $FF))) then
-                spawnHealthTagForHH(Gear, t);
+            // Display hedgehog damage in water
+            spawnHealthTagForHH(Gear, t);
             end;
 
         team:= Gear^.Hedgehog^.Team;