Skip to content

Commit

Permalink
LILLIPUT: Rework _rectXMinMax and _rectYMinMax
Browse files Browse the repository at this point in the history
  • Loading branch information
Strangerke authored and sev- committed Mar 28, 2018
1 parent 4efebbb commit ed9daf2
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 34 deletions.
36 changes: 19 additions & 17 deletions engines/lilliput/lilliput.cpp
Expand Up @@ -1476,19 +1476,19 @@ void LilliputEngine::sub167EF(int index) {
}

if ((word167ED != -1) &&
(_array10999PosX[index] >= (_rectXMinMax[word167EB] >> 8)) &&
(_array10999PosX[index] <= (_rectXMinMax[word167EB] & 0xFF)) &&
(_array109C1PosY[index] >= (_rectYMinMax[word167EB] >> 8)) &&
(_array109C1PosY[index] <= (_rectYMinMax[word167EB] & 0xFF))) {
(_array10999PosX[index] >= _rectXMinMax[word167EB].min) &&
(_array10999PosX[index] <= _rectXMinMax[word167EB].max) &&
(_array109C1PosY[index] >= _rectYMinMax[word167EB].min) &&
(_array109C1PosY[index] <= _rectYMinMax[word167EB].max)) {
_array109E9PosX[index] = _rulesBuffer12Pos4[word167ED].x;
_array10A11PosY[index] = _rulesBuffer12Pos4[word167ED].y;
return;
}

_array109E9PosX[index] = _rulesBuffer12Pos4[word167EB].x;
_array10A11PosY[index] = _rulesBuffer12Pos4[word167EB].y;
int var4h = (_rectXMinMax[word167EB] >> 8);
int var4l = (_rectXMinMax[word167EB] & 0xFF);
int var4h = _rectXMinMax[word167EB].min;
int var4l = _rectXMinMax[word167EB].max;

