hedgewars/uIO.pas
author unc0rr
Fri, 01 May 2009 09:01:44 +0000
changeset 2021 a591afb43768
parent 2017 7845c77c8d31
child 2043 1f2b91b5e7ef
permissions -rw-r--r--
Some changes in try to fix issue when you enter room with painted map, but frontend shows generated one (most probably bug is triggered by template filters) Untested.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     1
(*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 1038
diff changeset
     2
 * Hedgewars, a free turn based strategy game
883
07a568ba44e0 Update copyright info in source files headers
unc0rr
parents: 784
diff changeset
     3
 * Copyright (c) 2004, 2005, 2007, 2008 Andrey Korotaev <unC0Rr@gmail.com>
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     4
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     8
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
    12
 * GNU General Public License for more details.
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    13
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
    14
 * You should have received a copy of the GNU General Public License
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
    15
 * along with this program; if not, write to the Free Software
57c2ef19f719 Relicense to GPL
unc0rr
parents: 159
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    17
 *)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    18
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    19
unit uIO;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    20
interface
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    21
uses SDLh;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    22
{$INCLUDE options.inc}
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    23
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    24
const ipcPort: Word = 0;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    25
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    26
procedure SendIPC(s: shortstring);
154
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
    27
procedure SendIPCXY(cmd: char; X, Y: SmallInt);
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 154
diff changeset
    28
procedure SendIPCRaw(p: pointer; len: Longword);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    29
procedure SendIPCAndWaitReply(s: shortstring);
649
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
    30
procedure SendIPCTimeInc;
1888
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
    31
procedure LoadRecordFromFile(fileName: shortstring);
159
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
    32
procedure IPCWaitPongEvent;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    33
procedure IPCCheckSock;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    34
procedure InitIPC;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    35
procedure CloseIPC;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    36
procedure NetGetNextCmd;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    37
656
6d6d9d7b1054 Fix network game bug caused by recent protocol changes
unc0rr
parents: 650
diff changeset
    38
var hiTicks: Word = 0;
6d6d9d7b1054 Fix network game bug caused by recent protocol changes
unc0rr
parents: 650
diff changeset
    39
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    40
implementation
1351
aa7aefec5c1b Add partial implementation of handling disconnects while playing via network
unc0rr
parents: 1066
diff changeset
    41
uses uConsole, uConsts, uWorld, uMisc, uLand, uChat, uTeams;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    42
const isPonged: boolean = false;
648
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    43
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    44
type PCmd = ^TCmd;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    45
     TCmd = packed record
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    46
            Next: PCmd;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    47
            Time: LongWord;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    48
            case byte of
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    49
            1: (len: byte;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    50
                cmd: Char;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    51
                X, Y: SmallInt);
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    52
            2: (str: shortstring);
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    53
            end;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    54
49
3afe33c1cf06 - Teams health bars sorting
unc0rr
parents: 48
diff changeset
    55
var  IPCSock: PTCPSocket = nil;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    56
     fds: PSDLNet_SocketSet;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    57
648
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    58
     headcmd: PCmd = nil;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    59
     lastcmd: PCmd = nil;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    60
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    61
function AddCmd(Time: Longword; str: shortstring): PCmd;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    62
var Result: PCmd;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    63
begin
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    64
new(Result);
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    65
FillChar(Result^, sizeof(TCmd), 0);
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    66
Result^.Time:= Time;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    67
Result^.str:= str;
1351
aa7aefec5c1b Add partial implementation of handling disconnects while playing via network
unc0rr
parents: 1066
diff changeset
    68
if Result^.cmd <> 'F' then dec(Result^.len, 2); // cut timestamp
648
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    69
if headcmd = nil then
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    70
   begin
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    71
   headcmd:= Result;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    72
   lastcmd:= Result
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    73
   end else
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    74
   begin
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    75
   lastcmd^.Next:= Result;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    76
   lastcmd:= Result
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    77
   end;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    78
AddCmd:= Result
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    79
end;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    80
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    81
procedure RemoveCmd;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    82
var tmp: PCmd;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    83
begin
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    84
TryDo(headcmd <> nil, 'Engine bug: headcmd = nil', true);
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    85
tmp:= headcmd;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    86
headcmd:= headcmd^.Next;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    87
if headcmd = nil then lastcmd:= nil;
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    88
dispose(tmp)
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
    89
