1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-15 09:34:18 +02:00

#15 add Sega Saturn images format support (*.BIN)

This commit is contained in:
XProger
2017-12-14 04:17:29 +03:00
parent bc40299f99
commit da3300e989
2 changed files with 45 additions and 8 deletions

View File

@@ -675,20 +675,21 @@ namespace TR {
switch (id) {
case LVL_TR1_TITLE :
CHECK_FILE("TITLEH.png");
CHECK_FILE("DATA/TITLEH.PCX");
CHECK_FILE("DELDATA/AMERTIT.RAW");
CHECK_FILE("TITLEH.png"); // Android
CHECK_FILE("DATA/TITLEH.PCX"); // PC
CHECK_FILE("DELDATA/AMERTIT.RAW"); // PSX
CHECK_FILE("BINDATA/USATIT.BIN"); // SEGA
break;
case LVL_TR2_TITLE :
CHECK_FILE("TITLE.png");
CHECK_FILE("data/TITLE.PCX");
CHECK_FILE("pix/title.pcx");
CHECK_FILE("PIXUS/TITLEUS.RAW"); // TODO: add other languages
CHECK_FILE("TITLE.png"); // Android
CHECK_FILE("data/TITLE.PCX"); // PC
CHECK_FILE("pix/title.pcx"); // PC
CHECK_FILE("PIXUS/TITLEUS.RAW"); // PSX (TODO: add other languages)
break;
case LVL_TR3_TITLE :
CHECK_FILE("pix/TITLEUK.BMP"); // TODO: add other languages
CHECK_FILE("pix/TITLEUK.BMP"); // PC (TODO: add other languages)
break;
default : ;

View File

@@ -609,6 +609,39 @@ struct Texture {
return tex;
}
static Texture* LoadBIN(Stream &stream) {
int width = 352;
int height = 224;
int dw = Core::support.texNPOT ? width : nextPow2(width);
int dh = Core::support.texNPOT ? height : nextPow2(height);
uint8 *data = new uint8[stream.size];
stream.raw(data, stream.size);
uint32 *data32 = new uint32[dw * dh];
uint32 *dst = data32;
uint16 *src = (uint16*)data;
for (int j = 0; j < dh; j++)
for (int i = 0; i < dw; i++) {
if (i < width && j < height) {
uint16 c = swap16(*src++);
*dst++ = ((c & 0x001F) << 3) | ((c & 0x03E0) << 6) | (((c & 0x7C00) << 9)) | 0xFF000000;
} else
*dst++ = 0xFF000000;
}
delete[] data;
Texture *tex = new Texture(dw, dh, Texture::RGBA, false, data32);
tex->origWidth = width;
tex->origHeight = height;
delete[] data32;
return tex;
}
static Texture* Load(Stream &stream) {
uint32 magic;
stream.read(magic);
@@ -622,6 +655,9 @@ struct Texture {
if (stream.name && strstr(stream.name, ".RAW"))
return LoadRNC(stream);
if (stream.name && strstr(stream.name, ".BIN"))
return LoadBIN(stream);
if ((magic & 0xFFFF) == 0x4D42)
return LoadBMP(stream);
return LoadPCX(stream);