#ifndef DEVIL1TEX_H #define DEVIL1TEX_H #include #include // disable struct padding // to easily impose struct on plain data. #pragma pack(push, 1) struct TexturePack { char id[4]; int32_t batchNumber; uint32_t firstBatchOffset; // uint32_t unknownA; }; struct TextureBatchDescriptor{ int32_t batchIdx; uint32_t hash; // uint32_t texNumber; uint32_t unknownA[8]; // uint32_t textureSize; // uint32_t unknownB[30]; }; struct Texture { // size of array is defined by descriptor // textureSize unsigned char *data; }; struct TextureBatch { // quantity of textures are defined by descriptor // texNumber struct Texture *batch; }; #pragma pack(pop) // -------------------------------------------------------+ // Functions // -------------------------------------------------------+ // Print Texture Pack Header. void printtph(struct TexturePack*); // Print Texture Batch Descriptor. void printtbd(struct TextureBatchDescriptor*); // Get Texture Batch Descriptor. // ** = 'pass by reference' of a pointer to struct bool gettexdescriptor(struct TextureBatchDescriptor**, unsigned int, const char *, unsigned int); // Get Texture Batch. // ** = 'pass by reference' of a pointer to struct bool gettexbatch(struct TextureBatch**, unsigned int, const char*, unsigned int); // Unpack Texture Batch bool unpacktexbatch(struct Texture*, unsigned int, const char*, const unsigned int); // -------------------------------------------------------+ // Retired Functions // These require the client allocate more on the heap. // -------------------------------------------------------+ void gettbd(struct TextureBatchDescriptor**, const char*, unsigned int); unsigned int gettexturebatch( struct TextureBatch**, struct TextureBatchDescriptor**, const char*, unsigned int); void locatetextures(unsigned int*, struct TexturePack*, struct TextureBatchDescriptor**); #endif