diff options
author | Johannes Schickel | 2006-03-14 19:48:08 +0000 |
---|---|---|
committer | Johannes Schickel | 2006-03-14 19:48:08 +0000 |
commit | c12a5a35be96239668f1df6919d83c26587dd5e0 (patch) | |
tree | 085d1564e6ad7bb1c13c7e640d2411d3478437b6 | |
parent | ee6f7626bf8878f187af0410ba81975fa127d1c9 (diff) | |
download | scummvm-rg350-c12a5a35be96239668f1df6919d83c26587dd5e0.tar.gz scummvm-rg350-c12a5a35be96239668f1df6919d83c26587dd5e0.tar.bz2 scummvm-rg350-c12a5a35be96239668f1df6919d83c26587dd5e0.zip |
- Deletes wrong spaces in debugC calls in resource.cpp
- Adds support for amiga .pak files (and a filelist)
svn-id: r21299
-rw-r--r-- | engines/kyra/kyra.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/kyra.h | 3 | ||||
-rw-r--r-- | engines/kyra/resource.cpp | 52 | ||||
-rw-r--r-- | engines/kyra/resource.h | 3 |
4 files changed, 48 insertions, 14 deletions
diff --git a/engines/kyra/kyra.cpp b/engines/kyra/kyra.cpp index 44e288db20..f208d35238 100644 --- a/engines/kyra/kyra.cpp +++ b/engines/kyra/kyra.cpp @@ -84,6 +84,8 @@ static const KyraGameSettings kyra_games[] = { "8909b41596913b3f5deaf3c9f1017b01", "GEMCUT.EMC"}, { "kyra1", "The Legend of Kyrandia", GI_KYRA1, GF_SPANISH | GF_FLOPPY, // floppy 1.8 from clemmy "747861d2a9c643c59fdab570df5b9093", "GEMCUT.EMC"}, + //{ "kyra1", "The Legend of Kyrandia", GI_KYRA1, GF_AMIGA | GF_FLOPPY | GF_ENGLISH, + // "2bd1da653eaefd691e050e4a9eb68a64", "GEMCUT.PAK" }, { "kyra1", "The Legend of Kyrandia", GI_KYRA1, GF_ENGLISH | GF_TALKIE, "fac399fe62f98671e56a005c5e94e39f", "GEMCUT.PAK" }, { "kyra1", "The Legend of Kyrandia", GI_KYRA1, GF_GERMAN | GF_TALKIE, @@ -554,7 +556,7 @@ int KyraEngine::go() { uint32 sz; res_loadResources(); - if (_features & GF_FLOPPY) { + if (_features & GF_FLOPPY && !(_features & GF_AMIGA)) { _screen->loadFont(Screen::FID_6_FNT, _res->fileData("6.FNT", &sz)); } _screen->loadFont(Screen::FID_8_FNT, _res->fileData("8FAT.FNT", &sz)); diff --git a/engines/kyra/kyra.h b/engines/kyra/kyra.h index d89dbc8c97..8a6cb33014 100644 --- a/engines/kyra/kyra.h +++ b/engines/kyra/kyra.h @@ -56,7 +56,8 @@ enum { GF_GERMAN = 1 << 6, GF_SPANISH = 1 << 7, // other languages here - GF_LNGUNK = 1 << 16 + GF_LNGUNK = 1 << 16, + GF_AMIGA = 1 << 17 // this is no special version flag yet! }; enum { diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp index ff6349a930..085ac2f2e6 100644 --- a/engines/kyra/resource.cpp +++ b/engines/kyra/resource.cpp @@ -46,6 +46,25 @@ Resource::Resource(KyraEngine *engine) { "WSA6.PAK", 0 }; + /*static const char *kyra1AmigaFilelist[] = { + "alchemy.pak", "chasm.pak", "finale1.pak", "gen_cav.pak", "mix.pak", "spring.pak", + "algae.pak", "cliff.pak", "finale2.pak", "genhall.pak", "mooncav.pak", "square.pak", + "altar.pak", "darms.pak", "fnorth.pak", "glade.pak", "ncliffb.pak", "startup.pak", + "arch.pak", "dead.pak", "foresta.pak", "grave.pak", "ncliff.pak", "stump.pak", + "balcony.pak", "dnstair.pak", "forestb.pak", "grthall.pak", "nwclifb.pak", "temple.pak", + "belroom.pak", "dragon.pak", "forestc.pak", "healer.pak", "nwcliff.pak", "trunk.pak", + "bonkbg.pak", "drgnwsa.pak", "fountn.pak", "herman.pak", "oaks.pak", "upstair.pak", + "bridge.pak", "edgeb.pak", "foyer.pak", "intro1.pak", "plateau.pak", "well.pak", + "brins.pak", "edge.pak", "frstawsa.pak", "kitchen.pak", "pltcave.pak", "willow.pak", + "broken.pak", "emcav.pak", "fsouthb.pak", "kyragem.pak", "potion.pak", "wise.pak", + "burn.pak", "enter.pak", "fsouth.pak", "lagoon.pak", "potwsa.pak", "xedgeb.pak", + "castle.pak", "extheal.pak", "fwststh.pak", "landing.pak", "ruby.pak", "xedgec.pak", + "catacom.pak", "extpot.pak", "gatecv.pak", "lava.pak", "sickwil.pak", "xedge.pak", + "caveb.pak", "extspel.pak", "gemcut.pak", "lephole.pak", "song.pak", "zrock.pak", + "cave.pak", "falls.pak", "gem.pak", "library.pak", "sorrow.pak", + "cgate.pak", "fgowest.pak", "gencavb.pak", "misc.pak", "spell.pak", 0 + };*/ + static const char *kyra1CDFilelist[] = { "ALTAR.APK", "BELROOM.APK", "BONKBG.APK", "BROKEN.APK", "CASTLE.APK", "CAVE.APK", "CGATE.APK", "DEAD.APK", "DNSTAIR.APK", "DRAGON1.APK", "DRAGON2.APK", "EXTPOT.APK", "FORESTA.APK", "FORESTB.APK", @@ -74,7 +93,9 @@ Resource::Resource(KyraEngine *engine) { const char **usedFilelist = 0; - if (_engine->features() & GF_FLOPPY) + /*if (_engine->features() & GF_AMIGA) + usedFilelist = kyra1AmigaFilelist; + else*/ if (_engine->features() & GF_FLOPPY) usedFilelist = kyra1Filelist; else if (_engine->features() & GF_TALKIE) usedFilelist = kyra1CDFilelist; @@ -83,15 +104,15 @@ Resource::Resource(KyraEngine *engine) { for (uint32 tmp = 0; usedFilelist[tmp]; ++tmp) { // prefetch file - PAKFile *file = new PAKFile(usedFilelist[tmp]); + PAKFile *file = new PAKFile(usedFilelist[tmp], (_engine->features() & GF_AMIGA) != 0); assert(file); PakFileEntry newPak; newPak._file = file; strncpy(newPak._filename, usedFilelist[tmp], 32); - if (file->isOpen() && file->isValid()) + if (file->isOpen() && file->isValid()) { _pakfiles.push_back(newPak); - else { + } else { delete file; debug(3, "couldn't load file '%s' correctly", usedFilelist[tmp]); } @@ -203,8 +224,9 @@ bool Resource::fileHandle(const char *file, uint32 *size, Common::File &filehand /////////////////////////////////////////// // Pak file manager #define PAKFile_Iterate Common::List<PakChunk*>::iterator start=_files.begin();start != _files.end(); ++start -PAKFile::PAKFile(const Common::String& file) { +PAKFile::PAKFile(const Common::String& file, bool amiga) { _filename = 0; + _amiga = amiga; Common::File pakfile; uint8 *buffer = 0; @@ -225,7 +247,11 @@ PAKFile::PAKFile(const Common::String& file) { // works with the file uint32 pos = 0, startoffset = 0, endoffset = 0; - startoffset = READ_LE_UINT32(buffer + pos); + if (!_amiga) { + startoffset = READ_LE_UINT32(buffer + pos); + } else { + startoffset = READ_BE_UINT32(buffer + pos); + } pos += 4; while (pos < filesize) { @@ -240,7 +266,11 @@ PAKFile::PAKFile(const Common::String& file) { if (!(*chunk->_name)) break; - endoffset = READ_LE_UINT32(buffer + pos); + if (!_amiga) { + endoffset = READ_LE_UINT32(buffer + pos); + } else { + endoffset = READ_BE_UINT32(buffer + pos); + } pos += 4; if (endoffset == 0) { @@ -321,19 +351,19 @@ uint32 PAKFile::getFileSize(const char* file) { } void KyraEngine::loadPalette(const char *filename, uint8 *palData) { - debugC( 9, kDebugLevelMain, "KyraEngine::loadPalette('%s' %p)", filename, (void *)palData); + debugC(9, kDebugLevelMain, "KyraEngine::loadPalette('%s' %p)", filename, (void *)palData); uint32 fileSize = 0; uint8 *srcData = _res->fileData(filename, &fileSize); if (palData && fileSize) { - debugC( 9, kDebugLevelMain,"Loading a palette of size %i from '%s'", fileSize, filename); + debugC(9, kDebugLevelMain,"Loading a palette of size %i from '%s'", fileSize, filename); memcpy(palData, srcData, fileSize); } delete [] srcData; } void KyraEngine::loadBitmap(const char *filename, int tempPage, int dstPage, uint8 *palData) { - debugC( 9, kDebugLevelMain,"KyraEngine::copyBitmap('%s', %d, %d, %p)", filename, tempPage, dstPage, (void *)palData); + debug("KyraEngine::loadBitmap('%s', %d, %d, %p)", filename, tempPage, dstPage, (void *)palData); uint32 fileSize; uint8 *srcData = _res->fileData(filename, &fileSize); assert(srcData); @@ -341,7 +371,7 @@ void KyraEngine::loadBitmap(const char *filename, int tempPage, int dstPage, uin uint32 imgSize = READ_LE_UINT32(srcData + 4); uint16 palSize = READ_LE_UINT16(srcData + 8); if (palData && palSize) { - debugC( 9, kDebugLevelMain,"Loading a palette of size %i from %s", palSize, filename); + debugC(9, kDebugLevelMain,"Loading a palette of size %i from %s", palSize, filename); memcpy(palData, srcData + 10, palSize); } uint8 *srcPtr = srcData + 10 + palSize; diff --git a/engines/kyra/resource.h b/engines/kyra/resource.h index e4911d34e3..6319e31477 100644 --- a/engines/kyra/resource.h +++ b/engines/kyra/resource.h @@ -43,7 +43,7 @@ class PAKFile { public: - PAKFile(const Common::String &file); + PAKFile(const Common::String &file, bool amiga = false); ~PAKFile(); uint8* getFile(const char *file); @@ -56,6 +56,7 @@ public: private: bool _open; + bool _amiga; char *_filename; Common::List<PakChunk*> _files; // the entries }; |