GOB: Move getTotTextItemPart() from Inter_v3 to Inter_v2
This commit is contained in:
parent
f7d13415ee
commit
edacb7ada7
3 changed files with 184 additions and 184 deletions
|
@ -50,7 +50,6 @@ void Inter_v3::setupOpcodesDraw() {
|
|||
void Inter_v3::setupOpcodesFunc() {
|
||||
Inter_v2::setupOpcodesFunc();
|
||||
|
||||
OPCODEFUNC(0x1A, o3_getTotTextItemPart);
|
||||
OPCODEFUNC(0x22, o3_speakerOn);
|
||||
OPCODEFUNC(0x23, o3_speakerOff);
|
||||
OPCODEFUNC(0x32, o3_copySprite);
|
||||
|
@ -66,188 +65,6 @@ void Inter_v3::setupOpcodesGob() {
|
|||
OPCODEGOB(100, o3_wobble);
|
||||
}
|
||||
|
||||
void Inter_v3::o3_getTotTextItemPart(OpFuncParams ¶ms) {
|
||||
byte *totData;
|
||||
int16 totTextItem;
|
||||
int16 part, curPart = 0;
|
||||
int16 offX = 0, offY = 0;
|
||||
int16 collId = 0, collCmd;
|
||||
uint32 stringStartVar, stringVar;
|
||||
bool end;
|
||||
|
||||
totTextItem = _vm->_game->_script->readInt16();
|
||||
stringStartVar = _vm->_game->_script->readVarIndex();
|
||||
part = _vm->_game->_script->readValExpr();
|
||||
|
||||
stringVar = stringStartVar;
|
||||
if (part == -1) {
|
||||
warning("o3_getTotTextItemPart, part == -1");
|
||||
_vm->_draw->_hotspotText = GET_VARO_STR(stringVar);
|
||||
}
|
||||
|
||||
WRITE_VARO_UINT8(stringVar, 0);
|
||||
|
||||
TextItem *textItem = _vm->_game->_resources->getTextItem(totTextItem);
|
||||
if (!textItem)
|
||||
return;
|
||||
|
||||
totData = textItem->getData();
|
||||
|
||||
// Skip background rectangles
|
||||
while (((int16) READ_LE_UINT16(totData)) != -1)
|
||||
totData += 9;
|
||||
totData += 2;
|
||||
|
||||
while (*totData != 1) {
|
||||
switch (*totData) {
|
||||
case 2:
|
||||
case 5:
|
||||
totData++;
|
||||
offX = READ_LE_UINT16(totData);
|
||||
offY = READ_LE_UINT16(totData + 2);
|
||||
totData += 4;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case 4:
|
||||
totData += 2;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
totData++;
|
||||
|
||||
collCmd = *totData++;
|
||||
if (collCmd & 0x80) {
|
||||
collId = READ_LE_UINT16(totData);
|
||||
totData += 2;
|
||||
}
|
||||
|
||||
// Skip collision coordinates
|
||||
if (collCmd & 0x40)
|
||||
totData += 8;
|
||||
|
||||
if ((collCmd & 0x8F) && ((-collId - 1) == part)) {
|
||||
int n = 0;
|
||||
|
||||
while (1) {
|
||||
if ((*totData < 1) || (*totData > 7)) {
|
||||
if (*totData >= 32) {
|
||||
WRITE_VARO_UINT8(stringVar++, *totData++);
|
||||
n++;
|
||||
} else
|
||||
totData++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((n != 0) || (*totData == 1) ||
|
||||
(*totData == 6) || (*totData == 7)) {
|
||||
WRITE_VARO_UINT8(stringVar, 0);
|
||||
delete textItem;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (*totData) {
|
||||
case 2:
|
||||
case 5:
|
||||
totData += 5;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case 4:
|
||||
totData += 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
totData++;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
if (curPart == part) {
|
||||
WRITE_VARO_UINT8(stringVar++, 0xFF);
|
||||
WRITE_VARO_UINT16(stringVar, offX);
|
||||
WRITE_VARO_UINT16(stringVar + 2, offY);
|
||||
WRITE_VARO_UINT16(stringVar + 4,
|
||||
totData - _vm->_game->_resources->getTexts());
|
||||
WRITE_VARO_UINT8(stringVar + 6, 0);
|
||||
delete textItem;
|
||||
return;
|
||||
}
|
||||
|
||||
end = false;
|
||||
while (!end) {
|
||||
switch (*totData) {
|
||||
case 2:
|
||||
case 5:
|
||||
if (ABS(offY - READ_LE_UINT16(totData + 3)) > 1)
|
||||
end = true;
|
||||
else
|
||||
totData += 5;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
totData += 2;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
totData += totData[1] * 2 + 2;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (*totData < 32)
|
||||
end = true;
|
||||
while (*totData >= 32)
|
||||
totData++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (part >= 0)
|
||||
curPart++;
|
||||
break;
|
||||
|
||||
default:
|
||||
while (1) {
|
||||
|
||||
while (*totData >= 32)
|
||||
WRITE_VARO_UINT8(stringVar++, *totData++);
|
||||
WRITE_VARO_UINT8(stringVar, 0);
|
||||
|
||||
if (((*totData != 2) && (*totData != 5)) ||
|
||||
(ABS(offY - READ_LE_UINT16(totData + 3)) > 1)) {
|
||||
|
||||
if (curPart == part) {
|
||||
delete textItem;
|
||||
return;
|
||||
}
|
||||
|
||||
stringVar = stringStartVar;
|
||||
WRITE_VARO_UINT8(stringVar, 0);
|
||||
|
||||
while (*totData >= 32)
|
||||
totData++;
|
||||
|
||||
if (part >= 0)
|
||||
curPart++;
|
||||
break;
|
||||
|
||||
} else
|
||||
totData += 5;
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
delete textItem;
|
||||
}
|
||||
|
||||
void Inter_v3::o3_speakerOn(OpFuncParams ¶ms) {
|
||||
int16 frequency = _vm->_game->_script->readValExpr();
|
||||
int32 length = -1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue