LILLIPUT: Some renaming, implement 3 missing opcodes

This commit is contained in:
Strangerke 2012-05-16 17:56:46 +02:00 committed by Eugene Sandulenko
parent 2d88b963a9
commit 127f73a1ec
4 changed files with 61 additions and 45 deletions

View file

@ -132,7 +132,6 @@ LilliputEngine::LilliputEngine(OSystem *syst, const LilliputGameDescription *gd)
_scriptHandler = new LilliputScript(this);
_soundHandler = new LilliputSound(this);
_byte16939 = 0;
_byte1714E = 0;
_byte12FCE = 0;
_byte129A0 = 0xFF;
@ -1510,38 +1509,39 @@ void LilliputEngine::sub167EF(int index) {
void LilliputEngine::sub1693A(int index) {
debugC(2, kDebugEngineTBC, "sub1693A(%d)", index);
static const int16 _array1692F[4] = {4, -256, 256, -4};
static const int16 mapArrayMove[4] = {4, -256, 256, -4};
_word16937Pos = Common::Point(_scriptHandler->_array16123PosX[index], _scriptHandler->_array1614BPosY[index]);
sub16A08(index);
int var2 = (_characterDirectionArray[index] ^ 3);
// initialized by sub16A08, values: [0, 6[
_array1692B[var2] += 0xF8;
_byte16939 = 0;
byte byte16939 = 0;
int mapIndex = ((((_word16937Pos.y << 8) >> 2) + _word16937Pos.x) << 2);
int subMapIndex = 0;
int mapIndexDiff = 0;
int retVal = 0;
for (int i = 3; i >= 0; i--) {
subMapIndex = _array1692F[i];
if (((_bufferIsoMap[mapIndex + subMapIndex + 3] & _array16C54[i]) != 0) && ((_bufferIsoMap[mapIndex + 3] & _array16C58[i]) != 0)) {
if ((_bufferIsoMap[mapIndex + subMapIndex + 3] & 0x80) != 0) {
mapIndexDiff = mapArrayMove[i];
if (((_bufferIsoMap[mapIndex + mapIndexDiff + 3] & _array16C54[i]) != 0) && ((_bufferIsoMap[mapIndex + 3] & _array16C58[i]) != 0)) {
if ((_bufferIsoMap[mapIndex + mapIndexDiff + 3] & 0x80) != 0) {
if (sub16A76(i, index) != 0)
_array1692B[i] += 0xEC;
int tmpVal = ((_rulesBuffer2_10[index] & 7) ^ 7);
retVal = _rulesChunk9[_bufferIsoMap[mapIndex + subMapIndex]];
retVal = _rulesChunk9[_bufferIsoMap[mapIndex + mapIndexDiff]];
tmpVal &= retVal;
if (tmpVal == 0)
continue;
}
}
_array1692B[i] = 0x9E;
++_byte16939;
++byte16939;
}
if (_byte16939 != 0)
if (byte16939 != 0)
_array1692B[_characterDirectionArray[index]] += 3;
int tmpVal = 0x9D;
@ -1609,29 +1609,30 @@ int LilliputEngine::reverseFindHotspot(Common::Point pos) {
void LilliputEngine::sub16A08(int index) {
debugC(2, kDebugEngineTBC, "sub16A08(%d)", index);
static const char _array169F8[4] = {1, 0, 0, -1};
static const char _array169FC[4] = {0, -1, 1, 0};
static const char arrayMoveX[4] = {1, 0, 0, -1};
static const char arrayMoveY[4] = {0, -1, 1, 0};
int _array16A00[4];
int arrayDistance[4];
for (int i = 3; i >= 0; i--) {
int16 var1h = _word16937Pos.x + _array169F8[i] - _array109E9PosX[index];
int16 var1l = _word16937Pos.y + _array169FC[i] - _array10A11PosY[index];
_array16A00[i] = (var1l * var1l) + (var1h * var1h);
int16 var1h = _word16937Pos.x + arrayMoveX[i] - _array109E9PosX[index];
int16 var1l = _word16937Pos.y + arrayMoveY[i] - _array10A11PosY[index];
arrayDistance[i] = (var1l * var1l) + (var1h * var1h);
}
_array1692B[0] = 0;
_array1692B[2] = 0;
for (int i = 0; i < 4; i++)
_array1692B[i] = 0;
int8 tmpIndex = 0;
for (int i = 6; i > 0; i--) {
int tmpVal = 0x7FFF;
int tmpIndex = 0;
int16 tmpVal = 0x7FFF;
for (int j = 0; j < 4; j++) {
if (tmpVal > _array16A00[j]) {
tmpVal = _array16A00[j];
if (tmpVal > arrayDistance[j]) {
tmpVal = arrayDistance[j];
tmpIndex = j;
}
}
_array16A00[tmpIndex] = 0x7FFF;
arrayDistance[tmpIndex] = 0x7FFF;
_array1692B[tmpIndex] = i;
}
}

View file

@ -112,7 +112,6 @@ public:
byte _byte15EAD;
byte _debugFlag; // Mostly useless, as the associated functions are empty
byte _byte14837; // Unused byte, set by an opcode
byte _byte16939;
byte _array147D1[3];
byte _array1692B[4];

View file

@ -131,7 +131,7 @@ byte LilliputScript::handleOpcodeType1(int curWord) {
return OC_CompareDistanceFromCharacterToPositionWith();
break;
case 0xF:
return OC_sub1759E();
return OC_compareRandomCharacterId();
break;
case 0x10:
return OC_IsCurrentCharacterIndex();
@ -572,7 +572,7 @@ static const OpCode opCodes1[] = {
{ "OC_compareCoords_1", 1, kImmediateValue, kNone, kNone, kNone, kNone },
{ "OC_compareCoords_2", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone },
{ "OC_CompareDistanceFromCharacterToPositionWith", 3, kgetPosFromScript, kCompareOperation, kImmediateValue, kNone, kNone },
{ "OC_sub1759E", 3, kGetValue1, kCompareOperation, kImmediateValue, kNone, kNone },
{ "OC_compareRandomCharacterId", 3, kGetValue1, kCompareOperation, kImmediateValue, kNone, kNone },
{ "OC_IsCurrentCharacterIndex", 1, kGetValue1, kNone, kNone, kNone, kNone },
{ "OC_sub175C8", 2, kImmediateValue, kGetValue1, kNone, kNone, kNone },
{ "OC_sub17640", 2, kImmediateValue, kGetValue1, kNone, kNone, kNone },
@ -1493,13 +1493,12 @@ byte LilliputScript::OC_checkSaveFlag() {
}
byte LilliputScript::OC_compByte16F04() {
warning("OC_compByte16F04");
debugC(1, kDebugScriptTBC, "OC_compByte16F04()");
byte var1 = _byte16F04;
uint16 oper = _currScript->readUint16LE();
int16 var2 = _currScript->readUint16LE();
return compareValues(var1, oper, var2);
return compareValues(_byte16F04, oper, var2);
}
byte LilliputScript::OC_sub174D8() {
@ -1577,6 +1576,7 @@ byte LilliputScript::OC_compareCoords_2() {
byte LilliputScript::OC_CompareDistanceFromCharacterToPositionWith() {
debugC(1, kDebugScriptTBC, "OC_CompareDistanceFromCharacterToPositionWith()");
Common::Point var1 = getPosFromScript();
Common::Point pos = _vm->_currentScriptCharacterPos;
@ -1589,13 +1589,19 @@ byte LilliputScript::OC_CompareDistanceFromCharacterToPositionWith() {
int dist = dx + dy;
uint16 operation = _currScript->readUint16LE();
int16 var2 = _currScript->readUint16LE();
int16 var2 = _currScript->readSint16LE();
return compareValues(dist, operation, var2);
}
byte LilliputScript::OC_sub1759E() {
warning("OC_sub1759E");
return 0;
byte LilliputScript::OC_compareRandomCharacterId() {
debugC(1, kDebugScriptTBC, "OC_compareRandomCharacterId()");
byte *tmpArr = getCharacterVariablePtr();
_byte16F02 = _vm->_rnd->getRandomNumber(tmpArr[0] + 1);
uint16 oper = _currScript->readUint16LE();
int16 var2 = _currScript->readSint16LE();
return compareValues(_byte16F02, oper, var2);
}
byte LilliputScript::OC_IsCurrentCharacterIndex() {
@ -2309,7 +2315,15 @@ void LilliputScript::OC_sub17B93() {
}
void LilliputScript::OC_sub17E37_speech4() {
warning("OC_sub17E37_speech4");
debugC(1, kDebugScriptTBC, "OC_sub17E37_speech4()");
bool forceReturnFl = false;
sub17D40(forceReturnFl);
if (forceReturnFl)
return;
_talkingCharacter = _vm->_currentScriptCharacter;
sub18B3C(5);
}
void LilliputScript::OC_resetByte1714E() {
@ -2588,17 +2602,19 @@ void LilliputScript::OC_sub17E99() {
}
void LilliputScript::OC_sub17EC5() {
//debugC(1, kDebugScriptTBC, "OC_sub17EC5()");
warning("OC_sub17EC5");
/*byte *compBuf = sub173D2();
debugC(1, kDebugScriptTBC, "OC_sub17EC5()");
int indexChunk10 = _currScript->readUint16LE();
byte *compBuf = sub173D2();
int indexChunk11 = _vm->_rulesChunk10[indexChunk10] + compBuf[0];
int oper = _currScript->readUint16LE();
int index = _currScript->readUint16LE();
byte *buf = sub173D2();
byte var1 = buf[0];
byte var3 = _vm->_rulesChunk11[var1 + _vm->_rulesChunk10[index]];
computeOperation(compBuf, oper, var3);*/
byte *tmpBuf = sub173D2();
int var3 = tmpBuf[0];
computeOperation(&_vm->_rulesChunk11[indexChunk11], oper, var3);
}
Common::Point LilliputScript::getCharacterTilePos(int index) {

View file

@ -161,7 +161,7 @@ private:
byte OC_compareCoords_1();
byte OC_compareCoords_2();
byte OC_CompareDistanceFromCharacterToPositionWith();
byte OC_sub1759E();
byte OC_compareRandomCharacterId();
byte OC_IsCurrentCharacterIndex();
byte OC_sub175C8();
byte OC_sub17640();