- New test map
authorunc0rr
Sun, 16 Jul 2006 08:13:51 +0000
changeset 79 29b477319854
parent 78 66bb79dd248d
child 80 3c3dc6a148ca
- New test map - Baseball bat - Flames - Bots can use baseball bat - Many small changes
hedgewars/Data/Graphics/Flame.png
hedgewars/Data/Maps/test3/map.png
hedgewars/GSHandlers.inc
hedgewars/HHHandlers.inc
hedgewars/hwengine.dpr
hedgewars/uAIAmmoTests.pas
hedgewars/uAIMisc.pas
hedgewars/uConsole.pas
hedgewars/uConsts.pas
hedgewars/uGame.pas
hedgewars/uGears.pas
hedgewars/uMisc.pas
hedgewars/uTeams.pas
hedgewars/uWorld.pas
Binary file hedgewars/Data/Graphics/Flame.png has changed
Binary file hedgewars/Data/Maps/test3/map.png has changed
--- a/hedgewars/GSHandlers.inc	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/GSHandlers.inc	Sun Jul 16 08:13:51 2006 +0000
@@ -1,6 +1,6 @@
 (*
  * Hedgewars, a worms-like game
- * Copyright (c) 2004, 2005 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004, 2005, 2006 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * Distributed under the terms of the BSD-modified licence:
  *
@@ -138,7 +138,7 @@
       gtClusterBomb: begin
                      doMakeExplosion(round(Gear.X), round(Gear.Y), 30, EXPLAutoSound);
                      for i:= 0 to 4 do
-                         AddGear(round(Gear.X), round(Gear.Y), gtCluster, 0, (getrandom - 0.5)*0.2, (getrandom - 2) * 0.2);
+                         AddGear(round(Gear.X), round(Gear.Y), gtCluster, 0, (getrandom - 0.5)*0.2, (getrandom - 3) * 0.08);
                      end
         end;
    DeleteGear(Gear);
@@ -670,6 +670,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 procedure doStepCase(Gear: PGear);
+var i: integer;
 begin
 if (Gear.Message and gm_Destroy) > 0 then
    begin
@@ -677,6 +678,15 @@
    exit
    end;
 
+if Gear.Damage > 0 then
+   begin
+   DeleteGear(Gear);
+   doMakeExplosion(round(Gear.X), round(Gear.Y), 25, EXPLAutoSound);
+   for i:= 0 to 63 do
+       AddGear(round(Gear.X), round(Gear.Y), gtFlame, 0);
+   exit
+   end;
+
 if (Gear.dY <> 0) or (not TestCollisionYwithGear(Gear, 1)) then
    begin
    AllInactive:= false;
@@ -694,12 +704,6 @@
 
 if (Gear.CollIndex = High(Longword)) and (Gear.dY = 0) then AddGearCI(Gear)
    else if (Gear.CollIndex < High(Longword)) and (Gear.dY <> 0) then DeleteCI(Gear);
-
-if Gear.Damage > 0 then
-   begin
-   DeleteGear(Gear);
-   doMakeExplosion(round(Gear.X), round(Gear.Y), 20, EXPLAutoSound)
-   end
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -758,3 +762,46 @@
 Gear.doStep:= doStepTeamHealthSorterWork
 end;
 
+////////////////////////////////////////////////////////////////////////////////
+procedure doStepShover(Gear: PGear);
+var HHGear: PGear;
+begin
+HHGear:= PHedgehog(Gear.Hedgehog)^.Gear;
+HHGear.State:= HHGear.State or gstNoDamage;
+AmmoShove(Gear, 30, 115);
+HHGear.State:= HHGear.State and not gstNoDamage;
+DeleteGear(Gear)
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+procedure doStepFlame(Gear: PGear);
+begin
+AllInactive:= false;
+if not TestCollisionYwithGear(Gear, 1) then
+   begin
+   Gear.dX:= Gear.dX + cWindSpeed;
+   Gear.dY:= Gear.dY + cGravity;
+   if abs(Gear.dX) > 0.12 then Gear.dX:= Gear.dX * 0.5;
+   if Gear.dY > 0.12 then Gear.dY:= Gear.dY * 0.995;
+   Gear.X:= Gear.X + Gear.dX;
+   Gear.Y:= Gear.Y + Gear.dY;
+   if Gear.Y > 1023 then
+      begin
+      DeleteGear(Gear);
+      exit
+      end
+   end else begin
+   if Gear.Timer > 0 then dec(Gear.Timer)
+      else begin
+      doMakeExplosion(round(Gear.X), round(Gear.Y), 2, 0);
+      dec(Gear.Health);
+      Gear.Timer:= 1250 - Gear.Angle * 12
+      end
+   end;
+
+if (((GameTicks div 8) mod 64) = Gear.Angle) then
+   AmmoFlameWork(Gear);
+
+if Gear.Health = 0 then 
+   DeleteGear(Gear)
+end;
--- a/hedgewars/HHHandlers.inc	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/HHHandlers.inc	Sun Jul 16 08:13:51 2006 +0000
@@ -74,6 +74,7 @@
                                  FollowGear:= AddGear(round(X), round(Y), gtDEagleShot,   0, xx * 0.5, yy * 0.5);
                                  end;
                      amDynamite: AddGear(round(X) + Sign(dX) * 7, round(Y), gtDynamite, 0, Sign(dX) * 0.035, 0, 5000);
+                  amBaseballBat: AddGear(round(X) + Sign(dX) * 10, round(Y), gtShover, 0, xx * 0.5, yy * 0.5).Radius:= 15
                   end;
         Power:= 0;
         if CurAmmoGear <> nil then
--- a/hedgewars/hwengine.dpr	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/hwengine.dpr	Sun Jul 16 08:13:51 2006 +0000
@@ -48,14 +48,14 @@
   uSound in 'uSound.pas',
   uRandom in 'uRandom.pas',
   uAI in 'uAI.pas',
+  uAIMisc in 'uAIMisc.pas',
+  uAIAmmoTests in 'uAIAmmoTests.pas',
+  uAIActions in 'uAIActions.pas',
   uCollisions in 'uCollisions.pas',
   uLand in 'uLand.pas',
   uLandTemplates in 'uLandTemplates.pas',
   uLandObjects in 'uLandObjects.pas',
-  uLandGraphics in 'uLandGraphics.pas',
-  uAIMisc in 'uAIMisc.pas',
-  uAIAmmoTests in 'uAIAmmoTests.pas',
-  uAIActions in 'uAIActions.pas';
+  uLandGraphics in 'uLandGraphics.pas';
 
 {$INCLUDE options.inc}
 
@@ -67,7 +67,7 @@
 procedure OnDestroy; forward;
 
 ////////////////////////////////
-procedure DoTimer(Lag: integer);  // - обработка таймера
+procedure DoTimer(Lag: integer);
 var s: string;
 begin
 case GameState of
@@ -118,7 +118,7 @@
 end;
 
 ////////////////////
-procedure OnDestroy;   // - очищаем память
+procedure OnDestroy;
 begin
 {$IFDEF DEBUGFILE}AddFileLog('Freeing resources...');{$ENDIF}
 if isSoundEnabled then ReleaseSound;
--- a/hedgewars/uAIAmmoTests.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uAIAmmoTests.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -39,6 +39,7 @@
 function TestGrenade(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
 function TestShotgun(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
 function TestDesertEagle(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
+function TestBaseballBat(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
 
 type TAmmoTestProc = function (Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
 const AmmoTests: array[TAmmoType] of TAmmoTestProc =
@@ -53,7 +54,8 @@
 {amRope}          nil,
 {amMine}          nil,
 {amDEagle}        TestDesertEagle,
-{amDynamite}      nil
+{amDynamite}      nil,
+{amBaseballBat}   TestBaseballBat
                   );
 
 implementation
@@ -175,6 +177,7 @@
 function TestShotgun(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
 var Vx, Vy, x, y: real;
 begin
+ExplR:= 0;
 if Metric(round(Me.X), round(Me.Y), Targ.X, Targ.Y) < 80 then
    begin
    Result:= BadTurn;
@@ -182,7 +185,6 @@
    end;
 Time:= 0;
 Power:= 1;
-ExplR:= 0;
 Vx:= (Targ.X - Me.X)/1024;
 Vy:= (Targ.Y - Me.Y)/1024;
 x:= Me.X;
@@ -193,7 +195,7 @@
   y:= y + vY;
   if TestColl(round(x), round(y), 2) then
      begin
-     Result:= RateExplosion(Me, round(x), round(y), 25) * 2;
+     Result:= RateShove(Me, round(x), round(y), 25, 25) * 1024;
      if Result = 0 then Result:= - Metric(Targ.X, Targ.Y, round(x), round(y)) div 64;
      exit
      end
@@ -205,6 +207,7 @@
 var Vx, Vy, x, y, t: real;
     d: Longword;
 begin
+ExplR:= 0;
 if abs(Me.X - Targ.X) + abs(Me.Y - Targ.Y) < 80 then
    begin
    Result:= BadTurn;
@@ -212,7 +215,6 @@
    end;
 Time:= 0;
 Power:= 1;
-ExplR:= 0;
 t:= sqrt(sqr(Targ.X - Me.X) + sqr(Targ.Y - Me.Y)) * 2;
 Vx:= (Targ.X - Me.X) / t;
 Vy:= (Targ.Y - Me.Y) / t;
@@ -230,4 +232,18 @@
                                          else Result:= Low(integer)
 end;
 
+function TestBaseballBat(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
+begin
+ExplR:= 0;
+if abs(Me.X - Targ.X) + abs(Me.Y - Targ.Y) >= 25 then
+   begin
+   Result:= BadTurn;
+   exit
+   end;
+Time:= 0;
+Power:= 1;
+Angle:= DxDy2AttackAngle(Sign(Targ.X - Me.X), 1);
+Result:= RateShove(Me, round(Me.X) + 10 * Sign(Targ.X - Me.X), round(Me.Y), 15, 30)
+end;
+
 end.
--- a/hedgewars/uAIMisc.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uAIMisc.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -55,6 +55,7 @@
 function DxDy2AttackAngle(const _dY, _dX: Extended): integer;
 function TestColl(x, y, r: integer): boolean;
 function RateExplosion(Me: PGear; x, y, r: integer): integer;
+function RateShove(Me: PGear; x, y, r, power: integer): integer;
 function HHGo(Gear: PGear; out GoInfo: TGoInfo): boolean;
 
 var ThinkingHH: PGear;
@@ -216,6 +217,27 @@
 Result:= Result * 1024
 end;
 
+function RateShove(Me: PGear; x, y, r, power: integer): integer;
+var i, dmg: integer;
+begin
+Result:= 0;
+for i:= 0 to Targets.Count do
+    with Targets.ar[i] do
+         begin
+         dmg:= r - Round(sqrt(sqr(Point.x - x) + sqr(Point.y - y)));
+         if dmg > 0 then
+            begin
+            if power > abs(Score) then
+               if Score > 0 then inc(Result, KillScore)
+                            else dec(Result, KillScore * 3)
+            else
+               if Score > 0 then inc(Result, power)
+                            else dec(Result, power * 3)
+            end;
+         end;
+Result:= Result * 1024
+end;
+
 function HHGo(Gear: PGear; out GoInfo: TGoInfo): boolean;
 var pX, pY: integer;
 begin
--- a/hedgewars/uConsole.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uConsole.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -281,7 +281,6 @@
 RegisterVariable('c_height', vtInteger, @cConsoleHeight );
 RegisterVariable('gmflags' , vtInteger, @GameFlags      );
 RegisterVariable('turntime', vtInteger, @cHedgehogTurnTime);
-RegisterVariable('showfps' , vtBoolean, @cShowFPS       );
 RegisterVariable('name'    , vtCommand, @chName         );
 RegisterVariable('fort'    , vtCommand, @chFort         );
 RegisterVariable('grave'   , vtCommand, @chGrave        );
--- a/hedgewars/uConsts.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uConsts.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -45,16 +45,16 @@
                    sprLag, sprArrow, sprGrenade, sprTargetP, sprUFO,
                    sprSmokeTrace, sprRopeHook, sprExplosion50, sprMineOff,
                    sprMineOn, sprCase, sprFAid, sprDynamite, sprPower,
-                   sprClusterBomb, sprClusterParticle);
+                   sprClusterBomb, sprClusterParticle, sprFlame);
      TGearType  = (gtCloud, gtAmmo_Bomb, gtHedgehog, gtAmmo_Grenade, gtHealthTag,
                    gtGrave, gtUFO, gtShotgunShot, gtActionTimer, gtPickHammer, gtRope,
                    gtSmokeTrace, gtExplosion, gtMine, gtCase, gtDEagleShot, gtDynamite,
-                   gtTeamHealthSorter, gtClusterBomb, gtCluster);
+                   gtTeamHealthSorter, gtClusterBomb, gtCluster, gtShover, gtFlame);
      TGearsType = set of TGearType;
      TSound     = (sndGrenadeImpact, sndExplosion, sndThrowPowerUp, sndThrowRelease, sndSplash,
                    sndShotgunReload, sndShotgunFire, sndGraveImpact, sndMineTick);
      TAmmoType  = (amGrenade, amClusterBomb, amBazooka, amUFO, amShotgun, amPickHammer, amSkip, amRope,
-                   amMine, amDEagle, amDynamite);
+                   amMine, amDEagle, amDynamite, amBaseballBat);
      THWFont    = (fnt16, fntBig);
      THHFont    = record
                   Handle: PTTF_Font;
@@ -131,6 +131,7 @@
       gstHHJumping      = $00000100;
       gsttmpFlag        = $00000200;
       gstHHThinking     = $00000800;
+      gstNoDamage       = $00001000;
 
       gtsStartGame      = 1;
       gtsSmoothWindCh   = 2;
@@ -145,7 +146,7 @@
       gm_HJump  = $00000080;
       gm_Destroy= $00000100;
 
-      cMaxSlotIndex       = 6;
+      cMaxSlotIndex       = 7;
       cMaxSlotAmmoIndex   = 1;
 
       ammoprop_Timerable    = $00000001;
@@ -169,7 +170,7 @@
       posCaseAmmo    = $00000001;
       posCaseHealth  = $00000002;
 
-      NoPointX = Low(Integer); // константа для TargetPoint, показывает, что цель не указана
+      NoPointX = Low(Integer);
 
       cHHFileName   = 'Hedgehog';
       cCHFileName   = 'Crosshair';
@@ -249,7 +250,8 @@
                      (FileName:  'dynamite'; Path: ptGraphics; Width:  32; Height: 32; hasAlpha: false),// sprDynamite
                      (FileName:     'Power'; Path: ptGraphics; Width:  32; Height: 32; hasAlpha:  true),// sprPower
                      (FileName:    'ClBomb'; Path: ptGraphics; Width:  16; Height: 16; hasAlpha: false),// sprClusterBomb
-                     (FileName:'ClParticle'; Path: ptGraphics; Width:  16; Height: 16; hasAlpha: false) // sprClusterParticle
+                     (FileName:'ClParticle'; Path: ptGraphics; Width:  16; Height: 16; hasAlpha: false),// sprClusterParticle
+                     (FileName:     'Flame'; Path: ptGraphics; Width:  16; Height: 16; hasAlpha: false) // sprFlame
                      );
       Soundz: array[TSound] of record
                                        FileName: String[31];
@@ -319,7 +321,7 @@
                                           NumPerTurn: 0;
                                           Timer: 0;
                                           AmmoType: amPickHammer);
-                                   Slot: 4;
+                                   Slot: 5;
                                    TimeAfterTurn: 0),
                                   (Name: 'Skip turn';
                                    Ammo: (Propz: 0;
@@ -327,7 +329,7 @@
                                           NumPerTurn: 0;
                                           Timer: 0;
                                           AmmoType: amSkip);
-                                   Slot: 6;
+                                   Slot: 7;
                                    TimeAfterTurn: 0),
                                   (Name: 'Rope';
                                    Ammo: (Propz: ammoprop_ForwMsgs or ammoprop_AttackInFall or ammoprop_AttackInJump;
@@ -335,7 +337,7 @@
                                           NumPerTurn: 0;
                                           Timer: 0;
                                           AmmoType: amRope);
-                                   Slot: 5;
+                                   Slot: 6;
                                    TimeAfterTurn: 0),
                                   (Name: 'Mine';
                                    Ammo: (Propz: ammoprop_NoCrosshair;
@@ -343,8 +345,8 @@
                                           NumPerTurn: 0;
                                           Timer: 0;
                                           AmmoType: amMine);
-                                   Slot: 3;
-                                   TimeAfterTurn: 3000),
+                                   Slot: 4;
+                                   TimeAfterTurn: 5000),
                                   (Name: 'Desert Eagle';
                                    Ammo: (Propz: 0;
                                           Count: 3;
@@ -359,6 +361,14 @@
                                            NumPerTurn: 0;
                                            Timer: 0;
                                            AmmoType: amDynamite);
+                                    Slot: 4;
+                                    TimeAfterTurn: 5000),
+                                   (Name: 'Baseball Bat';
+                                    Ammo: (Propz: 0;
+                                           Count: 1;
+                                           NumPerTurn: 0;
+                                           Timer: 0;
+                                           AmmoType: amBaseballBat);
                                     Slot: 3;
                                     TimeAfterTurn: 5000));
 
