aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorFlorian Kagerer2009-03-07 15:46:21 +0000
committerFlorian Kagerer2009-03-07 15:46:21 +0000
commit826638d45be45972a94dd683eb156f0753ecaa32 (patch)
tree5be9987648d9aa973f65e803e9541ce5864c6fa2 /engines/kyra
parentc252147a40994875d760d6b5f447fbb3e7ab4ade (diff)
downloadscummvm-rg350-826638d45be45972a94dd683eb156f0753ecaa32.tar.gz
scummvm-rg350-826638d45be45972a94dd683eb156f0753ecaa32.tar.bz2
scummvm-rg350-826638d45be45972a94dd683eb156f0753ecaa32.zip
LOL: - implemented some opcodes(
svn-id: r39187
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/lol.cpp6
-rw-r--r--engines/kyra/lol.h11
-rw-r--r--engines/kyra/script_lol.cpp62
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