# HG changeset patch # User unc0rr # Date 1162040164 0 # Node ID 558476056205b36529ade629c91453e5e61a0498 # Parent 44057577847505fd7e25f004bc31a1e0a9097b20 Parachute diff -r 440575778475 -r 558476056205 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Fri Oct 27 22:14:02 2006 +0000 +++ b/hedgewars/GSHandlers.inc Sat Oct 28 12:56:04 2006 +0000 @@ -876,4 +876,37 @@ DrawTunnel(HHGear.X - cHHRadius, HHGear.Y + 1, 0.5, 0.0, cHHRadius * 4, 5); end; +procedure doStepParachute(Gear: PGear); +var HHGear: PGear; +begin +HHGear:= PHedgehog(Gear.Hedgehog).Gear; +if TestCollisionYwithGear(HHGear, 1) or ((HHGear.State and gstHHDriven) = 0) then + begin + with HHGear^ do + begin + Message:= 0; + dx:= 0.0000001 * hwSign(dX); + dY:= 0; + State:= State and not (gstAttacking or gstAttacked); + State:= State or gstFalling; + end; + DeleteGear(Gear); + OnUsedAmmo(PHedgehog(HHGear.Hedgehog)^.Ammo); + ApplyAmmoChanges(PHedgehog(HHGear.Hedgehog)^); + exit + end; + +if not TestCollisionXwithGear(HHGear, hwSign(HHGear.dX)) then + HHGear.X:= HHGear.X + cWindSpeed * 200; + +if (Gear.Message and gm_Left) <> 0 then HHGear.X:= HHGear.X - cMaxWindSpeed * 40 +else if (Gear.Message and gm_Right) <> 0 then HHGear.X:= HHGear.X + cMaxWindSpeed * 40; +if (Gear.Message and gm_Up) <> 0 then HHGear.Y:= HHGear.Y - cGravity * 40 +else if (Gear.Message and gm_Down) <> 0 then HHGear.Y:= HHGear.Y + cGravity * 40; + +HHGear.Y:= HHGear.Y + cGravity * 100; + +end; + + diff -r 440575778475 -r 558476056205 hedgewars/HHHandlers.inc --- a/hedgewars/HHHandlers.inc Fri Oct 27 22:14:02 2006 +0000 +++ b/hedgewars/HHHandlers.inc Sat Oct 28 12:56:04 2006 +0000 @@ -67,6 +67,7 @@ amDynamite: AddGear(round(X) + hwSign(dX) * 7, round(Y), gtDynamite, 0, hwSign(dX) * 0.035, 0, 5000); amBaseballBat: AddGear(round(X) + hwSign(dX) * 10, round(Y), gtShover, 0, xx * 0.5, yy * 0.5).Radius:= 20; amFirePunch: CurAmmoGear:= AddGear(round(X) + hwSign(dX) * 10, round(Y), gtFirePunch, 0); + amParachute: CurAmmoGear:= AddGear(round(X), round(Y), gtParachute, 0) end; Power:= 0; if CurAmmoGear <> nil then diff -r 440575778475 -r 558476056205 hedgewars/uAIAmmoTests.pas --- a/hedgewars/uAIAmmoTests.pas Fri Oct 27 22:14:02 2006 +0000 +++ b/hedgewars/uAIAmmoTests.pas Sat Oct 28 12:56:04 2006 +0000 @@ -42,7 +42,8 @@ {amDEagle} TestDesertEagle, {amDynamite} nil, {amFirePunch} TestFirePunch, -{amBaseballBat} TestBaseballBat +{amBaseballBat} TestBaseballBat, +{amParachute} nil ); const BadTurn = Low(integer); diff -r 440575778475 -r 558476056205 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Fri Oct 27 22:14:02 2006 +0000 +++ b/hedgewars/uConsts.pas Sat Oct 28 12:56:04 2006 +0000 @@ -38,13 +38,14 @@ gtGrave, gtUFO, gtShotgunShot, gtPickHammer, gtRope, gtSmokeTrace, gtExplosion, gtMine, gtCase, gtDEagleShot, gtDynamite, gtTeamHealthSorter, gtClusterBomb, gtCluster, gtShover, gtFlame, - gtFirePunch, gtATStartGame, gtATSmoothWindCh, gtATFinishGame); + gtFirePunch, gtATStartGame, gtATSmoothWindCh, gtATFinishGame, + gtParachute); 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, amFirePunch, - amBaseballBat); + amBaseballBat, amParachute); THWFont = (fnt16, fntBig); TCapGroup = (capgrpGameState, capgrpAmmoinfo, capgrpNetSay, capgrpVolume); THHFont = record @@ -375,7 +376,15 @@ Timer: 0; AmmoType: amBaseballBat); Slot: 3; - TimeAfterTurn: 5000)); + TimeAfterTurn: 5000), + (NameId: sidParachute; + Ammo: (Propz: ammoprop_ForwMsgs or ammoprop_AttackInJump or ammoprop_AttackInFall; + Count: 2; + NumPerTurn: 0; + Timer: 0; + AmmoType: amParachute); + Slot: 6; + TimeAfterTurn: 0)); implementation diff -r 440575778475 -r 558476056205 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Fri Oct 27 22:14:02 2006 +0000 +++ b/hedgewars/uGears.pas Sat Oct 28 12:56:04 2006 +0000 @@ -111,7 +111,8 @@ doStepFirePunch, doStepActionTimer, doStepActionTimer, - doStepActionTimer + doStepActionTimer, + doStepParachute ); function AddGear(X, Y: integer; Kind: TGearType; State: Longword; const dX: Double=0.0; dY: Double=0.0; Timer: LongWord=0): PGear; diff -r 440575778475 -r 558476056205 hedgewars/uLocale.pas --- a/hedgewars/uLocale.pas Fri Oct 27 22:14:02 2006 +0000 +++ b/hedgewars/uLocale.pas Sat Oct 28 12:56:04 2006 +0000 @@ -20,7 +20,8 @@ interface type TAmmoStrId = (sidGrenade, sidClusterBomb, sidBazooka, sidUFO, sidShotgun, sidPickHammer, sidSkip, sidRope, sidMine, sidDEagle, - sidDynamite, sidBaseballBat, sidFirePunch, sidSeconds); + sidDynamite, sidBaseballBat, sidFirePunch, sidSeconds, + sidParachute); TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume); var trammo: array[TAmmoStrId] of string; trmsg: array[TMsgStrId] of string; diff -r 440575778475 -r 558476056205 share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed diff -r 440575778475 -r 558476056205 share/hedgewars/Data/Locale/en.txt --- a/share/hedgewars/Data/Locale/en.txt Fri Oct 27 22:14:02 2006 +0000 +++ b/share/hedgewars/Data/Locale/en.txt Sat Oct 28 12:56:04 2006 +0000 @@ -14,6 +14,7 @@ 00:11=BaseballBat 00:12=Fire Punch 00:13=sec +00:14=Parachute 01:00=Let's fight! 01:01=Round draw diff -r 440575778475 -r 558476056205 share/hedgewars/Data/Locale/ru.txt --- a/share/hedgewars/Data/Locale/ru.txt Fri Oct 27 22:14:02 2006 +0000 +++ b/share/hedgewars/Data/Locale/ru.txt Sat Oct 28 12:56:04 2006 +0000 @@ -14,6 +14,7 @@ 00:11=Бейсбольная бита 00:12=Огненный удар 00:13=сек +00:14=Парашют 01:00=Вперёд к победе! 01:01=Ничья