diff options
-rw-r--r-- | engines/kyra/kyra_v3.h | 3 | ||||
-rw-r--r-- | engines/kyra/script_v3.cpp | 70 |
2 files changed, 70 insertions, 3 deletions
diff --git a/engines/kyra/kyra_v3.h b/engines/kyra/kyra_v3.h index 47ec6e79e1..518c34415d 100644 --- a/engines/kyra/kyra_v3.h +++ b/engines/kyra/kyra_v3.h @@ -753,6 +753,7 @@ private: int o3_enableInventory(ScriptState *script); int o3_enterNewScene(ScriptState *script); int o3_switchScene(ScriptState *script); + int o3_getShapeFlag1(ScriptState *script); int o3_setMalcolmPos(ScriptState *script); int o3_stopMusic(ScriptState *script); int o3_playMusicTrack(ScriptState *script); @@ -774,6 +775,8 @@ private: int o3_setDlgIndex(ScriptState *script); int o3_getDlgIndex(ScriptState *script); int o3_defineScene(ScriptState *script); + int o3_setConversationState(ScriptState *script); + int o3_getConversationState(ScriptState *script); int o3_changeChapter(ScriptState *script); int o3_countItemInstances(ScriptState *script); int o3_dialogStartScript(ScriptState *script); diff --git a/engines/kyra/script_v3.cpp b/engines/kyra/script_v3.cpp index 574c105481..93564c18e2 100644 --- a/engines/kyra/script_v3.cpp +++ b/engines/kyra/script_v3.cpp @@ -861,6 +861,11 @@ int KyraEngine_v3::o3_switchScene(ScriptState *script) { return 0; } +int KyraEngine_v3::o3_getShapeFlag1(ScriptState *script) { + debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_getShapeFlag1(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); + return _screen->getShapeFlag1(stackPos(0), stackPos(1)); +} + int KyraEngine_v3::o3_setMalcolmPos(ScriptState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_setMalcolmPos(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); _mainCharX = stackPos(0); @@ -1148,6 +1153,65 @@ int KyraEngine_v3::o3_defineScene(ScriptState *script) { return 0; } +int KyraEngine_v3::o3_setConversationState(ScriptState *script) { + debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_setConversationState(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2)); + int id = stackPos(0); + const int dlgIndex = stackPos(1); + const int value = stackPos(2); + + switch (_currentChapter-2) { + case 0: + id -= 34; + break; + + case 1: + id -= 54; + break; + + case 2: + id -= 55; + break; + + case 3: + id -= 70; + break; + + default: + break; + } + + return (_conversationState[id][dlgIndex] = value); +} + +int KyraEngine_v3::o3_getConversationState(ScriptState *script) { + debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_getConversationState(%p) (%d)", (const void *)script, stackPos(0)); + int id = stackPos(0); + const int dlgIndex = _mainCharacter.dlgIndex; + + switch (_currentChapter-2) { + case 0: + id -= 34; + break; + + case 1: + id -= 54; + break; + + case 2: + id -= 55; + break; + + case 3: + id -= 70; + break; + + default: + break; + } + + return _conversationState[id][dlgIndex]; +} + int KyraEngine_v3::o3_changeChapter(ScriptState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_changeChapter(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3)); changeChapter(stackPos(0), stackPos(1), stackPos(2), stackPos(3)); @@ -1460,7 +1524,7 @@ void KyraEngine_v3::setupOpcodeTable() { // 0x50 Opcode(o3_enterNewScene); Opcode(o3_switchScene); - OpcodeUnImpl(); + Opcode(o3_getShapeFlag1); Opcode(o3_dummy); // 0x54 Opcode(o3_dummy); @@ -1510,11 +1574,11 @@ void KyraEngine_v3::setupOpcodeTable() { // 0x78 Opcode(o3_getDlgIndex); Opcode(o3_defineScene); - OpcodeUnImpl(); + Opcode(o3_setConversationState); OpcodeUnImpl(); // 0x7c OpcodeUnImpl(); - OpcodeUnImpl(); + Opcode(o3_getConversationState); Opcode(o3_dummy); Opcode(o3_dummy); // 0x80 |