author  unc0rr 
Wed, 05 Mar 2014 00:53:08 +0400  
changeset 10176  ea022e9483c2 
parent 10175  c92668840ea8 
child 10266  a90a55ec5b98 
permissions  rwrr 
2947  1 
(* 
6952  2 
* Hedgewars, a free turn based strategy game 
9998  3 
* Copyright (c) 20042014 Andrey Korotaev <unC0Rr@gmail.com> 
6952  4 
* 
5 
* This program is free software; you can redistribute it and/or modify 

6 
* it under the terms of the GNU General Public License as published by 

7 
* the Free Software Foundation; version 2 of the License 

8 
* 

9 
* This program is distributed in the hope that it will be useful, 

10 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 

11 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

12 
* GNU General Public License for more details. 

13 
* 

14 
* You should have received a copy of the GNU General Public License 

15 
* along with this program; if not, write to the Free Software 

10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright  but I ain't gonna touch their copyright headers
sheepluva
parents:
10015
diff
changeset

16 
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 021101301 USA 
6952  17 
*) 
51  18 

2599  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 

2800  21 
{$IFDEF WIN32} 
8340
46a9fde631f4
install shaders only when needed, find clang only when needed, fix building on windows, better cmake boolean vars
koda
parents:
8330
diff
changeset

22 
{$R res/hwengine.rc} 
2800  23 
{$ENDIF} 
24 

2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset

25 
{$IFDEF HWLIBRARY} 
2698  26 
unit hwengine; 
27 
interface 

28 
{$ELSE} 

51  29 
program hwengine; 
2698  30 
{$ENDIF} 
3407  31 

7959  32 
uses SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler 
33 
, uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions 

34 
, SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted 

9468
3d07fd84c39d
 Actually call uTexture.initModule and .freeModule
unc0rr
parents:
9466
diff
changeset

35 
, uPhysFSLayer, uCursor, uRandom, ArgParsers, uVisualGearsHandlers, uTextures 
7447
01111960a48d
uploading to youtube, it works, but user interface is still incomplete
Stepan777 <stepik777@mail.ru>
parents:
7442
diff
changeset

36 
{$IFDEF USE_VIDEO_RECORDING}, uVideoRec {$ENDIF} 
7837  37 
{$IFDEF USE_TOUCH_INTERFACE}, uTouch {$ENDIF} 
38 
{$IFDEF ANDROID}, GLUnit{$ENDIF} 

39 
; 

3697  40 

2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset

41 
{$IFDEF HWLIBRARY} 
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

42 
procedure RunEngine(argc: LongInt; argv: PPChar); cdecl; export; 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

43 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

44 
procedure preInitEverything(); 
3525  45 
procedure initEverything(complete:boolean); 
46 
procedure freeEverything(complete:boolean); 

51  47 

2698  48 
implementation 
49 
{$ELSE} 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

50 
procedure preInitEverything(); forward; 
3611  51 
procedure initEverything(complete:boolean); forward; 
3525  52 
procedure freeEverything(complete:boolean); forward; 
2698  53 
{$ENDIF} 
51  54 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

55 
/////////////////////////////////////////////////////////////////////////////// 
7025  56 
function DoTimer(Lag: LongInt): boolean; 
2905  57 
var s: shortstring; 
51  58 
begin 
7025  59 
DoTimer:= false; 
6734
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset

60 
inc(RealTicks, Lag); 
564  61 

2947  62 
case GameState of 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

63 
gsLandGen: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

64 
begin 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

65 
GenMap; 
7850  66 
SetLandTexture; 
67 
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false); 

68 
setAILandMarks; 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

69 
ParseCommand('sendlanddigest', true); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

70 
GameState:= gsStart; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

71 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

72 
gsStart: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

73 
begin 
9464
901e363d5837
Finish rework of default binds system. Default binds now work even before first turn.
unc0rr
parents:
9379
diff
changeset

74 
SetDefaultBinds; 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

75 
if HasBorder then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

76 
DisableSomeWeapons; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

77 
AddClouds; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

78 
AddFlakes; 
8912  79 
SetRandomSeed(cSeed, false); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

80 
AssignHHCoords; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

81 
AddMiscGears; 
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6954
diff
changeset

