Mercurial > might-and-magic-trilogy
view LOD.h @ 115:75faebd0a975
lod fix
author | Nomad |
---|---|
date | Wed, 07 Nov 2012 20:42:12 +0200 |
parents | 8e802a11b20d |
children | a64b244da76c |
line wrap: on
line source
#pragma once #include <stdio.h> #include <memory.h> #include "Texture.h" /* 354 */ enum TEXTURE_TYPE { TEXTURE_DEFAULT = 0, TEXTURE_24BIT_PALETTE = 0x1, TEXTURE_16BIT_PALETTE = 0x2, }; namespace LOD { #pragma pack(push, 1) struct FileHeader { inline FileHeader() { memset(array_0000B0, 0, 28); memset(array_0000CC, 0, 52); } void Reset(); unsigned __int8 pSignature[4]; char LodVersion[80]; char LodDescription[80]; int dword_0000A4; int dword_0000A8; unsigned int uNumIndices; char array_0000B0[28]; char array_0000CC[52]; }; #pragma pack(pop) #pragma pack(push, 1) struct Directory { Directory(); Directory *Reset(); char pFilename[16]; unsigned int uOfsetFromSubindicesStart; unsigned int uDataSize; int dword_000018; unsigned __int16 uNumSubIndices; __int16 word_00001E; }; #pragma pack(pop) #pragma pack(push, 1) struct File { File(); virtual ~File(); void *LoadRaw(const char *pContainer, int a3); FILE *FindContainer(const char *pContainerName, bool bLinearSearch); bool DoesContainerExist(const char *pContainer); int CalcIndexFast(int startIndex, int maxIndex, const char *pContainerName); bool LoadHeader(const char *pFilename, bool bWriting); int LoadSubIndices(const char *pContainer); void AllocSubIndicesAndIO(unsigned int uNumSubIndices, unsigned int uBufferSize); void FreeSubIndexAndIO(); bool AppendDirectory(LOD::Directory *pDir, const void *pData); void ResetSubIndices(); void Close(); FILE *pFile; char pLODName[256]; unsigned int isFileOpened; unsigned __int8 *pIOBuffer; unsigned int uIOBufferSize; struct FileHeader header; struct Directory *pRoot; char pContainerName[16]; unsigned int uCurrentIndexDir; unsigned int uLODDataSize; unsigned int uNumSubIndices; struct Directory *pSubIndices; unsigned int uOffsetToSubIndex; FILE *pOutputFileHandle; }; #pragma pack(pop) }; /* 6 */ #pragma pack(push, 1) struct LODWriteableFile: public LOD::File { bool LoadFile(const char *pFilename, bool bWriting); unsigned int Write(const LOD::Directory *pDir, const void *pDirData, int a4); void CloseWriteFile(); int CreateTempFile(); int Save(); bool _4621A7(); int _461492(LOD::FileHeader *pHeader, LOD::Directory *pDir, const char *Source); /*FILE *pFile; char pLODName[256]; unsigned int isFileOpened; unsigned __int8 *pIOBuffer; unsigned int uIOBufferSize; struct LOD::FileHeader header; struct LOD::Directory *pRoot; unsigned __int8 pContainerName[16]; unsigned int uCurrentIndexDir; unsigned int uLODDataSize; unsigned int uNumSubIndices; struct LOD::Directory *pSubIndices; unsigned int uOffsetToSubIndex; FILE *pOutputFileHandle;*/ }; #pragma pack(pop) #pragma pack(push, 1) struct LODFile_IconsBitmaps: public LOD::File { LODFile_IconsBitmaps(); virtual ~LODFile_IconsBitmaps(); int _40F9C5(); unsigned int FindTextureByName(const char *pName); bool LoadBitmaps(const char *pFilename); bool LoadIconsOrEvents(const char *pLODFilename); void ReleaseAll(); unsigned int LoadTexture(const char *pContainer, enum TEXTURE_TYPE uTextureType = TEXTURE_DEFAULT); Texture *LoadTexturePtr(const char *pContainer, enum TEXTURE_TYPE uTextureType = TEXTURE_DEFAULT); int LoadTextureFromLOD(Texture *pOutTex, const char *pContainer, enum TEXTURE_TYPE eTextureType); int ReloadTexture(Texture *pDst, const char *pContainer, int mode); void ReleaseHardwareTextures(); void ReleaseLostHardwareTextures(); void _410423_move_textures_to_device(); int _410522(Texture *pDst, const char *pContainer, unsigned int uTextureType); void SetupPalettes(unsigned int uTargetRBits, unsigned int uTargetGBits, unsigned int uTargetBBits); void ReleaseAll2(); void _4114F2(); void _4355F7(); /*FILE *pFile; unsigned __int8 pLODName[256]; unsigned int isFileOpened; unsigned __int8 *pIOBuffer; unsigned int uIOBufferSize; struct LOD::FileHeader header; struct LOD::Directory *pRoot; unsigned __int8 pContainerName[16]; unsigned int uCurrentIndexDir; unsigned int uLODDataSize; unsigned int uNumSubIndices; struct LOD::Directory *pSubIndices; unsigned int uOffsetToSubIndex; FILE *pOutputFileHandle;*/ struct Texture pTextures[1000]; unsigned int uNumLoadedFiles; int dword_11B80; int dword_11B84; int dword_11B88; int uTextureRedBits; int uTextureGreenBits; int uTextureBlueBits; int uNumPrevLoadedFiles; int uTexturePacksCount; int dword_011BA0; int dword_011BA4; int dword_011BA8; struct IDirectDrawSurface **pHardwareSurfaces; struct IDirect3DTexture2 **pHardwareTextures; char *ptr_011BB4; }; #pragma pack(pop) #pragma pack(push, 1) struct LODSprite { //----- (0046244C) -------------------------------------------------------- inline LODSprite() { uHeight = 0; uPaletteId = 0; word_1A = 0; pSpriteLines = nullptr; pDecompressedBytes = nullptr; } ~LODSprite(); void Release(); int _4ACC38(struct RenderBillboardTransform_local0 *a2, char a3); int _4AD2D1(struct RenderBillboardTransform_local0 *a2, int a3); char pName[12]; int uSpriteSize; __int16 uWidth; __int16 uHeight; __int16 uPaletteId; __int16 word_16; __int16 uTexturePitch; __int16 word_1A; int uDecompressedSize; struct LODSprite_stru0 *pSpriteLines; void *pDecompressedBytes; }; #pragma pack(pop) /* 15 */ #pragma pack(push, 1) struct LODFile_Sprites: public LOD::File { LODFile_Sprites(); virtual ~LODFile_Sprites(); void DeleteSomeSprites(); void DeleteSpritesRange(int uStartIndex, int uStopIndex); int _461397(); void DeleteSomeOtherSprites(); int LoadSpriteFromFile(LODSprite *pSpriteHeader, const char *pContainer); bool LoadSprites(const char *pFilename); int LoadSprite(const char *pContainerName, unsigned int uPaletteID); void ReleaseLostHardwareSprites(); void ReleaseAll(); void MoveSpritesToVideoMemory(); /*FILE *pFile; unsigned __int8 pLODName[256]; unsigned int isFileOpened; unsigned __int8 *pIOBuffer; unsigned int uIOBufferSize; struct LOD::FileHeader header; struct LOD::Directory *pRoot; unsigned __int8 pContainerName[16]; unsigned int uCurrentIndexDir; unsigned int uLODDataSize; unsigned int uNumSubIndices; struct LOD::Directory *pSubIndices; unsigned int uOffsetToSubIndex; FILE *pOutputFileHandle;*/ struct LODSprite pSpriteHeaders[1500]; unsigned int uNumLoadedSprites; int field_ECA0; int field_ECA4; int field_ECA8; int field_ECAC; struct Sprite *pHardwareSprites; int field_ECB4; }; #pragma pack(pop) /* 17 */ #pragma pack(push, 1) struct LODSprite_stru0 { int dword_0; void *ptr_4; }; #pragma pack(pop) extern LODFile_IconsBitmaps *pEvents_LOD; extern LODFile_IconsBitmaps *pIcons_LOD; extern LODFile_Sprites *pSprites_LOD; extern LODFile_IconsBitmaps *pBitmaps_LOD; extern LODWriteableFile *pNew_LOD; extern LODWriteableFile *pGames_LOD; extern int _6A0CA4_lod_binary_search; // weak extern int _6A0CA8_lod_unused; // weak