hedgewars/hwengine.pas
author nemo
Sun, 24 Jan 2010 16:46:06 +0000
changeset 2712 8f4527c9137c
parent 2705 2b5625c4ec16
child 2714 c85ffe57d971
permissions -rw-r--r--
Minor tweak, try to make long flavour text last longer, move the hurt self messages to unused messages group, so they don't get wiped by crate an instant later.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
     1
 (*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 1022
diff changeset
     2
 * Hedgewars, a free turn based strategy game
393
db01cc79f278 Update copyright information
unc0rr
parents: 377
diff changeset
     3
 * Copyright (c) 2004-2007 Andrey Korotaev <unC0Rr@gmail.com>
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
     4
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
     8
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    12
 * GNU General Public License for more details.
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    13
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    14
 * You should have received a copy of the GNU General Public License
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    15
 * along with this program; if not, write to the Free Software
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    17
 *)
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    18
2599
c7153d2348f3 move compiler directives to standard pascal
koda
parents: 2591
diff changeset
    19
{$INCLUDE "options.inc"}
2587
0dfa56a8513c fix a segfault in the iphone simulator by moving options.inc at the beginning of the file
koda
parents: 2586
diff changeset
    20
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    21
{$IFDEF IPHONEOS}
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    22
unit hwengine;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    23
interface
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    24
{$ELSE}
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    25
program hwengine;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    26
{$ENDIF}
2690
8e83c7e31720 move mixed functions in PascalExports
koda
parents: 2689
diff changeset
    27
uses	SDLh in 'SDLh.pas',
1524
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    28
	uConsts in 'uConsts.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    29
	uGame in 'uGame.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    30
	uMisc in 'uMisc.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    31
	uStore in 'uStore.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    32
	uWorld in 'uWorld.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    33
	uIO in 'uIO.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    34
	uGears in 'uGears.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    35
	uVisualGears in 'uVisualGears.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    36
	uConsole in 'uConsole.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    37
	uKeys in 'uKeys.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    38
	uTeams in 'uTeams.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    39
	uSound in 'uSound.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    40
	uRandom in 'uRandom.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    41
	uAI in 'uAI.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    42
	uAIMisc in 'uAIMisc.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    43
	uAIAmmoTests in 'uAIAmmoTests.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    44
	uAIActions in 'uAIActions.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    45
	uCollisions in 'uCollisions.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    46
	uLand in 'uLand.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    47
	uLandTemplates in 'uLandTemplates.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    48
	uLandObjects in 'uLandObjects.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    49
	uLandGraphics in 'uLandGraphics.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    50
	uLocale in 'uLocale.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    51
	uAmmos in 'uAmmos.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    52
	uSHA in 'uSHA.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    53
	uFloat in 'uFloat.pas',
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
    54
	uStats in 'uStats.pas',
1807
795f97007833 Split land texture into small ones:
unc0rr
parents: 1791
diff changeset
    55
	uChat in 'uChat.pas',
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
    56
	uTriggers in 'uTriggers.pas',
2690
8e83c7e31720 move mixed functions in PascalExports
koda
parents: 2689
diff changeset
    57
	uLandTexture in 'uLandTexture.pas'
8e83c7e31720 move mixed functions in PascalExports
koda
parents: 2689
diff changeset
    58
	{$IFDEF IPHONEOS}
8e83c7e31720 move mixed functions in PascalExports
koda
parents: 2689
diff changeset
    59
	, PascalExports in 'PascalExports.pas'
8e83c7e31720 move mixed functions in PascalExports
koda
parents: 2689
diff changeset
    60
	{$ENDIF}
8e83c7e31720 move mixed functions in PascalExports
koda
parents: 2689
diff changeset
    61
	;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    62
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    63
// also: GSHandlers.inc
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    64
//       CCHandlers.inc
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    65
//       HHHandlers.inc
357
165a040e4cfa - Fix Blow Torch and Air Attack
unc0rr
parents: 355
diff changeset
    66
