Skip to content

Commit

Permalink
KYRA: fix ingame menu save slots
Browse files Browse the repository at this point in the history
- long GMM save descriptions will be trimmed to fit the ingame menu save slots
- prevent writing beyond the right margin in Kyra 1 save slots
  • Loading branch information
athrxx committed Jul 4, 2011
1 parent 19fd9c0 commit 38d18a6
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
14 changes: 13 additions & 1 deletion engines/kyra/gui_lok.cpp
Expand Up @@ -576,6 +576,15 @@ void GUI_LoK::setupSavegames(Menu &menu, int num) {
if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i + _savegameOffset]), header))) {
Common::strlcpy(_savegameNames[i], header.description.c_str(), ARRAYSIZE(_savegameNames[0]));

// Trim long GMM save descriptions to fit our save slots
_screen->_charWidth = -2;
int fC = _screen->getTextWidth(_savegameNames[i]);
while (strlen(_savegameNames[i]) && (fC > 240 || strlen(_savegameNames[i]) >= ARRAYSIZE(_savegameNames[0]))) {
_savegameNames[i][strlen(_savegameNames[i]) - 1] = 0;
fC = _screen->getTextWidth(_savegameNames[i]);
}
_screen->_charWidth = 0;

Util::convertISOToDOS(_savegameNames[i]);

menu.item[i].itemString = _savegameNames[i];
Expand Down Expand Up @@ -693,12 +702,15 @@ void GUI_LoK::updateSavegameString() {

if (_keyPressed.keycode) {
length = strlen(_savegameName);
_screen->_charWidth = -2;
int width = _screen->getTextWidth(_savegameName) + 7;
_screen->_charWidth = 0;

char inputKey = _keyPressed.ascii;
Util::convertISOToDOS(inputKey);

if ((uint8)inputKey > 31 && (uint8)inputKey < (_vm->gameFlags().lang == Common::JA_JPN ? 128 : 226)) {
if (length < ARRAYSIZE(_savegameName)-1) {
if ((length < ARRAYSIZE(_savegameName)-1) && (width <= 240)) {
_savegameName[length] = inputKey;
_savegameName[length+1] = 0;
redrawTextfield();
Expand Down
10 changes: 10 additions & 0 deletions engines/kyra/gui_lol.cpp
Expand Up @@ -2572,9 +2572,19 @@ void GUI_LoL::setupSaveMenuSlots(Menu &menu, int num) {
slotOffs = 1;
}

int saveSlotMaxLen = ((_screen->getScreenDim(8))->w << 3) - _screen->getCharWidth('W');

for (int i = startSlot; i < num && _savegameOffset + i - slotOffs < _savegameListSize; ++i) {
if (_savegameList[_saveSlots[i + _savegameOffset - slotOffs]]) {
Common::strlcpy(s, _savegameList[_saveSlots[i + _savegameOffset - slotOffs]], 80);

// Trim long GMM save descriptions to fit our save slots
int fC = _screen->getTextWidth(s);
while (strlen(s) && fC >= saveSlotMaxLen) {
s[strlen(s) - 1] = 0;
fC = _screen->getTextWidth(s);
}

menu.item[i].itemString = s;
s += (strlen(s) + 1);
menu.item[i].saveSlot = _saveSlots[i + _savegameOffset - slotOffs];
Expand Down
9 changes: 9 additions & 0 deletions engines/kyra/gui_v2.cpp
Expand Up @@ -457,6 +457,15 @@ void GUI_v2::setupSavegameNames(Menu &menu, int num) {
Common::strlcpy(s, header.description.c_str(), 80);
Util::convertISOToDOS(s);

// Trim long GMM save descriptions to fit our save slots
_screen->_charWidth = -2;
int fC = _screen->getTextWidth(s);
while (strlen(s) && fC > 240) {
s[strlen(s) - 1] = 0;
fC = _screen->getTextWidth(s);
}
_screen->_charWidth = 0;

menu.item[i].saveSlot = _saveSlots[i + _savegameOffset];
menu.item[i].enabled = true;
delete in;
Expand Down

0 comments on commit 38d18a6

Please sign in to comment.