diff options
Diffstat (limited to 'engines/kyra/script_lol.cpp')
-rw-r--r-- | engines/kyra/script_lol.cpp | 62 |
1 files changed, 56 insertions, 6 deletions
diff --git a/engines/kyra/script_lol.cpp b/engines/kyra/script_lol.cpp index 6cc26d23c4..dcda6feb0b 100644 --- a/engines/kyra/script_lol.cpp +++ b/engines/kyra/script_lol.cpp @@ -455,8 +455,46 @@ int LoLEngine::olol_setUnkArrayVal(EMCState *script) { return 1; } +int LoLEngine::olol_getGlobalVar(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_getGlobalVar(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); + + switch (stackPos(0)) { + case 0: + return _currentBlock; + case 1: + return _currentDirection; + case 2: + return _currentLevel; + case 3: + return _itemInHand; + case 4: + return _brightness; + case 5: + return _credits; + case 6: + return _unkWordArraySize8[stackPos(1)]; + case 8: + return _updateFlags; + case 9: + return _lampStatusUnk; + case 10: + return _sceneDefaultUpdate; + case 11: + return _unkBt1; + case 12: + return _unkBt2; + case 13: + return _speechFlag; + default: + break; + } + + return 0; +} + int LoLEngine::olol_setGlobalVar(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_setGlobalVar(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2)); + uint16 a = stackPos(1); uint16 b = stackPos(2); switch (stackPos(0)) { @@ -487,7 +525,7 @@ int LoLEngine::olol_setGlobalVar(EMCState *script) { break; case 6: - //TODO + _unkWordArraySize8[a] = b; break; case 7: @@ -514,11 +552,11 @@ int LoLEngine::olol_setGlobalVar(EMCState *script) { break; case 11: - //TODO + _unkBt1 = a & 0xff; break; case 12: - //TODO + _unkBt2 = a & 0xff; break; default: @@ -714,6 +752,11 @@ int LoLEngine::olol_restoreSceneAfterDialogueSequence(EMCState *script) { return 1; } +int LoLEngine::olol_getItemInHand(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_getItemInHand(%p))", (const void *)script); + return _itemInHand; +} + int LoLEngine::olol_giveItemToMonster(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_giveItemToMonster(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); if (stackPos(0) == -1) @@ -757,6 +800,13 @@ int LoLEngine::olol_loadSoundFile(EMCState *script) { return 1; } +int LoLEngine::olol_stopCharacterSpeech(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_stopCharacterSpeech(%p)", (const void *)script); + snd_stopSpeech(1); + updatePortraits(); + return 1; +} + int LoLEngine::olol_setPaletteBrightness(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_setPaletteBrightness(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); uint16 old = _brightness; @@ -1099,7 +1149,7 @@ void LoLEngine::setupOpcodeTable() { OpcodeUnImpl(); Opcode(olol_getUnkArrayVal); Opcode(olol_setUnkArrayVal); - OpcodeUnImpl(); + Opcode(olol_getGlobalVar); // 0x30 Opcode(olol_setGlobalVar); @@ -1153,7 +1203,7 @@ void LoLEngine::setupOpcodeTable() { Opcode(olol_releaseTimScript); Opcode(olol_initDialogueSequence); Opcode(olol_restoreSceneAfterDialogueSequence); - OpcodeUnImpl(); + Opcode(olol_getItemInHand); // 0x54 OpcodeUnImpl(); @@ -1188,7 +1238,7 @@ void LoLEngine::setupOpcodeTable() { // 0x68 OpcodeUnImpl(); OpcodeUnImpl(); - OpcodeUnImpl(); + Opcode(olol_stopCharacterSpeech); Opcode(olol_setPaletteBrightness); // 0x6C |