if (var4h != var4l) {
if (_rulesBuffer12Pos4[word167EB].x == var4h) {
Expand All @@ -1503,8 +1503,8 @@ void LilliputEngine::sub167EF(int index) {
return;
}

var4h = (_rectYMinMax[word167EB] >> 8);
var4l = (_rectYMinMax[word167EB] & 0xFF);
var4h = (_rectYMinMax[word167EB].min);
var4l = (_rectYMinMax[word167EB].max);

if (var4h != var4l) {
if (_rulesBuffer12Pos4[word167EB].y == var4h) {
Expand Down Expand Up @@ -1606,13 +1606,13 @@ byte LilliputEngine::sub16A76(int indexb, int indexs) {
var1h = _word16937Pos.x;
var1l = _word16937Pos.y;

if ((var1h >= (_rectXMinMax[var2] >> 8)) && (var1h <= (_rectXMinMax[var2] & 0xFF)) && (var1l >= (_rectYMinMax[var2] >> 8)) && (var1l <= (_rectYMinMax[var2] & 0xFF)))
if ((var1h >= _rectXMinMax[var2].min) && (var1h <= _rectXMinMax[var2].max) && (var1l >= _rectYMinMax[var2].min) && (var1l <= _rectYMinMax[var2].max))
return 0;

var1h = _array109E9PosX[indexs];
var1l = _array10A11PosY[indexs];

if ((var1h >= (_rectXMinMax[var2] >> 8)) && (var1h <= (_rectXMinMax[var2] & 0xFF)) && (var1l >= (_rectYMinMax[var2] >> 8)) && (var1l <= (_rectYMinMax[var2] & 0xFF)))
if ((var1h >= _rectXMinMax[var2].min) && (var1h <= _rectXMinMax[var2].max) && (var1l >= _rectYMinMax[var2].min) && (var1l <= _rectYMinMax[var2].max))
return 0;

return 1;
Expand All @@ -1622,7 +1622,7 @@ int16 LilliputEngine::findHotspot(Common::Point pos) {
debugC(2, kDebugEngine, "findHotspot(%d, %d)", pos.x, pos.y);

for (int i = 0; i < _rectNumb; i++) {
if ((pos.x >= (_rectXMinMax[i] >> 8)) && (pos.x <= (_rectXMinMax[i] & 0xFF)) && (pos.y >= (_rectYMinMax[i] >> 8)) && (pos.y <= (_rectYMinMax[i] & 0xFF)))
if ((pos.x >= _rectXMinMax[i].min) && (pos.x <= _rectXMinMax[i].max) && (pos.y >= _rectYMinMax[i].min) && (pos.y <= _rectYMinMax[i].max))
return i;
}
return -1;
Expand All @@ -1632,7 +1632,7 @@ int16 LilliputEngine::reverseFindHotspot(Common::Point pos) {
debugC(2, kDebugEngine, "reverseFindHotspot(%d, %d)", pos.x, pos.y);

for (int i = _rectNumb - 1; i >= 0 ; i--) {
if ((pos.x >= (_rectXMinMax[i] >> 8)) && (pos.x <= (_rectXMinMax[i] & 0xFF)) && (pos.y >= (_rectYMinMax[i] >> 8)) && (pos.y <= (_rectYMinMax[i] & 0xFF)))
if ((pos.x >= _rectXMinMax[i].min) && (pos.x <= _rectXMinMax[i].max) && (pos.y >= _rectYMinMax[i].min) && (pos.y <= _rectYMinMax[i].max))
return i;
}
return -1;
Expand All @@ -1658,10 +1658,10 @@ void LilliputEngine::sub16A08(int index) {

int8 tmpIndex = 0;
for (int i = 3; i > 0; i--) {
int16 tmpVal = 0x7FFF;
int16 smallestDistance = 0x7FFF;
for (int j = 0; j < 4; j++) {
if (tmpVal > arrayDistance[j]) {
tmpVal = arrayDistance[j];
if (smallestDistance > arrayDistance[j]) {
smallestDistance = arrayDistance[j];
tmpIndex = j;
}
}
Expand Down Expand Up @@ -2697,8 +2697,10 @@ void LilliputEngine::loadRules() {
uint16 tmpVal;

for (int i = 0; i < _rectNumb; i++) {
_rectXMinMax[i] = f.readUint16LE();
_rectYMinMax[i] = f.readUint16LE();
_rectXMinMax[i].min = (int16)f.readByte();
_rectXMinMax[i].max = (int16)f.readByte();
_rectYMinMax[i].min = (int16)f.readByte();
_rectYMinMax[i].max = (int16)f.readByte();
tmpVal = f.readUint16LE();
_rulesBuffer12Pos3[i] = Common::Point(tmpVal >> 8, tmpVal & 0xFF);
tmpVal = f.readUint16LE();
Expand Down
9 changes: 7 additions & 2 deletions engines/lilliput/lilliput.h
Expand Up @@ -82,6 +82,11 @@ struct SmallAnim {
int16 _frameIndex[8];
};

struct MinMax {
int16 min;
int16 max;
};

class LilliputEngine : public Engine {
public:
LilliputEngine(OSystem *syst, const LilliputGameDescription *gd);
Expand Down Expand Up @@ -190,8 +195,8 @@ class LilliputEngine : public Engine {
int16 *_rulesChunk10;
byte *_rulesChunk11;
int16 _rectNumb;
int16 _rectXMinMax[40];
int16 _rectYMinMax[40];
MinMax _rectXMinMax[40];
MinMax _rectYMinMax[40];
Common::Point _rulesBuffer12Pos3[40];
Common::Point _rulesBuffer12Pos4[40];
int _interfaceHotspotNumb;
Expand Down
29 changes: 15 additions & 14 deletions engines/lilliput/script.cpp
Expand Up @@ -25,6 +25,7 @@
#include "common/debug.h"

#include "common/system.h"
#include <climits>

namespace Lilliput {

Expand Down Expand Up @@ -466,7 +467,7 @@ void LilliputScript::handleOpcodeType2(int curWord) {
OC_enableCharacterScript();
break;
case 0x4A:
OC_sub18387();
OC_setRulesBuffer2Element();
break;
case 0x4B:
OC_setDebugFlag();
Expand Down Expand Up @@ -684,7 +685,7 @@ static const OpCode opCodes2[] = {
/* 0x47 */ { "OC_setArray122C1", 1, kImmediateValue, kNone, kNone, kNone, kNone },
/* 0x48 */ { "OC_sub18367", 0, kNone, kNone, kNone, kNone, kNone },
/* 0x49 */ { "OC_enableCharacterScript", 2, kGetValue1, kImmediateValue, kNone, kNone, kNone },
/* 0x4a */ { "OC_sub18387", 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 },
/* 0x4d */ { "OC_waitForEvent", 0, kNone, kNone, kNone, kNone, kNone },
Expand Down Expand Up @@ -1537,11 +1538,11 @@ byte LilliputScript::OC_compareCoords_1() {
int index = _currScript->readUint16LE();
assert(index < 40);

int16 var3 = _vm->_rectXMinMax[index];
int16 var4 = _vm->_rectYMinMax[index];
MinMax xMinMax = _vm->_rectXMinMax[index];
MinMax yMinMax = _vm->_rectYMinMax[index];
Common::Point var1 = _vm->_currentScriptCharacterPos;

if ((var1.x < (var3 >> 8)) || (var1.x > (var3 & 0xFF)) || (var1.y < (var4 >> 8)) || (var1.y > (var4 & 0xFF)))
if ((var1.x < xMinMax.min) || (var1.x > xMinMax.max) || (var1.y < yMinMax.min) || (var1.y > yMinMax.max))
return 0;

return 1;
Expand All @@ -1554,10 +1555,10 @@ byte LilliputScript::OC_compareCoords_2() {
int16 index = getValue1();
Common::Point var1 = Common::Point(_characterTilePosX[index], _characterTilePosY[index]);
index = _currScript->readUint16LE();
uint16 var3 = _vm->_rectXMinMax[index];
uint16 var4 = _vm->_rectYMinMax[index];
MinMax xMinMax = _vm->_rectXMinMax[index];
MinMax yMinMax = _vm->_rectYMinMax[index];

if ((var1.x < (var3 >> 8)) || (var1.x > (var3 & 0xFF)) || (var1.y < (var4 >> 8)) || (var1.y > (var4 & 0xFF)))
if ((var1.x < xMinMax.min) || (var1.x > xMinMax.max) || (var1.y < yMinMax.min) || (var1.y > yMinMax.max))
return 0;
return 1;
}
Expand Down Expand Up @@ -2947,7 +2948,7 @@ void LilliputScript::OC_sub18260() {
byte *isoMapBuf = getMapPtr(pt);

if (isoMapBuf[1] != 0xFF) {
int byte1825D = 255;
int minVal = INT_MAX;
for (int var2 = 7; var2 >= 0; var2--) {
for (int var3 = 7; var3 >= 0; var3--) {
Common::Point(_viewportPos.x + var2, _viewportPos.y + var3);
Expand All @@ -2956,8 +2957,8 @@ void LilliputScript::OC_sub18260() {
if (isoMapBuf[1] == 0xFF) {
int x = abs(var2 - var4.x);
int y = abs(var3 - var4.y);
if (x + y < byte1825D) {
byte1825D = x + y;
if (x + y < minVal) {
minVal = x + y;
_word1825E = Common::Point(var2, var3);
}
}
Expand Down Expand Up @@ -3048,13 +3049,13 @@ void LilliputScript::OC_enableCharacterScript() {
enableCharacterScript(index, var2, _vm->getCharacterVariablesPtr(index * 32));
}

void LilliputScript::OC_sub18387() {
debugC(1, kDebugScriptTBC, "OC_sub18387()");
void LilliputScript::OC_setRulesBuffer2Element() {
debugC(1, kDebugScript, "OC_setRulesBuffer2Element()");

int index = getValue1();
byte var1 = _currScript->readUint16LE() & 0xFF;

assert(index < 40);
assert((index >= 0) && (index < 40));
_vm->_rulesBuffer2_10[index] = var1;
}

Expand Down
2 changes: 1 addition & 1 deletion engines/lilliput/script.h
Expand Up @@ -276,7 +276,7 @@ class LilliputScript {
void OC_setArray122C1();
void OC_sub18367();
void OC_enableCharacterScript();
void OC_sub18387();
void OC_setRulesBuffer2Element();
void OC_setDebugFlag();
void OC_setByte14837();
void OC_waitForEvent();
Expand Down

0 comments on commit ed9daf2

Please sign in to comment.