diff -r 1d9e0a541c62 -r 803b277e4894 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Sat Mar 06 01:26:12 2010 +0000 +++ b/hedgewars/hwengine.pas Sat Mar 06 10:54:24 2010 +0000 @@ -1,20 +1,20 @@ - (* - * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2007 Andrey Korotaev - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - *) +(* +* Hedgewars, a free turn based strategy game +* Copyright (c) 2004-2007 Andrey Korotaev +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; version 2 of the License +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA +*) {$INCLUDE "options.inc"} @@ -29,39 +29,39 @@ program hwengine; {$ENDIF} uses SDLh in 'SDLh.pas', - uConsts in 'uConsts.pas', - uGame in 'uGame.pas', - uMisc in 'uMisc.pas', - uStore in 'uStore.pas', - uWorld in 'uWorld.pas', - uIO in 'uIO.pas', - uGears in 'uGears.pas', - uVisualGears in 'uVisualGears.pas', - uConsole in 'uConsole.pas', - uKeys in 'uKeys.pas', - uTeams in 'uTeams.pas', - 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', - uLocale in 'uLocale.pas', - uAmmos in 'uAmmos.pas', - uSHA in 'uSHA.pas', - uFloat in 'uFloat.pas', - uStats in 'uStats.pas', - uChat in 'uChat.pas', - uTriggers in 'uTriggers.pas', - uLandTexture in 'uLandTexture.pas', - uScript in 'uScript.pas', - {$IFDEF IPHONEOS}PascalExports in 'PascalExports.pas',{$ENDIF} - sysutils; + uConsts in 'uConsts.pas', + uGame in 'uGame.pas', + uMisc in 'uMisc.pas', + uStore in 'uStore.pas', + uWorld in 'uWorld.pas', + uIO in 'uIO.pas', + uGears in 'uGears.pas', + uVisualGears in 'uVisualGears.pas', + uConsole in 'uConsole.pas', + uKeys in 'uKeys.pas', + uTeams in 'uTeams.pas', + 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', + uLocale in 'uLocale.pas', + uAmmos in 'uAmmos.pas', + uSHA in 'uSHA.pas', + uFloat in 'uFloat.pas', + uStats in 'uStats.pas', + uChat in 'uChat.pas', + uTriggers in 'uTriggers.pas', + uLandTexture in 'uLandTexture.pas', + uScript in 'uScript.pas', + {$IFDEF IPHONEOS}PascalExports in 'PascalExports.pas',{$ENDIF} + sysutils; // also: GSHandlers.inc // CCHandlers.inc @@ -92,84 +92,84 @@ var s: shortstring; {$ENDIF} begin - inc(RealTicks, Lag); + inc(RealTicks, Lag); - case GameState of - gsLandGen: begin - GenMap; - GameState:= gsStart; - end; - gsStart: begin - if HasBorder then DisableSomeWeapons; - AddClouds; - AssignHHCoords; - AddMiscGears; - StoreLoad; - InitWorld; - ResetKbd; - SoundLoad; - if GameType = gmtSave then - begin - isSEBackup:= isSoundEnabled; - isSoundEnabled:= false - end; - FinishProgress; - PlayMusic; - SetScale(zoom); - ScriptCall('onGameStart'); - GameState:= gsGame; - end; - gsConfirm, - gsGame: begin - DrawWorld(Lag); // never place between ProcessKbd and DoGameTick - bugs due to /put cmd and isCursorVisible - ProcessKbd; - DoGameTick(Lag); - ProcessVisualGears(Lag); - end; - gsChat: begin - DrawWorld(Lag); - DoGameTick(Lag); - ProcessVisualGears(Lag); - end; - gsExit: begin - isTerminated:= true; - end; - end; + case GameState of + gsLandGen: begin + GenMap; + GameState:= gsStart; + end; + gsStart: begin + if HasBorder then DisableSomeWeapons; + AddClouds; + AssignHHCoords; + AddMiscGears; + StoreLoad; + InitWorld; + ResetKbd; + SoundLoad; + if GameType = gmtSave then + begin + isSEBackup:= isSoundEnabled; + isSoundEnabled:= false + end; + FinishProgress; + PlayMusic; + SetScale(zoom); + ScriptCall('onGameStart'); + GameState:= gsGame; + end; + gsConfirm, + gsGame: begin + DrawWorld(Lag); // never place between ProcessKbd and DoGameTick - bugs due to /put cmd and isCursorVisible + ProcessKbd; + DoGameTick(Lag); + ProcessVisualGears(Lag); + end; + gsChat: begin + DrawWorld(Lag); + DoGameTick(Lag); + ProcessVisualGears(Lag); + end; + gsExit: begin + isTerminated:= true; + end; + end; - SDL_GL_SwapBuffers(); + SDL_GL_SwapBuffers(); {$IFDEF SDL13} - SDL_RenderPresent(); + SDL_RenderPresent(); {$ENDIF} {$IFNDEF IPHONEOS} - // not going to make captures on the iPhone - if flagMakeCapture then - begin - flagMakeCapture:= false; - s:= 'hw_' + FormatDateTime('YYYY-MM-DD_HH-mm-ss', Now()) + inttostr(GameTicks); - WriteLnToConsole('Saving ' + s + '...'); - MakeScreenshot(s); - //SDL_SaveBMP_RW(SDLPrimSurface, SDL_RWFromFile(Str2PChar(s), 'wb'), 1) - end; + // not going to make captures on the iPhone + if flagMakeCapture then + begin + flagMakeCapture:= false; + s:= 'hw_' + FormatDateTime('YYYY-MM-DD_HH-mm-ss', Now()) + inttostr(GameTicks); + WriteLnToConsole('Saving ' + s + '...'); + MakeScreenshot(s); + //SDL_SaveBMP_RW(SDLPrimSurface, SDL_RWFromFile(Str2PChar(s), 'wb'), 1) + end; {$ENDIF} end; //////////////////// procedure OnDestroy; begin - WriteLnToConsole('Freeing resources...'); - if isSoundEnabled then ReleaseSound(); - StoreRelease(); - FreeLand(); - ControllerClose(); - SendKB(); - CloseIPC(); - TTF_Quit(); - {$IFDEF SDL13}SDL_VideoQuit();{$ENDIF} - SDL_Quit(); - {$IFDEF IPHONEOS} - freeEverything(); - {$ENDIF} - exit(); + WriteLnToConsole('Freeing resources...'); + if isSoundEnabled then ReleaseSound(); + StoreRelease(); + FreeLand(); + ControllerClose(); + SendKB(); + CloseIPC(); + TTF_Quit(); + {$IFDEF SDL13}SDL_VideoQuit();{$ENDIF} + SDL_Quit(); + {$IFDEF IPHONEOS} + freeEverything(); + {$ENDIF} + exit(); end; /////////////////// @@ -177,50 +177,50 @@ var PrevTime, CurrTime: Longword; {$IFNDEF IPHONEOS}event: TSDL_Event;{$ENDIF} begin - PrevTime:= SDL_GetTicks; - repeat + PrevTime:= SDL_GetTicks; + repeat {$IFNDEF IPHONEOS} // have to remove this cycle because otherwise it segfaults at exit - while SDL_PollEvent(@event) <> 0 do - begin - case event.type_ of - SDL_KEYDOWN: if GameState = gsChat then KeyPressChat(event.key.keysym.unicode); + while SDL_PollEvent(@event) <> 0 do + begin + case event.type_ of + SDL_KEYDOWN: if GameState = gsChat then KeyPressChat(event.key.keysym.unicode); {$IFDEF SDL13} - SDL_WINDOWEVENT: + SDL_WINDOWEVENT: {$ELSE} - SDL_ACTIVEEVENT: + SDL_ACTIVEEVENT: {$ENDIF} - if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then - cHasFocus:= event.active.gain = 1; - //SDL_VIDEORESIZE: Resize(max(event.resize.w, 600), max(event.resize.h, 450)); - SDL_MOUSEBUTTONDOWN: if event.button.button = SDL_BUTTON_WHEELDOWN then uKeys.wheelDown:= true; - SDL_MOUSEBUTTONUP: if event.button.button = SDL_BUTTON_WHEELUP then uKeys.wheelUp:= true; - SDL_JOYAXISMOTION: ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); - SDL_JOYHATMOTION: ControllerHatEvent(event.jhat.which, event.jhat.hat, event.jhat.value); - SDL_JOYBUTTONDOWN: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, true); - SDL_JOYBUTTONUP: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, false); - SDL_QUITEV: isTerminated:= true - end; // end case event.type_ of - end; // end while SDL_PollEvent(@event) <> 0 do + if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then + cHasFocus:= event.active.gain = 1; + //SDL_VIDEORESIZE: Resize(max(event.resize.w, 600), max(event.resize.h, 450)); + SDL_MOUSEBUTTONDOWN: if event.button.button = SDL_BUTTON_WHEELDOWN then uKeys.wheelDown:= true; + SDL_MOUSEBUTTONUP: if event.button.button = SDL_BUTTON_WHEELUP then uKeys.wheelUp:= true; + SDL_JOYAXISMOTION: ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); + SDL_JOYHATMOTION: ControllerHatEvent(event.jhat.which, event.jhat.hat, event.jhat.value); + SDL_JOYBUTTONDOWN: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, true); + SDL_JOYBUTTONUP: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, false); + SDL_QUITEV: isTerminated:= true + end; // end case event.type_ of + end; // end while SDL_PollEvent(@event) <> 0 do {$ENDIF} - CurrTime:= SDL_GetTicks; - if PrevTime + cTimerInterval <= CurrTime then - begin - DoTimer(CurrTime - PrevTime); - PrevTime:= CurrTime - end else SDL_Delay(1); - if isTerminated = false then IPCCheckSock(); - until isTerminated; + CurrTime:= SDL_GetTicks; + if PrevTime + cTimerInterval <= CurrTime then + begin + DoTimer(CurrTime - PrevTime); + PrevTime:= CurrTime + end else SDL_Delay(1); + if isTerminated = false then IPCCheckSock(); + until isTerminated; - exit(); + exit(); end; ///////////////////////// procedure ShowMainWindow; begin - if cFullScreen then ParseCommand('fullscr 1', true) - else ParseCommand('fullscr 0', true); - SDL_ShowCursor(0) + if cFullScreen then ParseCommand('fullscr 1', true) + else ParseCommand('fullscr 0', true); + SDL_ShowCursor(0) end; /////////////// @@ -230,161 +230,163 @@ procedure Game;cdecl; export; {$ENDIF} var p: TPathType; - s: shortstring; + s: shortstring; begin {$IFDEF HWLIBRARY} - initEverything(); - Randomize(); + initEverything(); + Randomize(); - cScreenWidth:= 480; - cScreenHeight:= 320; - cInitWidth:= cScreenWidth; - cInitHeight:= cScreenHeight; - cBits:= 32; - cFullScreen:= false; - cVSyncInUse:= true; - cTimerInterval:= 8; - PathPrefix:= 'Data'; - cReducedQuality:= false; - cShowFPS:= true; - cInitVolume:= 100; + cScreenWidth:= 480; + cScreenHeight:= 320; + cInitWidth:= cScreenWidth; + cInitHeight:= cScreenHeight; + cBits:= 32; + cFullScreen:= false; + cVSyncInUse:= true; + cTimerInterval:= 8; + PathPrefix:= 'Data'; + cReducedQuality:= false; + cShowFPS:= true; + cInitVolume:= 100; - UserNick:= gameArgs[0]; - val(gameArgs[1], ipcPort); - isSoundEnabled:= gameArgs[2] = '1'; - isMusicEnabled:= gameArgs[3] = '1'; - cLocaleFName:= gameArgs[4]; - cAltDamage:= gameArgs[5] = '1'; + UserNick:= gameArgs[0]; + val(gameArgs[1], ipcPort); + isSoundEnabled:= gameArgs[2] = '1'; + isMusicEnabled:= gameArgs[3] = '1'; + cLocaleFName:= gameArgs[4]; + cAltDamage:= gameArgs[5] = '1'; {$ENDIF} - for p:= Succ(Low(TPathType)) to High(TPathType) do - if p <> ptMapCurrent then Pathz[p]:= PathPrefix + '/' + Pathz[p]; - - WriteToConsole('Init SDL... '); - SDLTry(SDL_Init(SDL_INIT_VIDEO) >= 0, true); - WriteLnToConsole(msgOK); + for p:= Succ(Low(TPathType)) to High(TPathType) do + if p <> ptMapCurrent then Pathz[p]:= PathPrefix + '/' + Pathz[p]; + + WriteToConsole('Init SDL... '); + SDLTry(SDL_Init(SDL_INIT_VIDEO) >= 0, true); + WriteLnToConsole(msgOK); - SDL_EnableUNICODE(1); + SDL_EnableUNICODE(1); - WriteToConsole('Init SDL_ttf... '); - SDLTry(TTF_Init() <> -1, true); - WriteLnToConsole(msgOK); + WriteToConsole('Init SDL_ttf... '); + SDLTry(TTF_Init() <> -1, true); + WriteLnToConsole(msgOK); - ShowMainWindow(); + ShowMainWindow(); - AddProgress(); + AddProgress(); - ControllerInit(); // has to happen before InitKbdKeyTable to map keys - InitKbdKeyTable(); + ControllerInit(); // has to happen before InitKbdKeyTable to map keys + InitKbdKeyTable(); - if recordFileName = '' then - InitIPC; - WriteLnToConsole(msgGettingConfig); + if recordFileName = '' then + InitIPC; + WriteLnToConsole(msgGettingConfig); - LoadLocale(Pathz[ptLocale] + '/en.txt'); // Do an initial load with english - if cLocaleFName <> 'en.txt' then + LoadLocale(Pathz[ptLocale] + '/en.txt'); // Do an initial load with english + if cLocaleFName <> 'en.txt' then begin // Try two letter locale first before trying specific locale overrides if (Length(cLocaleFName) > 6) and (Copy(cLocaleFName,1,2)+'.txt' <> 'en.txt') then LoadLocale(Pathz[ptLocale] + '/' + Copy(cLocaleFName,1,2)+'.txt'); - LoadLocale(Pathz[ptLocale] + '/' + cLocaleFName); + LoadLocale(Pathz[ptLocale] + '/' + cLocaleFName); end; - if recordFileName = '' then - SendIPCAndWaitReply('C') // ask for game config - else - LoadRecordFromFile(recordFileName); + if recordFileName = '' then + SendIPCAndWaitReply('C') // ask for game config + else + LoadRecordFromFile(recordFileName); - ScriptOnGameInit; + ScriptOnGameInit; - s:= 'eproto ' + inttostr(cNetProtoVersion); - SendIPCRaw(@s[0], Length(s) + 1); // send proto version + s:= 'eproto ' + inttostr(cNetProtoVersion); + SendIPCRaw(@s[0], Length(s) + 1); // send proto version + + InitTeams(); + AssignStores(); - InitTeams(); - AssignStores(); + if isSoundEnabled then + InitSound(); - if isSoundEnabled then - InitSound(); + isDeveloperMode:= false; - isDeveloperMode:= false; + TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); - TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); + ParseCommand('rotmask', true); - MainLoop(); - OnDestroy(); - exit(); + MainLoop(); + OnDestroy(); + exit(); end; procedure initEverything; begin - init_uConsts(); - init_uMisc(); - init_uConsole(); // MUST happen after uMisc - - init_uAI(); - //uAIActions does not need initialization - //uAIAmmoTests does not need initialization - init_uAIMisc(); - init_uAmmos(); - init_uChat(); - init_uCollisions(); - //uFloat does not need initialization - //uGame does not need initialization - init_uGears(); - init_uIO(); - init_uKeys(); - init_uLand(); - //uLandGraphics does not need initialization - //uLandObjects does not need initialization - //uLandTemplates does not need initialization - //uLandTexture does not need initialization - //uLocale does not need initialization - init_uRandom(); - //uSHA does not need initialization - init_uSound(); - init_uStats(); - init_uStore(); - init_uTeams(); - init_uTriggers(); - init_uVisualGears(); - init_uWorld(); - init_uScript(); + init_uConsts(); + init_uMisc(); + init_uConsole(); // MUST happen after uMisc + + init_uAI(); + //uAIActions does not need initialization + //uAIAmmoTests does not need initialization + init_uAIMisc(); + init_uAmmos(); + init_uChat(); + init_uCollisions(); + //uFloat does not need initialization + //uGame does not need initialization + init_uGears(); + init_uIO(); + init_uKeys(); + init_uLand(); + //uLandGraphics does not need initialization + //uLandObjects does not need initialization + //uLandTemplates does not need initialization + //uLandTexture does not need initialization + //uLocale does not need initialization + init_uRandom(); + //uSHA does not need initialization + init_uSound(); + init_uStats(); + init_uStore(); + init_uTeams(); + init_uTriggers(); + init_uVisualGears(); + init_uWorld(); + init_uScript(); end; procedure freeEverything; begin - free_uWorld(); - free_uVisualGears(); //stub - free_uTriggers(); //stub - free_uTeams(); - free_uStore(); - free_uStats(); //stub - free_uSound(); //stub - //uSHA does not need to be freed - free_uRandom(); //stub - //uLocale does not need to be freed - //uLandTemplates does not need to be freed - //uLandTexture does not need to be freed - //uLandObjects does not need to be freed - //uLandGraphics does not need to be freed - free_uLand(); - free_uKeys(); //stub - free_uIO(); - free_uGears(); - //uGame does not need to be freed - //uFloat does not need to be freed - free_uCollisions(); - free_uChat(); - free_uAmmos(); - free_uAIMisc(); //stub - //uAIAmmoTests does not need to be freed - //uAIActions does not need to be freed - free_uAI(); //stub + free_uWorld(); + free_uVisualGears(); //stub + free_uTriggers(); //stub + free_uTeams(); + free_uStore(); + free_uStats(); //stub + free_uSound(); //stub + //uSHA does not need to be freed + free_uRandom(); //stub + //uLocale does not need to be freed + //uLandTemplates does not need to be freed + //uLandTexture does not need to be freed + //uLandObjects does not need to be freed + //uLandGraphics does not need to be freed + free_uLand(); + free_uKeys(); //stub + free_uIO(); + free_uGears(); + //uGame does not need to be freed + //uFloat does not need to be freed + free_uCollisions(); + free_uChat(); + free_uAmmos(); + free_uAIMisc(); //stub + //uAIAmmoTests does not need to be freed + //uAIActions does not need to be freed + free_uAI(); //stub - free_uConsole(); - free_uMisc(); - free_uConsts(); //stub - free_uScript(); + free_uConsole(); + free_uMisc(); + free_uConsts(); //stub + free_uScript(); end; {$IFNDEF HWLIBRARY} @@ -393,50 +395,50 @@ var Preview: TPreview; h: byte; begin - InitIPC; - IPCWaitPongEvent; - TryDo(InitStepsFlags = cifRandomize, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); + InitIPC; + IPCWaitPongEvent; + TryDo(InitStepsFlags = cifRandomize, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); - Preview:= GenPreview; - WriteLnToConsole('Sending preview...'); - SendIPCRaw(@Preview, sizeof(Preview)); - h:= MaxHedgehogs; - SendIPCRaw(@h, sizeof(h)); - WriteLnToConsole('Preview sent, disconnect'); - CloseIPC(); + Preview:= GenPreview; + WriteLnToConsole('Sending preview...'); + SendIPCRaw(@Preview, sizeof(Preview)); + h:= MaxHedgehogs; + SendIPCRaw(@h, sizeof(h)); + WriteLnToConsole('Preview sent, disconnect'); + CloseIPC(); end; //////////////////////////////// procedure Resize(w, h: LongInt); begin - cScreenWidth:= w; - cScreenHeight:= h; - if cFullScreen then - ParseCommand('/fullscr 1', true) - else - ParseCommand('/fullscr 0', true); + cScreenWidth:= w; + cScreenHeight:= h; + if cFullScreen then + ParseCommand('/fullscr 1', true) + else + ParseCommand('/fullscr 0', true); end; ///////////////////// procedure DisplayUsage; var i: LongInt; begin - WriteLn('Wrong argument format: correct configurations is'); - WriteLn(); - WriteLn(' hwengine [option]'); - WriteLn(); - WriteLn('where [option] must be specified either as'); - WriteLn(' --set-video [screen width] [screen height] [color dept]'); - WriteLn(' --set-audio [volume] [enable music] [enable sounds]'); - WriteLn(' --set-other [language file] [full screen] [show FPS]'); - WriteLn(' --set-multimedia [screen height] [screen width] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen]'); - WriteLn(' --set-everything [screen height] [screen width] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality]'); - WriteLn(); - WriteLn('Read documentation online at http://www.hedgewars.org/node/1465 for more information'); - Write('parsed command: '); - for i:=0 to ParamCount do - Write(ParamStr(i) + ' '); - WriteLn(); + WriteLn('Wrong argument format: correct configurations is'); + WriteLn(); + WriteLn(' hwengine [option]'); + WriteLn(); + WriteLn('where [option] must be specified either as'); + WriteLn(' --set-video [screen width] [screen height] [color dept]'); + WriteLn(' --set-audio [volume] [enable music] [enable sounds]'); + WriteLn(' --set-other [language file] [full screen] [show FPS]'); + WriteLn(' --set-multimedia [screen height] [screen width] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen]'); + WriteLn(' --set-everything [screen height] [screen width] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality]'); + WriteLn(); + WriteLn('Read documentation online at http://www.hedgewars.org/node/1465 for more information'); + Write('parsed command: '); + for i:=0 to ParamCount do + Write(ParamStr(i) + ' '); + WriteLn(); end; //////////////////// @@ -446,124 +448,124 @@ {$ENDIF} begin - case ParamCount of - 18: begin - val(ParamStr(2), cScreenWidth); - val(ParamStr(3), cScreenHeight); - cInitWidth:= cScreenWidth; - cInitHeight:= cScreenHeight; - cBitsStr:= ParamStr(4); - val(cBitsStr, cBits); - val(ParamStr(5), ipcPort); - cFullScreen:= ParamStr(6) = '1'; - isSoundEnabled:= ParamStr(7) = '1'; - cVSyncInUse:= ParamStr(8) = '1'; - cWeaponTooltips:= ParamStr(9) = '1'; - cLocaleFName:= ParamStr(10); - val(ParamStr(11), cInitVolume); - val(ParamStr(12), cTimerInterval); - PathPrefix:= ParamStr(13); - cShowFPS:= ParamStr(14) = '1'; - cAltDamage:= ParamStr(15) = '1'; - UserNick:= DecodeBase64(ParamStr(16)); - isMusicEnabled:= ParamStr(17) = '1'; - cReducedQuality:= ParamStr(18) = '1'; - end; - 3: begin - val(ParamStr(2), ipcPort); - GameType:= gmtLandPreview; - if ParamStr(3) <> 'landpreview' then - OutError(errmsgShouldntRun, true); - end; - 2: begin - PathPrefix:= ParamStr(1); - recordFileName:= ParamStr(2); - end; - 6: begin - PathPrefix:= ParamStr(1); - recordFileName:= ParamStr(2); + case ParamCount of + 18: begin + val(ParamStr(2), cScreenWidth); + val(ParamStr(3), cScreenHeight); + cInitWidth:= cScreenWidth; + cInitHeight:= cScreenHeight; + cBitsStr:= ParamStr(4); + val(cBitsStr, cBits); + val(ParamStr(5), ipcPort); + cFullScreen:= ParamStr(6) = '1'; + isSoundEnabled:= ParamStr(7) = '1'; + cVSyncInUse:= ParamStr(8) = '1'; + cWeaponTooltips:= ParamStr(9) = '1'; + cLocaleFName:= ParamStr(10); + val(ParamStr(11), cInitVolume); + val(ParamStr(12), cTimerInterval); + PathPrefix:= ParamStr(13); + cShowFPS:= ParamStr(14) = '1'; + cAltDamage:= ParamStr(15) = '1'; + UserNick:= DecodeBase64(ParamStr(16)); + isMusicEnabled:= ParamStr(17) = '1'; + cReducedQuality:= ParamStr(18) = '1'; + end; + 3: begin + val(ParamStr(2), ipcPort); + GameType:= gmtLandPreview; + if ParamStr(3) <> 'landpreview' then + OutError(errmsgShouldntRun, true); + end; + 2: begin + PathPrefix:= ParamStr(1); + recordFileName:= ParamStr(2); + end; + 6: begin + PathPrefix:= ParamStr(1); + recordFileName:= ParamStr(2); - if ParamStr(3) = '--set-video' then - begin - val(ParamStr(4), cScreenWidth); - val(ParamStr(5), cScreenHeight); - cInitWidth:= cScreenWidth; - cInitHeight:= cScreenHeight; - cBitsStr:= ParamStr(6); - val(cBitsStr, cBits); - end - else - begin - if ParamStr(3) = '--set-audio' then - begin - val(ParamStr(4), cInitVolume); - isMusicEnabled:= ParamStr(5) = '1'; - isSoundEnabled:= ParamStr(6) = '1'; - end - else - begin - if ParamStr(3) = '--set-other' then - begin - cLocaleFName:= ParamStr(4); - cFullScreen:= ParamStr(5) = '1'; - cShowFPS:= ParamStr(6) = '1'; - end - else GameType:= gmtSyntax; - end - end; - end; - 11: begin - PathPrefix:= ParamStr(1); - recordFileName:= ParamStr(2); + if ParamStr(3) = '--set-video' then + begin + val(ParamStr(4), cScreenWidth); + val(ParamStr(5), cScreenHeight); + cInitWidth:= cScreenWidth; + cInitHeight:= cScreenHeight; + cBitsStr:= ParamStr(6); + val(cBitsStr, cBits); + end + else + begin + if ParamStr(3) = '--set-audio' then + begin + val(ParamStr(4), cInitVolume); + isMusicEnabled:= ParamStr(5) = '1'; + isSoundEnabled:= ParamStr(6) = '1'; + end + else + begin + if ParamStr(3) = '--set-other' then + begin + cLocaleFName:= ParamStr(4); + cFullScreen:= ParamStr(5) = '1'; + cShowFPS:= ParamStr(6) = '1'; + end + else GameType:= gmtSyntax; + end + end; + end; + 11: begin + PathPrefix:= ParamStr(1); + recordFileName:= ParamStr(2); - if ParamStr(3) = '--set-multimedia' then - begin - val(ParamStr(4), cScreenWidth); - val(ParamStr(5), cScreenHeight); - cInitWidth:= cScreenWidth; - cInitHeight:= cScreenHeight; - cBitsStr:= ParamStr(6); - val(cBitsStr, cBits); - val(ParamStr(7), cInitVolume); - isMusicEnabled:= ParamStr(8) = '1'; - isSoundEnabled:= ParamStr(9) = '1'; - cLocaleFName:= ParamStr(10); - cFullScreen:= ParamStr(11) = '1'; - end - else GameType:= gmtSyntax; - end; - 15: begin - PathPrefix:= ParamStr(1); - recordFileName:= ParamStr(2); - if ParamStr(3) = '--set-everything' then - begin - val(ParamStr(4), cScreenWidth); - val(ParamStr(5), cScreenHeight); - cInitWidth:= cScreenWidth; - cInitHeight:= cScreenHeight; - cBitsStr:= ParamStr(6); - val(cBitsStr, cBits); - val(ParamStr(7), cInitVolume); - isMusicEnabled:= ParamStr(8) = '1'; - isSoundEnabled:= ParamStr(9) = '1'; - cLocaleFName:= ParamStr(10); - cFullScreen:= ParamStr(11) = '1'; - cAltDamage:= ParamStr(12) = '1'; - cShowFPS:= ParamStr(13) = '1'; - val(ParamStr(14), cTimerInterval); - cReducedQuality:= ParamStr(15) = '1'; - end - else GameType:= gmtSyntax; - end; - else GameType:= gmtSyntax; - end; + if ParamStr(3) = '--set-multimedia' then + begin + val(ParamStr(4), cScreenWidth); + val(ParamStr(5), cScreenHeight); + cInitWidth:= cScreenWidth; + cInitHeight:= cScreenHeight; + cBitsStr:= ParamStr(6); + val(cBitsStr, cBits); + val(ParamStr(7), cInitVolume); + isMusicEnabled:= ParamStr(8) = '1'; + isSoundEnabled:= ParamStr(9) = '1'; + cLocaleFName:= ParamStr(10); + cFullScreen:= ParamStr(11) = '1'; + end + else GameType:= gmtSyntax; + end; + 15: begin + PathPrefix:= ParamStr(1); + recordFileName:= ParamStr(2); + if ParamStr(3) = '--set-everything' then + begin + val(ParamStr(4), cScreenWidth); + val(ParamStr(5), cScreenHeight); + cInitWidth:= cScreenWidth; + cInitHeight:= cScreenHeight; + cBitsStr:= ParamStr(6); + val(cBitsStr, cBits); + val(ParamStr(7), cInitVolume); + isMusicEnabled:= ParamStr(8) = '1'; + isSoundEnabled:= ParamStr(9) = '1'; + cLocaleFName:= ParamStr(10); + cFullScreen:= ParamStr(11) = '1'; + cAltDamage:= ParamStr(12) = '1'; + cShowFPS:= ParamStr(13) = '1'; + val(ParamStr(14), cTimerInterval); + cReducedQuality:= ParamStr(15) = '1'; + end + else GameType:= gmtSyntax; + end; + else GameType:= gmtSyntax; + end; {$IFDEF DEBUGFILE} - AddFileLog('Prefix: "' + PathPrefix +'"'); - for i:= 0 to ParamCount do - AddFileLog(inttostr(i) + ': ' + ParamStr(i)); + AddFileLog('Prefix: "' + PathPrefix +'"'); + for i:= 0 to ParamCount do + AddFileLog(inttostr(i) + ': ' + ParamStr(i)); {$IFDEF IPHONEOS} - WriteLnToConsole('Saving debug file at: ' + IPH_getDocumentsPath()); + WriteLnToConsole('Saving debug file at: ' + IPH_getDocumentsPath()); {$ENDIF} {$ENDIF} end; @@ -572,20 +574,20 @@ //////////////////////////////////////////////////////////////////////////////// begin - initEverything(); - WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')'); - - GetParams(); - Randomize(); + initEverything(); + WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')'); + + GetParams(); + Randomize(); - if GameType = gmtLandPreview then GenLandPreview() - else if GameType = gmtSyntax then DisplayUsage() - else Game(); - freeEverything(); - - if GameType = gmtSyntax then - ExitCode:= 1 - else - ExitCode:= 0; + if GameType = gmtLandPreview then GenLandPreview() + else if GameType = gmtSyntax then DisplayUsage() + else Game(); + freeEverything(); + + if GameType = gmtSyntax then + ExitCode:= 1 + else + ExitCode:= 0; {$ENDIF} end.