--- a/hedgewars/GSHandlers.inc Thu Dec 30 20:55:22 2010 +0100
+++ b/hedgewars/GSHandlers.inc Thu Dec 30 22:20:17 2010 +0100
@@ -3564,8 +3564,7 @@
////////////////////////////////////////////////////////////////////////////////
procedure doPortalColorSwitch();
-var flags: LongWord;
- CurWeapon: PAmmo;
+var CurWeapon: PAmmo;
begin
if (CurrentHedgehog <> nil)
and (CurrentHedgehog^.Gear <> nil)
@@ -3576,11 +3575,10 @@
CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and not gmSwitch;
CurWeapon:= GetAmmoEntry(CurrentHedgehog^);
- flags := CurWeapon^.Timer and not 2;
- if (flags and 1) = 0 then
- CurWeapon^.Timer := flags or 1
+ if CurWeapon^.Pos <> 0 then
+ CurWeapon^.Pos := 0
else
- CurWeapon^.Timer := flags and not 1;
+ CurWeapon^.Pos := 1;
end;
end;
@@ -3849,8 +3847,7 @@
s: hwFloat;
procedure loadNewPortalBall(oldPortal: PGear; destroyGear: Boolean);
-var
- flags: LongWord;
+var
CurWeapon: PAmmo;
begin
if CurrentHedgehog <> nil then
@@ -3859,18 +3856,19 @@
CurWeapon:= GetAmmoEntry(CurrentHedgehog^);
if (CurAmmoType = amPortalGun) then
begin
- flags := CurWeapon^.Timer;
-
- if destroyGear xor ((oldPortal^.Tag and 2) = 0) then
- flags := flags or 1
- else
- flags := flags and not 1;
-
- CurWeapon^.Timer := flags and not 2;
+ if not destroyGear then
+ begin
+ // switch color of ball to opposite of oldPortal
+ if (oldPortal^.Tag and 2) = 0 then
+ CurWeapon^.Pos:= 1
+ else
+ CurWeapon^.Pos:= 0;
+ end;
+
// make the ball visible
+ CurWeapon^.Timer := 0;
end
end;
-
if destroyGear then oldPortal^.Timer:= 0;
end;
@@ -3955,11 +3953,8 @@
newPortal^.Elasticity.isNegative := not newPortal^.Elasticity.isNegative;
// make portal gun look unloaded
- CurWeapon^.Timer := CurWeapon^.Timer or 2;
-
- // set portal to the currently chosen color
- if ((CurWeapon^.Timer and 1) <> 0) then
- newPortal^.Tag := newPortal^.Tag or 2;
+ if (CurWeapon <> nil) and (CurAmmoType = amPortalGun) then
+ CurWeapon^.Timer := CurWeapon^.Timer or 2;
iterator := GearsList;
while iterator <> nil do
--- a/hedgewars/HHHandlers.inc Thu Dec 30 20:55:22 2010 +0100
+++ b/hedgewars/HHHandlers.inc Thu Dec 30 22:20:17 2010 +0100
@@ -223,7 +223,11 @@
amSMine: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
amDEagle: CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0);
amSineGun: CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0);
- amPortalGun: AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, 0);
+ amPortalGun: begin
+ AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6,
+ // set selected color
+ CurWeapon^.Pos);
+ end;
amSniperRifle: begin
PlaySound(sndSniperReload);
CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0);
--- a/hedgewars/uGears.pas Thu Dec 30 20:55:22 2010 +0100
+++ b/hedgewars/uGears.pas Thu Dec 30 22:20:17 2010 +0100
@@ -477,7 +477,8 @@
gear^.nImpactSounds:= 1;
gear^.AdvBounce:= 0;
gear^.Radius:= 16;
- gear^.Tag:= 0;
+ // set color
+ gear^.Tag:= 2 * gear^.Timer;
gear^.Timer:= 15000;
gear^.RenderTimer:= false;
gear^.Health:= 100;
--- a/hedgewars/uGearsRender.pas Thu Dec 30 20:55:22 2010 +0100
+++ b/hedgewars/uGearsRender.pas Thu Dec 30 22:20:17 2010 +0100
@@ -555,7 +555,7 @@
amPortalGun: if (CurWeapon^.Timer and 2) <> 0 then // Add a new Hedgehog value instead of abusing timer?
DrawRotatedF(sprPortalGun, hx, hy, 0, sign, aangle)
else
- DrawRotatedF(sprPortalGun, hx, hy, 1+(CurWeapon^.Timer and 1), sign, aangle);
+ DrawRotatedF(sprPortalGun, hx, hy, 1+CurWeapon^.Pos, sign, aangle);
amSniperRifle: DrawRotatedF(sprSniperRifle, hx, hy, 0, sign, aangle);
amBlowTorch: DrawRotated(sprHandBlowTorch, hx, hy, sign, aangle);
amCake: DrawRotated(sprHandCake, hx, hy, sign, aangle);