aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorFlorian Kagerer2008-04-18 19:11:58 +0000
committerFlorian Kagerer2008-04-18 19:11:58 +0000
commit1d086550a74b5e01a5c6a3ec57c58f93fd93041d (patch)
tree10d73962f67c69f45d9342812ab195e356f38310 /engines/kyra
parentba90659705cec3894615b77b1dcf3f3fe768c8bd (diff)
downloadscummvm-rg350-1d086550a74b5e01a5c6a3ec57c58f93fd93041d.tar.gz
scummvm-rg350-1d086550a74b5e01a5c6a3ec57c58f93fd93041d.tar.bz2
scummvm-rg350-1d086550a74b5e01a5c6a3ec57c58f93fd93041d.zip
- complete support for the playable HOF demo
svn-id: r31560
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/kyra_v2.h1
-rw-r--r--engines/kyra/resource.cpp24
-rw-r--r--engines/kyra/resource.h1
-rw-r--r--engines/kyra/script_v2.cpp36
-rw-r--r--engines/kyra/staticres.cpp3
5 files changed, 52 insertions, 13 deletions
diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h
index c0cdaaebbb..371c76af3c 100644
--- a/engines/kyra/kyra_v2.h
+++ b/engines/kyra/kyra_v2.h
@@ -1088,6 +1088,7 @@ protected:
int o2_isVoicePlaying(ScriptState *script);
int o2_stopVoicePlaying(ScriptState *script);
int o2_getGameLanguage(ScriptState *script);
+ int o2_demoFinale(ScriptState *script);
int o2_dummy(ScriptState *script);
// opcodes temporary
diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp
index 8b07b50a6c..e76d553372 100644
--- a/engines/kyra/resource.cpp
+++ b/engines/kyra/resource.cpp
@@ -306,22 +306,24 @@ Common::SeekableReadStream *Resource::getFileStream(const Common::String &file)
if (iter == _map.end())
return 0;
- if (!iter->_value.parent.empty()) {
- Common::SeekableReadStream *parent = getFileStream(iter->_value.parent);
- assert(parent);
+ Common::File *stream = new Common::File();
+ if (stream->open(file)) {
+ return stream;
+ } else {
+ delete stream;
+ if (!iter->_value.parent.empty()) {
+ Common::SeekableReadStream *parent = getFileStream(iter->_value.parent);
+ assert(parent);
- ResFileMap::const_iterator parentIter = _map.find(iter->_value.parent);
- const ResArchiveLoader *loader = getLoader(parentIter->_value.type);
- assert(loader);
+ ResFileMap::const_iterator parentIter = _map.find(iter->_value.parent);
+ const ResArchiveLoader *loader = getLoader(parentIter->_value.type);
+ assert(loader);
- return loader->loadFileFromArchive(file, parent, iter->_value);
- } else {
- Common::File *stream = new Common::File();
- if (!stream->open(file)) {
+ return loader->loadFileFromArchive(file, parent, iter->_value);
+ } else {
warning("Couldn't open file '%s'", file.c_str());
return 0;
}
- return stream;
}
return 0;
diff --git a/engines/kyra/resource.h b/engines/kyra/resource.h
index e8f5484a74..7a04d1317d 100644
--- a/engines/kyra/resource.h
+++ b/engines/kyra/resource.h
@@ -226,6 +226,7 @@ enum kKyraResources {
k2IngameTalkObjIndex,
k2IngameTimJpStrings,
k2IngameShapeAnimData,
+ k2IngameTlkDemoStrings,
kMaxResIDs
};
diff --git a/engines/kyra/script_v2.cpp b/engines/kyra/script_v2.cpp
index 10023694e2..00a66ec238 100644
--- a/engines/kyra/script_v2.cpp
+++ b/engines/kyra/script_v2.cpp
@@ -1748,6 +1748,40 @@ int KyraEngine_v2::o2_getGameLanguage(ScriptState *script) {
return _lang;
}
+int KyraEngine_v2::o2_demoFinale(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_demoFinale(%p) ()", (const void *)script);
+ if (!_flags.isDemo)
+ return 0;
+
+ int tmpSize;
+ const char *const *strings = _staticres->loadStrings(k2IngameTlkDemoStrings, tmpSize);
+ assert(strings);
+
+ _screen->clearPage(0);
+ _screen->loadPalette("THANKS.COL", _screen->_currentPalette);
+ _screen->loadBitmap("THANKS.CPS", 3, 3, 0);
+ _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
+
+ _screen->_curPage = 0;
+ _screen->setFont(Screen::FID_6_FNT);
+ int y = _lang == 1 ? 70 : 65;
+ for (int i = 0; i < 6; i++)
+ _text->printText(strings[i], _text->getCenterStringX(strings[i], 1, 319), y + i * 10, 255, 207, 0);
+
+ _screen->setScreenPalette(_screen->_currentPalette);
+ _screen->updateScreen();
+
+ _eventList.clear();
+ while (!skipFlag())
+ delay(10);
+
+ _sound->beginFadeOut();
+ _screen->fadeToBlack();
+
+ _runFlag = 0;
+ return 0;
+}
+
int KyraEngine_v2::o2_dummy(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o2_dummy(%p) ()", (const void *)script);
return 0;
@@ -2023,7 +2057,7 @@ void KyraEngine_v2::setupOpcodeTable() {
// 0xac
Opcode(o2_stopVoicePlaying),
Opcode(o2_getGameLanguage),
- Opcode(o2_dummy),
+ Opcode(o2_demoFinale),
Opcode(o2_dummy),
};
diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp
index d331241ee0..caafa8a8d1 100644
--- a/engines/kyra/staticres.cpp
+++ b/engines/kyra/staticres.cpp
@@ -39,7 +39,7 @@
namespace Kyra {
-#define RESFILE_VERSION 23
+#define RESFILE_VERSION 24
bool StaticResource::checkKyraDat() {
Common::File kyraDat;
@@ -257,6 +257,7 @@ bool StaticResource::init() {
{ k2IngameTalkObjIndex, kRawData, "I_TALKOBJECTS.MAP" },
{ k2IngameTimJpStrings, kStringList, "I_TIMJPSTR.TXT" },
{ k2IngameShapeAnimData, k2ShpAnimDataV2, "I_INVANIM.SHP" },
+ { k2IngameTlkDemoStrings, kLanguageList, "I_TLKDEMO.TXT." },
{ 0, 0, 0 }
};