hedgewars/hwengine.dpr
author unc0rr
Mon, 29 Sep 2008 22:14:23 +0000
changeset 1301 c6fe8a4bfd34
parent 1128 9b3f42bf4eef
child 1524 5a652a465559
permissions -rw-r--r--
Fix a bug screwing team selection up in network game (REMOVETEAM message doesn't have teamID, and after removing the team QMap still contains old info, when add and remove team with the same name, total hedgehogs number will be decreased by first team hh number)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
     1
 (*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 1022
diff changeset
     2
 * Hedgewars, a free turn based strategy game
393
db01cc79f278 Update copyright information
unc0rr
parents: 377
diff changeset
     3
 * Copyright (c) 2004-2007 Andrey Korotaev <unC0Rr@gmail.com>
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
     4
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
     8
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    12
 * GNU General Public License for more details.
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    13
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    14
 * You should have received a copy of the GNU General Public License
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    15
 * along with this program; if not, write to the Free Software
57c2ef19f719 Relicense to GPL
unc0rr
parents: 174
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    17
 *)
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    18
355
40c68869899e Small fixes to bring engine to life
unc0rr
parents: 351
diff changeset
    19
{$IFNDEF FPC}
40c68869899e Small fixes to bring engine to life
unc0rr
parents: 351
diff changeset
    20
WriteLn('Only Freepascal supported');
40c68869899e Small fixes to bring engine to life
unc0rr
parents: 351
diff changeset
    21
{$ENDIF}
40c68869899e Small fixes to bring engine to life
unc0rr
parents: 351
diff changeset
    22
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    23
program hwengine;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    24
uses
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    25
  SDLh,
753
40fc0deb388f Start conversion to OpenGL rendering
unc0rr
parents: 720
diff changeset
    26
  GL,
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    27
  uConsts in 'uConsts.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    28
  uGame in 'uGame.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    29
  uMisc in 'uMisc.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    30
  uStore in 'uStore.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    31
  uWorld in 'uWorld.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    32
  uIO in 'uIO.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    33
  uGears in 'uGears.pas',
802
ed5450a89b96 Start implementing 'visual gears' - gears, that don't need to be synchronized (clouds and flakes)
unc0rr
parents: 771
diff changeset
    34
  uVisualGears in 'uVisualGears.pas',
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    35
  uConsole in 'uConsole.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    36
  uKeys in 'uKeys.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    37
  uTeams in 'uTeams.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    38
  uSound in 'uSound.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    39
  uRandom in 'uRandom.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    40
  uAI in 'uAI.pas',
79
29b477319854 - New test map
unc0rr
parents: 74
diff changeset
    41
  uAIMisc in 'uAIMisc.pas',
29b477319854 - New test map
unc0rr
parents: 74
diff changeset
    42
  uAIAmmoTests in 'uAIAmmoTests.pas',
29b477319854 - New test map
unc0rr
parents: 74
diff changeset
    43
  uAIActions in 'uAIActions.pas',
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    44
  uCollisions in 'uCollisions.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    45
  uLand in 'uLand.pas',
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    46
  uLandTemplates in 'uLandTemplates.pas',
54
839fd258ae6f - Fixed game loading
unc0rr
parents: 53
diff changeset
    47
  uLandObjects in 'uLandObjects.pas',
80
3c3dc6a148ca - Fixed bug with hedgehog under water using rope
unc0rr
parents: 79
diff changeset
    48
  uLandGraphics in 'uLandGraphics.pas',
288
929c44745fd9 Ammo schemes and ammo stores support in engine
unc0rr
parents: 281
diff changeset
    49
  uLocale in 'uLocale.pas',
316
57d50189ad86 Calculate land digest
unc0rr
parents: 308
diff changeset
    50
  uAmmos in 'uAmmos.pas',
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 316
diff changeset
    51
  uSHA in 'uSHA.pas',
814
7fb4417b7bc1 Start implementing better statistics implementation (does nothing yet)
unc0rr
parents: 803
diff changeset
    52
  uFloat in 'uFloat.pas',
942
b41af014d85e Stub for chat implementation
unc0rr
parents: 931
diff changeset
    53
  uStats in 'uStats.pas',
b41af014d85e Stub for chat implementation
unc0rr
parents: 931
diff changeset
    54
  uChat in 'uChat.pas';
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    55
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    56
{$INCLUDE options.inc}
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    57
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    58
// also: GSHandlers.inc
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    59
//       CCHandlers.inc
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    60
//       HHHandlers.inc
357
165a040e4cfa - Fix Blow Torch and Air Attack
unc0rr
parents: 355
diff changeset
    61
//       SinTable.inc
271
f2f9a3d5b441 Protocol version sets in CMake
unc0rr
parents: 268
diff changeset
    62
//       proto.inc
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    63
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    64
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    65
procedure OnDestroy; forward;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    66
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    67
////////////////////////////////
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 357
diff changeset
    68
procedure DoTimer(Lag: LongInt);
1080
8735046fc698 Repair screenshots capture on 'C' key press
unc0rr
parents: 1066
diff changeset
    69
var s: string;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    70
begin
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 529
diff changeset
    71
inc(RealTicks, Lag);
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 529
diff changeset
    72
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    73
case GameState of
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    74
   gsLandGen: begin
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    75
              GenMap;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    76
              GameState:= gsStart;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    77
              end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    78
     gsStart: begin
949
866729775535 Use nick from frontend to prepend chat messages
unc0rr
parents: 947
diff changeset
    79
              AddClouds;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    80
              AssignHHCoords;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    81
              AddMiscGears;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    82
              StoreLoad;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    83
              ResetKbd;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    84
              SoundLoad;
72
aeb2ac1878dc Basic save support in engine
unc0rr
parents: 71
diff changeset
    85
              if GameType = gmtSave then
aeb2ac1878dc Basic save support in engine
unc0rr
parents: 71
diff changeset
    86
                 begin
aeb2ac1878dc Basic save support in engine
unc0rr
parents: 71
diff changeset
    87
                 isSEBackup:= isSoundEnabled;
aeb2ac1878dc Basic save support in engine
unc0rr
parents: 71
diff changeset
    88
                 isSoundEnabled:= false
aeb2ac1878dc Basic save support in engine
unc0rr
parents: 71
diff changeset
    89
                 end;
510
4e994e1b7abb New loading progress sprite code
unc0rr
parents: 498
diff changeset
    90
              FinishProgress;
1097
06b15817b8a0 Enable music dependance on current land theme
unc0rr
parents: 1080
diff changeset
    91
              PlayMusic;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    92
              GameState:= gsGame
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    93
              end;
1022
f6a3fcb329ca Start exit confirmation implementation
unc0rr
parents: 988
diff changeset
    94
   gsConfirm,
947
4e0c3ad89483 - 't' key for entering chat message
unc0rr
parents: 946
diff changeset
    95
      gsGame: begin
167
805fa9a27e9e "Trusted" binds
unc0rr
parents: 166
diff changeset
    96
              ProcessKbd;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
    97
              DoGameTick(Lag);
803
3f73901a350a - Use cloud as 'visual gear'
unc0rr
parents: 802
diff changeset
    98
              ProcessVisualGears(Lag);
956
19003f7fc174 Get rid of unused Surface parameter
unc0rr
parents: 949
diff changeset
    99
              DrawWorld(Lag);
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   100
              end;
947
4e0c3ad89483 - 't' key for entering chat message
unc0rr
parents: 946
diff changeset
   101
      gsChat: begin
4e0c3ad89483 - 't' key for entering chat message
unc0rr
parents: 946
diff changeset
   102
              DoGameTick(Lag);
4e0c3ad89483 - 't' key for entering chat message
unc0rr
parents: 946
diff changeset
   103
              ProcessVisualGears(Lag);
956
19003f7fc174 Get rid of unused Surface parameter
unc0rr
parents: 949
diff changeset
   104
              DrawWorld(Lag);
947
4e0c3ad89483 - 't' key for entering chat message
unc0rr
parents: 946
diff changeset
   105
              end;
4e0c3ad89483 - 't' key for entering chat message
unc0rr
parents: 946
diff changeset
   106
      gsExit: begin
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   107
              OnDestroy;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   108
              end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   109
     end;
564
17fb45c670c1 Finalize basic playlists implementation
unc0rr
parents: 529
diff changeset
   110
753
40fc0deb388f Start conversion to OpenGL rendering
unc0rr
parents: 720
diff changeset
   111
SDL_GL_SwapBuffers();
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   112
if flagMakeCapture then
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   113
   begin
1080
8735046fc698 Repair screenshots capture on 'C' key press
unc0rr
parents: 1066
diff changeset
   114
   flagMakeCapture:= false;
8735046fc698 Repair screenshots capture on 'C' key press
unc0rr
parents: 1066
diff changeset
   115
   s:= 'hw_' + cSeed + '_' + inttostr(GameTicks) + '.tga';
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   116
   WriteLnToConsole('Saving ' + s);
1080
8735046fc698 Repair screenshots capture on 'C' key press
unc0rr
parents: 1066
diff changeset
   117
   MakeScreenshot(s);
8735046fc698 Repair screenshots capture on 'C' key press
unc0rr
parents: 1066
diff changeset
   118
//   SDL_SaveBMP_RW(SDLPrimSurface, SDL_RWFromFile(Str2PChar(s), 'wb'), 1)
8735046fc698 Repair screenshots capture on 'C' key press
unc0rr
parents: 1066
diff changeset
   119
   end;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   120
end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   121
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   122
////////////////////
79
29b477319854 - New test map
unc0rr
parents: 74
diff changeset
   123
procedure OnDestroy;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   124
begin
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   125
{$IFDEF DEBUGFILE}AddFileLog('Freeing resources...');{$ENDIF}
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   126
if isSoundEnabled then ReleaseSound;
619
758da3d985fa - Update protocol doc
unc0rr
parents: 611
diff changeset
   127
StoreRelease;
758da3d985fa - Update protocol doc
unc0rr
parents: 611
diff changeset
   128
SendKB;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   129
CloseIPC;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   130
TTF_Quit;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   131
SDL_Quit;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   132
halt
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   133
end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   134
1120
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   135
////////////////////////////////
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   136
procedure Resize(w, h: LongInt);
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   137
begin
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   138
cScreenWidth:= w;
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   139
cScreenHeight:= h;
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   140
if cFullScreen then
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   141
	ParseCommand('/fullscr 1', true)
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   142
else
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   143
	ParseCommand('/fullscr 0', true);
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   144
end;
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   145
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   146
///////////////////
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   147
procedure MainLoop;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   148
var PrevTime,
188
a7c2a61524c2 Cardinal -> Longword
unc0rr
parents: 183
diff changeset
   149
    CurrTime: Longword;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   150
    event: TSDL_Event;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   151
begin
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   152
PrevTime:= SDL_GetTicks;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   153
repeat
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   154
while SDL_PollEvent(@event) <> 0 do
1120
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   155
	case event.type_ of
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   156
		SDL_KEYDOWN: if GameState = gsChat then KeyPressChat(event.key.keysym.unicode);
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   157
		SDL_ACTIVEEVENT: if (event.active.state and SDL_APPINPUTFOCUS) <> 0 then
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   158
				cHasFocus:= event.active.gain = 1;
1127
7e1b94a0fc1f - Disable ability to resize window
unc0rr
parents: 1121
diff changeset
   159
		//SDL_VIDEORESIZE: Resize(max(event.resize.w, 600), max(event.resize.h, 450));
1120
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   160
		SDL_QUITEV: isTerminated:= true
eb5a9f86f9c6 Add ability to resize engine's window
unc0rr
parents: 1097
diff changeset
   161
		end;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   162
CurrTime:= SDL_GetTicks;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   163
if PrevTime + cTimerInterval <= CurrTime then
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   164
   begin
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   165
   DoTimer(CurrTime - PrevTime);
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   166
   PrevTime:= CurrTime
434
2c6ccce17f39 Many small improvements
unc0rr
parents: 426
diff changeset
   167
   end else SDL_Delay(1);
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   168
IPCCheckSock
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   169
until isTerminated
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   170
end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   171
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   172
////////////////////
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   173
procedure GetParams;
889
3bf9dc791f45 Some work on newhwserv
unc0rr
parents: 887
diff changeset
   174
var
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 208
diff changeset
   175
{$IFDEF DEBUGFILE}
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 357
diff changeset
   176
    i: LongInt;
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 208
diff changeset
   177
{$ENDIF}
97
e7c1df9cce2c - make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents: 81
diff changeset
   178
    p: TPathType;
e7c1df9cce2c - make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents: 81
diff changeset
   179
begin
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   180
{$IFDEF DEBUGFILE}
97
e7c1df9cce2c - make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents: 81
diff changeset
   181
AddFileLog('Prefix: "' + PathPrefix +'"');
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   182
for i:= 0 to ParamCount do
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   183
    AddFileLog(inttostr(i) + ': ' + ParamStr(i));
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   184
{$ENDIF}
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 208
diff changeset
   185
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   186
case ParamCount of
1128
9b3f42bf4eef Add an option to engine for turning music off
unc0rr
parents: 1127
diff changeset
   187
15: begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
   188
     val(ParamStr(2), cScreenWidth);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
   189
     val(ParamStr(3), cScreenHeight);
1121
d595dc56b4f3 Remember initial resolution settings to use when switching to fullscreen mode
unc0rr
parents: 1120
diff changeset
   190
     cInitWidth:= cScreenWidth;
d595dc56b4f3 Remember initial resolution settings to use when switching to fullscreen mode
unc0rr
parents: 1120
diff changeset
   191
     cInitHeight:= cScreenHeight;
497
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   192
     cBitsStr:= ParamStr(4);
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
   193
     val(cBitsStr, cBits);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
   194
     val(ParamStr(5), ipcPort);
497
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   195
     cFullScreen:= ParamStr(6) = '1';
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   196
     isSoundEnabled:= ParamStr(7) = '1';
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   197
     cLocaleFName:= ParamStr(8);
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
   198
     val(ParamStr(9), cInitVolume);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
   199
     val(ParamStr(10), cTimerInterval);
497
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   200
     PathPrefix:= ParamStr(11);
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   201
     cShowFPS:= ParamStr(12) = '1';
529
812682c1ab62 Option for alternative damage tags
unc0rr
parents: 510
diff changeset
   202
     cAltDamage:= ParamStr(13) = '1';
949
866729775535 Use nick from frontend to prepend chat messages
unc0rr
parents: 947
diff changeset
   203
     UserNick:= DecodeBase64(ParamStr(14));
1128
9b3f42bf4eef Add an option to engine for turning music off
unc0rr
parents: 1127
diff changeset
   204
     isMusicEnabled:= ParamStr(15) = '1';
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 208
diff changeset
   205
     for p:= Succ(Low(TPathType)) to High(TPathType) do
949
866729775535 Use nick from frontend to prepend chat messages
unc0rr
parents: 947
diff changeset
   206
         if p <> ptMapCurrent then Pathz[p]:= PathPrefix + '/' + Pathz[p]
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   207
     end;
497
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   208
  3: begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 497
diff changeset
   209
     val(ParamStr(2), ipcPort);
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   210
     GameType:= gmtLandPreview;
497
adf1aee202c6 merge fixes from branch
displacer
parents: 489
diff changeset
   211
     if ParamStr(3) <> 'landpreview' then OutError(errmsgShouldntRun, true);
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   212
     end
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   213
   else
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   214
   OutError(errmsgShouldntRun, true)
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   215
   end
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   216
end;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   217
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   218
procedure ShowMainWindow;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   219
begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 316
diff changeset
   220
if cFullScreen then ParseCommand('fullscr 1', true)
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 316
diff changeset
   221
               else ParseCommand('fullscr 0', true);
281
5b483aa9f2ab Pause support (mouse cursor is released when the game is paused)
unc0rr
parents: 271
diff changeset
   222
SDL_ShowCursor(0)
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   223
end;
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   224
160
207f520b9e83 Soma small fixes + new land template
unc0rr
parents: 159
diff changeset
   225
///////////////
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   226
procedure Game;
205
8d9aff55e6ab - Set version to 0.8
unc0rr
parents: 200
diff changeset
   227
var s: shortstring;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   228
begin
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   229
WriteToConsole('Init SDL... ');
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   230
SDLTry(SDL_Init(SDL_INIT_VIDEO) >= 0, true);
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   231
WriteLnToConsole(msgOK);
753
40fc0deb388f Start conversion to OpenGL rendering
unc0rr
parents: 720
diff changeset
   232
377
d9b88dbdf5a9 Support unicode input for chat
unc0rr
parents: 371
diff changeset
   233
SDL_EnableUNICODE(1);
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   234
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   235
WriteToConsole('Init SDL_ttf... ');
200
a36102728776 Small fixes
unc0rr
parents: 188
diff changeset
   236
SDLTry(TTF_Init <> -1, true);
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   237
WriteLnToConsole(msgOK);
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   238
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   239
ShowMainWindow;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   240
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   241
InitKbdKeyTable;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   242
InitIPC;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   243
WriteLnToConsole(msgGettingConfig);
80
3c3dc6a148ca - Fixed bug with hedgehog under water using rope
unc0rr
parents: 79
diff changeset
   244
3c3dc6a148ca - Fixed bug with hedgehog under water using rope
unc0rr
parents: 79
diff changeset
   245
LoadLocale(Pathz[ptLocale] + '/' + cLocaleFName);
3c3dc6a148ca - Fixed bug with hedgehog under water using rope
unc0rr
parents: 79
diff changeset
   246
3c3dc6a148ca - Fixed bug with hedgehog under water using rope
unc0rr
parents: 79
diff changeset
   247
SendIPCAndWaitReply('C');        // ask for game config
205
8d9aff55e6ab - Set version to 0.8
unc0rr
parents: 200
diff changeset
   248
8d9aff55e6ab - Set version to 0.8
unc0rr
parents: 200
diff changeset
   249
s:= 'eproto ' + inttostr(cNetProtoVersion);
8d9aff55e6ab - Set version to 0.8
unc0rr
parents: 200
diff changeset
   250
SendIPCRaw(@s[0], Length(s) + 1); // send proto version
8d9aff55e6ab - Set version to 0.8
unc0rr
parents: 200
diff changeset
   251
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   252
InitTeams;
288
929c44745fd9 Ammo schemes and ammo stores support in engine
unc0rr
parents: 281
diff changeset
   253
AssignStores;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   254
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   255
if isSoundEnabled then InitSound;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   256
InitWorld;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   257
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   258
StoreInit;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   259
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   260
isDeveloperMode:= false;
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   261
55
e09f7c952a40 Send run parameters by cmd line, game parameters by IPC... breaks network game
unc0rr
parents: 54
diff changeset
   262
TryDo(InitStepsFlags = cifAllInited,
e09f7c952a40 Send run parameters by cmd line, game parameters by IPC... breaks network game
unc0rr
parents: 54
diff changeset
   263
      'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')',
e09f7c952a40 Send run parameters by cmd line, game parameters by IPC... breaks network game
unc0rr
parents: 54
diff changeset
   264
      true);
