# HG changeset patch # User unc0rr # Date 1153037631 0 # Node ID 29b47731985479010d6825cc79a388c79b0fecac # Parent 66bb79dd248da63802c716c46bdfd55dfc9d5eea - New test map - Baseball bat - Flames - Bots can use baseball bat - Many small changes diff -r 66bb79dd248d -r 29b477319854 hedgewars/Data/Graphics/Flame.png Binary file hedgewars/Data/Graphics/Flame.png has changed diff -r 66bb79dd248d -r 29b477319854 hedgewars/Data/Maps/test3/map.png Binary file hedgewars/Data/Maps/test3/map.png has changed diff -r 66bb79dd248d -r 29b477319854 hedgewars/GSHandlers.inc --- 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 + * Copyright (c) 2004, 2005, 2006 Andrey Korotaev * * 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; diff -r 66bb79dd248d -r 29b477319854 hedgewars/HHHandlers.inc --- 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 diff -r 66bb79dd248d -r 29b477319854 hedgewars/hwengine.dpr --- 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; diff -r 66bb79dd248d -r 29b477319854 hedgewars/uAIAmmoTests.pas --- 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. diff -r 66bb79dd248d -r 29b477319854 hedgewars/uAIMisc.pas --- 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 diff -r 66bb79dd248d -r 29b477319854 hedgewars/uConsole.pas --- 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 ); diff -r 66bb79dd248d -r 29b477319854 hedgewars/uConsts.pas --- 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)); diff -r 66bb79dd248d -r 29b477319854 hedgewars/uGame.pas --- 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. diff -r 66bb79dd248d -r 29b477319854 hedgewars/uGears.pas --- 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 diff -r 66bb79dd248d -r 29b477319854 hedgewars/uMisc.pas --- 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; diff -r 66bb79dd248d -r 29b477319854 hedgewars/uTeams.pas --- 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; diff -r 66bb79dd248d -r 29b477319854 hedgewars/uWorld.pas --- 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