summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: abbb757)
raw | patch | inline | side by side (parent: abbb757)
author | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Fri, 8 Apr 2016 03:21:19 +0000 (06:21 +0300) | ||
committer | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Fri, 8 Apr 2016 03:22:13 +0000 (06:22 +0300) |
src/game/Doom2DF.dpr | patch | blob | history | |
src/game/g_game.pas | patch | blob | history | |
src/game/g_map.pas | patch | blob | history | |
src/shared/utils.pas | [new file with mode: 0644] | patch | blob |
diff --git a/src/game/Doom2DF.dpr b/src/game/Doom2DF.dpr
index e72de94e0ba79020a72ee529f7d9e1c84622dc2b..57f516d65c367b608fdc4144f855048467fd1182 100644 (file)
--- a/src/game/Doom2DF.dpr
+++ b/src/game/Doom2DF.dpr
sfsZipFS in '../sfs/sfsZipFS.pas',
sfsMemFS in '../sfs/sfsMemFS.pas',
xstreams in '../sfs/xstreams.pas',
+ utils in '../shared/utils.pas',
WADEDITOR in '../shared/WADEDITOR.pas',
WADSTRUCT in '../shared/WADSTRUCT.pas',
MAPSTRUCT in '../shared/MAPSTRUCT.pas',
diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 9cca04c27ce31af3f73ea6daa86c801c7a33e004..40760c69eeb6c78d2ec0f81196bc8a1588c806d7 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;
type
TEndCustomGameStat = record
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;
Exit;
end;
// Èãðà åù¸ íå çàïóùåíà, ñíà÷àëà íàì íàäî çàãðóçèòü êàêîé-òî WAD
- if (Pos('.wad', LowerCase(P[1])) = 0) and (Pos('.pk3', 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) and (Pos('.pk3', 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) and (Pos('.pk3', 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) and (Pos('.pk3', 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) and (Pos('.pk3', 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) and (Pos('.pk3', 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) or (Pos('.pk3:\', map) > 0)) then
+ if isWadPath(map) then
begin
// Game mode:
s := Find_Param_Value(pars, '-gm');
diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index 358b16d15e44d7ec97e9eb3e63c6af22871e29dc..84ebb9555b11ddee98d22ace33c0c02a025a5097 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
g_main, e_log, SysUtils, g_items, g_gfx, g_console,
GL, GLExt, g_weapons, g_game, g_sound, e_sound, CONFIG,
g_options, MAPREADER, g_triggers, g_player, MAPDEF,
- Math, g_monsters, g_saveload, g_language, g_netmsg;
+ Math, g_monsters, g_saveload, g_language, g_netmsg,
+ utils;
const
FLAGRECT: TRectWH = (X:15; Y:12; Width:33; Height:52);
g_ProcessResourceStr(Res, FileName, SectionName, ResName);
- if (Pos('.wad', LowerCase(FileName)) = 0) and (Pos('.pk3', LowerCase(FileName)) = 0) then FileName := FileName+'.wad';
+ FileName := addWadExtension(FileName);
WAD := TWADEditor_1.Create;
if not WAD.ReadFile(FileName) then
diff --git a/src/shared/utils.pas b/src/shared/utils.pas
--- /dev/null
+++ b/src/shared/utils.pas
@@ -0,0 +1,60 @@
+{$MODE DELPHI}
+unit utils;
+
+interface
+
+// does filename have one of ".wad", ".pk3", ".zip" extensions?
+function hasWadExtension (fn: string): Boolean;
+
+// does filepath have ".XXX:\" in it?
+function isWadPath (fn: string): Boolean;
+
+// adds ".wad" extension if filename doesn't have one of ".wad", ".pk3", ".zip"
+function addWadExtension (fn: string): string;
+
+
+implementation
+
+uses
+ SysUtils, sfs;
+
+
+function hasWadExtension (fn: string): Boolean;
+begin
+ fn := ExtractFileExt(fn);
+ result := SFSStrEqu(fn, '.wad') or SFSStrEqu(fn, '.pk3') or SFSStrEqu(fn, '.zip');
+end;
+
+
+function addWadExtension (fn: string): string;
+begin
+ result := fn;
+ if not hasWadExtension(result) then result := result+'.wad';
+end;
+
+
+function isWadPath (fn: string): Boolean;
+var
+ p: Integer;
+ s: string;
+begin
+ result := false;
+ while true do
+ begin
+ p := Pos(':', fn);
+ if (p = 0) or (length(fn)-p < 1) then break;
+ if (p-4 > 1) and (fn[p-4] = '.') and ((fn[p+1] = '\') or (fn[p+1] = '/')) then
+ begin
+ s := Copy(fn, p-4, 4);
+ if SFSStrEqu(s, '.wad') or SFSStrEqu(s, '.pk3') or SFSStrEqu(s, '.zip') then
+ begin
+ result := true;
+ exit;
+ end;
+ end;
+ Delete(fn, 1, p);
+ end;
+end;
+
+
+end.