author | Wuzzy <Wuzzy2@mail.ru> |
Sun, 19 Jul 2020 23:28:45 +0200 | |
changeset 15753 | 26247a74d823 |
parent 15320 | 3bf780084c86 |
child 15908 | 014f4edd0421 |
child 15979 | 668c88b31dd6 |
permissions | -rw-r--r-- |
2947 | 1 |
(* |
6952 | 2 |
* Hedgewars, a free turn based strategy game |
11046 | 3 |
* Copyright (c) 2004-2015 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 02110-1301 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 |
|
14220 | 21 |
{$IFDEF WINDOWS} |
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 |
|
11150 | 32 |
uses {$IFDEF IPHONEOS}cmem, {$ENDIF} SDLh, uMisc, uConsole, uGame, uConsts, uLand, uAmmos, uVisualGears, uGears, uStore, uWorld, uInputHandler |
7959 | 33 |
, uSound, uScript, uTeams, uStats, uIO, uLocale, uChat, uAI, uAIMisc, uAILandMarks, uLandTexture, uCollisions |
34 |
, SysUtils, uTypes, uVariables, uCommands, uUtils, uCaptions, uDebug, uCommandHandlers, uLandPainted |
|
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10302
diff
changeset
|
35 |
, uPhysFSLayer, uCursor, uRandom, ArgParsers, uVisualGearsHandlers, uTextures, uRender |
7447
01111960a48d
uploading to youtube, it works, but user interface is still incomplete
Stepan777 <stepik-777@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} |
|
14620
b86e6e4f3c58
Make game engine load the user's locale correctly (bug 688)
Wuzzy <Wuzzy2@mail.ru>
parents:
14619
diff
changeset
|
39 |
{$IFDEF UNIX}, clocale{$ENDIF} |
14220 | 40 |
{$IFDEF WINDOWS}, dynlibs{$ENDIF} |
7837 | 41 |
; |
3697 | 42 |
|
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset
|
43 |
{$IFDEF HWLIBRARY} |
11685
a2e86a867fb5
pas2c converts exit to return, so change RunEngine signature
frd
parents:
11644
diff
changeset
|
44 |
function RunEngine(argc: LongInt; argv: PPChar): LongInt; cdecl; export; |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
45 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
46 |
procedure preInitEverything(); |
3525 | 47 |
procedure initEverything(complete:boolean); |
48 |
procedure freeEverything(complete:boolean); |
|
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
49 |
{$IFNDEF PAS2C} |
13489
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
50 |
procedure catchUnhandledException(Obj: TObject; Addr: Pointer; FrameCount: Longint; Frames: PPointer); |
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
51 |
{$ENDIF} |
51 | 52 |
|
2698 | 53 |
implementation |
54 |
{$ELSE} |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
55 |
procedure preInitEverything(); forward; |
3611 | 56 |
procedure initEverything(complete:boolean); forward; |
3525 | 57 |
procedure freeEverything(complete:boolean); forward; |
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
58 |
{$IFNDEF PAS2C} |
13489
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
59 |
procedure catchUnhandledException(Obj: TObject; Addr: Pointer; FrameCount: Longint; Frames: PPointer); forward; |
2698 | 60 |
{$ENDIF} |
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
61 |
{$ENDIF} |
51 | 62 |
|
14220 | 63 |
{$IFDEF WINDOWS} |
12657
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
64 |
type TSetProcessDpiAwareness = function(value: Integer): Integer; stdcall; |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
65 |
var SetProcessDpiAwareness: TSetProcessDpiAwareness; |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
66 |
var ShcoreLibHandle: TLibHandle; |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
67 |
{$ENDIF} |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
68 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
69 |
/////////////////////////////////////////////////////////////////////////////// |
7025 | 70 |
function DoTimer(Lag: LongInt): boolean; |
2905 | 71 |
var s: shortstring; |
10580
17560eb73b4c
Reset max team health after script may have screwed with it on start. Maybe a script max health reset function could be useful too. Set climbhome hogs to invulnerable while not their turn if needed to avoid accidental mine/dead hog damage. Tweak cake fire boom a bit.
nemo
parents:
10445
diff
changeset
|
72 |
t: LongWord; |
51 | 73 |
begin |
7025 | 74 |
DoTimer:= false; |
6734
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset
|
75 |
inc(RealTicks, Lag); |
564 | 76 |
|
2947 | 77 |
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
|
78 |
gsLandGen: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
79 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
80 |
GenMap; |
7850 | 81 |
SetLandTexture; |
82 |
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false); |
|
83 |
setAILandMarks; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
84 |
GameState:= gsStart; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
85 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
86 |
gsStart: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
87 |
begin |
9464
901e363d5837
Finish rework of default binds system. Default binds now work even before first turn.
unc0rr
parents:
9379
diff
changeset
|
88 |
SetDefaultBinds; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
89 |
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
|
90 |
DisableSomeWeapons; |
10445
dac3bfb3a2b1
cosmetic disabling of clouds with sea edges and underwater theme
nemo
parents:
10306
diff
changeset
|
91 |
// wave "clouds" on underwater theme look weird w/ weSea, esp the blended bottom portion |
dac3bfb3a2b1
cosmetic disabling of clouds with sea edges and underwater theme
nemo
parents:
10306
diff
changeset
|
92 |
if (WorldEdge <> weSea) or (Theme <> 'Underwater') then |
dac3bfb3a2b1
cosmetic disabling of clouds with sea edges and underwater theme
nemo
parents:
10306
diff
changeset
|
93 |
AddClouds; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
94 |
AddFlakes; |
8912 | 95 |
SetRandomSeed(cSeed, false); |
11477
e425a6eb9da3
Force locations for hogs if even TryHard fails on initial spawn.
nemo
parents:
11365
diff
changeset
|
96 |
StoreLoad(false); |
12711
20dbb3a03e61
extend land digest to all surfaces that could possibly be loaded into Land[] - i.e. ones that impact sync
nemo
parents:
12657
diff
changeset
|
97 |
ParseCommand('sendlanddigest', true); // extending land digest to all synced pixels (anything that could modify land) |
11534 | 98 |
if not allOK then exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
99 |
AssignHHCoords; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
100 |
AddMiscGears; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
101 |
InitWorld; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
102 |
ResetKbd; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
103 |
if GameType = gmtSave then |
7021
0c75512a8920
adjust the scope of a few uSound variables and functions
koda
parents:
6986
diff
changeset
|
104 |
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
|
105 |
FinishProgress; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
106 |
PlayMusic; |
10302
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10273
diff
changeset
|
107 |
InitZoom(zoom); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
108 |
ScriptCall('onGameStart'); |
14786
ba8dd081359d
Fix map preview not matching actual map
Wuzzy <Wuzzy2@mail.ru>
parents:
14649
diff
changeset
|
109 |
RandomizeHHAnim; |
10580
17560eb73b4c
Reset max team health after script may have screwed with it on start. Maybe a script max health reset function could be useful too. Set climbhome hogs to invulnerable while not their turn if needed to avoid accidental mine/dead hog damage. Tweak cake fire boom a bit.
nemo
parents:
10445
diff
changeset
|
110 |
for t:= 0 to Pred(TeamsCount) do |
17560eb73b4c
Reset max team health after script may have screwed with it on start. Maybe a script max health reset function could be useful too. Set climbhome hogs to invulnerable while not their turn if needed to avoid accidental mine/dead hog damage. Tweak cake fire boom a bit.
nemo
parents:
10445
diff
changeset
|
111 |
with TeamsArray[t]^ do |
17560eb73b4c
Reset max team health after script may have screwed with it on start. Maybe a script max health reset function could be useful too. Set climbhome hogs to invulnerable while not their turn if needed to avoid accidental mine/dead hog damage. Tweak cake fire boom a bit.
nemo
parents:
10445
diff
changeset
|
112 |
MaxTeamHealth:= TeamHealth; |
10581 | 113 |
RecountAllTeamsHealth; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
114 |
GameState:= gsGame; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
115 |
end; |
13077 | 116 |
gsConfirm, gsGame: |
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 |
11497
66f1cff4284b
stop screenshot-flash-effects from showing up on consecutive screenshots
sheepluva
parents:
11486
diff
changeset
|
118 |
// disable screenshot flash effect when about to make another screenshot |
66f1cff4284b
stop screenshot-flash-effects from showing up on consecutive screenshots
sheepluva
parents:
11486
diff
changeset
|
119 |
if flagMakeCapture and (ScreenFade = sfFromWhite) then |
66f1cff4284b
stop screenshot-flash-effects from showing up on consecutive screenshots
sheepluva
parents:
11486
diff
changeset
|
120 |
ScreenFade:= sfNone; |
8096 | 121 |
if not cOnlyStats then |
122 |
// never place between ProcessKbd and DoGameTick - bugs due to /put cmd and isCursorVisible |
|
123 |
DrawWorld(Lag); |
|
6734
9709d15dabfa
Revert most of 033e4a8a9c74 and 9d501dc22f71 (see bug #362)
nemo
parents:
6700
diff
changeset
|
124 |
DoGameTick(Lag); |
8027
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7984
diff
changeset
|
125 |
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
|
126 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
127 |
gsExit: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
128 |
begin |
7025 | 129 |
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
|
130 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
131 |
gsSuspend: |
7054 | 132 |
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
|
133 |
end; |
564 | 134 |
|
8039
a3b86c1f63b4
another tweak tomake --stats-only work on headless servers
Xeli
parents:
8027
diff
changeset
|
135 |
if not cOnlyStats then SwapBuffers; |
4454 | 136 |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
137 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 138 |
if flagPrerecording then |
139 |
SaveCameraPosition; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
140 |
{$ENDIF} |
7180 | 141 |
|
2947 | 142 |
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
|
143 |
begin |
2947 | 144 |
flagMakeCapture:= false; |
10633
2f062fac5791
Add that "make screenshots of Land/LandPixels" thing for map creators
nemo
parents:
10622
diff
changeset
|
145 |
if flagDumpLand then |
2f062fac5791
Add that "make screenshots of Land/LandPixels" thing for map creators
nemo
parents:
10622
diff
changeset
|
146 |
s:= '/Screenshots/mapdump_' |
2f062fac5791
Add that "make screenshots of Land/LandPixels" thing for map creators
nemo
parents:
10622
diff
changeset
|
147 |
else s:= '/Screenshots/hw_'; |
14443 | 148 |
{$IFDEF PAS2C} |
10633
2f062fac5791
Add that "make screenshots of Land/LandPixels" thing for map creators
nemo
parents:
10622
diff
changeset
|
149 |
s:= s + inttostr(GameTicks); |
14443 | 150 |
{$ELSE} |
10633
2f062fac5791
Add that "make screenshots of Land/LandPixels" thing for map creators
nemo
parents:
10622
diff
changeset
|
151 |
s:= s + FormatDateTime('YYYY-MM-DD_HH-mm-ss', Now()) + inttostr(GameTicks); |
14443 | 152 |
{$ENDIF} |
5912
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset
|
153 |
|
7306
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
154 |
// flash |
4359 | 155 |
playSound(sndShutter); |
7306
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
156 |
ScreenFade:= sfFromWhite; |
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
157 |
ScreenFadeValue:= sfMax; |
3cff5c769509
Here they come - thumbnails.
Stepan777 <stepik-777@mail.ru>
parents:
7286
diff
changeset
|
158 |
ScreenFadeSpeed:= 5; |
11532 | 159 |
|
11025
999afa63035f
just disable landpixels w/ blurry land instead. the mask can be helpful for debugging at least.
nemo
parents:
10836
diff
changeset
|
160 |
if (not flagDumpLand and MakeScreenshot(s, 1, 0)) or |
999afa63035f
just disable landpixels w/ blurry land instead. the mask can be helpful for debugging at least.
nemo
parents:
10836
diff
changeset
|
161 |
(flagDumpLand and MakeScreenshot(s, 1, 1) and ((cReducedQuality and rqBlurryLand <> 0) or MakeScreenshot(s, 1, 2))) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
162 |
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
|
163 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
164 |
begin |
5912
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset
|
165 |
WriteLnToConsole('Screenshot failed.'); |
d31eba29e706
screenshots: display a msg on failure and log causative error
sheepluva
parents:
5825
diff
changeset
|
166 |
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
|
167 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
168 |
end; |
51 | 169 |
end; |
170 |
||
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
171 |
/////////////////////////////////////////////////////////////////////////////// |
3697 | 172 |
procedure MainLoop; |
6267
be5d40bb1e86
make screenshots with 32bits of depths, so that they are more opengles friendly
koda
parents:
6219
diff
changeset
|
173 |
var event: TSDL_Event; |
10015 | 174 |
PrevTime, CurrTime: LongWord; |
7025 | 175 |
isTerminated: boolean; |
5975 | 176 |
previousGameState: TGameState; |
11486 | 177 |
wheelEvent: boolean; |
2698 | 178 |
begin |
12818
d3113a4cba36
initialise previousGameState to something valid and not gsSuspend
nemo
parents:
12801
diff
changeset
|
179 |
previousGameState:= gsStart; |
7025 | 180 |
isTerminated:= false; |
2947 | 181 |
PrevTime:= SDL_GetTicks; |
11532 | 182 |
while (not isTerminated) and allOK do |
3063 | 183 |
begin |
11486 | 184 |
wheelEvent:= false; |
5724 | 185 |
SDL_PumpEvents(); |
8924 | 186 |
|
11360 | 187 |
while SDL_PeepEvents(@event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT) > 0 do |
2947 | 188 |
begin |
5339 | 189 |
case event.type_ of |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
190 |
SDL_KEYDOWN: |
13077 | 191 |
if isInChatMode then |
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8615
diff
changeset
|
192 |
begin |
3647
0d0df215fb52
making chat work... (keyboard support is heavily broken in sdl upstream)
koda
parents:
3634
diff
changeset
|
193 |
// sdl on iphone supports only ashii keyboards and the unicode field is deprecated in sdl 1.3 |
11365 | 194 |
KeyPressChat(event.key.keysym); |
8742
b7b8bd398c1b
Key returned 0 for arrows under linux. Sym works, clearer anyway.
nemo
parents:
8615
diff
changeset
|
195 |
end |
7025 | 196 |
else |
9028
3a38c9453697
Don't accept keyboard/mouse events on startup phase
unc0rr
parents:
8948
diff
changeset
|
197 |
if GameState >= gsGame then ProcessKey(event.key); |
6917 | 198 |
SDL_KEYUP: |
13077 | 199 |
if (not isInChatMode) and (GameState >= gsGame) then |
7025 | 200 |
ProcessKey(event.key); |
8924 | 201 |
|
13077 | 202 |
SDL_TEXTINPUT: if isInChatMode then uChat.TextInput(event.text); |
9697 | 203 |
|
5339 | 204 |
SDL_WINDOWEVENT: |
7025 | 205 |
begin |
11501 | 206 |
case event.window.event of |
207 |
SDL_WINDOWEVENT_FOCUS_GAINED: |
|
208 |
begin |
|
209 |
cHasFocus:= true; |
|
210 |
onFocusStateChanged(); |
|
211 |
end; |
|
212 |
SDL_WINDOWEVENT_FOCUS_LOST: |
|
213 |
begin |
|
214 |
cHasFocus:= false; |
|
215 |
onFocusStateChanged(); |
|
216 |
end; |
|
12801
8a359cc248d1
Fix Hedgewars going into suspension mode (game freezes) when windows got minimized
Wuzzy <Wuzzy2@mail.ru>
parents:
12793
diff
changeset
|
217 |
{$IFDEF MOBILE} |
8a359cc248d1
Fix Hedgewars going into suspension mode (game freezes) when windows got minimized
Wuzzy <Wuzzy2@mail.ru>
parents:
12793
diff
changeset
|
218 |
(* Suspend game if minimized on mobile. |
8a359cc248d1
Fix Hedgewars going into suspension mode (game freezes) when windows got minimized
Wuzzy <Wuzzy2@mail.ru>
parents:
12793
diff
changeset
|
219 |
NOTE: Mobile doesn't support online multiplayer yet, so it's not a problem. |
8a359cc248d1
Fix Hedgewars going into suspension mode (game freezes) when windows got minimized
Wuzzy <Wuzzy2@mail.ru>
parents:
12793
diff
changeset
|
220 |
BUT: This section WILL become a bug when online multiplayer is added to |
8a359cc248d1
Fix Hedgewars going into suspension mode (game freezes) when windows got minimized
Wuzzy <Wuzzy2@mail.ru>
parents:
12793
diff
changeset
|
221 |
Hedgewars and needs to be rethought. This is because it will cause the |
8a359cc248d1
Fix Hedgewars going into suspension mode (game freezes) when windows got minimized
Wuzzy <Wuzzy2@mail.ru>
parents:
12793
diff
changeset
|
222 |
game to freeze if one online player minimizes Hedgewars. *) |
11501 | 223 |
SDL_WINDOWEVENT_MINIMIZED: |
224 |
begin |
|
225 |
previousGameState:= GameState; |
|
226 |
GameState:= gsSuspend; |
|
227 |
end; |
|
12801
8a359cc248d1
Fix Hedgewars going into suspension mode (game freezes) when windows got minimized
Wuzzy <Wuzzy2@mail.ru>
parents:
12793
diff
changeset
|
228 |
{$ENDIF} |
11501 | 229 |
SDL_WINDOWEVENT_RESTORED: |
230 |
begin |
|
11853 | 231 |
if GameState = gsSuspend then |
232 |
GameState:= previousGameState; |
|
15320
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
233 |
cWindowedMaximized:= false; |
6611 | 234 |
{$IFDEF ANDROID} |
11501 | 235 |
//This call is used to reinitialize the glcontext and reload the textures |
236 |
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); |
|
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
|
237 |
{$ENDIF} |
11501 | 238 |
end; |
15320
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
239 |
SDL_WINDOWEVENT_MAXIMIZED: |
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
240 |
cWindowedMaximized:= true; |
11501 | 241 |
SDL_WINDOWEVENT_RESIZED: |
242 |
begin |
|
243 |
cNewScreenWidth:= max(2 * (event.window.data1 div 2), cMinScreenWidth); |
|
244 |
cNewScreenHeight:= max(2 * (event.window.data2 div 2), cMinScreenHeight); |
|
245 |
cScreenResizeDelay:= RealTicks + 500{$IFDEF IPHONEOS}div 2{$ENDIF}; |
|
246 |
end; |
|
247 |
end; // case closed |
|
7025 | 248 |
end; |
11501 | 249 |
|
9651 | 250 |
{$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
|
251 |
SDL_FINGERMOTION: |
9379 | 252 |
onTouchMotion(event.tfinger.x, event.tfinger.y, event.tfinger.dx, event.tfinger.dy, event.tfinger.fingerId); |
8924 | 253 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
254 |
SDL_FINGERDOWN: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
255 |
onTouchDown(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); |
8924 | 256 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
257 |
SDL_FINGERUP: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
258 |
onTouchUp(event.tfinger.x, event.tfinger.y, event.tfinger.fingerId); |
11548
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
259 |
{$ELSE} |
14829 | 260 |
SDL_MOUSEMOTION: |
261 |
ProcessMouseMotion(event.motion.xrel, event.motion.yrel); |
|
262 |
||
11548
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
263 |
SDL_MOUSEBUTTONDOWN: |
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
264 |
if GameState = gsConfirm then |
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
265 |
ParseCommand('quit', true) |
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
266 |
else |
14829 | 267 |
if (GameState >= gsGame) then ProcessMouseButton(event.button, true); |
11548
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
268 |
|
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
269 |
SDL_MOUSEBUTTONUP: |
14829 | 270 |
if (GameState >= gsGame) then ProcessMouseButton(event.button, false); |
11548
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
271 |
|
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
272 |
SDL_MOUSEWHEEL: |
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
273 |
begin |
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
274 |
wheelEvent:= true; |
12621 | 275 |
ProcessMouseWheel(event.wheel.y); |
11548
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
276 |
end; |
9651 | 277 |
{$ENDIF} |
11548
45982bda46cc
Fix for cursor movement problems on touch devices
Anton Malmygin <antonc27@mail.ru>
parents:
11534
diff
changeset
|
278 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
279 |
SDL_JOYAXISMOTION: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
280 |
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
|
281 |
SDL_JOYHATMOTION: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
282 |
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
|
283 |
SDL_JOYBUTTONDOWN: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
284 |
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
|
285 |
SDL_JOYBUTTONUP: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
286 |
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
|
287 |
SDL_QUITEV: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
288 |
isTerminated:= true |
7025 | 289 |
end; //end case event.type_ of |
290 |
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
|
291 |
|
11486 | 292 |
if (not wheelEvent) then |
293 |
ResetMouseWheel(); |
|
294 |
||
8346 | 295 |
if (CursorMovementX <> 0) or (CursorMovementY <> 0) then |
14917
63357ed39886
Precise + camera movement keys = move camera at slower
Wuzzy <Wuzzy2@mail.ru>
parents:
14881
diff
changeset
|
296 |
handlePositionUpdate(CursorMovementX, CursorMovementY); |
8346 | 297 |
|
7025 | 298 |
if (cScreenResizeDelay <> 0) and (cScreenResizeDelay < RealTicks) and |
299 |
((cNewScreenWidth <> cScreenWidth) or (cNewScreenHeight <> cScreenHeight)) then |
|
300 |
begin |
|
301 |
cScreenResizeDelay:= 0; |
|
8354
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset
|
302 |
cWindowedWidth:= cNewScreenWidth; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset
|
303 |
cWindowedHeight:= cNewScreenHeight; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset
|
304 |
cScreenWidth:= cWindowedWidth; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8350
diff
changeset
|
305 |
cScreenHeight:= cWindowedHeight; |
3463 | 306 |
|
7025 | 307 |
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true); |
15320
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
308 |
if cWindowedMaximized then |
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
309 |
WriteLnToConsole('window resize: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight) + ' (maximized)') |
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
310 |
else |
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
311 |
WriteLnToConsole('window resize: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight)); |
7025 | 312 |
ScriptOnScreenResize(); |
313 |
InitCameraBorders(); |
|
314 |
InitTouchInterface(); |
|
10302
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10273
diff
changeset
|
315 |
InitZoom(zoomValue); |
15320
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
316 |
if cWindowedMaximized then |
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
317 |
SendIPC('W' + IntToStr(cScreenWidth) + 'x' + IntToStr(cScreenHeight) + 'M') |
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
318 |
else |
3bf780084c86
Remember maximized state of game window
Wuzzy <Wuzzy2@mail.ru>
parents:
14917
diff
changeset
|
319 |
SendIPC('W' + IntToStr(cScreenWidth) + 'x' + IntToStr(cScreenHeight)); |
7025 | 320 |
end; |
321 |
||
322 |
CurrTime:= SDL_GetTicks(); |
|
6863 | 323 |
if PrevTime + longword(cTimerInterval) <= CurrTime then |
324 |
begin |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset
|
325 |
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
|
326 |
PrevTime:= CurrTime; |
6863 | 327 |
end |
328 |
else SDL_Delay(1); |
|
329 |
IPCCheckSock(); |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset
|
330 |
|
3063 | 331 |
end; |
2698 | 332 |
end; |
333 |
||
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
334 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 335 |
procedure RecorderMainLoop; |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
336 |
var oldGameTicks, oldRealTicks, newGameTicks, newRealTicks: LongInt; |
7180 | 337 |
begin |
338 |
if not BeginVideoRecording() then |
|
339 |
exit; |
|
340 |
DoTimer(0); // gsLandGen -> gsStart |
|
341 |
DoTimer(0); // gsStart -> gsGame |
|
342 |
||
14649
a049926fcdd3
Initialize newGameTicks/newRealTicks
Wuzzy <Wuzzy2@mail.ru>
parents:
14620
diff
changeset
|
343 |
newGameTicks:= 0; |
a049926fcdd3
Initialize newGameTicks/newRealTicks
Wuzzy <Wuzzy2@mail.ru>
parents:
14620
diff
changeset
|
344 |
newRealTicks:= 0; |
a049926fcdd3
Initialize newGameTicks/newRealTicks
Wuzzy <Wuzzy2@mail.ru>
parents:
14620
diff
changeset
|
345 |
|
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
346 |
if not LoadNextCameraPosition(newRealTicks, newGameTicks) then |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
347 |
exit; |
7180 | 348 |
fastScrolling:= true; |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
349 |
DoGameTick(newGameTicks); |
7180 | 350 |
fastScrolling:= false; |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
351 |
oldRealTicks:= 0; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
352 |
oldGameTicks:= newGameTicks; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
353 |
|
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
354 |
while LoadNextCameraPosition(newRealTicks, newGameTicks) do |
7180 | 355 |
begin |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
356 |
IPCCheckSock(); |
13040
a87d3119c962
VideoRec: Fix many effects not being recorded
Wuzzy <Wuzzy2@mail.ru>
parents:
12844
diff
changeset
|
357 |
RealTicks:= newRealTicks; |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
358 |
DoGameTick(newGameTicks - oldGameTicks); |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
359 |
if GameState = gsExit then |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
360 |
break; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
361 |
ProcessVisualGears(newRealTicks - oldRealTicks); |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
362 |
DrawWorld(newRealTicks - oldRealTicks); |
7180 | 363 |
EncodeFrame(); |
7392
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
364 |
oldRealTicks:= newRealTicks; |
bc3306c59a08
Correctly distinguish between game and real ticks while recording video,
Stepan777 <stepik-777@mail.ru>
parents:
7386
diff
changeset
|
365 |
oldGameTicks:= newGameTicks; |
7180 | 366 |
end; |
367 |
StopVideoRecording(); |
|
368 |
end; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
369 |
{$ENDIF} |
7180 | 370 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
371 |
/////////////////////////////////////////////////////////////////////////////// |
11532 | 372 |
procedure GameRoutine; |
8370 | 373 |
var s: shortstring; |
3611 | 374 |
i: LongInt; |
2698 | 375 |
begin |
14389 | 376 |
{$IFDEF PAS2C} |
377 |
AddFileLog('Generated using pas2c'); |
|
378 |
{$ENDIF} |
|
8615 | 379 |
WriteLnToConsole('Hedgewars engine ' + cVersionString + '-r' + cRevisionString + |
380 |
' (' + cHashString + ') with protocol #' + inttostr(cNetProtoVersion)); |
|
10127 | 381 |
AddFileLog('Prefix: "' + shortstring(PathPrefix) +'"'); |
382 |
AddFileLog('UserPrefix: "' + shortstring(UserPathPrefix) +'"'); |
|
8924 | 383 |
|
3611 | 384 |
for i:= 0 to ParamCount do |
385 |
AddFileLog(inttostr(i) + ': ' + ParamStr(i)); |
|
2698 | 386 |
|
2947 | 387 |
WriteToConsole('Init SDL... '); |
11507 | 388 |
if not cOnlyStats then SDLCheck(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_NOPARACHUTE) >= 0, 'SDL_Init', true); |
2947 | 389 |
WriteLnToConsole(msgOK); |
11507 | 390 |
if not cOnlyStats then |
391 |
begin |
|
392 |
WriteToConsole('Init SDL_ttf... '); |
|
393 |
SDLCheck(TTF_Init() <> -1, 'TTF_Init', true); |
|
394 |
WriteLnToConsole(msgOK); |
|
395 |
end; |
|
2698 | 396 |
|
11532 | 397 |
if not allOK then exit; |
2698 | 398 |
|
14829 | 399 |
SDL_ShowCursor(SDL_DISABLE); |
2698 | 400 |
|
7286 | 401 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 402 |
if GameType = gmtRecord then |
403 |
InitOffscreenOpenGL() |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
404 |
else |
7286 | 405 |
{$ENDIF} |
8924 | 406 |
begin |
7180 | 407 |
// show main window |
408 |
if cFullScreen then |
|
409 |
ParseCommand('fullscr 1', true) |
|
410 |
else |
|
411 |
ParseCommand('fullscr 0', true); |
|
412 |
end; |
|
2698 | 413 |
|
9686 | 414 |
ControllerInit(); // has to happen before InitKbdKeyTable to map keys |
2947 | 415 |
InitKbdKeyTable(); |
11532 | 416 |
if not allOK then exit; |
2698 | 417 |
|
8025 | 418 |
LoadLocale(cPathz[ptLocale] + '/en.txt'); // Do an initial load with english |
14619
62dea281e4d5
Refactor hwengine: Rename cLocale to cLanguage
Wuzzy <Wuzzy2@mail.ru>
parents:
14593
diff
changeset
|
419 |
if cLanguageFName <> 'en.txt' then |
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
420 |
begin |
2719 | 421 |
// Try two letter locale first before trying specific locale overrides |
14619
62dea281e4d5
Refactor hwengine: Rename cLocale to cLanguage
Wuzzy <Wuzzy2@mail.ru>
parents:
14593
diff
changeset
|
422 |
if (Length(cLanguage) > 3) and (Copy(cLanguage, 1, 2) <> 'en') then |
5339 | 423 |
begin |
14619
62dea281e4d5
Refactor hwengine: Rename cLocale to cLanguage
Wuzzy <Wuzzy2@mail.ru>
parents:
14593
diff
changeset
|
424 |
LoadLocale(cPathz[ptLocale] + '/' + Copy(cLanguage, 1, 2) + '.txt') |
5339 | 425 |
end; |
14619
62dea281e4d5
Refactor hwengine: Rename cLocale to cLanguage
Wuzzy <Wuzzy2@mail.ru>
parents:
14593
diff
changeset
|
426 |
LoadLocale(cPathz[ptLocale] + '/' + cLanguageFName) |
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
|
427 |
end |
14619
62dea281e4d5
Refactor hwengine: Rename cLocale to cLanguage
Wuzzy <Wuzzy2@mail.ru>
parents:
14593
diff
changeset
|
428 |
else cLanguage := 'en'; |
2698 | 429 |
|
11532 | 430 |
if not allOK then exit; |
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
|
431 |
WriteLnToConsole(msgGettingConfig); |
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
432 |
|
12186
322aaad4a93d
Load screen: Move “LOADING” from image into text box
Wuzzy <almikes@aol.com>
parents:
11853
diff
changeset
|
433 |
LoadFonts(); |
322aaad4a93d
Load screen: Move “LOADING” from image into text box
Wuzzy <almikes@aol.com>
parents:
11853
diff
changeset
|
434 |
AddProgress(); |
13586
41e0446fb254
Load default clan colors from settings file
Wuzzy <Wuzzy2@mail.ru>
parents:
13489
diff
changeset
|
435 |
LoadDefaultClanColors(cPathz[ptConfig] + '/settings.ini'); |
12186
322aaad4a93d
Load screen: Move “LOADING” from image into text box
Wuzzy <almikes@aol.com>
parents:
11853
diff
changeset
|
436 |
|
9988
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
437 |
if cTestLua then |
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
438 |
begin |
9988
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
439 |
ParseCommand('script ' + cScriptName, true); |
4046
cfdbddc4b385
making indentation consistent (noticed while debugging)
nemo
parents:
3976
diff
changeset
|
440 |
end |
2947 | 441 |
else |
9988
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
442 |
begin |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
443 |
if recordFileName = '' then |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
444 |
begin |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
445 |
InitIPC; |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
446 |
SendIPCAndWaitReply(_S'C'); // ask for game config |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
447 |
end |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
448 |
else |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
449 |
LoadRecordFromFile(recordFileName); |
317d46a2afd2
simple mechanism to run lua-based test cases. experimental - I will back it out if it turns out to be nonsense
sheepluva
parents:
9651
diff
changeset
|
450 |
end; |
2698 | 451 |
|
11532 | 452 |
if not allOK then exit; |
453 |
ScriptOnGameInit; |
|
454 |
s:= 'eproto ' + inttostr(cNetProtoVersion); |
|
455 |
SendIPCRaw(@s[0], Length(s) + 1); // send proto version |
|
2947 | 456 |
|
11532 | 457 |
InitTeams(); |
458 |
AssignStores(); |
|
7180 | 459 |
|
11532 | 460 |
if GameType = gmtRecord then |
461 |
SetSound(false); |
|
7180 | 462 |
|
11532 | 463 |
InitSound(); |
2590 | 464 |
|
11532 | 465 |
isDeveloperMode:= false; |
466 |
if checkFails(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true) then exit; |
|
467 |
if not allOK then exit; |
|
7286 | 468 |
|
11532 | 469 |
{$IFDEF USE_VIDEO_RECORDING} |
470 |
if GameType = gmtRecord then |
|
471 |
begin |
|
472 |
RecorderMainLoop(); |
|
473 |
exit; |
|
474 |
end; |
|
475 |
{$ENDIF} |
|
11507 | 476 |
|
11532 | 477 |
MainLoop; |
478 |
end; |
|
479 |
||
480 |
procedure Game; |
|
481 |
begin |
|
482 |
initEverything(true); |
|
483 |
GameRoutine; |
|
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
484 |
// clean up all the memory allocated |
3611 | 485 |
freeEverything(true); |
2698 | 486 |
end; |
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
487 |
/////////////////////////////////////////////////////////////////////////////// |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
488 |
// preInitEverything - init variables that are going to be ovewritten by arguments |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
489 |
// initEverything - init variables only. Should be coupled by below |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
490 |
// freeEverything - free above. Pay attention to the init/free order! |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
491 |
procedure preInitEverything; |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
492 |
begin |
11507 | 493 |
allOK:= true; |
3365
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
494 |
Randomize(); |
37ac593e9027
wow all these files only for land preview and seed generation
koda
parents:
3312
diff
changeset
|
495 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
496 |
uVariables.preInitModule; |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
497 |
uSound.preInitModule; |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
498 |
end; |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
499 |
|
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
500 |
procedure initEverything (complete:boolean); |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
501 |
begin |
11644 | 502 |
PathPrefix:= PathPrefix + #0; |
503 |
UserPathPrefix:= UserPathPrefix + #0; |
|
504 |
uPhysFSLayer.initModule(@PathPrefix[1], @UserPathPrefix[1]); |
|
505 |
PathPrefix:= copy(PathPrefix, 1, length(PathPrefix) - 1); |
|
506 |
UserPathPrefix:= copy(UserPathPrefix, 1, length(UserPathPrefix) - 1); |
|
507 |
||
7850 | 508 |
uUtils.initModule(complete); // opens the debug file, must be the first |
509 |
uVariables.initModule; // inits all global variables |
|
510 |
uCommands.initModule; // helps below |
|
511 |
uCommandHandlers.initModule; // registers all messages from frontend |
|
3525 | 512 |
|
7850 | 513 |
uLand.initModule; // computes land |
514 |
uLandPainted.initModule; // computes drawn land |
|
515 |
uIO.initModule; // sets up sockets |
|
11631
b3db79b56f28
Pass paths to initModule of uPhysFSLayer (as in 4be6cd55f1cf from qmlfrontend branch)
unc0rr
parents:
11548
diff
changeset
|
516 |
|
10150
fa5c83fd0ad9
Allow lua drawn maps (shoppamap, tunnels, diagonal maze etc) to generate previews.
nemo
parents:
10139
diff
changeset
|
517 |
uScript.initModule; |
3697 | 518 |
|
3525 | 519 |
if complete then |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
520 |
begin |
9468
3d07fd84c39d
- Actually call uTexture.initModule and .freeModule
unc0rr
parents:
9466
diff
changeset
|
521 |
uTextures.initModule; |
7850 | 522 |
{$IFDEF ANDROID}GLUnit.initModule;{$ENDIF} |
7837 | 523 |
{$IFDEF USE_TOUCH_INTERFACE}uTouch.initModule;{$ENDIF} |
9543 | 524 |
{$IFDEF USE_VIDEO_RECORDING}uVideoRec.initModule;{$ENDIF} |
6415 | 525 |
uAI.initModule; |
3525 | 526 |
uAIMisc.initModule; |
7850 | 527 |
uAILandMarks.initModule; //stub |
3525 | 528 |
uAmmos.initModule; |
7850 | 529 |
uCaptions.initModule; |
530 |
||
3525 | 531 |
uChat.initModule; |
532 |
uCollisions.initModule; |
|
533 |
uGears.initModule; |
|
9466 | 534 |
uInputHandler.initModule; |
7850 | 535 |
uMisc.initModule; |
536 |
uLandTexture.initModule; //stub |
|
3525 | 537 |
uSound.initModule; |
538 |
uStats.initModule; |
|
539 |
uStore.initModule; |
|
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10302
diff
changeset
|
540 |
uRender.initModule; |
3525 | 541 |
uTeams.initModule; |
542 |
uVisualGears.initModule; |
|
9283
76e68c136a11
Refactoring: VGSHandlers.inc -> uVisualGearsHandlers.pas
unc0rr
parents:
9280
diff
changeset
|
543 |
uVisualGearsHandlers.initModule; |
3525 | 544 |
uWorld.initModule; |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
545 |
end; |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
546 |
end; |
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
547 |
|
3525 | 548 |
procedure freeEverything (complete:boolean); |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
549 |
begin |
3525 | 550 |
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
|
551 |
begin |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
552 |
WriteLnToConsole('Freeing resources...'); |
7850 | 553 |
uAI.freeModule; // AI things need to be freed first |
554 |
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
|
555 |
uAILandMarks.freeModule; |
4393 | 556 |
uCaptions.freeModule; |
3525 | 557 |
uWorld.freeModule; |
3615 | 558 |
uVisualGears.freeModule; |
3525 | 559 |
uTeams.freeModule; |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
560 |
uInputHandler.freeModule; |
3525 | 561 |
uStats.freeModule; //stub |
3615 | 562 |
uSound.freeModule; |
7850 | 563 |
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
|
564 |
uLandTexture.freeModule; |
3525 | 565 |
uGears.freeModule; |
566 |
uCollisions.freeModule; //stub |
|
4901 | 567 |
uChat.freeModule; |
3525 | 568 |
uAmmos.freeModule; |
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10302
diff
changeset
|
569 |
uRender.freeModule; |
7850 | 570 |
uStore.freeModule; // closes SDL |
7286 | 571 |
{$IFDEF USE_VIDEO_RECORDING}uVideoRec.freeModule;{$ENDIF} |
7850 | 572 |
{$IFDEF USE_TOUCH_INTERFACE}uTouch.freeModule;{$ENDIF} //stub |
573 |
{$IFDEF ANDROID}GLUnit.freeModule;{$ENDIF} |
|
9468
3d07fd84c39d
- Actually call uTexture.initModule and .freeModule
unc0rr
parents:
9466
diff
changeset
|
574 |
uTextures.freeModule; |
12844
22cc3d82905a
Should probably have gl context stuff in its own unit separate from store, but, don't close the gl context before anything that might still want to do gl operations
nemo
parents:
12831
diff
changeset
|
575 |
SDL_GL_DeleteContext(SDLGLcontext); |
22cc3d82905a
Should probably have gl context stuff in its own unit separate from store, but, don't close the gl context before anything that might still want to do gl operations
nemo
parents:
12831
diff
changeset
|
576 |
SDL_DestroyWindow(SDLwindow); |
22cc3d82905a
Should probably have gl context stuff in its own unit separate from store, but, don't close the gl context before anything that might still want to do gl operations
nemo
parents:
12831
diff
changeset
|
577 |
SDL_Quit() |
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
|
578 |
end; |
3697 | 579 |
|
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
580 |
uIO.freeModule; |
3038 | 581 |
uLand.freeModule; |
5066 | 582 |
uLandPainted.freeModule; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2715
diff
changeset
|
583 |
|
4413 | 584 |
uCommandHandlers.freeModule; |
4373 | 585 |
uCommands.freeModule; |
4359 | 586 |
uVariables.freeModule; |
7850 | 587 |
uUtils.freeModule; // closes debug file |
10159 | 588 |
uPhysFSLayer.freeModule; |
589 |
uScript.freeModule; |
|
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
590 |
end; |
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2800
diff
changeset
|
591 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
592 |
/////////////////////////////////////////////////////////////////////////////// |
11133
fa3d227fb308
- Fix for retrieving 'Maze' preview genration
antonc27 <antonc27@mail.ru>
parents:
11113
diff
changeset
|
593 |
procedure GenLandPreview; |
fa3d227fb308
- Fix for retrieving 'Maze' preview genration
antonc27 <antonc27@mail.ru>
parents:
11113
diff
changeset
|
594 |
{$IFDEF MOBILE} |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7025
diff
changeset
|
595 |
var Preview: TPreview; |
11133
fa3d227fb308
- Fix for retrieving 'Maze' preview genration
antonc27 <antonc27@mail.ru>
parents:
11113
diff
changeset
|
596 |
{$ELSE} |
10162 | 597 |
var Preview: TPreviewAlpha; |
11155 | 598 |
{$ENDIF} |
2698 | 599 |
begin |
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
600 |
initEverything(false); |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
601 |
|
2947 | 602 |
InitIPC; |
11507 | 603 |
if allOK then |
604 |
begin |
|
605 |
IPCWaitPongEvent; |
|
11532 | 606 |
if checkFails(InitStepsFlags = cifRandomize, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true) then exit; |
2698 | 607 |
|
11507 | 608 |
ScriptOnPreviewInit; |
609 |
{$IFDEF MOBILE} |
|
610 |
GenPreview(Preview); |
|
611 |
{$ELSE} |
|
612 |
GenPreviewAlpha(Preview); |
|
613 |
{$ENDIF} |
|
614 |
WriteLnToConsole('Sending preview...'); |
|
615 |
SendIPCRaw(@Preview, sizeof(Preview)); |
|
616 |
SendIPCRaw(@MaxHedgehogs, sizeof(byte)); |
|
617 |
WriteLnToConsole('Preview sent, disconnect'); |
|
618 |
end; |
|
619 |
||
3525 | 620 |
freeEverything(false); |
2698 | 621 |
end; |
622 |
||
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
623 |
{$IFNDEF PAS2C} |
13489
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
624 |
// Write backtrace to console and log when an unhandled exception occurred |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
625 |
procedure catchUnhandledException(Obj: TObject; Addr: Pointer; FrameCount: Longint; Frames: PPointer); |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
626 |
var |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
627 |
Message: string; |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
628 |
i: LongInt; |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
629 |
begin |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
630 |
WriteLnToConsole('An unhandled exception occurred at $' + HexStr(Addr) + ':'); |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
631 |
if Obj is exception then |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
632 |
begin |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
633 |
Message := Exception(Obj).ClassName + ': ' + Exception(Obj).Message; |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
634 |
WriteLnToConsole(Message); |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
635 |
end |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
636 |
else |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
637 |
WriteLnToConsole('Exception object ' + Obj.ClassName + ' is not of class Exception.'); |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
638 |
WriteLnToConsole(BackTraceStrFunc(Addr)); |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
639 |
if (FrameCount > 0) then |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
640 |
begin |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
641 |
for i := 0 to FrameCount - 1 do |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
642 |
WriteLnToConsole(BackTraceStrFunc(Frames[i])); |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
643 |
end; |
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
644 |
end; |
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
645 |
{$ENDIF} |
13489
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
646 |
|
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
647 |
{$IFDEF HWLIBRARY} |
11685
a2e86a867fb5
pas2c converts exit to return, so change RunEngine signature
frd
parents:
11644
diff
changeset
|
648 |
function RunEngine(argc: LongInt; argv: PPChar): LongInt; cdecl; export; |
2008 | 649 |
begin |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
650 |
operatingsystem_parameter_argc:= argc; |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
651 |
operatingsystem_parameter_argv:= argv; |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
652 |
{$ELSE} |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
653 |
begin |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
654 |
{$ENDIF} |
2008 | 655 |
|
14220 | 656 |
{$IFDEF WINDOWS} |
12657
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
657 |
ShcoreLibHandle := LoadLibrary('Shcore.dll'); |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
658 |
if (ShcoreLibHandle <> 0) then |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
659 |
begin |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
660 |
SetProcessDpiAwareness := |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
661 |
TSetProcessDpiAwareness(GetProcedureAddress(ShcoreLibHandle, 'SetProcessDpiAwareness')); |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
662 |
if (SetProcessDpiAwareness <> nil) then |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
663 |
SetProcessDpiAwareness(1); |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
664 |
end; |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
665 |
{$ENDIF} |
2065819170ce
(Hopefully) fix game camera being shifted on Windows 10
alfadur
parents:
12621
diff
changeset
|
666 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
667 |
/////////////////////////////////////////////////////////////////////////////// |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
668 |
/////////////////////////////////// m a i n /////////////////////////////////// |
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
669 |
/////////////////////////////////////////////////////////////////////////////// |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset
|
670 |
{$IFDEF PAS2C} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset
|
671 |
// 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
|
672 |
init(argc, argv); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset
|
673 |
{$ENDIF} |
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
674 |
{$IFNDEF PAS2C} |
14881
259840ca77e3
Fix Pas2C failing to include SysUtils
Wuzzy <Wuzzy2@mail.ru>
parents:
14829
diff
changeset
|
675 |
// Custom procedure for unhandled exceptions; ExceptProc is used by SysUtils module |
13489
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
676 |
ExceptProc:= @catchUnhandledException; |
13843
cf7626f46bb2
IFNDEF custom exception handlung away in pas2c builds
Wuzzy <Wuzzy2@mail.ru>
parents:
13586
diff
changeset
|
677 |
{$ENDIF} |
13489
dbf4f7a677be
When hwengine crashes w/ error 217, write backtrace in log, too
Wuzzy <Wuzzy2@mail.ru>
parents:
13488
diff
changeset
|
678 |
|
7896
67217e6108fd
another stake at variable pre-initialisation - we lost preview logging in the course
koda
parents:
7850
diff
changeset
|
679 |
preInitEverything(); |
3678
00428183300f
patch by lucass (polished by me) - command line parsing is now much more flexible
koda
parents:
3670
diff
changeset
|
680 |
|
2947 | 681 |
GetParams(); |
2008 | 682 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6415
diff
changeset
|
683 |
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
|
684 |
GenLandPreview() |
13488
d23731fe84d4
Fix hwengine --help returning with exit code 51
Wuzzy <Wuzzy2@mail.ru>
parents:
13077
diff
changeset
|
685 |
else if (GameType <> gmtBadSyntax) and (GameType <> gmtSyntaxHelp) then |
8308
cdf83bdf7b27
move GetParams in ArgParser, print a warning when using a deprecated command, pascalisation of +1s
koda
parents:
8307
diff
changeset
|
686 |
Game(); |
3697 | 687 |
|
13488
d23731fe84d4
Fix hwengine --help returning with exit code 51
Wuzzy <Wuzzy2@mail.ru>
parents:
13077
diff
changeset
|
688 |
// return error when engine is not called correctly |
d23731fe84d4
Fix hwengine --help returning with exit code 51
Wuzzy <Wuzzy2@mail.ru>
parents:
13077
diff
changeset
|
689 |
if GameType = gmtBadSyntax then |
10176 | 690 |
{$IFDEF PAS2C} |
10306 | 691 |
exit(HaltUsageError); |
10176 | 692 |
{$ELSE} |
10306 | 693 |
halt(HaltUsageError); |
10176 | 694 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8018
diff
changeset
|
695 |
|
10619
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
696 |
if cTestLua then |
10621
b50e094d8b00
add warning to logs when tests terminates prematurely
sheepluva
parents:
10619
diff
changeset
|
697 |
begin |
10622 | 698 |
WriteLnToConsole(errmsgLuaTestTerm); |
10619
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
699 |
{$IFDEF PAS2C} |
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
700 |
exit(HaltTestUnexpected); |
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
701 |
{$ELSE} |
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
702 |
halt(HaltTestUnexpected); |
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
703 |
{$ENDIF} |
10621
b50e094d8b00
add warning to logs when tests terminates prematurely
sheepluva
parents:
10619
diff
changeset
|
704 |
end; |
10619
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
705 |
|
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
706 |
{$IFDEF PAS2C} |
11149 | 707 |
exit(HaltNoError); |
10619
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
708 |
{$ELSE} |
11149 | 709 |
{$IFDEF IPHONEOS} |
11685
a2e86a867fb5
pas2c converts exit to return, so change RunEngine signature
frd
parents:
11644
diff
changeset
|
710 |
exit(HaltNoError); |
11149 | 711 |
{$ELSE} |
712 |
halt(HaltNoError); |
|
713 |
{$ENDIF} |
|
10619
ee460883729e
unexpected return from lua test should not return exit status 0
sheepluva
parents:
10581
diff
changeset
|
714 |
{$ENDIF} |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
715 |
{$IFDEF HWLIBRARY} |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
716 |
end; |
2698 | 717 |
{$ENDIF} |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10162
diff
changeset
|
718 |
|
51 | 719 |
end. |