aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/scene_eob.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/scene_eob.cpp')
-rw-r--r--engines/kyra/scene_eob.cpp76
1 files changed, 50 insertions, 26 deletions
diff --git a/engines/kyra/scene_eob.cpp b/engines/kyra/scene_eob.cpp
index 982191b359..3d615e966a 100644
--- a/engines/kyra/scene_eob.cpp
+++ b/engines/kyra/scene_eob.cpp
@@ -38,31 +38,7 @@ void EoBCoreEngine::loadLevel(int level, int sub) {
_currentSub = sub;
uint32 end = _system->getMillis() + 500;
- Common::String file;
- Common::SeekableReadStream *s = 0;
- static const char *suffix[] = { "INF", "DRO", "ELO", 0 };
-
- for (const char *const *sf = suffix; *sf && !s; sf++) {
- file = Common::String::format("LEVEL%d.%s", level, *sf);
- s = _res->createReadStream(file);
- }
-
- if (!s)
- error("Failed to load level file LEVEL%d.INF/DRO/ELO", level);
-
- if (s->readUint16LE() + 2 == s->size()) {
- if (s->readUint16LE() == 4) {
- delete s;
- s = 0;
- _screen->loadBitmap(file.c_str(), 5, 5, 0);
- }
- }
-
- if (s) {
- s->seek(0);
- _screen->loadFileDataToPage(s, 5, 15000);
- delete s;
- }
+ readLevelFileData(level);
Common::String gfxFile;
// Work around for issue with corrupt (incomplete) monster property data
@@ -121,6 +97,34 @@ void EoBCoreEngine::loadLevel(int level, int sub) {
_screen->setCurPage(0);
}
+void EoBCoreEngine::readLevelFileData(int level) {
+ Common::String file;
+ Common::SeekableReadStream *s = 0;
+ static const char *suffix[] = { "INF", "DRO", "ELO", 0 };
+
+ for (const char *const *sf = suffix; *sf && !s; sf++) {
+ file = Common::String::format("LEVEL%d.%s", level, *sf);
+ s = _res->createReadStream(file);
+ }
+
+ if (!s)
+ error("Failed to load level file LEVEL%d.INF/DRO/ELO", level);
+
+ if (s->readUint16LE() + 2 == s->size()) {
+ if (s->readUint16LE() == 4) {
+ delete s;
+ s = 0;
+ _screen->loadBitmap(file.c_str(), 5, 5, 0);
+ }
+ }
+
+ if (s) {
+ s->seek(0);
+ _screen->loadFileDataToPage(s, 5, 15000);
+ delete s;
+ }
+}
+
Common::String EoBCoreEngine::initLevelData(int sub) {
const uint8 *data = _screen->getCPagePtr(5) + 2;
const uint8 *pos = data;
@@ -300,9 +304,29 @@ const uint8 *EoBCoreEngine::getBlockFileData(int) {
return _screen->getCPagePtr(14);
}
+Common::String EoBCoreEngine::getBlockFileName(int levelIndex, int sub) {
+ readLevelFileData(levelIndex);
+ const uint8 *data = _screen->getCPagePtr(5) + 2;
+ const uint8 *pos = data;
+
+ for (int i = 0; i < sub; i++)
+ pos = data + READ_LE_UINT16(pos);
+
+ pos += 2;
+
+ if (*pos++ == 0xEC || _flags.gameID == GI_EOB1) {
+ if (_flags.gameID == GI_EOB1)
+ pos -= 3;
+
+ return Common::String((const char *)pos);
+ }
+
+ return Common::String();
+}
+
const uint8 *EoBCoreEngine::getBlockFileData(const char *mazFile) {
_curBlockFile = mazFile;
- return getBlockFileData(0);
+ return getBlockFileData();
}
void EoBCoreEngine::loadDecorations(const char *cpsFile, const char *decFile) {