diff options
-rw-r--r-- | engines/scumm/input.cpp | 18 | ||||
-rw-r--r-- | engines/scumm/intern.h | 4 | ||||
-rw-r--r-- | engines/scumm/scumm.cpp | 4 | ||||
-rw-r--r-- | engines/scumm/scumm.h | 2 |
4 files changed, 22 insertions, 6 deletions
diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp index 92be3070b5..a25a23ebfe 100644 --- a/engines/scumm/input.cpp +++ b/engines/scumm/input.cpp @@ -219,8 +219,6 @@ void ScummEngine::clearClickedStatus() { } void ScummEngine::processInput(bool smushMode) { - int saveloadkey; - _lastKeyHit = _keyPressed; _keyPressed = 0; if (((_game.version <= 2) || (_game.platform == Common::kPlatformFMTowns && _game.version == 3)) && 315 <= _lastKeyHit && _lastKeyHit < 315+12) { @@ -317,7 +315,11 @@ void ScummEngine::processInput(bool smushMode) { if (!_lastKeyHit) return; + + processKeyboard(smushMode); +} +void ScummEngine_v8::processKeyboard(bool smushMode) { // If a key script was specified (a V8 feature), and it's trigger // key was pressed, run it. if (_keyScriptNo && (_keyScriptKey == _lastKeyHit)) { @@ -325,7 +327,13 @@ void ScummEngine::processInput(bool smushMode) { return; } - if (_game.version >= 6 && _lastKeyHit == 20) { + ScummEngine_v6::processKeyboard(smushMode); +} + +void ScummEngine_v6::processKeyboard(bool smushMode) { + if (_lastKeyHit == 20) { + // FIXME: What key is '20' supposed to indicate? I can't trigger + // it with my keyboard, it seems... char buf[256]; _voiceMode++; @@ -357,6 +365,10 @@ void ScummEngine::processInput(bool smushMode) { runDialog(dialog); return; } +} + +void ScummEngine::processKeyboard(bool smushMode) { + int saveloadkey; if (VAR_RESTART_KEY != 0xFF && _lastKeyHit == VAR(VAR_RESTART_KEY) || (((_game.version <= 2) || (_game.platform == Common::kPlatformFMTowns && _game.version == 3)) && _lastKeyHit == 8)) { diff --git a/engines/scumm/intern.h b/engines/scumm/intern.h index c3989f6938..c899847324 100644 --- a/engines/scumm/intern.h +++ b/engines/scumm/intern.h @@ -584,6 +584,7 @@ protected: virtual const char *getOpcodeDesc(byte i); virtual void scummLoop_handleActors(); + virtual void processKeyboard(bool smushMode); virtual void setupScummVars(); virtual void decodeParseString(int a, int b); @@ -896,6 +897,8 @@ protected: int _objectIDMapSize; ObjectNameId *_objectIDMap; + int _keyScriptKey, _keyScriptNo; + public: ScummEngine_v8(OSystem *syst, const DetectorResult &dr); ~ScummEngine_v8(); @@ -921,6 +924,7 @@ protected: virtual int getObjectIdFromOBIM(const byte *obim); + virtual void processKeyboard(bool smushMode); void desaturatePalette(int hueScale, int satScale, int lightScale, int startColor, int endColor); diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index 931ef7aa52..755a4358ab 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -333,8 +333,6 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _resultVarNumber = 0; _scummStackPos = 0; memset(_vmStack, 0, sizeof(_vmStack)); - _keyScriptKey = 0; - _keyScriptNo = 0; _fileOffset = 0; memset(_resourceMapper, 0, sizeof(_resourceMapper)); _lastLoadedRoom = 0; @@ -942,6 +940,8 @@ ScummEngine_v7::~ScummEngine_v7() { ScummEngine_v8::ScummEngine_v8(OSystem *syst, const DetectorResult &dr) : ScummEngine_v7(syst, dr) { _objectIDMap = 0; + _keyScriptKey = 0; + _keyScriptNo = 0; VAR_LANGUAGE = 0xFF; } diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index f9d5b693e0..c6088d7237 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -498,6 +498,7 @@ public: protected: void waitForTimer(int msec_delay); virtual void processInput(bool smushMode); + virtual void processKeyboard(bool smushMode); virtual void clearClickedStatus(); // Cursor/palette @@ -681,7 +682,6 @@ protected: const byte * const *_lastCodePtr; int _resultVarNumber, _scummStackPos; int _vmStack[150]; - int _keyScriptKey, _keyScriptNo; virtual void setupOpcodes() = 0; virtual void executeOpcode(byte i) = 0; |