82 
StoreLoad(false); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

83 
InitWorld; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

84 
ResetKbd; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

85 
if GameType = gmtSave then 
7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset

86 
SetSound(false); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

87 
FinishProgress; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

88 
PlayMusic; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

89 
SetScale(zoom); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

90 
ScriptCall('onGameStart'); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

91 
GameState:= gsGame; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

92 
end; 
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset

93 
gsConfirm, gsGame, gsChat: 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

94 
begin 
8096  95 
if not cOnlyStats then 
96 
// never place between ProcessKbd and DoGameTick  bugs due to /put cmd and isCursorVisible 

97 
DrawWorld(Lag); 

6734
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset

98 
DoGameTick(Lag); 
8027
e5ba3dd12531
make statsonly mode work headless. also skip a few things to save time/memory.
nemo
parents:
7984
diff
changeset

99 
if not cOnlyStats then ProcessVisualGears(Lag); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

100 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

101 
gsExit: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

102 
begin 
7025  103 
DoTimer:= true; 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

104 
end; 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

105 
gsSuspend: 
7054  106 
exit(false); 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

107 
end; 
564  108 

8039
a3b86c1f63b4
another tweak tomake statsonly work on headless servers
Xeli
parents:
8027
diff
changeset

109 
if not cOnlyStats then SwapBuffers; 
4454  110 

7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik777@mail.ru>
parents:
7180
diff
changeset

111 
{$IFDEF USE_VIDEO_RECORDING} 
7180  112 
if flagPrerecording then 
113 
SaveCameraPosition; 

7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik777@mail.ru>
parents:
7180
diff
changeset

114 
{$ENDIF} 
7180  115 

2947  116 
if flagMakeCapture then 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

117 
begin 
2947  118 
flagMakeCapture:= false; 
7151  119 
{$IFDEF PAS2C} 
10133  120 
s:= '/Screenshots/hw_' + inttostr(GameTicks); 
7151  121 
{$ELSE} 
7306
3cff5c769509
Here they come  thumbnails.
Stepan777 <stepik777@mail.ru>
parents:
7286
diff
changeset

122 
s:= '/Screenshots/hw_' + FormatDateTime('YYYYMMDD_HHmmss', Now()) + inttostr(GameTicks); 
7151  123 
{$ENDIF} 
5912
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset

124 

7306
3cff5c769509
Here they come  thumbnails.
Stepan777 <stepik777@mail.ru>
parents:
7286
diff
changeset

125 
// flash 
4359  126 
playSound(sndShutter); 
7306
3cff5c769509
Here they come  thumbnails.
Stepan777 <stepik777@mail.ru>
parents:
7286
diff
changeset

127 
ScreenFade:= sfFromWhite; 
3cff5c769509
Here they come  thumbnails.
Stepan777 <stepik777@mail.ru>
parents:
7286
diff
changeset

128 
ScreenFadeValue:= sfMax; 
3cff5c769509
Here they come  thumbnails.
Stepan777 <stepik777@mail.ru>
parents:
7286
diff
changeset

129 
ScreenFadeSpeed:= 5; 
3cff5c769509
Here they come  thumbnails.
Stepan777 <stepik777@mail.ru>
parents:
7286
diff
changeset

130 

3cff5c769509
Here they come  thumbnails.
Stepan777 <stepik777@mail.ru>
parents:
7286
diff
changeset

131 
if MakeScreenshot(s, 1) then 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

132 
WriteLnToConsole('Screenshot saved: ' + s) 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

133 
else 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

134 
begin 
5912
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset

135 
WriteLnToConsole('Screenshot failed.'); 
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset

