diff options
Diffstat (limited to 'engines/lilliput/script.cpp')
-rw-r--r-- | engines/lilliput/script.cpp | 352 |
1 files changed, 175 insertions, 177 deletions
diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index 7600028991..07911f945f 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -33,23 +33,22 @@ LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) _cubeSet = 0; _lastRandomValue = 0; _scriptForVal = 0; - _byte1881A = 0; - _byte18823 = 0; + _textVarNumber = 0; _speechDisplaySpeed = 3; _speechTimer = 0; _word16F00_characterId = -1; - _word129A3 = 0; + _monitoredCharacter = 0; _viewportCharacterTarget = -1; _heroismBarX = 0; _heroismBarBottomY = 0; _viewportPos.x = 0; _viewportPos.y = 0; _currentSpeechId = 0; - _array129A5[0] = 0; - _array129A5[1] = 1; - _array129A5[2] = 2; - _array129A5[3] = 3; - _savedBuffer215Ptr = NULL; + _monitoredAttr[0] = 0; + _monitoredAttr[1] = 1; + _monitoredAttr[2] = 2; + _monitoredAttr[3] = 3; + _barAttrPtr = NULL; _word1825E = Common::Point(0, 0); for (int i = 0; i < 20; i++) { @@ -57,8 +56,10 @@ LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) _interfaceButtonActivationDelay[i] = 0; } - for (int i = 0; i < 32; i++) - _array1813BPos[i] = Common::Point(0, 0); + for (int i = 0; i < 32; i++) { + _newEvaluatedModes[i]._mode = 0; + _newEvaluatedModes[i]._priority = 0; + } for (int i = 0; i < 40; i++) { _characterScriptEnabled[i] = 1; @@ -76,6 +77,11 @@ LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL) for (int i = 0; i < 1600; i++) _interactions[i] = 0; + + _heroismLevel = 0; + _talkingCharacter = -1; + _byte16F05_ScriptHandler = 0; + _word18821 = 0; } LilliputScript::~LilliputScript() { @@ -205,7 +211,7 @@ byte LilliputScript::handleOpcodeType1(int curWord) { return OC_CheckCurrentCharacterAttr1(); break; case 0x28: - return OC_isCurrentCharacterStung(); + return OC_isCurrentCharacterSpecial(); break; case 0x29: return OC_CurrentCharacterAttr3Equals1(); @@ -271,7 +277,7 @@ void LilliputScript::handleOpcodeType2(int curWord) { OC_ComputeCharacterVariable(); break; case 0x9: - OC_getRandom_type2(); + OC_setAttributeToRandom(); break; case 0xA: OC_setCharacterPosition(); @@ -301,7 +307,7 @@ void LilliputScript::handleOpcodeType2(int curWord) { OC_computeChararacterAttr(); break; case 0x13: - OC_setByte18823(); + OC_setTextVarNumber(); break; case 0x14: OC_callScript(); @@ -367,10 +373,10 @@ void LilliputScript::handleOpcodeType2(int curWord) { OC_changeCurrentCharacterSprite(); break; case 0x29: - OC_sub17E99(); + OC_getList(); break; case 0x2A: - OC_sub17EC5(); + OC_setList(); break; case 0x2B: OC_setCharacterDirectionTowardsPos(); @@ -406,7 +412,7 @@ void LilliputScript::handleOpcodeType2(int curWord) { OC_setCharacterProperties(); break; case 0x36: - OC_sub1805D(); + OC_setMonitoredCharacter(); break; case 0x37: OC_setNewPose(); @@ -427,19 +433,19 @@ void LilliputScript::handleOpcodeType2(int curWord) { OC_setCurrentCharacterAltitude(); break; case 0x3D: - OC_sub1817F(); + OC_setModePriority(); break; case 0x3E: - OC_sub181BB(); + OC_setComputedModePriority(); break; case 0x3F: - OC_sub18213(); + OC_selectBestMode(); break; case 0x40: OC_magicPuffEntrance(); break; case 0x41: - OC_sub18260(); + OC_spawnCharacterAtPos(); break; case 0x42: OC_CharacterVariableAddOrRemoveFlag(); @@ -472,7 +478,7 @@ void LilliputScript::handleOpcodeType2(int curWord) { OC_setDebugFlag(); break; case 0x4C: - OC_setByte14837(); + OC_setDebugFlag2(); break; case 0x4D: OC_waitForEvent(); @@ -619,7 +625,7 @@ static const OpCode opCodes2[] = { /* 0x06 */ { "OC_getComputedVariantSpeechIfMute", 4, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, // pb /* 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 }, +/* 0x09 */ { "OC_setAttributeToRandom", 3, kGetValue1, kImmediateValue, kImmediateValue, kNone, kNone }, /* 0x0a */ { "OC_setCharacterPosition", 2, kGetValue1, kgetPosFromScript, kNone, kNone, kNone }, /* 0x0b */ { "OC_disableCharacter", 1, kGetValue1, kNone, kNone, kNone, kNone }, /* 0x0c */ { "OC_saveAndQuit", 0, kNone, kNone, kNone, kNone, kNone }, @@ -629,7 +635,7 @@ static const OpCode opCodes2[] = { /* 0x10 */ { "OC_deleteSavegameAndQuit", 0, kNone, kNone, kNone, kNone, kNone }, /* 0x11 */ { "OC_incScriptForVal", 0, kNone, kNone, kNone, kNone, kNone }, /* 0x12 */ { "OC_ComputeChararacterAttr", 5, kGetValue1, kImmediateValue,kComputeOperation, kGetValue1, kImmediateValue }, -/* 0x13 */ { "OC_setByte18823", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone }, +/* 0x13 */ { "OC_setTextVarNumber", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone }, /* 0x14 */ { "OC_callScript", 2, kImmediateValue, kGetValue1, kNone, kNone, kNone }, // run script /* 0x15 */ { "OC_callScriptAndReturn", 2, kImmediateValue, kGetValue1, kNone, kNone, kNone }, // run script then stop /* 0x16 */ { "OC_setCurrentScriptCharacterPos", 1, kgetPosFromScript, kNone, kNone, kNone, kNone }, @@ -651,8 +657,8 @@ static const OpCode opCodes2[] = { /* 0x26 */ { "OC_setCurrentCharacterPos", 2, kImmediateValue, kgetPosFromScript, kNone, kNone, kNone }, /* 0x27 */ { "OC_setCurrentCharacterBehavior", 1, kImmediateValue, kNone, kNone, kNone, kNone }, /* 0x28 */ { "OC_changeCurrentCharacterSprite", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone }, -/* 0x29 */ { "OC_sub17E99", 4, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, -/* 0x2a */ { "OC_sub17EC5", 4, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, +/* 0x29 */ { "OC_getList", 4, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, +/* 0x2a */ { "OC_setList", 4, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, /* 0x2b */ { "OC_setCharacterDirectionTowardsPos", 1, kgetPosFromScript, kNone, kNone, kNone, kNone }, /* 0x2c */ { "OC_turnCharacterTowardsAnother", 1, kGetValue1, kNone, kNone, kNone, kNone }, /* 0x2d */ { "OC_setSeek", 1, kGetValue1, kNone, kNone, kNone, kNone }, @@ -664,18 +670,18 @@ static const OpCode opCodes2[] = { /* 0x33 */ { "OC_setCurrentCharacterAttr2", 1, kImmediateValue, kNone, kNone, kNone, kNone }, /* 0x34 */ { "OC_ClearCurrentCharacterAttr2", 0, kNone, kNone, kNone, kNone, kNone }, /* 0x35 */ { "OC_setCharacterProperties", 5, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue }, -/* 0x36 */ { "OC_sub1805D", 5, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue }, +/* 0x36 */ { "OC_setMonitoredCharacter", 5, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue }, /* 0x37 */ { "OC_setNewPose", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone }, /* 0x38 */ { "OC_setCurrentCharacterDirection", 1, kImmediateValue, kNone, kNone, kNone, kNone }, /* 0x39 */ { "OC_setInterfaceHotspot", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone }, /* 0x3a */ { "OC_scrollViewPort", 1, kImmediateValue, kNone, kNone, kNone, kNone }, /* 0x3b */ { "OC_setViewPortPos", 1, kgetPosFromScript, kNone, kNone, kNone, kNone }, /* 0x3c */ { "OC_setCurrentCharacterAltitude", 1, kImmediateValue, kNone, kNone, kNone, kNone }, -/* 0x3d */ { "OC_sub1817F", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone }, -/* 0x3e */ { "OC_sub181BB", 4, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, -/* 0x3f */ { "OC_sub18213", 1, kImmediateValue, kNone, kNone, kNone, kNone }, +/* 0x3d */ { "OC_setModePriority", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone }, +/* 0x3e */ { "OC_setComputedModePriority", 4, kImmediateValue, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, +/* 0x3f */ { "OC_selectBestMode", 1, kImmediateValue, kNone, kNone, kNone, kNone }, /* 0x40 */ { "OC_magicPuffEntrance", 1, kGetValue1, kNone, kNone, kNone, kNone }, -/* 0x41 */ { "OC_sub18260", 2, kGetValue1, kgetPosFromScript, kNone, kNone, kNone }, // TODO +/* 0x41 */ { "OC_spawnCharacterAtPos", 2, kGetValue1, kgetPosFromScript, kNone, kNone, kNone }, // TODO /* 0x42 */ { "OC_characterVariableAddOrRemoveFlag", 4, kGetValue1, kImmediateValue, kImmediateValue, kImmediateValue, kNone }, /* 0x43 */ { "OC_paletteFadeOut", 0, kNone, kNone, kNone, kNone, kNone }, /* 0x44 */ { "OC_paletteFadeIn", 0, kNone, kNone, kNone, kNone, kNone }, @@ -686,7 +692,7 @@ static const OpCode opCodes2[] = { /* 0x49 */ { "OC_enableCharacterScript", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone }, /* 0x4a */ { "OC_setRulesBuffer2Element", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone }, /* 0x4b */ { "OC_setDebugFlag", 0, kNone, kNone, kNone, kNone, kNone }, -/* 0x4c */ { "OC_setByte14837", 0, kNone, kNone, kNone, kNone, kNone }, +/* 0x4c */ { "OC_setDebugFlag2", 0, kNone, kNone, kNone, kNone, kNone }, /* 0x4d */ { "OC_waitForEvent", 0, kNone, kNone, kNone, kNone, kNone }, /* 0x4e */ { "OC_disableInterfaceHotspot", 2, kImmediateValue, kImmediateValue, kNone, kNone, kNone }, // TODO /* 0x4f */ { "OC_loadFileAerial", 1, kNone, kNone, kNone, kNone, kNone }, @@ -930,7 +936,7 @@ void LilliputScript::runScript(ScriptStream script) { } void LilliputScript::runMenuScript(ScriptStream script) { - debugC(1, kDebugScriptTBC, "runMenuScript"); + debugC(1, kDebugScript, "runMenuScript"); _byte16F05_ScriptHandler = 0; @@ -1056,7 +1062,7 @@ void LilliputScript::setSequence(int charIdx, int8 seqIdx) { assert(charIdx < 40); _characterLastSequence[charIdx] = seqIdx; - byte *buf = _vm->_rulesChunk1; + byte *buf = _vm->_sequencesArr; if (seqIdx != 0) { int count = 0; while (count < seqIdx) { @@ -1073,7 +1079,7 @@ void LilliputScript::checkSpeechAllowed(bool &forceReturnFl) { debugC(1, kDebugScript, "checkSpeechAllowed()"); forceReturnFl = false; - if ((!_vm->_displayMap) && (_vm->_characterRelativePositionX[_vm->_currentScriptCharacter] != -1)) + if ((!_vm->_displayMap) && (_vm->_characterRelativePos[_vm->_currentScriptCharacter].x != -1)) return; forceReturnFl = true; @@ -1117,8 +1123,8 @@ void LilliputScript::formatSpeechString() { } } -void LilliputScript::sub189B8() { - debugC(2, kDebugScript, "sub189B8()"); +void LilliputScript::showSpeech() { + debugC(2, kDebugScript, "showSpeech()"); formatSpeechString(); int index = 0; @@ -1149,7 +1155,6 @@ void LilliputScript::decodePackedText(char *buf) { "'s |'t |re|gg|tt|pp|nn|ay|ar|wh|"; _vm->_displayStringIndex = 0; - _byte1881A = 0; int index = 0; byte var1 = 0; for (;;) { @@ -1163,7 +1168,7 @@ void LilliputScript::decodePackedText(char *buf) { var1 = buf[index]; ++index; if (var1 == '#') { - _vm->numberToString(_byte18823); + _vm->numberToString(_textVarNumber); } } else { _vm->addCharToBuf(var1); @@ -1195,7 +1200,7 @@ void LilliputScript::decodePackedText(char *buf) { } } - sub189B8(); + showSpeech(); } int LilliputScript::getPackedStringStartRelativeIndex(int index) { @@ -1217,7 +1222,7 @@ void LilliputScript::listAllTexts() { int index = _vm->_packedStringIndex[i]; int variantCount = 0; while (_vm->_packedStrings[index + variantCount] == 0x5B) - ++variantCount ; + ++variantCount; /* int it = 0; if (variantCount != 0) { @@ -1231,7 +1236,7 @@ void LilliputScript::listAllTexts() { } } else {*/ decodePackedText(&_vm->_packedStrings[index + variantCount]); - debugC(1, kDebugScriptTBC, "Text 0x%x variant 0 : %s", i, _vm->_displayStringBuf); + debugC(1, kDebugScript, "Text 0x%x variant 0 : %s", i, _vm->_displayStringBuf); /* }*/ } } @@ -1297,46 +1302,43 @@ Common::Point LilliputScript::getPosFromScript() { switch(tmpVal) { case 0xFF: assert((_vm->_currentScriptCharacter >= 0) && (_vm->_currentScriptCharacter < 40)); - return Common::Point(_vm->_characterHomePosX[_vm->_currentScriptCharacter], _vm->_characterHomePosY[_vm->_currentScriptCharacter]); + return _vm->_characterHomePos[_vm->_currentScriptCharacter]; case 0xFE: { int8 index = curWord & 0xFF; assert((index >= 0) && (index < 40)); - return Common::Point(_vm->_characterHomePosX[index], _vm->_characterHomePosY[index]); + return _vm->_characterHomePos[index]; } case 0xFD: return _vm->_currentScriptCharacterPos; case 0xFC: { int8 index = curWord & 0xFF; assert((index >= 0) && (index < 40)); - int16 x = _vm->_characterPositionX[index] >> 3; - int16 y = _vm->_characterPositionY[index] >> 3; + int16 x = _vm->_characterPos[index].x >> 3; + int16 y = _vm->_characterPos[index].y >> 3; return Common::Point(x, y); } case 0xFB: { int index = _word16F00_characterId; assert((index >= 0) && (index < 40)); - int16 x = _vm->_characterPositionX[index] >> 3; - int16 y = _vm->_characterPositionY[index] >> 3; + int16 x = _vm->_characterPos[index].x >> 3; + int16 y = _vm->_characterPos[index].y >> 3; return Common::Point(x, y); } case 0xFA: - return Common::Point(_vm->_characterTargetPosX[_vm->_currentScriptCharacter], _vm->_characterTargetPosY[_vm->_currentScriptCharacter]); + return _vm->_characterTargetPos[_vm->_currentScriptCharacter]; case 0xF9: return Common::Point(_vm->_currentCharacterAttributes[4], _vm->_currentCharacterAttributes[5]); case 0xF8: { int8 index = curWord & 0xFF; assert((index >= 0) && (index < 40)); - return _vm->_rulesBuffer12Pos3[index]; + return _vm->_keyPos[index]; } case 0xF7: { int8 index = _vm->_currentCharacterAttributes[6]; assert((index >= 0) && (index < 40)); - int16 x = _vm->_characterPositionX[index] >> 3; - int16 y = _vm->_characterPositionY[index] >> 3; - - return Common::Point(x, y); + return Common::Point(_vm->_characterPos[index].x >> 3, _vm->_characterPos[index].y >> 3); } case 0xF6: return _vm->_savedMousePosDivided; @@ -1448,7 +1450,7 @@ byte LilliputScript::OC_for() { } byte LilliputScript::OC_compCurrentSpeechId() { - debugC(1, kDebugScriptTBC, "OC_compCurrentSpeechId()"); + debugC(1, kDebugScript, "OC_compCurrentSpeechId()"); int var1 = _currScript->readUint16LE(); @@ -1468,7 +1470,7 @@ byte LilliputScript::OC_checkSaveFlag() { } byte LilliputScript::OC_compScriptForVal() { - debugC(1, kDebugScriptTBC, "OC_compScriptForVal()"); + debugC(1, kDebugScript, "OC_compScriptForVal()"); uint16 oper = _currScript->readUint16LE(); int16 var2 = _currScript->readUint16LE(); @@ -1571,7 +1573,7 @@ byte LilliputScript::OC_CompareDistanceFromCharacterToPositionWith() { } byte LilliputScript::OC_compareRandomCharacterId() { - debugC(1, kDebugScriptTBC, "OC_compareRandomCharacterId()"); + debugC(1, kDebugScript, "OC_compareRandomCharacterId()"); byte *tmpArr = getCharacterAttributesPtr(); _lastRandomValue = _vm->_rnd->getRandomNumber(tmpArr[0] + 1); @@ -1780,7 +1782,7 @@ byte LilliputScript::OC_IsCharacterValid() { debugC(1, kDebugScript, "OC_IsCharacterValid()"); int index = getValue1(); - if (_vm->_characterPositionX[index] == -1) + if (_vm->_characterPos[index].x == -1) return 0; return 1; @@ -1889,7 +1891,7 @@ byte LilliputScript::OC_CompareGameVariables() { } byte LilliputScript::OC_skipNextOpcode() { - debugC(1, kDebugScriptTBC, "OC_skipNextOpcode()"); + debugC(1, kDebugScript, "OC_skipNextOpcode()"); _currScript->readUint16LE(); return 1; @@ -1966,13 +1968,13 @@ byte LilliputScript::OC_CheckCurrentCharacterAttr1() { return 0; } -byte LilliputScript::OC_isCurrentCharacterStung() { - debugC(1, kDebugScript, "OC_isCurrentCharacterStung()"); +byte LilliputScript::OC_isCurrentCharacterSpecial() { + debugC(1, kDebugScript, "OC_isCurrentCharacterSpecial()"); if (_vm->_currentScriptCharacterPos == Common::Point(-1, -1)) return 0; - if (_vm->_stingArray[_vm->_currentScriptCharacter] == 0) + if (_vm->_specialCubes[_vm->_currentScriptCharacter] == 0) return 0; return 1; @@ -2032,11 +2034,10 @@ byte LilliputScript::OC_checkDelayedReactivation() { } byte LilliputScript::OC_checkTargetReached() { - debugC(1, kDebugScriptTBC, "OC_checkTargetReached()"); - Common::Point var1 = getPosFromScript(); + debugC(1, kDebugScript, "OC_checkTargetReached()"); + Common::Point pos = getPosFromScript(); - if ((_vm->_characterTargetPosX[_vm->_currentScriptCharacter] == var1.x) - && (_vm->_characterTargetPosY[_vm->_currentScriptCharacter] == var1.y)) + if (_vm->_characterTargetPos[_vm->_currentScriptCharacter] == pos) return 1; return 0; @@ -2101,7 +2102,7 @@ void LilliputScript::OC_setWord18821() { } void LilliputScript::OC_ChangeIsoMap() { - debugC(1, kDebugScriptTBC, "OC_ChangeIsoMap()"); + debugC(1, kDebugScript, "OC_ChangeIsoMap()"); Common::Point var1 = getPosFromScript(); int var2 = _currScript->readUint16LE(); @@ -2168,7 +2169,7 @@ void LilliputScript::getSpeechVariant(int speechIndex, int speechVariant) { } void LilliputScript::OC_getComputedVariantSpeech() { - debugC(1, kDebugScriptTBC, "OC_getComputedVariantSpeech()"); + debugC(1, kDebugScript, "OC_getComputedVariantSpeech()"); int tmpVal1 = getCharacterAttributesPtr()[0]; int tmpVal2 = (_currScript->readUint16LE() & 0xFF); @@ -2220,7 +2221,7 @@ void LilliputScript::OC_startSpeechIfMute() { } void LilliputScript::OC_getComputedVariantSpeechIfMute() { - debugC(1, kDebugScriptTBC, "OC_getComputedVariantSpeechIfMute()"); + debugC(1, kDebugScript, "OC_getComputedVariantSpeechIfMute()"); if (_talkingCharacter == -1) { OC_getComputedVariantSpeech(); @@ -2254,8 +2255,8 @@ void LilliputScript::OC_ComputeCharacterVariable() { computeOperation(bufPtr, oper, var3); } -void LilliputScript::OC_getRandom_type2() { - debugC(1, kDebugScript, "OC_getRandom_type2()"); +void LilliputScript::OC_setAttributeToRandom() { + debugC(1, kDebugScript, "OC_setAttributeToRandom()"); byte *bufPtr = getCharacterAttributesPtr(); int maxVal = _currScript->readUint16LE(); @@ -2267,14 +2268,13 @@ void LilliputScript::OC_setCharacterPosition() { debugC(1, kDebugScript, "OC_setCharacterPosition()"); int index = getValue1(); + assert((index >= 0) && (index < 40)); Common::Point tmpVal = getPosFromScript(); - int var2 = (tmpVal.x << 3) + 4; - int var4 = (tmpVal.y << 3) + 4; + int charPosX = (tmpVal.x << 3) + 4; + int charPosY = (tmpVal.y << 3) + 4; - assert((index >= 0) && (index < 40)); - _vm->_characterPositionX[index] = var2; - _vm->_characterPositionY[index] = var4; + _vm->_characterPos[index] = Common::Point(charPosX, charPosY); } void LilliputScript::OC_DisableCharacter() { @@ -2286,13 +2286,12 @@ void LilliputScript::OC_DisableCharacter() { if (characterIndex == _vm->_host) _viewportCharacterTarget = -1; - _vm->_characterPositionX[characterIndex] = -1; - _vm->_characterPositionY[characterIndex] = -1; + _vm->_characterPos[characterIndex] = Common::Point(-1, -1); } void LilliputScript::OC_saveAndQuit() { warning("TODO: OC_saveAndQuit"); - _vm->_soundHandler->contentFct6(); // Kill music + _vm->_soundHandler->remove(); // Kill music // TODO: Save game _vm->_shouldQuit = true; } @@ -2305,7 +2304,7 @@ void LilliputScript::OC_nSkipOpcodes() { } void LilliputScript::OC_startSpeech5() { - debugC(1, kDebugScriptTBC, "OC_startSpeech5()"); + debugC(1, kDebugScript, "OC_startSpeech5()"); bool forceReturnFl = false; checkSpeechAllowed(forceReturnFl); @@ -2317,18 +2316,18 @@ void LilliputScript::OC_startSpeech5() { } void LilliputScript::OC_resetHandleOpcodeFlag() { - debugC(1, kDebugScriptTBC, "OC_resetHandleOpcodeFlag()"); + debugC(1, kDebugScript, "OC_resetHandleOpcodeFlag()"); _vm->_handleOpcodeReturnCode = 0; } void LilliputScript::OC_deleteSavegameAndQuit() { - warning("OC_deleteSavegameAndQuit"); + warning("TODO: OC_deleteSavegameAndQuit"); _vm->_shouldQuit = true; } void LilliputScript::OC_incScriptForVal() { - debugC(1, kDebugScriptTBC, "OC_incScriptForVal()"); + debugC(1, kDebugScript, "OC_incScriptForVal()"); ++_scriptForVal; } @@ -2342,18 +2341,17 @@ void LilliputScript::OC_computeChararacterAttr() { computeOperation(tmpArr, oper, var3); } -void LilliputScript::OC_setByte18823() { - debugC(1, kDebugScriptTBC, "OC_setByte18823()"); +void LilliputScript::OC_setTextVarNumber() { + debugC(1, kDebugScript, "OC_setTextVarNumber()"); byte *tmpArr = getCharacterAttributesPtr(); - _byte18823 = *tmpArr; + _textVarNumber = *tmpArr; } void LilliputScript::OC_callScript() { debugC(1, kDebugScript, "OC_callScript()"); int index = _currScript->readUint16LE(); - int charIndex = getValue1(); _vm->setCurrentCharacter(charIndex); @@ -2389,13 +2387,12 @@ void LilliputScript::OC_setCurrentScriptCharacterPos() { debugC(1, kDebugScript, "OC_setCurrentScriptCharacterPos()"); Common::Point pos = getPosFromScript(); - _vm->_characterTargetPosX[_vm->_currentScriptCharacter] = pos.x; - _vm->_characterTargetPosY[_vm->_currentScriptCharacter] = pos.y; - _vm->_characterSubTargetPosX[_vm->_currentScriptCharacter] = -1; + _vm->_characterTargetPos[_vm->_currentScriptCharacter] = pos; + _vm->_characterSubTargetPos[_vm->_currentScriptCharacter].x = -1; } void LilliputScript::OC_initScriptFor() { - debugC(1, kDebugScriptTBC, "OC_initScriptFor()"); + debugC(1, kDebugScript, "OC_initScriptFor()"); _scriptForVal = 0; } @@ -2451,8 +2448,6 @@ void LilliputScript::OC_setCharacterCarry() { _vm->_characterCarried[index] = carriedIdx; _vm->_characterBehindDist[index] = distBehind; _vm->_characterAboveDist[index] = distAbove; - - warning("debug - OC_setCharacterCarry index %d, var1 0x%x var3 0x%x var4 0x%x", index, carriedIdx, distBehind, distAbove); } void LilliputScript::OC_dropCarried() { @@ -2478,7 +2473,7 @@ void LilliputScript::sendSignal(int16 var1, byte var2h, byte characterId, int16 if (_vm->_signalArray[index + 1] == -1) { _vm->_signalArray[index + 1] = var1; _vm->_signalArray[index + 2] = (var2h << 8) + characterId; - _vm->_signalArray[index + 0] = _vm->_word1289D + var4; + _vm->_signalArray[index + 0] = _vm->_signalTimer + var4; return; } index += 3; @@ -2506,10 +2501,10 @@ void LilliputScript::OC_sendHearSignal() { } void LilliputScript::OC_sendVarSignal() { - debugC(1, kDebugScriptTBC, "OC_sendVarSignal()"); + debugC(1, kDebugScript, "OC_sendVarSignal()"); int16 var4 = _currScript->readSint16LE(); - int16 type = getValue1(); // CHECKME- dubious + int16 type = getValue1(); byte var2h = (_currScript->readUint16LE() & 0xFF); sendSignal(type, var2h, _vm->_currentScriptCharacter, var4); @@ -2558,7 +2553,7 @@ void LilliputScript::OC_setCurrentCharacterPos() { } void LilliputScript::OC_setCurrentCharacterBehavior() { - debugC(1, kDebugScriptTBC, "OC_setCurrentCharacterBehavior()"); + debugC(1, kDebugScript, "OC_setCurrentCharacterBehavior()"); uint16 var1 = _currScript->readUint16LE(); _vm->_characterBehaviour[_vm->_currentScriptCharacter] = (var1 - 2000) & 0xFF; @@ -2581,8 +2576,8 @@ byte *LilliputScript::getCurrentCharacterVarFromScript() { return &_vm->_currentCharacterAttributes[index]; } -void LilliputScript::OC_sub17E99() { - debugC(1, kDebugScript, "OC_sub17E99()"); +void LilliputScript::OC_getList() { + debugC(1, kDebugScript, "OC_getList()"); byte *compBuf = getCurrentCharacterVarFromScript(); uint16 oper = _currScript->readUint16LE(); @@ -2590,31 +2585,31 @@ void LilliputScript::OC_sub17E99() { byte *buf = getCurrentCharacterVarFromScript(); byte var1 = buf[0]; - byte var3 = _vm->_rulesChunk11[var1 + _vm->_rulesChunk10[index]]; + byte var3 = _vm->_listArr[var1 + _vm->_listIndex[index]]; computeOperation(compBuf, oper, var3); } -void LilliputScript::OC_sub17EC5() { - debugC(1, kDebugScriptTBC, "OC_sub17EC5()"); +void LilliputScript::OC_setList() { + debugC(1, kDebugScript, "OC_setList()"); int indexChunk10 = _currScript->readUint16LE(); byte *compBuf = getCurrentCharacterVarFromScript(); - int indexChunk11 = _vm->_rulesChunk10[indexChunk10] + compBuf[0]; + int indexChunk11 = _vm->_listIndex[indexChunk10] + compBuf[0]; uint16 oper = _currScript->readUint16LE(); byte *tmpBuf = getCurrentCharacterVarFromScript(); int16 var3 = tmpBuf[0]; - computeOperation(&_vm->_rulesChunk11[indexChunk11], oper, var3); + computeOperation(&_vm->_listArr[indexChunk11], oper, var3); } Common::Point LilliputScript::getCharacterTilePos(int index) { debugC(2, kDebugScript, "getCharacterTilePos(%d)", index); - return Common::Point(_vm->_characterPositionX[index] / 8, _vm->_characterPositionY[index] / 8); + return Common::Point(_vm->_characterPos[index].x >> 3, _vm->_characterPos[index].y >> 3); } void LilliputScript::OC_setCharacterDirectionTowardsPos() { @@ -2633,8 +2628,8 @@ void LilliputScript::OC_turnCharacterTowardsAnother() { static const byte _directionsArray[] = { 0, 2, 0, 1, 3, 2, 3, 1 }; - int dx = _vm->_characterPositionX[index] - _vm->_characterPositionX[_vm->_currentScriptCharacter]; - int dy = _vm->_characterPositionY[index] - _vm->_characterPositionY[_vm->_currentScriptCharacter]; + int dx = _vm->_characterPos[index].x - _vm->_characterPos[_vm->_currentScriptCharacter].x; + int dy = _vm->_characterPos[index].y - _vm->_characterPos[_vm->_currentScriptCharacter].y; int flag = 0; if (dx < 0) { @@ -2657,7 +2652,7 @@ void LilliputScript::OC_setSeek() { int16 var = getValue1(); _characterSeek[_vm->_currentScriptCharacter] = (byte)(var & 0xFF); - _vm->_characterSubTargetPosX[_vm->_currentScriptCharacter] = -1; + _vm->_characterSubTargetPos[_vm->_currentScriptCharacter].x = -1; } void LilliputScript::OC_scrollAwayFromCharacter() { @@ -2687,7 +2682,7 @@ void LilliputScript::OC_scrollAwayFromCharacter() { } void LilliputScript::OC_skipNextVal() { - debugC(1, kDebugScriptTBC, "OC_skipNextVal()"); + debugC(1, kDebugScript, "OC_skipNextVal()"); _currScript->readUint16LE(); } @@ -2737,28 +2732,28 @@ void LilliputScript::OC_setCharacterProperties() { int16 index = getValue1(); - int16 x = _vm->_characterPositionX[index] & 0xFFF8; + int16 x = _vm->_characterPos[index].x & 0xFFF8; x += _currScript->readSint16LE(); - _vm->_characterPositionX[index] = x; + _vm->_characterPos[index].x = x; - int16 y = _vm->_characterPositionY[index] & 0xFFF8; + int16 y = _vm->_characterPos[index].y & 0xFFF8; y += _currScript->readSint16LE(); - _vm->_characterPositionY[index] = y; + _vm->_characterPos[index].y = y; _vm->_characterPosAltitude[index] = (int8)(_currScript->readUint16LE() & 0xFF); _vm->_characterDirectionArray[index] = _currScript->readUint16LE() & 0xFF; } -void LilliputScript::OC_sub1805D() { - debugC(1, kDebugScriptTBC, "OC_sub1805D()"); +void LilliputScript::OC_setMonitoredCharacter() { + debugC(1, kDebugScript, "OC_setMonitoredCharacter()"); - _word129A3 = getValue1(); + _monitoredCharacter = getValue1(); for (int i = 0; i < 4; i++) - _array129A5[i] = _currScript->readUint16LE() & 0xFF; + _monitoredAttr[i] = _currScript->readUint16LE() & 0xFF; } void LilliputScript::OC_setNewPose() { - debugC(1, kDebugScriptTBC, "OC_setNewPose()"); + debugC(1, kDebugScript, "OC_setNewPose()"); int var2 = _currScript->readUint16LE(); byte var1 = (_currScript->readUint16LE() & 0xFF); @@ -2786,7 +2781,7 @@ void LilliputScript::OC_setInterfaceHotspot() { } void LilliputScript::OC_scrollViewPort() { - debugC(1, kDebugScriptTBC, "OC_scrollViewPort()"); + debugC(1, kDebugScript, "OC_scrollViewPort()"); _viewportCharacterTarget = -1; @@ -2822,45 +2817,45 @@ void LilliputScript::OC_setCurrentCharacterAltitude() { _vm->_characterPosAltitude[_vm->_currentScriptCharacter] = (_currScript->readUint16LE() & 0xFF); } -void LilliputScript::OC_sub1817F() { - debugC(1, kDebugScript, "OC_sub1817F()"); +void LilliputScript::OC_setModePriority() { + debugC(1, kDebugScript, "OC_setModePriority()"); + + EvaluatedMode newMode; - int8 x = (int8)(_currScript->readUint16LE() & 0xFF); - int8 y = (int8)(_currScript->readUint16LE() & 0xFF); + newMode._mode = _currScript->readUint16LE() & 0xFF; + newMode._priority = _currScript->readUint16LE() & 0xFF; - sub1818B(Common::Point(x, y)); + setMode(newMode); } -void LilliputScript::sub1818B(Common::Point point) { - debugC(2, kDebugScript, "sub1818B(%d - %d)", point.x, point.y); +void LilliputScript::setMode(EvaluatedMode newMode) { + debugC(2, kDebugScript, "setMode(%d - %d)", newMode._mode, newMode._priority); - Common::Point pos = point; - for (int i = 0; i < _vm->_word1817B; i++) { - if (_array1813BPos[i].x == pos.x) { - pos.y += _array1813BPos[i].y; - if (pos.y > 0xFF) - pos.y = 0xFF; + for (int i = 0; i < _vm->_newModesEvaluatedNumber; i++) { + if (_newEvaluatedModes[i]._mode == newMode._mode) { + int newPriority = newMode._priority + _newEvaluatedModes[i]._priority; + newPriority = CLIP(newPriority, 0, 255); - _array1813BPos[i] = pos; + _newEvaluatedModes[i]._priority = newPriority; return; } } - _array1813BPos[_vm->_word1817B] = pos; - ++_vm->_word1817B; + _newEvaluatedModes[_vm->_newModesEvaluatedNumber] = newMode; + ++_vm->_newModesEvaluatedNumber; } -void LilliputScript::OC_sub181BB() { - debugC(1, kDebugScript, "OC_sub181BB()"); +void LilliputScript::OC_setComputedModePriority() { + debugC(1, kDebugScript, "OC_setComputedModePriority()"); - int8 x = (int8)(_currScript->readUint16LE() & 0xFF); + int8 mode = (int8)(_currScript->readUint16LE() & 0xFF); byte oper = _currScript->readUint16LE() & 0xFF; uint16 index = _currScript->readUint16LE(); int16 c = _vm->_currentCharacterAttributes[index]; switch (oper) { case '-': - c = - 1 - c; + c = -1 - c; break; case '>': c -= 128; @@ -2877,29 +2872,34 @@ void LilliputScript::OC_sub181BB() { case '+': break; default: - warning("OC_sub181BB: skipped oper %c", oper); + warning("OC_setComputedModePriority: skipped oper %c", oper); break; } if (c > 0xFF) - warning("OC_sub181BB- Abnormal value c = %d, should put back c &= 0xFF;", c); + warning("OC_setComputedModePriority- Abnormal value c = %d, should put back c &= 0xFF;", c); - int y = (_currScript->readSint16LE() * c) + c; - y >>= 8; - sub1818B(Common::Point(x, y)); + int priority = (_currScript->readSint16LE() * c) + c; + priority >>= 8; + + EvaluatedMode newMode; + newMode._mode = mode; + newMode._priority = priority; + + setMode(newMode); } -void LilliputScript::OC_sub18213() { - debugC(1, kDebugScript, "OC_sub18213()"); +void LilliputScript::OC_selectBestMode() { + debugC(1, kDebugScript, "OC_selectBestMode()"); uint16 var1 = _currScript->readUint16LE(); int maxValue = 0; int maxItem = var1 & 0xFF; - for (int i = 0; i < _vm->_word1817B; i++) { - if (_array1813BPos[i].y > maxValue) { - maxValue = _array1813BPos[i].y; - maxItem = _array1813BPos[i].x; + for (int i = 0; i < _vm->_newModesEvaluatedNumber; i++) { + if (_newEvaluatedModes[i]._priority > maxValue) { + maxValue = _newEvaluatedModes[i]._priority; + maxItem = _newEvaluatedModes[i]._mode; } } enableCharacterScript(_vm->_currentScriptCharacter, maxItem, _vm->_currentCharacterAttributes); @@ -2914,8 +2914,8 @@ void LilliputScript::OC_magicPuffEntrance() { _vm->_characterMagicPuffFrame[index] = 4; } -void LilliputScript::OC_sub18260() { - debugC(1, kDebugScriptTBC, "OC_sub18260()"); +void LilliputScript::OC_spawnCharacterAtPos() { + debugC(1, kDebugScript, "OC_spawnCharacterAtPos()"); int index = getValue1(); Common::Point var4 = getPosFromScript(); @@ -2943,8 +2943,8 @@ void LilliputScript::OC_sub18260() { var4 = _word1825E; } - _vm->_characterPositionX[index] = (var4.x + _viewportPos.x) * 8; - _vm->_characterPositionY[index] = (var4.y + _viewportPos.y) * 8; + _vm->_characterPos[index].x = (var4.x + _viewportPos.x) * 8; + _vm->_characterPos[index].y = (var4.y + _viewportPos.y) * 8; } void LilliputScript::OC_CharacterVariableAddOrRemoveFlag() { @@ -3032,23 +3032,23 @@ void LilliputScript::OC_setRulesBuffer2Element() { byte var1 = _currScript->readUint16LE() & 0xFF; assert((index >= 0) && (index < 40)); - _vm->_rulesBuffer2_10[index] = var1; + _vm->_characterMobility[index] = var1; } void LilliputScript::OC_setDebugFlag() { - debugC(1, kDebugScriptTBC, "OC_setDebugFlag()"); + debugC(1, kDebugScript, "OC_setDebugFlag()"); _vm->_debugFlag = 1; } -void LilliputScript::OC_setByte14837() { - debugC(1, kDebugScriptTBC, "OC_setByte14837()"); +void LilliputScript::OC_setDebugFlag2() { + debugC(1, kDebugScript, "OC_setDebugFlag2()"); - _vm->_byte14837 = 1; + _vm->_debugFlag2 = 1; } void LilliputScript::OC_waitForEvent() { - debugC(1, kDebugScriptTBC, "OC_waitForEvent()"); + debugC(1, kDebugScript, "OC_waitForEvent()"); _vm->_refreshScreenFlag = true; while (true) { @@ -3100,7 +3100,7 @@ void LilliputScript::OC_loadFileAerial() { } void LilliputScript::OC_startSpeechIfSoundOff() { - debugC(1, kDebugScriptTBC, "OC_startSpeechIfSoundOff()"); + debugC(1, kDebugScript, "OC_startSpeechIfSoundOff()"); // HACK: In the original, OC_startSpeechIfSoundOff() only calls // OC_startSpeech if sound is off. For the moment, it's always called @@ -3218,7 +3218,7 @@ void LilliputScript::OC_initGameAreaDisplay() { OC_PaletteFadeIn(); _vm->_refreshScreenFlag = false; - _vm->_soundHandler->contentFct5(); + _vm->_soundHandler->update(); } void LilliputScript::OC_displayCharacterStatBar() { @@ -3249,18 +3249,16 @@ void LilliputScript::OC_initSmallAnim() { void LilliputScript::OC_setCharacterHeroismBar() { debugC(1, kDebugScript, "OC_setCharacterHeroismBar()"); - _savedBuffer215Ptr = getCharacterAttributesPtr(); + _barAttrPtr = getCharacterAttributesPtr(); _heroismBarX = _currScript->readUint16LE(); _heroismBarBottomY = _currScript->readUint16LE(); } void LilliputScript::OC_setCharacterHome() { - debugC(1, kDebugScriptTBC, "OC_setCharacterHome()"); + debugC(1, kDebugScript, "OC_setCharacterHome()"); int index = getValue1(); - Common::Point pos = getPosFromScript(); - _vm->_characterHomePosX[index] = pos.x; - _vm->_characterHomePosY[index] = pos.y; + _vm->_characterHomePos[index] = getPosFromScript(); } void LilliputScript::OC_setViewPortCharacterTarget() { @@ -3270,16 +3268,16 @@ void LilliputScript::OC_setViewPortCharacterTarget() { } void LilliputScript::OC_showObject() { - debugC(1, kDebugScriptTBC, "OC_showObject()"); + debugC(1, kDebugScript, "OC_showObject()"); - int var1 = getValue1(); + int frameIdx = getValue1(); int posX = _currScript->readUint16LE(); int posY = _currScript->readUint16LE(); Common::Point pos = Common::Point(posX, posY); _vm->fill16x16Rect(16, pos); - int frame = _vm->_characterFrameArray[var1]; + int frame = _vm->_characterFrameArray[frameIdx]; byte* buf = _vm->_bufferMen; if (frame > 240) { @@ -3298,7 +3296,7 @@ void LilliputScript::OC_playObjectSound() { Common::Point var4 = Common::Point(0xFF, index & 0xFF); int soundId = (_currScript->readUint16LE() & 0xFF); - _vm->_soundHandler->contentFct2(soundId, _viewportPos, _characterTilePos[index], var4); + _vm->_soundHandler->play(soundId, _viewportPos, _characterTilePos[index], var4); } void LilliputScript::OC_startLocationSound() { @@ -3309,7 +3307,7 @@ void LilliputScript::OC_startLocationSound() { Common::Point var2 = _viewportPos; int var1 = (_currScript->readUint16LE() & 0xFF); - _vm->_soundHandler->contentFct2(var1, var2, var3, var4); + _vm->_soundHandler->play(var1, var2, var3, var4); } void LilliputScript::OC_stopObjectSound() { @@ -3317,7 +3315,7 @@ void LilliputScript::OC_stopObjectSound() { Common::Point var4 = Common::Point(-1, getValue1() & 0xFF); - _vm->_soundHandler->contentFct3(var4); // Stop Sound + _vm->_soundHandler->stop(var4); // Stop Sound } void LilliputScript::OC_stopLocationSound() { @@ -3325,13 +3323,13 @@ void LilliputScript::OC_stopLocationSound() { Common::Point var4 = getPosFromScript(); - _vm->_soundHandler->contentFct3(var4); + _vm->_soundHandler->stop(var4); } void LilliputScript::OC_toggleSound() { - debugC(1, kDebugScriptTBC, "OC_toggleSound()"); + debugC(1, kDebugScript, "OC_toggleSound()"); - _vm->_soundHandler->contentFct4(); + _vm->_soundHandler->toggleOnOff(); } void LilliputScript::OC_playMusic() { @@ -3343,13 +3341,13 @@ void LilliputScript::OC_playMusic() { warning("OC_playMusic: unknown value for var3"); Common::Point var3 = Common::Point(-1, -1); - _vm->_soundHandler->contentFct2(var1, var2, var3, var4); + _vm->_soundHandler->play(var1, var2, var3, var4); } void LilliputScript::OC_stopMusic() { debugC(1, kDebugScript, "OC_stopMusic()"); - _vm->_soundHandler->contentFct6(); + _vm->_soundHandler->remove(); } void LilliputScript::OC_setCharacterMapColor() { |