diff --git a/src/gameflow.h b/src/gameflow.h index 767f1a4..62df412 100644 --- a/src/gameflow.h +++ b/src/gameflow.h @@ -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 : ; diff --git a/src/texture.h b/src/texture.h index 3a11d7e..db34efc 100644 --- a/src/texture.h +++ b/src/texture.h @@ -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);