User:Viader
From VCMI Project Wiki
Najpierw pozbierajmy informacje znalezione w internecie :)
Format LOD
struct h3lod { uint32_t magic; // always 0x00444f4c, that is, a null-terminated "LOD" string uint32_t type; // 200 for base archives, 500 for expansion pack archives, probably completely arbitrary numbers uint32_t files_count; // obvious uint8_t unknown[80]; // 80 bytes of hell knows what - in most cases that's all zeros, but in H3sprite.lod there's a bunch of seemingly irrelevant numbers here, any information is welcome struct h3lod_file[10000]; // file list } struct h3lod_file { char name[16]; // null-terminated, sometimes null-padded too, sometimes padded with, well, something after the null uint32_t offset; // includes the header size, no preprocessing required uint32_t size_original; // before compression, that is uint32_t type; // what's in the file - probably not used by the game directly, more on that below uint32_t size_compressed; // how many bytes to read, starting from offset - can be zero for stored files, use size_original in such case }
Source:
http://wiki.enleth.com/homm:homm3-lod-archives
Format PCX
struct h3pcx_color_indexed { uint8_t r; uint8_t g; uint8_t b; }; struct h3pcx_indexed { uint32_t bitmap_size; // equals to width*height - 1 byte per pixel uint32_t width; uint32_t height; uint8_t bitmap[width*height]; h3pcx_color_indexed palette[256]; }; struct h3pcx_color_bgr { uint8_t b; uint8_t g; uint8_t r; }; struct h3pcx_bgr { uint32_t bitmap_size; // equals to 3*width*height - 3 bytes per pixel uint32_t width; uint32_t height; h3pcx_color_bgr bitmap[width*height]; };
Source: http://wiki.enleth.com/homm:homm3-pcx-graphics
Format DEF
struct h3def_color_indexed { uint8_t r; uint8_t g; uint8_t b; }; struct h3def_header { uint32_t type; uint32_t width; uint32_t height; uint32_t sequences_count; h3def_color_indexed palette[256]; }; struct h3def_sequence { uint32_t type; uint32_t length; uint32_t unknown1; uint32_t unknown2; char *names[length]; uint32_t offsets[length]; }; struct h3def_frame_header { uint32_t data_size; uint32_t type; uint32_t width; uint32_t height; uint32_t img_width; uint32_t img_height; uint32_t x; uint32_t y; };
Source: http://wiki.enleth.com/homm:homm3-def-animations
FORMAT 82M
struct __attribute__((packed)){ unsigned int riff; // "RIFF" unsigned int size; // size_d + 0x22 unsigned int wave; // "WAVE" unsigned int fmt; // "FMT" unsigned int size_t; // 0x10 unsigned short int format; // 0x01 pcm unsigned short int channels; // 0x01 mono unsigned int samples; // 22050 unsigned int byteper; // 22050 = channels * samples * bitsper / 8 unsigned short int align; // 1 = channels * bitsper / 8 unsigned short int bitsper; // 8 unsigned int data; // "DATA" unsigned int size_d; // } wavetable;
Source: http://rewiki.regengedanken.de/wiki/.82M_%28Heroes_of_Might_and_Magic%29
FORMAT PAL
256x
uint8 r; uint8 g; uint8 b;
Source: http://rewiki.regengedanken.de/wiki/.PAL_%28Heroes_of_Might_and_Magic%29
Format H3M