136 
AddChatString(#5 + 'screen capture failed (lack of memory or write permissions)'); 
6267
be5d40bb1e86
make screenshots with 32bits of depths, so that they are more opengles friendly
koda
parents:
6219
diff
changeset

137 
end 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

138 
end; 
51  139 
end; 
140 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

141 
/////////////////////////////////////////////////////////////////////////////// 
3697  142 
procedure MainLoop; 
6267
be5d40bb1e86
make screenshots with 32bits of depths, so that they are more opengles friendly
koda
parents:
6219
diff
changeset

143 
var event: TSDL_Event; 
10015  144 
PrevTime, CurrTime: LongWord; 
7025  145 
isTerminated: boolean; 
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

146 
{$IFDEF SDL2} 
5975  147 
previousGameState: TGameState; 
6019  148 
{$ELSE} 
5521  149 
prevFocusState: boolean; 
6013  150 
{$ENDIF} 
2698  151 
begin 
7025  152 
isTerminated:= false; 
2947  153 
PrevTime:= SDL_GetTicks; 
3063  154 
while isTerminated = false do 
155 
begin 

5724  156 
SDL_PumpEvents(); 
8924  157 

9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

158 
while SDL_PeepEvents(@event, 1, SDL_GETEVENT, {$IFDEF SDL2}SDL_FIRSTEVENT, SDL_LASTEVENT{$ELSE}SDL_ALLEVENTS{$ENDIF}) > 0 do 
2947  159 
begin 
5339  160 
case event.type_ of 
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

161 
{$IFDEF SDL2} 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

162 
SDL_KEYDOWN: 
7025  163 
if GameState = gsChat then 
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8615
diff
changeset

164 
begin 
3647
0d0df215fb52
making chat work... (keyboard support is heavily broken in sdl upstream)
koda
parents:
3634
diff
changeset

165 
// sdl on iphone supports only ashii keyboards and the unicode field is deprecated in sdl 1.3 
8835  166 
KeyPressChat(SDL_GetKeyFromScancode(event.key.keysym.sym), event.key.keysym.sym); //TODO correct for keymodifiers 
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8615
diff
changeset

167 
end 
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

168 
else 
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset

169 
if GameState >= gsGame then ProcessKey(event.key); 
6917  170 
SDL_KEYUP: 
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset

171 
if (GameState <> gsChat) and (GameState >= gsGame) then 
7025  172 
ProcessKey(event.key); 
8924  173 

5339  174 
SDL_WINDOWEVENT: 
5052  175 
if event.window.event = SDL_WINDOWEVENT_SHOWN then 
7025  176 
begin 
4454  177 
cHasFocus:= true; 
5521  178 
onFocusStateChanged() 
7025  179 
end 
5975  180 
else if event.window.event = SDL_WINDOWEVENT_MINIMIZED then 
7025  181 
begin 
5975  182 
previousGameState:= GameState; 
183 
GameState:= gsSuspend; 

7025  184 
end 
5975  185 
else if event.window.event = SDL_WINDOWEVENT_RESTORED then 
7025  186 
begin 
5975  187 
GameState:= previousGameState; 
6611  188 
{$IFDEF ANDROID} 
189 
//This call is used to reinitialize the glcontext and reload the textures 

6598
fa518383563b
added pause/resume functionality for android, android need the opengl context to be recreated along with textures and whatnot
Xeli
parents:
6580
diff
changeset

190 
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); 
fa518383563b
added pause/resume functionality for android, android need the opengl context to be recreated along with textures and whatnot
Xeli
parents:
6580
diff
changeset

191 
{$ENDIF} 
7025  192 
end 
6021  193 
else if event.window.event = SDL_WINDOWEVENT_RESIZED then 
7025  194 
begin 
6021  195 
cNewScreenWidth:= max(2 * (event.window.data1 div 2), cMinScreenWidth); 
196 
cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight); 

6611  197 
cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF}; 
7025  198 
end; 
9651  199 
{$IFDEF USE_TOUCH_INTERFACE} 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

200 
SDL_FINGERMOTION: 
9379  201 
onTouchMotion(event.tfinger.x, event.tfinger.y, event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId); 
8924  202 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

203 
SDL_FINGERDOWN: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

204 
onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); 
8924  205 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

206 
SDL_FINGERUP: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

207 
onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); 
9651  208 
{$ENDIF} 
3647
0d0df215fb52
making chat work... (keyboard support is heavily broken in sdl upstream)
koda
parents:
3634
diff
changeset

209 
{$ELSE} 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

210 
SDL_KEYDOWN: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

211 
if GameState = gsChat then 
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8615
diff
changeset

212 
KeyPressChat(event.key.keysym.unicode, event.key.keysym.sym) 
6917  213 
else 
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset

