LILLIPUT: Some renaming, implement 7 opcodes, fix one

This commit is contained in:
Strangerke 2012-04-28 09:08:11 +02:00 committed by Eugene Sandulenko
parent b870535745
commit ba0fcb521f
2 changed files with 82 additions and 30 deletions

View file

@ -36,6 +36,7 @@ LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL)
_byte10806 = 0; _byte10806 = 0;
_byte12FE4 = 0xFF; _byte12FE4 = 0xFF;
_byte16F02 = 0; _byte16F02 = 0;
_byte16F04 = 0;
_word1855E = 0; _word1855E = 0;
_word16F00 = -1; _word16F00 = -1;
@ -108,7 +109,7 @@ byte LilliputScript::handleOpcodeType1(int curWord) {
return OC_checkSaveFlag(); return OC_checkSaveFlag();
break; break;
case 0x9: case 0x9:
return OC_sub174C8(); return OC_compByte16F04();
break; break;
case 0xA: case 0xA:
return OC_sub174D8(); return OC_sub174D8();
@ -630,15 +631,15 @@ byte LilliputScript::compareValues(byte var1, int oper, int var2) {
} }
} }
void LilliputScript::computeOperation(byte *bufPtr, int oper, int var2) { void LilliputScript::computeOperation(byte *bufPtr, int oper, int var3) {
debugC(1, kDebugScript, "computeOperation(bufPtr, %c, %d)", oper & 0xFF, var2 & 0xFF); debugC(1, kDebugScript, "computeOperation(bufPtr, %c, %d)", oper & 0xFF, var3 & 0xFF);
switch (oper & 0xFF) { switch (oper & 0xFF) {
case '=': case '=':
bufPtr[0] = var2 & 0xFF; bufPtr[0] = var3 & 0xFF;
break; break;
case '+': { case '+': {
int tmpVal = bufPtr[0] + var2; int tmpVal = bufPtr[0] + var3;
if (tmpVal > 0xFF) if (tmpVal > 0xFF)
bufPtr[0] = 0xFF; bufPtr[0] = 0xFF;
else else
@ -646,7 +647,7 @@ void LilliputScript::computeOperation(byte *bufPtr, int oper, int var2) {
} }
break; break;
case '-': { case '-': {
int tmpVal = bufPtr[0] - var2; int tmpVal = bufPtr[0] - var3;
if (tmpVal < 0) if (tmpVal < 0)
bufPtr[0] = 0; bufPtr[0] = 0;
else else
@ -654,19 +655,19 @@ void LilliputScript::computeOperation(byte *bufPtr, int oper, int var2) {
} }
break; break;
case '*': { case '*': {
int tmpVal = bufPtr[0] * var2; int tmpVal = bufPtr[0] * var3;
bufPtr[0] = tmpVal & 0xFF; bufPtr[0] = tmpVal & 0xFF;
} }
break; break;
case '/': { case '/': {
if (var2 != 0) if (var3 != 0)
bufPtr[0] /= var2; bufPtr[0] /= var3;
} }
break; break;
default: { default: {
warning("computeOperation : oper %d", oper); warning("computeOperation : oper %d", oper);
if (var2 != 0) { if (var3 != 0) {
int tmpVal = bufPtr[0] / var2; int tmpVal = bufPtr[0] / var3;
if (tmpVal < 0) if (tmpVal < 0)
bufPtr[0] = 0xFF; bufPtr[0] = 0xFF;
else else
@ -999,7 +1000,13 @@ byte LilliputScript::OC_for() {
} }
byte LilliputScript::OC_compWord18776() { byte LilliputScript::OC_compWord18776() {
warning("OC_compWord18776"); debugC(1, kDebugScript, "OC_compWord18776()");
int var1 = _currScript->readUint16LE();
if (var1 == _word18776)
return 1;
return 0; return 0;
} }
@ -1012,9 +1019,14 @@ byte LilliputScript::OC_checkSaveFlag() {
return 0; return 0;
} }
byte LilliputScript::OC_sub174C8() { byte LilliputScript::OC_compByte16F04() {
warning("OC_sub174C8"); warning("OC_compByte16F04");
return 0;
byte var1 = _byte16F04;
uint16 oper = _currScript->readUint16LE();
int16 var2 = _currScript->readUint16LE();
return compareValues(var1, oper, var2);
} }
byte LilliputScript::OC_sub174D8() { byte LilliputScript::OC_sub174D8() {
@ -1230,7 +1242,6 @@ byte LilliputScript::OC_compWord10804() {
debugC(1, kDebugScript, "OC_compWord10804()"); debugC(1, kDebugScript, "OC_compWord10804()");
byte tmpVal = getValue1(); byte tmpVal = getValue1();
if (tmpVal == _word10804) if (tmpVal == _word10804)
return 1; return 1;
@ -1238,11 +1249,22 @@ byte LilliputScript::OC_compWord10804() {
} }
byte LilliputScript::OC_sub17766() { byte LilliputScript::OC_sub17766() {
warning("OC_sub17766"); debugC(1, kDebugScript, "OC_sub17766()");
byte var1 = (_currScript->readUint16LE() & 0xFF);
if ((var1 == _array12839[_vm->_rulesBuffer2PrevIndx]) && (_array12811[_vm->_rulesBuffer2PrevIndx] != 16))
return 1;
return 0; return 0;
} }
byte LilliputScript::OC_sub17782() { byte LilliputScript::OC_sub17782() {
warning("OC_sub17782"); debugC(1, kDebugScript, "OC_sub17782()");
byte var1 = (_currScript->readUint16LE() & 0xFF);
if ((var1 == _array12839[_vm->_rulesBuffer2PrevIndx]) && (_array12811[_vm->_rulesBuffer2PrevIndx] == 16))
return 1;
return 0; return 0;
} }
@ -1605,9 +1627,9 @@ void LilliputScript::OC_sub17B03() {
byte *bufPtr = getBuffer215Ptr(); byte *bufPtr = getBuffer215Ptr();
int oper = _currScript->readUint16LE(); int oper = _currScript->readUint16LE();
int var2 = _currScript->readUint16LE(); int var3 = _currScript->readUint16LE();
computeOperation(bufPtr, oper, var2); computeOperation(bufPtr, oper, var3);
} }
void LilliputScript::OC_getRandom_type2() { void LilliputScript::OC_getRandom_type2() {
@ -1652,24 +1674,28 @@ void LilliputScript::OC_saveAndQuit() {
void LilliputScript::OC_sub17B93() { void LilliputScript::OC_sub17B93() {
debugC(1, kDebugScript, "OC_sub17B93()"); debugC(1, kDebugScript, "OC_sub17B93()");
int var1 = _currScript->readUint16LE();
int var1 = _currScript->readUint16LE();
sub17B6C(var1); sub17B6C(var1);
} }
void LilliputScript::OC_sub17E37() { void LilliputScript::OC_sub17E37() {
warning("OC_sub17E37"); warning("OC_sub17E37");
} }
void LilliputScript::OC_resetByte1714E() { void LilliputScript::OC_resetByte1714E() {
debugC(1, kDebugScript, "OC_resetByte1714E()"); debugC(1, kDebugScript, "OC_resetByte1714E()");
_vm->_byte1714E = 0; _vm->_byte1714E = 0;
} }
void LilliputScript::OC_deleteSavegameAndQuit() { void LilliputScript::OC_deleteSavegameAndQuit() {
warning("OC_deleteSavegameAndQuit"); warning("OC_deleteSavegameAndQuit");
} }
void LilliputScript::OC_incByte16F04() { void LilliputScript::OC_incByte16F04() {
debugC(1, kDebugScript, "OC_incByte16F04()"); debugC(1, kDebugScript, "OC_incByte16F04()");
_vm->_byte1714E++;
++_byte16F04;
} }
void LilliputScript::OC_sub17BA5() { void LilliputScript::OC_sub17BA5() {
@ -1677,8 +1703,8 @@ void LilliputScript::OC_sub17BA5() {
byte *tmpArr = getBuffer215Ptr(); byte *tmpArr = getBuffer215Ptr();
byte oper = (_currScript->readUint16LE() & 0xFF); byte oper = (_currScript->readUint16LE() & 0xFF);
byte var2 = getBuffer215Ptr()[0]; byte var3 = getBuffer215Ptr()[0];
computeOperation(tmpArr, oper, var2); computeOperation(tmpArr, oper, var3);
} }
void LilliputScript::OC_setByte18823() { void LilliputScript::OC_setByte18823() {
@ -1721,8 +1747,11 @@ void LilliputScript::OC_sub17BF2() {
void LilliputScript::OC_sub17ACC() { void LilliputScript::OC_sub17ACC() {
warning("OC_sub17ACC"); warning("OC_sub17ACC");
} }
void LilliputScript::OC_resetByte16F04() { void LilliputScript::OC_resetByte16F04() {
warning("OC_resetByte16F04"); debugC(1, kDebugScript, "OC_resetByte16F04()");
_byte16F04 = 0;
} }
void LilliputScript::OC_sub17AE1() { void LilliputScript::OC_sub17AE1() {
@ -1793,8 +1822,11 @@ void LilliputScript::OC_sub17CB9() {
void LilliputScript::OC_sub17CD1() { void LilliputScript::OC_sub17CD1() {
warning("OC_sub17CD1"); warning("OC_sub17CD1");
} }
void LilliputScript::OC_resetWord16EFE() { void LilliputScript::OC_resetWord16EFE() {
warning("OC_resetWord16EFE"); debugC(1, kDebugScript, "OC_resetWord16EFE()");
_vm->_word16EFE = 0xFFFF;
} }
void LilliputScript::OC_sub17CEF() { void LilliputScript::OC_sub17CEF() {
@ -1821,9 +1853,28 @@ void LilliputScript::OC_sub17E6D() {
void LilliputScript::OC_sub17E7E() { void LilliputScript::OC_sub17E7E() {
warning("OC_sub17E7E"); warning("OC_sub17E7E");
} }
void LilliputScript::OC_sub17E99() {
warning("OC_sub17E99"); byte *LilliputScript::sub173D2() {
debugC(2, kDebugScript, "sub173D2()");
int index = _currScript->readUint16LE();
return &_vm->_ptr_rulesBuffer2_15[index];
} }
void LilliputScript::OC_sub17E99() {
debugC(1, kDebugScript, "OC_sub17E99()");
byte *compBuf = sub173D2();
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);
}
void LilliputScript::OC_sub17EC5() { void LilliputScript::OC_sub17EC5() {
warning("OC_sub17EC5"); warning("OC_sub17EC5");
} }

View file

@ -84,7 +84,7 @@ private:
byte _byte10806; byte _byte10806;
byte _byte12FE4; byte _byte12FE4;
byte _byte16F02; byte _byte16F02;
byte _byte16F04;
int _word16F00; int _word16F00;
int _word10804; int _word10804;
@ -107,6 +107,7 @@ private:
void sub18B3C(int var); void sub18B3C(int var);
void sub18BE6(byte var1, int var2, int var4); void sub18BE6(byte var1, int var2, int var4);
byte *getMapPtr(int val); byte *getMapPtr(int val);
byte *sub173D2();
int getValue1(); int getValue1();
int getValue2(); int getValue2();
@ -125,7 +126,7 @@ private:
byte OC_for(); byte OC_for();
byte OC_compWord18776(); byte OC_compWord18776();
byte OC_checkSaveFlag(); byte OC_checkSaveFlag();
byte OC_sub174C8(); byte OC_compByte16F04();
byte OC_sub174D8(); byte OC_sub174D8();
byte OC_sub1750E(); byte OC_sub1750E();
byte OC_compareCoords_1(); byte OC_compareCoords_1();