- New test map
- Baseball bat
- Flames
- Bots can use baseball bat
- Many small changes
Binary file hedgewars/Data/Graphics/Flame.png has changed
Binary file hedgewars/Data/Maps/test3/map.png has changed
--- a/hedgewars/GSHandlers.inc Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/GSHandlers.inc Sun Jul 16 08:13:51 2006 +0000
@@ -1,6 +1,6 @@
(*
* Hedgewars, a worms-like game
- * Copyright (c) 2004, 2005 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004, 2005, 2006 Andrey Korotaev <unC0Rr@gmail.com>
*
* Distributed under the terms of the BSD-modified licence:
*
@@ -138,7 +138,7 @@
gtClusterBomb: begin
doMakeExplosion(round(Gear.X), round(Gear.Y), 30, EXPLAutoSound);
for i:= 0 to 4 do
- AddGear(round(Gear.X), round(Gear.Y), gtCluster, 0, (getrandom - 0.5)*0.2, (getrandom - 2) * 0.2);
+ AddGear(round(Gear.X), round(Gear.Y), gtCluster, 0, (getrandom - 0.5)*0.2, (getrandom - 3) * 0.08);
end
end;
DeleteGear(Gear);
@@ -670,6 +670,7 @@
////////////////////////////////////////////////////////////////////////////////
procedure doStepCase(Gear: PGear);
+var i: integer;
begin
if (Gear.Message and gm_Destroy) > 0 then
begin
@@ -677,6 +678,15 @@
exit
end;
+if Gear.Damage > 0 then
+ begin
+ DeleteGear(Gear);
+ doMakeExplosion(round(Gear.X), round(Gear.Y), 25, EXPLAutoSound);
+ for i:= 0 to 63 do
+ AddGear(round(Gear.X), round(Gear.Y), gtFlame, 0);
+ exit
+ end;
+
if (Gear.dY <> 0) or (not TestCollisionYwithGear(Gear, 1)) then
begin
AllInactive:= false;
@@ -694,12 +704,6 @@
if (Gear.CollIndex = High(Longword)) and (Gear.dY = 0) then AddGearCI(Gear)
else if (Gear.CollIndex < High(Longword)) and (Gear.dY <> 0) then DeleteCI(Gear);
-
-if Gear.Damage > 0 then
- begin
- DeleteGear(Gear);
- doMakeExplosion(round(Gear.X), round(Gear.Y), 20, EXPLAutoSound)
- end
end;
////////////////////////////////////////////////////////////////////////////////
@@ -758,3 +762,46 @@
Gear.doStep:= doStepTeamHealthSorterWork
end;
+////////////////////////////////////////////////////////////////////////////////
+procedure doStepShover(Gear: PGear);
+var HHGear: PGear;
+begin
+HHGear:= PHedgehog(Gear.Hedgehog)^.Gear;
+HHGear.State:= HHGear.State or gstNoDamage;
+AmmoShove(Gear, 30, 115);
+HHGear.State:= HHGear.State and not gstNoDamage;
+DeleteGear(Gear)
+end;
+
+////////////////////////////////////////////////////////////////////////////////
+procedure doStepFlame(Gear: PGear);
+begin
+AllInactive:= false;
+if not TestCollisionYwithGear(Gear, 1) then
+ begin
+ Gear.dX:= Gear.dX + cWindSpeed;
+ Gear.dY:= Gear.dY + cGravity;
+ if abs(Gear.dX) > 0.12 then Gear.dX:= Gear.dX * 0.5;
+ if Gear.dY > 0.12 then Gear.dY:= Gear.dY * 0.995;
+ Gear.X:= Gear.X + Gear.dX;
+ Gear.Y:= Gear.Y + Gear.dY;
+ if Gear.Y > 1023 then
+ begin
+ DeleteGear(Gear);
+ exit
+ end
+ end else begin
+ if Gear.Timer > 0 then dec(Gear.Timer)
+ else begin
+ doMakeExplosion(round(Gear.X), round(Gear.Y), 2, 0);
+ dec(Gear.Health);
+ Gear.Timer:= 1250 - Gear.Angle * 12
+ end
+ end;
+
+if (((GameTicks div 8) mod 64) = Gear.Angle) then
+ AmmoFlameWork(Gear);
+
+if Gear.Health = 0 then
+ DeleteGear(Gear)
+end;
--- a/hedgewars/HHHandlers.inc Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/HHHandlers.inc Sun Jul 16 08:13:51 2006 +0000
@@ -74,6 +74,7 @@
FollowGear:= AddGear(round(X), round(Y), gtDEagleShot, 0, xx * 0.5, yy * 0.5);
end;
amDynamite: AddGear(round(X) + Sign(dX) * 7, round(Y), gtDynamite, 0, Sign(dX) * 0.035, 0, 5000);
+ amBaseballBat: AddGear(round(X) + Sign(dX) * 10, round(Y), gtShover, 0, xx * 0.5, yy * 0.5).Radius:= 15
end;
Power:= 0;
if CurAmmoGear <> nil then
--- a/hedgewars/hwengine.dpr Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/hwengine.dpr Sun Jul 16 08:13:51 2006 +0000
@@ -48,14 +48,14 @@
uSound in 'uSound.pas',
uRandom in 'uRandom.pas',
uAI in 'uAI.pas',
+ uAIMisc in 'uAIMisc.pas',
+ uAIAmmoTests in 'uAIAmmoTests.pas',
+ uAIActions in 'uAIActions.pas',
uCollisions in 'uCollisions.pas',
uLand in 'uLand.pas',
uLandTemplates in 'uLandTemplates.pas',
uLandObjects in 'uLandObjects.pas',
- uLandGraphics in 'uLandGraphics.pas',
- uAIMisc in 'uAIMisc.pas',
- uAIAmmoTests in 'uAIAmmoTests.pas',
- uAIActions in 'uAIActions.pas';
+ uLandGraphics in 'uLandGraphics.pas';
{$INCLUDE options.inc}
@@ -67,7 +67,7 @@
procedure OnDestroy; forward;
////////////////////////////////
-procedure DoTimer(Lag: integer); // - обработка таймера
+procedure DoTimer(Lag: integer);
var s: string;
begin
case GameState of
@@ -118,7 +118,7 @@
end;
////////////////////
-procedure OnDestroy; // - очищаем память
+procedure OnDestroy;
begin
{$IFDEF DEBUGFILE}AddFileLog('Freeing resources...');{$ENDIF}
if isSoundEnabled then ReleaseSound;
--- a/hedgewars/uAIAmmoTests.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uAIAmmoTests.pas Sun Jul 16 08:13:51 2006 +0000
@@ -39,6 +39,7 @@
function TestGrenade(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
function TestShotgun(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
function TestDesertEagle(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
+function TestBaseballBat(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
type TAmmoTestProc = function (Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
const AmmoTests: array[TAmmoType] of TAmmoTestProc =
@@ -53,7 +54,8 @@
{amRope} nil,
{amMine} nil,
{amDEagle} TestDesertEagle,
-{amDynamite} nil
+{amDynamite} nil,
+{amBaseballBat} TestBaseballBat
);
implementation
@@ -175,6 +177,7 @@
function TestShotgun(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
var Vx, Vy, x, y: real;
begin
+ExplR:= 0;
if Metric(round(Me.X), round(Me.Y), Targ.X, Targ.Y) < 80 then
begin
Result:= BadTurn;
@@ -182,7 +185,6 @@
end;
Time:= 0;
Power:= 1;
-ExplR:= 0;
Vx:= (Targ.X - Me.X)/1024;
Vy:= (Targ.Y - Me.Y)/1024;
x:= Me.X;
@@ -193,7 +195,7 @@
y:= y + vY;
if TestColl(round(x), round(y), 2) then
begin
- Result:= RateExplosion(Me, round(x), round(y), 25) * 2;
+ Result:= RateShove(Me, round(x), round(y), 25, 25) * 1024;
if Result = 0 then Result:= - Metric(Targ.X, Targ.Y, round(x), round(y)) div 64;
exit
end
@@ -205,6 +207,7 @@
var Vx, Vy, x, y, t: real;
d: Longword;
begin
+ExplR:= 0;
if abs(Me.X - Targ.X) + abs(Me.Y - Targ.Y) < 80 then
begin
Result:= BadTurn;
@@ -212,7 +215,6 @@
end;
Time:= 0;
Power:= 1;
-ExplR:= 0;
t:= sqrt(sqr(Targ.X - Me.X) + sqr(Targ.Y - Me.Y)) * 2;
Vx:= (Targ.X - Me.X) / t;
Vy:= (Targ.Y - Me.Y) / t;
@@ -230,4 +232,18 @@
else Result:= Low(integer)
end;
+function TestBaseballBat(Me: PGear; Targ: TPoint; out Time: Longword; out Angle, Power: integer; out ExplX, ExplY, ExplR: integer): integer;
+begin
+ExplR:= 0;
+if abs(Me.X - Targ.X) + abs(Me.Y - Targ.Y) >= 25 then
+ begin
+ Result:= BadTurn;
+ exit
+ end;
+Time:= 0;
+Power:= 1;
+Angle:= DxDy2AttackAngle(Sign(Targ.X - Me.X), 1);
+Result:= RateShove(Me, round(Me.X) + 10 * Sign(Targ.X - Me.X), round(Me.Y), 15, 30)
+end;
+
end.
--- a/hedgewars/uAIMisc.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uAIMisc.pas Sun Jul 16 08:13:51 2006 +0000
@@ -55,6 +55,7 @@
function DxDy2AttackAngle(const _dY, _dX: Extended): integer;
function TestColl(x, y, r: integer): boolean;
function RateExplosion(Me: PGear; x, y, r: integer): integer;
+function RateShove(Me: PGear; x, y, r, power: integer): integer;
function HHGo(Gear: PGear; out GoInfo: TGoInfo): boolean;
var ThinkingHH: PGear;
@@ -216,6 +217,27 @@
Result:= Result * 1024
end;
+function RateShove(Me: PGear; x, y, r, power: integer): integer;
+var i, dmg: integer;
+begin
+Result:= 0;
+for i:= 0 to Targets.Count do
+ with Targets.ar[i] do
+ begin
+ dmg:= r - Round(sqrt(sqr(Point.x - x) + sqr(Point.y - y)));
+ if dmg > 0 then
+ begin
+ if power > abs(Score) then
+ if Score > 0 then inc(Result, KillScore)
+ else dec(Result, KillScore * 3)
+ else
+ if Score > 0 then inc(Result, power)
+ else dec(Result, power * 3)
+ end;
+ end;
+Result:= Result * 1024
+end;
+
function HHGo(Gear: PGear; out GoInfo: TGoInfo): boolean;
var pX, pY: integer;
begin
--- a/hedgewars/uConsole.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uConsole.pas Sun Jul 16 08:13:51 2006 +0000
@@ -281,7 +281,6 @@
RegisterVariable('c_height', vtInteger, @cConsoleHeight );
RegisterVariable('gmflags' , vtInteger, @GameFlags );
RegisterVariable('turntime', vtInteger, @cHedgehogTurnTime);
-RegisterVariable('showfps' , vtBoolean, @cShowFPS );
RegisterVariable('name' , vtCommand, @chName );
RegisterVariable('fort' , vtCommand, @chFort );
RegisterVariable('grave' , vtCommand, @chGrave );
--- a/hedgewars/uConsts.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uConsts.pas Sun Jul 16 08:13:51 2006 +0000
@@ -45,16 +45,16 @@
sprLag, sprArrow, sprGrenade, sprTargetP, sprUFO,
sprSmokeTrace, sprRopeHook, sprExplosion50, sprMineOff,
sprMineOn, sprCase, sprFAid, sprDynamite, sprPower,
- sprClusterBomb, sprClusterParticle);
+ sprClusterBomb, sprClusterParticle, sprFlame);
TGearType = (gtCloud, gtAmmo_Bomb, gtHedgehog, gtAmmo_Grenade, gtHealthTag,
gtGrave, gtUFO, gtShotgunShot, gtActionTimer, gtPickHammer, gtRope,
gtSmokeTrace, gtExplosion, gtMine, gtCase, gtDEagleShot, gtDynamite,
- gtTeamHealthSorter, gtClusterBomb, gtCluster);
+ gtTeamHealthSorter, gtClusterBomb, gtCluster, gtShover, gtFlame);
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);
+ amMine, amDEagle, amDynamite, amBaseballBat);
THWFont = (fnt16, fntBig);
THHFont = record
Handle: PTTF_Font;
@@ -131,6 +131,7 @@
gstHHJumping = $00000100;
gsttmpFlag = $00000200;
gstHHThinking = $00000800;
+ gstNoDamage = $00001000;
gtsStartGame = 1;
gtsSmoothWindCh = 2;
@@ -145,7 +146,7 @@
gm_HJump = $00000080;
gm_Destroy= $00000100;
- cMaxSlotIndex = 6;
+ cMaxSlotIndex = 7;
cMaxSlotAmmoIndex = 1;
ammoprop_Timerable = $00000001;
@@ -169,7 +170,7 @@
posCaseAmmo = $00000001;
posCaseHealth = $00000002;
- NoPointX = Low(Integer); // константа для TargetPoint, показывает, что цель не указана
+ NoPointX = Low(Integer);
cHHFileName = 'Hedgehog';
cCHFileName = 'Crosshair';
@@ -249,7 +250,8 @@
(FileName: 'dynamite'; Path: ptGraphics; Width: 32; Height: 32; hasAlpha: false),// sprDynamite
(FileName: 'Power'; Path: ptGraphics; Width: 32; Height: 32; hasAlpha: true),// sprPower
(FileName: 'ClBomb'; Path: ptGraphics; Width: 16; Height: 16; hasAlpha: false),// sprClusterBomb
- (FileName:'ClParticle'; Path: ptGraphics; Width: 16; Height: 16; hasAlpha: false) // sprClusterParticle
+ (FileName:'ClParticle'; Path: ptGraphics; Width: 16; Height: 16; hasAlpha: false),// sprClusterParticle
+ (FileName: 'Flame'; Path: ptGraphics; Width: 16; Height: 16; hasAlpha: false) // sprFlame
);
Soundz: array[TSound] of record
FileName: String[31];
@@ -319,7 +321,7 @@
NumPerTurn: 0;
Timer: 0;
AmmoType: amPickHammer);
- Slot: 4;
+ Slot: 5;
TimeAfterTurn: 0),
(Name: 'Skip turn';
Ammo: (Propz: 0;
@@ -327,7 +329,7 @@
NumPerTurn: 0;
Timer: 0;
AmmoType: amSkip);
- Slot: 6;
+ Slot: 7;
TimeAfterTurn: 0),
(Name: 'Rope';
Ammo: (Propz: ammoprop_ForwMsgs or ammoprop_AttackInFall or ammoprop_AttackInJump;
@@ -335,7 +337,7 @@
NumPerTurn: 0;
Timer: 0;
AmmoType: amRope);
- Slot: 5;
+ Slot: 6;
TimeAfterTurn: 0),
(Name: 'Mine';
Ammo: (Propz: ammoprop_NoCrosshair;
@@ -343,8 +345,8 @@
NumPerTurn: 0;
Timer: 0;
AmmoType: amMine);
- Slot: 3;
- TimeAfterTurn: 3000),
+ Slot: 4;
+ TimeAfterTurn: 5000),
(Name: 'Desert Eagle';
Ammo: (Propz: 0;
Count: 3;
@@ -359,6 +361,14 @@
NumPerTurn: 0;
Timer: 0;
AmmoType: amDynamite);
+ Slot: 4;
+ TimeAfterTurn: 5000),
+ (Name: 'Baseball Bat';
+ Ammo: (Propz: 0;
+ Count: 1;
+ NumPerTurn: 0;
+ Timer: 0;
+ AmmoType: amBaseballBat);
Slot: 3;
TimeAfterTurn: 5000));
--- a/hedgewars/uGame.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uGame.pas Sun Jul 16 08:13:51 2006 +0000
@@ -54,7 +54,7 @@
end
else begin
ProcessKbd;
- NetGetNextCmd; // на случай, если что-то сказано
+ NetGetNextCmd; // its for the case when receiving /say message
if SendEmptyPacketTicks >= cSendEmptyPacketTime then
begin
SendIPC('+');
@@ -92,7 +92,7 @@
end;
if not CurrentTeam.ExtDriven then isInLag:= false;
-MoveWorld
+MoveCamera
end;
end.
--- a/hedgewars/uGears.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uGears.pas Sun Jul 16 08:13:51 2006 +0000
@@ -90,6 +90,7 @@
procedure DeleteGear(Gear: PGear); forward;
procedure doMakeExplosion(X, Y, Radius: integer; Mask: LongWord); forward;
procedure AmmoShove(Ammo: PGear; Damage, Power: integer); forward;
+procedure AmmoFlameWork(Ammo: PGear); forward;
function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: integer): PGear; forward;
procedure SpawnBoxOfSmth; forward;
procedure AfterAttack; forward;
@@ -118,11 +119,15 @@
doStepDynamite,
doStepTeamHealthSorter,
doStepBomb,
- doStepCluster
+ doStepCluster,
+ doStepShover,
+ doStepFlame
);
function AddGear(X, Y: integer; Kind: TGearType; State: Cardinal; const dX: real=0.0; dY: real=0.0; Timer: LongWord=0): PGear;
+const Counter: Longword = 0;
begin
+inc(Counter);
{$IFDEF DEBUGFILE}AddFileLog('AddGear: ('+inttostr(x)+','+inttostr(y)+')');{$ENDIF}
New(Result);
{$IFDEF DEBUGFILE}AddFileLog('AddGear: handle = '+inttostr(integer(Result)));{$ENDIF}
@@ -218,6 +223,13 @@
Result.Friction:= 0.995;
Result.Timer:= Timer
end;
+ gtFlame: begin
+ Result.Angle:= Counter mod 64;
+ Result.Radius:= 1;
+ Result.Health:= 2;
+ Result.dY:= (getrandom - 0.8) * 0.03;
+ Result.dX:= (getrandom - 0.5) * 0.4
+ end;
end;
if GearsList = nil then GearsList:= Result
else begin
@@ -509,6 +521,7 @@
end;
gtClusterBomb: DrawSprite(sprClusterBomb, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
gtCluster: DrawSprite(sprClusterParticle, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, 0, Surface);
+ gtFlame: DrawSprite(sprFlame, Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy,(GameTicks div 128 + Gear.Angle) mod 8, Surface);
end;
Gear:= Gear.NextGear
end;
@@ -559,7 +572,8 @@
case Gear.Kind of
gtHedgehog,
gtMine,
- gtCase: begin
+ gtCase,
+ gtFlame: begin
if (Mask and EXPLNoDamage) = 0 then inc(Gear.Damage, dmg);
if ((Mask and EXPLDoNotTouchHH) = 0) or (Gear.Kind <> gtHedgehog) then
begin
@@ -582,14 +596,14 @@
procedure AmmoShove(Ammo: PGear; Damage, Power: integer);
var t: PGearArray;
i: integer;
- Gear: PGear;
begin
t:= CheckGearsCollision(Ammo);
i:= t.Count;
while i > 0 do
begin
dec(i);
- case t.ar[i].Kind of
+ if (t.ar[i].State and gstNoDamage) = 0 then
+ case t.ar[i].Kind of
gtHedgehog,
gtMine,
gtCase: begin
@@ -601,14 +615,7 @@
FollowGear:= t.ar[i]
end;
end
- end;
-Gear:= GearsList;
-while Gear <> nil do
- begin
- if Round(sqrt(sqr(Gear.X - Ammo.X) + sqr(Gear.Y - Ammo.Y))) < 50 then // why 50?
- Gear.Active:= true;
- Gear:= Gear.NextGear
- end
+ end
end;
procedure AssignHHCoords;
@@ -642,6 +649,26 @@
Result:= nil
end;
+procedure AmmoFlameWork(Ammo: PGear);
+var t: PGear;
+begin
+t:= GearsList;
+while t <> nil do
+ begin
+ if (t.Kind = gtHedgehog) and (t.Y < Ammo.Y) then
+ if sqr(Ammo.X - t.X) + sqr(Ammo.Y - t.Y - cHHRadius) * 2 <= sqr(4) then
+ begin
+ inc(t.Damage, 5);
+ t.dX:= t.dX + (t.X - Ammo.X) * 0.02;
+ t.dY:= - 0.25;
+ t.Active:= true;
+ DeleteCI(t);
+ FollowGear:= t
+ end;
+ t:= t.NextGear
+ end;
+end;
+
function CheckGearsNear(mX, mY: integer; Kind: TGearsType; rX, rY: integer): PGear;
var t: PGear;
begin
--- a/hedgewars/uMisc.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uMisc.pas Sun Jul 16 08:13:51 2006 +0000
@@ -93,7 +93,7 @@
InitStepsFlags: Longword = 0;
- AttackBar : integer = 0; // 0 - отсутствует, 1 - внизу, 2 - как в wwp
+ AttackBar: integer = 0; // 0 - none, 1 - just bar at the right-down corner, 2 - like in WWP
function Sign(r: real): integer;
function Min(a, b: integer): integer;
--- a/hedgewars/uTeams.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uTeams.pas Sun Jul 16 08:13:51 2006 +0000
@@ -264,10 +264,8 @@
if (Ammo[Slot, ami].Count = 0)
and (Ammo[Slot, ami + 1].Count > 0) then b:= true
else inc(ami);
- if b then // есть пустое место
- begin
+ if b then // there's a free item in ammo stack
Ammo[Slot, ami]:= Ammo[Slot, ami + 1]
- end
until not b;
end;
--- a/hedgewars/uWorld.pas Wed Jul 12 15:39:58 2006 +0000
+++ b/hedgewars/uWorld.pas Sun Jul 16 08:13:51 2006 +0000
@@ -41,7 +41,7 @@
procedure InitWorld;
procedure DrawWorld(Lag: integer; Surface: PSDL_Surface);
procedure AddCaption(s: shortstring; Color, Group: LongWord);
-procedure MoveWorld;
+procedure MoveCamera;
{$IFDEF COUNTTICKS}
var cntTicks: LongWord;
@@ -160,6 +160,7 @@
for i:= -1 to cWaterSprCount do DrawSprite(sprWater, i * 256 + ((WorldDx + (RealTicks shr 6) ) and $FF), cWaterLine + WorldDy , 0, Surface);
{$WARNINGS ON}
+// Turn time
if TurnTimeLeft <> 0 then
begin
i:= Succ(Pred(TurnTimeLeft) div 1000);
@@ -175,6 +176,8 @@
end;
DrawSprite(sprFrame, t - 4, cScreenHeight - 48, 0, Surface);
end;
+
+// Attack bar
if CurrentTeam <> nil then
case AttackBar of
1: begin
@@ -321,7 +324,7 @@
Captions[m].EndTime:= RealTicks + 1200
end;
-procedure MoveWorld;
+procedure MoveCamera;
const PrevSentPointTime: LongWord = 0;
var s: string[9];
begin