end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    90
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    91
procedure InitIPC;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    92
var ipaddr: TIPAddress;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    93
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    94
WriteToConsole('Init SDL_Net... ');
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    95
SDLTry(SDLNet_Init = 0, true);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    96
fds:= SDLNet_AllocSocketSet(1);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    97
SDLTry(fds <> nil, true);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    98
WriteLnToConsole(msgOK);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    99
WriteToConsole('Establishing IPC connection... ');
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   100
SDLTry(SDLNet_ResolveHost(ipaddr, '127.0.0.1', ipcPort) = 0, true);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   101
IPCSock:= SDLNet_TCP_Open(ipaddr);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   102
SDLTry(IPCSock <> nil, true);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   103
WriteLnToConsole(msgOK)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   104
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   105
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   106
procedure CloseIPC;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   107
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   108
SDLNet_FreeSocketSet(fds);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   109
SDLNet_TCP_Close(IPCSock);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   110
SDLNet_Quit
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   111
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   112
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   113
procedure ParseIPCCommand(s: shortstring);
649
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   114
var loTicks: Word;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   115
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   116
case s[1] of
22
517be8dc5b76 - Fixed spawning boxes under water
unc0rr
parents: 17
diff changeset
   117
     '!': begin {$IFDEF DEBUGFILE}AddFileLog('Ping? Pong!');{$ENDIF}isPonged:= true; end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   118
     '?': SendIPC('!');
649
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   119
     '#': inc(hiTicks);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 208
diff changeset
   120
     'e': ParseCommand(copy(s, 2, Length(s) - 1), true);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   121
     'E': OutError(copy(s, 2, Length(s) - 1), true);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   122
     'W': OutError(copy(s, 2, Length(s) - 1), false);
367
bc3c3edc5ce1 Check land digest
unc0rr
parents: 351
diff changeset
   123
     'M': CheckLandDigest(s);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   124
     'T': case s[2] of
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   125
               'L': GameType:= gmtLocal;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   126
               'D': GameType:= gmtDemo;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   127
               'N': GameType:= gmtNet;
72
aeb2ac1878dc Basic save support in engine
unc0rr
parents: 70
diff changeset
   128
               'S': GameType:= gmtSave;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   129
               else OutError(errmsgIncorrectUse + ' IPC "T" :' + s[2], true) end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   130
     else
649
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   131
     loTicks:= SDLNet_Read16(@s[byte(s[0]) - 1]);
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   132
     AddCmd(hiTicks shl 16 + loTicks, s);
648
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
   133
     {$IFDEF DEBUGFILE}AddFileLog('IPC in: '+s[1]+' ticks '+inttostr(lastcmd^.Time));{$ENDIF}
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   134
     end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   135
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   136
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   137
procedure IPCCheckSock;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   138
const ss: string = '';
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 367
diff changeset
   139
var i: LongInt;
1888
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   140
	buf: array[0..255] of byte;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   141
	s: shortstring absolute buf;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   142
begin
1888
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   143
if IPCSock = nil then
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   144
   exit;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   145
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 208
diff changeset
   146
fds^.numsockets:= 0;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   147
SDLNet_AddSocket(fds, IPCSock);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   148
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   149
while SDLNet_CheckSockets(fds, 0) > 0 do
1888
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   150
	begin
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   151
	i:= SDLNet_TCP_Recv(IPCSock, @buf[1], 255 - Length(ss));
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   152
	if i > 0 then
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   153
		begin
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   154
		buf[0]:= i;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   155
		ss:= ss + s;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   156
		while (Length(ss) > 1)and(Length(ss) > byte(ss[1])) do
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   157
			begin
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   158
			ParseIPCCommand(copy(ss, 2, byte(ss[1])));
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   159
			Delete(ss, 1, Succ(byte(ss[1])))
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   160
			end
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   161
		end else OutError('IPC connection lost', true)
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   162
	end;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   163
end;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   164
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   165
procedure LoadRecordFromFile(fileName: shortstring);
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   166
var f: file;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   167
	ss: string = '';
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   168
	i: LongInt;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   169
	buf: array[0..255] of byte;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   170
	s: shortstring absolute buf;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   171
begin
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   172
assign(f, fileName);
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   173
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   174
reset(f, 1);
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   175
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   176
repeat
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   177
	BlockRead(f, buf[1], 255 - Length(ss), i);
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   178
	if i > 0 then
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   179
		begin
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   180
		buf[0]:= i;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   181
		ss:= ss + s;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   182
		while (Length(ss) > 1)and(Length(ss) > byte(ss[1])) do
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   183
			begin
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   184
			ParseIPCCommand(copy(ss, 2, byte(ss[1])));
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   185
			Delete(ss, 1, Succ(byte(ss[1])))
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   186
			end
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   187
		end
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   188
until i = 0;
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   189
e76274ce7365 Add an ability to run engine without IPC connection.
unc0rr
parents: 1821
diff changeset
   190
