aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/prince/prince.cpp50
-rw-r--r--engines/prince/prince.h4
-rw-r--r--engines/prince/script.cpp2
3 files changed, 46 insertions, 10 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp
index a425510cef..e9847b7f0d 100644
--- a/engines/prince/prince.cpp
+++ b/engines/prince/prince.cpp
@@ -87,7 +87,7 @@ PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc)
_optionsMob(0), _currentPointerNumber(1), _selectedMob(0), _selectedItem(0), _selectedMode(0),
_optionsWidth(210), _optionsHeight(170), _invOptionsWidth(210), _invOptionsHeight(130), _optionsStep(20),
_invOptionsStep(20), _optionsNumber(7), _invOptionsNumber(5), _optionsColor1(0xFF00EC), _optionsColor2(0xFF00FC),
- _dialogWidth(600), _dialogHeight(0) {
+ _dialogWidth(600), _dialogHeight(0), _dialogColor1(0xFF00DC), _dialogColor2(0xFF00DF) {
// Debug/console setup
DebugMan.addDebugChannel(DebugChannel::kScript, "script", "Prince Script debug channel");
@@ -1841,7 +1841,7 @@ void PrinceEngine::checkInvOptions() {
};
uint16 textW = getTextWidth(invText.c_str());
uint16 textX = _optionsX + _invOptionsWidth / 2 - textW / 2;
- _font->drawString(_graph->_screenForInventory, invText, textX, textY, textW, optionsColor);
+ _font->drawString(_graph->_screenForInventory, invText, textX, textY, _graph->_screenForInventory->w, optionsColor);
textY += _invOptionsStep;
}
}
@@ -1946,7 +1946,7 @@ void PrinceEngine::createDialogBox(Common::Array<DialogLine> &dialogData) {
_dialogImage->fillRect(dBoxRect, _graph->kShadowColor);
}
-void PrinceEngine::runDialog() {
+void PrinceEngine::runDialog(Common::Array<DialogLine> &dialogData) {
while (!shouldQuit()) {
@@ -1956,6 +1956,36 @@ void PrinceEngine::runDialog() {
int dialogY = 460 - _dialogHeight;
_graph->drawAsShadowSurface(_graph->_frontScreen, dialogX, dialogY, _dialogImage, _graph->_shadowTable50);
+ int dialogSkipLeft = 14;
+ int dialogSkipUp = 10;
+ int lineSpace = 10;
+
+ int dialogTextX = dialogX + dialogSkipLeft;
+ int dialogTextY = dialogY + dialogSkipUp;
+
+ Common::Point mousePos = _system->getEventManager()->getMousePos();
+
+ int dialogSelected = -1;
+
+ for (uint i = 0; i < dialogData.size(); i++) {
+ int actualColor = _dialogColor1;
+
+ Common::Array<Common::String> lines;
+ _font->wordWrapText(dialogData[i]._line, _graph->_frontScreen->w, lines);
+
+ Common::Rect dialogOption(dialogTextX, dialogTextY - dialogSkipUp / 2, dialogX + _dialogWidth - dialogSkipLeft, dialogTextY + lines.size() * _font->getFontHeight() + dialogSkipUp / 2 - 1);
+ if (dialogOption.contains(mousePos)) {
+ actualColor = _dialogColor2;
+ }
+
+ for (uint j = 0; j < lines.size(); j++) {
+ Common::String dialogText = dialogData[i]._line;
+ _font->drawString(_graph->_frontScreen, dialogText, dialogTextX, dialogTextY, _graph->_frontScreen->w, actualColor);
+ dialogTextY += _font->getFontHeight();
+ }
+ dialogTextY += lineSpace;
+ }
+
Common::Event event;
Common::EventManager *eventMan = _system->getEventManager();
while (eventMan->pollEvent(event)) {
@@ -1993,25 +2023,29 @@ void PrinceEngine::runDialog() {
delete _dialogImage;
}
-// Debug
+// Test
void PrinceEngine::testDialog() {
Common::Array<DialogLine> tempDialogBox;
DialogLine tempDialogLine;
+ // dialBox 0 create:
for (int i = 0; i < 4; i++) {
tempDialogLine._nr = i;
tempDialogLine._line = "";
- tempDialogLine._line += "This is " + i;
- tempDialogLine._line += " dialog line.";
tempDialogBox.push_back(tempDialogLine);
}
+ tempDialogBox[0]._line = "Co to za miejsce?";
+ tempDialogBox[1]._line = "Prosze, musi mi pan pomoc wydostac sie stad!";
+ tempDialogBox[2]._line = "Tu chyba nie jest zbyt bezpiecznie, prawda?";
+ tempDialogBox[3]._line = "Nie chce przeszkadzac.";
+
_dialogBoxList.push_back(tempDialogBox);
- //dialogBox 0 - test:
+ //dialogBox 0 draw:
createDialogBox(_dialogBoxList[0]);
if (_dialogBoxList[0].size() != 0) {
changeCursor(1);
- runDialog();
+ runDialog(_dialogBoxList[0]);
changeCursor(0);
}
}
diff --git a/engines/prince/prince.h b/engines/prince/prince.h
index d98bfacc56..7cdd611cf9 100644
--- a/engines/prince/prince.h
+++ b/engines/prince/prince.h
@@ -348,10 +348,12 @@ public:
int _dialogWidth;
int _dialogHeight;
+ int _dialogColor1; // color for non-selected options
+ int _dialogColor2; // color for selected option
Graphics::Surface *_dialogImage;
void createDialogBox(Common::Array<DialogLine> &dialogData);
- void runDialog();
+ void runDialog(Common::Array<DialogLine> &dialogData);
void testDialog();
int testAnimNr;
diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp
index c559d3f54c..29566b7fb7 100644
--- a/engines/prince/script.cpp
+++ b/engines/prince/script.cpp
@@ -1248,7 +1248,7 @@ void Interpreter::O_SHOWDIALOGBOX() {
_flags->setFlagValue(Flags::DIALINES, dialogLines);
if (dialogLines != 0) {
_vm->changeCursor(1);
- _vm->runDialog();
+ _vm->runDialog(_vm->_dialogBoxList[box]);
_vm->changeCursor(0);
}
}