DEADSOFTWARE

no more path splitting in wad reading, it's useless
[d2df-sdl.git] / src / game / g_textures.pas
index a6ea7640de2d8b36982e6886ab08142d6aa31b5e..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;
@@ -144,21 +145,19 @@ end;
 function g_Texture_CreateWAD(var ID: DWORD; Resource: String): Boolean;
 var
   WAD: TWADFile;
-  FileName,
-  SectionName,
-  ResourceName: String;
+  FileName: String;
   TextureData: Pointer;
   ResourceLength: Integer;
 begin
   Result := False;
-  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
+  FileName := g_ExtractWadName(Resource);
 
   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);
@@ -184,23 +183,21 @@ end;
 function g_Texture_CreateWADEx(TextureName: ShortString; Resource: String): Boolean;
 var
   WAD: TWADFile;
-  FileName,
-  SectionName,
-  ResourceName: String;
+  FileName: String;
   TextureData: Pointer;
   find_id: DWORD;
   ResourceLength: Integer;
 begin
-  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
+  FileName := g_ExtractWadName(Resource);
 
   find_id := FindTexture();
 
   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,
@@ -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);
@@ -392,20 +389,18 @@ function g_Frames_CreateWAD(ID: PDWORD; Name: ShortString; Resource: string;
                             FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
 var
   WAD: TWADFile;
-  FileName,
-  SectionName,
-  ResourceName: string;
+  FileName: string;
   TextureData: Pointer;
   ResourceLength: Integer;
 begin
   Result := False;
 
-  g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
+  FileName := g_ExtractWadName(Resource);
 
   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);
@@ -413,7 +408,7 @@ begin
     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;