diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 3f328d493c30067afc7bf9798db2688b0ea5c514..babcb8e2cd3e7f2a19b28a00218cc5d3ea107416 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
procedure g_Game_Restart();
procedure g_Game_RestartLevel();
procedure g_Game_RestartRound(NoMapRestart: Boolean = False);
-procedure g_Game_ClientWAD(NewWAD: String; WHash: TMD5Digest);
+procedure g_Game_ClientWAD(NewWAD: String; const WHash: TMD5Digest);
procedure g_Game_SaveOptions();
function g_Game_StartMap(Map: String; Force: Boolean = False; const oldMapPath: AnsiString=''): Boolean;
procedure g_Game_ChangeMap(const MapPath: String);
begin
if (NetMHost = nil) or (NetMPeer = nil) then
begin
- if not g_Net_Slist_Connect then g_Console_Add(_lc[I_NET_MSG_ERROR] + _lc[I_NET_SLIST_ERROR]);
+ g_Net_Slist_Connect(false); // non-blocking connection to the master
end;
g_Net_Slist_Update;
for i := 0 to High(gPlayers) do
if gPlayers[i] <> nil then
if gPlayers[i] = p then p.DrawIndicator(_RGB(255, 255, 255))
- else if (gPlayers[i].Team = p.Team) and (gPlayers[i].Team <> TEAM_NONE)
- then
- gPlayers[i].DrawIndicator(gPlayers[i].GetColor);
+ else if (gPlayers[i].Team = p.Team) and (gPlayers[i].Team <> TEAM_NONE) then
+ if gPlayerIndicatorStyle = 1 then
+ gPlayers[i].DrawIndicator(_RGB(192, 192, 192))
+ else gPlayers[i].DrawIndicator(gPlayers[i].GetColor);
end;
if p.FSpectator then
OuterLoop := True;
while OuterLoop do
begin
- while (enet_host_service(NetHost, @NetEvent, 0) > 0) do
+ while (enet_host_service(NetHost, @NetEvent, 50) > 0) do
begin
if (NetEvent.kind = ENET_EVENT_TYPE_RECEIVE) then
begin
if newResPath = '' then
begin
g_Game_SetLoadingText(_lc[I_LOAD_DL_RES], 0, False);
- newResPath := g_Res_DownloadWAD(WadName);
+ newResPath := g_Res_DownloadMapWAD(WadName, gWADHash);
if newResPath = '' then
begin
g_FatalError(_lc[I_NET_ERR_HASH]);
ProcessLoading(true);
- if e_KeyPressed(IK_SPACE) or e_KeyPressed(IK_ESCAPE) or e_KeyPressed(VK_ESCAPE) or
- e_KeyPressed(JOY0_JUMP) or e_KeyPressed(JOY1_JUMP) or e_KeyPressed(JOY2_JUMP) or e_KeyPressed(JOY3_JUMP) then
+ if g_Net_UserRequestExit() then
begin
State := 0;
break;
@@ -4784,6 +4784,7 @@ function g_Game_StartMap(Map: String; Force: Boolean = False; const oldMapPath:
var
NewWAD, ResName: String;
I: Integer;
+ nws: AnsiString;
begin
g_Map_Free((Map <> gCurrentMapFileName) and (oldMapPath <> gCurrentMapFileName));
g_Player_RemoveAllCorpses();
ResName := g_ExtractFileName(Map);
if g_Game_IsServer then
begin
- gWADHash := MD5File(MapsDir + NewWAD);
- g_Game_LoadWAD(NewWAD);
+ nws := findDiskWad(MapsDir+NewWAD);
+ if (length(nws) = 0) then
+ begin
+ ResName := '';
+ end
+ else
+ begin
+ gWADHash := MD5File(nws);
+ //writeln('********: nws=', nws, ' : Map=', Map, ' : nw=', NewWAD, ' : resname=', ResName);
+ g_Game_LoadWAD(NewWAD);
+ end;
end else
// hash received in MC_RECV_GameEvent -> NET_EV_MAPSTART
g_Game_ClientWAD(NewWAD, gWADHash);
end else
ResName := Map;
- Result := g_Map_Load(MapsDir + gGameSettings.WAD + ':\' + ResName);
+ //writeln('********: gsw=', gGameSettings.WAD, '; rn=', ResName);
+ Result := (ResName <> '') and g_Map_Load(MapsDir + gGameSettings.WAD + ':\' + ResName);
if Result then
begin
g_Player_ResetAll(Force or gLastMap, gGameSettings.GameType = GT_SINGLE);
if NetUseMaster then
begin
if (NetMHost = nil) or (NetMPeer = nil) then
- if not g_Net_Slist_Connect then
- g_Console_Add(_lc[I_NET_MSG_ERROR] + _lc[I_NET_SLIST_ERROR]);
-
+ begin
+ // let the connection be blocking here, why not?
+ g_Net_Slist_Connect();
+ end;
g_Net_Slist_Update;
end;
gNextMap := Map;
end;
-procedure g_Game_ClientWAD(NewWAD: String; WHash: TMD5Digest);
+procedure g_Game_ClientWAD(NewWAD: String; const WHash: TMD5Digest);
var
gWAD: String;
begin
if gWAD = '' then
begin
g_Game_SetLoadingText(_lc[I_LOAD_DL_RES], 0, False);
- gWAD := g_Res_DownloadWAD(ExtractFileName(NewWAD));
+ gWAD := g_Res_DownloadMapWAD(ExtractFileName(NewWAD), WHash);
if gWAD = '' then
begin
g_Game_Free();
if g_Game_IsServer and g_Game_IsNet then
if NetUseMaster then
begin
- if NetMPeer = nil then
- if not g_Net_Slist_Connect() then
- g_Console_Add(_lc[I_NET_MSG_ERROR] + _lc[I_NET_SLIST_ERROR]);
+ if NetMPeer = nil then g_Net_Slist_Connect();
g_Net_Slist_Update();
end
else