diff options
Diffstat (limited to 'engines/cine/bg.cpp')
-rw-r--r-- | engines/cine/bg.cpp | 96 |
1 files changed, 33 insertions, 63 deletions
diff --git a/engines/cine/bg.cpp b/engines/cine/bg.cpp index b6c07a05cb..c5b7fb4e3d 100644 --- a/engines/cine/bg.cpp +++ b/engines/cine/bg.cpp @@ -37,7 +37,7 @@ uint16 bgVar0; byte *additionalBgTable[9]; byte currentAdditionalBgIdx = 0, currentAdditionalBgIdx2 = 0; -byte loadCt(const char *ctName) { +byte loadCtFW(const char *ctName) { uint16 header[32]; byte *ptr, *dataPtr; @@ -46,79 +46,62 @@ byte loadCt(const char *ctName) { ptr = dataPtr = readBundleFile(findFileInBundle(ctName)); - if (g_cine->getGameType() == Cine::GType_OS) { - uint16 bpp = READ_BE_UINT16(ptr); ptr += 2; - if (bpp == 8) { - ctColorMode = 1; - memcpy(newPalette, ptr, 256 * 3); - ptr += 3 * 256; - memcpy(page3Raw, ptr, 320 * 200); - } else { - ctColorMode = 0; - for (int i = 0; i < 16; i++) { - tempPalette[i] = READ_BE_UINT16(ptr); - ptr += 2; - } - - gfxResetRawPage(page3Raw); - gfxConvertSpriteToRaw(page3Raw, ptr, 160, 200); - } - } else { - loadRelatedPalette(ctName); + loadRelatedPalette(ctName); - assert(strstr(ctName, ".NEO")); + assert(strstr(ctName, ".NEO")); - Common::MemoryReadStream readS(ptr, 32); - - for (int i = 0; i < 16; i++) { - header[i] = readS.readUint16BE(); - } + Common::MemoryReadStream readS(ptr, 32); - gfxConvertSpriteToRaw(page3Raw, ptr + 0x80, 160, 200); + for (int i = 0; i < 16; i++) { + header[i] = readS.readUint16BE(); } + gfxConvertSpriteToRaw(page3Raw, ptr + 0x80, 160, 200); + free(dataPtr); return 0; } -void loadBgHigh(const char *currentPtr) { - memcpy(newPalette, currentPtr, 256 * 3); - currentPtr += 256 * 3; +byte loadCtOS(const char *ctName) { + byte *ptr, *dataPtr; - memcpy(page2Raw, currentPtr, 320 * 200); + if (currentCtName != ctName) + strcpy(currentCtName, ctName); + + ptr = dataPtr = readBundleFile(findFileInBundle(ctName)); - newColorMode = 2; - bgColorMode = 1; + uint16 bpp = READ_BE_UINT16(ptr); + ptr += 2; + + if (bpp == 8) { + memcpy(page3Raw, ptr + 256 * 3, 320 * 200); + renderer->loadCt256(ptr, ctName); + } else { + gfxConvertSpriteToRaw(page3Raw, ptr + 32, 160, 200); + renderer->loadCt16(ptr, ctName); + } + free(dataPtr); + return 0; } byte loadBg(const char *bgName) { byte *ptr, *dataPtr; - if (currentBgName[0] != bgName) - strcpy(currentBgName[0], bgName); - byte fileIdx = findFileInBundle(bgName); ptr = dataPtr = readBundleFile(fileIdx); - uint16 bpp = READ_BE_UINT16(ptr); ptr += 2; + uint16 bpp = READ_BE_UINT16(ptr); + ptr += 2; + if (bpp == 8) { - loadBgHigh((const char *)ptr); + renderer->loadBg256(ptr, bgName); } else { - newColorMode = 1; - bgColorMode = 0; - - for (int i = 0; i < 16; i++) { - tempPalette[i] = READ_BE_UINT16(ptr); - ptr += 2; - } - if (g_cine->getGameType() == Cine::GType_FW) { loadRelatedPalette(bgName); } - gfxResetRawPage(page2Raw); - gfxConvertSpriteToRaw(page2Raw, ptr, 160, 200); + renderer->loadBg16(ptr, bgName); } free(dataPtr); return 0; @@ -127,28 +110,15 @@ byte loadBg(const char *bgName) { void addBackground(const char *bgName, uint16 bgIdx) { byte *ptr, *dataPtr; - strcpy(currentBgName[bgIdx], bgName); - byte fileIdx = findFileInBundle(bgName); ptr = dataPtr = readBundleFile(fileIdx); - additionalBgTable[bgIdx] = (byte *) malloc(320 * 200); - uint16 bpp = READ_BE_UINT16(ptr); ptr += 2; if (bpp == 8) { - bgColorMode = 1; - memcpy(newPalette, ptr, 256 * 3); - ptr += 3 * 256; - memcpy(additionalBgTable[bgIdx], ptr, 320 * 200); + renderer->loadBg256(ptr, bgName, bgIdx); } else { - bgColorMode = 0; - for (int i = 0; i < 16; i++) { - tempPalette[i] = READ_BE_UINT16(ptr); - ptr += 2; - } - - gfxConvertSpriteToRaw(additionalBgTable[bgIdx], ptr, 160, 200); + renderer->loadBg16(ptr, bgName, bgIdx); } free(dataPtr); } |