//       SinTable.inc
271
f2f9a3d5b441 Protocol version sets in CMake
unc0rr
parents: 268
diff changeset
    67
//       proto.inc
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    68
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    69
{$IFDEF IPHONEOS}
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
    70
type arrayofpchar = array[0..6] of PChar;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    71
procedure DoTimer(Lag: LongInt);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    72
procedure OnDestroy;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    73
procedure MainLoop;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    74
procedure ShowMainWindow;
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
    75
procedure Game(gameArgs: arrayofpchar); cdecl; export;
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
    76
procedure initEverything;
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
    77
procedure freeEverything;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    78
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    79
implementation
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    80
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    81
{$ELSE}
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    82
procedure OnDestroy; forward;
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
    83
procedure freeEverything; forward;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    84
{$ENDIF}
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    85
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    86
////////////////////////////////
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 357
diff changeset
    87
procedure DoTimer(Lag: LongInt);
2243
b4764993f833 additional touch support and nemo's reduced land array size
koda
parents: 2191
diff changeset
    88
{$IFNDEF IPHONEOS}
1080
8735046fc698 Repair screenshots capture on 'C' key press
unc0rr
parents: 1066
diff changeset
    89
var s: string;
2243
b4764993f833 additional touch support and nemo's reduced land array size
koda
parents: 2191
diff changeset
    90
{$ENDIF}
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    91
begin
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    92
	inc(RealTicks, Lag);
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 529
diff changeset
    93
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    94
	case GameState of
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    95
		gsLandGen: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    96
				GenMap;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    97
				GameState:= gsStart;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    98
				end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
    99
		gsStart: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   100
				if HasBorder then DisableSomeWeapons;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   101
				AddClouds;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   102
				AssignHHCoords;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   103
				AddMiscGears;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   104
				StoreLoad;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   105
				InitWorld;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   106
				ResetKbd;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   107
				SoundLoad;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   108
				if GameType = gmtSave then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   109
					begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   110
					isSEBackup:= isSoundEnabled;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   111
					isSoundEnabled:= false
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   112
					end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   113
				FinishProgress;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   114
				PlayMusic;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   115
				SetScale(zoom);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   116
				GameState:= gsGame;
1524
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
   117
				end;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   118
		gsConfirm,
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   119
		gsGame: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   120
				DrawWorld(Lag); // never place between ProcessKbd and DoGameTick - bugs due to /put cmd and isCursorVisible
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   121
				ProcessKbd;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   122
				DoGameTick(Lag);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   123
				ProcessVisualGears(Lag);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   124
				end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   125
		gsChat: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   126
				DrawWorld(Lag);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   127
				DoGameTick(Lag);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   128
				ProcessVisualGears(Lag);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   129
				end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   130
		gsExit: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   131
				isTerminated:= true;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   132
				end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   133
		end;
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 529
diff changeset
   134
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   135
	SDL_GL_SwapBuffers();
2171
8208946331ba Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents: 2162
diff changeset
   136
{$IFNDEF IPHONEOS}
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   137
	// not going to make captures on the iPhone
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   138
	if flagMakeCapture then
1524
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
   139
	begin
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   140
		flagMakeCapture:= false;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   141
		s:= 'hw_' + cSeed + '_' + inttostr(GameTicks) + '.tga';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   142
		WriteLnToConsole('Saving ' + s);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   143
		MakeScreenshot(s);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   144
		//SDL_SaveBMP_RW(SDLPrimSurface, SDL_RWFromFile(Str2PChar(s), 'wb'), 1)
1524
5a652a465559 Draw world before processing gears, as this should improve performance by introducing cpu-gpu parallelizm
unc0rr
parents: 1128
diff changeset
   145
	end;
