LILLIPUT: Implement some functions related to string display
This commit is contained in:
parent
6dfec1f58e
commit
dd81316528
4 changed files with 194 additions and 12 deletions
|
@ -509,6 +509,71 @@ void LilliputEngine::displayFunction10() {
|
||||||
displayFunction4();
|
displayFunction4();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LilliputEngine::sub15A4C(int &vgaIndex, byte *srcBuf, int &bufIndex) {
|
||||||
|
debugC(2, kDebugEngine, "sub15A4C()");
|
||||||
|
|
||||||
|
int var3 = 0;
|
||||||
|
int var1;
|
||||||
|
int bckIndex = bufIndex;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
var1 = srcBuf[bufIndex];
|
||||||
|
if ((var1 == 0) || (var1 == '|'))
|
||||||
|
break;
|
||||||
|
|
||||||
|
++bufIndex;
|
||||||
|
++var3;
|
||||||
|
}
|
||||||
|
|
||||||
|
var1 = (0x3D - var3) < 1;
|
||||||
|
vgaIndex += var1;
|
||||||
|
|
||||||
|
bufIndex = bckIndex;
|
||||||
|
for (;;) {
|
||||||
|
var1 = srcBuf[bufIndex];
|
||||||
|
++bufIndex;
|
||||||
|
if ((var1 == 0) || (var1 == '|'))
|
||||||
|
break;
|
||||||
|
|
||||||
|
displayChar(vgaIndex, srcBuf[bufIndex]);
|
||||||
|
vgaIndex += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void LilliputEngine::displayFunction11(byte *buf) {
|
||||||
|
debugC(2, kDebugEngine, "displayFunction11(%s)", buf);
|
||||||
|
|
||||||
|
displayFunction5();
|
||||||
|
|
||||||
|
int vgaIndex = 70;
|
||||||
|
int bufIndex = 0;
|
||||||
|
|
||||||
|
byte _byte15A0C = 0;
|
||||||
|
int var1;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
var1 = buf[bufIndex];
|
||||||
|
++bufIndex;
|
||||||
|
if (var1 == 0) {
|
||||||
|
vgaIndex += (4 * 320);
|
||||||
|
break;
|
||||||
|
} else if (var1 == 0x7C) {
|
||||||
|
_byte15A0C = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bufIndex = 0;
|
||||||
|
sub15A4C(vgaIndex, buf, bufIndex);
|
||||||
|
if (_byte15A0C == 1) {
|
||||||
|
vgaIndex += (8 * 320);
|
||||||
|
sub15A4C(vgaIndex, buf, bufIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
displayFunction4();
|
||||||
|
}
|
||||||
|
|
||||||
void LilliputEngine::displayFunction12() {
|
void LilliputEngine::displayFunction12() {
|
||||||
debugC(1, kDebugEngine, "displayFunction12()");
|
debugC(1, kDebugEngine, "displayFunction12()");
|
||||||
|
|
||||||
|
@ -1209,10 +1274,10 @@ int LilliputEngine::sub16799(int param1, int index) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LilliputEngine::sub18A3E(byte param1) {
|
void LilliputEngine::addCharToBuf(byte character) {
|
||||||
debugC(2, kDebugEngine, "sub18A3E(%d)", param1);
|
debugC(2, kDebugEngine, "addCharToBuf(%c)", character);
|
||||||
|
|
||||||
_displayStringBuf[_displayStringIndex] = param1;
|
_displayStringBuf[_displayStringIndex] = character;
|
||||||
if (_displayStringIndex < 158)
|
if (_displayStringIndex < 158)
|
||||||
++_displayStringIndex;
|
++_displayStringIndex;
|
||||||
}
|
}
|
||||||
|
@ -1237,10 +1302,10 @@ void LilliputEngine::prepareGoldAmount(int param1) {
|
||||||
byte tmpVal = count + 0x30;
|
byte tmpVal = count + 0x30;
|
||||||
|
|
||||||
if (i == 4)
|
if (i == 4)
|
||||||
sub18A3E(tmpVal);
|
addCharToBuf(tmpVal);
|
||||||
else if ((count != 0) || (!hideZeros)) {
|
else if ((count != 0) || (!hideZeros)) {
|
||||||
hideZeros = false;
|
hideZeros = false;
|
||||||
sub18A3E(tmpVal);
|
addCharToBuf(tmpVal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,6 +222,7 @@ public:
|
||||||
void displayFunction8();
|
void displayFunction8();
|
||||||
void displayFunction9();
|
void displayFunction9();
|
||||||
void displayFunction10();
|
void displayFunction10();
|
||||||
|
void displayFunction11(byte *buf);
|
||||||
void displayFunction12();
|
void displayFunction12();
|
||||||
void displayFunction13(byte *buf, int var1, int var2, int var3);
|
void displayFunction13(byte *buf, int var1, int var2, int var3);
|
||||||
void displayFunction14();
|
void displayFunction14();
|
||||||
|
@ -241,7 +242,7 @@ public:
|
||||||
void renderCharacters(byte *buf, int x, int y);
|
void renderCharacters(byte *buf, int x, int y);
|
||||||
int sub16799(int param1, int index);
|
int sub16799(int param1, int index);
|
||||||
int sub16B0C(int param1, int param2);
|
int sub16B0C(int param1, int param2);
|
||||||
void sub18A3E(byte param1);
|
void addCharToBuf(byte character);
|
||||||
void prepareGoldAmount(int param1);
|
void prepareGoldAmount(int param1);
|
||||||
void sub12F37();
|
void sub12F37();
|
||||||
int sub16675(int idx, int var1);
|
int sub16675(int idx, int var1);
|
||||||
|
@ -263,6 +264,7 @@ public:
|
||||||
void sub131FC(int var2, int var4);
|
void sub131FC(int var2, int var4);
|
||||||
void sub1546F(byte displayX, byte displayY);
|
void sub1546F(byte displayX, byte displayY);
|
||||||
void sub15498(byte x, byte y, int var2);
|
void sub15498(byte x, byte y, int var2);
|
||||||
|
void sub15A4C(int &vgaIndex, byte *srcBuf, int &bufIndex);
|
||||||
|
|
||||||
void initGame(const LilliputGameDescription *gd);
|
void initGame(const LilliputGameDescription *gd);
|
||||||
byte *loadVGA(Common::String filename, bool loadPal);
|
byte *loadVGA(Common::String filename, bool loadPal);
|
||||||
|
|
|
@ -37,7 +37,10 @@ LilliputScript::LilliputScript(LilliputEngine *vm) : _vm(vm), _currScript(NULL)
|
||||||
_byte12FE4 = 0xFF;
|
_byte12FE4 = 0xFF;
|
||||||
_byte16F02 = 0;
|
_byte16F02 = 0;
|
||||||
_byte16F04 = 0;
|
_byte16F04 = 0;
|
||||||
|
_byte1881A = 0;
|
||||||
|
_byte18823 = 0;
|
||||||
|
_byte1881E = 3;
|
||||||
|
_byte1881D = 0;
|
||||||
_word1855E = 0;
|
_word1855E = 0;
|
||||||
_word16F00 = -1;
|
_word16F00 = -1;
|
||||||
_viewportCharacterTarget = -1;
|
_viewportCharacterTarget = -1;
|
||||||
|
@ -933,8 +936,116 @@ void LilliputScript::sub17D40(bool &forceReturnFl) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LilliputScript::sub189F5() {
|
||||||
|
debugC(2, kDebugScript, "sub189F5()");
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
int var2 = 0x100;
|
||||||
|
int var1;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
var1 = _vm->_displayStringBuf[index];
|
||||||
|
if (var1 == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (var1 == '|') {
|
||||||
|
var2 &= 0xFF;
|
||||||
|
++var2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var2 += 0x100;
|
||||||
|
if ((var2 >> 8) < 61)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((var2 & 0xFF) == 1) {
|
||||||
|
_vm->_displayStringBuf[index - 1] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
--index;
|
||||||
|
while (_vm->_displayStringBuf[index] != ' ')
|
||||||
|
--index;
|
||||||
|
|
||||||
|
_vm->_displayStringBuf[index] = '|';
|
||||||
|
++var2;
|
||||||
|
var2 &= 0xFF;
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LilliputScript::sub189B8() {
|
||||||
|
debugC(2, kDebugScript, "sub189B8()");
|
||||||
|
|
||||||
|
sub189F5();
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
if (_vm->_displayStringBuf[index] == 0)
|
||||||
|
break;
|
||||||
|
++index;
|
||||||
|
}
|
||||||
|
|
||||||
|
index /= _byte1881E;
|
||||||
|
index += 4;
|
||||||
|
_byte1881D = index;
|
||||||
|
_vm->displayFunction10();
|
||||||
|
_vm->displayFunction11(_vm->_displayStringBuf);
|
||||||
|
}
|
||||||
|
|
||||||
void LilliputScript::sub18A56(byte *buf) {
|
void LilliputScript::sub18A56(byte *buf) {
|
||||||
warning("TODO: sub18A56(buf)");
|
debugC(2, kDebugScript, "sub18A56(buf)");
|
||||||
|
|
||||||
|
static const char *nounsArrayPtr = "I am |You are |you are |hou art |in the |is the |is a |in a |To the |to the |by |going |here |The|the|and |some |build|not |way|I |a |an |from |of |him|her|by |his |ing |tion|have |you|I''ve |can''t |up |to |he |she |down |what|What|with|are |and|ent|ian|ome|ed |me|my|ai|it|is|of|oo|ea|er|es|th|we|ou|ow|or|gh|go|er|st|ee|th|sh|ch|ct|on|ly|ng|nd|nt|ty|ll|le|de|as|ie|in|ss|''s |''t |re|gg|tt|pp|nn|ay|ar|wh|";
|
||||||
|
|
||||||
|
_vm->_displayStringIndex = 0;
|
||||||
|
_byte1881A = 0;
|
||||||
|
int index = 0;
|
||||||
|
byte var1 = 0;
|
||||||
|
for (;;) {
|
||||||
|
var1 = buf[index];
|
||||||
|
++index;
|
||||||
|
if (var1 == ']')
|
||||||
|
var1 = 0;
|
||||||
|
|
||||||
|
if (var1 < 0x80) {
|
||||||
|
if (var1 == '@') {
|
||||||
|
var1 = buf[index];
|
||||||
|
++index;
|
||||||
|
if (var1 == '#') {
|
||||||
|
_vm->prepareGoldAmount(_byte18823);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_vm->addCharToBuf(var1);
|
||||||
|
if (var1 == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int nounIndex = 0;
|
||||||
|
byte var3 = 0xFF - var1;
|
||||||
|
for (int i = 0; i < var3; i++) {
|
||||||
|
for (;;) {
|
||||||
|
var1 = nounsArrayPtr[nounIndex];
|
||||||
|
++nounIndex;
|
||||||
|
|
||||||
|
if (var1 == '|')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
var1 = nounsArrayPtr[nounIndex];
|
||||||
|
++nounIndex;
|
||||||
|
|
||||||
|
if (var1 == '|')
|
||||||
|
break;
|
||||||
|
|
||||||
|
_vm->addCharToBuf(var1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub189B8();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LilliputScript::sub18B3C(int var) {
|
void LilliputScript::sub18B3C(int var) {
|
||||||
|
@ -1729,8 +1840,8 @@ byte LilliputScript::OC_sub179C2() {
|
||||||
debugC(1, kDebugScript, "OC_sub179C2()");
|
debugC(1, kDebugScript, "OC_sub179C2()");
|
||||||
int var1 = getValue2();
|
int var1 = getValue2();
|
||||||
|
|
||||||
if (_vm->_array10999[_vm->_rulesBuffer2PrevIndx] == var1 >> 8
|
if ((_vm->_array10999[_vm->_rulesBuffer2PrevIndx] == (var1 >> 8))
|
||||||
&& _vm->_array109C1[_vm->_rulesBuffer2PrevIndx] == var1 & 0xFF)
|
&& (_vm->_array109C1[_vm->_rulesBuffer2PrevIndx] == (var1 & 0xFF)))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -85,6 +85,10 @@ private:
|
||||||
byte _byte12FE4;
|
byte _byte12FE4;
|
||||||
byte _byte16F02;
|
byte _byte16F02;
|
||||||
byte _byte16F04;
|
byte _byte16F04;
|
||||||
|
byte _byte1881A;
|
||||||
|
byte _byte18823;
|
||||||
|
byte _byte1881E;
|
||||||
|
byte _byte1881D;
|
||||||
|
|
||||||
int _word16F00;
|
int _word16F00;
|
||||||
int _word10804;
|
int _word10804;
|
||||||
|
@ -95,8 +99,6 @@ private:
|
||||||
byte handleOpcodeType1(int curWord);
|
byte handleOpcodeType1(int curWord);
|
||||||
void handleOpcodeType2(int curWord);
|
void handleOpcodeType2(int curWord);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void sub1863B();
|
void sub1863B();
|
||||||
void sub185ED(byte index, byte subIndex);
|
void sub185ED(byte index, byte subIndex);
|
||||||
void sub185B4_display();
|
void sub185B4_display();
|
||||||
|
@ -112,6 +114,8 @@ private:
|
||||||
byte *sub173D2();
|
byte *sub173D2();
|
||||||
void sub171AF(int var1, int var2, int var4);
|
void sub171AF(int var1, int var2, int var4);
|
||||||
void sub18B7C(int var1, int var3);
|
void sub18B7C(int var1, int var3);
|
||||||
|
void sub189B8();
|
||||||
|
void sub189F5();
|
||||||
|
|
||||||
int getValue1();
|
int getValue1();
|
||||||
int getValue2();
|
int getValue2();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue