aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/engine/scene_eob.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/engine/scene_eob.cpp')
-rw-r--r--engines/kyra/engine/scene_eob.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/engines/kyra/engine/scene_eob.cpp b/engines/kyra/engine/scene_eob.cpp
index 539d81da6c..0bd4ca9072 100644
--- a/engines/kyra/engine/scene_eob.cpp
+++ b/engines/kyra/engine/scene_eob.cpp
@@ -30,7 +30,6 @@
#include "common/system.h"
-
namespace Kyra {
void EoBCoreEngine::loadLevel(int level, int sub) {
@@ -298,14 +297,15 @@ void EoBCoreEngine::addLevelItems() {
}
}
-void EoBCoreEngine::loadVcnData(const char *file, const uint8 *cgaMapping) {
+void EoBCoreEngine::loadVcnData(const char *file, const uint8 *cgaMapping) {
if (file)
strcpy(_lastBlockDataFile, file);
+ delete[] _vcnBlocks;
+ uint32 vcnSize = 0;
+
if (_flags.platform == Common::kPlatformFMTowns) {
- uint32 size;
- delete[] _vcnBlocks;
- _vcnBlocks = _res->fileData(Common::String::format("%s.VCC", _lastBlockDataFile).c_str(), &size);
+ _vcnBlocks = _res->fileData(Common::String::format("%s.VCC", _lastBlockDataFile).c_str(), &vcnSize);
return;
}
@@ -314,22 +314,24 @@ void EoBCoreEngine::loadVcnData(const char *file, const uint8 *cgaMapping) {
if (_flags.platform == Common::kPlatformAmiga) {
Common::SeekableReadStream *in = _res->createReadStream(fn);
- uint16 size = in->readUint16LE() << 5;
- in->seek(0, SEEK_SET);
- _screen->loadFileDataToPage(in, 3, size + 34);
+ vcnSize = in->readUint16LE() * (_vcnSrcBitsPerPixel << 3);
+ _vcnBlocks = new uint8[vcnSize];
+ _screen->getPalette(0).loadAmigaPalette(*in, 1, 5);
+ in->seek(22, SEEK_CUR);
+ in->read(_vcnBlocks, vcnSize);
delete in;
- } else {
- _screen->loadBitmap(fn.c_str(), 3, 3, 0, true);
+ return;
}
+ _screen->loadBitmap(fn.c_str(), 3, 3, 0, true);
+
const uint8 *pos = _screen->getCPagePtr(3);
- uint16 vcnSize = READ_LE_UINT16(pos) << 5;
+ vcnSize = READ_LE_UINT16(pos) * (_vcnSrcBitsPerPixel << 3);
pos += 2;
const uint8 *colMap = pos;
pos += 32;
- delete[] _vcnBlocks;
_vcnBlocks = new uint8[vcnSize];
if (_configRenderMode == Common::kRenderCGA) {
@@ -355,6 +357,7 @@ void EoBCoreEngine::loadVcnData(const char *file, const uint8 *cgaMapping) {
} else {
if (!(_flags.gameID == GI_EOB1 && _configRenderMode == Common::kRenderEGA))
memcpy(_vcnColTable, colMap, 32);
+
memcpy(_vcnBlocks, pos, vcnSize);
}
}