2171
8208946331ba Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents: 2162
diff changeset
   146
{$ENDIF}
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   147
end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   148
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   149
////////////////////
79
29b477319854 - New test map
unc0rr
parents: 74
diff changeset
   150
procedure OnDestroy;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   151
begin
2692
ce9992075118 better network support + initial work for returning to frontend
koda
parents: 2691
diff changeset
   152
	WriteLnToConsole('Freeing resources...');
2688
174c94b8ea72 move all sdl source files in a proper directory
koda
parents: 2682
diff changeset
   153
	if isSoundEnabled then ReleaseSound();
174c94b8ea72 move all sdl source files in a proper directory
koda
parents: 2682
diff changeset
   154
	StoreRelease();
174c94b8ea72 move all sdl source files in a proper directory
koda
parents: 2682
diff changeset
   155
	FreeLand();
2692
ce9992075118 better network support + initial work for returning to frontend
koda
parents: 2691
diff changeset
   156
	ControllerClose();
2688
174c94b8ea72 move all sdl source files in a proper directory
koda
parents: 2682
diff changeset
   157
	SendKB();
174c94b8ea72 move all sdl source files in a proper directory
koda
parents: 2682
diff changeset
   158
	CloseIPC();
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   159
	freeEverything();
2688
174c94b8ea72 move all sdl source files in a proper directory
koda
parents: 2682
diff changeset
   160
	TTF_Quit();
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   161
	{$IFDEF SDL13}SDL_VideoQuit();{$ENDIF}
2688
174c94b8ea72 move all sdl source files in a proper directory
koda
parents: 2682
diff changeset
   162
	SDL_Quit();
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   163
	exit();
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   164
end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   165
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   166
///////////////////
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   167
procedure MainLoop; 
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   168
var PrevTime,
188
a7c2a61524c2 Cardinal -> Longword
unc0rr
parents: 183
diff changeset
   169
    CurrTime: Longword;
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   170
    {$IFNDEF IPHONEOS}event: TSDL_Event;{$ENDIF}
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   171
begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   172
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   173
	PrevTime:= SDL_GetTicks;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   174
	repeat
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   175
{$IFNDEF IPHONEOS}
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   176
// have to remove this cycle because otherwise it segfaults at exit
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   177
		while SDL_PollEvent(@event) <> 0 do
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   178
		begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   179
			case event.type_ of
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   180
				SDL_KEYDOWN: if GameState = gsChat then KeyPressChat(event.key.keysym.unicode);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   181
{$IFDEF SDL13}
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   182
				SDL_WINDOWEVENT:
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   183
{$ELSE}
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   184
				SDL_ACTIVEEVENT:
2569
6f77dd38294a ifdefs all the way
koda
parents: 2568
diff changeset
   185
{$ENDIF}
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   186
					if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   187
						cHasFocus:= event.active.gain = 1;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   188
				//SDL_VIDEORESIZE: Resize(max(event.resize.w, 600), max(event.resize.h, 450));
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   189
				SDL_MOUSEBUTTONDOWN: if event.button.button = SDL_BUTTON_WHEELDOWN then uKeys.wheelDown:= true;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   190
				SDL_MOUSEBUTTONUP: if event.button.button = SDL_BUTTON_WHEELUP then uKeys.wheelUp:= true;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   191
				SDL_JOYAXISMOTION: ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   192
				SDL_JOYHATMOTION: ControllerHatEvent(event.jhat.which, event.jhat.hat, event.jhat.value);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   193
				SDL_JOYBUTTONDOWN: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, true);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   194
				SDL_JOYBUTTONUP: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, false);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   195
				SDL_QUITEV: isTerminated:= true
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   196
			end; // end case event.type_ of
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   197
		end; // end while SDL_PollEvent(@event) <> 0 do
