DEADSOFTWARE

added Vampyre Imaging Library; now textures can be in various formats, including...
[d2df-sdl.git] / src / game / g_textures.pas
index dcc91b7dda3e9b1a633a57890c3e36ba7f6c0890..bdf6605849405c044781a9cc89723a2a29c50060 100644 (file)
@@ -1,3 +1,4 @@
+{$MODE DELPHI}
 unit g_textures;
 
 interface
@@ -34,7 +35,7 @@ Type
     FWidth:        Word;
     FMinLength:    Byte;    // Îæèäàíèå ïîñëå ïðîèãðûâàíèÿ
     FRevert:       Boolean; // Ñìåíà êàäðîâ îáðàòíàÿ?
-    
+
   public
     constructor Create(FramesID: DWORD; Loop: Boolean; Speed: Byte);
     destructor  Destroy(); override;
@@ -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,7 +144,7 @@ end;
 
 function g_Texture_CreateWAD(var ID: DWORD; Resource: String): Boolean;
 var
-  WAD: TWADEditor_1;
+  WAD: TWADFile;
   FileName,
   SectionName,
   ResourceName: String;
@@ -153,12 +154,12 @@ begin
   Result := False;
   g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
 
-  WAD := TWADEditor_1.Create;
+  WAD := TWADFile.Create;
   WAD.ReadFile(FileName);
 
   if WAD.GetResource(SectionName, ResourceName, TextureData, ResourceLength) then
   begin
-    if e_CreateTextureMem(TextureData, ID) then 
+    if e_CreateTextureMem(TextureData, ResourceLength, ID) then
       Result := True
     else
       FreeMem(TextureData);
@@ -166,7 +167,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,7 +184,7 @@ end;
 
 function g_Texture_CreateWADEx(TextureName: ShortString; Resource: String): Boolean;
 var
-  WAD: TWADEditor_1;
+  WAD: TWADFile;
   FileName,
   SectionName,
   ResourceName: String;
@@ -195,12 +196,12 @@ begin
 
   find_id := FindTexture();
 
-  WAD := TWADEditor_1.Create;
+  WAD := TWADFile.Create;
   WAD.ReadFile(FileName);
 
   if WAD.GetResource(SectionName, ResourceName, 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 +214,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();
@@ -240,7 +241,7 @@ var
   a: DWORD;
 begin
   Result := False;
+
   if TexturesArray = nil then Exit;
 
   if TextureName = '' then Exit;
@@ -349,7 +350,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 +366,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,7 +392,7 @@ end;
 function g_Frames_CreateWAD(ID: PDWORD; Name: ShortString; Resource: string;
                             FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean;
 var
-  WAD: TWADEditor_1;
+  WAD: TWADFile;
   FileName,
   SectionName,
   ResourceName: string;
@@ -402,18 +403,18 @@ begin
 
   g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName);
 
-  WAD := TWADEditor_1.Create();
+  WAD := TWADFile.Create();
   WAD.ReadFile(FileName);
 
   if not WAD.GetResource(SectionName, ResourceName, 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 +425,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;