[Scummvm-git-logs] scummvm master -> de0a322adbbf56a4bc6c7d7c6b5c4c82bec929cd
bluegr
noreply at scummvm.org
Tue Apr 22 07:52:05 UTC 2025
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
72fcc8fbfd SKY: Add support for hebrew translation
7d70f76ce3 SKY: Detect fanmade hebrew version
b6f202c3e6 SKY: Display right aligned text
de0a322adb SKY: Use cleaner iteration syntax
Commit: 72fcc8fbfd796b5cb9c6342d582e1827e7f1d4fb
https://github.com/scummvm/scummvm/commit/72fcc8fbfd796b5cb9c6342d582e1827e7f1d4fb
Author: BLooperZ (blooperz at users.noreply.github.com)
Date: 2025-04-22T10:52:00+03:00
Commit Message:
SKY: Add support for hebrew translation
Changed paths:
engines/sky/control.cpp
engines/sky/control.h
engines/sky/detection.cpp
engines/sky/sky.cpp
engines/sky/sky.h
engines/sky/skydefs.h
engines/sky/text.cpp
diff --git a/engines/sky/control.cpp b/engines/sky/control.cpp
index de19396c04b..14e6b6541ea 100644
--- a/engines/sky/control.cpp
+++ b/engines/sky/control.cpp
@@ -568,6 +568,11 @@ uint16 Control::handleClick(ConResource *pButton) {
strncpy(restart, "Hobaq irpa?", 50);
}
+ if (Common::parseLanguage(ConfMan.get("language")) == Common::HE_ISR) {
+ strncpy(quitDos, "\x89\x96\x89\x80\x84 \x80\x8c SOD?", 50);
+ strncpy(restart, "\x84\x9a\x87\x8c\x84 \x8e\x87\x83\x99?", 50);
+ }
+
switch (pButton->_onClick) {
case DO_NOTHING:
return 0;
@@ -1624,6 +1629,9 @@ void Control::showGameQuitMsg() {
} else if (SkyEngine::_systemVars->language == SKY_CHINESE_TRADITIONAL) { // Not translated in original
_skyText->displayText(_quitTexts[0], sizeof(_quitTexts[0]), textBuf1, true, 320, 255);
_skyText->displayText(_quitTexts[1], sizeof(_quitTexts[1]), textBuf2, true, 320, 255);
+ } else if (Common::parseLanguage(ConfMan.get("language")) == Common::HE_ISR) {
+ _skyText->displayText(_quitTexts[SKY_HEBREW * 2 + 0], sizeof(_quitTexts[SKY_HEBREW * 2 + 0]), textBuf1, true, 320, 255);
+ _skyText->displayText(_quitTexts[SKY_HEBREW * 2 + 1], sizeof(_quitTexts[SKY_HEBREW * 2 + 1]), textBuf2, true, 320, 255);
} else {
_skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 0], sizeof(_quitTexts[SkyEngine::_systemVars->language * 2 + 0]), textBuf1, true, 320, 255);
_skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 1], sizeof(_quitTexts[SkyEngine::_systemVars->language * 2 + 1]), textBuf2, true, 320, 255);
@@ -1648,7 +1656,7 @@ void Control::showGameQuitMsg() {
free(textBuf2);
}
-char Control::_quitTexts[18][35] = {
+char Control::_quitTexts[20][45] = {
"Game over player one",
"BE VIGILANT",
"Das Spiel ist aus.",
@@ -1666,7 +1674,9 @@ char Control::_quitTexts[18][35] = {
"Game over player one",
"BE VIGILANT",
"Irpa okohseha, irpok 1",
- "JYD\x96 JDITELEH"
+ "JYD\x96 JDITELEH",
+ "\x84\x8E\x99\x87\x97 \x90\x82\x8e\x98 \x99\x87\x97\x8F \x8E\x91\x94\x98 \x80\x87\x9A",
+ "\x84\x89\x85 \x92\x98\x90\x89\x89\x8D"
};
uint8 Control::_crossImg[594] = {
diff --git a/engines/sky/control.h b/engines/sky/control.h
index b3cb5d326ca..2a32cbe8487 100644
--- a/engines/sky/control.h
+++ b/engines/sky/control.h
@@ -296,7 +296,7 @@ private:
ControlStatus *_statusBar;
- static char _quitTexts[18][35];
+ static char _quitTexts[20][45];
static uint8 _crossImg[594];
};
diff --git a/engines/sky/detection.cpp b/engines/sky/detection.cpp
index 33fab820e9b..426fb3ff55d 100644
--- a/engines/sky/detection.cpp
+++ b/engines/sky/detection.cpp
@@ -192,7 +192,7 @@ DetectedGames SkyMetaEngineDetection::detectGames(const Common::FSList &fslist,
game = DetectedGame(getName(), skySetting.gameId, skySetting.description, lang, Common::kPlatformDOS, extra);
game.setGUIOptions(sv->guioptions);
} else {
- game = DetectedGame(getName(), skySetting.gameId, skySetting.description);
+ game = DetectedGame(getName(), skySetting.gameId, skySetting.description, lang);
}
if (lang == Common::Language::UNK_LANG) {
diff --git a/engines/sky/sky.cpp b/engines/sky/sky.cpp
index eb4e8b64a33..003d78d49af 100644
--- a/engines/sky/sky.cpp
+++ b/engines/sky/sky.cpp
@@ -85,6 +85,7 @@ SkyEngine::SkyEngine(OSystem *syst)
_systemVars->currentMusic = 0;
_systemVars->pastIntro = false;
_systemVars->paused = false;
+ _systemVars->textDirRTL = false;
memset (_chineseTraditionalOffsets, 0, sizeof(_chineseTraditionalOffsets));
_chineseTraditionalBlock = nullptr;
@@ -428,6 +429,9 @@ Common::Error SkyEngine::init() {
case Common::ZH_TWN:
_systemVars->language = SKY_CHINESE_TRADITIONAL;
break;
+ case Common::HE_ISR:
+ _systemVars->textDirRTL = true;
+ break;
default:
_systemVars->language = SKY_ENGLISH;
diff --git a/engines/sky/sky.h b/engines/sky/sky.h
index a67cd023529..51fcc649d0d 100644
--- a/engines/sky/sky.h
+++ b/engines/sky/sky.h
@@ -49,6 +49,7 @@ struct SystemVars {
uint16 currentMusic;
bool pastIntro;
bool paused;
+ bool textDirRTL;
};
class Sound;
diff --git a/engines/sky/skydefs.h b/engines/sky/skydefs.h
index 57a49b15506..4788fb4687f 100644
--- a/engines/sky/skydefs.h
+++ b/engines/sky/skydefs.h
@@ -45,6 +45,7 @@ namespace Sky {
#define SKY_PORTUGUESE 6
#define SKY_SPANISH 7
#define SKY_RUSSIAN 8
+#define SKY_HEBREW 9
// Special treatment
#define SKY_CHINESE_TRADITIONAL 0x7f
diff --git a/engines/sky/text.cpp b/engines/sky/text.cpp
index 6f4455dd93f..aa3915e4c34 100644
--- a/engines/sky/text.cpp
+++ b/engines/sky/text.cpp
@@ -357,6 +357,8 @@ DisplayedText Text::displayText(char *textPtr, uint32 bufLen, uint8 *dest, bool
uint32 *centerTblPtr = centerTable;
do {
+ Common::String line("");
+
byte *lineEnd = curDest + pixelWidth;
if (center) {
uint32 width = (pixelWidth - *centerTblPtr) >> 1;
@@ -379,10 +381,20 @@ DisplayedText Text::displayText(char *textPtr, uint32 bufLen, uint8 *dest, bool
textChar = '?';
}
- makeGameCharacter(textChar - 0x20, _characterSet, curDest, color, pixelWidth);
+ line += textChar - 0x20;
textChar = *curPos++;
}
+ if (_vm->_systemVars->textDirRTL) {
+ for (int i = line.size() - 1; i >= 0; --i) {
+ makeGameCharacter(line[i], _characterSet, curDest, color, pixelWidth);
+ }
+ } else {
+ for (auto it = line.begin(); it != line.end(); ++it) {
+ makeGameCharacter(*it, _characterSet, curDest, color, pixelWidth);
+ }
+ }
+
prevDest = curDest = prevDest + dtLineSize; //start of last line + start of next
} while (textChar >= 10);
Commit: 7d70f76ce3a8662ff56048128c5dcace0c4c77b9
https://github.com/scummvm/scummvm/commit/7d70f76ce3a8662ff56048128c5dcace0c4c77b9
Author: BLooperZ (blooperz at users.noreply.github.com)
Date: 2025-04-22T10:52:00+03:00
Commit Message:
SKY: Detect fanmade hebrew version
Changed paths:
engines/sky/detection.cpp
diff --git a/engines/sky/detection.cpp b/engines/sky/detection.cpp
index 426fb3ff55d..a23f057a74c 100644
--- a/engines/sky/detection.cpp
+++ b/engines/sky/detection.cpp
@@ -140,7 +140,7 @@ DetectedGames SkyMetaEngineDetection::detectGames(const Common::FSList &fslist,
if (dataDisk.open(*file)) {
hasSkyDsk = true;
dataDiskSize = dataDisk.size();
- if (dataDiskSize == 73123264)
+ if (dataDiskSize == 73123264 || dataDiskSize == 75893200)
dataDiskHeadMD5 = Common::computeStreamMD5AsString(dataDisk, 5000);
}
}
@@ -185,6 +185,8 @@ DetectedGames SkyMetaEngineDetection::detectGames(const Common::FSList &fslist,
Common::Language lang = Common::Language::UNK_LANG;
if (dataDiskSize == 73123264 && dataDiskHeadMD5 == "886d6faecd97488be09b73f4f87b92d9")
lang = Common::Language::RU_RUS;
+ if (dataDiskSize == 75893200 && dataDiskHeadMD5 == "886d6faecd97488be09b73f4f87b92d9")
+ lang = Common::Language::HE_ISR;
if (sv->dinnerTableEntries) {
Common::String extra = Common::String::format("v0.0%d %s", sv->version, sv->extraDesc);
Commit: b6f202c3e6bf9cc7bcfc357f5658034f0e95b6e2
https://github.com/scummvm/scummvm/commit/b6f202c3e6bf9cc7bcfc357f5658034f0e95b6e2
Author: BLooperZ (blooperz at users.noreply.github.com)
Date: 2025-04-22T10:52:00+03:00
Commit Message:
SKY: Display right aligned text
Changed paths:
engines/sky/control.cpp
engines/sky/intro.cpp
engines/sky/logic.cpp
engines/sky/text.cpp
engines/sky/text.h
diff --git a/engines/sky/control.cpp b/engines/sky/control.cpp
index 14e6b6541ea..db438a086d6 100644
--- a/engines/sky/control.cpp
+++ b/engines/sky/control.cpp
@@ -176,7 +176,7 @@ void ControlStatus::setToText(const char *newText) {
_statusText->flushForRedraw();
free(_textData);
}
- DisplayedText disText = _skyText->displayText(tmpLine, sizeof(tmpLine), NULL, true, STATUS_WIDTH, 255);
+ DisplayedText disText = _skyText->displayText(tmpLine, sizeof(tmpLine), NULL, Graphics::kTextAlignCenter, STATUS_WIDTH, 255);
_textData = (DataFileHeader *)disText.textData;
_statusText->setSprite(_textData);
_statusText->drawToScreen(WITH_MASK);
@@ -184,7 +184,7 @@ void ControlStatus::setToText(const char *newText) {
void ControlStatus::setToText(uint16 textNum) {
free(_textData);
- DisplayedText disText = _skyText->displayText(textNum, NULL, true, STATUS_WIDTH, 255);
+ DisplayedText disText = _skyText->displayText(textNum, NULL, Graphics::kTextAlignCenter, STATUS_WIDTH, 255);
_textData = (DataFileHeader *)disText.textData;
_statusText->setSprite(_textData);
_statusText->drawToScreen(WITH_MASK);
@@ -359,6 +359,9 @@ void Control::buttonControl(ConResource *pButton) {
if (Common::parseLanguage(ConfMan.get("language")) == Common::RU_RUS)
strncpy(autoSave, "Zarpyzit/ abtocoxpahehie", 50);
+ if (Common::parseLanguage(ConfMan.get("language")) == Common::HE_ISR)
+ strncpy(autoSave, "\x99\x87\x86\x85\x98 \x99\x8e\x89\x98\x84 \x80\x85\x88\x85\x8e\x88\x89\x9a", 50);
+
if (pButton == NULL) {
free(_textSprite);
_textSprite = NULL;
@@ -373,9 +376,9 @@ void Control::buttonControl(ConResource *pButton) {
if (pButton->_text) {
DisplayedText textRes;
if (pButton->_text == 0xFFFF) // text for autosave button
- textRes = _skyText->displayText(autoSave, sizeof(autoSave), NULL, false, PAN_LINE_WIDTH, 255);
+ textRes = _skyText->displayText(autoSave, sizeof(autoSave), NULL, Graphics::kTextAlignLeft, PAN_LINE_WIDTH, 255);
else
- textRes = _skyText->displayText(pButton->_text, NULL, false, PAN_LINE_WIDTH, 255);
+ textRes = _skyText->displayText(pButton->_text, NULL, Graphics::kTextAlignLeft, PAN_LINE_WIDTH, 255);
_textSprite = (DataFileHeader *)textRes.textData;
_text->setSprite(_textSprite);
} else
@@ -655,7 +658,7 @@ bool Control::getYesNo(char *text, uint bufSize) {
_yesNo->drawToScreen(WITH_MASK);
if (text) {
- DisplayedText dlgLtm = _skyText->displayText(text, bufSize, NULL, true, _yesNo->_spriteData->s_width - 8, 37);
+ DisplayedText dlgLtm = _skyText->displayText(text, bufSize, NULL, Graphics::kTextAlignCenter, _yesNo->_spriteData->s_width - 8, 37);
dlgTextDat = (DataFileHeader *)dlgLtm.textData;
textY = MPNL_Y + 44 + (28 - dlgTextDat->s_height) / 2;
} else
@@ -1072,7 +1075,7 @@ void Control::setUpGameSprites(const Common::StringArray &saveGameNames, DataFil
char cursorChar[2] = "-";
DisplayedText textSpr;
if (!nameSprites[MAX_ON_SCREEN]) {
- textSpr = _skyText->displayText(cursorChar, sizeof(cursorChar), NULL, false, 15, 0);
+ textSpr = _skyText->displayText(cursorChar, sizeof(cursorChar), NULL, Graphics::kTextAlignLeft, 15, 0);
nameSprites[MAX_ON_SCREEN] = (DataFileHeader *)textSpr.textData;
}
for (uint16 cnt = 0; cnt < MAX_ON_SCREEN; cnt++) {
@@ -1080,10 +1083,10 @@ void Control::setUpGameSprites(const Common::StringArray &saveGameNames, DataFil
if (firstNum + cnt == selectedGame) {
Common::sprintf_s(nameBuf, "%3d: %s", firstNum + cnt + 1, dirtyString.c_str());
- textSpr = _skyText->displayText(nameBuf, sizeof(nameBuf), NULL, false, PAN_LINE_WIDTH, 0);
+ textSpr = _skyText->displayText(nameBuf, sizeof(nameBuf), NULL, Graphics::kTextAlignStart, PAN_LINE_WIDTH, 0);
} else {
Common::sprintf_s(nameBuf, "%3d: %s", firstNum + cnt + 1, saveGameNames[firstNum + cnt].c_str());
- textSpr = _skyText->displayText(nameBuf, sizeof(nameBuf), NULL, false, PAN_LINE_WIDTH, 37);
+ textSpr = _skyText->displayText(nameBuf, sizeof(nameBuf), NULL, Graphics::kTextAlignStart, PAN_LINE_WIDTH, 37);
}
nameSprites[cnt] = (DataFileHeader *)textSpr.textData;
if (firstNum + cnt == selectedGame) {
@@ -1624,17 +1627,17 @@ void Control::showGameQuitMsg() {
screenData = _skyScreen->giveCurrent();
if (Common::parseLanguage(ConfMan.get("language")) == Common::RU_RUS) {
- _skyText->displayText(_quitTexts[8 * 2 + 0], sizeof(_quitTexts[8 * 2 + 0]), textBuf1, true, 320, 255);
- _skyText->displayText(_quitTexts[8 * 2 + 1], sizeof(_quitTexts[8 * 2 + 1]), textBuf2, true, 320, 255);
+ _skyText->displayText(_quitTexts[8 * 2 + 0], sizeof(_quitTexts[8 * 2 + 0]), textBuf1, Graphics::kTextAlignCenter, 320, 255);
+ _skyText->displayText(_quitTexts[8 * 2 + 1], sizeof(_quitTexts[8 * 2 + 1]), textBuf2, Graphics::kTextAlignCenter, 320, 255);
} else if (SkyEngine::_systemVars->language == SKY_CHINESE_TRADITIONAL) { // Not translated in original
- _skyText->displayText(_quitTexts[0], sizeof(_quitTexts[0]), textBuf1, true, 320, 255);
- _skyText->displayText(_quitTexts[1], sizeof(_quitTexts[1]), textBuf2, true, 320, 255);
+ _skyText->displayText(_quitTexts[0], sizeof(_quitTexts[0]), textBuf1, Graphics::kTextAlignCenter, 320, 255);
+ _skyText->displayText(_quitTexts[1], sizeof(_quitTexts[1]), textBuf2, Graphics::kTextAlignCenter, 320, 255);
} else if (Common::parseLanguage(ConfMan.get("language")) == Common::HE_ISR) {
- _skyText->displayText(_quitTexts[SKY_HEBREW * 2 + 0], sizeof(_quitTexts[SKY_HEBREW * 2 + 0]), textBuf1, true, 320, 255);
- _skyText->displayText(_quitTexts[SKY_HEBREW * 2 + 1], sizeof(_quitTexts[SKY_HEBREW * 2 + 1]), textBuf2, true, 320, 255);
+ _skyText->displayText(_quitTexts[SKY_HEBREW * 2 + 0], sizeof(_quitTexts[SKY_HEBREW * 2 + 0]), textBuf1, Graphics::kTextAlignCenter, 320, 255);
+ _skyText->displayText(_quitTexts[SKY_HEBREW * 2 + 1], sizeof(_quitTexts[SKY_HEBREW * 2 + 1]), textBuf2, Graphics::kTextAlignCenter, 320, 255);
} else {
- _skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 0], sizeof(_quitTexts[SkyEngine::_systemVars->language * 2 + 0]), textBuf1, true, 320, 255);
- _skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 1], sizeof(_quitTexts[SkyEngine::_systemVars->language * 2 + 1]), textBuf2, true, 320, 255);
+ _skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 0], sizeof(_quitTexts[SkyEngine::_systemVars->language * 2 + 0]), textBuf1, Graphics::kTextAlignCenter, 320, 255);
+ _skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 1], sizeof(_quitTexts[SkyEngine::_systemVars->language * 2 + 1]), textBuf2, Graphics::kTextAlignCenter, 320, 255);
}
uint8 *curLine1 = textBuf1 + sizeof(DataFileHeader);
uint8 *curLine2 = textBuf2 + sizeof(DataFileHeader);
diff --git a/engines/sky/intro.cpp b/engines/sky/intro.cpp
index 4014d2d4b96..f134065be31 100644
--- a/engines/sky/intro.cpp
+++ b/engines/sky/intro.cpp
@@ -845,7 +845,7 @@ bool Intro::commandFlirt(uint16 *&data) {
uint16 command = *data++;
switch (command) {
case IC_PREPARE_TEXT:
- _skyText->displayText(*data++, _textBuf, true, INTRO_TEXT_WIDTH, 255);
+ _skyText->displayText(*data++, _textBuf, Graphics::kTextAlignCenter, INTRO_TEXT_WIDTH, 255);
break;
case IC_SHOW_TEXT:
((DataFileHeader *)_textBuf)->s_x = *data++;
diff --git a/engines/sky/logic.cpp b/engines/sky/logic.cpp
index 3694137b717..c9e0b1c6764 100644
--- a/engines/sky/logic.cpp
+++ b/engines/sky/logic.cpp
@@ -1751,7 +1751,7 @@ bool Logic::fnChooser(uint32 a, uint32 b, uint32 c) {
while (*p) {
uint32 textNum = *p++;
- DisplayedText lowText = _skyText->lowTextManager(textNum, GAME_SCREEN_WIDTH, 0, 241, 0);
+ DisplayedText lowText = _skyText->lowTextManager(textNum, GAME_SCREEN_WIDTH, 0, 241, Graphics::kTextAlignStart);
uint8 *data = lowText.textData;
@@ -2367,7 +2367,7 @@ bool Logic::fnBlankScreen(uint32 a, uint32 b, uint32 c) {
}
bool Logic::fnPrintCredit(uint32 a, uint32 b, uint32 c) {
- DisplayedText creditText = _skyText->lowTextManager(a, 240, 0, 248, true);
+ DisplayedText creditText = _skyText->lowTextManager(a, 240, 0, 248, Graphics::kTextAlignCenter);
Compact *credCompact = _skyCompact->fetchCpt(creditText.compactNum);
credCompact->xcood = 168;
if ((a == 558) && (c == 215))
@@ -2379,7 +2379,7 @@ bool Logic::fnPrintCredit(uint32 a, uint32 b, uint32 c) {
}
bool Logic::fnLookAt(uint32 a, uint32 b, uint32 c) {
- DisplayedText textInfo = _skyText->lowTextManager(a, 240, 0, 248, true);
+ DisplayedText textInfo = _skyText->lowTextManager(a, 240, 0, 248, Graphics::kTextAlignCenter);
Compact *textCpt = _skyCompact->fetchCpt(textInfo.compactNum);
textCpt->xcood = 168;
textCpt->ycood = (uint16)c;
@@ -2409,7 +2409,7 @@ bool Logic::fnLincTextModule(uint32 textPos, uint32 textNo, uint32 buttonAction)
if (buttonAction < 10)
_scriptVariables[LINC_DIGIT_0 + buttonAction] = textNo;
- DisplayedText text = _skyText->lowTextManager(textNo, 220, 0, 215, false);
+ DisplayedText text = _skyText->lowTextManager(textNo, SkyEngine::_systemVars->textDirRTL ? 175 : 220, 0, 215, Graphics::kTextAlignStart);
Compact *textCpt = _skyCompact->fetchCpt(text.compactNum);
@@ -2529,7 +2529,7 @@ void Logic::stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32 bas
// form the text sprite, if player wants subtitles or
// if we couldn't find the speech file
DisplayedText textInfo;
- textInfo = _skyText->lowTextManager(textNum, FIXED_TEXT_WIDTH, 0, (uint8)target->spColor, true);
+ textInfo = _skyText->lowTextManager(textNum, FIXED_TEXT_WIDTH, 0, (uint8)target->spColor, Graphics::kTextAlignCenter);
Compact *textCompact = _skyCompact->fetchCpt(textInfo.compactNum);
target->spTextId = textInfo.compactNum; //So we know what text to kill
byte *textGfx = textInfo.textData;
diff --git a/engines/sky/text.cpp b/engines/sky/text.cpp
index aa3915e4c34..7b1c921afa5 100644
--- a/engines/sky/text.cpp
+++ b/engines/sky/text.cpp
@@ -104,7 +104,7 @@ void Text::fnSetFont(uint32 fontNr) {
void Text::fnTextModule(uint32 textInfoId, uint32 textNo) {
fnSetFont(1);
uint16* msgData = (uint16 *)_skyCompact->fetchCpt(textInfoId);
- DisplayedText textId = lowTextManager(textNo, msgData[1], msgData[2], 209, false);
+ DisplayedText textId = lowTextManager(textNo, msgData[1], msgData[2], 209, Graphics::kTextAlignStart);
Logic::_scriptVariables[RESULT] = textId.compactNum;
Compact *textCompact = _skyCompact->fetchCpt(textId.compactNum);
textCompact->xcood = msgData[3];
@@ -193,7 +193,7 @@ void Text::getText(uint32 textNr) { //load text #"textNr" into textBuffer
void Text::fnPointerText(uint32 pointedId, uint16 mouseX, uint16 mouseY) {
Compact *ptrComp = _skyCompact->fetchCpt(pointedId);
- DisplayedText text = lowTextManager(ptrComp->cursorText, TEXT_MOUSE_WIDTH, L_CURSOR, 242, false);
+ DisplayedText text = lowTextManager(ptrComp->cursorText, TEXT_MOUSE_WIDTH, L_CURSOR, 242, Graphics::kTextAlignLeft);
Logic::_scriptVariables[CURSOR_ID] = text.compactNum;
if (Logic::_scriptVariables[MENU]) {
_mouseOfsY = TOP_LEFT_Y - 2;
@@ -244,14 +244,14 @@ char Text::getTextChar(uint8 **data, uint32 *bitPos) {
}
}
-DisplayedText Text::displayText(uint32 textNum, uint8 *dest, bool center, uint16 pixelWidth, uint8 color) {
+DisplayedText Text::displayText(uint32 textNum, uint8 *dest, Graphics::TextAlign align, uint16 pixelWidth, uint8 color) {
//Render text into buffer *dest
getText(textNum);
- return displayText(_textBuffer, sizeof(_textBuffer), dest, center, pixelWidth, color);
+ return displayText(_textBuffer, sizeof(_textBuffer), dest, align, pixelWidth, color);
}
// TODO: Don't use caller-supplied buffer for editing operations
-DisplayedText Text::displayText(char *textPtr, uint32 bufLen, uint8 *dest, bool center, uint16 pixelWidth, uint8 color) {
+DisplayedText Text::displayText(char *textPtr, uint32 bufLen, uint8 *dest, Graphics::TextAlign align, uint16 pixelWidth, uint8 color) {
//Render text pointed to by *textPtr in buffer *dest
uint32 centerTable[10];
uint16 lineWidth = 0;
@@ -286,7 +286,7 @@ DisplayedText Text::displayText(char *textPtr, uint32 bufLen, uint8 *dest, bool
curPos++;
lineWidth += Graphics::Big5Font::kChineseTraditionalWidth;
} else {
- if ((_curCharSet == 1) && (textChar >= 0x80))
+ if ((_curCharSet == 1) && (textChar >= 0x80) && !SkyEngine::_systemVars->textDirRTL)
textChar = 0x20;
textChar -= 0x20;
@@ -356,14 +356,19 @@ DisplayedText Text::displayText(char *textPtr, uint32 bufLen, uint8 *dest, bool
byte *prevDest = curDest;
uint32 *centerTblPtr = centerTable;
+ align = Graphics::convertTextAlignH(align, _vm->_systemVars->textDirRTL);
+
do {
Common::String line("");
byte *lineEnd = curDest + pixelWidth;
- if (center) {
+ if (align == Graphics::kTextAlignCenter) {
uint32 width = (pixelWidth - *centerTblPtr) >> 1;
centerTblPtr++;
curDest += width;
+ } else if (align == Graphics::kTextAlignRight) {
+ curDest += pixelWidth - *centerTblPtr - 1;
+ centerTblPtr++;
}
textChar = (uint8)*curPos++;
@@ -443,9 +448,9 @@ void Text::makeGameCharacter(uint8 textChar, uint8 *charSetPtr, uint8 *&dest, ui
dest = startPos + charWidth + _dtCharSpacing * 2 - 1;
}
-DisplayedText Text::lowTextManager(uint32 textNum, uint16 width, uint16 logicNum, uint8 color, bool center) {
+DisplayedText Text::lowTextManager(uint32 textNum, uint16 width, uint16 logicNum, uint8 color, Graphics::TextAlign align) {
getText(textNum);
- DisplayedText textInfo = displayText(_textBuffer, sizeof(_textBuffer), NULL, center, width, color);
+ DisplayedText textInfo = displayText(_textBuffer, sizeof(_textBuffer), NULL, align, width, color);
uint32 compactNum = FIRST_TEXT_COMPACT;
Compact *cpt = _skyCompact->fetchCpt(compactNum);
diff --git a/engines/sky/text.h b/engines/sky/text.h
index d1312e07cc3..86409ed637d 100644
--- a/engines/sky/text.h
+++ b/engines/sky/text.h
@@ -24,6 +24,7 @@
#include "common/scummsys.h"
+#include "graphics/font.h"
#include "sky/sky.h"
namespace Sky {
@@ -49,9 +50,9 @@ class Text {
public:
Text(SkyEngine *vm, Disk *skyDisk, SkyCompact *skyCompact);
~Text();
- struct DisplayedText displayText(uint32 textNum, uint8 *dest, bool center, uint16 pixelWidth, uint8 color);
- struct DisplayedText displayText(char *textPtr, uint32 bufLen, uint8 *dest, bool center, uint16 pixelWidth, uint8 color);
- struct DisplayedText lowTextManager(uint32 textNum, uint16 width, uint16 logicNum, uint8 color, bool center);
+ struct DisplayedText displayText(uint32 textNum, uint8 *dest, Graphics::TextAlign align, uint16 pixelWidth, uint8 color);
+ struct DisplayedText displayText(char *textPtr, uint32 bufLen, uint8 *dest, Graphics::TextAlign align, uint16 pixelWidth, uint8 color);
+ struct DisplayedText lowTextManager(uint32 textNum, uint16 width, uint16 logicNum, uint8 color, Graphics::TextAlign align);
void fnSetFont(uint32 fontNr);
void fnTextModule(uint32 textInfoId, uint32 textNo);
void fnPointerText(uint32 pointedId, uint16 mouseX, uint16 mouseY);
Commit: de0a322adbbf56a4bc6c7d7c6b5c4c82bec929cd
https://github.com/scummvm/scummvm/commit/de0a322adbbf56a4bc6c7d7c6b5c4c82bec929cd
Author: Niv Baehr (bloop93 at gmail.com)
Date: 2025-04-22T10:52:00+03:00
Commit Message:
SKY: Use cleaner iteration syntax
Co-authored-by: Filippos Karapetis <bluegr at gmail.com>
Changed paths:
engines/sky/text.cpp
diff --git a/engines/sky/text.cpp b/engines/sky/text.cpp
index 7b1c921afa5..048d5edfac5 100644
--- a/engines/sky/text.cpp
+++ b/engines/sky/text.cpp
@@ -395,8 +395,8 @@ DisplayedText Text::displayText(char *textPtr, uint32 bufLen, uint8 *dest, Graph
makeGameCharacter(line[i], _characterSet, curDest, color, pixelWidth);
}
} else {
- for (auto it = line.begin(); it != line.end(); ++it) {
- makeGameCharacter(*it, _characterSet, curDest, color, pixelWidth);
+ for (auto &c : line) {
+ makeGameCharacter(c, _characterSet, curDest, color, pixelWidth);
}
}
More information about the Scummvm-git-logs
mailing list