214 
if GameState >= gsGame then ProcessKey(event.key); 
6917  215 
SDL_KEYUP: 
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset

216 
if (GameState <> gsChat) and (GameState >= gsGame) then 
7025  217 
ProcessKey(event.key); 
8924  218 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

219 
SDL_MOUSEBUTTONDOWN: 
8225  220 
if GameState = gsConfirm then 
8948
c8a6f789398d
Apparently resetPosition is not needed at all (/pause doesn't call it and works the same)
unc0rr
parents:
8924
diff
changeset

221 
ParseCommand('quit', true) 
8225  222 
else 
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset

223 
if (GameState >= gsGame) then ProcessMouse(event.button, true); 
8924  224 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

225 
SDL_MOUSEBUTTONUP: 
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset

226 
if (GameState >= gsGame) then ProcessMouse(event.button, false); 
8924  227 

2947  228 
SDL_ACTIVEEVENT: 
229 
if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then 

7025  230 
begin 
5521  231 
prevFocusState:= cHasFocus; 
2947  232 
cHasFocus:= event.active.gain = 1; 
5521  233 
if prevFocusState xor cHasFocus then 
234 
onFocusStateChanged() 

7025  235 
end; 
8924  236 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

237 
SDL_VIDEORESIZE: 
7025  238 
begin 
5816
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset

239 
// using lower values than cMinScreenWidth or cMinScreenHeight causes widget overlap and offscreen widget parts 
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset

240 
// Change by sheepluva: 
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset

241 
// Let's only use even numbers for custom width/height since I ran into scaling issues with odd width values. 
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset

242 
// Maybe just fixes the symptom not the actual cause(?), I'm too tired to find out :P 
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset

243 
cNewScreenWidth:= max(2 * (event.resize.w div 2), cMinScreenWidth); 
ceb522b0f7d5
"fix" for a screen scaling problem I had after resizing to odd width number values
sheepluva
parents:
5815
diff
changeset

244 
cNewScreenHeight:= max(2 * (event.resize.h div 2), cMinScreenHeight); 
5732
f3f381011728
Add a delay before applying screen resize to cut down on resize events (especially bad on OSes that need texture recreation)
nemo
parents:
5730
diff
changeset

245 
cScreenResizeDelay:= RealTicks+500; 
7025  246 
end; 
3463  247 
{$ENDIF} 
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

248 
SDL_JOYAXISMOTION: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

249 
ControllerAxisEvent(event.jaxis.which, event.jaxis.axis, event.jaxis.value); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

250 
SDL_JOYHATMOTION: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

251 
ControllerHatEvent(event.jhat.which, event.jhat.hat, event.jhat.value); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

252 
SDL_JOYBUTTONDOWN: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

253 
ControllerButtonEvent(event.jbutton.which, event.jbutton.button, true); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

254 
SDL_JOYBUTTONUP: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

255 
ControllerButtonEvent(event.jbutton.which, event.jbutton.button, false); 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

256 
SDL_QUITEV: 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

257 
isTerminated:= true 
7025  258 
end; //end case event.type_ of 
259 
end; //end while SDL_PollEvent(@event) <> 0 do 

5732
f3f381011728
Add a delay before applying screen resize to cut down on resize events (especially bad on OSes that need texture recreation)
nemo
parents:
5730
diff
changeset

260 

8346  261 
if (CursorMovementX <> 0) or (CursorMovementY <> 0) then 
262 
handlePositionUpdate(CursorMovementX * cameraKeyboardSpeed, CursorMovementY * cameraKeyboardSpeed); 

263 

7025  264 
if (cScreenResizeDelay <> 0) and (cScreenResizeDelay < RealTicks) and 
265 
((cNewScreenWidth <> cScreenWidth) or (cNewScreenHeight <> cScreenHeight)) then 

266 
begin 

267 
cScreenResizeDelay:= 0; 

8354
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset

268 
cWindowedWidth:= cNewScreenWidth; 
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset

269 
cWindowedHeight:= cNewScreenHeight; 
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset

270 
cScreenWidth:= cWindowedWidth; 
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset

271 
cScreenHeight:= cWindowedHeight; 
3463  272 

7025  273 
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); 
274 
WriteLnToConsole('window resize: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight)); 

275 
ScriptOnScreenResize(); 

276 
InitCameraBorders(); 

277 
InitTouchInterface(); 

8345
9d9b498cfb03
Preserve windowed resolution after manual resize
vitiv <nikita.utiu@gmail.com>
parents:
8327
diff
changeset

278 
SendIPC('W' + IntToStr(cScreenWidth) + 'x' + IntToStr(cScreenHeight)); 
7025  279 
end; 
280 

281 
CurrTime:= SDL_GetTicks(); 

6863  282 
if PrevTime + longword(cTimerInterval) <= CurrTime then 
283 
begin 

8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

284 
isTerminated:= isTerminated or DoTimer(CurrTime  PrevTime); 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

285 
PrevTime:= CurrTime; 
6863  286 
end 
287 
else SDL_Delay(1); 

288 
IPCCheckSock(); 

8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

289 

3063  290 
end; 
2698  291 
end; 
292 

7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik777@mail.ru>
parents:
7180
diff
changeset

293 
{$IFDEF USE_VIDEO_RECORDING} 
7180  294 
procedure RecorderMainLoop; 
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

295 
var oldGameTicks, oldRealTicks, newGameTicks, newRealTicks: LongInt; 
7180  296 
begin 
297 
if not BeginVideoRecording() then 

298 
exit; 

299 
DoTimer(0); // gsLandGen > gsStart 

300 
DoTimer(0); // gsStart > gsGame 

301 

7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

302 
if not LoadNextCameraPosition(newRealTicks, newGameTicks) then 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

303 
exit; 
7180  304 
fastScrolling:= true; 
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

305 
DoGameTick(newGameTicks); 
7180  306 
fastScrolling:= false; 
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

307 
oldRealTicks:= 0; 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

308 
oldGameTicks:= newGameTicks; 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

309 

bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

310 
while LoadNextCameraPosition(newRealTicks, newGameTicks) do 
7180  311 
begin 
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

312 
IPCCheckSock(); 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

313 
DoGameTick(newGameTicks  oldGameTicks); 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

314 
if GameState = gsExit then 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

315 
break; 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

316 
ProcessVisualGears(newRealTicks  oldRealTicks); 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

317 
DrawWorld(newRealTicks  oldRealTicks); 
7180  318 
EncodeFrame(); 
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

319 
oldRealTicks:= newRealTicks; 
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik777@mail.ru>
parents:
7386
diff
changeset

320 
oldGameTicks:= newGameTicks; 
7180  321 
end; 
322 
StopVideoRecording(); 

323 
end; 

7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik777@mail.ru>
parents:
7180
diff
changeset

324 
{$ENDIF} 
7180  325 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

326 
/////////////////////////////////////////////////////////////////////////////// 
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

327 
procedure Game; 
8370  328 
//var p: TPathType; 
329 
var s: shortstring; 

3611  330 
i: LongInt; 
2698  331 
begin 
7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

332 
initEverything(true); 
8615  333 
WriteLnToConsole('Hedgewars engine ' + cVersionString + 'r' + cRevisionString + 
334 
' (' + cHashString + ') with protocol #' + inttostr(cNetProtoVersion)); 

10127  335 
AddFileLog('Prefix: "' + shortstring(PathPrefix) +'"'); 
336 
AddFileLog('UserPrefix: "' + shortstring(UserPathPrefix) +'"'); 

8924  337 

3611  338 
for i:= 0 to ParamCount do 
339 
AddFileLog(inttostr(i) + ': ' + ParamStr(i)); 

2698  340 

2947  341 
WriteToConsole('Init SDL... '); 
8039
a3b86c1f63b4
another tweak tomake statsonly work on headless servers
Xeli
parents:
8027
diff
changeset

342 
if not cOnlyStats then SDLTry(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, true); 
2947  343 
WriteLnToConsole(msgOK); 
2698  344 

9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

345 
{$IFDEF SDL2} 
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

346 
SDL_StartTextInput(); 
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

347 
{$ELSE} 
2947  348 
SDL_EnableUNICODE(1); 
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9311
diff
changeset

349 
{$ENDIF} 
5565  350 
SDL_ShowCursor(0); 
2698  351 

10139  352 
if not cOnlyStats then 
353 
begin 

354 
WriteToConsole('Init SDL_ttf... '); 

355 
SDLTry(TTF_Init() <> 1, true); 

356 
WriteLnToConsole(msgOK); 

357 
end; 

2698  358 

7286  359 
{$IFDEF USE_VIDEO_RECORDING} 
7180  360 
if GameType = gmtRecord then 
361 
InitOffscreenOpenGL() 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

362 
else 
7286  363 
{$ENDIF} 
8924  364 
begin 
7180  365 
// show main window 
366 
if cFullScreen then 

367 
ParseCommand('fullscr 1', true) 

368 
else 

369 
ParseCommand('fullscr 0', true); 

370 
end; 

2698  371 

2947  372 
ControllerInit(); // has to happen before InitKbdKeyTable to map keys 
373 
InitKbdKeyTable(); 

5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5167
diff
changeset

374 
AddProgress(); 
2698  375 

8025  376 
LoadLocale(cPathz[ptLocale] + '/en.txt'); // Do an initial load with english 
2947  377 
if cLocaleFName <> 'en.txt' then 
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset

378 
begin 
2719  379 
// Try two letter locale first before trying specific locale overrides 
8025  380 
if (Length(cLocale) > 3) and (Copy(cLocale, 1, 2) <> 'en') then 
5339  381 
begin 
8025  382 
LoadLocale(cPathz[ptLocale] + '/' + Copy(cLocale, 1, 2) + '.txt') 
5339  383 
end; 
8025  384 
LoadLocale(cPathz[ptLocale] + '/' + cLocaleFName) 
5107
d7fc678d78f4
Allow override of voicepack with a locale voicepack. Untested, but should mean that a Default voice should use the Ukranian version if that is their locale.
nemo
parents:
5066
diff
changeset

385 
end 
d7fc678d78f4
Allow override of voicepack with a locale voicepack. Untested, but should mean that a Default voice should use the Ukranian version if that is their locale.
nemo
parents:
5066
diff
changeset

386 
else cLocale := 'en'; 
2698  387 

3904
22e4d74240e5
finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents:
3843
diff
changeset

388 
WriteLnToConsole(msgGettingConfig); 
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset

389 

9988
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

390 
if cTestLua then 
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset

391 
begin 
9988
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

392 
ParseCommand('script ' + cScriptName, true); 
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset

393 
end 
2947  394 
else 
9988
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

395 
begin 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

396 
if recordFileName = '' then 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

397 
begin 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

398 
InitIPC; 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

399 
SendIPCAndWaitReply(_S'C'); // ask for game config 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

400 
end 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

401 
else 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

402 
LoadRecordFromFile(recordFileName); 
317d46a2afd2
simple mechanism to run luabased test cases. experimental  I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset

403 
end; 
2698  404 

2947  405 
ScriptOnGameInit; 
406 
s:= 'eproto ' + inttostr(cNetProtoVersion); 

407 
SendIPCRaw(@s[0], Length(s) + 1); // send proto version 

408 

409 
InitTeams(); 

410 
AssignStores(); 

7180  411 

412 
if GameType = gmtRecord then 

413 
SetSound(false); 

414 

7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset

415 
InitSound(); 
2590  416 

2947  417 
isDeveloperMode:= false; 
418 
TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); 

