hedgewars/uGears.pas
changeset 42 72ffe21f027c
parent 39 b78e7185ed13
child 43 e297fea1a2f3
equal deleted inserted replaced
41:5d7a505875cd 42:72ffe21f027c
    45              State : Cardinal;
    45              State : Cardinal;
    46              X : Real;
    46              X : Real;
    47              Y : Real;
    47              Y : Real;
    48              dX: Real;
    48              dX: Real;
    49              dY: Real;
    49              dY: Real;
    50              Kind  : TGearType;
    50              Kind: TGearType;
       
    51              Pos: Longword;
    51              doStep: TGearStepProcedure;
    52              doStep: TGearStepProcedure;
    52              HalfWidth, HalfHeight: integer;
    53              HalfWidth, HalfHeight: integer;
    53              Angle, Power : Cardinal;
    54              Angle, Power : Cardinal;
    54              DirAngle: real;
    55              DirAngle: real;
    55              Timer : LongWord;
    56              Timer : LongWord;
   495         //!!!              ACHTUNG!!!!
   496         //!!!              ACHTUNG!!!!
   496         gtDynamite: if ((Gear.State and gstAttacking) = 0)or((Gear.Timer and $3FF) < 420)
   497         gtDynamite: if ((Gear.State and gstAttacking) = 0)or((Gear.Timer and $3FF) < 420)
   497                        then DrawSprite(sprMineOff , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface)
   498                        then DrawSprite(sprMineOff , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface)
   498                        else DrawSprite(sprMineOn  , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
   499                        else DrawSprite(sprMineOn  , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
   499         //!!!              ACHTUNG!!!!                     
   500         //!!!              ACHTUNG!!!!                     
   500             gtCase: DrawSprite(sprCase, Round(Gear.X) - 16 + WorldDx, Round(Gear.Y) - 16 + WorldDy, 0, Surface);
   501             gtCase: case Gear.Pos of
       
   502                          posCaseAmmo  : DrawSprite(sprCase, Round(Gear.X) - 16 + WorldDx, Round(Gear.Y) - 16 + WorldDy, 0, Surface);
       
   503                          posCaseHealth: DrawSprite(sprFAid, Round(Gear.X) - 16 + WorldDx, Round(Gear.Y) - 16 + WorldDy, (GameTicks shr 6) and $F, Surface);
       
   504                          end;
   501               end;
   505               end;
   502       Gear:= Gear.NextGear
   506       Gear:= Gear.NextGear
   503       end;
   507       end;
   504 end;
   508 end;
   505 
   509 
   551          case Gear.Kind of
   555          case Gear.Kind of
   552               gtHedgehog,
   556               gtHedgehog,
   553                   gtMine,
   557                   gtMine,
   554                   gtCase: begin
   558                   gtCase: begin
   555                           if (Mask and EXPLNoDamage) = 0 then inc(Gear.Damage, dmg);
   559                           if (Mask and EXPLNoDamage) = 0 then inc(Gear.Damage, dmg);
   556                           Gear.dX:= Gear.dX + dmg / 200 * sign(Gear.X - X);
   560                           if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear.Kind <> gtHedgehog) then
   557                           Gear.dY:= Gear.dY + dmg / 200 * sign(Gear.Y - Y);
   561                              begin
   558                           Gear.Active:= true;
   562                              Gear.dX:= Gear.dX + dmg / 200 * sign(Gear.X - X);
   559                           FollowGear:= Gear
   563                              Gear.dY:= Gear.dY + dmg / 200 * sign(Gear.Y - Y);
       
   564                              Gear.Active:= true;
       
   565                              FollowGear:= Gear
       
   566                              end;
   560                           end;
   567                           end;
   561                  gtGrave: Gear.dY:= - dmg / 250;
   568                  gtGrave: Gear.dY:= - dmg / 250;
   562               end;
   569               end;
   563          end;
   570          end;
   564       Gear:= Gear.NextGear
   571       Gear:= Gear.NextGear
   566 end;
   573 end;
   567 
   574 
   568 procedure AmmoShove(Ammo, Gear: PGear; Power: Longword);
   575 procedure AmmoShove(Ammo, Gear: PGear; Power: Longword);
   569 begin
   576 begin
   570 case Gear.Kind of
   577 case Gear.Kind of
   571      gtHedgehog: begin
   578      gtHedgehog,
       
   579          gtMine,
       
   580          gtCase: begin
   572                  inc(Gear.Damage, Power);
   581                  inc(Gear.Damage, Power);
   573                  Gear.dX:= Ammo.dX * Power * 0.01;
   582                  Gear.dX:= Ammo.dX * Power * 0.01;
   574                  Gear.dY:= Ammo.dY * Power * 0.01;
   583                  Gear.dY:= Ammo.dY * Power * 0.01;
   575                  Gear.Active:= true;
   584                  Gear.Active:= true;
   576                  FollowGear:= Gear
   585                  FollowGear:= Gear
   649 
   658 
   650 procedure SpawnBoxOfSmth;
   659 procedure SpawnBoxOfSmth;
   651 var i, x, y, k: integer;
   660 var i, x, y, k: integer;
   652     b: boolean;
   661     b: boolean;
   653 begin
   662 begin
   654 exit; // temp hack until boxes are fully implemented
       
   655 if CountGears(gtCase) > 2 then exit;
   663 if CountGears(gtCase) > 2 then exit;
   656 k:= 7;
   664 k:= 7;
   657 repeat
   665 repeat
   658   x:= getrandom(2000) + 24;
   666   x:= getrandom(2000) + 24;
   659   {$IFDEF DEBUGFILE}AddFileLog('SpawnBoxOfSmth: check x = '+inttostr(x));{$ENDIF}
   667 //  {$IFDEF DEBUGFILE}AddFileLog('SpawnBoxOfSmth: check x = '+inttostr(x));{$ENDIF}
   660   b:= false;
   668   b:= false;
   661   y:= -1;
   669   y:= -1;
   662   while (y < 1023) and not b do
   670   while (y < 1023) and not b do
   663         begin
   671         begin
   664         inc(y);
   672         inc(y);
   675         end;
   683         end;
   676   if b then
   684   if b then
   677      b:= CheckGearsNear(x, y, [gtMine, gtHedgehog, gtCase], 70, 70) = nil;
   685      b:= CheckGearsNear(x, y, [gtMine, gtHedgehog, gtCase], 70, 70) = nil;
   678   dec(k)
   686   dec(k)
   679 until (k = 0) or b;
   687 until (k = 0) or b;
   680 if b then FollowGear:= AddGear(x, -30, gtCase, 0)
   688 if b then
       
   689    begin
       
   690    FollowGear:= AddGear(x, -30, gtCase, 0);
       
   691    FollowGear.Health:= 25;
       
   692    FollowGear.Pos:= posCaseHealth
       
   693    end;
   681 end;
   694 end;
   682 
   695 
   683 initialization
   696 initialization
   684 
   697 
   685 finalization
   698 finalization