# HG changeset patch # User Stepan777 # Date 1341942985 -14400 # Node ID 8f675ab05802d936b5f8b2f9fed82cb80e25818d # Parent aa29a2f16cc79087420ef8e61e7163fcc3b6d808# Parent fcc00265883269bbf1df89419c6e0d37029ffbaf merge diff -r aa29a2f16cc7 -r 8f675ab05802 hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Mon Jul 09 21:45:30 2012 +0400 +++ b/hedgewars/uGearsUtils.pas Tue Jul 10 21:56:25 2012 +0400 @@ -403,34 +403,41 @@ begin splash:= AddVisualGear(X, cWaterLine, vgtSplash); if splash <> nil then + with splash^ do begin - splash^.Scale:= hwFloat2Float(Gear^.Density / _3 * Gear^.dY); - if splash^.Scale > 1 then splash^.Scale:= power(splash^.Scale,0.3333) - else splash^.Scale:= splash^.Scale + ((1-splash^.Scale) / 2); + Scale:= hwFloat2Float(Gear^.Density / _3 * Gear^.dY); + if Scale > 1 then Scale:= power(Scale,0.3333) + else Scale:= Scale + ((1-Scale) / 2); + if Scale > 1 then Timer:= round(max(Scale,3)) + else Timer:= 1; + // Low Gravity + Timer:=round(0.0005/cGravityf); + FrameTicks:= FrameTicks*Timer; end; maxDrops := (hwRound(Gear^.Density) * 3) div 2 + round(vdX * hwRound(Gear^.Density) * 6) + round(vdY * hwRound(Gear^.Density) * 6); for i:= max(maxDrops div 3, min(32, Random(maxDrops))) downto 0 do begin - particle := AddVisualGear(X - 3 + Random(6), cWaterLine, vgtDroplet); + particle := AddVisualGear(X - 3 + Random(7), cWaterLine, vgtDroplet); if particle <> nil then - begin - particle^.dX := particle^.dX - vdX / 10; - particle^.dY := particle^.dY - vdY / 5; - if splash <> nil then + with particle^ do begin - if splash^.Scale > 1 then + dX := dX - vdX / 10; + dY := dY - vdY / 5; + if splash <> nil then begin - particle^.dX:= particle^.dX * power(splash^.Scale,0.3333); // tone down the droplet height further - particle^.dY:= particle^.dY * power(splash^.Scale, 0.3333) - end - else - begin - particle^.dX:= particle^.dX * splash^.Scale; - particle^.dY:= particle^.dY * splash^.Scale + if splash^.Scale > 1 then + begin + dX:= dX * power(splash^.Scale,0.3333); // tone down the droplet height further + dY:= dY * power(splash^.Scale, 0.3333) + end + else + begin + dX:= dX * splash^.Scale; + dY:= dY * splash^.Scale + end end end - end end end; if isSubmersible and (CurAmmoGear^.Pos = 0) then diff -r aa29a2f16cc7 -r 8f675ab05802 hedgewars/uVisualGears.pas --- a/hedgewars/uVisualGears.pas Mon Jul 09 21:45:30 2012 +0400 +++ b/hedgewars/uVisualGears.pas Tue Jul 10 21:56:25 2012 +0400 @@ -298,10 +298,8 @@ end; vgtDroplet: begin - dx:= 0.001 * (random(75) + 15); - dy:= -0.001 * (random(80) + 120); - if random(2) = 0 then - dx := -dx; + dx:= 0.001 * (random(180) - 90); + dy:= -0.001 * (random(160) + 40); FrameTicks:= 250 + random(1751); Frame:= random(3) end; @@ -651,10 +649,10 @@ DrawTextureF(SpritesData[sprFlame].Texture, Gear^.FrameTicks / 900, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, (RealTicks shr 7 + Gear^.Frame) mod 8, 1, 16, 16); vgtSplash: if SuddenDeathDmg then //DrawSprite(sprSDSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37)) - DrawTextureF(SpritesData[sprSDSplash].Texture, Gear^.scale, round(Gear^.X + WorldDx), round(Gear^.Y + WorldDy - ((SpritesData[sprSDSplash].Height+8)*Gear^.Scale)/2), 19 - (Gear^.FrameTicks div 37), 1, SpritesData[sprSDSplash].Width, SpritesData[sprSDSplash].Height) + DrawTextureF(SpritesData[sprSDSplash].Texture, Gear^.scale, round(Gear^.X + WorldDx), round(Gear^.Y + WorldDy - ((SpritesData[sprSDSplash].Height+8)*Gear^.Scale)/2), 19 - (Gear^.FrameTicks div Gear^.Timer div 37), 1, SpritesData[sprSDSplash].Width, SpritesData[sprSDSplash].Height) else //DrawSprite(sprSplash, round(Gear^.X) + WorldDx - 40, round(Gear^.Y) + WorldDy - 58, 19 - (Gear^.FrameTicks div 37)); - DrawTextureF(SpritesData[sprSplash].Texture, Gear^.scale, round(Gear^.X + WorldDx), round(Gear^.Y + WorldDy - ((SpritesData[sprSplash].Height+8)*Gear^.Scale)/2), 19 - (Gear^.FrameTicks div 37), 1, SpritesData[sprSplash].Width, SpritesData[sprSplash].Height); + DrawTextureF(SpritesData[sprSplash].Texture, Gear^.scale, round(Gear^.X + WorldDx), round(Gear^.Y + WorldDy - ((SpritesData[sprSplash].Height+8)*Gear^.Scale)/2), 19 - (Gear^.FrameTicks div Gear^.Timer div 37), 1, SpritesData[sprSplash].Width, SpritesData[sprSplash].Height); vgtDroplet: if SuddenDeathDmg then DrawSprite(sprSDDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame) else