mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-07 10:21:31 +00:00
SCUMM: rtl support for scumm-7-8
This commit is contained in:
parent
c05b911563
commit
72471ec431
@ -191,8 +191,11 @@ void SmushFont::drawSubstring(const char *str, byte *buffer, int dst_width, int
|
||||
// to have to check for it.
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
|
||||
//for (int i = 0; str[i] != 0; i++) {
|
||||
|
||||
for (int i = 0; str[i] != 0; i++) {
|
||||
int len = strlen(str);
|
||||
for (int i = len; i >= 0; i--) {
|
||||
if ((byte)str[i] >= 0x80 && _vm->_useCJKMode) {
|
||||
x += draw2byte(buffer, dst_width, x, y, (byte)str[i] + 256 * (byte)str[i+1]);
|
||||
i++;
|
||||
@ -207,6 +210,12 @@ void SmushFont::drawSubstring(const char *str, byte *buffer, int dst_width, int
|
||||
void SmushFont::drawString(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, bool center) {
|
||||
debugC(DEBUG_SMUSH, "SmushFont::drawString(%s, %d, %d, %d)", str, x, y, center);
|
||||
|
||||
|
||||
//char rev[384] = {0};
|
||||
//int len = strlen(str);
|
||||
//for (int l = 0; l < len; l++) {
|
||||
// rev[l] = str[len - l - 1];
|
||||
//}
|
||||
while (str) {
|
||||
char line[256];
|
||||
const char *pos = strchr(str, '\n');
|
||||
|
@ -237,8 +237,10 @@ void ScummEngine_v7::addSubtitleToQueue(const byte *text, const Common::Point &p
|
||||
assert(_subtitleQueuePos < ARRAYSIZE(_subtitleQueue));
|
||||
SubtitleText *st = &_subtitleQueue[_subtitleQueuePos];
|
||||
int i = 0;
|
||||
|
||||
int len = strlen((const char *)text);
|
||||
while (1) {
|
||||
st->text[i] = text[i];
|
||||
st->text[i] = text[len - i - 1];
|
||||
if (!text[i])
|
||||
break;
|
||||
++i;
|
||||
@ -1247,7 +1249,20 @@ int ScummEngine::convertNameMessage(byte *dst, int dstSize, int var) {
|
||||
if (num) {
|
||||
const byte *ptr = getObjOrActorName(num);
|
||||
if (ptr) {
|
||||
return convertMessageToString(ptr, dst, dstSize);
|
||||
int retval = convertMessageToString(ptr, dst, dstSize);
|
||||
|
||||
if (_game.version >= 7 && (_language == Common::HE_ISR || true)) {
|
||||
byte rev[384] = {0};
|
||||
int lens = strlen((const char *)dst);
|
||||
|
||||
for (int l = 0; l < lens; l++) {
|
||||
rev[l] = dst[lens - l - 1];
|
||||
}
|
||||
rev[lens] = '\0';
|
||||
strcpy((char *)dst, (const char *)rev);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -1275,7 +1290,19 @@ int ScummEngine::convertStringMessage(byte *dst, int dstSize, int var) {
|
||||
if (var) {
|
||||
ptr = getStringAddress(var);
|
||||
if (ptr) {
|
||||
return convertMessageToString(ptr, dst, dstSize);
|
||||
int retval = convertMessageToString(ptr, dst, dstSize);
|
||||
|
||||
if (_game.version >= 7 && (_language == Common::HE_ISR || true)) {
|
||||
byte rev[384] = {0};
|
||||
int lens = strlen((const char *)dst);
|
||||
|
||||
for (int l = 0; l < lens; l++) {
|
||||
rev[l] = dst[lens - l - 1];
|
||||
}
|
||||
rev[lens] = '\0';
|
||||
strcpy((char *)dst, (const char *)rev);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -1575,6 +1602,16 @@ void ScummEngine_v7::translateText(const byte *text, byte *trans_buff) {
|
||||
}
|
||||
|
||||
if (found != NULL) {
|
||||
//char rev[384] = {0};
|
||||
//strcpy(rev, _languageBuffer + found->offset);
|
||||
//int len = strlen(rev);
|
||||
//for (int l = 0; l < len; l++) {
|
||||
// trans_buff[l] = rev[len - l - 1];
|
||||
//}
|
||||
//trans_buff[len] = '\0';
|
||||
|
||||
// OR
|
||||
|
||||
strcpy((char *)trans_buff, _languageBuffer + found->offset);
|
||||
|
||||
if ((_game.id == GID_DIG) && !(_game.features & GF_DEMO)) {
|
||||
|
@ -1001,17 +1001,31 @@ void ScummEngine_v7::drawVerb(int verb, int mode) {
|
||||
// Convert the message, and skip a few remaining 0xFF codes (they
|
||||
// occur in FT; subtype 10, which is used for the speech associated
|
||||
// with the string).
|
||||
byte buf[384];
|
||||
byte buf[384] = {0};
|
||||
byte rev[384] = {0};
|
||||
|
||||
convertMessageToString(msg, buf, sizeof(buf));
|
||||
msg = buf;
|
||||
while (*msg == 0xFF)
|
||||
msg += 4;
|
||||
|
||||
// reverse string for rtl support
|
||||
if (_language == Common::HE_ISR || true) {
|
||||
int lens = strlen((const char *)msg);
|
||||
|
||||
for (int l = 0; l < lens; l++) {
|
||||
rev[l] = msg[lens - l - 1];
|
||||
}
|
||||
rev[lens] = '\0';
|
||||
msg = rev;
|
||||
}
|
||||
|
||||
// Set the specified charset id
|
||||
int oldID = _charset->getCurID();
|
||||
_charset->setCurID(vs->charset_nr);
|
||||
|
||||
// Compute the text rect
|
||||
vs->curRect.left = _screenWidth - _charset->getStringWidth(0, buf);
|
||||
vs->curRect.right = 0;
|
||||
vs->curRect.bottom = 0;
|
||||
const byte *msg2 = msg;
|
||||
|
Loading…
Reference in New Issue
Block a user