close(f)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   191
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   192
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   193
procedure SendIPC(s: shortstring);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   194
begin
49
3afe33c1cf06 - Teams health bars sorting
unc0rr
parents: 48
diff changeset
   195
if IPCSock <> nil then
3afe33c1cf06 - Teams health bars sorting
unc0rr
parents: 48
diff changeset
   196
   begin
3afe33c1cf06 - Teams health bars sorting
unc0rr
parents: 48
diff changeset
   197
   if s[0]>#251 then s[0]:= #251;
649
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   198
   SDLNet_Write16(GameTicks, @s[Succ(byte(s[0]))]);
1432
ab212288d34d Make debug messages not to screw text log
unc0rr
parents: 1352
diff changeset
   199
   {$IFDEF DEBUGFILE}AddFileLog('IPC send: '+s[1]);{$ENDIF}
649
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   200
   inc(s[0], 2);
49
3afe33c1cf06 - Teams health bars sorting
unc0rr
parents: 48
diff changeset
   201
   SDLNet_TCP_Send(IPCSock, @s, Succ(byte(s[0])))
3afe33c1cf06 - Teams health bars sorting
unc0rr
parents: 48
diff changeset
   202
   end
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   203
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   204
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 154
diff changeset
   205
procedure SendIPCRaw(p: pointer; len: Longword);
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 154
diff changeset
   206
begin
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 196
diff changeset
   207
if IPCSock <> nil then
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 196
diff changeset
   208
   begin
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 196
diff changeset
   209
   SDLNet_TCP_Send(IPCSock, p, len)
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 196
diff changeset
   210
   end
155
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 154
diff changeset
   211
end;
401f4ea24715 Engine can generate land preview and send it via IPC
unc0rr
parents: 154
diff changeset
   212
154
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   213
procedure SendIPCXY(cmd: char; X, Y: SmallInt);
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   214
var s: shortstring;
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   215
begin
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   216
s[0]:= #5;
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   217
s[1]:= cmd;
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   218
SDLNet_Write16(X, @s[2]);
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   219
SDLNet_Write16(Y, @s[4]);
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   220
SendIPC(s)
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   221
end;
5667e6f38704 Network protocol uses integers in network byte order
unc0rr
parents: 112
diff changeset
   222
649
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   223
procedure SendIPCTimeInc;
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   224
const timeinc: shortstring = '#';
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   225
begin
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   226
SendIPCRaw(@timeinc, 2)
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   227
end;
26166c87dc75 - Use 2 bytes for timestamp in net protocol, thus decreasing average packet size from 6 to 4
unc0rr
parents: 648
diff changeset
   228
159
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   229
procedure IPCWaitPongEvent;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   230
begin
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   231
isPonged:= false;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   232
repeat
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   233
   IPCCheckSock;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   234
   SDL_Delay(1)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   235
until isPonged
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   236
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   237
159
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   238
procedure SendIPCAndWaitReply(s: shortstring);
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   239
begin
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   240
SendIPC(s);
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   241
SendIPC('?');
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   242
IPCWaitPongEvent
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   243
end;
63909aecb0ed Preview stream doesn't need parsing now
unc0rr
parents: 155
diff changeset
   244
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   245
procedure NetGetNextCmd;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   246
var tmpflag: boolean;
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   247
	s: shortstring;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   248
begin
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   249
tmpflag:= true;
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   250
1351
aa7aefec5c1b Add partial implementation of handling disconnects while playing via network
unc0rr
parents: 1066
diff changeset
   251
while (headcmd <> nil)
aa7aefec5c1b Add partial implementation of handling disconnects while playing via network
unc0rr
parents: 1066
diff changeset
   252
	and ((GameTicks = headcmd^.Time)
aa7aefec5c1b Add partial implementation of handling disconnects while playing via network
unc0rr
parents: 1066
diff changeset
   253
		or (headcmd^.cmd = 's')
aa7aefec5c1b Add partial implementation of handling disconnects while playing via network
unc0rr
parents: 1066
diff changeset
   254
		or (headcmd^.cmd = 'F')) do
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   255
	begin
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   256
	case headcmd^.cmd of
