diff options
-rw-r--r-- | engines/scumm/dialogs.cpp | 9 | ||||
-rw-r--r-- | engines/scumm/dialogs.h | 8 | ||||
-rw-r--r-- | engines/scumm/input.cpp | 20 |
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) { |