Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
authornemo
Sat, 16 Jul 2011 13:01:11 -0400
changeset 5415 94e26612e2ec
parent 5413 6786f672d30b
child 5417 c56a6be662bf
Adjust "sticky" fire (molotov) so it makes better fire pits, by making the kicks more regular, yet of random left/right. Tweak napalm slightly along same lines. Probably needs more balancing.
hedgewars/GSHandlers.inc
--- a/hedgewars/GSHandlers.inc	Tue Jul 12 21:12:07 2011 +0400
+++ b/hedgewars/GSHandlers.inc	Sat Jul 16 13:01:11 2011 -0400
@@ -500,9 +500,9 @@
         gX := hwRound(Gear^.X);
         gY := hwRound(Gear^.Y);
         //doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 5, EXPLAutoSound);
-        for i:= 0 to 20 do
+        for i:= 0 to 24 do
         begin
-            dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1);
+            dX := AngleCos(i * 2) * ((_0_15*(i div 5))) * (GetRandom + _1);
             dY := AngleSin(i * 8) * _0_5 * (GetRandom + _1);
             Fire := AddGear(gX, gY, gtFlame, 0, dX, dY, 0);
             Fire^.State := Fire^.State or gsttmpFlag;
@@ -2114,6 +2114,7 @@
     gX,gY,i: LongInt;
     sticky: Boolean;
     vgt: PVisualGear;
+    tdX,tdY: HWFloat;
 begin
     sticky:= (Gear^.State and gsttmpFlag) <> 0;
     if not sticky then AllInactive := false;
@@ -2159,7 +2160,15 @@
         if sticky then
             begin
             Gear^.Radius := 7;
-            AmmoShove(Gear, 2, 30);
+            tdX:= Gear^.dX;
+            tdY:= Gear^.dY;
+            Gear^.dX.QWordValue:= 214748365;
+            Gear^.dY.QWordValue:= 429496730;
+            Gear^.dX.isNegative:= getrandom(2)<>1;
+            Gear^.dY.isNegative:= true;
+            AmmoShove(Gear, 2, 125);
+            Gear^.dX:= tdX;
+            Gear^.dY:= tdY;
             Gear^.Radius := 1
             end;
         if Gear^.Timer > 0 then
@@ -2177,10 +2186,18 @@
                 if ((GameTicks and $1) = 0) then
                     begin
                     Gear^.Radius := 7;
-                    AmmoShove(Gear, 4, 150);
+                    tdX:= Gear^.dX;
+                    tdY:= Gear^.dY;
+                    Gear^.dX.QWordValue:= 214748365;
+                    Gear^.dY.QWordValue:= 429496730;
+                    Gear^.dX.isNegative:= getrandom(2)<>1;
+                    Gear^.dY.isNegative:= true;
+                    AmmoShove(Gear, 6, 100);
+                    Gear^.dX:= tdX;
+                    Gear^.dY:= tdY;
                     Gear^.Radius := 1;
                     end
-                else if ((GameTicks and $3) = 3) then doMakeExplosion(gX, gY, 6, Gear^.Hedgehog, 0);//, EXPLNoDamage); 
+                else if ((GameTicks and $3) = 3) then doMakeExplosion(gX, gY, 8, Gear^.Hedgehog, 0);//, EXPLNoDamage); 
                 //DrawExplosion(gX, gY, 4);
                 if ((GameTicks and $7) = 0) and (Random(2) = 0) then
                     for i:= 1 to Random(2)+1 do