hedgewars/hwengine.pas
changeset 2947 803b277e4894
parent 2905 f3c79f7193a9
child 2948 3f21a9dc93d0
--- 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 <unC0Rr@gmail.com>
- *
- * 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 <unC0Rr@gmail.com>
+*
+* 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 <path to data folder> <path to replay file> [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 <path to data folder> <path to replay file> [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.