diff options
author | Florian Kagerer | 2009-03-07 15:46:21 +0000 |
---|---|---|
committer | Florian Kagerer | 2009-03-07 15:46:21 +0000 |
commit | 826638d45be45972a94dd683eb156f0753ecaa32 (patch) | |
tree | 5be9987648d9aa973f65e803e9541ce5864c6fa2 /engines | |
parent | c252147a40994875d760d6b5f447fbb3e7ab4ade (diff) | |
download | scummvm-rg350-826638d45be45972a94dd683eb156f0753ecaa32.tar.gz scummvm-rg350-826638d45be45972a94dd683eb156f0753ecaa32.tar.bz2 scummvm-rg350-826638d45be45972a94dd683eb156f0753ecaa32.zip |
LOL: - implemented some opcodes(
svn-id: r39187
Diffstat (limited to 'engines')
-rw-r--r-- | engines/kyra/lol.cpp | 6 | ||||
-rw-r--r-- | engines/kyra/lol.h | 11 | ||||
-rw-r--r-- | engines/kyra/script_lol.cpp | 62 |
3 files changed, 69 insertions, 10 deletions
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index a1cf3e51ab..f71e141ce6 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -194,7 +194,9 @@ LoLEngine::LoLEngine(OSystem *system, const GameFlags &flags) : KyraEngine_v1(sy _pageBuffer1 = _pageBuffer2 = 0; memset(_charStatsTemp, 0, 5 * sizeof(int)); - + + _unkBt1 = _unkBt2 = 0; + _buttonData = 0; _activeButtons = 0; _preserveEvents = false; @@ -741,7 +743,7 @@ void LoLEngine::startupNew() { _availableSpells[0] = 0; setupScreenDims(); - //memset(_unkWordArraySize8, 0x100, 8); + memset(_unkWordArraySize8, 0x100, 8); static int selectIds[] = { -9, -1, -8, -5 }; addCharacter(selectIds[_charSelection]); diff --git a/engines/kyra/lol.h b/engines/kyra/lol.h index 83acd708dc..4a6ac70bb1 100644 --- a/engines/kyra/lol.h +++ b/engines/kyra/lol.h @@ -305,6 +305,8 @@ private: // timers void setupTimers(); void enableTimer(int id); + void enableSysTimer(int sysTimer); + void disableSysTimer(int sysTimer); void timerProcessDoors(int timerNum); void timerProcessMonsters(int timerNum); @@ -518,6 +520,7 @@ private: int olol_clearDialogueField(EMCState *script); int olol_getUnkArrayVal(EMCState *script); int olol_setUnkArrayVal(EMCState *script); + int olol_getGlobalVar(EMCState *script); int olol_setGlobalVar(EMCState *script); int olol_mapShapeToBlock(EMCState *script); int olol_resetBlockShapeAssignment(EMCState *script); @@ -530,12 +533,14 @@ private: int olol_releaseTimScript(EMCState *script); int olol_initDialogueSequence(EMCState *script); int olol_restoreSceneAfterDialogueSequence(EMCState *script); + int olol_getItemInHand(EMCState *script); int olol_giveItemToMonster(EMCState *script); int olol_loadLangFile(EMCState *script); int olol_playSoundEffect(EMCState *script); int olol_stopTimScript(EMCState *script); int olol_playCharacterScriptChat(EMCState *script); int olol_loadSoundFile(EMCState *script); + int olol_stopCharacterSpeech(EMCState *script); int olol_setPaletteBrightness(EMCState *script); int olol_printMessage(EMCState *script); int olol_playDialogueTalkText(EMCState *script); @@ -985,8 +990,10 @@ private: // misc void delay(uint32 millis, bool cUpdate = false, bool isMainLoop = false); - void enableSysTimer(int sysTimer); - void disableSysTimer(int sysTimer); + + uint8 _unkBt1; + uint8 _unkBt2; + uint16 _unkWordArraySize8[8]; uint8 *_pageBuffer1; uint8 *_pageBuffer2; 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 |