diff options
author | Johannes Schickel | 2009-08-25 22:37:34 +0000 |
---|---|---|
committer | Johannes Schickel | 2009-08-25 22:37:34 +0000 |
commit | 189b1ec62ff7de17fa2a089b454335f716f29a6b (patch) | |
tree | 976b9f27f404b6c166c6607f8c57a11e50b46ba9 /engines/kyra | |
parent | fde3814fbc9063c8ac2c7e8329b78f283d41e1d6 (diff) | |
download | scummvm-rg350-189b1ec62ff7de17fa2a089b454335f716f29a6b.tar.gz scummvm-rg350-189b1ec62ff7de17fa2a089b454335f716f29a6b.tar.bz2 scummvm-rg350-189b1ec62ff7de17fa2a089b454335f716f29a6b.zip |
Implement support for the Kyrandia 1 CD demo.
svn-id: r43737
Diffstat (limited to 'engines/kyra')
-rw-r--r-- | engines/kyra/detection.cpp | 14 | ||||
-rw-r--r-- | engines/kyra/kyra_lok.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/resource.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/seqplayer.cpp | 6 | ||||
-rw-r--r-- | engines/kyra/sequences_lok.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/staticres.cpp | 12 |
6 files changed, 33 insertions, 9 deletions
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp index 3199a043e7..11043f1e3f 100644 --- a/engines/kyra/detection.cpp +++ b/engines/kyra/detection.cpp @@ -53,6 +53,7 @@ namespace { #define KYRA1_TOWNS_SJIS_FLAGS FLAGS(false, true, false, true, false, false, false, Kyra::GI_KYRA1) #define KYRA1_CD_FLAGS FLAGS(false, true, true, false, false, false, false, Kyra::GI_KYRA1) #define KYRA1_DEMO_FLAGS FLAGS(true, false, false, false, false, false, false, Kyra::GI_KYRA1) +#define KYRA1_DEMO_CD_FLAGS FLAGS(true, true, true, false, false, false, false, Kyra::GI_KYRA1) #define KYRA2_FLOPPY_FLAGS FLAGS(false, false, false, false, false, false, false, Kyra::GI_KYRA2) #define KYRA2_FLOPPY_CMP_FLAGS FLAGS(false, false, false, false, false, false, true, Kyra::GI_KYRA2) @@ -394,6 +395,19 @@ const KYRAGameDescription adGameDescs[] = { KYRA1_DEMO_FLAGS }, + { // Special Kyrandia 1 CD demo + { + "kyra1", + "Demo/CD", + AD_ENTRY1("INTRO.VRM", "e3045fb69b8c29db84b8fda3ccbdac54"), + Common::EN_ANY, + Common::kPlatformPC, + ADGF_DEMO | ADGF_CD, + Common::GUIO_NONE + }, + KYRA1_DEMO_CD_FLAGS + }, + { // Floppy version { "kyra2", diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp index fc19b2fb65..46c189470c 100644 --- a/engines/kyra/kyra_lok.cpp +++ b/engines/kyra/kyra_lok.cpp @@ -297,7 +297,7 @@ Common::Error KyraEngine_LoK::go() { _abortIntroFlag = false; - if (_flags.isDemo) { + if (_flags.isDemo && !_flags.isTalkie) { _seqPlayerFlag = true; seq_demo(); _seqPlayerFlag = false; @@ -308,7 +308,7 @@ Common::Error KyraEngine_LoK::go() { setGameFlag(0xEF); _seqPlayerFlag = true; seq_intro(); - if (shouldQuit()) + if (shouldQuit() || _flags.isDemo) return Common::kNoError; if (_skipIntroFlag && _abortIntroFlag) resetGameFlag(0xEF); diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp index bd8b62533f..112db7afdf 100644 --- a/engines/kyra/resource.cpp +++ b/engines/kyra/resource.cpp @@ -63,10 +63,10 @@ bool Resource::reset() { if (_vm->game() == GI_KYRA1) { // We only need kyra.dat for the demo. - if (_vm->gameFlags().isDemo) + if (_vm->gameFlags().isDemo && !_vm->gameFlags().isTalkie) return true; - if (_vm->gameFlags().isTalkie) { + if (!_vm->gameFlags().isDemo && _vm->gameFlags().isTalkie) { // List of files in the talkie version, which can never be unload. static const char * const list[] = { "ADL.PAK", "CHAPTER1.VRM", "COL.PAK", "FINALE.PAK", "INTRO1.PAK", "INTRO2.PAK", diff --git a/engines/kyra/seqplayer.cpp b/engines/kyra/seqplayer.cpp index 4086d06c00..3536d2db06 100644 --- a/engines/kyra/seqplayer.cpp +++ b/engines/kyra/seqplayer.cpp @@ -432,7 +432,7 @@ void SeqPlayer::s1_playTrack() { } void SeqPlayer::s1_allocTempBuffer() { - if (_vm->gameFlags().isDemo) { + if (_vm->gameFlags().isDemo && !_vm->gameFlags().isTalkie) { _seqQuitFlag = true; } else { if (!_specialBuffer && !_copyViewOffs) { @@ -637,10 +637,10 @@ bool SeqPlayer::playSequence(const uint8 *seqData, bool skipSeq) { uint8 seqCode = *_seqData++; if (seqCode < numCommands) { SeqProc currentProc = commands[seqCode].proc; - debugC(5, kDebugLevelSequence, "seqCode = %d (%s)", seqCode, commands[seqCode].desc); + debugC(5, kDebugLevelSequence, "0x%.4X seqCode = %d (%s)", (uint16)(_seqData - 1 - seqData), seqCode, commands[seqCode].desc); (this->*currentProc)(); } else { - error("Invalid sequence opcode %d", seqCode); + error("Invalid sequence opcode %d called from 0x%.04X", seqCode, (uint16)(_seqData - 1 - seqData)); } _screen->updateScreen(); diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp index 16c9b75f3a..9f149fdd87 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -105,7 +105,7 @@ void KyraEngine_LoK::seq_intro() { delete in; _skipIntroFlag = true; } else { - _skipIntroFlag = false; + _skipIntroFlag = !_flags.isDemo; } _seq->setCopyViewOffs(true); diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index be73df47f7..95f7c4ca2a 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -44,7 +44,7 @@ namespace Kyra { -#define RESFILE_VERSION 50 +#define RESFILE_VERSION 51 namespace { bool checkKyraDat(Common::SeekableReadStream *file) { @@ -92,6 +92,10 @@ enum { #define LANGUAGE_FLAGS (GF_ENGLISH | GF_FRENCH | GF_GERMAN | GF_SPANISH | GF_ITALIAN | GF_JAPANESE | GF_LNGUNK) uint32 createFeatures(const GameFlags &flags) { + // special case for kyrandia 1 CD demo + if (flags.gameID == GI_KYRA1 && flags.isTalkie && flags.isDemo) + return GF_TALKIE | GF_DEMO; + if (flags.isTalkie) return GF_TALKIE; if (flags.isDemo) @@ -1319,6 +1323,12 @@ const char *StaticResource::getFilename(const char *name) { else if (_vm->gameFlags().gameID == GI_LOL) filename += ".LOL"; + // Special case for Kyrandia 1 CD demo + if (_vm->gameFlags().gameID == GI_KYRA1 && _vm->gameFlags().isTalkie && _vm->gameFlags().isDemo) { + filename += ".CD.DEM"; + return filename.c_str(); + } + if (_vm->gameFlags().isTalkie && _vm->gameFlags().gameID != GI_KYRA3) filename += ".CD"; else if (_vm->gameFlags().isDemo) |