DEADSOFTWARE

Merge FGSFDS branch, fix build
[d2df-sdl.git] / src / game / g_panel.pas
index 8a2265af842d9a546aa5eea28bd1c384875b43b1..5034697f5c1f3ce3b9a5358c846f27118d59c439 100644 (file)
@@ -1,3 +1,19 @@
+(* Copyright (C)  DooM 2D:Forever Developers
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *)
+{$MODE DELPHI}
 unit g_panel;
 
 interface
@@ -35,6 +51,7 @@ type
     SaveIt:           Boolean; // Ñîõðàíÿòü ïðè SaveState?
     Enabled:          Boolean;
     Door:             Boolean;
+    Moved:            Boolean;
     LiftType:         Byte;
     LastAnimLoop:     Byte;
 
@@ -56,13 +73,14 @@ type
     procedure   LoadState(var Mem: TBinMemoryReader);
   end;
 
+  PPanel = ^TPanel;
   TPanelArray = Array of TPanel;
 
 implementation
 
 uses
-  g_basic, g_map, MAPDEF, g_game, e_graphics,
-  g_console, g_language;
+  SysUtils, g_basic, g_map, MAPDEF, g_game, e_graphics,
+  g_console, g_language, e_log;
 
 const
   PANEL_SIGNATURE = $4C4E4150; // 'PANL'
@@ -85,6 +103,7 @@ begin
   FCurFrame := 0;
   FCurFrameCount := 0;
   LastAnimLoop := 0;
+  Moved := False;
 
 // Òèï ïàíåëè:
   PanelType := PanelRec.PanelType;
@@ -197,7 +216,15 @@ begin
     SaveIt := True;
 
 // Åñëè íå ñïåöòåêñòóðà, òî çàäàåì ðàçìåðû:
-  if not g_Map_IsSpecialTexture(Textures[PanelRec.TextureNum].TextureName) then
+  if PanelRec.TextureNum > High(Textures) then
+  begin
+    e_WriteLog(Format('WTF?! PanelRec.TextureNum is out of limits! (%d : %d)', [PanelRec.TextureNum, High(Textures)]), MSG_FATALERROR);
+    FTextureWidth := 2;
+    FTextureHeight := 2;
+    FAlpha := 0;
+    FBlending := ByteBool(0);
+  end
+  else if not g_Map_IsSpecialTexture(Textures[PanelRec.TextureNum].TextureName) then
   begin
     FTextureWidth := Textures[PanelRec.TextureNum].Width;
     FTextureHeight := Textures[PanelRec.TextureNum].Height;
@@ -443,6 +470,9 @@ begin
   Mem.WriteByte(LiftType);
 // Íîìåð òåêóùåé òåêñòóðû:
   Mem.WriteInt(FCurTexture);
+// Êîîðäû
+  Mem.WriteInt(X);
+  Mem.WriteInt(Y);
 // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà:
   if (FCurTexture >= 0) and (FTextureIDs[FCurTexture].Anim) then
     begin
@@ -478,6 +508,9 @@ begin
   Mem.ReadByte(LiftType);
 // Íîìåð òåêóùåé òåêñòóðû:
   Mem.ReadInt(FCurTexture);
+// Êîîðäû
+  Mem.ReadInt(X);
+  Mem.ReadInt(Y);
 // Àíèìèðîâàííàÿ ëè òåêóùàÿ òåêñòóðà:
   Mem.ReadBoolean(anim);
 // Åñëè äà - çàãðóæàåì àíèìàöèþ: