aboutsummaryrefslogtreecommitdiff
path: root/engines/lilliput
diff options
context:
space:
mode:
authorStrangerke2012-05-29 22:54:02 +0200
committerEugene Sandulenko2018-03-28 17:36:57 +0200
commitbcfbf5df47664f8caae8a1fbfcb8ffc831a2d8e0 (patch)
tree944c3955a75475b592b10c2c077732d0df2b2991 /engines/lilliput
parent21d38e3b4c7725c99a5b2da755c0a7ffb2dc696d (diff)
downloadscummvm-rg350-bcfbf5df47664f8caae8a1fbfcb8ffc831a2d8e0.tar.gz
scummvm-rg350-bcfbf5df47664f8caae8a1fbfcb8ffc831a2d8e0.tar.bz2
scummvm-rg350-bcfbf5df47664f8caae8a1fbfcb8ffc831a2d8e0.zip
LILLIPUT: Fix bug in OC_sub17A07 and renderCharacters, implement OC_startSpeechWithoutSpeeker
Some renaming, too
Diffstat (limited to 'engines/lilliput')
-rw-r--r--engines/lilliput/lilliput.cpp24
-rw-r--r--engines/lilliput/lilliput.h2
-rw-r--r--engines/lilliput/script.cpp100
-rw-r--r--engines/lilliput/script.h8
4 files changed, 69 insertions, 65 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp
index a31688c7dd..55de37ec58 100644
--- a/engines/lilliput/lilliput.cpp
+++ b/engines/lilliput/lilliput.cpp
@@ -184,7 +184,7 @@ LilliputEngine::LilliputEngine(OSystem *syst, const LilliputGameDescription *gd)
_characterRelativePositionY[i] = -1;
_characterDisplayX[i] = 0;
_characterDisplayY[i] = 0;
- _array12299[i] = 0xFF;
+ _array12299[i] = -1;
_array109E9PosX[i] = -1;
_array10A11PosY[i] = -1;
_array16E94[i] = 0;
@@ -1329,7 +1329,7 @@ void LilliputEngine::renderCharacters(byte *buf, Common::Point pos) {
if ((flag & 1) == 1)
frame += _spriteSizeArray[index];
- if (_array12299[index] != 0xFF) {
+ if (_array12299[index] != -1) {
frame = _array12299[index] + 82;
--_array12299[index];
frame = -frame;
@@ -1801,7 +1801,7 @@ byte LilliputEngine::sub16722(int index, Common::Point var1) {
}
byte LilliputEngine::sub16729(int index, Common::Point var1) {
- debugC(2, kDebugEngineTBC, "sub16729(%d, %d - %d)", index, var1.x, var1.y);
+ debugC(2, kDebugEngine, "sub16729(%d, %d - %d)", index, var1.x, var1.y);
int param4x = ((index | 0xFF00) >> 8);
int param1 = var1.y;
@@ -1810,19 +1810,15 @@ byte LilliputEngine::sub16729(int index, Common::Point var1) {
}
byte LilliputEngine::sub1675D(int index, Common::Point var1) {
- debugC(2, kDebugEngineTBC, "sub1675D(%d, %d - %d)", index, var1.x, var1.y);
+ debugC(2, kDebugEngine, "sub1675D(%d, %d - %d)", index, var1.x, var1.y);
int var2 = _scriptHandler->_array10A39[index];
- int var1h = _scriptHandler->_array16123PosX[var2];
- int var1l = _scriptHandler->_array1614BPosY[var2];
- int var3 = _array109E9PosX[index];
-
- if ((var3 != 0xFF) && (var3 == _array10999PosX[index])) {
- var3 = _array10A11PosY[index];
- if (var3 == _array109C1PosY[index]) {
- _array109E9PosX[index] = var1h;
- _array10A11PosY[index] = var1l;
- }
+ int8 var1h = _scriptHandler->_array16123PosX[var2];
+ int8 var1l = _scriptHandler->_array1614BPosY[var2];
+
+ if ((_array109E9PosX[index] != -1) && (_array109E9PosX[index] == _array10999PosX[index]) && (_array10A11PosY[index] == _array109C1PosY[index])) {
+ _array109E9PosX[index] = var1h;
+ _array10A11PosY[index] = var1l;
}
_array10999PosX[index] = var1h;
diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h
index 49892d88c3..1006c34a1b 100644
--- a/engines/lilliput/lilliput.h
+++ b/engines/lilliput/lilliput.h
@@ -205,7 +205,7 @@ public:
int16 _characterRelativePositionY[40];
int16 _characterDisplayX[40];
int16 _characterDisplayY[40];
- byte _array12299[40];
+ int8 _array12299[40];
int16 _array109E9PosX[40];
int16 _array10A11PosY[40];
byte _array16E94[40];
diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp
index de250c802c..b34acdec84 100644
--- a/engines/lilliput/script.cpp
+++ b/engines/lilliput/script.cpp
@@ -264,7 +264,7 @@ void LilliputScript::handleOpcodeType2(int curWord) {
OC_sub17E07_speech4param();
break;
case 0x7:
- OC_sub17E15_speech2param();
+ OC_startSpeechIfSilent();
break;
case 0x8:
OC_ComputeCharacterVariable();
@@ -393,7 +393,7 @@ void LilliputScript::handleOpcodeType2(int curWord) {
OC_sub17FDD();
break;
case 0x32:
- OC_setByte10B29();
+ OC_setCharacterScriptEnabled();
break;
case 0x33:
OC_setCurrentCharacterVar2();
@@ -495,7 +495,7 @@ void LilliputScript::handleOpcodeType2(int curWord) {
OC_displayVGAFile();
break;
case 0x54:
- OC_sub184D7();
+ OC_startSpeechWithoutSpeeker();
break;
case 0x55:
OC_displayTitleScreen();
@@ -543,7 +543,7 @@ void LilliputScript::handleOpcodeType2(int curWord) {
OC_sub1875D_snd();
break;
case 0x64:
- OC_setArray128E();
+ OC_setArray128EF();
break;
case 0x65:
OC_initGameAreaDisplay();
@@ -616,7 +616,7 @@ static const OpCode opCodes2[] = {
/* 0x04 */ { "OC_sub17DB9_speech3", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone }, // todo
/* 0x05 */ { "OC_startSpeechIfMute", 1, kImmediateValue, kNone, kNone, kNone, kNone },
/* 0x06 */ { "OC_sub17E07_speech4param", 4, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, // pb
-/* 0x07 */ { "OC_sub17E15_speech2param", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone },
+/* 0x07 */ { "OC_startSpeechIfSilent", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone },
/* 0x08 */ { "OC_ComputeCharacterVariable", 4, kGetValue1, kImmediateValue, kComputeOperation, kImmediateValue, kNone },
/* 0x09 */ { "OC_getRandom_type2", 3, kGetValue1, kImmediateValue, kImmediateValue, kNone, kNone },
/* 0x0a */ { "OC_setCharacterPosition", 2, kGetValue1, kgetPosFromScript, kNone, kNone, kNone },
@@ -659,7 +659,7 @@ static const OpCode opCodes2[] = {
/* 0x2f */ { "OC_skipNextVal", 1, kImmediateValue, kNone, kNone, kNone, kNone },
/* 0x30 */ { "OC_setCurrentCharacterVar6", 1, kGetValue1, kNone, kNone, kNone, kNone },
/* 0x31 */ { "OC_sub17FDD", 1, kImmediateValue, kNone, kNone, kNone, kNone },
-/* 0x32 */ { "OC_setByte10B29", 1, kGetValue1, kNone, kNone, kNone, kNone },
+/* 0x32 */ { "OC_setCharacterScriptEnabled", 1, kGetValue1, kNone, kNone, kNone, kNone },
/* 0x33 */ { "OC_setCurrentCharacterVar2", 1, kImmediateValue, kNone, kNone, kNone, kNone },
/* 0x34 */ { "OC_SetCurrentCharacterVar2ToZero", 0, kNone, kNone, kNone, kNone, kNone },
/* 0x35 */ { "OC_setCharacterProperties", 5, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue },
@@ -693,7 +693,7 @@ static const OpCode opCodes2[] = {
/* 0x51 */ { "OC_sub1844A", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone },
/* 0x52 */ { "OC_displayNumericCharacterVariable", 5, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue },
/* 0x53 */ { "OC_displayVGAFile", 1, kImmediateValue, kNone, kNone, kNone, kNone },
-/* 0x54 */ { "OC_sub184D7", 1, kImmediateValue, kNone, kNone, kNone, kNone }, // TODO
+/* 0x54 */ { "OC_startSpeechWithoutSpeeker", 1, kImmediateValue, kNone, kNone, kNone, kNone }, // TODO
/* 0x55 */ { "OC_displayTitleScreen", 1, kImmediateValue, kNone, kNone, kNone, kNone },
/* 0x56 */ { "OC_initGameAreaDisplay", 0, kNone, kNone, kNone, kNone, kNone },
/* 0x57 */ { "OC_displayCharacterStatBar", 6, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue},
@@ -709,7 +709,7 @@ static const OpCode opCodes2[] = {
/* 0x61 */ { "OC_sub1873F_snd", 1, kgetPosFromScript, kNone, kNone, kNone, kNone },
/* 0x62 */ { "OC_sub18746_snd", 1, kImmediateValue, kNone, kNone, kNone, kNone },
/* 0x63 */ { "OC_sub1875D_snd", 0, kNone, kNone, kNone, kNone, kNone },
-/* 0x64 */ { "OC_setArray128E", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone },
+/* 0x64 */ { "OC_setArray128EF", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone },
/* 0x65 */ { "OC_initGameAreaDisplay", 0, kNone, kNone, kNone, kNone, kNone }
};
@@ -1849,7 +1849,7 @@ byte LilliputScript::OC_checkLastInterfaceHotspotIndexMenu13() {
}
byte LilliputScript::OC_checkLastInterfaceHotspotIndexMenu2() {
- debugC(1, kDebugScriptTBC, "OC_checkLastInterfaceHotspotIndexMenu2()");
+ debugC(1, kDebugScript, "OC_checkLastInterfaceHotspotIndexMenu2()");
int8 hotspotIndex = (_currScript->readUint16LE() & 0xFF);
@@ -2000,12 +2000,12 @@ byte LilliputScript::OC_CurrentCharacterVar3Equals1() {
}
byte LilliputScript::OC_checkCharacterDirection() {
- debugC(1, kDebugScriptTBC, "OC_checkCharacterDirection()");
+ debugC(1, kDebugScript, "OC_checkCharacterDirection()");
- int var1 = getValue1();
- int var2 = _currScript->readUint16LE();
+ int16 index = getValue1();
+ byte expectedVal = (_currScript->readUint16LE() & 0xFF);
- if (_vm->_characterDirectionArray[var1] == var2)
+ if (_vm->_characterDirectionArray[index] == expectedVal)
return 1;
return 0;
}
@@ -2025,7 +2025,7 @@ byte LilliputScript::OC_checkLastInterfaceHotspotIndex() {
}
byte LilliputScript::OC_checkSavedMousePos() {
- debugC(1, kDebugScriptTBC, "OC_checkSavedMousePos()");
+ debugC(1, kDebugScript, "OC_checkSavedMousePos()");
if ((_vm->_byte129A0 != -1) || (_vm->_savedMousePosDivided == Common::Point(-1, -1)))
return 0;
@@ -2066,24 +2066,29 @@ byte LilliputScript::OC_checkKeyPressed() {
}
byte LilliputScript::OC_sub17A07() {
- debugC(1, kDebugScriptTBC, "OC_sub17A07()");
+ debugC(1, kDebugScript, "OC_sub17A07()");
- static const byte _array179FD[10] = {11, 2, 3, 4, 5, 6, 7, 8, 9, 10};
+ static const byte array179FD[10] = {11, 2, 3, 4, 5, 6, 7, 8, 9, 10};
if (_vm->_byte16F07_menuId == 6) {
- int index = _currScript->readUint16LE();
- if (_array179FD[index] == _vm->_array147D1[0]) {
+ uint16 index = _currScript->readUint16LE();
+ if (array179FD[index] == _vm->_array147D1[0]) {
index = _currScript->readUint16LE();
- if (_array179FD[index] == _vm->_array147D1[1]) {
+ if (array179FD[index] == _vm->_array147D1[1]) {
index = _currScript->readUint16LE();
- if (_array179FD[index] == _vm->_array147D1[2]) {
+ if (array179FD[index] == _vm->_array147D1[2]) {
return 1;
}
- }
- }
- }
-
- _currScript->seek(_currScript->pos() + 6);
+ } else
+ // skip last index check
+ _currScript->seek(_currScript->pos() + 2);
+ } else
+ // skip two last index checks
+ _currScript->seek(_currScript->pos() + 4);
+ } else
+ // skip the three index checks
+ _currScript->seek(_currScript->pos() + 6);
+
return 0;
}
@@ -2228,8 +2233,8 @@ void LilliputScript::OC_sub17E07_speech4param() {
}
-void LilliputScript::OC_sub17E15_speech2param() {
- debugC(1, kDebugScriptTBC, "OC_sub17E15_speech2param()");
+void LilliputScript::OC_startSpeechIfSilent() {
+ debugC(1, kDebugScript, "OC_startSpeechIfSilent()");
if (_talkingCharacter == -1) {
OC_sub17DB9_speech3();
@@ -2446,12 +2451,12 @@ void LilliputScript::OC_sub17C55() {
}
void LilliputScript::OC_sub17C76() {
- debugC(1, kDebugScriptTBC, "OC_sub17C76()");
+ debugC(1, kDebugScript, "OC_sub17C76()");
- int var1 = getValue1();
- _vm->_rulesBuffer2_5[var1] = -1;
- _vm->_characterPositionAltitude[var1] = 0;
- _characterScriptEnabled[var1] = 1;
+ int index = getValue1();
+ _vm->_rulesBuffer2_5[index] = -1;
+ _vm->_characterPositionAltitude[index] = 0;
+ _characterScriptEnabled[index] = 1;
}
@@ -2715,11 +2720,11 @@ void LilliputScript::OC_sub17FDD() {
_array12811[_vm->_currentScriptCharacter] = 16;
}
-void LilliputScript::OC_setByte10B29() {
- debugC(1, kDebugScriptTBC, "OC_setByte10B29()");
+void LilliputScript::OC_setCharacterScriptEnabled() {
+ debugC(1, kDebugScript, "OC_setCharacterScriptEnabled()");
- int var1 = getValue1();
- _characterScriptEnabled[var1] = 1;
+ int16 index = getValue1();
+ _characterScriptEnabled[index] = 1;
}
void LilliputScript::OC_setCurrentCharacterVar2() {
@@ -2922,10 +2927,10 @@ void LilliputScript::OC_sub18213() {
}
void LilliputScript::OC_sub18252() {
- debugC(1, kDebugScriptTBC, "OC_sub18252()");
+ debugC(1, kDebugScript, "OC_sub18252()");
- int index = getValue1();
- assert(index < 40);
+ int16 index = getValue1();
+ assert((index >0) && (index < 40));
_vm->_array12299[index] = 4;
}
@@ -3039,10 +3044,10 @@ void LilliputScript::OC_sub183A2() {
}
void LilliputScript::OC_disableInterfaceHotspot() {
- debugC(1, kDebugScriptTBC, "OC_disableInterfaceHotspot()");
+ debugC(1, kDebugScript, "OC_disableInterfaceHotspot()");
int index = _currScript->readUint16LE();
- _array122FD[index] = (_currScript->readUint16LE() & 0xff);
+ _array122FD[index] = (_currScript->readUint16LE() & 0xFF);
_interfaceHotspotStatus[index] = kHotspotDisabled;
_vm->displayInterfaceHotspots();
@@ -3051,7 +3056,7 @@ void LilliputScript::OC_disableInterfaceHotspot() {
void LilliputScript::OC_loadFile_AERIAL_GFX() {
debugC(1, kDebugScriptTBC, "OC_loadFile_AERIAL_GFX()");
- int var1 = _currScript->readUint16LE() & 0xff;
+ int var1 = _currScript->readUint16LE() & 0xFF;
_vm->_byte15EAD = var1;
_vm->_refreshScreenFlag = true;
@@ -3131,8 +3136,11 @@ void LilliputScript::OC_displayVGAFile() {
_vm->paletteFadeIn();
}
-void LilliputScript::OC_sub184D7() {
- warning("OC_sub184D7");
+void LilliputScript::OC_startSpeechWithoutSpeeker() {
+ debugC(1, kDebugScript, "OC_startSpeechWithoutSpeeker()");
+
+ int16 speechId = _currScript->readUint16LE();
+ startSpeech(speechId);
}
void LilliputScript::OC_displayTitleScreen() {
@@ -3314,8 +3322,8 @@ void LilliputScript::OC_sub1875D_snd() {
_vm->_soundHandler->contentFct6();
}
-void LilliputScript::OC_setArray128E() {
- debugC(1, kDebugScript, "OC_setArray128E()");
+void LilliputScript::OC_setArray128EF() {
+ debugC(1, kDebugScript, "OC_setArray128EF()");
int index = getValue1();
int val = _currScript->readUint16LE();
diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h
index ca2087682e..757ce91ab5 100644
--- a/engines/lilliput/script.h
+++ b/engines/lilliput/script.h
@@ -200,7 +200,7 @@ private:
void OC_sub17DB9_speech3();
void OC_startSpeechIfMute();
void OC_sub17E07_speech4param();
- void OC_sub17E15_speech2param();
+ void OC_startSpeechIfSilent();
void OC_ComputeCharacterVariable();
void OC_getRandom_type2();
void OC_setCharacterPosition();
@@ -243,7 +243,7 @@ private:
void OC_skipNextVal();
void OC_setCurrentCharacterVar6();
void OC_sub17FDD();
- void OC_setByte10B29();
+ void OC_setCharacterScriptEnabled();
void OC_setCurrentCharacterVar2();
void OC_SetCurrentCharacterVar2ToZero();
void OC_setCharacterProperties();
@@ -278,7 +278,7 @@ private:
void OC_sub1844A();
void OC_displayNumericCharacterVariable();
void OC_displayVGAFile();
- void OC_sub184D7();
+ void OC_startSpeechWithoutSpeeker();
void OC_displayTitleScreen();
void OC_initGameAreaDisplay();
void OC_displayCharacterStatBar();
@@ -294,7 +294,7 @@ private:
void OC_sub1873F_snd();
void OC_sub18746_snd();
void OC_sub1875D_snd();
- void OC_setArray128E();
+ void OC_setArray128EF();
};
} // End of namespace Lilliput