DEADSOFTWARE

proper (i hope) support for '.wad', '.pk3' and '.zip' extensions
[d2df-sdl.git] / src / game / g_game.pas
index 9cca04c27ce31af3f73ea6daa86c801c7a33e004..40760c69eeb6c78d2ec0f81196bc8a1588c806d7 100644 (file)
@@ -294,7 +294,8 @@ uses
   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
@@ -1052,6 +1053,13 @@ begin
     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;
@@ -5180,9 +5188,7 @@ begin
       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
       // Åñëè êàðòà íå óêàçàíà, áåð¸ì ïåðâóþ êàðòó â ôàéëå
@@ -5236,9 +5242,7 @@ 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
       // Åñëè êàðòà íå óêàçàíà, áåð¸ì ïåðâóþ êàðòó â ôàéëå
@@ -5308,9 +5312,7 @@ 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
               // Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà
@@ -5340,9 +5342,7 @@ 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 ôàéë
@@ -5401,9 +5401,7 @@ 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
                 // Ïàðàìåòðà êàðòû íåò, ïîýòîìó ñòàâèì ïåðâóþ èç ôàéëà
@@ -5428,9 +5426,7 @@ 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 ôàéë
@@ -6257,7 +6253,7 @@ begin
 
 // 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');