X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_textures.pas;h=4e1cffad133903770bb6900a9e4e8bf699ff2a97;hb=af3c404e11867c6794975f1d45dd98932d804ede;hp=a6ea7640de2d8b36982e6886ab08142d6aa31b5e;hpb=844441154d1220d6c83f75043300c2851ec87109;p=d2df-sdl.git diff --git a/src/game/g_textures.pas b/src/game/g_textures.pas index a6ea764..4e1cffa 100644 --- a/src/game/g_textures.pas +++ b/src/game/g_textures.pas @@ -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;