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:
@@ -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 : ;
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user