SCUMM: special cases for indy4
This commit is contained in:
parent
f6e859800d
commit
5e26fbdf9a
1 changed files with 70 additions and 21 deletions
|
@ -602,11 +602,12 @@ void ScummEngine::CHARSET_1() {
|
||||||
|
|
||||||
_charset->addLinebreaks(0, _charsetBuffer + _charsetBufPos, 0, maxwidth);
|
_charset->addLinebreaks(0, _charsetBuffer + _charsetBufPos, 0, maxwidth);
|
||||||
}
|
}
|
||||||
if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
// if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
||||||
_nextLeft = (_screenWidth - _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos)) - _nextLeft;
|
// _nextLeft = (_screenWidth - _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos)) - _nextLeft;
|
||||||
}
|
// }
|
||||||
if (_charset->_center) {
|
if (_charset->_center) {
|
||||||
// warning("CENTER");
|
// warning("CENTER");
|
||||||
|
//_nextLeft = _midLeft;
|
||||||
_nextLeft -= _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos) / 2;
|
_nextLeft -= _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos) / 2;
|
||||||
if (_nextLeft < 0)
|
if (_nextLeft < 0)
|
||||||
_nextLeft = _game.version >= 6 ? _string[0].xpos : 0;
|
_nextLeft = _game.version >= 6 ? _string[0].xpos : 0;
|
||||||
|
@ -616,7 +617,8 @@ void ScummEngine::CHARSET_1() {
|
||||||
// char buffy[30];
|
// char buffy[30];
|
||||||
// sprintf(buffy, "%d-%d", _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos), _screenWidth);
|
// sprintf(buffy, "%d-%d", _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos), _screenWidth);
|
||||||
// warning(buffy);
|
// warning(buffy);
|
||||||
// _nextLeft = _screenWidth - _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos) - _nextLeft;
|
//_midLeft = _nextLeft;
|
||||||
|
//_charset->_left = _screenWidth - _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos) - _nextLeft;
|
||||||
}
|
}
|
||||||
|
|
||||||
_charset->_disableOffsX = _charset->_firstChar = !_keepText;
|
_charset->_disableOffsX = _charset->_firstChar = !_keepText;
|
||||||
|
@ -626,6 +628,9 @@ void ScummEngine::CHARSET_1() {
|
||||||
if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
||||||
int ll = 0;
|
int ll = 0;
|
||||||
char* ltext = (char*)_charsetBuffer + _charsetBufPos;
|
char* ltext = (char*)_charsetBuffer + _charsetBufPos;
|
||||||
|
if (_game.id == GID_INDY4 && ltext[ll] == 127) {
|
||||||
|
ll++;
|
||||||
|
}
|
||||||
while (ltext[ll] == -1) {
|
while (ltext[ll] == -1) {
|
||||||
ll += 4;
|
ll += 4;
|
||||||
}
|
}
|
||||||
|
@ -688,7 +693,7 @@ void ScummEngine::CHARSET_1() {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// warning("REVERSED");
|
// warning("REVERSED");
|
||||||
// for (int u = 0; u < strlen(text); u++) {
|
// for (int u = 0; u < strlen(text); u++) {
|
||||||
|
@ -732,6 +737,7 @@ void ScummEngine::CHARSET_1() {
|
||||||
break; // FIXME: Is this necessary? Only would be relevant for v0 games
|
break; // FIXME: Is this necessary? Only would be relevant for v0 games
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// warning("SETTING");
|
||||||
_charset->_left = _nextLeft;
|
_charset->_left = _nextLeft;
|
||||||
_charset->_top = _nextTop;
|
_charset->_top = _nextTop;
|
||||||
|
|
||||||
|
@ -770,6 +776,7 @@ void ScummEngine::CHARSET_1() {
|
||||||
_charset->printChar(c, false);
|
_charset->printChar(c, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// warning("RESETING");
|
||||||
_nextLeft = _charset->_left;
|
_nextLeft = _charset->_left;
|
||||||
_nextTop = _charset->_top;
|
_nextTop = _charset->_top;
|
||||||
}
|
}
|
||||||
|
@ -973,6 +980,9 @@ void ScummEngine::drawString(int a, const byte *msg) {
|
||||||
if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
||||||
int ll = 0;
|
int ll = 0;
|
||||||
char* ltext = (char*)buf;
|
char* ltext = (char*)buf;
|
||||||
|
if (_game.id == GID_INDY4 && ltext[ll] == 127) {
|
||||||
|
ll++;
|
||||||
|
}
|
||||||
while (ltext[ll] == -1) {
|
while (ltext[ll] == -1) {
|
||||||
ll += 4;
|
ll += 4;
|
||||||
}
|
}
|
||||||
|
@ -982,6 +992,20 @@ void ScummEngine::drawString(int a, const byte *msg) {
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
int start = 0;
|
int start = 0;
|
||||||
char* text = (char*)ltext + ll;
|
char* text = (char*)ltext + ll;
|
||||||
|
|
||||||
|
|
||||||
|
// warning("BBEFORE");
|
||||||
|
// for (int u = 0; u < strlen(text); u++) {
|
||||||
|
// char buffy[30] = {0};
|
||||||
|
// sprintf(buffy, "%d,%d[%d-%c]\n",ltext[ll], ll, text[u], text[u]);
|
||||||
|
// debugN(buffy);
|
||||||
|
// }
|
||||||
|
// debugN("\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
strncpy((char*)fin + ll, text, strlen(text));
|
strncpy((char*)fin + ll, text, strlen(text));
|
||||||
char* current = text;
|
char* current = text;
|
||||||
while(1) {
|
while(1) {
|
||||||
|
@ -1017,6 +1041,23 @@ void ScummEngine::drawString(int a, const byte *msg) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
memcpy(buf, fin, start + pos + ll);
|
memcpy(buf, fin, start + pos + ll);
|
||||||
|
|
||||||
|
if (_game.id == GID_INDY4 && ltext[0] == 127) {
|
||||||
|
buf[start + pos + ll] = 127;
|
||||||
|
buf[start + pos+ll + 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// warning("BREVERSED");
|
||||||
|
// for (int u = 0; u < strlen(text); u++) {
|
||||||
|
// char buffy[30] = {0};
|
||||||
|
// sprintf(buffy, "[%d-%c]\n", text[u], text[u]);
|
||||||
|
// debugN(buffy);
|
||||||
|
// }
|
||||||
|
// debugN("\n\n\n\n\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1080,25 +1121,32 @@ void ScummEngine::drawString(int a, const byte *msg) {
|
||||||
if (_charset->_center) {
|
if (_charset->_center) {
|
||||||
_charset->_left -= _charset->getStringWidth(a, buf) / 2;
|
_charset->_left -= _charset->getStringWidth(a, buf) / 2;
|
||||||
} else if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
} else if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
||||||
if (_charset->getStringWidth(a, buf) > _screenWidth) {
|
// warning("FIRST BOTTTOMd");
|
||||||
int ll = 0;
|
if (_game.id != GID_INDY4 || buf[0] == 127) {
|
||||||
byte* ltext = buf;
|
if (_game.id == GID_INDY4 && buf[0] == 127) {
|
||||||
while (ltext[ll] == 0xFF) {
|
buf[0] = 32;
|
||||||
ll += 4;
|
|
||||||
}
|
}
|
||||||
byte lenbuf[270] = {0};
|
if (_charset->getStringWidth(a, buf) > _screenWidth) {
|
||||||
memcpy(lenbuf, ltext, ll);
|
int ll = 0;
|
||||||
int pos = ll;
|
byte* ltext = buf;
|
||||||
while (ltext[pos]) {
|
while (ltext[ll] == 0xFF) {
|
||||||
if ((ltext[pos] == 0xFF || (_game.version <= 6 && ltext[pos] == 0xFE)) && ltext[pos+1] == 8) {
|
ll += 4;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
pos++;
|
byte lenbuf[270] = {0};
|
||||||
|
memcpy(lenbuf, ltext, ll);
|
||||||
|
int pos = ll;
|
||||||
|
while (ltext[pos]) {
|
||||||
|
if ((ltext[pos] == 0xFF || (_game.version <= 6 && ltext[pos] == 0xFE)) && ltext[pos+1] == 8) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
memcpy(lenbuf, ltext, pos);
|
||||||
|
|
||||||
|
_charset->_left = _screenWidth - _charset->_startLeft - _charset->getStringWidth(a, lenbuf);
|
||||||
|
} else {
|
||||||
|
_charset->_left = _screenWidth - _charset->_startLeft - _charset->getStringWidth(a, buf);
|
||||||
}
|
}
|
||||||
memcpy(lenbuf, ltext, pos);
|
|
||||||
_charset->_left = _screenWidth - _charset->_startLeft - _charset->getStringWidth(a, lenbuf);
|
|
||||||
} else {
|
|
||||||
_charset->_left = _screenWidth - _charset->_startLeft - _charset->getStringWidth(a, buf);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1143,6 +1191,7 @@ void ScummEngine::drawString(int a, const byte *msg) {
|
||||||
if (_charset->_center) {
|
if (_charset->_center) {
|
||||||
_charset->_left = _charset->_startLeft - _charset->getStringWidth(a, buf + i);
|
_charset->_left = _charset->_startLeft - _charset->getStringWidth(a, buf + i);
|
||||||
} else if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
} else if (_game.version >= 4 && _game.version < 7 && (_language == Common::HE_ISR || true)) {
|
||||||
|
// warning("SECOND BOTTOM");
|
||||||
if (_charset->getStringWidth(a, buf + i) > _screenWidth) {
|
if (_charset->getStringWidth(a, buf + i) > _screenWidth) {
|
||||||
int ll = 0;
|
int ll = 0;
|
||||||
byte* ltext = buf + i;
|
byte* ltext = buf + i;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue