diff options
Diffstat (limited to 'engines/kyra/text_v2.cpp')
-rw-r--r-- | engines/kyra/text_v2.cpp | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/engines/kyra/text_v2.cpp b/engines/kyra/text_v2.cpp index adcaacbd15..2aaa47d25f 100644 --- a/engines/kyra/text_v2.cpp +++ b/engines/kyra/text_v2.cpp @@ -394,7 +394,8 @@ void KyraEngine_v2::startDialogue(int dlgIndex) { } void KyraEngine_v2::zanthSceneStartupChat() { - int tableIndex = _mainCharacter.sceneId - READ_LE_UINT16(&_ingameTalkObjIndex[5 + _newChapterFile]); + int lowest = _flags.isTalkie ? 6 : 5; + int tableIndex = _mainCharacter.sceneId - READ_LE_UINT16(&_ingameTalkObjIndex[lowest + _newChapterFile]); if (queryGameFlag(0x159) || _newSceneDlgState[tableIndex]) return; @@ -410,7 +411,8 @@ void KyraEngine_v2::zanthSceneStartupChat() { } void KyraEngine_v2::zanthRandomChat() { - int tableIndex = _mainCharacter.sceneId - READ_LE_UINT16(&_ingameTalkObjIndex[5 + _newChapterFile]); + int lowest = _flags.isTalkie ? 6 : 5; + int tableIndex = (_mainCharacter.sceneId - READ_LE_UINT16(&_ingameTalkObjIndex[lowest + _newChapterFile])) << 2; if (queryGameFlag(0x164)) return; @@ -418,14 +420,36 @@ void KyraEngine_v2::zanthRandomChat() { updateDlgBuffer(); loadDlgHeader(csEntry, vocH, scIndex1, unused); - if (_unkFlag1) { - _unkFlag1 = 0; + if (_chatAltFlag) { + _chatAltFlag = 0; tableIndex += 2; } else { - _unkFlag1 = 1; + _chatAltFlag = 1; } - uint8 bufferIndex = 8 + scIndex1 * 6 + tableIndex * 2; + uint8 bufferIndex = 8 + scIndex1 * 6 + tableIndex; + int offs = READ_LE_UINT16(_dlgBuffer + bufferIndex); + processDialogue(offs, vocH, csEntry); +} + +void KyraEngine_v2::zanthIdleChat() { + int lowest = _flags.isTalkie ? 6 : 5; + int tableIndex = (_mainCharacter.sceneId - READ_LE_UINT16(&_ingameTalkObjIndex[lowest + _newChapterFile])) << 2; + if (queryGameFlag(0x164)) + return; + + int csEntry, vocH, scIndex1, unused; + updateDlgBuffer(); + loadDlgHeader(csEntry, vocH, scIndex1, unused); + + if (_chatAltFlag) { + _chatAltFlag = 0; + tableIndex += 2; + } else { + _chatAltFlag = 1; + } + + uint8 bufferIndex = 8 + scIndex1 * 6 + tableIndex; int offs = READ_LE_UINT16(_dlgBuffer + bufferIndex); processDialogue(offs, vocH, csEntry); } @@ -700,7 +724,7 @@ void KyraEngine_v2::setNewDlgIndex(int dlgIndex) { memset(_newSceneDlgState, 0, 32); for (int i = 0; i < 19; i++) memset(_conversationState[i], -1, 14); - _unkFlag1 = false; + _chatAltFlag = false; _mainCharacter.dlgIndex = dlgIndex; } |