diff options
author | Thierry Crozat | 2017-12-05 22:22:04 +0000 |
---|---|---|
committer | Thierry Crozat | 2018-01-23 02:15:42 +0000 |
commit | 75e3568f063c883ecfb057f4c6dccd3962d77a4c (patch) | |
tree | bbbf6837b900742a0308ed675bade510abf5c6bf | |
parent | ef90759e924caaf7b8b3854890eb0ea813a352c0 (diff) | |
download | scummvm-rg350-75e3568f063c883ecfb057f4c6dccd3962d77a4c.tar.gz scummvm-rg350-75e3568f063c883ecfb057f4c6dccd3962d77a4c.tar.bz2 scummvm-rg350-75e3568f063c883ecfb057f4c6dccd3962d77a4c.zip |
SUPERNOVA: Implement dialogs with variable text
This was partially implemented but not finished. However I reverted
the changes already done to support that in order to use a different
approach.
-rw-r--r-- | devtools/create_supernova/gametext.h | 2 | ||||
-rw-r--r-- | engines/supernova/msn_def.h | 5 | ||||
-rw-r--r-- | engines/supernova/rooms.cpp | 9 | ||||
-rw-r--r-- | engines/supernova/rooms.h | 4 | ||||
-rw-r--r-- | engines/supernova/state.cpp | 14 | ||||
-rw-r--r-- | engines/supernova/state.h | 3 | ||||
-rw-r--r-- | engines/supernova/supernova.h | 9 |
7 files changed, 26 insertions, 20 deletions
diff --git a/devtools/create_supernova/gametext.h b/devtools/create_supernova/gametext.h index d5b6c9a293..398e210c54 100644 --- a/devtools/create_supernova/gametext.h +++ b/devtools/create_supernova/gametext.h @@ -678,7 +678,7 @@ const char *gameText[] = { "Dann gehe ich eben wieder.", // kStringDialogAxacussCorridor5_5 "Ach, halten Sie's Maul, ich gehe trotzdem!", // kStringDialogAxacussCorridor5_6 // 535 - "Wenn Sie mich durchlassen gebe ich Ihnen %s Xa.", // kStringDialogAxacussCorridor5_7 + "Wenn Sie mich durchlassen gebe ich Ihnen %d Xa.", // kStringDialogAxacussCorridor5_7 "Hallo!", // kStringDialogX1 "Guten Tag!", // kStringDialogX2 "Ich bin's, Horst Hummel.", // kStringDialogX3 diff --git a/engines/supernova/msn_def.h b/engines/supernova/msn_def.h index 597749ab7b..3dc54c5fae 100644 --- a/engines/supernova/msn_def.h +++ b/engines/supernova/msn_def.h @@ -557,7 +557,10 @@ enum StringID { kStringTelomat3, kStringTelomat4, kStringTelomat5, kStringTelomat6, kStringTelomat7, kStringTelomat8, kStringTelomat9, kStringTelomat10, kStringTelomat11, kStringTelomat12, kStringTelomat13, kStringTelomat14, kStringTelomat15, kStringTelomat16, kStringTelomat17, - kStringTelomat18, kStringTelomat19, kStringTelomat20, kStringTelomat21, kStringAlarm + kStringTelomat18, kStringTelomat19, kStringTelomat20, kStringTelomat21, kStringAlarm, + + // Add two placeholder strings at the end for variable text + kStringPlaceholder1, kStringPlaceholder2 }; static StringID guiCommands[] = { diff --git a/engines/supernova/rooms.cpp b/engines/supernova/rooms.cpp index 6afae1314b..2349fc84e6 100644 --- a/engines/supernova/rooms.cpp +++ b/engines/supernova/rooms.cpp @@ -2565,10 +2565,13 @@ bool AxacussCorridor5::handleMoneyDialog() { removeSentence(2, 2); removeSentence(3, 2); } else { - _varTexts3[2] = Common::String::format("%d", _gm->_state._money - 200); - _varTexts3[3] = Common::String::format("%d", _gm->_state._money); + Common::String string = _vm->getGameString(kStringDialogAxacussCorridor5_7); + _vm->setGameString(kStringPlaceholder1, Common::String::format(string.c_str(), _gm->_state._money - 200)); + _vm->setGameString(kStringPlaceholder2, Common::String::format(string.c_str(), _gm->_state._money)); + _dialog3[2] = kStringPlaceholder1; + _dialog3[3] = kStringPlaceholder2; } - switch (_gm->dialog(4, _rows, _dialog3, 2, _varTexts3)) { + switch (_gm->dialog(4, _rows, _dialog3, 2)) { case 1: _gm->wait2(3); _vm->renderImage(1); diff --git a/engines/supernova/rooms.h b/engines/supernova/rooms.h index 62c7d8f6d0..ad28afb991 100644 --- a/engines/supernova/rooms.h +++ b/engines/supernova/rooms.h @@ -1015,9 +1015,6 @@ public: _rows[3] = 1; _rows[4] = 0; _rows[5] = 0; - - for (int i = 0; i < 6; i++) - _varTexts3[i] = ""; } virtual void onEntrance(); @@ -1031,7 +1028,6 @@ private: StringID _dialog1[2]; StringID _dialog2[2]; StringID _dialog3[4]; - Common::String _varTexts3[6]; byte _rows[6]; }; diff --git a/engines/supernova/state.cpp b/engines/supernova/state.cpp index 2481e6b307..e0f30e941e 100644 --- a/engines/supernova/state.cpp +++ b/engines/supernova/state.cpp @@ -355,7 +355,6 @@ void GameManager::initState() { for (int i = 0 ; i < 6 ; ++i) { _sentenceNumber[i] = -1; _texts[i] = kNoString; - _varTexts[i].clear(); _rows[i] = 0; _rowsStart[i] = 0; } @@ -687,8 +686,6 @@ void GameManager::telomat(int nr) { dial2[3] = kStringDialogSeparator; static byte rows2[4] = {1, 1, 1, 1}; - - Common::String varDial[6]; _vm->renderBox(0, 0, 320, 200, kColorBlack); _vm->renderText(kStringTelomat7, 100, 70, kColorGreen); @@ -755,13 +752,14 @@ void GameManager::telomat(int nr) { waitOnInput(_timer1); _vm->removeMessage(); if (_state._nameSeen[nr]) { - varDial[1] = name2[nr]; - dial1[1] = kStringTelomat2; + Common::String string = _vm->getGameString(kStringTelomat2); + _vm->setGameString(kStringPlaceholder1, Common::String::format(string.c_str(), name2[nr].c_str())); + dial1[1] = kStringPlaceholder1; _currentRoom->addSentence(1, 1); } else _currentRoom->removeSentence(1, 1); - switch (dialog(3, rows1, dial1, 1, varDial)) { + switch (dialog(3, rows1, dial1, 1)) { case 1: _vm->renderMessage(kStringTelomat18, kMessageTop); waitOnInput(_timer1); _vm->removeMessage(); @@ -1299,7 +1297,7 @@ void GameManager::reply(const char *text, int aus1, int aus2) { _vm->removeMessage(); } -int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number, Common::String varText[6]) { +int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number) { _vm->_allowLoadGame = false; _guiEnabled = false; @@ -1322,8 +1320,6 @@ int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number _rows[i] = rowLength[i]; for (int j = 0; j < _rows[i]; ++j, ++r, ++rq) { _texts[r] = text[rq]; - if (varText != nullptr && !varText[rq].empty()) - _varTexts[r] = varText[rq]; _sentenceNumber[r] = i; } sentence(i, false); diff --git a/engines/supernova/state.h b/engines/supernova/state.h index 91ab54f49f..7bb7b1861e 100644 --- a/engines/supernova/state.h +++ b/engines/supernova/state.h @@ -142,7 +142,6 @@ public: int _currentSentence; int _sentenceNumber[6]; StringID _texts[6]; - Common::String _varTexts[6]; byte _rows[6]; byte _rowsStart[6]; @@ -189,7 +188,7 @@ public: void setAnimationTimer(int ticks); void dead(const char *message); void dead(StringID messageId); - int dialog(int num, byte rowLength[6], StringID text[6], int number, Common::String varText[6] = nullptr); + int dialog(int num, byte rowLength[6], StringID text[6], int number); void sentence(int number, bool brightness); void say(StringID textId); void say(const char *text); diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h index 5602ce6035..e3aeebb5c1 100644 --- a/engines/supernova/supernova.h +++ b/engines/supernova/supernova.h @@ -150,6 +150,15 @@ public: return _nullString; return _gameStrings[idx]; } + + void setGameString(int idx, const Common::String &string) { + if (idx < 0) + return; + while ((int)_gameStrings.size() <= idx) + _gameStrings.push_back(Common::String()); + _gameStrings[idx] = string; + } + int textWidth(const Common::String &text) { if (text.empty()) return 0; |