2390
57fb33ab04a4 converts some gl calls to gles
koda
parents: 2379
diff changeset
   198
{$ENDIF}
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   199
		CurrTime:= SDL_GetTicks;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   200
		if PrevTime + cTimerInterval <= CurrTime then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   201
		begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   202
			DoTimer(CurrTime - PrevTime);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   203
			PrevTime:= CurrTime
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   204
		end else SDL_Delay(1);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   205
		if isTerminated = false then IPCCheckSock();
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   206
	until isTerminated;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   207
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   208
	exit();
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   209
end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   210
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   211
/////////////////////////
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   212
procedure ShowMainWindow;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   213
begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   214
	if cFullScreen then ParseCommand('fullscr 1', true)
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   215
	else ParseCommand('fullscr 0', true);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   216
	SDL_ShowCursor(0)
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   217
end;
2591
c6597b65caea other controls implementation + sdlh revisited (once again)
koda
parents: 2590
diff changeset
   218
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   219
///////////////
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   220
{$IFDEF IPHONEOS}
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   221
procedure Game(gameArgs: arrayofpchar); cdecl; export;
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   222
{$ELSE}
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   223
procedure Game;cdecl; export;
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   224
{$ENDIF}
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   225
var	p: TPathType;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   226
	s: shortstring;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   227
begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   228
{$IFDEF IPHONEOS}
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   229
	initEverything();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   230
	Randomize();
2591
c6597b65caea other controls implementation + sdlh revisited (once again)
koda
parents: 2590
diff changeset
   231
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   232
	val('320', cScreenWidth);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   233
	val('480', cScreenHeight);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   234
	cInitWidth:= cScreenWidth;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   235
	cInitHeight:= cScreenHeight;
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   236
	cBitsStr:= '32';
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   237
	val(cBitsStr, cBits);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   238
	cFullScreen:= true;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   239
	cVSyncInUse:= true;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   240
	val('8', cTimerInterval);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   241
	PathPrefix:= 'Data';
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   242
	cReducedQuality:= false;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   243
	cShowFPS:= true;
2702
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   244
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   245
	UserNick:= gameArgs[0];
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   246
	val(gameArgs[1], ipcPort);
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   247
	isSoundEnabled:= gameArgs[2] = '1';
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   248
	isMusicEnabled:= gameArgs[3] = '1';
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   249
	cLocaleFName:= gameArgs[4];
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   250
	val(gameArgs[5], cInitVolume);
48fc46a922fd rewrite gamesetup to use less memory, rename effects to sound plus some nice actions, settings work in game again
koda
parents: 2699
diff changeset
   251
	cAltDamage:= gameArgs[6] = '1';
2600
7b21daf84933 revamped SDLh.pas
koda
parents: 2599
diff changeset
   252
{$ENDIF}
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   253
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   254
	for p:= Succ(Low(TPathType)) to High(TPathType) do
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   255
		if p <> ptMapCurrent then Pathz[p]:= PathPrefix + '/' + Pathz[p];
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   256
		
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   257
	WriteToConsole('Init SDL... ');
2705
2b5625c4ec16 fix a nasty 196 bytes memory leak in engine, plus other stuff for iphone frontend
koda
parents: 2702
diff changeset
   258
	SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true);
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   259
	WriteLnToConsole(msgOK);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   260
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   261
	SDL_EnableUNICODE(1);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   262
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   263
	WriteToConsole('Init SDL_ttf... ');
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   264
	SDLTry(TTF_Init <> -1, true);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   265
	WriteLnToConsole(msgOK);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   266
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   267
	ShowMainWindow;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   268
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   269
	AddProgress;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   270
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   271
	ControllerInit; // has to happen before InitKbdKeyTable to map keys
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   272
	InitKbdKeyTable;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   273
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   274
	if recordFileName = '' then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   275
		InitIPC;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   276
	WriteLnToConsole(msgGettingConfig);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   277
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   278
	if cLocaleFName <> 'en.txt' then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   279
		LoadLocale(Pathz[ptLocale] + '/en.txt');
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   280
	LoadLocale(Pathz[ptLocale] + '/' + cLocaleFName);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   281
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   282
	if recordFileName = '' then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   283
		SendIPCAndWaitReply('C')        // ask for game config
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   284
	else
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   285
		LoadRecordFromFile(recordFileName);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   286
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   287
	s:= 'eproto ' + inttostr(cNetProtoVersion);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   288
	SendIPCRaw(@s[0], Length(s) + 1); // send proto version
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   289
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   290
	InitTeams;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   291
	AssignStores;
