# HG changeset patch # User smaxx # Date 1280792000 -7200 # Node ID f8778904600d5479fb3329f16e61b2664b321b5b # Parent de20260318339a940c7ad94c28304f46e25f4582 Engine: * Added modifications to Limburger, Poison Cloud and Sticky Mine diff -r de2026031833 -r f8778904600d hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Tue Aug 03 00:36:36 2010 +0200 +++ b/hedgewars/GSHandlers.inc Tue Aug 03 01:33:20 2010 +0200 @@ -1441,31 +1441,15 @@ end; //////////////////////////////////////////////////////////////////////////////// -procedure doStepSMine(Gear: PGear); +procedure doStepSMine(Gear: PGear); forward; +procedure doStepSMineSticked(Gear: PGear); begin - if (Gear^.State and gstMoving) <> 0 then + if (hwAbs(Gear^.dX) > _0) or (hwAbs(Gear^.dY) > _0) then // moving - "unstick" (better solution?) begin - if ((Gear^.State and gstCollision) <> 0) and (Gear^.dX < _0_2) and (Gear^.dY < _0_2) then - begin - Gear^.dX := _0; - Gear^.dY := _0 - // TODO: calc attach dir - end - else - CalcRotationDirAngle(Gear); - - DeleteCI(Gear); - doStepFallingGear(Gear); - if (Gear^.State and gstMoving) = 0 then - AddGearCI(Gear); - AllInactive := false - end - else - begin - if ((GameTicks and $3F) = 25) then - doStepFallingGear(Gear); + Gear^.doStep:= @doStepSMine; + Gear^.doStep(Gear); + exit; end; - if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then if ((Gear^.State and gstAttacking) = 0) then begin @@ -1489,6 +1473,27 @@ if TurnTimeLeft = 0 then Gear^.State := Gear^.State or gsttmpFlag; end; +procedure doStepSMine(Gear: PGear); +begin + if ((Gear^.State and gstCollision) <> 0) and (Gear^.dX < _0_2) and (Gear^.dY < _0_2) then + begin + Gear^.dX:= _0; + Gear^.dY:= _0; + Gear^.doStep:= @doStepSMineSticked; + Gear^.doStep(Gear); + exit + end; + if (Gear^.State and gstMoving) <> 0 then + begin + DeleteCI(Gear); + doStepFallingGear(Gear); + if (Gear^.State and gstMoving) = 0 then + AddGearCI(Gear); + end; + CalcRotationDirAngle(Gear); + AllInactive := false +end; + //////////////////////////////////////////////////////////////////////////////// procedure doStepDynamite(Gear: PGear); begin @@ -3879,9 +3884,9 @@ dec(Gear^.Timer); Gear^.X:= Gear^.X + Gear^.dX; Gear^.Y:= Gear^.Y + Gear^.dY; - Gear^.dX := Gear^.dX + cWindSpeed / 2; + Gear^.dX := Gear^.dX + cWindSpeed / 4; Gear^.dY := Gear^.dY + cGravity / 100; if (GameTicks mod 250) = 0 then - doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLDontDraw or EXPLNoGfx or EXPLNoDamage or EXPLDoNotTouchAny or EXPLPoisoned); + doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 20, EXPLDontDraw or EXPLNoGfx or EXPLNoDamage or EXPLDoNotTouchAny or EXPLPoisoned); AllInactive:= false; end; \ No newline at end of file diff -r de2026031833 -r f8778904600d hedgewars/GearDrawing.inc --- a/hedgewars/GearDrawing.inc Tue Aug 03 00:36:36 2010 +0200 +++ b/hedgewars/GearDrawing.inc Tue Aug 03 01:33:20 2010 +0200 @@ -801,14 +801,13 @@ DrawRotatedTextureF(SpritesData[sprPiano].Texture, 1, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 128, 128, 0); end; gtPoisonCloud: begin - Tint($00, $FF, $40, $80); - if Gear^.Timer < 1000 then - i:= Gear^.Timer - else if Gear^.Timer > 4000 then - i:= 5000 - Gear^.Timer + if Gear^.Timer < 1020 then + Tint($C0, $C0, $00, Gear^.Timer div 8) + else if Gear^.Timer > 3980 then + Tint($C0, $C0, $00, (5000 - Gear^.Timer) div 8) else - i:= 1000; - DrawRotatedTextureF(SpritesData[sprSmokeWhite].texture, i / 250, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 22, 22, (RealTicks shr 36 + Gear^.UID * 100) mod 360); + Tint($C0, $C0, $00, $C0); + DrawRotatedTextureF(SpritesData[sprSmokeWhite].texture, 3, 0, 0, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, 1, 22, 22, (RealTicks shr 36 + Gear^.UID * 100) mod 360); Tint($FF, $FF, $FF, $FF) end; end; diff -r de2026031833 -r f8778904600d hedgewars/uGears.pas --- a/hedgewars/uGears.pas Tue Aug 03 00:36:36 2010 +0200 +++ b/hedgewars/uGears.pas Tue Aug 03 01:33:20 2010 +0200 @@ -520,6 +520,7 @@ end; gtPoisonCloud: begin gear^.Timer:= 5000; + gear^.dY:= int2hwfloat((-4 + getRandom(8))) / 1000; end; end; InsertGearToList(gear);