hedgewars/uGears.pas
branchwebgl
changeset 8833 c13ebed437cb
parent 8444 75db7bb8dce8
parent 8632 b5ed76d2a1f9
child 8839 caa57115d7ea
equal deleted inserted replaced
8450:404ddce27b23 8833:c13ebed437cb
    44 procedure HideHog(HH: PHedgehog);
    44 procedure HideHog(HH: PHedgehog);
    45 procedure RestoreHog(HH: PHedgehog);
    45 procedure RestoreHog(HH: PHedgehog);
    46 procedure ProcessGears;
    46 procedure ProcessGears;
    47 procedure EndTurnCleanup;
    47 procedure EndTurnCleanup;
    48 procedure SetAllToActive;
    48 procedure SetAllToActive;
    49 procedure SetAllHHToActive;
    49 procedure SetAllHHToActive; inline;
       
    50 procedure SetAllHHToActive(Ice: boolean);
    50 procedure DrawGears;
    51 procedure DrawGears;
    51 procedure FreeGearsList;
    52 procedure FreeGearsList;
    52 procedure AddMiscGears;
    53 procedure AddMiscGears;
    53 procedure AssignHHCoords;
    54 procedure AssignHHCoords;
    54 function  GearByUID(uid : Longword) : PGear;
    55 function  GearByUID(uid : Longword) : PGear;
   439         end
   440         end
   440     end;
   441     end;
   441 
   442 
   442 if TurnTimeLeft > 0 then
   443 if TurnTimeLeft > 0 then
   443     if CurrentHedgehog^.Gear <> nil then
   444     if CurrentHedgehog^.Gear <> nil then
   444         if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0)
   445         if ((CurrentHedgehog^.Gear^.State and gstAttacking) = 0) and 
   445             and (not isInMultiShoot) then
   446             not(isInMultiShoot and (CurrentHedgehog^.CurAmmoType in [amShotgun, amDEagle, amSniperRifle])) then
   446                 begin
   447                 begin
   447                 if (TurnTimeLeft = 5000)
   448                 if (TurnTimeLeft = 5000)
   448                 and (cHedgehogTurnTime >= 10000)
   449                 and (cHedgehogTurnTime >= 10000)
   449                 and (not PlacingHogs)
   450                 and (not PlacingHogs)
   450                 and (CurrentHedgehog^.Gear <> nil)
   451                 and (CurrentHedgehog^.Gear <> nil)
   559     t^.Active:= true;
   560     t^.Active:= true;
   560     t:= t^.NextGear
   561     t:= t^.NextGear
   561     end
   562     end
   562 end;
   563 end;
   563 
   564 
   564 procedure SetAllHHToActive;
   565 procedure SetAllHHToActive; inline;
       
   566 begin
       
   567 SetAllHHToActive(true)
       
   568 end;
       
   569 
       
   570 procedure SetAllHHToActive(Ice: boolean);
   565 var t: PGear;
   571 var t: PGear;
   566 begin
   572 begin
   567 AllInactive:= false;
   573 AllInactive:= false;
   568 t:= GearsList;
   574 t:= GearsList;
   569 while t <> nil do
   575 while t <> nil do
   570     begin
   576     begin
   571     if (t^.Kind = gtHedgehog) or (t^.Kind = gtExplosives) then
   577     if (t^.Kind = gtHedgehog) or (t^.Kind = gtExplosives) then
   572         t^.Active:= true;
   578         begin
       
   579         if (t^.Kind = gtHedgehog) and Ice then CheckIce(t);
       
   580         t^.Active:= true
       
   581         end;
   573     t:= t^.NextGear
   582     t:= t^.NextGear
   574     end
   583     end
   575 end;
   584 end;
   576 
       
   577 
   585 
   578 procedure DrawGears;
   586 procedure DrawGears;
   579 var Gear: PGear;
   587 var Gear: PGear;
   580     x, y: LongInt;
   588     x, y: LongInt;
   581 begin
   589 begin
   764     Ammo^.Health:= 0;
   772     Ammo^.Health:= 0;
   765 while i > 0 do
   773 while i > 0 do
   766     begin
   774     begin
   767     dec(i);
   775     dec(i);
   768     Gear:= t^.ar[i];
   776     Gear:= t^.ar[i];
       
   777     if (Ammo^.Kind = gtFlame) and (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.Effects[heFrozen] > 255) then
       
   778         Gear^.Hedgehog^.Effects[heFrozen]:= max(255,Gear^.Hedgehog^.Effects[heFrozen]-10000);
   769     tmpDmg:= ModifyDamage(Damage, Gear);
   779     tmpDmg:= ModifyDamage(Damage, Gear);
   770     if (Gear^.State and gstNoDamage) = 0 then
   780     if (Gear^.State and gstNoDamage) = 0 then
   771         begin
   781         begin
   772 
   782 
   773         if (Ammo^.Kind = gtDEagleShot) or (Ammo^.Kind = gtSniperRifleShot) then
   783         if (Ammo^.Kind = gtDEagleShot) or (Ammo^.Kind = gtSniperRifleShot) then
   777                 VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY);
   787                 VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY);
   778             end;
   788             end;
   779 
   789 
   780         if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then
   790         if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then
   781             Gear^.FlightTime:= 1;
   791             Gear^.FlightTime:= 1;
       
   792 
   782 
   793 
   783         case Gear^.Kind of
   794         case Gear^.Kind of
   784             gtHedgehog,
   795             gtHedgehog,
   785             gtMine,
   796             gtMine,
   786             gtSMine,
   797             gtSMine,
   825                 if (Ammo^.Hedgehog^.Gear <> nil) then
   836                 if (Ammo^.Hedgehog^.Gear <> nil) then
   826                     Ammo^.Hedgehog^.Gear^.State:= (Ammo^.Hedgehog^.Gear^.State and (not gstNotKickable));
   837                     Ammo^.Hedgehog^.Gear^.State:= (Ammo^.Hedgehog^.Gear^.State and (not gstNotKickable));
   827                 ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg * 100, dsUnknown); // crank up damage for explosives + blowtorch
   838                 ApplyDamage(Gear, Ammo^.Hedgehog, tmpDmg * 100, dsUnknown); // crank up damage for explosives + blowtorch
   828                 end;
   839                 end;
   829 
   840 
   830             if (Gear^.Kind = gtHedgehog) and Gear^.Hedgehog^.King then
   841             if (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.King or (Gear^.Hedgehog^.Effects[heFrozen] > 0)) then
   831                 begin
   842                 begin
   832                 Gear^.dX:= Ammo^.dX * Power * _0_005;
   843                 Gear^.dX:= Ammo^.dX * Power * _0_005;
   833                 Gear^.dY:= Ammo^.dY * Power * _0_005
   844                 Gear^.dY:= Ammo^.dY * Power * _0_005
   834                 end
   845                 end
   835             else if ((Ammo^.Kind <> gtFlame) or (Gear^.Kind = gtHedgehog)) and (Power <> 0) then
   846             else if ((Ammo^.Kind <> gtFlame) or (Gear^.Kind = gtHedgehog)) and (Power <> 0) then