aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/scumm/dialogs.cpp9
-rw-r--r--engines/scumm/dialogs.h8
-rw-r--r--engines/scumm/input.cpp20
3 files changed, 37 insertions, 0 deletions
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index a95aeacdad..13babc181f 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -910,7 +910,16 @@ void ValueDisplayDialog::open() {
_timer = getMillis() + kDisplayDelay;
}
+Indy3IQPointsDialog::Indy3IQPointsDialog(ScummEngine *scumm, char* text)
+ : InfoDialog(scumm, text) {
+}
+void Indy3IQPointsDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) {
+ if (ascii == 'i')
+ close();
+ else
+ ScummDialog::handleKeyDown(ascii, keycode, modifiers);
+}
} // End of namespace Scumm
diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h
index bfcdaf2960..03e8783b3d 100644
--- a/engines/scumm/dialogs.h
+++ b/engines/scumm/dialogs.h
@@ -232,6 +232,14 @@ protected:
uint32 _timer;
};
+
+//The Indy IQ dialog
+class Indy3IQPointsDialog : public InfoDialog {
+public:
+ Indy3IQPointsDialog(ScummEngine *scumm, char* text);
+ virtual void handleKeyDown(uint16 ascii, int keycode, int modifiers);
+};
+
} // End of namespace Scumm
#endif
diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp
index d31d3afd85..eed52f5154 100644
--- a/engines/scumm/input.cpp
+++ b/engines/scumm/input.cpp
@@ -496,6 +496,26 @@ void ScummEngine_v3::processKeyboard(int lastKeyHit) {
// Fall back to default behavior
ScummEngine::processKeyboard(lastKeyHit);
}
+
+ // i brings up an IQ dialog in Indy3
+
+ if (lastKeyHit == 'i' && _game.id == GID_INDY3) {
+ // SCUMM var 244 is the episode score
+ // and var 245 is the series score
+ char text[50];
+
+ // FIXME: Currently, the series score does not work properly
+ // This workaround just sets it equal to the episode score
+ // However, at the end of the game, it does show the episode
+ // score by itself
+ int a = _scummVars[245];
+ if (!a)
+ a = _scummVars[244];
+
+ sprintf(text, "IQ Points: Episode = %d, Series = %d", _scummVars[244], a);
+ Indy3IQPointsDialog indy3IQPointsDialog(this, text);
+ runDialog(indy3IQPointsDialog);
+ }
}
void ScummEngine::processKeyboard(int lastKeyHit) {