9249  419 
//ParseCommand('rotmask', true); 
7286  420 

7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik777@mail.ru>
parents:
7198
diff
changeset

421 
{$IFDEF USE_VIDEO_RECORDING} 
7180  422 
if GameType = gmtRecord then 
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

423 
begin 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

424 
RecorderMainLoop(); 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

425 
freeEverything(true); 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

426 
exit; 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

427 
end; 
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik777@mail.ru>
parents:
7198
diff
changeset

428 
{$ENDIF} 
7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset

429 

8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

430 
MainLoop; 
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset

431 
// clean up all the memory allocated 
3611  432 
freeEverything(true); 
2698  433 
end; 
2590  434 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

435 
/////////////////////////////////////////////////////////////////////////////// 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

436 
// preInitEverything  init variables that are going to be ovewritten by arguments 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

437 
// initEverything  init variables only. Should be coupled by below 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

438 
// freeEverything  free above. Pay attention to the init/free order! 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

439 
procedure preInitEverything; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset

440 
begin 
3365
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset

441 
Randomize(); 
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset

442 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

443 
uVariables.preInitModule; 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

444 
uSound.preInitModule; 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

445 
end; 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

446 

67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

447 
procedure initEverything (complete:boolean); 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

448 
begin 
7850  449 
uUtils.initModule(complete); // opens the debug file, must be the first 
450 
uVariables.initModule; // inits all global variables 

