DEADSOFTWARE

no more path splitting in wad reading, it's useless
[d2df-sdl.git] / src / game / g_textures.pas
index eb067ea38e08cbd41c6a8121d24d3bfdc3ba81ca..4e1cffad133903770bb6900a9e4e8bf699ff2a97 100644 (file)
@@ -1,3 +1,4 @@
+{$MODE DELPHI}
 unit g_textures;
 
 interface
@@ -78,7 +79,7 @@ function g_Frames_CreateWAD(ID: PDWORD; Name: ShortString; Resource: String;
                             FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
 function g_Frames_CreateFile(ID: PDWORD; Name: ShortString; FileName: String;
                              FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
-function g_Frames_CreateMemory(ID: PDWORD; Name: ShortString; pData: Pointer;
+function g_Frames_CreateMemory(ID: PDWORD; Name: ShortString; pData: Pointer; dataSize: LongInt;
                                FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
 //function g_Frames_CreateRevert(ID: PDWORD; Name: ShortString; Frames: string): Boolean;
 function g_Frames_Get(var ID: DWORD; FramesName: ShortString): Boolean;
@@ -93,7 +94,7 @@ procedure DumpTextureNames();
 implementation
 
 uses
-  g_game, e_log, g_basic, SysUtils, g_console, WADEDITOR,
+  g_game, e_log, g_basic, SysUtils, g_console, wadreader,
   g_language;
 
 type
@@ -143,22 +144,20 @@ end;
 
 function g_Texture_CreateWAD(var ID: DWORD; Resource: String): Boolean;
 var
-  WAD: TWADEditor_1;
-  FileName,
-  SectionName,
-  ResourceName: String;
+  WAD: TWADFile;
+  FileName: String;
   TextureData: Pointer;
   ResourceLength: Integer;
 begin
   Result := False;
-  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
+  FileName := g_ExtractWadName(Resource);
 
-  WAD := TWADEditor_1.Create;
+  WAD := TWADFile.Create;
   WAD.ReadFile(FileName);
 
-  if WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then
+  if WAD.GetResource(g_ExtractFilePathName(Resource), TextureData, ResourceLength) then
   begin
-    if e_CreateTextureMem(TextureData, ID) then
+    if e_CreateTextureMem(TextureData, ResourceLength, ID) then
       Result := True
     else
       FreeMem(TextureData);
@@ -166,7 +165,7 @@ begin
   else
   begin
     e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING);
-    e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
+    //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
   end;
   WAD.Free();
 end;
@@ -183,24 +182,22 @@ end;
 
 function g_Texture_CreateWADEx(TextureName: ShortString; Resource: String): Boolean;
 var
-  WAD: TWADEditor_1;
-  FileName,
-  SectionName,
-  ResourceName: String;
+  WAD: TWADFile;
+  FileName: String;
   TextureData: Pointer;
   find_id: DWORD;
   ResourceLength: Integer;
 begin
-  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
+  FileName := g_ExtractWadName(Resource);
 
   find_id := FindTexture();
 
-  WAD := TWADEditor_1.Create;
+  WAD := TWADFile.Create;
   WAD.ReadFile(FileName);
 
-  if WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then
+  if WAD.GetResource(g_ExtractFilePathName(Resource), TextureData, ResourceLength) then
   begin
-    Result := e_CreateTextureMem(TextureData, TexturesArray[find_id].ID);
+    Result := e_CreateTextureMem(TextureData, ResourceLength, TexturesArray[find_id].ID);
     if Result then
     begin
       e_GetTextureSize(TexturesArray[find_id].ID, @TexturesArray[find_id].Width,
@@ -213,7 +210,7 @@ begin
   else
   begin
     e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING);
-    e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
+    //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
     Result := False;
   end;
   WAD.Free();
@@ -349,7 +346,7 @@ begin
   Result := True;
 end;
 
-function CreateFramesMem(pData: Pointer; ID: PDWORD; Name: ShortString;
+function CreateFramesMem(pData: Pointer; dataSize: LongInt; ID: PDWORD; Name: ShortString;
                          FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
 var
   find_id: DWORD;
@@ -365,7 +362,7 @@ begin
     else SetLength(FramesArray[find_id].TexturesID, FCount);
 
   for a := 0 to FCount-1 do
-    if not e_CreateTextureMemEx(pData, FramesArray[find_id].TexturesID[a],
+    if not e_CreateTextureMemEx(pData, dataSize, FramesArray[find_id].TexturesID[a],
                                 a*FWidth, 0, FWidth, FHeight) then
     begin
       FreeMem(pData);
@@ -391,29 +388,27 @@ end;
 function g_Frames_CreateWAD(ID: PDWORD; Name: ShortString; Resource: string;
                             FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
 var
-  WAD: TWADEditor_1;
-  FileName,
-  SectionName,
-  ResourceName: string;
+  WAD: TWADFile;
+  FileName: string;
   TextureData: Pointer;
   ResourceLength: Integer;
 begin
   Result := False;
 
-  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
+  FileName := g_ExtractWadName(Resource);
 
-  WAD := TWADEditor_1.Create();
+  WAD := TWADFile.Create();
   WAD.ReadFile(FileName);
 
-  if not WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then
+  if not WAD.GetResource(g_ExtractFilePathName(Resource), TextureData, ResourceLength) then
   begin
     WAD.Free();
     e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING);
-    e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
+    //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING);
     Exit;
   end;
 
-  if not CreateFramesMem(TextureData, ID, Name, FWidth, FHeight, FCount, BackAnimation) then
+  if not CreateFramesMem(TextureData, ResourceLength, ID, Name, FWidth, FHeight, FCount, BackAnimation) then
   begin
     WAD.Free();
     Exit;
@@ -424,10 +419,10 @@ begin
   Result := True;
 end;
 
-function g_Frames_CreateMemory(ID: PDWORD; Name: ShortString; pData: Pointer;
+function g_Frames_CreateMemory(ID: PDWORD; Name: ShortString; pData: Pointer; dataSize: LongInt;
                                FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
 begin
-  Result := CreateFramesMem(pData, ID, Name, FWidth, FHeight, FCount, BackAnimation);
+  Result := CreateFramesMem(pData, dataSize, ID, Name, FWidth, FHeight, FCount, BackAnimation);
 end;
 
 {function g_Frames_CreateRevert(ID: PDWORD; Name: ShortString; Frames: string): Boolean;