# HG changeset patch # User nemo # Date 1349717266 14400 # Node ID 2013733f9ca90e3254ab04b4b7bc1d3dbe0a36c3 # Parent c374746bb56e2dcb4063152bd1693ff9cb92cd2b A bit more on the knife. Also add missing files to CMakeLists diff -r c374746bb56e -r 2013733f9ca9 QTfrontend/hwconsts.h --- a/QTfrontend/hwconsts.h Sun Oct 07 16:44:16 2012 -0400 +++ b/QTfrontend/hwconsts.h Mon Oct 08 13:27:46 2012 -0400 @@ -63,40 +63,40 @@ #define HEDGEHOGS_PER_TEAM 8 -#define AMMOLINE_DEFAULT_QT "9391929422199121032235111001201000000211110101011111011" -#define AMMOLINE_DEFAULT_PROB "0405040541600655546554464776576666666155510101115411011" -#define AMMOLINE_DEFAULT_DELAY "0000000000000205500000040007004000000000220000000600000" -#define AMMOLINE_DEFAULT_CRATE "1311110312111111123114111111111111111211111101111111010" +#define AMMOLINE_DEFAULT_QT "93919294221991210322351110012010000002111101010111110111" +#define AMMOLINE_DEFAULT_PROB "04050405416006555465544647765766666661555101011154110111" +#define AMMOLINE_DEFAULT_DELAY "00000000000002055000000400070040000000002200000006000000" +#define AMMOLINE_DEFAULT_CRATE "13111103121111111231141111111111111112111111011111110101" -#define AMMOLINE_CRAZY_QT "9999999999999999992999999999999999299999999909999992099" -#define AMMOLINE_CRAZY_PROB "1111110111111111111111111111111111111111111101111111011" -#define AMMOLINE_CRAZY_DELAY "0000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_CRAZY_CRATE "1311110312111111123114111111111111111211110101111111011" +#define AMMOLINE_CRAZY_QT "99999999999999999929999999999999992999999999099999920999" +#define AMMOLINE_CRAZY_PROB "11111101111111111111111111111111111111111111011111110111" +#define AMMOLINE_CRAZY_DELAY "00000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_CRAZY_CRATE "13111103121111111231141111111111111112111101011111110111" -#define AMMOLINE_PROMODE_QT "9090009000000000000009000000000000000000000000000000000" -#define AMMOLINE_PROMODE_PROB "0000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_PROMODE_DELAY "0000000000000205500000040007004000000000200000000000000" -#define AMMOLINE_PROMODE_CRATE "1111111111111111111111111111111111111111100101111111011" +#define AMMOLINE_PROMODE_QT "90900090000000000000090000000000000000000000000000000001" +#define AMMOLINE_PROMODE_PROB "00000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_PROMODE_DELAY "00000000000002055000000400070040000000002000000000000009" +#define AMMOLINE_PROMODE_CRATE "11111111111111111111111111111111111111111001011111110111" -#define AMMOLINE_SHOPPA_QT "0000009900000000000000000000000000000000000000000000000" -#define AMMOLINE_SHOPPA_PROB "4444410044244402210112121222422000000002000400010011000" -#define AMMOLINE_SHOPPA_DELAY "0000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_SHOPPA_CRATE "1111111111111111111111111111111111111111101101111111001" +#define AMMOLINE_SHOPPA_QT "00000099000000000000000000000000000000000000000000000000" +#define AMMOLINE_SHOPPA_PROB "44444100442444022101121212224220000000020004000100110000" +#define AMMOLINE_SHOPPA_DELAY "00000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_SHOPPA_CRATE "11111111111111111111111111111111111111111011011111110011" -#define AMMOLINE_CLEAN_QT "1010009000010000011000000000000000000000000000001000000" -#define AMMOLINE_CLEAN_PROB "0405040541600655546554464776576666666155510101115411011" -#define AMMOLINE_CLEAN_DELAY "0000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_CLEAN_CRATE "1311110312111111123114111111111111111211111101111111011" +#define AMMOLINE_CLEAN_QT "10100090000100000110000000000000000000000000000010000000" +#define AMMOLINE_CLEAN_PROB "04050405416006555465544647765766666661555101011154110111" +#define AMMOLINE_CLEAN_DELAY "00000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_CLEAN_CRATE "13111103121111111231141111111111111112111111011111110111" -#define AMMOLINE_MINES_QT "0000009900090000000300000000000000000000000000000000000" -#define AMMOLINE_MINES_PROB "0000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_MINES_DELAY "0000000000000205500000040007004000000000200000000600000" -#define AMMOLINE_MINES_CRATE "1111111111111111111111111111111111111111111101111111011" +#define AMMOLINE_MINES_QT "00000099000900000003000000000000000000000000000000000000" +#define AMMOLINE_MINES_PROB "00000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_MINES_DELAY "00000000000002055000000400070040000000002000000006000000" +#define AMMOLINE_MINES_CRATE "11111111111111111111111111111111111111111111011111110111" -#define AMMOLINE_PORTALS_QT "9000009002000000002100000000000000110000090000000000000" -#define AMMOLINE_PORTALS_PROB "0405040541600655546554464776576666666155510101115411011" -#define AMMOLINE_PORTALS_DELAY "0000000000000205500000040007004000000000200000000600000" -#define AMMOLINE_PORTALS_CRATE "1311110312111111123114111111111111111211111101111111011" +#define AMMOLINE_PORTALS_QT "90000090020000000021000000000000001100000900000000000000" +#define AMMOLINE_PORTALS_PROB "04050405416006555465544647765766666661555101011154110110" +#define AMMOLINE_PORTALS_DELAY "00000000000002055000000400070040000000002000000006000000" +#define AMMOLINE_PORTALS_CRATE "13111103121111111231141111111111111112111111011111110111" //Different seasons; assigned to season (int) #define SEASON_NONE 0 diff -r c374746bb56e -r 2013733f9ca9 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/CMakeLists.txt Mon Oct 08 13:27:46 2012 -0400 @@ -15,10 +15,12 @@ set(engine_sources ${hwengine_project} + LuaPas.pas + PNGh.pas SDLh.pas - PNGh.pas uAI.pas uAIActions.pas + uAILandMarks.pas uAIAmmoTests.pas uAIMisc.pas uAmmos.pas @@ -29,12 +31,15 @@ uCommandHandlers.pas uConsole.pas uConsts.pas + uCursor.pas uDebug.pas uFloat.pas uGame.pas uGears.pas uGearsHandlers.pas uGearsHandlersRope.pas + uGearsHedgehog.pas + uGearsList.pas uGearsRender.pas uGearsUtils.pas uIO.pas @@ -60,6 +65,7 @@ uStore.pas uTeams.pas uTextures.pas + uTouch.pas uTypes.pas uUtils.pas uVariables.pas diff -r c374746bb56e -r 2013733f9ca9 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/GSHandlers.inc Mon Oct 08 13:27:46 2012 -0400 @@ -5196,7 +5196,7 @@ exit end; -// Search out a new target, as target seek time has expired, target is dead, target is out of range, or we didn't have a target +// Search out a new target, as target seek time has expired, target is dead, target is out of range, or we did not have a target if (HHGear = nil) or (Gear^.Timer = 0) or (((abs(HHGear^.X.Round-Gear^.X.Round) + abs(HHGear^.Y.Round-Gear^.Y.Round) + 2) > Gear^.Angle) and (Distance(HHGear^.X-Gear^.X,HHGear^.Y-Gear^.Y) > int2hwFloat(Gear^.Angle))) @@ -5244,45 +5244,87 @@ end; end; -/* Yay. More incomplete code. +//////////////////////////////////////////////////////////////////////////////// +// Make the knife initial angle based on the hog attack angle, or is that too hard? +procedure doStepKnife(Gear: PGear); +var t, ox, oy, w, h, cx, cy, tx, ty, hx, hy : LongInt; +begin + doStepFallingGear(Gear); + with Gear^ do + begin + if State and gstCollision <> 0 then + begin +(* Yay. More incomplete code. This is the set of postions for the knife. -Using FlipSurface and copyToXY the knife can be written to the Land at 32 positions. +Using FlipSurface and copyToXY the knife can be written to the LandPixels at 32 positions, and an appropriate line drawn in Land. 0deg 2,5 (x,y offset) 25,5 (wXh of clip area) -2,7 (tip x,y) +13,2 (centre of mass, relative to the clip) +-13,0 (tip relative to centre of mass) +11,0 (handle relative to centre of mass) 11.25deg 2,15 24,8 -2,22 +13,4 +-13,3 +10,-3 22.5deg 2,27 23,12 -2,38 +12,6 +-12,5 +10,-5 33.75deg 2,43 21,15 -2,57 +11,7 +-11,7 +9,-6 45deg 29,8 19,19 -29,26 +9,9 +-9,8 +8,-9 56.25deg 29,32 15,21 -29,52 +7,10 +-7,10 +7,-10 67.5deg 51,3 11,23 -51,25 +5,11 +-5,11 +5,-11 78.75deg 51,34 7,24 -51,57 */ +2,11 +-2,12 +4,-11 +*) + DeleteGear(Gear); + exit + end + else + begin + t := hwRound((dX + dY) * _10); + if not dX.isNegative then inc(Angle, t) + else dec(Angle,t); + + if Angle < -2048 then inc(Angle, 4096) + else if 2048 < Angle then dec(Angle, 4096); + DirAngle:= (Angle+2048) / 4096 * 360; + end + end; +end; diff -r c374746bb56e -r 2013733f9ca9 hedgewars/uAIAmmoTests.pas --- a/hedgewars/uAIAmmoTests.pas Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/uAIAmmoTests.pas Mon Oct 08 13:27:46 2012 -0400 @@ -117,7 +117,8 @@ (proc: nil; flags: 0), // amTardis (proc: nil; flags: 0), // amStructure (proc: nil; flags: 0), // amLandGun - (proc: nil; flags: 0) // amIceGun + (proc: nil; flags: 0), // amIceGun + (proc: nil; flags: 0) // amKnife ); const BadTurn = Low(LongInt) div 4; diff -r c374746bb56e -r 2013733f9ca9 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/uGears.pas Mon Oct 08 13:27:46 2012 -0400 @@ -1341,7 +1341,8 @@ @doStepTardis, @doStepIceGun, @doStepAddAmmo, - @doStepGenericFaller); + @doStepGenericFaller, + @doStepKnife); begin doStepHandlers:= handlers; diff -r c374746bb56e -r 2013733f9ca9 hedgewars/uGearsHedgehog.pas --- a/hedgewars/uGearsHedgehog.pas Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/uGearsHedgehog.pas Mon Oct 08 13:27:46 2012 -0400 @@ -262,6 +262,7 @@ amRope: newGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0); amMine: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000); amSMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); + amKnife: newGear:= AddGear(hwRound(lx), hwRound(ly), gtKnife, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); amDEagle: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0); amSineGun: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0); amPortalGun: begin diff -r c374746bb56e -r 2013733f9ca9 hedgewars/uGearsList.pas --- a/hedgewars/uGearsList.pas Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/uGearsList.pas Mon Oct 08 13:27:46 2012 -0400 @@ -104,14 +104,14 @@ gear^.Density:= _1; // Define ammo association, if any. gear^.AmmoType:= GearKindAmmoTypeMap[Kind]; +gear^.CollisionMask:= $FFFF; if CurrentHedgehog <> nil then begin gear^.Hedgehog:= CurrentHedgehog; if (CurrentHedgehog^.Gear <> nil) and (hwRound(CurrentHedgehog^.Gear^.X) = X) and (hwRound(CurrentHedgehog^.Gear^.Y) = Y) then - gear^.CollisionMask:= $FF7F; - end -else gear^.CollisionMask:= $FFFF; + gear^.CollisionMask:= $FF7F + end; if (Ammoz[Gear^.AmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0) then gear^.Z:= cHHZ+1 @@ -250,6 +250,7 @@ gear^.Density:= _1_6; gear^.Timer:= 500; end; + gtKnife: gear^.Radius:= 5; gtCase: begin gear^.ImpactSound:= sndGraveImpact; gear^.nImpactSounds:= 1; diff -r c374746bb56e -r 2013733f9ca9 hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/uGearsRender.pas Mon Oct 08 13:27:46 2012 -0400 @@ -628,6 +628,7 @@ amGasBomb: DrawSpriteRotated(sprHandCheese, hx, hy, sign, aangle); amMine: DrawSpriteRotated(sprHandMine, hx, hy, sign, aangle); amSMine: DrawSpriteRotated(sprHandSMine, hx, hy, sign, aangle); + amKnife: DrawSpriteRotatedF(sprHandKnife, hx, hy, 0, sign, aangle); amSeduction: begin DrawSpriteRotated(sprHandSeduction, hx, hy, sign, aangle); DrawCircle(ox, oy, 248, 4, $FF, $00, $00, $AA); @@ -988,6 +989,7 @@ else if Gear^.Health <> 0 then DrawSpriteRotated(sprSMineOn, x, y, 0, Gear^.DirAngle) else DrawSpriteRotated(sprMineDead, x, y, 0, Gear^.DirAngle); + gtKnife: DrawSpriteRotatedF(sprKnife, x, y, 0, hwSign(Gear^.dX), Gear^.DirAngle); gtCase: begin if Gear^.Timer > 1000 then diff -r c374746bb56e -r 2013733f9ca9 hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/uTypes.pas Mon Oct 08 13:27:46 2012 -0400 @@ -86,7 +86,7 @@ sprHandResurrector, sprCross, sprAirDrill, sprNapalmBomb, sprBulletHit, sprSnowball, sprHandSnowball, sprSnow, sprSDFlake, sprSDWater, sprSDCloud, sprSDSplash, sprSDDroplet, sprTardis, - sprSlider, sprBotlevels + sprSlider, sprBotlevels, sprHandKnife, sprKnife ); // Gears that interact with other Gears and/or Land @@ -102,7 +102,8 @@ gtSniperRifleShot, gtJetpack, gtMolotov, gtBirdy, // 44 gtEgg, gtPortal, gtPiano, gtGasBomb, gtSineGunShot, gtFlamethrower, // 50 gtSMine, gtPoisonCloud, gtHammer, gtHammerHit, gtResurrector, // 55 - gtNapalmBomb, gtSnowball, gtFlake, gtStructure, gtLandGun, gtTardis, gtIceGun, gtAddAmmo, gtGenericFaller); // 62 + gtNapalmBomb, gtSnowball, gtFlake, gtStructure, gtLandGun, gtTardis, // 61 + gtIceGun, gtAddAmmo, gtGenericFaller, gtKnife); // 65 // Gears that are _only_ of visual nature (e.g. background stuff, visual effects, speechbubbles, etc.) TVisualGearType = (vgtFlake, vgtCloud, vgtExplPart, vgtExplPart2, vgtFire, @@ -150,7 +151,7 @@ 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); // 54 + amResurrector, amDrillStrike, amSnowball, amTardis, amStructure, amLandGun, amIceGun, amKnife); // 54 // Different kind of crates that e.g. hedgehogs can pick up TCrateType = (HealthCrate, AmmoCrate, UtilityCrate); @@ -409,7 +410,7 @@ sidMolotov, sidBirdy, sidPortalGun, sidPiano, sidGasBomb, sidSineGun, sidFlamethrower,sidSMine, sidHammer, sidResurrector, sidDrillStrike, sidSnowball, sidNothing, sidTardis, - sidStructure, sidLandGun, sidIceGun); + sidStructure, sidLandGun, sidIceGun, sidKnife); TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused, sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync, diff -r c374746bb56e -r 2013733f9ca9 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Sun Oct 07 16:44:16 2012 -0400 +++ b/hedgewars/uVariables.pas Mon Oct 08 13:27:46 2012 -0400 @@ -661,7 +661,11 @@ (FileName: 'slider'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSlider (FileName: 'botlevels'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 22; Height: 15; imageWidth: 22; imageHeight: 15; saveSurf: true; priority: tpLow; getDimensions: false; getImageDimensions: false) // sprBotlevels + Width: 22; Height: 15; imageWidth: 22; imageHeight: 15; saveSurf: true; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprBotlevels + (FileName: 'amKnife'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandKnife + (FileName: 'knife'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 29; Height: 14; imageWidth: 64; imageHeight: 64; saveSurf: true; priority: tpLow; getDimensions: false; getImageDimensions: false) // sprKnife ); const @@ -2321,7 +2325,31 @@ PosCount: 1; PosSprite: sprWater; ejectX: 0; //20; - ejectY: -3) + ejectY: -3), +// Knife + (NameId: sidKnife; + NameTex: nil; + Probability: 100; + NumberInCase: 1; + Ammo: (Propz: ammoprop_Power or + ammoprop_NeedUpDown; //FIXME: enable multishoot at altuse, until then removed ammoprop_AltUse + Count: 1; + NumPerTurn: 3; + Timer: 0; + Pos: 0; + AmmoType: amKnife; + AttackVoice: sndNone; + Bounciness: 1000); + Slot: 6; + TimeAfterTurn: 3000; + minAngle: 0; + maxAngle: 0; + isDamaging: true; + SkipTurns: 0; + PosCount: 1; + PosSprite: sprWater; + ejectX: 0; + ejectY: 0) ); const @@ -2391,6 +2419,7 @@ (* gtIceGun *) , amIceGun (* gtAddAmmo *) , amNothing (* gtGenericFaller *) , amNothing +(* gtKnife *) , amKnife ); var diff -r c374746bb56e -r 2013733f9ca9 share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed diff -r c374746bb56e -r 2013733f9ca9 share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png has changed diff -r c374746bb56e -r 2013733f9ca9 share/hedgewars/Data/Graphics/knife.png Binary file share/hedgewars/Data/Graphics/knife.png has changed diff -r c374746bb56e -r 2013733f9ca9 share/hedgewars/Data/Locale/en.txt --- a/share/hedgewars/Data/Locale/en.txt Sun Oct 07 16:44:16 2012 -0400 +++ b/share/hedgewars/Data/Locale/en.txt Mon Oct 08 13:27:46 2012 -0400 @@ -57,6 +57,7 @@ 00:54=Structure 00:55=Land Spray 00:56=Freezer +00:57=Knife 01:00=Let's fight! 01:01=Round draw