2590
e7e87e3c67db touch control completely revamped
koda
parents: 2587
diff changeset
   292
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   293
	if isSoundEnabled then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   294
		InitSound;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   295
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   296
	isDeveloperMode:= false;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   297
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   298
	TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   299
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   300
	MainLoop();
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   301
	OnDestroy();
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   302
	exit();
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   303
end;
2590
e7e87e3c67db touch control completely revamped
koda
parents: 2587
diff changeset
   304
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   305
procedure initEverything;
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   306
begin
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   307
	init_uConsts();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   308
	init_uMisc();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   309
	init_uConsole();	// MUST happen after uMisc
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   310
	init_uStore();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   311
	init_uTeams();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   312
	init_uGears();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   313
	init_uVisualGears();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   314
	init_uLand();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   315
	init_uIO();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   316
	init_uWorld();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   317
	init_uRandom;
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   318
	init_uTriggers;
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   319
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   320
end;
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   321
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   322
procedure freeEverything;
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   323
begin
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   324
	//free_uConts(); not necessary
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   325
	free_uConsole();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   326
	free_uMisc();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   327
	free_uTeams();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   328
	free_uGears();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   329
	//free_uVisualGears(); not necessary
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   330
	free_uLand();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   331
	//free_uWorld(); not necessary
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   332
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   333
end;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   334
{$IFNDEF IPHONEOS}
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   335
/////////////////////////
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   336
procedure GenLandPreview;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   337
var Preview: TPreview;
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   338
    h: byte;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   339
begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   340
	InitIPC;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   341
	IPCWaitPongEvent;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   342
	TryDo(InitStepsFlags = cifRandomize, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   343
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   344
	Preview:= GenPreview;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   345
	WriteLnToConsole('Sending preview...');
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   346
	SendIPCRaw(@Preview, sizeof(Preview));
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   347
	h:= MaxHedgehogs;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   348
	SendIPCRaw(@h, sizeof(h));
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   349
	WriteLnToConsole('Preview sent, disconnect');
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   350
	CloseIPC();
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   351
end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   352
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   353
////////////////////////////////
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   354
procedure Resize(w, h: LongInt);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   355
begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   356
	cScreenWidth:= w;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   357
	cScreenHeight:= h;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   358
	if cFullScreen then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   359
		ParseCommand('/fullscr 1', true)
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   360
	else
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   361
		ParseCommand('/fullscr 0', true);
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   362
end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   363
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   364
/////////////////////
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   365
procedure DisplayUsage;
2691
c0da3a98c01c initial support for engine protocol
koda
parents: 2690
diff changeset
   366
var i: LongInt;
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   367
begin
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   368
	WriteLn('Wrong argument format: correct configurations is');
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   369
	WriteLn();
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   370
	WriteLn('  hwengine <path to data folder> <path to replay file> [option]');
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   371
	WriteLn();
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   372
	WriteLn('where [option] must be specified either as');
2264
b8fff48235de documentation fix
koda
parents: 2252
diff changeset
   373
	WriteLn(' --set-video [screen width] [screen height] [color dept]');
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   374
	WriteLn(' --set-audio [volume] [enable music] [enable sounds]');
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   375
	WriteLn(' --set-other [language file] [full screen] [show FPS]');
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   376
	WriteLn(' --set-multimedia [screen height] [screen width] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen]');
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   377
	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]');
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   378
	WriteLn();