--- a/hedgewars/uGame.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uGame.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -54,7 +54,7 @@
    end
    else begin
    ProcessKbd;
-   NetGetNextCmd; // на случай, если что-то сказано
+   NetGetNextCmd; // its for the case when receiving /say message
    if SendEmptyPacketTicks >= cSendEmptyPacketTime then
       begin
       SendIPC('+');
@@ -92,7 +92,7 @@
        end;
 if not CurrentTeam.ExtDriven then isInLag:= false;
 
-MoveWorld
+MoveCamera
 end;
 
 end.
--- a/hedgewars/uGears.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uGears.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -90,6 +90,7 @@
 procedure DeleteGear(Gear: PGear); forward;
 procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord); forward;
 procedure AmmoShove(Ammo: PGear; Damage, Power: integer); forward;
+procedure AmmoFlameWork(Ammo: PGear); forward;
 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: integer): PGear; forward;
 procedure SpawnBoxOfSmth; forward;
 procedure AfterAttack; forward;
@@ -118,11 +119,15 @@
                                                                doStepDynamite,
                                                                doStepTeamHealthSorter,
                                                                doStepBomb,
-                                                               doStepCluster
+                                                               doStepCluster,
+                                                               doStepShover,
+                                                               doStepFlame
                                                                );
 
 function AddGear(X, Y: integer; Kind: TGearType; State: Cardinal; const dX: real=0.0; dY: real=0.0; Timer: LongWord=0): PGear;
