diff options
author | Johannes Schickel | 2008-01-27 02:05:37 +0000 |
---|---|---|
committer | Johannes Schickel | 2008-01-27 02:05:37 +0000 |
commit | 33a90c1e009cf93e9f135817b8fdb12706811972 (patch) | |
tree | d244fae31db60daab36f68ec679e4ceab2fdbf4c /engines/kyra/kyra_v2.cpp | |
parent | 223f22c7730fe857cf6587e4c1ea6def6e458096 (diff) | |
download | scummvm-rg350-33a90c1e009cf93e9f135817b8fdb12706811972.tar.gz scummvm-rg350-33a90c1e009cf93e9f135817b8fdb12706811972.tar.bz2 scummvm-rg350-33a90c1e009cf93e9f135817b8fdb12706811972.zip |
Commit patch #1869752 "KYRA: HoF startup patch for towns and floppy". (Slightly modified)
svn-id: r30645
Diffstat (limited to 'engines/kyra/kyra_v2.cpp')
-rw-r--r-- | engines/kyra/kyra_v2.cpp | 91 |
1 files changed, 63 insertions, 28 deletions
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp index 5577079f01..dedf81f979 100644 --- a/engines/kyra/kyra_v2.cpp +++ b/engines/kyra/kyra_v2.cpp @@ -67,6 +67,7 @@ KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags) : KyraEngi _newChapterFile = 1; _oldTalkFile = -1; _currentTalkFile = 0; + _lastSfxTrack = -1; _handItemSet = -1; _lastProcessedSceneScript = 0; _specialSceneScriptRunFlag = false; @@ -212,18 +213,20 @@ void KyraEngine_v2::startup() { _screen->setMouseCursor(0, 0, getShapePtr(0)); _screenBuffer = new uint8[64000]; - - loadCCodeBuffer("C_CODE.XXX"); - loadOptionsBuffer("OPTIONS.XXX"); - loadChapterBuffer(_newChapterFile); - _unkBuf200kByte = new uint8[200000]; - showMessageFromCCode(265, 150, 0); + loadChapterBuffer(_newChapterFile); - openTalkFile(0); - _currentTalkFile = 1; - openTalkFile(1); + loadCCodeBuffer("C_CODE.XXX"); + + if (_flags.isTalkie) { + loadOptionsBuffer("OPTIONS.XXX"); + + showMessageFromCCode(265, 150, 0); + openTalkFile(0); + _currentTalkFile = 1; + openTalkFile(1); + } showMessage(0, 207); @@ -806,7 +809,7 @@ const uint8 *KyraEngine_v2::getTableEntry(const uint8 *buffer, int id) { const char *KyraEngine_v2::getTableString(int id, const uint8 *buffer, int decode) { const char *string = (const char*)getTableEntry(buffer, id); - if (decode) { + if (decode && _flags.lang != Common::JA_JPN) { decodeString1(string, _internStringBuf); decodeString2(_internStringBuf, _internStringBuf); string = _internStringBuf; @@ -920,15 +923,18 @@ void KyraEngine_v2::updateCommandLineEx(int str1, int str2, int16 palIndex) { strcpy(src, getTableString(str1, _cCodeBuffer, 1)); - while (*src != 0x20) + if (_flags.lang != Common::JA_JPN) { + while (*src != 0x20) + ++src; ++src; - ++src; - - *src = toupper(*src); + *src = toupper(*src); + } + strcpy((char*)_unkBuf500Bytes, src); if (str2 > 0) { - strcat((char*)_unkBuf500Bytes, " "); + if (_flags.lang != Common::JA_JPN) + strcat((char*)_unkBuf500Bytes, " "); strcat((char*)_unkBuf500Bytes, getTableString(str2, _cCodeBuffer, 1)); } @@ -1013,22 +1019,28 @@ void KyraEngine_v2::loadNPCScript() { char filename[12]; strcpy(filename, "_NPC.EMC"); - switch (_lang) { - case 0: - filename[5] = 'E'; - break; + if (_flags.platform != Common::kPlatformPC || _flags.isTalkie) { + switch (_lang) { + case 0: + filename[5] = 'E'; + break; - case 1: - filename[5] = 'F'; - break; + case 1: + filename[5] = 'F'; + break; - case 2: - filename[5] = 'G'; - break; + case 2: + filename[5] = 'G'; + break; - default: - break; - }; + case 3: + filename[5] = 'J'; + break; + + default: + break; + }; + } _scriptInterpreter->loadScript(filename, &_npcScriptData, &_opcodes); } @@ -1552,10 +1564,33 @@ void KyraEngine_v2::snd_loadSoundFile(int id) { } void KyraEngine_v2::playVoice(int high, int low) { + if (!_flags.isTalkie) + return; int vocFile = high * 10000 + low * 10; snd_playVoiceFile(vocFile); } +void KyraEngine_v2::snd_playSoundEffect(int track) { + debugC(9, kDebugLevelMain | kDebugLevelSound, "KyraEngine_v2::snd_playSoundEffect(%d)", track); + + if (track == 10) + track = _lastSfxTrack; + + if (track == 10 || track == -1) + return; + + _lastSfxTrack = track; + + int16 vocIndex = (int16) READ_LE_UINT16(&_ingameSoundIndex[track * 2]); + if (vocIndex != -1) + _sound->voicePlay(_ingameSoundList[vocIndex]); + else if (_flags.platform == Common::kPlatformPC) + // TODO ?? Maybe there is a way to let users select whether they want + // voc, midi or adl sfx (even though it makes no sense to choose anything but voc). + // For now this is used as a fallback only (if no voc file exists). + KyraEngine::snd_playSoundEffect(track); +} + #pragma mark - void KyraEngine_v2::loadInvWsa(const char *filename, int run, int delayTime, int page, int sfx, int sFrame, int flags) { |