2015
d2848d723690 koda's patch
unc0rr
parents: 2008
diff changeset
   379
	WriteLn('Read documentation online at http://www.hedgewars.org/node/1465 for more information');
2691
c0da3a98c01c initial support for engine protocol
koda
parents: 2690
diff changeset
   380
	Write('parsed command: ');
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   381
	for i:=0 to ParamCount do
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   382
		Write(ParamStr(i) + ' ');
2691
c0da3a98c01c initial support for engine protocol
koda
parents: 2690
diff changeset
   383
	WriteLn();
2015
d2848d723690 koda's patch
unc0rr
parents: 2008
diff changeset
   384
	halt(1);
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   385
end;
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   386
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   387
////////////////////
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   388
procedure GetParams;
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 208
diff changeset
   389
{$IFDEF DEBUGFILE}
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   390
var i: LongInt;
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 208
diff changeset
   391
{$ENDIF}
97
e7c1df9cce2c - make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents: 81
diff changeset
   392
begin
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 208
diff changeset
   393
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   394
	case ParamCount of
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   395
		17: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   396
			val(ParamStr(2), cScreenWidth);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   397
			val(ParamStr(3), cScreenHeight);
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   398
			cInitWidth:= cScreenWidth;
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   399
			cInitHeight:= cScreenHeight;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   400
			cBitsStr:= ParamStr(4);
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   401
			val(cBitsStr, cBits);
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   402
			val(ParamStr(5), ipcPort);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   403
			cFullScreen:= ParamStr(6) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   404
			isSoundEnabled:= ParamStr(7) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   405
			cVSyncInUse:= ParamStr(8) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   406
			cLocaleFName:= ParamStr(9);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   407
			val(ParamStr(10), cInitVolume);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   408
			val(ParamStr(11), cTimerInterval);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   409
			PathPrefix:= ParamStr(12);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   410
			cShowFPS:= ParamStr(13) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   411
			cAltDamage:= ParamStr(14) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   412
			UserNick:= DecodeBase64(ParamStr(15));
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   413
			isMusicEnabled:= ParamStr(16) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   414
			cReducedQuality:= ParamStr(17) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   415
		end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   416
		3: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   417
			val(ParamStr(2), ipcPort);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   418
			GameType:= gmtLandPreview;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   419
			if ParamStr(3) <> 'landpreview' then 
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   420
				OutError(errmsgShouldntRun, true);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   421
		end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   422
		2: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   423
			PathPrefix:= ParamStr(1);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   424
			recordFileName:= ParamStr(2);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   425
		end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   426
		6: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   427
			PathPrefix:= ParamStr(1);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   428
			recordFileName:= ParamStr(2);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   429
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   430
			if ParamStr(3) = '--set-video'	then
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   431
			begin
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   432
				val(ParamStr(4), cScreenWidth);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   433
				val(ParamStr(5), cScreenHeight);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   434
				cInitWidth:= cScreenWidth;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   435
				cInitHeight:= cScreenHeight;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   436
				cBitsStr:= ParamStr(6);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   437
				val(cBitsStr, cBits);
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   438
			end
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   439
			else
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   440
			begin
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   441
				if ParamStr(3) = '--set-audio' then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   442
				begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   443
					val(ParamStr(4), cInitVolume);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   444
					isMusicEnabled:= ParamStr(5) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   445
					isSoundEnabled:= ParamStr(6) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   446
				end
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   447
				else
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   448
				begin
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   449
					if ParamStr(3) = '--set-other' then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   450
					begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   451
						cLocaleFName:= ParamStr(4);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   452
						cFullScreen:= ParamStr(5) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   453
						cShowFPS:= ParamStr(6) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   454
					end
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   455
					else DisplayUsage;
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   456
				end
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   457
			end;
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   458
		end;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   459
		11: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   460
			PathPrefix:= ParamStr(1);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   461
			recordFileName:= ParamStr(2);