+const Counter: Longword = 0;
 begin
+inc(Counter);
 {$IFDEF DEBUGFILE}AddFileLog('AddGear: ('+inttostr(x)+','+inttostr(y)+')');{$ENDIF}
 New(Result);
 {$IFDEF DEBUGFILE}AddFileLog('AddGear: handle = '+inttostr(integer(Result)));{$ENDIF}
@@ -218,6 +223,13 @@
                 Result.Friction:= 0.995;
                 Result.Timer:= Timer
                 end;
+       gtFlame: begin
+                Result.Angle:= Counter mod 64;
+                Result.Radius:= 1;
+                Result.Health:= 2;
+                Result.dY:= (getrandom - 0.8) * 0.03;
+                Result.dX:= (getrandom - 0.5) * 0.4
+                end;
      end;
 if GearsList = nil then GearsList:= Result
                    else begin
@@ -509,6 +521,7 @@
                          end;
      gtClusterBomb: DrawSprite(sprClusterBomb, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
          gtCluster: DrawSprite(sprClusterParticle, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, 0, Surface);
+           gtFlame: DrawSprite(sprFlame, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy,(GameTicks div 128 + Gear.Angle) mod 8, Surface);
               end;
       Gear:= Gear.NextGear
       end;
@@ -559,7 +572,8 @@
          case Gear.Kind of
               gtHedgehog,
                   gtMine,
-                  gtCase: begin
+                  gtCase,
+                 gtFlame: begin
                           if (Mask and EXPLNoDamage) = 0 then inc(Gear.Damage, dmg);
                           if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear.Kind <> gtHedgehog) then
                              begin
