diff -r 404ddce27b23 -r c13ebed437cb hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Wed Feb 20 02:21:58 2013 +0100 +++ b/hedgewars/uGearsRender.pas Tue Apr 02 21:00:57 2013 +0200 @@ -37,7 +37,17 @@ end; procedure RenderGear(Gear: PGear; x, y: LongInt); -var RopePoints: TRopePoints; +var RopePoints: record + Count: Longword; + HookAngle: GLfloat; + ar: array[0..MAXROPEPOINTS] of record + X, Y: hwFloat; + dLen: hwFloat; + b: boolean; + sx, sy, sb: boolean; + end; + rounded: array[0..MAXROPEPOINTS + 2] of TVertex2f; + end; implementation uses uRender, uUtils, uVariables, uAmmos, Math, uVisualGears; @@ -215,6 +225,8 @@ defaultPos, HatVisible: boolean; HH: PHedgehog; CurWeapon: PAmmo; + iceOffset:Longint; + r:TSDL_Rect; begin HH:= Gear^.Hedgehog; if HH^.Unplaced then @@ -243,6 +255,30 @@ defaultPos:= true; HatVisible:= false; + if HH^.Effects[heFrozen] > 0 then + if HH^.Effects[heFrozen] < 150000 then + begin + DrawHedgehog(sx, sy, + sign, + 0, + 0, + 0); + defaultPos:= false; + if HH^.Effects[heFrozen] < 256 then + HatVisible:= true + else HatVisible:= false + end + else + begin + DrawHedgehog(sx, sy, + sign, + 2, + 4, + 0); + defaultPos:= false; + HatVisible:= false + end; + if HH^.Effects[hePoisoned] <> 0 then begin @@ -251,6 +287,7 @@ Tint($FF, $FF, $FF, $FF) end; + if ((Gear^.State and gstWinner) <> 0) and ((CurAmmoGear = nil) or (CurAmmoGear^.Kind <> gtPickHammer)) then begin @@ -542,7 +579,7 @@ DrawTextureCentered(sx, sy - 40, CurAmmoGear^.Tex) end; gtIceGun: - begin DrawSpriteRotated(sprHandBallgun, hx, hy, sign, aangle); + begin DrawSpriteRotated(sprIceGun, hx, hy, sign, aangle); if CurAmmoGear^.Tex <> nil then DrawTextureCentered(sx, sy - 40, CurAmmoGear^.Tex) end; @@ -673,7 +710,7 @@ amBee: DrawSpriteRotatedF(sprHandBee, hx, hy, (RealTicks div 125) mod 4, sign, aangle); amFlamethrower: DrawSpriteRotatedF(sprHandFlamethrower, hx, hy, (RealTicks div 125) mod 4, sign, aangle); amLandGun: DrawSpriteRotated(sprHandBallgun, hx, hy, sign, aangle); - amIceGun: DrawSpriteRotated(sprHandBallgun, hx, hy, sign, aangle); + amIceGun: DrawSpriteRotated(sprIceGun, hx, hy, sign, aangle); amResurrector: DrawCircle(ox, oy, 98, 4, $F5, $DB, $35, $AA); // I'd rather not like to hardcode 100 here end; @@ -736,7 +773,7 @@ end else // not gstHHDriven begin - if (Gear^.Damage > 0) + if (Gear^.Damage > 0) and (HH^.Effects[heFrozen] = 0) and (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) > _0_003) then begin DrawHedgehog(sx, sy, @@ -921,6 +958,28 @@ Tint($FF, $FF, $FF, max($40, round($FF * abs(1 - ((RealTicks div 2 + Gear^.uid * 491) mod 1500) / 750)))); DrawSprite(sprInvulnerable, sx - 24, sy - 24, 0); end; + + if HH^.Effects[heFrozen] < 150000 then + begin + if HH^.Effects[heFrozen] < 150000 then + Tint($FF, $FF, $FF, min(255,127+HH^.Effects[heFrozen] div 800)); + + iceOffset:= min(32, HH^.Effects[heFrozen] div 8); + r.x := 128; + r.y := 96 - iceOffset; + r.w := 32; + r.h := iceOffset; + if sign = -1 then + DrawTextureFromRectDir(sx + sign*2, sy+16-iceoffset, r.w, r.h, @r, HHTexture, sign) + else + DrawTextureFromRectDir(sx-16 + sign*2, sy+16-iceoffset, r.w, r.h, @r, HHTexture, sign); + + + if HH^.Effects[heFrozen] < 150000 then + Tint($FF, $FF, $FF, $FF); + end; + + if cVampiric and (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear = Gear) then @@ -1232,8 +1291,13 @@ begin i:= random(100)+100; if Gear^.Target.X <> NoPointX then - DrawLine(Gear^.Target.X, Gear^.Target.Y, hwRound(HHGear^.X), hwRound(HHGear^.Y), 4.0, i, i, $FF, $40) - else DrawLine(hwRound(HHGear^.X), hwRound(HHGear^.Y), hwRound(Gear^.X), hwRound(Gear^.Y), 4.0, i, i, $FF, $40); + begin + DrawLine(Gear^.Target.X, Gear^.Target.Y, hwRound(HHGear^.X), hwRound(HHGear^.Y), 4.0, i, i, $FF, $40); + end + else + begin + DrawLine(hwRound(HHGear^.X), hwRound(HHGear^.Y), hwRound(Gear^.X), hwRound(Gear^.Y), 4.0, i, i, $FF, $40); + end; end end end;