From 1922b330adeb553dc7f02fa93f2faa5328f176c3 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Mon, 18 Oct 2004 06:40:36 +0000 Subject: [PATCH] Add keyboard control for HE80+ games. svn-id: r15604 --- scumm/input.cpp | 25 +++++++++++++++++++++++++ scumm/script.cpp | 4 ++-- scumm/scumm.cpp | 3 ++- scumm/scumm.h | 1 + scumm/vars.cpp | 3 ++- 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/scumm/input.cpp b/scumm/input.cpp index b8b10b975f3..c8a33cbcc45 100644 --- a/scumm/input.cpp +++ b/scumm/input.cpp @@ -97,6 +97,31 @@ void ScummEngine::parseEvents() { _keyPressed = event.kbd.ascii; // Normal key press, pass on to the game. } + if (_heversion >= 80) { + // Keyboard is controlled via variable + int _keyState = 0; + + if (event.kbd.ascii == 276) // Left + _keyState = 1; + + if (event.kbd.ascii == 275) // Right + _keyState |= 2; + + if (event.kbd.ascii == 273) // Up + _keyState |= 4; + + if (event.kbd.ascii == 274) // Down + _keyState |= 8; + + if (event.kbd.flags == OSystem::KBD_SHIFT) + _keyState |= 16; + + if (event.kbd.flags == OSystem::KBD_CTRL) + _keyState |= 32; + + VAR(VAR_KEY_STATE) = _keyState; + } + if (_keyPressed >= 512) debugC(DEBUG_GENERAL, "_keyPressed > 512 (%d)", _keyPressed); else diff --git a/scumm/script.cpp b/scumm/script.cpp index 41cb9e61d22..1071aec186b 100644 --- a/scumm/script.cpp +++ b/scumm/script.cpp @@ -548,7 +548,7 @@ int ScummEngine::readVar(uint var) { var &= 0xFFF; } - if (_heversion >= 72) + if (_heversion >= 80) checkRange(25, 0, var, "Local variable %d out of range(r)"); else checkRange(20, 0, var, "Local variable %d out of range(r)"); @@ -627,7 +627,7 @@ void ScummEngine::writeVar(uint var, int value) { var &= 0xFFF; } - if (_heversion >= 72) + if (_heversion >= 80) checkRange(25, 0, var, "Local variable %d out of range(w)"); else checkRange(20, 0, var, "Local variable %d out of range(w)"); diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp index a3f609f03f7..cc48f1d9e26 100644 --- a/scumm/scumm.cpp +++ b/scumm/scumm.cpp @@ -850,6 +850,7 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS VAR_NUM_UNK = 0xFF; VAR_POLYGONS_ONLY = 0xFF; VAR_WINDOWS_VERSION = 0xFF; + VAR_KEY_STATE = 0xFF; VAR_WIZ_TCOLOR = 0xFF; // Use g_scumm from error() ONLY @@ -1089,7 +1090,7 @@ void ScummEngine::mainInit() { if (VAR_DEBUGMODE != 0xFF) { // This is NOT for the Mac version of Indy3/Loom VAR(VAR_DEBUGMODE) = _debugMode; - if (_heversion >= 80) + if (_heversion >= 80 && _debugMode) VAR(85) = 1; } diff --git a/scumm/scumm.h b/scumm/scumm.h index 56600da6669..508c35dc790 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -1335,6 +1335,7 @@ public: byte VAR_NUM_UNK; byte VAR_POLYGONS_ONLY; byte VAR_WINDOWS_VERSION; + byte VAR_KEY_STATE; byte VAR_WIZ_TCOLOR; }; diff --git a/scumm/vars.cpp b/scumm/vars.cpp index 6f0bce6c5fc..a07921dd3de 100644 --- a/scumm/vars.cpp +++ b/scumm/vars.cpp @@ -263,6 +263,7 @@ void ScummEngine_v72he::setupScummVars() { if (_heversion >= 80) VAR_WINDOWS_VERSION = 79; + VAR_KEY_STATE = 86; if (_heversion >= 90) { VAR_NUM_SPRITES = 106; VAR_WIZ_TCOLOR = 117; @@ -491,7 +492,7 @@ void ScummEngine::initScummVars() { VAR(VAR_V6_EMSSPACE) = 10000; VAR(VAR_NUM_GLOBAL_OBJS) = _numGlobalObjects - 1; } else if (_heversion >= 70) { - VAR(VAR_NUM_SOUND_CHANNELS) = 3; + VAR(VAR_NUM_SOUND_CHANNELS) = 8; VAR(VAR_MUSIC_CHANNEL) = 1; VAR(VAR_SOUND_CHANNEL) = 2;