# HG changeset patch # User unC0Rr # Date 1290069167 -10800 # Node ID bcefeeabaa33647068a05b1b2209d7110b8ee19b # Parent fe0e3903bb9e9c76441c602b8dc0642dc760bf05 Move some stuff from uMisc to uUtils diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/CMakeLists.txt Thu Nov 18 11:32:47 2010 +0300 @@ -69,6 +69,7 @@ uStore.pas uTeams.pas uTypes.pas + uUtils.pas uVisualGears.pas uWorld.pas CCHandlers.inc diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/hwengine.pas Thu Nov 18 11:32:47 2010 +0300 @@ -31,7 +31,7 @@ uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uKeys, uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uRandom, uLandTexture, uCollisions, uMobile, - sysutils, uTypes, uVariables, uCommands; + sysutils, uTypes, uVariables, uCommands, uUtils; var isTerminated: boolean = false; alsoShutdownFrontend: boolean = false; @@ -319,6 +319,7 @@ Randomize(); // uConsts does not need initialization as they are all consts + uUtils.initModule; uMisc.initModule; uVariables.initModule; uConsole.initModule; // MUST happen after uMisc @@ -392,6 +393,7 @@ uCommands.freeModule; uConsole.freeModule; uVariables.freeModule; + uUtils.freeModule; uMisc.freeModule; // uMisc closes the debug log. end; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uAI.pas --- a/hedgewars/uAI.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uAI.pas Thu Nov 18 11:32:47 2010 +0300 @@ -31,7 +31,7 @@ implementation uses uConsts, SDLh, uAIMisc, uAIAmmoTests, uAIActions, uMisc, uAmmos, SysUtils{$IFDEF UNIX}, cthreads{$ENDIF}, uTypes, - uVariables, uCommands; + uVariables, uCommands, uUtils; var BestActions: TActions; CanUseAmmo: array [TAmmoType] of boolean; @@ -201,12 +201,12 @@ Push(0, Actions, Me^, tmp); Push(0, Actions, Me^, tmp xor 3); -if (Me^.State and gstAttacked) = 0 then maxticks:= max(0, TurnTimeLeft - 5000 - LongWord(4000 * BotLevel)) +if (Me^.State and gstAttacked) = 0 then maxticks:= Max(0, TurnTimeLeft - 5000 - LongWord(4000 * BotLevel)) else maxticks:= TurnTimeLeft; if (Me^.State and gstAttacked) = 0 then TestAmmos(Actions, Me, false); BestRate:= RatePlace(Me); -BaseRate:= max(BestRate, 0); +BaseRate:= Max(BestRate, 0); while (Stack.Count > 0) and (not StopThinking) and (GameFlags and gfArtillery = 0) do begin diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uAIActions.pas --- a/hedgewars/uAIActions.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uAIActions.pas Thu Nov 18 11:32:47 2010 +0300 @@ -62,7 +62,7 @@ procedure ProcessAction(var Actions: TActions; Me: PGear); implementation -uses uMisc, uAIMisc, uAI, uAmmos, uVariables, uCommands; +uses uMisc, uAIMisc, uAI, uAmmos, uVariables, uCommands, uUtils; const ActionIdToStr: array[0..6] of string[16] = ( {aia_none} '', @@ -95,8 +95,8 @@ else begin WriteLnToConsole('AI action: '+SpecActionIdToStr[Action.Action]); if (Action.Action = aia_WaitXL) or (Action.Action = aia_WaitXR) then - WriteLnToConsole('AI action Wait X = '+inttostr(Action.Param)+', current X = '+inttostr(hwRound(Me^.X))) - else if (Action.Action = aia_AwareExpl) then WriteLnToConsole('Aware X = ' + inttostr(Action.X) + ', Y = ' + inttostr(Action.Y)); + WriteLnToConsole('AI action Wait X = '+IntToStr(Action.Param)+', current X = '+IntToStr(hwRound(Me^.X))) + else if (Action.Action = aia_AwareExpl) then WriteLnToConsole('Aware X = ' + IntToStr(Action.X) + ', Y = ' + IntToStr(Action.Y)); end end; {$ENDIF} @@ -199,7 +199,7 @@ aim_push: s:= '+' + s; aim_release: s:= '-' + s; end - else if Param <> 0 then s:= s + ' ' + inttostr(Param); + else if Param <> 0 then s:= s + ' ' + IntToStr(Param); ParseCommand(s, true) end end; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uAIAmmoTests.pas --- a/hedgewars/uAIAmmoTests.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uAIAmmoTests.pas Thu Nov 18 11:32:47 2010 +0300 @@ -108,7 +108,7 @@ const BadTurn = Low(LongInt) div 4; implementation -uses uMisc, uAIMisc, uVariables; +uses uAIMisc, uVariables, uUtils; function Metric(x1, y1, x2, y2: LongInt): LongInt; begin @@ -539,7 +539,7 @@ or (y.Round > LongWord(LAND_HEIGHT)) or (d > 200); -if Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 3 then valueResult:= max(0, (4 - d div 50) * 7 * 1024) +if Abs(Targ.X - hwRound(x)) + Abs(Targ.Y - hwRound(y)) < 3 then valueResult:= Max(0, (4 - d div 50) * 7 * 1024) else valueResult:= BadTurn; TestDesertEagle:= valueResult end; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uAIMisc.pas --- a/hedgewars/uAIMisc.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uAIMisc.pas Thu Nov 18 11:32:47 2010 +0300 @@ -68,7 +68,7 @@ end; implementation -uses uMisc, uCollisions, uVariables; +uses uMisc, uCollisions, uVariables, uUtils; const KillScore = 200; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uAmmos.pas --- a/hedgewars/uAmmos.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uAmmos.pas Thu Nov 18 11:32:47 2010 +0300 @@ -47,7 +47,7 @@ var StoreCnt: Longword; implementation -uses uMisc, uWorld, uLocale, uMobile, uVariables, uCommands; +uses uMisc, uWorld, uLocale, uMobile, uVariables, uCommands, uUtils; type TAmmoCounts = array[TAmmoType] of Longword; var StoresList: array[0..Pred(cMaxHHs)] of PHHAmmo; @@ -326,7 +326,7 @@ if (Count <> AMMO_INFINITE) and not (Hedgehog.Team^.ExtDriven or (Hedgehog.BotLevel > 0)) then s:= s + ' (' + IntToStr(Count) + ')'; if (Propz and ammoprop_Timerable) <> 0 then - s:= s + ', ' + inttostr(Timer div 1000) + ' ' + trammo[sidSeconds]; + s:= s + ', ' + IntToStr(Timer div 1000) + ' ' + trammo[sidSeconds]; AddCaption(s, Team^.Clan^.Color, capgrpAmmoinfo); end; if (Propz and ammoprop_NeedTarget) <> 0 diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uChat.pas --- a/hedgewars/uChat.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uChat.pas Thu Nov 18 11:32:47 2010 +0300 @@ -34,7 +34,7 @@ showAll: boolean; implementation -uses uMisc, uStore, SDLh, uKeys, uTypes, uVariables, uCommands; +uses uMisc, uStore, SDLh, uKeys, uTypes, uVariables, uCommands, uUtils; const MaxStrIndex = 27; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uCommands.pas --- a/hedgewars/uCommands.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uCommands.pas Thu Nov 18 11:32:47 2010 +0300 @@ -15,9 +15,9 @@ procedure doPut(putX, putY: LongInt; fromAI: boolean); implementation -uses uMisc, uStore, Types, uConsts, uGears, uTeams, uIO, uKeys, uMobile, +uses uStore, Types, uConsts, uGears, uTeams, uIO, uKeys, uMobile, uRandom, uAmmos, uStats, uChat, SDLh, uSound, uVisualGears, uScript, uTypes, - uVariables, uConsole, uFloat; + uVariables, uConsole, uFloat, uMisc, uUtils; type PVariable = ^TVariable; TVariable = record diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uConsole.pas --- a/hedgewars/uConsole.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uConsole.pas Thu Nov 18 11:32:47 2010 +0300 @@ -28,7 +28,7 @@ function GetLastConsoleLine: shortstring; implementation -uses uMisc, Types, uVariables; +uses uMisc, Types, uVariables, uUtils; const cLineWidth: LongInt = 0; cLinesCount = 256; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uFloat.pas --- a/hedgewars/uFloat.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uFloat.pas Thu Nov 18 11:32:47 2010 +0300 @@ -62,6 +62,7 @@ function AngleSin(const Angle: Longword): hwFloat; function AngleCos(const Angle: Longword): hwFloat; function SignAs(const num, signum: hwFloat): hwFloat; inline; +function hwSign(r: hwFloat): LongInt; inline; {$IFDEF FPC} {$J-} @@ -342,6 +343,12 @@ SignAs.isNegative:= signum.isNegative end; +function hwSign(r: hwFloat): LongInt; +begin +// yes, we have negative zero for a reason +if r.isNegative then hwSign:= -1 else hwSign:= 1 +end; + {$INCLUDE "SinTable.inc"} function AngleSin(const Angle: Longword): hwFloat; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uGears.pas Thu Nov 18 11:32:47 2010 +0300 @@ -47,7 +47,7 @@ implementation uses uWorld, uMisc, uStore, uSound, uTeams, uRandom, uCollisions, uIO, uLandGraphics, uAIMisc, uLocale, uAI, uAmmos, uStats, uVisualGears, uScript, GLunit, uMobile, uVariables, - uCommands; + uCommands, uUtils; const MAXROPEPOINTS = 384; var RopePoints: record diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uIO.pas --- a/hedgewars/uIO.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uIO.pas Thu Nov 18 11:32:47 2010 +0300 @@ -42,7 +42,7 @@ procedure NetGetNextCmd; implementation -uses uConsole, uConsts, uMisc, uLand, uChat, uTeams, uTypes, uVariables, uCommands; +uses uConsole, uConsts, uMisc, uLand, uChat, uTeams, uTypes, uVariables, uCommands, uUtils; type PCmd = ^TCmd; TCmd = packed record @@ -138,7 +138,7 @@ else loTicks:= SDLNet_Read16(@s[byte(s[0]) - 1]); AddCmd(loTicks, s); - {$IFDEF DEBUGFILE}AddFileLog('IPC in: '+s[1]+' ticks '+inttostr(lastcmd^.loTime));{$ENDIF} + {$IFDEF DEBUGFILE}AddFileLog('IPC in: '+s[1]+' ticks '+IntToStr(lastcmd^.loTime));{$ENDIF} end end; @@ -311,7 +311,7 @@ 'F': TeamGone(copy(headcmd^.str, 2, Pred(headcmd^.len))); 'N': begin tmpflag:= false; - {$IFDEF DEBUGFILE}AddFileLog('got cmd "N": time '+inttostr(hiTicks shl 16 + headcmd^.loTime)){$ENDIF} + {$IFDEF DEBUGFILE}AddFileLog('got cmd "N": time '+IntToStr(hiTicks shl 16 + headcmd^.loTime)){$ENDIF} end; 'p': begin x16:= SDLNet_Read16(@(headcmd^.X)); @@ -342,8 +342,8 @@ if (headcmd <> nil) and tmpflag and (not CurrentTeam^.hasGone) then TryDo(GameTicks < hiTicks shl 16 + headcmd^.loTime, 'oops, queue error. in buffer: ' + headcmd^.cmd + - ' (' + inttostr(GameTicks) + ' > ' + - inttostr(hiTicks shl 16 + headcmd^.loTime) + ')', + ' (' + IntToStr(GameTicks) + ' > ' + + IntToStr(hiTicks shl 16 + headcmd^.loTime) + ')', true); isInLag:= (headcmd = nil) and tmpflag and (not CurrentTeam^.hasGone); diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uKeys.pas --- a/hedgewars/uKeys.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uKeys.pas Thu Nov 18 11:32:47 2010 +0300 @@ -82,7 +82,7 @@ {$ENDIF} {$ENDIF} implementation -uses uConsole, uCommands, uMisc, uVariables, uConsts; +uses uConsole, uCommands, uMisc, uVariables, uConsts, uUtils; //const KeyNumber = 1024; var tkbd, tkbdn: TKeyboardState; @@ -193,7 +193,7 @@ k:= SDL_GetMouseState(nil, nil); {$IFNDEF IPHONEOS}pkbd:={$ENDIF}SDL_GetKeyState(@j); -TryDo(j < cKeyMaxIndex, 'SDL keys number is more than expected (' + inttostr(j) + ')', true); +TryDo(j < cKeyMaxIndex, 'SDL keys number is more than expected (' + IntToStr(j) + ')', true); {$IFNDEF IPHONEOS} for i:= 1 to pred(j) do @@ -262,7 +262,7 @@ for i:= 6 to cKeyMaxIndex do begin s:= shortstring(sdl_getkeyname(i)); - //writeln(stdout,inttostr(i) + ': ' + s); + //writeln(stdout,IntToStr(i) + ': ' + s); if s = 'unknown key' then KeyNames[i]:= '' else begin @@ -272,7 +272,7 @@ end; end; -//for i:= 0 to cKeyMaxIndex do writeln(stdout,inttostr(i) + ': ' + KeyNames[i]); +//for i:= 0 to cKeyMaxIndex do writeln(stdout,IntToStr(i) + ': ' + KeyNames[i]); // get the size of keyboard array SDL_GetKeyState(@k); @@ -282,21 +282,21 @@ begin for i:= 0 to Pred(ControllerNumAxes[j]) do begin - keynames[k + 0]:= 'j' + inttostr(j) + 'a' + inttostr(i) + 'u'; - keynames[k + 1]:= 'j' + inttostr(j) + 'a' + inttostr(i) + 'd'; + keynames[k + 0]:= 'j' + IntToStr(j) + 'a' + IntToStr(i) + 'u'; + keynames[k + 1]:= 'j' + IntToStr(j) + 'a' + IntToStr(i) + 'd'; inc(k, 2); end; for i:= 0 to Pred(ControllerNumHats[j]) do begin - keynames[k + 0]:= 'j' + inttostr(j) + 'h' + inttostr(i) + 'u'; - keynames[k + 1]:= 'j' + inttostr(j) + 'h' + inttostr(i) + 'r'; - keynames[k + 2]:= 'j' + inttostr(j) + 'h' + inttostr(i) + 'd'; - keynames[k + 3]:= 'j' + inttostr(j) + 'h' + inttostr(i) + 'l'; + keynames[k + 0]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'u'; + keynames[k + 1]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'r'; + keynames[k + 2]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'd'; + keynames[k + 3]:= 'j' + IntToStr(j) + 'h' + IntToStr(i) + 'l'; inc(k, 4); end; for i:= 0 to Pred(ControllerNumButtons[j]) do begin - keynames[k]:= 'j' + inttostr(j) + 'b' + inttostr(i); + keynames[k]:= 'j' + IntToStr(j) + 'b' + IntToStr(i); inc(k, 1); end; end; @@ -347,7 +347,7 @@ DefaultBinds[KeyNameToCode('left_shift')]:= '+precise'; {$ENDIF} -for i:= 1 to 10 do DefaultBinds[KeyNameToCode('f'+inttostr(i))]:= 'slot '+inttostr(i); +for i:= 1 to 10 do DefaultBinds[KeyNameToCode('f'+IntToStr(i))]:= 'slot '+IntToStr(i); SetDefaultBinds(); end; @@ -422,7 +422,7 @@ ControllerNumControllers:= SDL_NumJoysticks(); if ControllerNumControllers > 6 then ControllerNumControllers:= 6; -WriteLnToConsole('Number of game controllers: ' + inttostr(ControllerNumControllers)); +WriteLnToConsole('Number of game controllers: ' + IntToStr(ControllerNumControllers)); if ControllerNumControllers > 0 then begin @@ -438,10 +438,10 @@ //ControllerNumBalls[j]:= SDL_JoystickNumBalls(Controller[j]); ControllerNumHats[j]:= SDL_JoystickNumHats(Controller[j]); ControllerNumButtons[j]:= SDL_JoystickNumButtons(Controller[j]); - WriteLnToConsole('* Number of axes: ' + inttostr(ControllerNumAxes[j])); - //WriteLnToConsole('* Number of balls: ' + inttostr(ControllerNumBalls[j])); - WriteLnToConsole('* Number of hats: ' + inttostr(ControllerNumHats[j])); - WriteLnToConsole('* Number of buttons: ' + inttostr(ControllerNumButtons[j])); + WriteLnToConsole('* Number of axes: ' + IntToStr(ControllerNumAxes[j])); + //WriteLnToConsole('* Number of balls: ' + IntToStr(ControllerNumBalls[j])); + WriteLnToConsole('* Number of hats: ' + IntToStr(ControllerNumHats[j])); + WriteLnToConsole('* Number of buttons: ' + IntToStr(ControllerNumButtons[j])); ControllerEnabled:= 1; if ControllerNumAxes[j] > 20 then ControllerNumAxes[j]:= 20; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uLand.pas Thu Nov 18 11:32:47 2010 +0300 @@ -36,7 +36,7 @@ implementation uses uConsole, uStore, uMisc, uRandom, uLandObjects, Adler32, uIO, uLandTexture, sysutils, - uVariables; + uVariables, uUtils; operator=(const a, b: direction) c: Boolean; begin @@ -358,7 +358,7 @@ r.x:= x mod tmpsurf^.w; r.y:= 0; r.w:= 1; - r.h:= min(16, yd - yu + 1); + r.h:= Min(16, yd - yu + 1); SDL_UpperBlit(tmpsurf, @r, Surface, @rr); end; yd:= yu - 1; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uLandGraphics.pas --- a/hedgewars/uLandGraphics.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uLandGraphics.pas Thu Nov 18 11:32:47 2010 +0300 @@ -40,25 +40,25 @@ function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace: boolean): boolean; implementation -uses SDLh, uMisc, uLandTexture, uVariables; +uses SDLh, uMisc, uLandTexture, uVariables, uUtils; procedure FillCircleLines(x, y, dx, dy: LongInt; Value: Longword); var i: LongInt; begin if ((y + dy) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (Land[y + dy, i] and lfIndestructible) = 0 then Land[y + dy, i]:= Value; if ((y - dy) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (Land[y - dy, i] and lfIndestructible) = 0 then Land[y - dy, i]:= Value; if ((y + dx) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (Land[y + dx, i] and lfIndestructible) = 0 then Land[y + dx, i]:= Value; if ((y - dx) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (Land[y - dx, i] and lfIndestructible) = 0 then Land[y - dx, i]:= Value; end; @@ -69,33 +69,33 @@ if not doSet then begin if ((y + dy) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (Land[y + dy, i] > 0) and (Land[y + dy, i] < 256) then dec(Land[y + dy, i]); // check > 0 because explosion can erase collision data if ((y - dy) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (Land[y - dy, i] > 0) and (Land[y - dy, i] < 256) then dec(Land[y - dy, i]); if ((y + dx) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (Land[y + dx, i] > 0) and (Land[y + dx, i] < 256) then dec(Land[y + dx, i]); if ((y - dx) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (Land[y - dx, i] > 0) and (Land[y - dx, i] < 256) then dec(Land[y - dx, i]); end else begin if ((y + dy) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (Land[y + dy, i] < 256) then inc(Land[y + dy, i]); if ((y - dy) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (Land[y - dy, i] < 256) then inc(Land[y - dy, i]); if ((y + dx) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (Land[y + dx, i] < 256) then inc(Land[y + dx, i]); if ((y - dx) and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (Land[y - dx, i] < 256) then inc(Land[y - dx, i]); end @@ -146,7 +146,7 @@ begin t:= y + dy; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (not isMap and ((Land[t, i] and lfIndestructible) = 0)) or ((Land[t, i] and lfBasic) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= 0 @@ -155,7 +155,7 @@ t:= y - dy; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if (not isMap and ((Land[t, i] and lfIndestructible) = 0)) or ((Land[t, i] and lfBasic) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= 0 @@ -164,7 +164,7 @@ t:= y + dx; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (not isMap and ((Land[t, i] and lfIndestructible) = 0)) or ((Land[t, i] and lfBasic) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= 0 @@ -173,7 +173,7 @@ t:= y - dx; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if (not isMap and ((Land[t, i] and lfIndestructible) = 0)) or ((Land[t, i] and lfBasic) <> 0) then if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[t, i]:= 0 @@ -189,7 +189,7 @@ cnt:= 0; t:= y + dy; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then begin inc(cnt); @@ -207,7 +207,7 @@ t:= y - dy; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then begin inc(cnt); @@ -225,7 +225,7 @@ t:= y + dx; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then begin inc(cnt); @@ -243,7 +243,7 @@ t:= y - dx; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) then begin inc(cnt); @@ -266,7 +266,7 @@ begin t:= y + dy; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then begin if (cReducedQuality and rqBlurryLand) = 0 then @@ -281,7 +281,7 @@ t:= y - dy; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dx, 0) to min(x + dx, LAND_WIDTH - 1) do + for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then begin if (cReducedQuality and rqBlurryLand) = 0 then @@ -295,7 +295,7 @@ t:= y + dx; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then begin if (cReducedQuality and rqBlurryLand) = 0 then @@ -310,7 +310,7 @@ t:= y - dx; if (t and LAND_HEIGHT_MASK) = 0 then - for i:= max(x - dy, 0) to min(x + dy, LAND_WIDTH - 1) do + for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do if ((Land[t, i] and lfBasic) <> 0) or ((Land[t, i] and lfObject) <> 0) then begin if (cReducedQuality and rqBlurryLand) = 0 then @@ -394,10 +394,10 @@ if (dx = dy) then FillLandCircleLinesEBC(x, y, dx, dy); end; -tx:= max(X - Radius - 1, 0); -dx:= min(X + Radius + 1, LAND_WIDTH) - tx; -ty:= max(Y - Radius - 1, 0); -dy:= min(Y + Radius + 1, LAND_HEIGHT) - ty; +tx:= Max(X - Radius - 1, 0); +dx:= Min(X + Radius + 1, LAND_WIDTH) - tx; +ty:= Max(Y - Radius - 1, 0); +dy:= Min(Y + Radius + 1, LAND_HEIGHT) - ty; UpdateLandTexture(tx, dx, ty, dy); DrawExplosion:= cnt end; @@ -407,8 +407,8 @@ begin for i:= 0 to Pred(Count) do begin - for ty:= max(y - Radius, 0) to min(y + Radius, LAND_HEIGHT) do - for tx:= max(0, ar^[i].Left - Radius) to min(LAND_WIDTH, ar^[i].Right + Radius) do + for ty:= Max(y - Radius, 0) to Min(y + Radius, LAND_HEIGHT) do + for tx:= Max(0, ar^[i].Left - Radius) to Min(LAND_WIDTH, ar^[i].Right + Radius) do if (Land[ty, tx] and lfBasic) <> 0 then if (cReducedQuality and rqBlurryLand) = 0 then LandPixels[ty, tx]:= LandBackPixel(tx, ty) @@ -428,8 +428,8 @@ for i:= 0 to Pred(Count) do begin - for ty:= max(y - Radius, 0) to min(y + Radius, LAND_HEIGHT) do - for tx:= max(0, ar^[i].Left - Radius) to min(LAND_WIDTH, ar^[i].Right + Radius) do + for ty:= Max(y - Radius, 0) to Min(y + Radius, LAND_HEIGHT) do + for tx:= Max(0, ar^[i].Left - Radius) to Min(LAND_WIDTH, ar^[i].Right + Radius) do if ((Land[ty, tx] and lfBasic) <> 0) or ((Land[ty, tx] and lfObject) <> 0) then begin if (cReducedQuality and rqBlurryLand) = 0 then @@ -585,10 +585,10 @@ ny:= ny + dX; end; -tx:= max(stX - HalfWidth * 2 - 4 - abs(hwRound(dX * ticks)), 0); -ty:= max(stY - HalfWidth * 2 - 4 - abs(hwRound(dY * ticks)), 0); -ddx:= min(stX + HalfWidth * 2 + 4 + abs(hwRound(dX * ticks)), LAND_WIDTH) - tx; -ddy:= min(stY + HalfWidth * 2 + 4 + abs(hwRound(dY * ticks)), LAND_HEIGHT) - ty; +tx:= Max(stX - HalfWidth * 2 - 4 - abs(hwRound(dX * ticks)), 0); +ty:= Max(stY - HalfWidth * 2 - 4 - abs(hwRound(dY * ticks)), 0); +ddx:= Min(stX + HalfWidth * 2 + 4 + abs(hwRound(dX * ticks)), LAND_WIDTH) - tx; +ddy:= Min(stY + HalfWidth * 2 + 4 + abs(hwRound(dY * ticks)), LAND_HEIGHT) - ty; UpdateLandTexture(tx, ddx, ty, ddy) end; @@ -661,10 +661,10 @@ if SDL_MustLock(Image) then SDL_UnlockSurface(Image); -x:= max(cpX, leftX); -w:= min(cpX + Image^.w, LAND_WIDTH) - x; -y:= max(cpY, topY); -h:= min(cpY + Image^.h, LAND_HEIGHT) - y; +x:= Max(cpX, leftX); +w:= Min(cpX + Image^.w, LAND_WIDTH) - x; +y:= Max(cpY, topY); +h:= Min(cpY + Image^.h, LAND_HEIGHT) - y; UpdateLandTexture(x, w, y, h) end; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uLandObjects.pas --- a/hedgewars/uLandObjects.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uLandObjects.pas Thu Nov 18 11:32:47 2010 +0300 @@ -30,7 +30,7 @@ implementation uses uStore, uConsts, uMisc, uConsole, uRandom, uVisualGears, uSound, GLunit, - uTypes, uVariables; + uTypes, uVariables, uUtils; const MaxRects = 512; MAXOBJECTRECTS = 16; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uLocale.pas --- a/hedgewars/uLocale.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uLocale.pas Thu Nov 18 11:32:47 2010 +0300 @@ -35,7 +35,7 @@ function GetEventString(e: TEventId): ansistring; implementation -uses uMisc, uRandom; +uses uMisc, uRandom, uUtils; var trevt: array[TEventId] of array [0..Pred(MAX_EVENT_STRINGS)] of ansistring; trevt_n: array[TEventId] of integer; @@ -77,7 +77,7 @@ 0: if (b >=0) and (b <= ord(High(TAmmoStrId))) then trammo[TAmmoStrId(b+1)]:= s; 1: if (b >=0) and (b <= ord(High(TMsgStrId))) then trmsg[TMsgStrId(b)]:= s; 2: if (b >=0) and (b <= ord(High(TEventId))) then begin - TryDo(trevt_n[TEventId(b)] < MAX_EVENT_STRINGS, 'Too many event strings in ' + inttostr(a) + ':' + inttostr(b), false); + TryDo(trevt_n[TEventId(b)] < MAX_EVENT_STRINGS, 'Too many event strings in ' + IntToStr(a) + ':' + IntToStr(b), false); if first[TEventId(b)] then begin trevt_n[TEventId(b)]:= 0; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uMisc.pas --- a/hedgewars/uMisc.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uMisc.pas Thu Nov 18 11:32:47 2010 +0300 @@ -21,103 +21,33 @@ unit uMisc; interface -uses SDLh, uConsts, uFloat, GLunit, Math, uTypes; +uses SDLh, uConsts, GLunit, uTypes; -procedure SplitBySpace(var a, b: shortstring); -procedure SplitByChar(var a, b: ansistring; c: char); -function EnumToStr(const en : TGearType) : shortstring; overload; -function EnumToStr(const en : TSound) : shortstring; overload; -function EnumToStr(const en : TAmmoType) : shortstring; overload; -function EnumToStr(const en : THogEffect) : shortstring; overload; procedure movecursor(dx, dy: LongInt); -function hwSign(r: hwFloat): LongInt; inline; -function Min(a, b: LongInt): LongInt; inline; -function Max(a, b: LongInt): LongInt; inline; -procedure OutError(Msg: shortstring; isFatalError: boolean); -procedure TryDo(Assert: boolean; Msg: shortstring; isFatal: boolean); inline; -procedure SDLTry(Assert: boolean; isFatal: boolean); -function IntToStr(n: LongInt): shortstring; -function FloatToStr(n: hwFloat): shortstring; -function DxDy2Angle(const _dY, _dX: hwFloat): GLfloat; -function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; -function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; (* procedure AdjustColor(var Color: Longword); procedure SetKB(n: Longword); *) procedure SendKB; -procedure SetLittle(var r: hwFloat); procedure SendStat(sit: TStatInfoType; s: shortstring); -function Str2PChar(const s: shortstring): PChar; function NewTexture(width, height: Longword; buf: Pointer): PTexture; function Surface2Tex(surf: PSDL_Surface; enableClamp: boolean): PTexture; procedure FreeTexture(tex: PTexture); -function toPowerOf2(i: Longword): Longword; inline; -function DecodeBase64(s: shortstring): shortstring; function doSurfaceConversion(tmpsurf: PSDL_Surface): PSDL_Surface; -function endian(independent: LongWord): LongWord; inline; -{$IFDEF DEBUGFILE} -procedure AddFileLog(s: shortstring); -(* function RectToStr(Rect: TSDL_Rect): shortstring; *) -{$ENDIF} +procedure OutError(Msg: shortstring; isFatalError: boolean); +procedure TryDo(Assert: boolean; Msg: shortstring; isFatal: boolean); inline; +procedure SDLTry(Assert: boolean; isFatal: boolean); procedure MakeScreenshot(filename: shortstring); procedure initModule; procedure freeModule; implementation -uses uConsole, uIO, typinfo, sysutils, uVariables; +uses uConsole, uIO, typinfo, sysutils, uVariables, uUtils; var KBnum: Longword; -{$IFDEF DEBUGFILE} - f: textfile; -{$ENDIF} -// should this include "strtolower()" for the split string? -procedure SplitBySpace(var a, b: shortstring); -var i, t: LongInt; -begin -i:= Pos(' ', a); -if i > 0 then - begin - for t:= 1 to Pred(i) do - if (a[t] >= 'A')and(a[t] <= 'Z') then Inc(a[t], 32); - b:= copy(a, i + 1, Length(a) - i); - byte(a[0]):= Pred(i) - end else b:= ''; -end; - -procedure SplitByChar(var a, b: ansistring; c: char); -var i: LongInt; -begin -i:= Pos(c, a); -if i > 0 then - begin - b:= copy(a, i + 1, Length(a) - i); - setlength(a, Pred(i)); - end else b:= ''; -end; - -function EnumToStr(const en : TGearType) : shortstring; overload; -begin -EnumToStr:= GetEnumName(TypeInfo(TGearType), ord(en)) -end; - -function EnumToStr(const en : TSound) : shortstring; overload; -begin -EnumToStr:= GetEnumName(TypeInfo(TSound), ord(en)) -end; - -function EnumToStr(const en : TAmmoType) : shortstring; overload; -begin -EnumToStr:= GetEnumName(TypeInfo(TAmmoType), ord(en)) -end; - -function EnumToStr(const en: THogEffect) : shortstring; overload; -begin - EnumToStr := GetEnumName(TypeInfo(THogEffect), ord(en)) -end; procedure movecursor(dx, dy: LongInt); var x, y: LongInt; @@ -130,21 +60,6 @@ SDL_WarpMouse(x, y); end; -function hwSign(r: hwFloat): LongInt; -begin -// yes, we have negative zero for a reason -if r.isNegative then hwSign:= -1 else hwSign:= 1 -end; - -function Min(a, b: LongInt): LongInt; -begin -if a < b then Min:= a else Min:= b -end; - -function Max(a, b: LongInt): LongInt; -begin -if a > b then Max:= a else Max:= b -end; procedure OutError(Msg: shortstring; isFatalError: boolean); begin @@ -182,16 +97,6 @@ *) -function IntToStr(n: LongInt): shortstring; -begin -str(n, IntToStr) -end; - -function FloatToStr(n: hwFloat): shortstring; -begin -FloatToStr:= cstr(n) + '_' + inttostr(Lo(n.QWordValue)) -end; - procedure SetTextureParameters(enableClamp: Boolean); begin if enableClamp and ((cReducedQuality and rqClampLess) = 0) then @@ -203,37 +108,6 @@ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) end; -function DxDy2Angle(const _dY, _dX: hwFloat): GLfloat; -var dY, dX: Extended; -begin -dY:= _dY.QWordValue / $100000000; -if _dY.isNegative then dY:= - dY; -dX:= _dX.QWordValue / $100000000; -if _dX.isNegative then dX:= - dX; -DxDy2Angle:= arctan2(dY, dX) * 180 / pi -end; - -function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; -const _16divPI: Extended = 16/pi; -var dY, dX: Extended; -begin -dY:= _dY.QWordValue / $100000000; -if _dY.isNegative then dY:= - dY; -dX:= _dX.QWordValue / $100000000; -if _dX.isNegative then dX:= - dX; -DxDy2Angle32:= trunc(arctan2(dY, dX) * _16divPI) and $1f -end; - -function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; -const MaxAngleDivPI: Extended = cMaxAngle/pi; -var dY, dX: Extended; -begin -dY:= _dY.QWordValue / $100000000; -if _dY.isNegative then dY:= - dY; -dX:= _dX.QWordValue / $100000000; -if _dX.isNegative then dX:= - dX; -DxDy2AttackAngle:= trunc(arctan2(dY, dX) * MaxAngleDivPI) -end; procedure SendKB; var s: shortstring; @@ -245,11 +119,6 @@ end end; -procedure SetLittle(var r: hwFloat); -begin -r:= SignAs(cLittle, r) -end; - procedure SendStat(sit: TStatInfoType; s: shortstring); const stc: array [TStatInfoType] of char = 'rDkKHTPsSB'; var buf: shortstring; @@ -258,26 +127,6 @@ SendIPCRaw(@buf[0], length(buf) + 1) end; -function Str2PChar(const s: shortstring): PChar; -const CharArray: array[byte] of Char = ''; -begin -CharArray:= s; -CharArray[Length(s)]:= #0; -Str2PChar:= @CharArray -end; - -function isPowerOf2(i: Longword): boolean; -begin -if i = 0 then exit(true); -while (i and 1) = 0 do i:= i shr 1; -isPowerOf2:= (i = 1) -end; - -function toPowerOf2(i: Longword): Longword; -begin -toPowerOf2:= 1; -while (toPowerOf2 < i) do toPowerOf2:= toPowerOf2 shl 1 -end; procedure ResetVertexArrays(texture: PTexture); begin @@ -425,33 +274,6 @@ end end; -function DecodeBase64(s: shortstring): shortstring; -const table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -var i, t, c: Longword; -begin -c:= 0; -for i:= 1 to Length(s) do - begin - t:= Pos(s[i], table); - if s[i] = '=' then inc(c); - if t > 0 then byte(s[i]):= t - 1 else byte(s[i]):= 0 - end; - -i:= 1; -t:= 1; -while i <= length(s) do - begin - DecodeBase64[t ]:= char((byte(s[i ]) shl 2) or (byte(s[i + 1]) shr 4)); - DecodeBase64[t + 1]:= char((byte(s[i + 1]) shl 4) or (byte(s[i + 2]) shr 2)); - DecodeBase64[t + 2]:= char((byte(s[i + 2]) shl 6) or (byte(s[i + 3]) )); - inc(t, 3); - inc(i, 4) - end; - -if c < 3 then t:= t - c; - -byte(DecodeBase64[0]):= t - 1 -end; procedure MakeScreenshot(filename: shortstring); var p: Pointer; @@ -523,20 +345,6 @@ FreeMem(p) end; -{$IFDEF DEBUGFILE} -procedure AddFileLog(s: shortstring); -begin -writeln(f, GameTicks: 6, ': ', s); -flush(f) -end; -(* -function RectToStr(Rect: TSDL_Rect): shortstring; -begin -RectToStr:= '(x: ' + inttostr(rect.x) + '; y: ' + inttostr(rect.y) + '; w: ' + inttostr(rect.w) + '; h: ' + inttostr(rect.h) + ')' -end; -*) -{$ENDIF} - function doSurfaceConversion(tmpsurf: PSDL_Surface): PSDL_Surface; {* for more information http://www.idevgames.com/forum/showpost.php?p=85864&postcount=7 *} var convertedSurf: PSDL_Surface = nil; @@ -551,69 +359,16 @@ exit(tmpsurf); end; -function endian(independent: LongWord): LongWord; inline; -begin -{$IFDEF ENDIAN_LITTLE} -endian:= independent; -{$ELSE} -endian:= (((independent and $FF000000) shr 24) or - ((independent and $00FF0000) shr 8) or - ((independent and $0000FF00) shl 8) or - ((independent and $000000FF) shl 24)) -{$ENDIF} -end; - procedure initModule; -{$IFDEF DEBUGFILE}{$IFNDEF IPHONEOS}var i: LongInt;{$ENDIF}{$ENDIF} begin KBnum := 0; - -{$IFDEF DEBUGFILE} -{$I-} -{$IFDEF IPHONEOS} - Assign(f,'../Documents/hw-' + cLogfileBase + '.log'); - Rewrite(f); -{$ELSE} - if (ParamStr(1) <> '') and (ParamStr(2) <> '') then - if (ParamCount <> 3) and (ParamCount <> cDefaultParamNum) then - begin - for i:= 0 to 7 do - begin - assign(f, ExtractFileDir(ParamStr(2)) + '/' + cLogfileBase + inttostr(i) + '.log'); - rewrite(f); - if IOResult = 0 then break; - end; - if IOResult <> 0 then f:= stderr; // if everything fails, write to stderr - end - else - begin - for i:= 0 to 7 do - begin - assign(f, ParamStr(1) + '/Logs/' + cLogfileBase + inttostr(i) + '.log'); - rewrite(f); - if IOResult = 0 then break; - end; - if IOResult <> 0 then f:= stderr; // if everything fails, write to stderr - end - else - f:= stderr; -{$ENDIF} -{$I+} -{$ENDIF} - end; procedure freeModule; begin recordFileName:= ''; while TextureList <> nil do FreeTexture(TextureList); - -{$IFDEF DEBUGFILE} - writeln(f, 'halt at ', GameTicks, ' ticks. TurnTimeLeft = ', TurnTimeLeft); - flush(f); - close(f); -{$ENDIF} end; end. diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uScript.pas Thu Nov 18 11:32:47 2010 +0300 @@ -54,7 +54,8 @@ uRandom, uTypes, uVariables, - uCommands; + uCommands, + uUtils; var luaState : Plua_State; ScriptAmmoLoadout : shortstring; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uSound.pas --- a/hedgewars/uSound.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uSound.pas Thu Nov 18 11:32:47 2010 +0300 @@ -46,7 +46,7 @@ implementation -uses uMisc, uVariables, uConsole; +uses uMisc, uVariables, uConsole, uUtils; const chanTPU = 32; var Volume: LongInt; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uStats.pas --- a/hedgewars/uStats.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uStats.pas Thu Nov 18 11:32:47 2010 +0300 @@ -35,7 +35,7 @@ procedure SendStats; implementation -uses uTeams, uSound, uMisc, uLocale, uWorld, uVariables; +uses uTeams, uSound, uMisc, uLocale, uWorld, uVariables, uUtils; var DamageGiven : Longword = 0; DamageClan : Longword = 0; @@ -158,7 +158,7 @@ for t:= 0 to Pred(ClansCount) do with ClansArray[t]^ do begin - SendStat(siClanHealth, inttostr(Color) + ' ' + inttostr(ClanHealth)); + SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth)); end; Kills:= 0; @@ -218,8 +218,8 @@ { send player stats for winner teams } if Clan^.ClanHealth > 0 then begin - SendStat(siPlayerKills, inttostr(Clan^.Color) + ' ' + - inttostr(stats.Kills) + ' ' + TeamName); + SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' + + IntToStr(stats.Kills) + ' ' + TeamName); end; { determine maximum values of TeamKills, TurnSkips, TeamDamage } @@ -242,25 +242,25 @@ for t:= 0 to Pred(TeamsCount) do begin with TeamsArray[t]^ do begin if Clan^.ClanHealth = 0 then begin - SendStat(siPlayerKills, inttostr(Clan^.Color) + ' ' + - inttostr(stats.Kills) + ' ' + TeamName); + SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' + + IntToStr(stats.Kills) + ' ' + TeamName); end; end; end; if msdhh <> nil then - SendStat(siMaxStepDamage, inttostr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')'); + SendStat(siMaxStepDamage, IntToStr(msd) + ' ' + msdhh^.Name + ' (' + msdhh^.Team^.TeamName + ')'); if mskcnt = 1 then - SendStat(siMaxStepKills, inttostr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')'); + SendStat(siMaxStepKills, IntToStr(msk) + ' ' + mskhh^.Name + ' (' + mskhh^.Team^.TeamName + ')'); if maxTeamKills > 1 then - SendStat(siMaxTeamKills, inttostr(maxTeamKills) + ' ' + maxTeamKillsName); + SendStat(siMaxTeamKills, IntToStr(maxTeamKills) + ' ' + maxTeamKillsName); if maxTurnSkips > 2 then - SendStat(siMaxTurnSkips, inttostr(maxTurnSkips) + ' ' + maxTurnSkipsName); + SendStat(siMaxTurnSkips, IntToStr(maxTurnSkips) + ' ' + maxTurnSkipsName); if maxTeamDamage > 30 then - SendStat(siMaxTeamDamage, inttostr(maxTeamDamage) + ' ' + maxTeamDamageName); + SendStat(siMaxTeamDamage, IntToStr(maxTeamDamage) + ' ' + maxTeamDamageName); -if KilledHHs > 0 then SendStat(siKilledHHs, inttostr(KilledHHs)); +if KilledHHs > 0 then SendStat(siKilledHHs, IntToStr(KilledHHs)); end; procedure initModule; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uStore.pas Thu Nov 18 11:32:47 2010 +0300 @@ -66,7 +66,7 @@ procedure Tint(c: Longword); inline; implementation -uses uMisc, uConsole, uLocale, uMobile, uVariables; +uses uMisc, uConsole, uLocale, uMobile, uVariables, uUtils; type TGPUVendor = (gvUnknown, gvNVIDIA, gvATI, gvIntel, gvApple); diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uTeams.pas Thu Nov 18 11:32:47 2010 +0300 @@ -37,7 +37,7 @@ function GetTeamStatString(p: PTeam): shortstring; implementation -uses uMisc, uWorld, uLocale, uAmmos, uChat, uMobile, uVariables; +uses uMisc, uWorld, uLocale, uAmmos, uChat, uMobile, uVariables, uUtils; const MaxTeamHealth: LongInt = 0; function CheckForWin: boolean; @@ -413,7 +413,7 @@ function GetTeamStatString(p: PTeam): shortstring; var s: ansistring; begin - s:= p^.TeamName + ':' + inttostr(p^.TeamHealth) + ':'; + s:= p^.TeamName + ':' + IntToStr(p^.TeamHealth) + ':'; GetTeamStatString:= s; end; diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uUtils.pas --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hedgewars/uUtils.pas Thu Nov 18 11:32:47 2010 +0300 @@ -0,0 +1,280 @@ +{$INCLUDE "options.inc"} +unit uUtils; + +interface +uses uTypes, uFloat, GLunit; + +procedure SplitBySpace(var a, b: shortstring); +procedure SplitByChar(var a, b: ansistring; c: char); + +function EnumToStr(const en : TGearType) : shortstring; overload; +function EnumToStr(const en : TSound) : shortstring; overload; +function EnumToStr(const en : TAmmoType) : shortstring; overload; +function EnumToStr(const en : THogEffect) : shortstring; overload; + +function Min(a, b: LongInt): LongInt; inline; +function Max(a, b: LongInt): LongInt; inline; + +function IntToStr(n: LongInt): shortstring; +function FloatToStr(n: hwFloat): shortstring; + +function DxDy2Angle(const _dY, _dX: hwFloat): GLfloat; +function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; +function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; + +procedure SetLittle(var r: hwFloat); + +function Str2PChar(const s: shortstring): PChar; +function DecodeBase64(s: shortstring): shortstring; + +function isPowerOf2(i: Longword): boolean; +function toPowerOf2(i: Longword): Longword; inline; + +function endian(independent: LongWord): LongWord; inline; + +{$IFDEF DEBUGFILE} +procedure AddFileLog(s: shortstring); +{$ENDIF} + +procedure initModule; +procedure freeModule; + +implementation +uses typinfo, Math, uConsts, uVariables, SysUtils; + +var +{$IFDEF DEBUGFILE} + f: textfile; +{$ENDIF} + +// should this include "strtolower()" for the split string? +procedure SplitBySpace(var a, b: shortstring); +var i, t: LongInt; +begin +i:= Pos(' ', a); +if i > 0 then + begin + for t:= 1 to Pred(i) do + if (a[t] >= 'A')and(a[t] <= 'Z') then Inc(a[t], 32); + b:= copy(a, i + 1, Length(a) - i); + byte(a[0]):= Pred(i) + end else b:= ''; +end; + +procedure SplitByChar(var a, b: ansistring; c: char); +var i: LongInt; +begin +i:= Pos(c, a); +if i > 0 then + begin + b:= copy(a, i + 1, Length(a) - i); + setlength(a, Pred(i)); + end else b:= ''; +end; + +function EnumToStr(const en : TGearType) : shortstring; overload; +begin +EnumToStr:= GetEnumName(TypeInfo(TGearType), ord(en)) +end; + +function EnumToStr(const en : TSound) : shortstring; overload; +begin +EnumToStr:= GetEnumName(TypeInfo(TSound), ord(en)) +end; + +function EnumToStr(const en : TAmmoType) : shortstring; overload; +begin +EnumToStr:= GetEnumName(TypeInfo(TAmmoType), ord(en)) +end; + +function EnumToStr(const en: THogEffect) : shortstring; overload; +begin + EnumToStr := GetEnumName(TypeInfo(THogEffect), ord(en)) +end; + + +function Min(a, b: LongInt): LongInt; +begin +if a < b then Min:= a else Min:= b +end; + +function Max(a, b: LongInt): LongInt; +begin +if a > b then Max:= a else Max:= b +end; + + +function IntToStr(n: LongInt): shortstring; +begin +str(n, IntToStr) +end; + +function FloatToStr(n: hwFloat): shortstring; +begin +FloatToStr:= cstr(n) + '_' + inttostr(Lo(n.QWordValue)) +end; + + +function DxDy2Angle(const _dY, _dX: hwFloat): GLfloat; +var dY, dX: Extended; +begin +dY:= _dY.QWordValue / $100000000; +if _dY.isNegative then dY:= - dY; +dX:= _dX.QWordValue / $100000000; +if _dX.isNegative then dX:= - dX; +DxDy2Angle:= arctan2(dY, dX) * 180 / pi +end; + +function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; +const _16divPI: Extended = 16/pi; +var dY, dX: Extended; +begin +dY:= _dY.QWordValue / $100000000; +if _dY.isNegative then dY:= - dY; +dX:= _dX.QWordValue / $100000000; +if _dX.isNegative then dX:= - dX; +DxDy2Angle32:= trunc(arctan2(dY, dX) * _16divPI) and $1f +end; + +function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; +const MaxAngleDivPI: Extended = cMaxAngle/pi; +var dY, dX: Extended; +begin +dY:= _dY.QWordValue / $100000000; +if _dY.isNegative then dY:= - dY; +dX:= _dX.QWordValue / $100000000; +if _dX.isNegative then dX:= - dX; +DxDy2AttackAngle:= trunc(arctan2(dY, dX) * MaxAngleDivPI) +end; + + +procedure SetLittle(var r: hwFloat); +begin +r:= SignAs(cLittle, r) +end; + + +function isPowerOf2(i: Longword): boolean; +begin +if i = 0 then exit(true); +while not odd(i) do i:= i shr 1; +isPowerOf2:= (i = 1) +end; + +function toPowerOf2(i: Longword): Longword; +begin +toPowerOf2:= 1; +while (toPowerOf2 < i) do toPowerOf2:= toPowerOf2 shl 1 +end; + + +function DecodeBase64(s: shortstring): shortstring; +const table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +var i, t, c: Longword; +begin +c:= 0; +for i:= 1 to Length(s) do + begin + t:= Pos(s[i], table); + if s[i] = '=' then inc(c); + if t > 0 then byte(s[i]):= t - 1 else byte(s[i]):= 0 + end; + +i:= 1; +t:= 1; +while i <= length(s) do + begin + DecodeBase64[t ]:= char((byte(s[i ]) shl 2) or (byte(s[i + 1]) shr 4)); + DecodeBase64[t + 1]:= char((byte(s[i + 1]) shl 4) or (byte(s[i + 2]) shr 2)); + DecodeBase64[t + 2]:= char((byte(s[i + 2]) shl 6) or (byte(s[i + 3]) )); + inc(t, 3); + inc(i, 4) + end; + +if c < 3 then t:= t - c; + +byte(DecodeBase64[0]):= t - 1 +end; + + +function Str2PChar(const s: shortstring): PChar; +const CharArray: array[byte] of Char = ''; +begin +CharArray:= s; +CharArray[Length(s)]:= #0; +Str2PChar:= @CharArray +end; + + +function endian(independent: LongWord): LongWord; inline; +begin +{$IFDEF ENDIAN_LITTLE} +endian:= independent; +{$ELSE} +endian:= (((independent and $FF000000) shr 24) or + ((independent and $00FF0000) shr 8) or + ((independent and $0000FF00) shl 8) or + ((independent and $000000FF) shl 24)) +{$ENDIF} +end; + + +{$IFDEF DEBUGFILE} +procedure AddFileLog(s: shortstring); +begin +writeln(f, GameTicks: 6, ': ', s); +flush(f) +end; +{$ENDIF} + + +procedure initModule; +{$IFDEF DEBUGFILE}{$IFNDEF IPHONEOS}var i: LongInt;{$ENDIF}{$ENDIF} +begin +{$IFDEF DEBUGFILE} +{$I-} +{$IFDEF IPHONEOS} + Assign(f,'../Documents/hw-' + cLogfileBase + '.log'); + Rewrite(f); +{$ELSE} + if (ParamStr(1) <> '') and (ParamStr(2) <> '') then + if (ParamCount <> 3) and (ParamCount <> cDefaultParamNum) then + begin + for i:= 0 to 7 do + begin + assign(f, ExtractFileDir(ParamStr(2)) + '/' + cLogfileBase + inttostr(i) + '.log'); + rewrite(f); + if IOResult = 0 then break; + end; + if IOResult <> 0 then f:= stderr; // if everything fails, write to stderr + end + else + begin + for i:= 0 to 7 do + begin + assign(f, ParamStr(1) + '/Logs/' + cLogfileBase + inttostr(i) + '.log'); + rewrite(f); + if IOResult = 0 then break; + end; + if IOResult <> 0 then f:= stderr; // if everything fails, write to stderr + end + else + f:= stderr; +{$ENDIF} +{$I+} +{$ENDIF} + +end; + +procedure freeModule; +begin + recordFileName:= ''; + +{$IFDEF DEBUGFILE} + writeln(f, 'halt at ', GameTicks, ' ticks. TurnTimeLeft = ', TurnTimeLeft); + flush(f); + close(f); +{$ENDIF} +end; + +end. \ No newline at end of file diff -r fe0e3903bb9e -r bcefeeabaa33 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Thu Nov 18 09:12:27 2010 +0300 +++ b/hedgewars/uWorld.pas Thu Nov 18 11:32:47 2010 +0300 @@ -45,7 +45,8 @@ uChat, uLandTexture, GLunit, - uVariables + uVariables, + uUtils ; type TCaptionStr = record @@ -385,7 +386,7 @@ {$IFDEF IPHONEOS} ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, AMyOffset - 1); {$ELSE} - ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, min(y + 1, cScreenHeight - WeaponTooltipTex^.h - 40)); + ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, Min(y + 1, cScreenHeight - WeaponTooltipTex^.h - 40)); {$ENDIF} bSelected:= false; @@ -570,7 +571,7 @@ begin // Offsets relative to camera - spare them to wimpier cpus, no bg or flakes for them anyway ScreenBottom:= (WorldDy - trunc(cScreenHeight/cScaleFactor) - (cScreenHeight div 2) + cWaterLine); - offsetY:= 10 * min(0, -145 - ScreenBottom); + offsetY:= 10 * Min(0, -145 - ScreenBottom); SkyOffset:= offsetY div 35 + cWaveHeight; HorizontOffset:= SkyOffset; if ScreenBottom > SkyOffset then @@ -864,7 +865,7 @@ if (ReadyTimeLeft = 0) and (missionTimer > 0) then dec(missionTimer, Lag); if missionTimer < 0 then missionTimer:= 0; // avoid subtracting below 0 if missionTex <> nil then - DrawCentered(0, min((cScreenHeight shr 1) + 100, cScreenHeight - 48 - missionTex^.h), missionTex); + DrawCentered(0, Min((cScreenHeight shr 1) + 100, cScreenHeight - 48 - missionTex^.h), missionTex); end; // fps @@ -1155,7 +1156,7 @@ procedure ShakeCamera(amount: LongWord); begin - amount:= max(1, amount); + amount:= Max(1, amount); WorldDx:= WorldDx - amount + LongInt(getRandom(1 + amount * 2)); WorldDy:= WorldDy - amount + LongInt(getRandom(1 + amount * 2)); end;