451 
uCommands.initModule; // helps below 

452 
uCommandHandlers.initModule; // registers all messages from frontend 

3525  453 

7850  454 
uLand.initModule; // computes land 
455 
uLandPainted.initModule; // computes drawn land 

456 
uIO.initModule; // sets up sockets 

10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10139
diff
changeset

457 
uPhysFSLayer.initModule; 
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10139
diff
changeset

458 
uScript.initModule; 
3697  459 

3525  460 
if complete then 
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset

461 
begin 
9468
3d07fd84c39d
 Actually call uTexture.initModule and .freeModule
unc0rr
parents:
9466
diff
changeset

462 
uTextures.initModule; 
7850  463 
{$IFDEF ANDROID}GLUnit.initModule;{$ENDIF} 
7837  464 
{$IFDEF USE_TOUCH_INTERFACE}uTouch.initModule;{$ENDIF} 
9543  465 
{$IFDEF USE_VIDEO_RECORDING}uVideoRec.initModule;{$ENDIF} 
6415  466 
uAI.initModule; 
3525  467 
uAIMisc.initModule; 
7850  468 
uAILandMarks.initModule; //stub 
3525  469 
uAmmos.initModule; 
7850  470 
uCaptions.initModule; 
471 

3525  472 
uChat.initModule; 
473 
uCollisions.initModule; 

