DEADSOFTWARE

maploader: slightly better debug logs
[d2df-sdl.git] / src / game / g_map.pas
index 81eb17e904044c36be49914f5172380a7b8cbdd6..392d45b328918d865718815ad1daff07c0889db1 100644 (file)
@@ -2,8 +2,7 @@
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation, version 3 of the License ONLY.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -260,7 +259,8 @@ uses
   Math, g_monsters, g_saveload, g_language, g_netmsg,
   sfs, xstreams, hashtable, wadreader,
   ImagingTypes, Imaging, ImagingUtility,
-  ImagingGif, ImagingNetworkGraphics;
+  ImagingGif, ImagingNetworkGraphics,
+  g_res_downloader;
 
 const
   FLAGRECT: TRectWH = (X:15; Y:12; Width:33; Height:52);
@@ -900,6 +900,26 @@ begin
 end;
 
 
+function GetReplacementWad (WadName: AnsiString): AnsiString;
+begin
+  if (length(WadName) = 0) then
+  begin
+    result := '';
+  end
+  else
+  begin
+    //e_LogWritefln('GetReplacementWad: 000: old=%s', [WadName]);
+    result := g_Res_FindReplacementWad(WadName);
+    //e_LogWritefln('GetReplacementWad: 001: old=%s; new=%s', [WadName, result]);
+    if (result = WadName) then
+    begin
+      result := GameDir+'/wads/'+result;
+      //e_LogWritefln('GetReplacementWad: 002: old=%s; new=%s', [WadName, result]);
+    end;
+  end;
+end;
+
+
 function CreateTexture(RecName: AnsiString; Map: string; log: Boolean): Integer;
 var
   WAD: TWADFile;
@@ -958,12 +978,10 @@ begin
   end;
 
   // Çàãðóæàåì ðåñóðñ òåêñòóðû â ïàìÿòü èç WAD'à:
-  WADName := g_ExtractWadName(RecName);
+  WADName := GetReplacementWad(g_ExtractWadName(RecName));
+  if WADName = '' then WADName := Map; //WADName := GameDir+'/wads/'+WADName else
 
   WAD := TWADFile.Create();
-
-  if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map;
-
   WAD.ReadFile(WADName);
 
   //txname := RecName;
@@ -1046,11 +1064,12 @@ begin
   end;
 
   // ×èòàåì WAD-ðåñóðñ àíèì.òåêñòóðû èç WAD'à â ïàìÿòü:
-  WADName := g_ExtractWadName(RecName);
+  WADName := GetReplacementWad(g_ExtractWadName(RecName));
+  if WADName = '' then WADName := Map; //WADName := GameDir+'/wads/'+WADName else
 
   WAD := TWADFile.Create();
   try
-    if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map;
+    //if WADName <> '' then WADName := GameDir+'/wads/'+WADName else WADName := Map;
 
     WAD.ReadFile(WADName);
 
@@ -1084,8 +1103,7 @@ begin
     end;
 
     // ýòî ïòèöà? ýòî ñàìîë¸ò?
-    if (TextureWAD[0] = 'D') and (TextureWAD[1] = 'F') and
-       (TextureWAD[2] = 'W') and (TextureWAD[3] = 'A') and (TextureWAD[4] = 'D') then
+    if isWadData(TextureWAD, ResLength) then
     begin
       // íåò, ýòî ñóïåðìåí!
       if not WAD.ReadMemory(TextureWAD, ResLength) then
@@ -1450,9 +1468,14 @@ end;
 
 procedure addResToExternalResList(res: string);
 begin
-  res := extractWadName(res);
-  if (res <> '') and (gExternalResources.IndexOf(res) = -1) then
+  //e_LogWritefln('DBG: ***trying external resource %s', [res]);
+  res := toLowerCase1251(extractWadName(res));
+  // ignore "standart.wad"
+  if (res <> '') {and (res <> 'standart.wad')} and (gExternalResources.IndexOf(res) = -1) then
+  begin
+    //e_LogWritefln('DBG: added external resource %s', [res]);
     gExternalResources.Add(res);
+  end;
 end;
 
 procedure generateExternalResourcesList({mapReader: TMapReader_1}map: TDynRecord);
@@ -1676,7 +1699,7 @@ begin
     if (gCurrentMap = nil) then
     begin
       FileName := g_ExtractWadName(Res);
-      e_WriteLog('Loading map WAD: '+FileName, TMsgType.Notify);
+      e_LogWritefln('Loading map WAD [%s] (res=[%s])', [FileName, Res], TMsgType.Notify);
       g_Game_SetLoadingText(_lc[I_LOAD_WAD_FILE], 0, False);
 
       WAD := TWADFile.Create();
@@ -1836,7 +1859,14 @@ begin
               ntn := CreateTexture(rec.Resource, FileName, True);
               if (ntn < 0) then g_SimpleError(Format(_lc[I_GAME_ERROR_TEXTURE_SIMPLE], [rec.Resource]));
             end;
-            if (ntn < 0) then ntn := CreateNullTexture(rec.Resource);
+            if (ntn < 0) then
+            begin
+              ntn := CreateNullTexture(rec.Resource);
+            end
+            else
+            begin
+              addResToExternalResList(rec.Resource);
+            end;
 
             rec.tagInt := ntn; // remember texture number
           end;
@@ -2261,7 +2291,7 @@ begin
   finally
     sfsGCEnable(); // enable releasing unused volumes
     //mapReader.Free();
-    e_ClearInputBuffer(); // why not?
+    e_UnpressAllKeys; // why not?
     if not mapOk then
     begin
       gCurrentMap.Free();