# HG changeset patch # User sheepluva # Date 1421501185 -3600 # Node ID 7e8ea160152f32f2f5db74ecca81f77b173875cb # Parent 418058ce8ffe1bbf47d63f21579a2975d58b3c7c# Parent acbf69e2e5cfe711acccdd7db42a646b5baee87f merge diff -r 418058ce8ffe -r 7e8ea160152f QTfrontend/weapons.h --- a/QTfrontend/weapons.h Fri Jan 16 15:47:34 2015 +0100 +++ b/QTfrontend/weapons.h Sat Jan 17 14:26:25 2015 +0100 @@ -22,60 +22,60 @@ //structure------------------------------------------------------------------| -#define AMMOLINE_DEFAULT_QT "93919294221991210322351110012000000002111001010111110001" -#define AMMOLINE_DEFAULT_PROB "04050405416006555465544647765766666661555101011154111111" -#define AMMOLINE_DEFAULT_DELAY "00000000000002055000000400070040000000002200000006000200" -#define AMMOLINE_DEFAULT_CRATE "13111103121111111231141111111111111112111111011111111111" +#define AMMOLINE_DEFAULT_QT "939192942219912103223511100120000000021110010101111100010" +#define AMMOLINE_DEFAULT_PROB "040504054160065554655446477657666666615551010111541111111" +#define AMMOLINE_DEFAULT_DELAY "000000000000020550000004000700400000000022000000060002000" +#define AMMOLINE_DEFAULT_CRATE "131111031211111112311411111111111111121111110111111111111" -#define AMMOLINE_CRAZY_QT "99999999999999999929999999999999992999999999099999929991" -#define AMMOLINE_CRAZY_PROB "11111101111111111111111111111111111111111111011111111111" -#define AMMOLINE_CRAZY_DELAY "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_CRAZY_CRATE "13111103121111111231141111111111111112111101011111111111" +#define AMMOLINE_CRAZY_QT "999999999999999999299999999999999929999999990999999299919" +#define AMMOLINE_CRAZY_PROB "111111011111111111111111111111111111111111110111111111111" +#define AMMOLINE_CRAZY_DELAY "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_CRAZY_CRATE "131111031211111112311411111111111111121111010111111111111" -#define AMMOLINE_PROMODE_QT "90900090000000000000090000000000000000000000000000000000" -#define AMMOLINE_PROMODE_PROB "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_PROMODE_DELAY "00000000000002055000000400070040000000002000000000000200" -#define AMMOLINE_PROMODE_CRATE "11111101111111111111111111111111111111111001011111111111" +#define AMMOLINE_PROMODE_QT "909000900000000000000900000000000000000000000000000000000" +#define AMMOLINE_PROMODE_PROB "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_PROMODE_DELAY "000000000000020550000004000700400000000020000000000002000" +#define AMMOLINE_PROMODE_CRATE "111111011111111111111111111111111111111110010111111111111" -#define AMMOLINE_SHOPPA_QT "00000099000000000000000000000000000000000000000000000000" -#define AMMOLINE_SHOPPA_PROB "44444100442444022101121212224220000000020004000100110010" -#define AMMOLINE_SHOPPA_DELAY "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_SHOPPA_CRATE "11111101111111111111111111111111111111111011011111111110" +#define AMMOLINE_SHOPPA_QT "000000990000000000000000000000000000000000000000000000000" +#define AMMOLINE_SHOPPA_PROB "444441004424440221011212122242200000000200040001001100101" +#define AMMOLINE_SHOPPA_DELAY "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_SHOPPA_CRATE "111111011111111111111111111111111111111110110111111111101" -#define AMMOLINE_CLEAN_QT "10100090000100000110000000000000000000000000000010000000" -#define AMMOLINE_CLEAN_PROB "04050405416006555465544647765766666661555101011154111211" -#define AMMOLINE_CLEAN_DELAY "00000000000000000000000000000000000000000000000000000200" -#define AMMOLINE_CLEAN_CRATE "13111103121111111231141111111111111112111111011111111111" +#define AMMOLINE_CLEAN_QT "101000900001000001100000000000000000000000000000100000000" +#define AMMOLINE_CLEAN_PROB "040504054160065554655446477657666666615551010111541112111" +#define AMMOLINE_CLEAN_DELAY "000000000000000000000000000000000000000000000000000002000" +#define AMMOLINE_CLEAN_CRATE "131111031211111112311411111111111111121111110111111111111" -#define AMMOLINE_MINES_QT "00000099000900000003000000000000000000000000000000000000" -#define AMMOLINE_MINES_PROB "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_MINES_DELAY "00000000000002055000000400070040000000002000000006000200" -#define AMMOLINE_MINES_CRATE "11111101111111111111111111111111111111111111011111111111" +#define AMMOLINE_MINES_QT "000000990009000000030000000000000000000000000000000000000" +#define AMMOLINE_MINES_PROB "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_MINES_DELAY "000000000000020550000004000700400000000020000000060002000" +#define AMMOLINE_MINES_CRATE "111111011111111111111111111111111111111111110111111111111" -#define AMMOLINE_PORTALS_QT "90000090020000000021000000000000001100000900000000000000" -#define AMMOLINE_PORTALS_PROB "04050405416006555465544647765766666661555101011154111211" -#define AMMOLINE_PORTALS_DELAY "00000000000002055000000400070040000000002000000006000200" -#define AMMOLINE_PORTALS_CRATE "13111103121111111231141111111111111112111111011111111111" +#define AMMOLINE_PORTALS_QT "900000900200000000210000000000000011000009000000000000000" +#define AMMOLINE_PORTALS_PROB "040504054160065554655446477657666666615551010111541112111" +#define AMMOLINE_PORTALS_DELAY "000000000000020550000004000700400000000020000000060002000" +#define AMMOLINE_PORTALS_CRATE "131111031211111112311411111111111111121111110111111111111" -#define AMMOLINE_ONEEVERY_QT "11111191111111111111111111111111111111111111111111111111" -#define AMMOLINE_ONEEVERY_PROB "11111101111111111111111111111111111111111111111111111111" -#define AMMOLINE_ONEEVERY_DELAY "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_ONEEVERY_CRATE "11111101111111111111111111111111111111111111111111111111" +#define AMMOLINE_ONEEVERY_QT "111111911111111111111111111111111111111111111111111111111" +#define AMMOLINE_ONEEVERY_PROB "111111011111111111111111111111111111111111111111111111111" +#define AMMOLINE_ONEEVERY_DELAY "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_ONEEVERY_CRATE "111111011111111111111111111111111111111111111111111111111" -#define AMMOLINE_HIGHLANDER_QT "11111191111111111111019111111111100101111101111011001101" -#define AMMOLINE_HIGHLANDER_PROB "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_HIGHLANDER_DELAY "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_HIGHLANDER_CRATE "00000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_HIGHLANDER_QT "111111911111111111110191111111111001011111011110110011010" +#define AMMOLINE_HIGHLANDER_PROB "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_HIGHLANDER_DELAY "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_HIGHLANDER_CRATE "000000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_CONSTRUCTION_QT "11000190000000100100000000000000000000000000000000000000" -#define AMMOLINE_CONSTRUCTION_PROB "11111101111111111111111111111111111111111111111111111111" -#define AMMOLINE_CONSTRUCTION_DELAY "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_CONSTRUCTION_CRATE "11111101111111111111111111111111111111111111111111111111" +#define AMMOLINE_CONSTRUCTION_QT "110001900000001001000000000000000000000000000000000000000" +#define AMMOLINE_CONSTRUCTION_PROB "111111011111111111111111111111111111111111111111111111110" +#define AMMOLINE_CONSTRUCTION_DELAY "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_CONSTRUCTION_CRATE "111111011111111111111111111111111111111111111111111111110" -#define AMMOLINE_SHOPPAPRO_QT "00000099000000000000000000000000000000000000000000000000" -#define AMMOLINE_SHOPPAPRO_PROB "44444000440444000000000000004000000000000000000000000000" -#define AMMOLINE_SHOPPAPRO_DELAY "00000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_SHOPPAPRO_CRATE "11111101111111111111111111111111111111111011011111111211" +#define AMMOLINE_SHOPPAPRO_QT "000000990000000000000000000000000000000000000000000000000" +#define AMMOLINE_SHOPPAPRO_PROB "444440004404440000000000000040000000000000000000000000000" +#define AMMOLINE_SHOPPAPRO_DELAY "000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_SHOPPAPRO_CRATE "111111011111111111111111111111111111111110110111111112110" //When adding new weapons also insert one element in cDefaultAmmos list (hwconsts.cpp.in) diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uAIAmmoTests.pas --- a/hedgewars/uAIAmmoTests.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uAIAmmoTests.pas Sat Jan 17 14:26:25 2015 +0100 @@ -122,7 +122,8 @@ (proc: nil; flags: 0), // amLandGun (proc: nil; flags: 0), // amIceGun (proc: nil; flags: 0), // amKnife - (proc: nil; flags: 0) // amGirder + (proc: nil; flags: 0), // amRubber + (proc: nil; flags: 0) // amAirMine ); implementation diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uConsts.pas Sat Jan 17 14:26:25 2015 +0100 @@ -231,6 +231,7 @@ gstInvisible = $00200000; gstSubmersible = $00400000; gstFrozen = $00800000; + gstNoGravity = $01000000; // gear messages gmLeft = $00000001; diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uGears.pas --- a/hedgewars/uGears.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uGears.pas Sat Jan 17 14:26:25 2015 +0100 @@ -991,7 +991,8 @@ @doStepIceGun, @doStepAddAmmo, @doStepGenericFaller, - @doStepKnife); + @doStepKnife, + @doStepAirMine); begin doStepHandlers:= handlers; diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uGearsHandlersMess.pas Sat Jan 17 14:26:25 2015 +0100 @@ -57,6 +57,7 @@ procedure doStepBlowTorchWork(Gear: PGear); procedure doStepBlowTorch(Gear: PGear); procedure doStepMine(Gear: PGear); +procedure doStepAirMine(Gear: PGear); procedure doStepSMine(Gear: PGear); procedure doStepDynamite(Gear: PGear); procedure doStepRollingBarrel(Gear: PGear); @@ -446,7 +447,8 @@ if isFalling then begin - Gear^.dY := Gear^.dY + cGravity; + if Gear^.State and gstNoGravity = 0 then + Gear^.dY := Gear^.dY + cGravity; if (GameFlags and gfMoreWind) <> 0 then Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density end; @@ -1661,6 +1663,7 @@ Gear^.doStep := @doStepBlowTorchWork end; + //////////////////////////////////////////////////////////////////////////////// procedure doStepMine(Gear: PGear); var vg: PVisualGear; @@ -1749,6 +1752,109 @@ Gear^.State := Gear^.State or gsttmpFlag; end; +(* +Just keeping track for my own benefit. +Every second, locate new target. Clear if target radius has been set to 0 or no target in range. +Every... 16 milliseconds? Update vector to target. +*) + +procedure doStepAirMine(Gear: PGear); +var i,t,targDist,tmpDist: LongWord; + targ, tmpG: PGear; + trackSpeed, tX, tY: hwFloat; +begin + if Gear^.dX.QWordValue > Gear^.Pos then + dec(Gear^.dX.QWordValue,Gear^.Pos) + else Gear^.dX:= _0; + if Gear^.dY.QWordValue > Gear^.Pos then + dec(Gear^.dY.QWordValue,Gear^.Pos) + else Gear^.dY:= _0; + doStepFallingGear(Gear); + if (Gear^.Angle = 0) or (Gear^.Hedgehog = nil) or (Gear^.Hedgehog^.Gear = nil) then + begin + Gear^.Hedgehog:= nil; + targ:= nil; + end + else if Gear^.Hedgehog <> nil then + targ:= Gear^.Hedgehog^.Gear; + // todo, allow not finding new target, set timeout on target retention + if (Gear^.State and gsttmpFlag <> 0) and (Gear^.Angle > 0) and ((GameTicks and $FF) = 17) then // recheck hunted hog + begin + if targ <> nil then + targDist:= Distance(Gear^.X-targ^.X,Gear^.Y-targ^.Y).Round + else targDist:= 0; + for t:= 0 to Pred(TeamsCount) do + with TeamsArray[t]^ do + for i:= 0 to cMaxHHIndex do + if Hedgehogs[i].Gear <> nil then + begin + tmpG:= Hedgehogs[i].Gear; + tX:=Gear^.X-tmpG^.X; + tY:=Gear^.Y-tmpG^.Y; + if (Gear^.Angle = $FFFFFFFF) or + ((tX.Round+tY.Round < Gear^.Angle) and + (hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Angle))) then + begin + if targ <> nil then tmpDist:= Distance(tX,tY).Round; + if (targ = nil) or (tmpDist < targDist) then + begin + if targ = nil then targDist:= Distance(tX,tY).Round + else targDist:= tmpDist; + Gear^.Hedgehog:= @Hedgehogs[i]; + targ:= tmpG; + end + end + end + end; + if targ <> nil then + begin + trackSpeed.QWordValue:= Gear^.Power; + if (Gear^.X < targ^.X) and (Gear^.dX < _0_1) then + Gear^.dX:= Gear^.dX+trackSpeed + else if (Gear^.X > targ^.X) and (Gear^.dX > -_0_1) then + Gear^.dX:= Gear^.dX-trackSpeed; + if (Gear^.Y < targ^.Y) and (Gear^.dY < _0_1) then + Gear^.dY:= Gear^.dY+trackSpeed + else if (Gear^.Y > targ^.Y) and (Gear^.dY > -_0_1) then + Gear^.dY:= Gear^.dY-trackSpeed; + end; + + if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then + if ((Gear^.State and gstAttacking) = 0) then + begin + if ((GameTicks and $1F) = 0) then + if targ <> nil then + begin + tX:=Gear^.X-targ^.X; + tY:=Gear^.Y-targ^.Y; + if (tX.Round+tY.Round < Gear^.Karma) and + (hwRound(hwSqr(tX) + hwSqr(tY)) < sqr(Gear^.Karma)) then + Gear^.State := Gear^.State or gstAttacking + end + else if (Gear^.Angle > 0) and (CheckGearNear(Gear, gtHedgehog, Gear^.Karma, Gear^.Karma) <> nil) then + Gear^.State := Gear^.State or gstAttacking + end + else // gstAttacking <> 0 + begin + AllInactive := false; + if (Gear^.Timer and $FF) = 0 then + PlaySound(sndMineTick); + if Gear^.Timer = 0 then + begin + Gear^.Hedgehog:= CurrentHedgehog; + doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Karma, Gear^.Hedgehog, EXPLAutoSound); + DeleteGear(Gear); + exit + end; + dec(Gear^.Timer); + end + else // gsttmpFlag = 0 + if (TurnTimeLeft = 0) + or ((GameFlags and gfInfAttack <> 0) and (GameTicks > Gear^.FlightTime)) + or (CurrentHedgehog^.Gear = nil) then + Gear^.State := Gear^.State or gsttmpFlag; +end; + //////////////////////////////////////////////////////////////////////////////// procedure doStepSMine(Gear: PGear); var land: Word; diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uGearsHedgehog.pas --- a/hedgewars/uGearsHedgehog.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uGearsHedgehog.pas Sat Jan 17 14:26:25 2015 +0100 @@ -290,6 +290,7 @@ case CurAmmoType of amGrenade: newGear:= AddGear(hwRound(lx), hwRound(ly), gtGrenade, 0, newDx, newDy, CurWeapon^.Timer); + amAirMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtAirMine, 0, newDx, newDy, 0); amMolotov: newGear:= AddGear(hwRound(lx), hwRound(ly), gtMolotov, 0, newDx, newDy, 0); amClusterBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtClusterBomb, 0, newDx, newDy, CurWeapon^.Timer); amGasBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtGasBomb, 0, newDx, newDy, CurWeapon^.Timer); @@ -425,7 +426,8 @@ amBazooka, amSnowball, amBee, amSMine, amMortar, amWatermelon, - amHellishBomb, amDrill: FollowGear:= newGear; + amHellishBomb, amDrill, + amAirMine: FollowGear:= newGear; amShotgun, amPickHammer, amRope, amDEagle, @@ -443,9 +445,10 @@ amTardis, amPiano, amIceGun, amRubber: CurAmmoGear:= newGear; end; - if CurAmmoType = amCake then FollowGear:= newGear; + if CurAmmoType = amCake then FollowGear:= newGear; + if CurAmmoType = amAirMine then newGear^.Hedgehog:= nil; - if ((CurAmmoType = amMine) or (CurAmmoType = amSMine)) and (GameFlags and gfInfAttack <> 0) then + if ((CurAmmoType = amMine) or (CurAmmoType = amSMine) or (CurAmmoType = amAirMine)) and (GameFlags and gfInfAttack <> 0) then newGear^.FlightTime:= GameTicks + 1000 else if CurAmmoType = amDrill then newGear^.FlightTime:= GameTicks + 250; diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uGearsList.pas --- a/hedgewars/uGearsList.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uGearsList.pas Sat Jan 17 14:26:25 2015 +0100 @@ -103,6 +103,7 @@ (* gtAddAmmo *) , amNothing (* gtGenericFaller *) , amNothing (* gtKnife *) , amKnife +(* gtAirMine *) , amAirMine ); @@ -359,6 +360,21 @@ gear^.Timer:= cMinesTime end end; + gtAirMine: begin + gear^.ImpactSound:= sndDenied; + gear^.nImpactSounds:= 1; + gear^.Health:= 30; + gear^.State:= gear^.State or gstMoving or gstNoGravity; + gear^.Radius:= 3; + gear^.Elasticity:= _0_55; + gear^.Friction:= _0_995; + gear^.Density:= _1; + gear^.Angle:= 125; // Radius at which air bombs will start "seeking". $FFFFFFFF = unlimited. check is skipped. + gear^.Power:= 536871; // hwFloat converted. 1/4 g default. defines the "seek" speed when a gear is in range. + gear^.Pos:= 134217; // air friction. slows it down when not hitting stuff + gear^.Karma:= 30; // damage + gear^.Timer:= 500; + end; gtSMine: begin gear^.Health:= 10; gear^.State:= gear^.State or gstMoving; diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uGearsRender.pas Sat Jan 17 14:26:25 2015 +0100 @@ -684,6 +684,7 @@ amHellishBomb: DrawSpriteRotated(sprHandHellish, hx, hy, sign, aangle); amGasBomb: DrawSpriteRotated(sprHandCheese, hx, hy, sign, aangle); amMine: DrawSpriteRotated(sprHandMine, hx, hy, sign, aangle); + amAirMine: DrawSpriteRotated(sprHandMine, hx, hy, sign, aangle); amSMine: DrawSpriteRotated(sprHandSMine, hx, hy, sign, aangle); amKnife: DrawSpriteRotatedF(sprHandKnife, hx, hy, 0, sign, aangle); amSeduction: begin @@ -1119,6 +1120,7 @@ DrawSpriteRotated(sprMineOn, x, y, 0, Gear^.DirAngle) else DrawSpriteRotated(sprMineDead, x, y, 0, Gear^.DirAngle); end; + gtAirMine: DrawSpriteRotated(sprMineOff, x, y, 0, 0); gtSMine: if (((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)) and (Gear^.Health <> 0) then DrawSpriteRotated(sprSMineOff, x, y, 0, Gear^.DirAngle) diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uGearsUtils.pas Sat Jan 17 14:26:25 2015 +0100 @@ -127,6 +127,7 @@ gtClusterBomb, // gtCluster, too game breaking I think gtSMine, + gtAirMine, gtCase, gtTarget, gtFlame, diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uTypes.pas Sat Jan 17 14:26:25 2015 +0100 @@ -104,7 +104,7 @@ gtEgg, gtPortal, gtPiano, gtGasBomb, gtSineGunShot, gtFlamethrower, // 50 gtSMine, gtPoisonCloud, gtHammer, gtHammerHit, gtResurrector, // 55 gtNapalmBomb, gtSnowball, gtFlake, {gtStructure,} gtLandGun, gtTardis, // 61 - gtIceGun, gtAddAmmo, gtGenericFaller, gtKnife); // 65 + gtIceGun, gtAddAmmo, gtGenericFaller, gtKnife, gtAirMine); // 66 // Gears that are _only_ of visual nature (e.g. background stuff, visual effects, speechbubbles, etc.) TVisualGearType = (vgtFlake, vgtCloud, vgtExplPart, vgtExplPart2, vgtFire, @@ -154,7 +154,8 @@ amRCPlane, amLowGravity, amExtraDamage, amInvulnerable, amExtraTime, // 35 amLaserSight, amVampiric, amSniperRifle, amJetpack, amMolotov, amBirdy, amPortalGun, // 42 amPiano, amGasBomb, amSineGun, amFlamethrower, amSMine, amHammer, // 48 - amResurrector, amDrillStrike, amSnowball, amTardis, {amStructure,} amLandGun, amIceGun, amKnife, amRubber); // 56 + amResurrector, amDrillStrike, amSnowball, amTardis, {amStructure,} amLandGun, // 53 + amIceGun, amKnife, amRubber, amAirMine); // 57 // Different kind of crates that e.g. hedgehogs can pick up TCrateType = (HealthCrate, AmmoCrate, UtilityCrate); @@ -445,7 +446,7 @@ sidMolotov, sidBirdy, sidPortalGun, sidPiano, sidGasBomb, sidSineGun, sidFlamethrower,sidSMine, sidHammer, sidResurrector, sidDrillStrike, sidSnowball, sidNothing, sidTardis, - {sidStructure,} sidLandGun, sidIceGun, sidKnife, sidRubber); + {sidStructure,} sidLandGun, sidIceGun, sidKnife, sidRubber, sidAirMine); TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused, sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync, diff -r 418058ce8ffe -r 7e8ea160152f hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Fri Jan 16 15:47:34 2015 +0100 +++ b/hedgewars/uVariables.pas Sat Jan 17 14:26:25 2015 +0100 @@ -2300,6 +2300,31 @@ PosCount: 4; PosSprite: sprAmRubber; ejectX: 0; + ejectY: 0), +// Air Mine + (NameId: sidAirMine; + NameTex: nil; + Probability: 100; + NumberInCase: 1; + Ammo: (Propz: ammoprop_Power or + ammoprop_AltUse or + ammoprop_NeedUpDown; + Count: 2; + NumPerTurn: 0; + Timer: 0; + Pos: 0; + AmmoType: amAirMine; + AttackVoice: sndLaugh; + Bounciness: 1000); + Slot: 5; + TimeAfterTurn: 5000; + minAngle: 0; + maxAngle: 0; + isDamaging: true; + SkipTurns: 0; + PosCount: 1; + PosSprite: sprWater; + ejectX: 0; ejectY: 0) ); diff -r 418058ce8ffe -r 7e8ea160152f share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed diff -r 418058ce8ffe -r 7e8ea160152f share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png has changed diff -r 418058ce8ffe -r 7e8ea160152f share/hedgewars/Data/Locale/en.txt --- a/share/hedgewars/Data/Locale/en.txt Fri Jan 16 15:47:34 2015 +0100 +++ b/share/hedgewars/Data/Locale/en.txt Sat Jan 17 14:26:25 2015 +0100 @@ -59,6 +59,7 @@ 00:55=Freezer 00:56=Cleaver 00:57=Rubber +00:58=Air Mine 01:00=Let's fight! 01:01=Round draw