World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
LOD.h
См. документацию.
1 #pragma once
2 
3 #include <vector>
4 
5 #include "Engine/Strings.h"
6 
8 
9 class Sprite;
10 
11 #define MAX_LOD_TEXTURES 1000
12 #define MAX_LOD_SPRITES 1500
13 
14 /* 354 */
18 };
19 
20 namespace LOD {
21 #pragma pack(push, 1)
22 struct FileHeader {
23  inline FileHeader() {
24  memset(pSignature, 0, 4);
25  memset(LodVersion, 0, 80);
26  memset(LodDescription, 0, 80);
27  memset(array_0000B0, 0, 80);
28 
29  LODSize = 0;
30  dword_0000A8 = 0;
31  uNumIndices = 0;
32  }
33 
34  char pSignature[4];
35  char LodVersion[80];
36  char LodDescription[80];
40  char array_0000B0[80];
41 };
42 #pragma pack(pop)
43 
44 #pragma pack(push, 1)
45 struct Directory {
46  Directory();
47 
48  char pFilename[15];
49  char field_F;
55 };
56 #pragma pack(pop)
57 
58 class File {
59  public:
60  File();
61  virtual ~File();
62 
63  bool Open(const String &pFilename);
64  void Close();
65 
66  void *LoadRaw(const String &pContainer, size_t *data_size = nullptr);
67  void *LoadCompressedTexture(const String &pContainer, size_t *data_size = nullptr);
68  void *LoadCompressed(const String &pContainer, size_t *data_size = nullptr);
69  bool DoesContainerExist(const String &filename);
70 
72  size_t GetSubNodesCount() const { return uNumSubDirs; }
73  int GetSubNodeIndex(const String &name) const;
74 
75  protected:
76  FILE *FindContainer(const String &filename, size_t *data_size = nullptr);
77  virtual bool OpenFile(const String &sFilename);
78  bool LoadHeader();
79  bool LoadSubIndices(const String &sFolder);
80  virtual void ResetSubIndices();
81 
82  protected:
83  FILE *pFile;
86 
88 
89  std::vector<Directory> pRoot;
91  unsigned int uOffsetToSubIndex;
92 
93  unsigned int uNumSubDirs;
95 };
96 
97 class WriteableFile : public File {
98  public:
99  WriteableFile();
100  bool LoadFile(const String &pFilename, bool bWriting);
101  unsigned int Write(const String &file_name, const void *pDirData, size_t size, int a4);
102  void CloseWriteFile();
103  int CreateTempFile();
104  int FixDirectoryOffsets();
105  bool _4621A7();
106  int CreateNewLod(LOD::FileHeader *pHeader, const String &root_name, const String &Source);
107 
108  void AllocSubIndicesAndIO(unsigned int uNumSubIndices, unsigned int uBufferSize);
109  void FreeSubIndexAndIO();
110  bool AppendDirectory(const String &file_name, const void *pData, size_t data_size);
111 
112  void ClearSubNodes() { uNumSubDirs = 0; }
113 
114  protected:
115  virtual void ResetSubIndices();
116 
117  protected:
119  unsigned int uIOBufferSize;
121  unsigned int uLODDataSize;
122 };
123 }; // namespace LOD
124 
126  public:
128  virtual ~LODFile_IconsBitmaps();
129  void SyncLoadedFilesCount();
130  unsigned int FindTextureByName(const char *pName);
131  bool Load(const String &pFilename, const String &pFolderName);
132  void ReleaseAll();
133  unsigned int LoadTexture(const char *pContainer,
134  enum TEXTURE_TYPE uTextureType = TEXTURE_DEFAULT);
135  struct Texture_MM7 *LoadTexturePtr(
136  const char *pContainer,
137  enum TEXTURE_TYPE uTextureType = TEXTURE_DEFAULT);
138  int LoadTextureFromLOD(struct Texture_MM7 *pOutTex, const char *pContainer,
139  enum TEXTURE_TYPE eTextureType);
140  int ReloadTexture(struct Texture_MM7 *pDst, const char *pContainer,
141  int mode);
144  // void _410423_move_textures_to_device();
145  void SetupPalettes(unsigned int uTargetRBits, unsigned int uTargetGBits,
146  unsigned int uTargetBBits);
147  void ReleaseAll2();
150  void _inlined_sub0();
151  void _inlined_sub1();
152  void _inlined_sub2();
153 
154  int LoadDummyTexture();
155 
156  Texture_MM7 *GetTexture(int idx);
157 
158  Texture_MM7 pTextures[MAX_LOD_TEXTURES];
159  unsigned int uNumLoadedFiles;
170  // int can_load_hardware_sprites;
171  struct IDirectDrawSurface **pHardwareSurfaces;
172  struct IDirect3DTexture2 **pHardwareTextures;
173  char *ptr_011BB4;
174 };
175 
176 #pragma pack(push, 1)
178  inline LODSpriteHeader() {
179  uHeight = 0;
180  uPaletteId = 0;
181  word_1A = 0;
182  }
183 
184  char pName[12]; // 0
186  uint16_t uWidth; // 10 SW width (as opposed to Sprite::BufferWidth)
187  uint16_t uHeight; // 12 SW height
193 };
194 #pragma pack(pop)
195 
196 #pragma pack(push, 1)
197 struct LODSprite : public LODSpriteHeader {
198  inline LODSprite() {
199  bitmap = nullptr;
200  }
201  ~LODSprite();
202 
203  void Release();
204  int _4AD2D1_overlays(struct SoftwareBillboard *a2, int a3);
205 
207 };
208 #pragma pack(pop)
209 
210 class LODFile_Sprites : public LOD::File {
211  public:
212  LODFile_Sprites();
213  virtual ~LODFile_Sprites();
214 
215  void DeleteSomeSprites();
216  void DeleteSpritesRange(int uStartIndex, int uStopIndex);
217  int _461397();
218  void DeleteSomeOtherSprites();
219  int LoadSpriteFromFile(LODSprite *pSpriteHeader, const String &pContainer);
220  bool LoadSprites(const String &pFilename);
221  int LoadSprite(const char *pContainerName, unsigned int uPaletteID);
223  void ReleaseAll();
225  void _inlined_sub0();
226  void _inlined_sub1();
227 
228  unsigned int uNumLoadedSprites;
232  // int can_load_hardware_sprites;
235 };
236 
238 
242 
246 
250 
252 extern LOD::File *pGames_LOD;
uint16_t
unsigned __int16 uint16_t
Definition: SDL_config.h:37
LOD::Directory::field_F
char field_F
Definition: LOD.h:49
LOD::Directory::uDataSize
uint32_t uDataSize
Definition: LOD.h:51
LODFile_Sprites::DeleteSpritesRange
void DeleteSpritesRange(int uStartIndex, int uStopIndex)
Definition: LOD.cpp:306
LOD::WriteableFile::FixDirectoryOffsets
int FixDirectoryOffsets()
Definition: LOD.cpp:452
LOD::WriteableFile::LoadFile
bool LoadFile(const String &pFilename, bool bWriting)
Definition: LOD.cpp:686
LOD::File::GetSubNodesCount
size_t GetSubNodesCount() const
Definition: LOD.h:72
LODFile_IconsBitmaps::uTextureRedBits
int uTextureRedBits
Definition: LOD.h:163
TEXTURE_DEFAULT
@ TEXTURE_DEFAULT
Definition: LOD.h:16
LOD::WriteableFile::AllocSubIndicesAndIO
void AllocSubIndicesAndIO(unsigned int uNumSubIndices, unsigned int uBufferSize)
Definition: LOD.cpp:712
LOD::FileHeader::LodDescription
char LodDescription[80]
Definition: LOD.h:36
LODFile_IconsBitmaps::LODFile_IconsBitmaps
LODFile_IconsBitmaps()
Definition: LOD.cpp:421
LOD::FileHeader::uNumIndices
uint32_t uNumIndices
Definition: LOD.h:39
LOD::WriteableFile::ResetSubIndices
virtual void ResetSubIndices()
Definition: LOD.cpp:294
LODFile_IconsBitmaps::uNumLoadedFiles
unsigned int uNumLoadedFiles
Definition: LOD.h:159
mode
EGLSyncKHR EGLenum mode
Definition: SDL_egl.h:1056
pSprites_LOD_mm6
LODFile_Sprites * pSprites_LOD_mm6
Definition: LOD.cpp:21
LODFile_IconsBitmaps::FindTextureByName
unsigned int FindTextureByName(const char *pName)
Definition: LOD.cpp:368
LOD::Directory::Directory
Directory()
Definition: LOD.cpp:824
LOD::File::ResetSubIndices
virtual void ResetSubIndices()
Definition: LOD.cpp:283
LODFile_IconsBitmaps::ptr_011BB4
char * ptr_011BB4
Definition: LOD.h:173
LODFile_IconsBitmaps::LoadTexturePtr
struct Texture_MM7 * LoadTexturePtr(const char *pContainer, enum TEXTURE_TYPE uTextureType=TEXTURE_DEFAULT)
Definition: LOD.cpp:1176
LOD::Directory::pFilename
char pFilename[15]
Definition: LOD.h:48
LOD::File::LoadCompressedTexture
void * LoadCompressedTexture(const String &pContainer, size_t *data_size=nullptr)
Definition: LOD.cpp:921
LOD::WriteableFile::pIOBuffer
uint8_t * pIOBuffer
Definition: LOD.h:118
LODSpriteHeader::LODSpriteHeader
LODSpriteHeader()
Definition: LOD.h:178
LOD
Definition: LOD.h:20
LOD::WriteableFile::_4621A7
bool _4621A7()
Definition: LOD.cpp:446
pSprites_LOD_mm8
LODFile_Sprites * pSprites_LOD_mm8
Definition: LOD.cpp:22
LODSpriteHeader::word_1A
uint16_t word_1A
Definition: LOD.h:191
LOD::File::DoesContainerExist
bool DoesContainerExist(const String &filename)
Definition: LOD.cpp:833
LODFile_IconsBitmaps::SyncLoadedFilesCount
void SyncLoadedFilesCount()
Definition: LOD.cpp:375
LODSpriteHeader::uSpriteSize
uint32_t uSpriteSize
Definition: LOD.h:185
LODFile_IconsBitmaps::uNumPrevLoadedFiles
int uNumPrevLoadedFiles
Definition: LOD.h:166
LOD::File::header
struct FileHeader header
Definition: LOD.h:87
LOD::File::pRoot
std::vector< Directory > pRoot
Definition: LOD.h:89
LODFile_IconsBitmaps::ReloadTexture
int ReloadTexture(struct Texture_MM7 *pDst, const char *pContainer, int mode)
Definition: LOD.cpp:1019
LODSpriteHeader::uWidth
uint16_t uWidth
Definition: LOD.h:186
LODFile_IconsBitmaps::dword_11B80
int dword_11B80
Definition: LOD.h:160
LODFile_IconsBitmaps::~LODFile_IconsBitmaps
virtual ~LODFile_IconsBitmaps()
Definition: LOD.cpp:411
LODFile_IconsBitmaps::uTexturePacksCount
int uTexturePacksCount
Definition: LOD.h:167
LOD::File::Close
void Close()
Definition: LOD.cpp:243
LODSpriteHeader
Definition: LOD.h:177
LODFile_IconsBitmaps::_011BA4_debug_paletted_pixels_uncompressed
int _011BA4_debug_paletted_pixels_uncompressed
Definition: LOD.h:169
LOD::FileHeader::LODSize
uint32_t LODSize
Definition: LOD.h:37
LOD::FileHeader::array_0000B0
char array_0000B0[80]
Definition: LOD.h:40
LOD::WriteableFile::CloseWriteFile
void CloseWriteFile()
Definition: LOD.cpp:530
index
GLuint index
Definition: SDL_opengl_glext.h:663
pBitmaps_LOD
LODFile_IconsBitmaps * pBitmaps_LOD
Definition: LOD.cpp:16
LODSpriteHeader::uPaletteId
uint16_t uPaletteId
Definition: LOD.h:188
Image.h
Sprite
Definition: Sprites.h:10
LODFile_IconsBitmaps::dword_11B88
int dword_11B88
Definition: LOD.h:162
LOD::Directory::uOfsetFromSubindicesStart
uint32_t uOfsetFromSubindicesStart
Definition: LOD.h:50
LODFile_Sprites::LoadSprite
int LoadSprite(const char *pContainerName, unsigned int uPaletteID)
Definition: LOD.cpp:149
TEXTURE_24BIT_PALETTE
@ TEXTURE_24BIT_PALETTE
Definition: LOD.h:17
LOD::WriteableFile::uLODDataSize
unsigned int uLODDataSize
Definition: LOD.h:121
LODSpriteHeader::word_16
uint16_t word_16
Definition: LOD.h:189
LOD::WriteableFile
Definition: LOD.h:97
pGames_LOD
LOD::File * pGames_LOD
Definition: LOD.cpp:25
LOD::File::pFile
FILE * pFile
Definition: LOD.h:83
LODSpriteHeader::uTexturePitch
uint16_t uTexturePitch
Definition: LOD.h:190
LODFile_IconsBitmaps::LoadTextureFromLOD
int LoadTextureFromLOD(struct Texture_MM7 *pOutTex, const char *pContainer, enum TEXTURE_TYPE eTextureType)
Definition: LOD.cpp:1063
LOD::Directory
Definition: LOD.h:45
LODFile_IconsBitmaps::ReleaseLostHardwareTextures
void ReleaseLostHardwareTextures()
Definition: LOD.cpp:1017
LOD::WriteableFile::CreateNewLod
int CreateNewLod(LOD::FileHeader *pHeader, const String &root_name, const String &Source)
Definition: LOD.cpp:257
LODFile_Sprites::LODFile_Sprites
LODFile_Sprites()
Definition: LOD.cpp:402
LOD::File::uOffsetToSubIndex
unsigned int uOffsetToSubIndex
Definition: LOD.h:91
LODFile_IconsBitmaps::_inlined_sub0
void _inlined_sub0()
Definition: LOD.cpp:50
LOD::WriteableFile::FreeSubIndexAndIO
void FreeSubIndexAndIO()
Definition: LOD.cpp:732
SoftwareBillboard
Definition: IRender.h:170
LOD::FileHeader::LodVersion
char LodVersion[80]
Definition: LOD.h:35
LOD::File::isFileOpened
bool isFileOpened
Definition: LOD.h:85
LODFile_Sprites::~LODFile_Sprites
virtual ~LODFile_Sprites()
Definition: LOD.cpp:387
LOD::File::FindContainer
FILE * FindContainer(const String &filename, size_t *data_size=nullptr)
Definition: LOD.cpp:851
LODFile_Sprites::LoadSpriteFromFile
int LoadSpriteFromFile(LODSprite *pSpriteHeader, const String &pContainer)
Definition: LOD.cpp:98
LODFile_IconsBitmaps::Load
bool Load(const String &pFilename, const String &pFolderName)
Definition: LOD.cpp:349
LODSprite::~LODSprite
~LODSprite()
Definition: LOD.cpp:395
LODFile_IconsBitmaps::pHardwareTextures
struct IDirect3DTexture2 ** pHardwareTextures
Definition: LOD.h:172
LODFile_Sprites::field_ECB4
int field_ECB4
Definition: LOD.h:234
LODFile_IconsBitmaps::SetupPalettes
void SetupPalettes(unsigned int uTargetRBits, unsigned int uTargetGBits, unsigned int uTargetBBits)
Definition: LOD.cpp:872
LODFile_Sprites::_inlined_sub0
void _inlined_sub0()
Definition: LOD.cpp:55
LOD::File::File
File()
Definition: LOD.cpp:739
LODFile_IconsBitmaps::ReleaseAll2
void ReleaseAll2()
Definition: LOD.cpp:223
LODSprite
Definition: LOD.h:197
LODSprite::LODSprite
LODSprite()
Definition: LOD.h:198
LODFile_IconsBitmaps::LoadTexture
unsigned int LoadTexture(const char *pContainer, enum TEXTURE_TYPE uTextureType=TEXTURE_DEFAULT)
Definition: LOD.cpp:1185
LOD::Directory::uNumSubIndices
uint16_t uNumSubIndices
Definition: LOD.h:53
LOD::FileHeader::dword_0000A8
uint32_t dword_0000A8
Definition: LOD.h:38
LOD::WriteableFile::CreateTempFile
int CreateTempFile()
Definition: LOD.cpp:518
LOD::File::LoadSubIndices
bool LoadSubIndices(const String &sFolder)
Definition: LOD.cpp:804
LODSpriteHeader::uDecompressedSize
uint32_t uDecompressedSize
Definition: LOD.h:192
LOD::File::pSubIndices
struct Directory * pSubIndices
Definition: LOD.h:94
LODFile_Sprites::MoveSpritesToVideoMemory
void MoveSpritesToVideoMemory()
Definition: LOD.cpp:204
LOD::File::GetSubNodeIndex
int GetSubNodeIndex(const String &name) const
Definition: LOD.cpp:1005
LODFile_Sprites::uNumLoadedSprites
unsigned int uNumLoadedSprites
Definition: LOD.h:228
LODFile_IconsBitmaps::pHardwareSurfaces
struct IDirectDrawSurface ** pHardwareSurfaces
Definition: LOD.h:171
LOD::WriteableFile::pOutputFileHandle
FILE * pOutputFileHandle
Definition: LOD.h:120
LODSprite::_4AD2D1_overlays
int _4AD2D1_overlays(struct SoftwareBillboard *a2, int a3)
Definition: LOD.cpp:206
LODSpriteHeader::uHeight
uint16_t uHeight
Definition: LOD.h:187
LOD::File::uNumSubDirs
unsigned int uNumSubDirs
Definition: LOD.h:93
LODFile_IconsBitmaps::uTextureGreenBits
int uTextureGreenBits
Definition: LOD.h:164
pIcons_LOD
LODFile_IconsBitmaps * pIcons_LOD
Definition: LOD.cpp:12
LOD::WriteableFile::Write
unsigned int Write(const String &file_name, const void *pDirData, size_t size, int a4)
Definition: LOD.cpp:544
LOD::File::~File
virtual ~File()
Definition: LOD.cpp:745
pSprites_LOD
LODFile_Sprites * pSprites_LOD
Definition: LOD.cpp:20
LODFile_Sprites
Definition: LOD.h:210
LOD::FileHeader::pSignature
char pSignature[4]
Definition: LOD.h:34
LOD::WriteableFile::uIOBufferSize
unsigned int uIOBufferSize
Definition: LOD.h:119
Texture_MM7
Definition: Image.h:97
LODSprite::Release
void Release()
Definition: LOD.cpp:316
LODFile_IconsBitmaps::uTextureBlueBits
int uTextureBlueBits
Definition: LOD.h:165
bitmap
GLsizei GLfixed GLfixed GLfixed GLfixed const GLubyte * bitmap
Definition: SDL_opengl_glext.h:4537
LODSprite::bitmap
uint8_t * bitmap
Definition: LOD.h:206
LODFile_IconsBitmaps
Definition: LOD.h:125
uint8_t
unsigned __int8 uint8_t
Definition: SDL_config.h:35
LODFile_Sprites::ReleaseLostHardwareSprites
void ReleaseLostHardwareSprites()
Definition: LOD.cpp:200
pEvents_LOD
LODFile_IconsBitmaps * pEvents_LOD
Definition: LOD.cpp:10
LODFile_IconsBitmaps::RemoveTexturesPackFromTextureList
void RemoveTexturesPackFromTextureList()
Definition: LOD.cpp:74
LODFile_IconsBitmaps::GetTexture
Texture_MM7 * GetTexture(int idx)
Definition: LOD.cpp:1209
LOD::File::LoadCompressed
void * LoadCompressed(const String &pContainer, size_t *data_size=nullptr)
Definition: LOD.cpp:965
LODFile_Sprites::field_ECA8
int field_ECA8
Definition: LOD.h:231
name
EGLImageKHR EGLint * name
Definition: SDL_egl.h:1497
LOD::File::pContainerName
String pContainerName
Definition: LOD.h:90
LOD::WriteableFile::WriteableFile
WriteableFile()
Definition: LOD.cpp:681
LODSpriteHeader::pName
char pName[12]
Definition: LOD.h:184
pIcons_LOD_mm8
LODFile_IconsBitmaps * pIcons_LOD_mm8
Definition: LOD.cpp:14
LOD::File
Definition: LOD.h:58
LOD::Directory::priority
uint16_t priority
Definition: LOD.h:54
LOD::WriteableFile::AppendDirectory
bool AppendDirectory(const String &file_name, const void *pData, size_t data_size)
Definition: LOD.cpp:506
LODFile_Sprites::ReleaseAll
void ReleaseAll()
Definition: LOD.cpp:202
LOD::File::LoadHeader
bool LoadHeader()
Definition: LOD.cpp:778
pIcons_LOD_mm6
LODFile_IconsBitmaps * pIcons_LOD_mm6
Definition: LOD.cpp:13
LOD::File::Open
bool Open(const String &pFilename)
Definition: LOD.cpp:751
LODFile_Sprites::DeleteSomeOtherSprites
void DeleteSomeOtherSprites()
Definition: LOD.cpp:232
LOD::WriteableFile::ClearSubNodes
void ClearSubNodes()
Definition: LOD.h:112
pBitmaps_LOD_mm6
LODFile_IconsBitmaps * pBitmaps_LOD_mm6
Definition: LOD.cpp:17
LODFile_Sprites::_461397
int _461397()
Definition: LOD.cpp:843
LODFile_Sprites::field_ECA0
int field_ECA0
Definition: LOD.h:229
LOD::File::GetSubNodeName
String GetSubNodeName(size_t index) const
Definition: LOD.h:71
LODFile_Sprites::pHardwareSprites
Sprite * pHardwareSprites
Definition: LOD.h:233
LOD::File::OpenFile
virtual bool OpenFile(const String &sFilename)
Definition: LOD.cpp:763
LODFile_IconsBitmaps::LoadDummyTexture
int LoadDummyTexture()
Definition: LOD.cpp:30
LOD::FileHeader::FileHeader
FileHeader()
Definition: LOD.h:23
LODFile_IconsBitmaps::_inlined_sub1
void _inlined_sub1()
Definition: LOD.cpp:42
LODFile_IconsBitmaps::dword_11B84
int dword_11B84
Definition: LOD.h:161
LODFile_Sprites::field_ECA4
int field_ECA4
Definition: LOD.h:230
LODFile_IconsBitmaps::ReleaseAll
void ReleaseAll()
Definition: LOD.cpp:357
LODFile_IconsBitmaps::ReleaseHardwareTextures
void ReleaseHardwareTextures()
Definition: LOD.cpp:1015
size
GLsizeiptr size
Definition: SDL_opengl_glext.h:540
LOD::Directory::dword_000018
uint32_t dword_000018
Definition: LOD.h:52
LODFile_IconsBitmaps::pFacesLock
int pFacesLock
Definition: LOD.h:168
LODFile_IconsBitmaps::pTextures
Texture_MM7 pTextures[MAX_LOD_TEXTURES]
Definition: LOD.h:158
LODFile_IconsBitmaps::_inlined_sub2
void _inlined_sub2()
Definition: LOD.cpp:37
LOD::FileHeader
Definition: LOD.h:22
LODFile_Sprites::DeleteSomeSprites
void DeleteSomeSprites()
Definition: LOD.cpp:299
uint32_t
unsigned __int32 uint32_t
Definition: SDL_config.h:39
LOD::File::LoadRaw
void * LoadRaw(const String &pContainer, size_t *data_size=nullptr)
Definition: LOD.cpp:895
String
std::string String
Definition: Strings.h:10
LODFile_Sprites::LoadSprites
bool LoadSprites(const String &pFilename)
Definition: LOD.cpp:141
LODFile_IconsBitmaps::RemoveTexturesFromTextureList
void RemoveTexturesFromTextureList()
Definition: LOD.cpp:60
pNew_LOD
LOD::WriteableFile * pNew_LOD
Definition: LOD.cpp:24
LODFile_Sprites::_inlined_sub1
void _inlined_sub1()
Definition: LOD.cpp:46
LOD::File::pLODName
String pLODName
Definition: LOD.h:84
pBitmaps_LOD_mm8
LODFile_IconsBitmaps * pBitmaps_LOD_mm8
Definition: LOD.cpp:18
TEXTURE_TYPE
TEXTURE_TYPE
Definition: LOD.h:15
Strings.h