2376
ece7b87f1334 Strip trailing spaces
nemo
parents: 2326
diff changeset
   462
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   463
			if ParamStr(3) = '--set-multimedia' then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   464
			begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   465
				val(ParamStr(4), cScreenWidth);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   466
				val(ParamStr(5), cScreenHeight);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   467
				cInitWidth:= cScreenWidth;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   468
				cInitHeight:= cScreenHeight;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   469
				cBitsStr:= ParamStr(6);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   470
				val(cBitsStr, cBits);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   471
				val(ParamStr(7), cInitVolume);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   472
				isMusicEnabled:= ParamStr(8) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   473
				isSoundEnabled:= ParamStr(9) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   474
				cLocaleFName:= ParamStr(10);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   475
				cFullScreen:= ParamStr(11) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   476
			end
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   477
			else DisplayUsage;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   478
		end;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   479
		15: begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   480
			PathPrefix:= ParamStr(1);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   481
			recordFileName:= ParamStr(2);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   482
			if ParamStr(3) = '--set-everything' then
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   483
			begin
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   484
				val(ParamStr(4), cScreenWidth);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   485
				val(ParamStr(5), cScreenHeight);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   486
				cInitWidth:= cScreenWidth;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   487
				cInitHeight:= cScreenHeight;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   488
				cBitsStr:= ParamStr(6);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   489
				val(cBitsStr, cBits);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   490
				val(ParamStr(7), cInitVolume);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   491
				isMusicEnabled:= ParamStr(8) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   492
				isSoundEnabled:= ParamStr(9) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   493
				cLocaleFName:= ParamStr(10);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   494
				cFullScreen:= ParamStr(11) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   495
				cAltDamage:= ParamStr(12) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   496
				cShowFPS:= ParamStr(13) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   497
				val(ParamStr(14), cTimerInterval);
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   498
				cReducedQuality:= ParamStr(15) = '1';
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   499
			end
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   500
			else DisplayUsage;
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   501
		end;
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   502
		else DisplayUsage;
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   503
	end;
2630
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
   504
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
   505
{$IFDEF DEBUGFILE}
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   506
	AddFileLog('Prefix: "' + PathPrefix +'"');
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   507
	for i:= 0 to ParamCount do
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   508
		AddFileLog(inttostr(i) + ': ' + ParamStr(i));
2630
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
   509
{$IFDEF IPHONEOS}
2690
8e83c7e31720 move mixed functions in PascalExports
koda
parents: 2689
diff changeset
   510
	WriteLnToConsole('Saving debug file at: ' + IPH_getDocumentsPath());
2630
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
   511
{$ENDIF}
079ef82eac75 revamped file access and debug display
koda
parents: 2603
diff changeset
   512
{$ENDIF}
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   513
end;
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   514
////////////////////////////////////////////////////////////////////////////////
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   515
/////////////////////////////// m a i n ////////////////////////////////////////
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   516
////////////////////////////////////////////////////////////////////////////////
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   517
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   518
begin
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   519
	initEverything();
2692
ce9992075118 better network support + initial work for returning to frontend
koda
parents: 2691
diff changeset
   520
	WriteLnToConsole('Hedgewars ' + cVersionString + ' engine (network protocol: ' + inttostr(cNetProtoVersion) + ')');
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   521
	
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   522
	GetParams();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   523
	Randomize();
2008
fc2fb5c938c3 Patch by koda:
unc0rr
parents: 2006
diff changeset
   524
2699
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   525
	if GameType = gmtLandPreview then GenLandPreview()
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   526
	else Game();
249adefa9c1c replace initialization/finalization statements with custom init functions
koda
parents: 2698
diff changeset
   527
	ExitCode := 0;
2698
90585aba87ad objc/pascal finally working
koda
parents: 2697
diff changeset
   528
{$ENDIF}
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   529
end.