diff --git a/engines/prince/option_text.h b/engines/prince/option_text.h new file mode 100644 index 000000000000..090470454763 --- /dev/null +++ b/engines/prince/option_text.h @@ -0,0 +1,84 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +namespace Prince { + +// Mazovia coding (with U2 negation) + +const char invOptionsTextPL[5][18] = { + { 'O', 'b', 'e', 'j', 'r', 'z', 'y', 'j', '\0' }, + { 'U', -89, 'y', 'j', '\0' }, + { 'O', 't', 'w', -94, 'r', 'z', '/', 'P', 'c', 'h', 'n', 'i', 'j', '\0' }, + { 'Z', 'a', 'm', 'k', 'n', 'i', 'j', '/', 'P', 'o', 'c', 'i', -122, 'g', 'n', 'i', 'j', '\0' }, + { 'D', 'a', 'j', '\0' } +}; + +// TODO +const char *invOptionsTextDE[] = { + "Anschauen", + "Benutzen", + "Öffnen/Stoßen", + "Schließen/Ziehen", + "Geben" +}; + +const char *invOptionsTextEN[] = { + "Examine", + "Use", + "Open/Push", + "Close/Pull", + "Give" +}; + +const char optionsTextPL[7][18] = { + { 'P', 'o', 'd', 'e', 'j', 'd', -90, '\0' }, + { 'O', 'b', 'e', 'j', 'r', 'z', 'y', 'j', '\0' }, + { 'Z', 'a', 'b', 'i', 'e', 'r', 'z', '\0' }, + { 'U', -89, 'y', 'j' }, + { 'O', 't', 'w', -94, 'r', 'z', '/', 'P', 'c', 'h', 'n', 'i', 'j', '\0' }, + { 'Z', 'a', 'm', 'k', 'n', 'i', 'j', '/', 'P', 'o', 'c', 'i', -122, 'g', 'n', 'i', 'j', '\0' }, + { 'P', 'o', 'r', 'o', 'z', 'm', 'a', 'w', 'i', 'a', 'j', '\0' } +}; + +// TODO +const char *optionsTextDE[] = { + "Hingehen", + "Anschauen", + "Wegnehmen", + "Benutzen", + "Öffnen/Stoßen", + "Schließen/Ziehen", + "Ansprechen" +}; + +const char *optionsTextEN[] = { + "Walk to", + "Examine", + "Pick up", + "Use", + "Open/Push", + "Close/Pull", + "Talk to" +}; + +} + diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 68bc41269b35..908d9dbe5055 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -60,6 +60,7 @@ #include "prince/hero.h" #include "prince/resource.h" #include "prince/animation.h" +#include "prince/option_text.h" namespace Prince { @@ -82,9 +83,10 @@ PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc) _invLineX(134), _invLineY(176), _invLine(5), _invLines(3), _invLineW(70), _invLineH(76), _maxInvW(72), _maxInvH(76), _invLineSkipX(2), _invLineSkipY(3), _showInventoryFlag(false), _inventoryBackgroundRemember(false), _mst_shadow(0), _mst_shadow2(0), _candleCounter(0), _invX1(53), _invY1(18), _invWidth(536), _invHeight(438), - _invCurInside(false), _optionsFlag(false), _optionEnabled(0), _invOptionsNumber(5), _invExamY(120), + _invCurInside(false), _optionsFlag(false), _optionEnabled(0), _invExamY(120), _optionsMob(0), _currentPointerNumber(1), _selectedMob(0), _selectedItem(0), _selectedMode(0), - _optionsWidth(210), _optionsHeight(170), _invOptionsWidth(210), _invOptionsHeight(130) { + _optionsWidth(210), _optionsHeight(170), _invOptionsWidth(210), _invOptionsHeight(130), _optionsStep(20), + _invOptionsStep(20), _optionsNumber(7), _invOptionsNumber(5), _optionsColor1(0xFF00EC), _optionsColor2(0xFF00FC) { // Debug/console setup DebugMan.addDebugChannel(DebugChannel::kScript, "script", "Prince Script debug channel"); @@ -1666,6 +1668,47 @@ void PrinceEngine::checkInvOptions() { return; } _graph->drawAsShadowSurface(_graph->_screenForInventory, _optionsX, _optionsY, _optionsPicInInventory, _graph->_shadowTable50); + + _optionEnabled = -1; + int optionsYCord = mousePos.y - (_optionsY + 16); + if (optionsYCord >= 0) { + int selectedOptionNr = optionsYCord / _invOptionsStep; + if (selectedOptionNr < _optionsNumber) { + _optionEnabled = selectedOptionNr; + } + } + //NoBackgroundFlag = 1; + //int eax = _optionsX + _invOptionsWidth / 2; + //int ecx = _optionsNumber; + int optionsColor; + int textY = _optionsY + 16; + for (int i = 0; i < _invOptionsNumber; i++) { + if (i != _optionEnabled) { + optionsColor = _optionsColor1; + } else { + optionsColor = _optionsColor2; + } + Common::String invText; + switch(getLanguage()) { + case Common::PL_POL: + invText = invOptionsTextPL[i]; + break; + case Common::DE_DEU: + invText = invOptionsTextDE[i]; + break; + case Common::EN_ANY: + invText = invOptionsTextEN[i]; + break; + }; + uint16 textW = 0; + for (uint16 i = 0; i < invText.size(); i++) { + textW += _font->getCharWidth(invText[i]); + } + uint16 textX = _optionsX + _optionsWidth / 2 - textW / 2; + _font->drawString(_graph->_screenForInventory, invText, textX, textY, _graph->_screenForInventory->w, optionsColor); + textY += _invOptionsStep; + } + //NoBackgroundFlag = 1; } } diff --git a/engines/prince/prince.h b/engines/prince/prince.h index 172aa565ed8c..6ec49dad6569 100644 --- a/engines/prince/prince.h +++ b/engines/prince/prince.h @@ -295,9 +295,14 @@ class PrinceEngine : public Engine { int _optionsHeight; int _invOptionsWidth; int _invOptionsHeight; + int _optionsStep; + int _invOptionsStep; + int _optionsNumber; + int _invOptionsNumber; + int _optionsColor1; // color for non-selected options + int _optionsColor2; // color for selected option bool _showInventoryFlag; - int _invOptionsNumber; int _invExamY; bool _inventoryBackgroundRemember; int _invLineX;