474 
uGears.initModule; 

9466  475 
uInputHandler.initModule; 
7850  476 
uMisc.initModule; 
477 
uLandTexture.initModule; //stub 

3525  478 
uSound.initModule; 
479 
uStats.initModule; 

480 
uStore.initModule; 

481 
uTeams.initModule; 

482 
uVisualGears.initModule; 

9283
76e68c136a11
Refactoring: VGSHandlers.inc > uVisualGearsHandlers.pas
unc0rr
parents:
9280
diff
changeset

483 
uVisualGearsHandlers.initModule; 
3525  484 
uWorld.initModule; 
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset

485 
end; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset

486 
end; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset

487 

3525  488 
procedure freeEverything (complete:boolean); 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset

489 
begin 
3525  490 
if complete then 
10012
82dd9f0c88f7
Make poison damage possibly variable (might as well since effects is a count). Scripts might find it handy.
nemo
parents:
10009
diff
changeset

491 
begin 
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset

492 
WriteLnToConsole('Freeing resources...'); 
7850  493 
uAI.freeModule; // AI things need to be freed first 
494 
uAIMisc.freeModule; //stub 

7433
c7fff3e61d49
 Implement AI land marks which only used to tracks visited areas on the map for now. Significantly reduces wasting of cpu time by AI checking same place several times (10x or even more in rare cases)
unc0rr
parents:
7151
diff
changeset

495 
uAILandMarks.freeModule; 
4393  496 
uCaptions.freeModule; 
3525  497 
uWorld.freeModule; 
3615  498 
uVisualGears.freeModule; 
3525  499 
uTeams.freeModule; 
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset

500 
uInputHandler.freeModule; 
3525  501 
uStats.freeModule; //stub 
3615  502 
uSound.freeModule; 
7850  503 
uMisc.freeModule; 
3612
b50215a8a43d
land arrays are allocated dynamically, so DOWNSCALE and LOWRES macros are now removed and replaced by run time flags rqBlurryLand and rqLowRes
koda
parents:
3611
diff
changeset

504 
uLandTexture.freeModule; 
3525  505 
uGears.freeModule; 
506 
uCollisions.freeModule; //stub 