@@ -582,14 +596,14 @@
 procedure AmmoShove(Ammo: PGear; Damage, Power: integer);
 var t: PGearArray;
     i: integer;
-    Gear: PGear;
 begin
 t:= CheckGearsCollision(Ammo);
 i:= t.Count;
 while i > 0 do
     begin
     dec(i);
-    case t.ar[i].Kind of
+    if (t.ar[i].State and gstNoDamage) = 0 then
+       case t.ar[i].Kind of
            gtHedgehog,
                gtMine,
                gtCase: begin
@@ -601,14 +615,7 @@
                        FollowGear:= t.ar[i]
                        end;
            end
-    end;
-Gear:= GearsList;
-while Gear <> nil do
-      begin
-      if Round(sqrt(sqr(Gear.X - Ammo.X) + sqr(Gear.Y - Ammo.Y))) < 50 then // why 50?
-         Gear.Active:= true;
-      Gear:= Gear.NextGear
-      end
+    end
 end;
 
 procedure AssignHHCoords;
@@ -642,6 +649,26 @@
 Result:= nil
 end;
 
+procedure AmmoFlameWork(Ammo: PGear);
+var t: PGear;
+begin
+t:= GearsList;
+while t <> nil do
+      begin
+      if (t.Kind = gtHedgehog) and (t.Y < Ammo.Y) then
+         if sqr(Ammo.X - t.X) + sqr(Ammo.Y - t.Y - cHHRadius) * 2 <= sqr(4) then
+            begin
+            inc(t.Damage, 5);
+            t.dX:= t.dX + (t.X - Ammo.X) * 0.02;
+            t.dY:= - 0.25;
+            t.Active:= true;
+            DeleteCI(t);
+            FollowGear:= t
+            end;
+      t:= t.NextGear
+      end;
+end;
+
 function CheckGearsNear(mX, mY: integer; Kind: TGearsType; rX, rY: integer): PGear;
 var t: PGear;
 begin
--- a/hedgewars/uMisc.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uMisc.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -93,7 +93,7 @@
 
     InitStepsFlags: Longword = 0;
 
-    AttackBar     : integer = 0; // 0 - отсутствует, 1 - внизу, 2 - как в wwp
+    AttackBar: integer = 0; // 0 - none, 1 - just bar at the right-down corner, 2 - like in WWP
 
 function Sign(r: real): integer;
 function Min(a, b: integer): integer;
--- a/hedgewars/uTeams.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uTeams.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -264,10 +264,8 @@
           if (Ammo[Slot, ami].Count = 0)
              and (Ammo[Slot, ami + 1].Count > 0) then b:= true
                                                  else inc(ami);
-      if b then // есть пустое место
-         begin
+      if b then // there's a free item in ammo stack
          Ammo[Slot, ami]:= Ammo[Slot, ami + 1]
-         end
     until not b;
 end;
 
--- a/hedgewars/uWorld.pas	Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uWorld.pas	Sun Jul 16 08:13:51 2006 +0000
@@ -41,7 +41,7 @@
 procedure InitWorld;
 procedure DrawWorld(Lag: integer; Surface: PSDL_Surface);
 procedure AddCaption(s: shortstring; Color, Group: LongWord);
-procedure MoveWorld;
+procedure MoveCamera;
 
 {$IFDEF COUNTTICKS}
 var cntTicks: LongWord;
@@ -160,6 +160,7 @@
 for i:= -1 to cWaterSprCount do DrawSprite(sprWater,  i * 256  + ((WorldDx + (RealTicks shr 6)      ) and $FF), cWaterLine + WorldDy     , 0, Surface);
 {$WARNINGS ON}
 
+// Turn time
 if TurnTimeLeft <> 0 then
    begin
    i:= Succ(Pred(TurnTimeLeft) div 1000);
@@ -175,6 +176,8 @@
          end;
    DrawSprite(sprFrame, t - 4, cScreenHeight - 48, 0, Surface);
    end;
+
+// Attack bar
 if CurrentTeam <> nil then
    case AttackBar of
         1: begin
@@ -321,7 +324,7 @@
 Captions[m].EndTime:= RealTicks + 1200
 end;
 
-procedure MoveWorld;
+procedure MoveCamera;
 const PrevSentPointTime: LongWord = 0;
 var s: string[9];
 begin