nemo's patch for girder + some fixes
authorunc0rr
Sun, 22 Mar 2009 17:41:07 +0000
changeset 1909 30fa1608b54f
parent 1908 5be17e24751a
child 1910 ae0addb05791
nemo's patch for girder + some fixes
hedgewars/GSHandlers.inc
hedgewars/uAmmos.pas
hedgewars/uConsts.pas
hedgewars/uGears.pas
share/hedgewars/Data/Graphics/Hedgehog/amGirder.png
--- a/hedgewars/GSHandlers.inc	Sun Mar 22 17:39:12 2009 +0000
+++ b/hedgewars/GSHandlers.inc	Sun Mar 22 17:41:07 2009 +0000
@@ -1414,24 +1414,35 @@
 
 procedure doStepGirder(Gear: PGear);
 var HHGear: PGear;
+    x, y, tx, ty: LongInt;
 begin
 AllInactive:= false;
 
 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear;
-if not TryPlaceOnLand(TargetPoint.X - SpritesData[sprAmGirder].Width div 2,
-                      TargetPoint.Y - SpritesData[sprAmGirder].Height div 2,
+tx:= TargetPoint.X;
+ty:= TargetPoint.Y;
+x:= hwRound(HHGear^.X);
+y:= hwRound(HHGear^.Y);
+
+// use a circle instead?
+if (abs(tx-x) > 256) or 
+   (abs(ty-y) > 256) or
+   not TryPlaceOnLand(tx - SpritesData[sprAmGirder].Width div 2,
+                      ty - SpritesData[sprAmGirder].Height div 2,
                       sprAmGirder, Gear^.State, true) then
 	begin
-	HHGear^.Message:= HHGear^.Message and not gm_Attack;
-	HHGear^.State:= HHGear^.State and not gstAttacking;
 	HHGear^.State:= HHGear^.State or gstHHChooseTarget;
 	DeleteGear(Gear);
-	isCursorVisible:= true
+    isCursorVisible:= true
 	end
 else begin
 	DeleteGear(Gear);
-	AfterAttack
-	end;
+    OnUsedAmmo(PHedgehog(HHGear^.Hedgehog)^);
+    ApplyAmmoChanges(PHedgehog(HHGear^.Hedgehog)^);
+    isCursorVisible:= false
+ 	end;
+HHGear^.State:= HHGear^.State and not (gstAttacking or gstAttacked);
+HHGear^.Message:= HHGear^.Message and not gm_Attack;
 TargetPoint.X:= NoPointX
 end;
 
--- a/hedgewars/uAmmos.pas	Sun Mar 22 17:39:12 2009 +0000
+++ b/hedgewars/uAmmos.pas	Sun Mar 22 17:41:07 2009 +0000
@@ -226,11 +226,15 @@
 procedure SwitchNotHoldedAmmo(var Hedgehog: THedgehog);
 begin
 with Hedgehog do
-     if (Ammo^[CurSlot, CurAmmo].Propz and ammoprop_DontHold) <> 0 then
+     if ((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_DontHold) <> 0) or
+        (Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber > 0) then
         begin
         CurAmmo:= 0;
         CurSlot:= 0;
-        while (CurSlot <= cMaxSlotIndex) and (Ammo^[CurSlot, CurAmmo].Count = 0) do inc(CurSlot)
+        while (CurSlot <= cMaxSlotIndex) and 
+              (Ammo^[CurSlot, CurAmmo].Count = 0) and
+              (Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber > 0)
+              do inc(CurSlot)
         end
 end;
 
--- a/hedgewars/uConsts.pas	Sun Mar 22 17:39:12 2009 +0000
+++ b/hedgewars/uConsts.pas	Sun Mar 22 17:41:07 2009 +0000
@@ -59,7 +59,7 @@
 			sprCakeWalk, sprCakeDown, sprAMAmmosBW, sprWatermelon,
 			sprEvilTrace, sprHellishBomb, sprSeduction, sprDress,
 			sprCensored, sprDrill, sprHandDrill, sprHandBallgun, sprBalls,
-			sprPlane, sprHandPlane, sprUtility, sprInvulnerable);
+			sprPlane, sprHandPlane, sprUtility, sprInvulnerable, sprGirder);
 
 	TGearType = (gtAmmo_Bomb, gtHedgehog, gtAmmo_Grenade, gtHealthTag, // 3
 			gtGrave, gtUFO, gtShotgunShot, gtPickHammer, gtRope, // 8
@@ -939,8 +939,7 @@
 			NumberInCase: 3;
 			Ammo: (Propz: ammoprop_NoCrosshair or
 							ammoprop_NeedTarget or
-							ammoprop_AttackingPut or
-							ammoprop_DontHold;
+							ammoprop_AttackingPut;
 					Count: 1;
 					NumPerTurn: 0;
 					Timer: 0;
--- a/hedgewars/uGears.pas	Sun Mar 22 17:39:12 2009 +0000
+++ b/hedgewars/uGears.pas	Sun Mar 22 17:41:07 2009 +0000
@@ -715,7 +715,6 @@
 						DrawRotated(sprShotgun, hx, hy, hwSign(Gear^.dX), aangle)
 					else
 						DrawRotated(sprHandShotgun, hx, hy, hwSign(Gear^.dX), aangle);
-					HatVisible:= true
 				end;
 			gtDEagleShot: DrawRotated(sprDEagle, hx, hy, hwSign(Gear^.dX), aangle);
 			gtBallgun: DrawRotated(sprHandBallgun, hx, hy, hwSign(Gear^.dX), aangle);
@@ -881,6 +880,7 @@
 				DrawRotated(sprHandPlane, hx, hy, hwSign(Gear^.dX), 0);
 				defaultPos:= false
 				end;
+			amGirder: DrawSprite(sprGirder, sx-256, sy-256, 0);
 		end;
 
 		case amt of
@@ -1254,6 +1254,7 @@
                          posCaseUtility: begin
                                         i:= (GameTicks shr 6) mod 70;
                                         if i > 23 then i:= 0;
+                                        i:= i mod 12;
                                         DrawSprite(sprUtility, hwRound(Gear^.X) - 24 + WorldDx, hwRound(Gear^.Y) - 24 + WorldDy, i);
                                         end;
                          end;
Binary file share/hedgewars/Data/Graphics/Hedgehog/amGirder.png has changed