DEADSOFTWARE

Merge FGSFDS branch, fix build
[d2df-sdl.git] / src / game / g_map.pas
index cb934b81705666abe9dcd89ace6d7ae251fa47cb..9cc29e34dfd3e2e0db4e340896bd3d32d1b07e0d 100644 (file)
@@ -55,7 +55,6 @@ type
     Direction:   TDirection;
   end;
 
-
 function  g_Map_Load(Res: String): Boolean;
 function  g_Map_GetMapInfo(Res: String): TMapInfo;
 function  g_Map_GetMapsList(WADName: String): SArray;
@@ -82,6 +81,8 @@ function  g_Map_HaveFlagPoints(): Boolean;
 procedure g_Map_ResetFlag(Flag: Byte);
 procedure g_Map_DrawFlags();
 
+function g_Map_PanelForPID(PanelID: Integer; var PanelArrayID: Integer): PPanel;
+
 procedure g_Map_SaveState(Var Mem: TBinMemoryWriter);
 procedure g_Map_LoadState(Var Mem: TBinMemoryReader);
 
@@ -142,7 +143,14 @@ const
   MUSIC_SIGNATURE = $4953554D; // 'MUSI'
   FLAG_SIGNATURE = $47414C46; // 'FLAG'
 
+type
+  TPanelID = record
+    PWhere: ^TPanelArray;
+    PArrID: Integer;
+  end;
+
 var
+  PanelById:     array of TPanelID;
   Textures:      TLevelTextureArray;
   RespawnPoints: Array of TRespawnPoint;
   FlagPoints:    Array [FLAG_RED..FLAG_BLUE] of PFlagPoint;
@@ -362,6 +370,11 @@ begin
     panels^[len].SaveIt := True;
 
   Result := len;
+
+  len := Length(PanelByID);
+  SetLength(PanelByID, len + 1);
+  PanelByID[len].PWhere := panels;
+  PanelByID[len].PArrID := Result;
 end;
 
 function CreateNullTexture(RecName: String): Integer;
@@ -909,7 +922,6 @@ var
                           end;
   FileName, mapResName, s, TexName, ScrStr: String;
   Data, ScrText: Pointer;
-  ScrEnd: PByte;
   Len, ScrLen: Integer;
   ok, isAnim, trigRef: Boolean;
   CurTex, ntn: Integer;
@@ -1586,6 +1598,8 @@ begin
 
   gDoorMap := nil;
   gLiftMap := nil;
+
+  PanelByID := nil;
 end;
 
 procedure g_Map_Update();
@@ -2301,4 +2315,15 @@ begin
 ///// /////
 end;
 
+function g_Map_PanelForPID(PanelID: Integer; var PanelArrayID: Integer): PPanel;
+var
+  Arr: TPanelArray;
+begin
+  Result := nil;
+  if (PanelID < 0) or (PanelID > High(PanelByID)) then Exit;
+  Arr := PanelByID[PanelID].PWhere^;
+  PanelArrayID := PanelByID[PanelID].PArrID;
+  Result := Addr(Arr[PanelByID[PanelID].PArrID]);
+end;
+
 end.