hedgewars/GSHandlers.inc
branchicegun
changeset 8560 134a098235fa
parent 8557 18330b24b92c
child 8563 4d9d8287e601
equal deleted inserted replaced
8557:18330b24b92c 8560:134a098235fa
  2380 
  2380 
  2381         PlaySound(sndSwitchHog);
  2381         PlaySound(sndSwitchHog);
  2382 
  2382 
  2383         repeat
  2383         repeat
  2384             CurrentTeam^.CurrHedgehog := Succ(CurrentTeam^.CurrHedgehog) mod (CurrentTeam^.HedgehogsNumber);
  2384             CurrentTeam^.CurrHedgehog := Succ(CurrentTeam^.CurrHedgehog) mod (CurrentTeam^.HedgehogsNumber);
  2385         until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0);
  2385         until (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear <> nil) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Gear^.Damage = 0) and (CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog].Effects[heFrozen]=0);
  2386 
  2386 
  2387         SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]);
  2387         SwitchCurrentHedgehog(@CurrentTeam^.Hedgehogs[CurrentTeam^.CurrHedgehog]);
  2388         AmmoMenuInvalidated:= true; 
  2388         AmmoMenuInvalidated:= true; 
  2389 
  2389 
  2390         HHGear := CurrentHedgehog^.Gear;
  2390         HHGear := CurrentHedgehog^.Gear;
  5128 begin
  5128 begin
  5129     iceSurface:= SpritesData[sprIceTexture].Surface;
  5129     iceSurface:= SpritesData[sprIceTexture].Surface;
  5130     pictureX := x mod iceSurface^.w;
  5130     pictureX := x mod iceSurface^.w;
  5131     pictureY := y mod iceSurface^.h;
  5131     pictureY := y mod iceSurface^.h;
  5132     icePixels := iceSurface^.pixels;
  5132     icePixels := iceSurface^.pixels;
  5133     LandPixels[y, x] := icePixels^[pictureX + pictureY * iceSurface^.w];
  5133     LandPixels[y, x]:= addBgColor(LandPixels[y, x], icePixels^[pictureX + pictureY * iceSurface^.w]);
       
  5134 
  5134     Land[y, x] := land[y, x] or lfIce;
  5135     Land[y, x] := land[y, x] or lfIce;
  5135 end;
  5136 end;
  5136 
  5137 
  5137 procedure DrawIce(Gear: PGear; x, y: Longint); 
  5138 procedure DrawIce(Gear: PGear; x, y: Longint); 
  5138     const iceSize :Longint = 35;
  5139     const iceSize :Longint = 35;
  5153             end else
  5154             end else
  5154             begin
  5155             begin
  5155                 if isLanscapeEdge(weight) then 
  5156                 if isLanscapeEdge(weight) then 
  5156                 begin
  5157                 begin
  5157                     LandPixels[j, i] := $FFB2AF8A;                    
  5158                     LandPixels[j, i] := $FFB2AF8A;                    
       
  5159                     if Land[j, i] > 255 then Land[j, i] := Land[j, i] or lfIce;
  5158                 end;                
  5160                 end;                
  5159             end;
  5161             end;
  5160         end;
  5162         end;
  5161     end;
  5163     end;
  5162     UpdateLandTexture(x - iceHalfSize, iceSize, y - iceHalfSize, iceSize, true);
  5164     UpdateLandTexture(x - iceHalfSize, iceSize, y - iceHalfSize, iceSize, true);
  5174     ndX, ndY: hwFloat;
  5176     ndX, ndY: hwFloat;
  5175     i, t, gX, gY: LongInt;
  5177     i, t, gX, gY: LongInt;
  5176     hogs: PGearArrayS;
  5178     hogs: PGearArrayS;
  5177 begin
  5179 begin
  5178     HHGear := Gear^.Hedgehog^.Gear;
  5180     HHGear := Gear^.Hedgehog^.Gear;
  5179     if (Gear^.Health = 0) or (HHGear = nil) or (HHGear^.Damage <> 0) then
  5181     if (Gear^.Message and gmAttack <> 0) or (Gear^.Health = 0) or (HHGear = nil) or (HHGear^.Damage <> 0) then
  5180         begin
  5182         begin
  5181         DeleteGear(Gear);
  5183         DeleteGear(Gear);
  5182         AfterAttack;
  5184         AfterAttack;
  5183         exit
  5185         exit
  5184         end
  5186         end
  5233                     DrawIce(Gear, Target.X, Target.Y);                    
  5235                     DrawIce(Gear, Target.X, Target.Y);                    
  5234                     IceState := iceWaitNextTarget;
  5236                     IceState := iceWaitNextTarget;
  5235                 end;
  5237                 end;
  5236 
  5238 
  5237 // freeze nearby hogs
  5239 // freeze nearby hogs
  5238                 hogs := GearsNear(int2hwFloat(Target.X), int2hwFloat(Target.Y), gtHedgehog, Gear^.Radius);
  5240                 hogs := GearsNear(int2hwFloat(Target.X), int2hwFloat(Target.Y), gtHedgehog, Gear^.Radius*2);
  5239                 if hogs.size > 0 then
  5241                 if hogs.size > 0 then
  5240                     for i:= 0 to hogs.size - 1 do
  5242                     for i:= 0 to hogs.size - 1 do
  5241                     begin
  5243                     begin
  5242                         if hogs.ar^[i] <> HHGear then
  5244                         if hogs.ar^[i] <> HHGear then
  5243                         begin
  5245                         begin
  5244                             if GameTicks mod 10 = 0 then 
  5246                             if GameTicks mod 10 = 0 then 
  5245                             if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] < 256 then
  5247                             if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] < 256 then
  5246                                 hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] := hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] + 1;
  5248                                 hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] := hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] + 1
       
  5249                             else if hogs.ar^[i]^.Hedgehog^.Effects[heFrozen] = 256 then
       
  5250                                 hogs.ar^[i]^.Hedgehog^.Effects[heFrozen]:= 100000;
  5247                         end;                        
  5251                         end;                        
  5248                     end;
  5252                     end;
  5249                 inc(Pos)
  5253                 inc(Pos)
  5250             end
  5254             end
  5251             else if (t > 400) and ((gY > cWaterLine) or
  5255             else if (t > 400) and ((gY > cWaterLine) or