diff options
author | Paul Gilbert | 2016-04-30 18:27:55 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-10 16:37:50 -0400 |
commit | 65dbc2a26505e79c51351eda10195e8425460a87 (patch) | |
tree | a6889e4e87459098c85b27f93782a5de25461c87 /engines/titanic/pet_control | |
parent | a15e299a06c8049cf4332ea2bf4b77ad0bd845e1 (diff) | |
download | scummvm-rg350-65dbc2a26505e79c51351eda10195e8425460a87.tar.gz scummvm-rg350-65dbc2a26505e79c51351eda10195e8425460a87.tar.bz2 scummvm-rg350-65dbc2a26505e79c51351eda10195e8425460a87.zip |
TITANIC: Resolve Pet Text fontNumber fields, getting npc nums
Diffstat (limited to 'engines/titanic/pet_control')
-rw-r--r-- | engines/titanic/pet_control/pet_conversations.cpp | 8 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_text.cpp | 47 | ||||
-rw-r--r-- | engines/titanic/pet_control/pet_text.h | 10 |
3 files changed, 47 insertions, 18 deletions
diff --git a/engines/titanic/pet_control/pet_conversations.cpp b/engines/titanic/pet_control/pet_conversations.cpp index bf26898891..090952dbe2 100644 --- a/engines/titanic/pet_control/pet_conversations.cpp +++ b/engines/titanic/pet_control/pet_conversations.cpp @@ -112,9 +112,11 @@ void CPetConversations::draw(CScreenManager *screenManager) { _textInput.draw(screenManager); if (_logChanged) { - int fontNumber = _log.getFontNumber(); - if (fontNumber >= 0) { - warning("TODO conversation draw"); + int startIndex = _log.getLinesStart(); + if (startIndex >= 0) { + int npcNum = _log.getNPCNum(1, startIndex); + if (npcNum > 0 && npcNum < 10) + _npcNum = npcNum; } _logChanged = false; diff --git a/engines/titanic/pet_control/pet_text.cpp b/engines/titanic/pet_control/pet_text.cpp index 6f870faa32..a1cc75cb42 100644 --- a/engines/titanic/pet_control/pet_text.cpp +++ b/engines/titanic/pet_control/pet_text.cpp @@ -26,10 +26,10 @@ namespace Titanic { CPetText::CPetText(uint count) : _stringsMerged(false), _maxCharsPerLine(-1), _lineCount(0), - _fontNumber1(-1), _field3C(0), _field40(0), _field44(0), + _linesStart(-1), _field3C(0), _field40(0), _field44(0), _backR(0xff), _backG(0xff), _backB(0xff), _textR(0), _textG(0), _textB(200), - _fontNumber2(0), _field64(0), _field68(0), _field6C(0), + _fontNumber(0), _field64(0), _field68(0), _field6C(0), _hasBorder(true), _scrollTop(0), _textCursor(nullptr), _field7C(0) { setupArrays(count); } @@ -162,11 +162,11 @@ void CPetText::draw(CScreenManager *screenManager) { tempRect = _bounds; tempRect.grow(-2); - screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); screenManager->writeString(SURFACE_BACKBUFFER, tempRect, _scrollTop, _lines, _textCursor); - screenManager->setFontNumber(_fontNumber1); + screenManager->setFontNumber(oldFontNumber); } void CPetText::mergeStrings() { @@ -255,7 +255,7 @@ void CPetText::updateStr3(int lineNum) { int CPetText::getTextHeight(CScreenManager *screenManager) { mergeStrings(); - int oldFontNumber = screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); int textHeight = screenManager->getTextBounds(_lines, _bounds.width()); screenManager->setFontNumber(oldFontNumber); @@ -275,28 +275,28 @@ void CPetText::setNPC(int val1, int npcId) { } void CPetText::scrollUp(CScreenManager *screenManager) { - int oldFontNumber = screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); _scrollTop -= screenManager->getFontHeight(); constrainScrollUp(screenManager); screenManager->setFontNumber(oldFontNumber); } void CPetText::scrollDown(CScreenManager *screenManager) { - int oldFontNumber = screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); _scrollTop += screenManager->getFontHeight(); constrainScrollDown(screenManager); screenManager->setFontNumber(oldFontNumber); } void CPetText::scrollUpPage(CScreenManager *screenManager) { - int oldFontNumber = screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); _scrollTop -= getPageHeight(screenManager); constrainScrollUp(screenManager); screenManager->setFontNumber(oldFontNumber); } void CPetText::scrollDownPage(CScreenManager *screenManager) { - int oldFontNumber = screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); _scrollTop += getPageHeight(screenManager); constrainScrollDown(screenManager); screenManager->setFontNumber(oldFontNumber); @@ -307,7 +307,7 @@ void CPetText::scrollToTop(CScreenManager *screenManager) { } void CPetText::scrollToBottom(CScreenManager *screenManager) { - int oldFontNumber = screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); _scrollTop = _bounds.height(); constrainScrollDown(screenManager); screenManager->setFontNumber(oldFontNumber); @@ -330,7 +330,7 @@ void CPetText::constrainScrollDown(CScreenManager *screenManager) { int CPetText::getPageHeight(CScreenManager *screenManager) { int textHeight = _bounds.height(); - int oldFontNumber = screenManager->setFontNumber(_fontNumber2); + int oldFontNumber = screenManager->setFontNumber(_fontNumber); int fontHeight = screenManager->getFontHeight(); screenManager->setFontNumber(oldFontNumber); @@ -410,4 +410,29 @@ void CPetText::hideCursor() { } } +int CPetText::getNPCNum(uint npcId, uint startIndex) { + if (!_stringsMerged) { + mergeStrings(); + if (!_stringsMerged) + return -1; + } + + int size = _lines.size(); + if (startIndex < 5 || startIndex >= size) + return -1; + + // Loop through string + for (const char *strP = _lines.c_str(); size >= 5; ++strP, --size) { + if (*strP == 26) { + byte id = *(strP - 2); + if (id == npcId) + return *(strP - 1); + } else if (*strP == 27) { + strP += 4; + } + } + + return - 1; +} + } // End of namespace Titanic diff --git a/engines/titanic/pet_control/pet_text.h b/engines/titanic/pet_control/pet_text.h index 9b914dcbc1..adbd1401ea 100644 --- a/engines/titanic/pet_control/pet_text.h +++ b/engines/titanic/pet_control/pet_text.h @@ -43,7 +43,7 @@ private: Rect _bounds; int _maxCharsPerLine; int _lineCount; - int _fontNumber1; + int _linesStart; int _field3C; int _field40; int _field44; @@ -53,7 +53,7 @@ private: int _textR; int _textG; int _textB; - int _fontNumber2; + int _fontNumber; int _field64; int _field68; int _field6C; @@ -175,9 +175,9 @@ public: void setNPC(int val1, int npcId); /** - * Get the font + * Get the index into _lines where on-screen text starts */ - int getFontNumber() const { return _fontNumber1; } + int getLinesStart() const { return _linesStart; } /** * Scroll the text up @@ -241,6 +241,8 @@ public: * Removes the cursor attached to the text */ void hideCursor(); + + int getNPCNum(uint npcId, uint startIndex); }; } // End of namespace Titanic |