diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 673bb69583871bc0d0dcaf6d17332124b987e67b..c5e144c7c0dfaad252644494be24bf65de0e092e 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
g_playermodel, g_gfx, g_options, g_weapons, Math,
g_triggers, MAPDEF, g_monsters, e_sound, CONFIG,
BinEditor, g_language, g_net, SDL,
- ENet, e_fixedbuffer, g_netmsg, g_netmaster, GL, GLExt;
+ ENet, e_fixedbuffer, g_netmsg, g_netmaster, GL, GLExt,
+ utils, sfs;
type
TEndCustomGameStat = record
gMapToDelete := '';
gTempDelete := False;
- g_Texture_CreateWADEx('MENU_BACKGROUND', GameWAD+':TEXTURES\TITLE');
- g_Texture_CreateWADEx('INTER', GameWAD+':TEXTURES\INTER');
- g_Texture_CreateWADEx('ENDGAME_EN', GameWAD+':TEXTURES\ENDGAME_EN');
- g_Texture_CreateWADEx('ENDGAME_RU', GameWAD+':TEXTURES\ENDGAME_RU');
-
- LoadStdFont('STDTXT', 'STDFONT', gStdFont);
- LoadFont('MENUTXT', 'MENUFONT', gMenuFont);
- LoadFont('SMALLTXT', 'SMALLFONT', gMenuSmallFont);
-
- g_Game_ClearLoading();
- g_Game_SetLoadingText(Format('Doom 2D: Forever %s', [GAME_VERSION]), 0, False);
- g_Game_SetLoadingText('', 0, False);
-
- g_Game_SetLoadingText(_lc[I_LOAD_CONSOLE], 0, False);
- g_Console_Init();
-
- g_Game_SetLoadingText(_lc[I_LOAD_MODELS], 0, False);
- g_PlayerModel_LoadData();
-
- if FindFirst(ModelsDir+'*.wad', faAnyFile, SR) = 0 then
- repeat
- if not g_PlayerModel_Load(ModelsDir+SR.Name) then
- e_WriteLog(Format('Error loading model %s', [SR.Name]), MSG_WARNING);
- until FindNext(SR) <> 0;
- FindClose(SR);
-
- gGameOn := False;
- gPause := False;
- gTime := 0;
- LastScreenShot := 0;
-
- {e_MouseInfo.Accel := 1.0;}
-
- g_Game_SetLoadingText(_lc[I_LOAD_GAME_DATA], 0, False);
- g_Game_LoadData();
-
- g_Game_SetLoadingText(_lc[I_LOAD_MUSIC], 0, False);
- g_Sound_CreateWADEx('MUSIC_INTERMUS', GameWAD+':MUSIC\INTERMUS', True);
- g_Sound_CreateWADEx('MUSIC_MENU', GameWAD+':MUSIC\MENU', True);
- g_Sound_CreateWADEx('MUSIC_ROUNDMUS', GameWAD+':MUSIC\ROUNDMUS', True);
- g_Sound_CreateWADEx('MUSIC_STDENDMUS', GameWAD+':MUSIC\ENDMUS', True);
-
- g_Game_SetLoadingText(_lc[I_LOAD_MENUS], 0, False);
- g_Menu_Init();
-
- gMusic := TMusic.Create();
- gMusic.SetByName('MUSIC_MENU');
- gMusic.Play();
-
- gGameSettings.WarmupTime := 30;
-
- gState := STATE_MENU;
-
- SetLength(gEvents, 6);
- gEvents[0].Name := 'ongamestart';
- gEvents[1].Name := 'ongameend';
- gEvents[2].Name := 'onmapstart';
- gEvents[3].Name := 'onmapend';
- gEvents[4].Name := 'oninter';
- gEvents[5].Name := 'onwadend';
+ sfsGCDisable(); // temporary disable removing of temporary volumes
+
+ try
+ g_Texture_CreateWADEx('MENU_BACKGROUND', GameWAD+':TEXTURES\TITLE');
+ g_Texture_CreateWADEx('INTER', GameWAD+':TEXTURES\INTER');
+ g_Texture_CreateWADEx('ENDGAME_EN', GameWAD+':TEXTURES\ENDGAME_EN');
+ g_Texture_CreateWADEx('ENDGAME_RU', GameWAD+':TEXTURES\ENDGAME_RU');
+
+ LoadStdFont('STDTXT', 'STDFONT', gStdFont);
+ LoadFont('MENUTXT', 'MENUFONT', gMenuFont);
+ LoadFont('SMALLTXT', 'SMALLFONT', gMenuSmallFont);
+
+ g_Game_ClearLoading();
+ g_Game_SetLoadingText(Format('Doom 2D: Forever %s', [GAME_VERSION]), 0, False);
+ g_Game_SetLoadingText('', 0, False);
+
+ g_Game_SetLoadingText(_lc[I_LOAD_CONSOLE], 0, False);
+ g_Console_Init();
+
+ g_Game_SetLoadingText(_lc[I_LOAD_MODELS], 0, False);
+ g_PlayerModel_LoadData();
+
+ if FindFirst(ModelsDir+'*.wad', faAnyFile, SR) = 0 then
+ repeat
+ if not g_PlayerModel_Load(ModelsDir+SR.Name) then
+ e_WriteLog(Format('Error loading model %s', [SR.Name]), MSG_WARNING);
+ until FindNext(SR) <> 0;
+ FindClose(SR);
+
+ if FindFirst(ModelsDir+'*.pk3', faAnyFile, SR) = 0 then
+ repeat
+ if not g_PlayerModel_Load(ModelsDir+SR.Name) then
+ e_WriteLog(Format('Error loading model %s', [SR.Name]), MSG_WARNING);
+ until FindNext(SR) <> 0;
+ FindClose(SR);
+
+ if FindFirst(ModelsDir+'*.zip', faAnyFile, SR) = 0 then
+ repeat
+ if not g_PlayerModel_Load(ModelsDir+SR.Name) then
+ e_WriteLog(Format('Error loading model %s', [SR.Name]), MSG_WARNING);
+ until FindNext(SR) <> 0;
+ FindClose(SR);
+
+ gGameOn := False;
+ gPause := False;
+ gTime := 0;
+ LastScreenShot := 0;
+
+ {e_MouseInfo.Accel := 1.0;}
+
+ g_Game_SetLoadingText(_lc[I_LOAD_GAME_DATA], 0, False);
+ g_Game_LoadData();
+
+ g_Game_SetLoadingText(_lc[I_LOAD_MUSIC], 0, False);
+ g_Sound_CreateWADEx('MUSIC_INTERMUS', GameWAD+':MUSIC\INTERMUS', True);
+ g_Sound_CreateWADEx('MUSIC_MENU', GameWAD+':MUSIC\MENU', True);
+ g_Sound_CreateWADEx('MUSIC_ROUNDMUS', GameWAD+':MUSIC\ROUNDMUS', True);
+ g_Sound_CreateWADEx('MUSIC_STDENDMUS', GameWAD+':MUSIC\ENDMUS', True);
+
+ g_Game_SetLoadingText(_lc[I_LOAD_MENUS], 0, False);
+ g_Menu_Init();
+
+ gMusic := TMusic.Create();
+ gMusic.SetByName('MUSIC_MENU');
+ gMusic.Play();
+
+ gGameSettings.WarmupTime := 30;
+
+ gState := STATE_MENU;
+
+ SetLength(gEvents, 6);
+ gEvents[0].Name := 'ongamestart';
+ gEvents[1].Name := 'ongameend';
+ gEvents[2].Name := 'onmapstart';
+ gEvents[3].Name := 'onmapend';
+ gEvents[4].Name := 'oninter';
+ gEvents[5].Name := 'onwadend';
+ finally
+ sfsGCEnable(); // enable releasing unused volumes
+ end;
end;
procedure g_Game_Free();
procedure g_Game_DeleteTestMap();
var
- WAD: TWADEditor_1;
+ a: Integer;
MapName: Char16;
- MapList: SArray;
- a, time: Integer;
WadName: string;
+{
+ WAD: TWADEditor_1;
+ MapList: SArray;
+ time: Integer;
+}
begin
a := Pos('.wad:\', gMapToDelete);
if a = 0 then
MapName := '';
CopyMemory(@MapName[0], @gMapToDelete[1], Min(16, Length(gMapToDelete)));
+{
// Èìÿ êàðòû íå ñòàíäàðòíîå òåñòîâîå:
if MapName <> TEST_MAP_NAME then
Exit;
WAD.Free();
g_SetFileTime(WadName, time);
end else
- DeleteFile(WadName);
+}
+ if gTempDelete then DeleteFile(WadName);
end;
procedure GameCVars(P: SArray);
Exit;
end;
// Èãðà åù¸ íå çàïóùåíà, ñíà÷àëà íàì íàäî çàãðóçèòü êàêîé-òî WAD
- if Pos('.wad', LowerCase(P[1])) = 0 then
- P[1] := P[1] + '.wad';
-
+ P[1] := addWadExtension(P[1]);
if FileExists(MapsDir + P[1]) then
begin
// Åñëè êàðòà íå óêàçàíà, áåð¸ì ïåðâóþ êàðòó â ôàéëå
Exit;
prt := StrToIntDef(P[2], 25666);
- if Pos('.wad', LowerCase(P[3])) = 0 then
- P[3] := P[3] + '.wad';
-
+ P[3] := addWadExtension(P[3]);
if FileExists(MapsDir + P[3]) then
begin
// Åñëè êàðòà íå óêàçàíà, áåð¸ì ïåðâóþ êàðòó â ôàéëå
begin
g_Console_Add(Format(_lc[I_MSG_NO_MAP], [s]));
// Òàêîé êàðòû íåò, èùåì WAD ôàéë
- if Pos('.wad', LowerCase(P[1])) = 0 then
- P[1] := P[1] + '.wad';
-
+ P[1] := addWadExtension(P[1]);
if FileExists(MapsDir + P[1]) then
begin
// Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà
end else
begin
// Óêàçàíî äâà ïàðàìåòðà, çíà÷èò ïåðâûé - WAD ôàéë, à âòîðîé - êàðòà
- if Pos('.wad', LowerCase(P[1])) = 0 then
- P[1] := P[1] + '.wad';
-
+ P[1] := addWadExtension(P[1]);
if FileExists(MapsDir + P[1]) then
begin
// Íàøëè WAD ôàéë
begin
g_Console_Add(Format(_lc[I_MSG_NO_MAP], [s]));
// Òàêîé êàðòû íåò, èùåì WAD ôàéë
- if Pos('.wad', LowerCase(P[1])) = 0 then
- P[1] := P[1] + '.wad';
-
+ P[1] := addWadExtension(P[1]);
if FileExists(MapsDir + P[1]) then
begin
// Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà
end else
begin
// Óêàçàíî äâà ïàðàìåòðà, çíà÷èò ïåðâûé - WAD ôàéë, à âòîðîé - êàðòà
- if Pos('.wad', LowerCase(P[1])) = 0 then
- P[1] := P[1] + '.wad';
-
+ P[1] := addWadExtension(P[1]);
if FileExists(MapsDir + P[1]) then
begin
// Íàøëè WAD ôàéë
// Start map when game loads:
map := LowerCase(Find_Param_Value(pars, '-map'));
- if (map <> '') and (Pos('.wad:\', map) > 0) then
+ if isWadPath(map) then
begin
// Game mode:
s := Find_Param_Value(pars, '-gm');
// Delete test map after play:
s := Find_Param_Value(pars, '--testdelete');
if (s <> '') then
+ begin
gMapToDelete := MapsDir + map;
+ e_WriteLog('"--testdelete" argument doesn''t supported anymore!', MSG_FATALERROR);
+ Halt(1);
+ end;
// Delete temporary WAD after play:
s := Find_Param_Value(pars, '--tempdelete');