DEADSOFTWARE

game: restored external resource registering in map loader (lol)
[d2df-sdl.git] / src / game / g_map.pas
index fef17e0bde166a76136071daefde8f9907c31dd9..bf1f9159d096fdfe54d7f42b268b4e07aba425ec 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
@@ -196,6 +195,7 @@ const
   GridTagLift = 1 shl 8; // gLifts
   GridTagBlockMon = 1 shl 9; // gBlockMon
 
+  GridTagSolid = (GridTagWall or GridTagDoor);
   GridTagObstacle = (GridTagStep or GridTagWall or GridTagDoor);
   GridTagLiquid = (GridTagAcid1 or GridTagAcid2 or GridTagWater);
 
@@ -1083,8 +1083,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
@@ -1449,9 +1448,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);
@@ -1835,7 +1839,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;
@@ -2260,7 +2271,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();
@@ -2514,6 +2525,7 @@ var
   a, d, j: Integer;
   m: Word;
   s: String;
+  b: Byte;
 
   procedure UpdatePanelArray(var panels: TPanelArray);
   var
@@ -2564,6 +2576,15 @@ begin
               s := _lc[I_PLAYER_FLAG_BLUE];
             g_Game_Message(Format(_lc[I_MESSAGE_FLAG_RETURN], [AnsiUpperCase(s)]), 144);
 
+            if (((gPlayer1 <> nil) and (((gPlayer1.Team = TEAM_RED) and (a = FLAG_RED)) or ((gPlayer1.Team = TEAM_BLUE) and (a = FLAG_BLUE))))
+            or ((gPlayer2 <> nil) and (((gPlayer2.Team = TEAM_RED) and (a = FLAG_RED)) or ((gPlayer2.Team = TEAM_BLUE) and (a = FLAG_BLUE))))) then
+              b := 0
+            else
+              b := 1;
+
+            if not sound_ret_flag[b].IsPlaying() then
+              sound_ret_flag[b].Play();
+
             if g_Game_IsNet then
               MH_SEND_FlagEvent(FLAG_STATE_RETURNED, a, 0);
             Continue;