User:Viader
Najpierw pozbierajmy informacje znalezione w internecie :)
Contents
Text formats
Format TXT
http://en.wikipedia.org/wiki/Text_file
TXT's use language-specific encoding: - Win-1250/Win-1251/Win-1252/...
Format JSON
http://en.wikipedia.org/wiki/Json
Image formats
Format BMP
http://en.wikipedia.org/wiki/BMP_file_format
Format JPG
https://en.wikipedia.org/wiki/JPEG
Format PNG
http://en.wikipedia.org/wiki/Portable_Network_Graphics
Format TGA
https://en.wikipedia.org/wiki/Truevision_TGA
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
Music formats
Format MP3
http://en.wikipedia.org/wiki/MP3
Format OGG
https://en.wikipedia.org/wiki/Ogg
Format 82M
Renamed WAVE format https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
Video formats
Format AVI
http://en.wikipedia.org/wiki/Audio_Video_Interleave
Format SMK
http://en.wikipedia.org/wiki/Smacker_video
Format BIK
http://en.wikipedia.org/wiki/Bink_Video
Format MJPG //better link needed
http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml#notes
Format MPG
http://pl.wikipedia.org/wiki/Moving_Picture_Experts_Group
Palette formats
FORMAT PAL
http://worms2d.info/Palette_file
Archive formats
Format LOD and PAC
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 VID
struct h3vid {
uint32_t files_count;
struct h3vid_file[files_count]
}
struct h3vid_file {
char name[40];
uint32_t offset;
}
Note: Archive VID doesn't contain information about file's size. For h3vid_file[x]:
Size = h3vid_file[x+1].offset - h3vid_file[x].offset.
If we read last file in archive:
Size = archive_size - h3vid_file[x].offset.
Format SND
struct h3snd {
uint32 files_count;
struct h3vid_file[files_count]
}
struct h3snd_file {
char name[40];
uint32 offset;
uint32 size;
}
Note: For some reason entries in snd have format NAME(null)WAVRUBBISH....
Map formats
Format H3M
Source: http://corexii.com/h3m_description.english.txt (uncomplete) http://svn.code.sf.net/p/vcmi/code/tags/0.8/h3m.txt (complete - Polish)
Campaigns formats
Describe soon...