1038
3c843ce630ea - Fix accidental network breakage
unc0rr
parents: 1035
diff changeset
   257
		'+': ; // do nothing - it's just empty packet
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   258
		'L': ParseCommand('+left', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   259
		'l': ParseCommand('-left', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   260
		'R': ParseCommand('+right', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   261
		'r': ParseCommand('-right', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   262
		'U': ParseCommand('+up', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   263
		'u': ParseCommand('-up', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   264
		'D': ParseCommand('+down', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   265
		'd': ParseCommand('-down', true);
1639
89b536a3cf3c Implement precise aiming when pressing left shift
unc0rr
parents: 1560
diff changeset
   266
		'Z': ParseCommand('+precise', true);
89b536a3cf3c Implement precise aiming when pressing left shift
unc0rr
parents: 1560
diff changeset
   267
		'z': ParseCommand('-precise', true);
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   268
		'A': ParseCommand('+attack', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   269
		'a': ParseCommand('-attack', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   270
		'S': ParseCommand('switch', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   271
		'j': ParseCommand('ljump', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   272
		'J': ParseCommand('hjump', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   273
		',': ParseCommand('skip', true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   274
		's': begin
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   275
			s:= copy(headcmd^.str, 2, Pred(headcmd^.len));
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   276
			AddChatString(s);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   277
			WriteLnToConsole(s)
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   278
			end;
1351
aa7aefec5c1b Add partial implementation of handling disconnects while playing via network
unc0rr
parents: 1066
diff changeset
   279
		'F': TeamGone(copy(headcmd^.str, 2, Pred(headcmd^.len)));
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   280
		'N': begin
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   281
			tmpflag:= false;
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   282
			{$IFDEF DEBUGFILE}AddFileLog('got cmd "N": time '+inttostr(headcmd^.Time)){$ENDIF}
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   283
			end;
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   284
		'p': begin
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   285
			TargetPoint.X:= SmallInt(SDLNet_Read16(@(headcmd^.X)));
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   286
			TargetPoint.Y:= SmallInt(SDLNet_Read16(@(headcmd^.Y)));
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   287
			ParseCommand('put', true)
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   288
			end;
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   289
		'P': begin
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   290
			CursorPoint.X:= SmallInt(SDLNet_Read16(@(headcmd^.X)) + WorldDx);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   291
			CursorPoint.Y:= SmallInt(SDLNet_Read16(@(headcmd^.Y)) + WorldDy);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   292
			end;
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   293
		'w': ParseCommand('setweap ' + headcmd^.str[2], true);
1035
6f5842bc481b Hopefully done taunts implementation
unc0rr
parents: 978
diff changeset
   294
		't': ParseCommand('taunt ' + headcmd^.str[2], true);
1821
6b6cf3389f92 Hedgehog drops a grave on "/newgrave" command. Patch by nemo
unc0rr
parents: 1639
diff changeset
   295
		'g': ParseCommand('newgrave', true);
2017
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1888
diff changeset
   296
		'h': ParseCommand('hogsay ' + copy(headcmd^.str, 2, Pred(headcmd^.len)), true);
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   297
		'1'..'5': ParseCommand('timer ' + headcmd^.cmd, true);
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   298
		#128..char(128 + cMaxSlotIndex): ParseCommand('slot ' + char(byte(headcmd^.cmd) - 79), true)
1035
6f5842bc481b Hopefully done taunts implementation
unc0rr
parents: 978
diff changeset
   299
		else
6f5842bc481b Hopefully done taunts implementation
unc0rr
parents: 978
diff changeset
   300
			OutError('Unexpected protocol command: ' + headcmd^.cmd, True)
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   301
		end;
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   302
	RemoveCmd
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   303
	end;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 208
diff changeset
   304
648
fc5234aa6493 Use list instead of array (no limit for network packets amount)
unc0rr
parents: 526
diff changeset
   305
if (headcmd <> nil) then
977
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   306
	TryDo(GameTicks < headcmd^.Time,
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   307
			'oops, queue error. in buffer: ' + headcmd^.cmd +
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   308
			' (' + inttostr(GameTicks) + ' > ' +
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   309
			inttostr(headcmd^.Time) + ')',
fdbf2a5c1ad7 Fix an oops with chat string appearing between two net commands (it's very rare and random condition, but I caught it while playing via net)
unc0rr
parents: 946
diff changeset
   310
			true);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   311
1560
e140bc57ff68 Quick replay round to spectators until current move
unc0rr
parents: 1432
diff changeset
   312
isInLag:= (headcmd = nil) and tmpflag and not CurrentTeam^.hasGone;
e140bc57ff68 Quick replay round to spectators until current move
unc0rr
parents: 1432
diff changeset
   313
if isInLag then fastUntilLag:= false
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   314
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   315
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   316
end.