From 1d086550a74b5e01a5c6a3ec57c58f93fd93041d Mon Sep 17 00:00:00 2001 From: Florian Kagerer Date: Fri, 18 Apr 2008 19:11:58 +0000 Subject: - complete support for the playable HOF demo svn-id: r31560 --- engines/kyra/kyra_v2.h | 1 + engines/kyra/resource.cpp | 24 +++++++++++++----------- engines/kyra/resource.h | 1 + engines/kyra/script_v2.cpp | 36 +++++++++++++++++++++++++++++++++++- engines/kyra/staticres.cpp | 3 ++- 5 files changed, 52 insertions(+), 13 deletions(-) (limited to 'engines/kyra') 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 } }; -- cgit v1.2.3