aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorJohannes Schickel2009-08-25 22:37:34 +0000
committerJohannes Schickel2009-08-25 22:37:34 +0000
commit189b1ec62ff7de17fa2a089b454335f716f29a6b (patch)
tree976b9f27f404b6c166c6607f8c57a11e50b46ba9 /engines/kyra
parentfde3814fbc9063c8ac2c7e8329b78f283d41e1d6 (diff)
downloadscummvm-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.cpp14
-rw-r--r--engines/kyra/kyra_lok.cpp4
-rw-r--r--engines/kyra/resource.cpp4
-rw-r--r--engines/kyra/seqplayer.cpp6
-rw-r--r--engines/kyra/sequences_lok.cpp2
-rw-r--r--engines/kyra/staticres.cpp12
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)