aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/text_v2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/text_v2.cpp')
-rw-r--r--engines/kyra/text_v2.cpp38
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;
}