aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/kyra/kyra.cpp4
-rw-r--r--engines/kyra/kyra.h3
-rw-r--r--engines/kyra/resource.cpp52
-rw-r--r--engines/kyra/resource.h3
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
};