e09f7c952a40 Send run parameters by cmd line, game parameters by IPC... breaks network game
unc0rr
parents: 54
diff changeset
   265
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   266
MainLoop
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   267
end;
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   268
160
207f520b9e83 Soma small fixes + new land template
unc0rr
parents: 159
diff changeset
   269
/////////////////////////
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   270
procedure GenLandPreview;
566
1c1cb593cb81 Save some memory
unc0rr
parents: 565
diff changeset
   271
var Preview: TPreview;
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   272
begin
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   273
InitIPC;
159
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 158
diff changeset
   274
IPCWaitPongEvent;
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   275
TryDo(InitStepsFlags = cifRandomize,
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   276
      'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')',
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   277
      true);
160
207f520b9e83 Soma small fixes + new land template
unc0rr
parents: 159
diff changeset
   278
566
1c1cb593cb81 Save some memory
unc0rr
parents: 565
diff changeset
   279
Preview:= GenPreview;
159
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 158
diff changeset
   280
WriteLnToConsole('Sending preview...');
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   281
SendIPCRaw(@Preview, sizeof(Preview));
159
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 158
diff changeset
   282
WriteLnToConsole('Preview sent, disconnect');
158
e6c3223f3bca Don't synchronize after sending preview
unc0rr
parents: 155
diff changeset
   283
CloseIPC
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   284
end;
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   285
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   286
////////////////////////////////////////////////////////////////////////////////
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   287
/////////////////////////////// m a i n ////////////////////////////////////////
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   288
////////////////////////////////////////////////////////////////////////////////
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   289
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   290
begin
907
a5b0b93a39c8 Use constant generated by cmake for version string
unc0rr
parents: 905
diff changeset
   291
WriteLnToConsole('-= Hedgewars ' + cVersionString + ' =-');
720
97a9d67d5c3e - Add 'Delete' button to demos and saves pages
unc0rr
parents: 619
diff changeset
   292
WriteLnToConsole('   -= by unC0Rr =-   ');
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   293
GetParams;
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   294
Randomize;
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   295
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   296
if GameType = gmtLandPreview then GenLandPreview
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 109
diff changeset
   297
                             else Game
51
b6e3ae05857f - Get rid of hwserv and runhelper
unc0rr
parents:
diff changeset
   298
end.