4901  507 
uChat.freeModule; 
3525  508 
uAmmos.freeModule; 
7850  509 
uStore.freeModule; // closes SDL 
7286  510 
{$IFDEF USE_VIDEO_RECORDING}uVideoRec.freeModule;{$ENDIF} 
7850  511 
{$IFDEF USE_TOUCH_INTERFACE}uTouch.freeModule;{$ENDIF} //stub 
512 
{$IFDEF ANDROID}GLUnit.freeModule;{$ENDIF} 

9468
3d07fd84c39d
 Actually call uTexture.initModule and .freeModule
unc0rr
parents:
9466
diff
changeset

513 
uTextures.freeModule; 
10012
82dd9f0c88f7
Make poison damage possibly variable (might as well since effects is a count). Scripts might find it handy.
nemo
parents:
10009
diff
changeset

514 
end; 
3697  515 

7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset

516 
uIO.freeModule; 
3038  517 
uLand.freeModule; 
5066  518 
uLandPainted.freeModule; 
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset

519 

4413  520 
uCommandHandlers.freeModule; 
4373  521 
uCommands.freeModule; 
4359  522 
uVariables.freeModule; 
7850  523 
uUtils.freeModule; // closes debug file 
10159  524 
uPhysFSLayer.freeModule; 
525 
uScript.freeModule; 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset

526 
end; 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset

527 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

528 
/////////////////////////////////////////////////////////////////////////////// 
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

529 
procedure GenLandPreview; 
10162  530 
var Preview: TPreviewAlpha; 
2698  531 
begin 
7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

532 
initEverything(false); 
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

533 

2947  534 
InitIPC; 
535 
IPCWaitPongEvent; 

536 
TryDo(InitStepsFlags = cifRandomize, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); 

2698  537 

10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10139
diff
changeset

538 
ScriptOnPreviewInit; 
10162  539 
GenPreviewAlpha(Preview); 
2947  540 
WriteLnToConsole('Sending preview...'); 
541 
SendIPCRaw(@Preview, sizeof(Preview)); 

3365
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset

542 
SendIPCRaw(@MaxHedgehogs, sizeof(byte)); 
2947  543 
WriteLnToConsole('Preview sent, disconnect'); 
3525  544 
freeEverything(false); 
2698  545 
end; 
546 

10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

547 
{$IFDEF HWLIBRARY} 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

548 
procedure RunEngine(argc: LongInt; argv: PPChar); cdecl; export; 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

549 
begin 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

550 
operatingsystem_parameter_argc:= argc; 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

551 
operatingsystem_parameter_argv:= argv; 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

552 
{$ELSE} 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

553 
begin 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

554 
{$ENDIF} 
2008  555 

7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

556 
/////////////////////////////////////////////////////////////////////////////// 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

557 
/////////////////////////////////// m a i n /////////////////////////////////// 
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

558 
/////////////////////////////////////////////////////////////////////////////// 
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

559 
{$IFDEF PAS2C} 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

560 
// workaround for pascal's ParamStr and ParamCount 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

561 
init(argc, argv); 
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

562 
{$ENDIF} 
7896
67217e6108fd
another stake at variable preinitialisation  we lost preview logging in the course
koda
parents:
7850
diff
changeset

563 
preInitEverything(); 
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

564 

2947  565 
GetParams(); 
2008  566 

6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

567 
if GameType = gmtLandPreview then 
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset

568 
GenLandPreview() 
8308
cdf83bdf7b27
move GetParams in ArgParser, print a warning when using a deprecated command, pascalisation of +1s
koda
parents:
8307
diff
changeset

569 
else if GameType <> gmtSyntax then 
cdf83bdf7b27
move GetParams in ArgParser, print a warning when using a deprecated command, pascalisation of +1s
koda
parents:
8307
diff
changeset

570 
Game(); 
3697  571 

5565  572 
// return 1 when engine is not called correctly 
10176  573 
if GameType = gmtSyntax then 
574 
{$IFDEF PAS2C} 

575 
exit(1); 

576 
{$ELSE} 

577 
halt(1); 

578 
{$ENDIF} 

8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset

579 

10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

580 
{$IFDEF HWLIBRARY} 
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

581 
end; 
2698  582 
{$ENDIF} 
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset

583 

51  584 
end. 