[Scummvm-git-logs] scummvm master -> 436d9475ca015660b02fedd4cdc0a60516c82394
sev-
noreply at scummvm.org
Mon Jul 21 11:00:24 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
436d9475ca ACCESS: Add keymapper support
Commit: 436d9475ca015660b02fedd4cdc0a60516c82394
https://github.com/scummvm/scummvm/commit/436d9475ca015660b02fedd4cdc0a60516c82394
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-07-21T13:00:20+02:00
Commit Message:
ACCESS: Add keymapper support
Changed paths:
engines/access/POTFILES
engines/access/access.cpp
engines/access/access.h
engines/access/amazon/amazon_game.cpp
engines/access/amazon/amazon_logic.cpp
engines/access/events.cpp
engines/access/events.h
engines/access/martian/martian_game.cpp
engines/access/martian/martian_scripts.cpp
engines/access/metaengine.cpp
engines/access/room.cpp
engines/access/scripts.cpp
engines/access/video/movie_decoder.cpp
diff --git a/engines/access/POTFILES b/engines/access/POTFILES
index eafbe170562..0d4bab60d67 100644
--- a/engines/access/POTFILES
+++ b/engines/access/POTFILES
@@ -1 +1,2 @@
+engines/access/metaengine.cpp
engines/access/resources.cpp
diff --git a/engines/access/access.cpp b/engines/access/access.cpp
index 91fc70b5591..4bed05808b3 100644
--- a/engines/access/access.cpp
+++ b/engines/access/access.cpp
@@ -249,7 +249,7 @@ void AccessEngine::speakText(BaseSurface *s, const Common::String &msg) {
while (!shouldQuit()) {
soundsLeft = _countTbl[curPage];
- _events->zeroKeys();
+ _events->zeroKeysActions();
int width = 0;
bool lastLine = _fonts._font2->getLine(lines, s->_maxChars * 6, line, width);
@@ -275,7 +275,7 @@ void AccessEngine::speakText(BaseSurface *s, const Common::String &msg) {
_scripts->cmdFreeSound();
- if (_events->isKeyMousePressed()) {
+ if (_events->isKeyActionMousePressed()) {
_sndSubFile += soundsLeft;
break;
} else {
@@ -312,7 +312,7 @@ void AccessEngine::speakText(BaseSurface *s, const Common::String &msg) {
_events->debounceLeft();
_sndSubFile += soundsLeft;
break;
- } else if (_events->isKeyPending()) {
+ } else if (_events->isKeyActionPending()) {
_sndSubFile += soundsLeft;
break;
} else {
@@ -340,7 +340,7 @@ void AccessEngine::printText(BaseSurface *s, const Common::String &msg) {
s->_printOrg = Common::Point(s->_printStart.x, s->_printOrg.y + 9);
if (s->_printOrg.y >_printEnd && !lastLine) {
- _events->waitKeyMouse();
+ _events->waitKeyActionMouse();
s->copyBuffer(&_buffer2);
s->_printOrg.y = s->_printStart.y;
}
@@ -348,7 +348,7 @@ void AccessEngine::printText(BaseSurface *s, const Common::String &msg) {
if (lastLine)
break;
}
- _events->waitKeyMouse();
+ _events->waitKeyActionMouse();
}
diff --git a/engines/access/access.h b/engines/access/access.h
index 96d79c77eec..4d353a62516 100644
--- a/engines/access/access.h
+++ b/engines/access/access.h
@@ -68,6 +68,43 @@ enum AccessDebugChannels {
kDebugSound,
};
+enum ACCESSActions {
+ kActionNone,
+ kActionMoveUp,
+ kActionMoveDown,
+ kActionMoveLeft,
+ kActionMoveRight,
+ kActionMoveUpLeft,
+ kActionMoveUpRight,
+ kActionMoveDownLeft,
+ kActionMoveDownRight,
+ kActionLook,
+ kActionUse,
+ kActionTake,
+ kActionInventory,
+ kActionClimb,
+ kActionTalk,
+ kActionWalk,
+ kActionHelp,
+ kActionSkip,
+};
+
+struct AccessActionCode {
+ ACCESSActions _action;
+ int8 _code;
+};
+
+static const AccessActionCode _accessActionCodes[] = {
+ { kActionLook, 1 },
+ { kActionUse, 2 },
+ { kActionTake, 3 },
+ { kActionInventory, 4 },
+ { kActionClimb, 5 },
+ { kActionTalk, 6 },
+ { kActionWalk, 7 },
+ { kActionHelp, 8 },
+};
+
extern const char *const _estTable[];
#define ACCESS_SAVEGAME_VERSION 1
diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp
index e7c7d69e21e..419fbf05935 100644
--- a/engines/access/amazon/amazon_game.cpp
+++ b/engines/access/amazon/amazon_game.cpp
@@ -524,7 +524,7 @@ void AmazonEngine::startChapter(int chapter) {
return;
_events->debounceLeft();
- _events->zeroKeys();
+ _events->zeroKeysActions();
playVideo(_chapter, Common::Point(4, 113));
if (shouldQuit())
return;
@@ -544,14 +544,14 @@ void AmazonEngine::startChapter(int chapter) {
}
// Wait loop
- while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[20]._flag) {
+ while (!shouldQuit() && !_events->isKeyActionMousePressed() && _timers[20]._flag) {
_events->pollEventsAndWait();
}
}
_screen->forceFadeOut();
_events->debounceLeft();
- _events->zeroKeys();
+ _events->zeroKeysActions();
_screen->clearScreen();
_screen->setPanel(3);
@@ -584,7 +584,7 @@ void AmazonEngine::startChapter(int chapter) {
_timers[20]._flag++;
// Wait loop
- while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[20]._flag) {
+ while (!shouldQuit() && !_events->isKeyActionMousePressed() && _timers[20]._flag) {
_events->pollEventsAndWait();
}
if (shouldQuit())
@@ -592,7 +592,7 @@ void AmazonEngine::startChapter(int chapter) {
_screen->forceFadeOut();
_events->debounceLeft();
- _events->zeroKeys();
+ _events->zeroKeysActions();
_screen->clearBuffer();
_files->loadScreen(96, 16);
@@ -676,7 +676,7 @@ void AmazonEngine::dead(int deathId) {
_screen->forceFadeOut();
_scripts->cmdFreeSound();
_events->debounceLeft();
- _events->zeroKeys();
+ _events->zeroKeysActions();
_sound->_soundTable.push_back(SoundEntry(_files->loadFile(98, 44), 1));
diff --git a/engines/access/amazon/amazon_logic.cpp b/engines/access/amazon/amazon_logic.cpp
index 5588b0c55ea..6ddaaaabbc3 100644
--- a/engines/access/amazon/amazon_logic.cpp
+++ b/engines/access/amazon/amazon_logic.cpp
@@ -158,7 +158,7 @@ void CampScene::mWhileDoOpen() {
events.pollEventsAndWait();
- if (_vm->_events->isKeyMousePressed()) {
+ if (_vm->_events->isKeyActionMousePressed()) {
_skipStart = true;
_vm->_midi->newMusic(10, 1);
break;
@@ -167,7 +167,7 @@ void CampScene::mWhileDoOpen() {
if (_xCam > 680) {
events._vbCount = 125;
- while (!_vm->shouldQuit() && !events.isKeyMousePressed() && events._vbCount > 0) {
+ while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() && events._vbCount > 0) {
events.pollEventsAndWait();
}
break;
@@ -385,7 +385,7 @@ void Opening::doTitle() {
screen.forceFadeIn();
_vm->_midi->newMusic(1, 0);
_vm->_events->_vbCount = 950;
- while (!_vm->shouldQuit() && (_vm->_events->_vbCount > 0) && !_vm->_events->isKeyMousePressed()) {
+ while (!_vm->shouldQuit() && (_vm->_events->_vbCount > 0) && !_vm->_events->isKeyActionMousePressed()) {
_vm->_events->pollEventsAndWait();
}
@@ -398,7 +398,7 @@ void Opening::doTitle() {
_vm->_midi->newMusic(1, 1);
_vm->_midi->setLoop(false);
- _vm->_events->zeroKeys();
+ _vm->_events->zeroKeysActions();
}
_vm->_buffer1.create(_vm->_screen->w + TILE_WIDTH, _vm->_screen->h);
@@ -419,7 +419,7 @@ void Opening::doTitle() {
_pCount = 0;
while (!_vm->shouldQuit()) {
- if (_vm->_events->isKeyMousePressed()) {
+ if (_vm->_events->isKeyActionMousePressed()) {
if (_vm->_events->_rightButton)
_skipStart = true;
_vm->_room->clearRoom();
@@ -678,7 +678,7 @@ void Plane::mWhileFly() {
_xCount = 0;
_position = Common::Point(20, 29);
- while (!_vm->shouldQuit() && !events.isKeyMousePressed() &&
+ while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() &&
((_vm->_scrollCol + screen._vWindowWidth) != _vm->_room->_playFieldWidth)) {
events._vbCount = 4;
_vm->_scrollX += player._scrollAmount;
@@ -728,7 +728,7 @@ void Plane::mWhileFall() {
_xCount = 0;
_planeCount = 0;
- while (!_vm->shouldQuit() && !events.isKeyMousePressed() &&
+ while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() &&
(_vm->_scrollCol + screen._vWindowWidth != _vm->_room->_playFieldWidth)) {
events._vbCount = 4;
_vm->_scrollX += _vm->_player->_scrollAmount;
@@ -901,7 +901,7 @@ void Jungle::mWhileJWalk() {
_pan[i]._pObjXl = _pan[i]._pObjYl = 0;
}
- while (!_vm->shouldQuit() && !events.isKeyMousePressed() && (player._xFlag != 2)) {
+ while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() && (player._xFlag != 2)) {
_vm->_images.clear();
events._vbCount = 6;
@@ -930,7 +930,7 @@ void Jungle::mWhileJWalk2() {
initJWalk2();
- while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
+ while (!_vm->shouldQuit() && !_vm->_events->isKeyActionMousePressed() &&
(_vm->_scrollCol + screen._vWindowWidth) != _vm->_room->_playFieldWidth) {
_vm->_images.clear();
_vm->_events->_vbCount = 6;
@@ -1330,10 +1330,10 @@ void Cast::doCast(int param1) {
_vm->copyBlocks();
for (int idx = 0; idx < 5 && !_vm->shouldQuit() &&
- !_vm->_events->isKeyMousePressed(); ++idx)
+ !_vm->_events->isKeyActionMousePressed(); ++idx)
_vm->_events->pollEventsAndWait();
- if (_vm->_events->isKeyMousePressed())
+ if (_vm->_events->isKeyActionMousePressed())
break;
if (_yCam < -7550) {
@@ -1792,7 +1792,7 @@ void River::mWhileDownRiver() {
_vm->_timers[4]._initTm = 350;
++_vm->_timers[4]._flag;
- while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
+ while (!_vm->shouldQuit() && !_vm->_events->isKeyActionMousePressed() &&
(_vm->_scrollCol + screen._vWindowWidth != _vm->_room->_playFieldWidth)) {
_vm->_images.clear();
_vm->_events->_vbCount = 6;
diff --git a/engines/access/events.cpp b/engines/access/events.cpp
index 323a78dbdb3..1e65ca51c6c 100644
--- a/engines/access/events.cpp
+++ b/engines/access/events.cpp
@@ -147,7 +147,12 @@ void EventsManager::pollEvents(bool skipTimers) {
case Common::EVENT_QUIT:
case Common::EVENT_RETURN_TO_LAUNCHER:
return;
-
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ actionControl(event.customType, true);
+ return;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ actionControl(event.customType, false);
+ return;
case Common::EVENT_KEYDOWN:
// Check for debugger
keyControl(event.kbd.keycode, true);
@@ -202,34 +207,44 @@ void EventsManager::keyControl(Common::KeyCode keycode, bool isKeyDown) {
}
_keyCode = keycode;
+}
+
+void EventsManager::actionControl(Common::CustomEventType action, bool isKeyDown) {
+ Player &player = *_vm->_player;
+
+ if (!isKeyDown) {
+ if (player._move != NONE) {
+ _action = kActionNone;
+ player._move = NONE;
+ }
+ return;
+ }
+
+ _action = action;
- switch (keycode) {
- case Common::KEYCODE_UP:
- case Common::KEYCODE_KP8:
+ switch (action) {
+ case kActionMoveUp:
player._move = UP;
break;
- case Common::KEYCODE_DOWN:
- case Common::KEYCODE_KP2:
+ case kActionMoveDown:
player._move = DOWN;
break;
- case Common::KEYCODE_LEFT:
- case Common::KEYCODE_KP4:
+ case kActionMoveLeft:
player._move = LEFT;
break;
- case Common::KEYCODE_RIGHT:
- case Common::KEYCODE_KP6:
+ case kActionMoveRight:
player._move = RIGHT;
break;
- case Common::KEYCODE_KP7:
+ case kActionMoveUpLeft:
player._move = UPLEFT;
break;
- case Common::KEYCODE_KP9:
+ case kActionMoveUpRight:
player._move = UPRIGHT;
break;
- case Common::KEYCODE_KP1:
+ case kActionMoveDownLeft:
player._move = DOWNLEFT;
break;
- case Common::KEYCODE_KP3:
+ case kActionMoveDownRight:
player._move = DOWNRIGHT;
break;
default:
@@ -281,22 +296,23 @@ void EventsManager::delay(int time) {
g_system->delayMillis(time);
}
-void EventsManager::zeroKeys() {
+void EventsManager::zeroKeysActions() {
_keyCode = Common::KEYCODE_INVALID;
+ _action = kActionNone;
}
-bool EventsManager::getKey(Common::KeyState &key) {
- if (_keyCode == Common::KEYCODE_INVALID) {
+bool EventsManager::getAction(Common::CustomEventType &action) {
+ if (_action == kActionNone) {
return false;
} else {
- key = _keyCode;
- _keyCode = Common::KEYCODE_INVALID;
+ action = _action;
+ _action = kActionNone;
return true;
}
}
-bool EventsManager::isKeyPending() const {
- return _keyCode != Common::KEYCODE_INVALID;
+bool EventsManager::isKeyActionPending() const {
+ return (_keyCode != Common::KEYCODE_INVALID || _action != kActionNone);
}
void EventsManager::debounceLeft() {
@@ -307,11 +323,11 @@ void EventsManager::debounceLeft() {
void EventsManager::clearEvents() {
_leftButton = _rightButton = false;
- zeroKeys();
+ zeroKeysActions();
}
-void EventsManager::waitKeyMouse() {
- while (!_vm->shouldQuit() && !isKeyMousePressed()) {
+void EventsManager::waitKeyActionMouse() {
+ while (!_vm->shouldQuit() && !isKeyActionMousePressed()) {
pollEvents(true);
delay();
}
@@ -341,10 +357,10 @@ int EventsManager::checkMouseBox1(Common::Array<Common::Rect> &rects) {
return -1;
}
-bool EventsManager::isKeyMousePressed() {
- bool result = _leftButton || _rightButton || isKeyPending();
+bool EventsManager::isKeyActionMousePressed() {
+ bool result = _leftButton || _rightButton || isKeyActionPending();
debounceLeft();
- zeroKeys();
+ zeroKeysActions();
return result;
}
diff --git a/engines/access/events.h b/engines/access/events.h
index 75551de7fcd..0b31e32de7a 100644
--- a/engines/access/events.h
+++ b/engines/access/events.h
@@ -48,6 +48,7 @@ private:
uint32 _priorFrameTime;
uint32 _priorTimerTime;
Common::KeyCode _keyCode;
+ Common::CustomEventType _action;
Graphics::Surface _invCursor;
bool checkForNextFrameCounter();
@@ -55,6 +56,7 @@ private:
void nextFrame();
void nextTimer();
void keyControl(Common::KeyCode keycode, bool isKeyDown);
+ void actionControl(Common::CustomEventType action, bool isKeyDown);
public:
CursorType _cursorId;
CursorType _normalMouse;
@@ -125,11 +127,11 @@ public:
void pollEventsAndWait();
- void zeroKeys();
+ void zeroKeysActions();
- bool getKey(Common::KeyState &key);
+ bool getAction(Common::CustomEventType &action);
- bool isKeyPending() const;
+ bool isKeyActionPending() const;
void delay(int time = 5);
@@ -137,7 +139,7 @@ public:
void clearEvents();
- void waitKeyMouse();
+ void waitKeyActionMouse();
Common::Point &getMousePos() { return _mousePos; }
@@ -145,7 +147,7 @@ public:
int checkMouseBox1(Common::Array<Common::Rect> &rects);
- bool isKeyMousePressed();
+ bool isKeyActionMousePressed();
void centerMousePos();
void restrictMouse();
diff --git a/engines/access/martian/martian_game.cpp b/engines/access/martian/martian_game.cpp
index 741141d4662..59d20b3b73c 100644
--- a/engines/access/martian/martian_game.cpp
+++ b/engines/access/martian/martian_game.cpp
@@ -123,12 +123,12 @@ void MartianEngine::displayNote(const Common::String &msg) {
_screen->_printOrg = Common::Point(_screen->_printStart.x, _screen->_printOrg.y + 6);
if (_screen->_printOrg.y == 196) {
- _events->waitKeyMouse();
+ _events->waitKeyActionMouse();
setNoteParams();
_screen->_printOrg = _screen->_printStart;
}
} while (!lastLine);
- _events->waitKeyMouse();
+ _events->waitKeyActionMouse();
}
void MartianEngine::doSpecial5(int param1) {
@@ -236,7 +236,7 @@ bool MartianEngine::showCredits() {
_screen->forceFadeIn();
_timers[3]._timer = _timers[3]._initTm = posY;
- while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[3]._timer) {
+ while (!shouldQuit() && !_events->isKeyActionMousePressed() && _timers[3]._timer) {
_events->pollEventsAndWait();
}
@@ -271,11 +271,11 @@ void MartianEngine::doCredits() {
_screen->forceFadeIn();
_events->_vbCount = 550;
- while (!shouldQuit() && !_events->isKeyMousePressed() && _events->_vbCount > 0)
+ while (!shouldQuit() && !_events->isKeyActionMousePressed() && _events->_vbCount > 0)
_events->pollEventsAndWait();
_screen->forceFadeOut();
- while (!shouldQuit() && !_events->isKeyMousePressed()&& !showCredits())
+ while (!shouldQuit() && !_events->isKeyActionMousePressed()&& !showCredits())
_events->pollEventsAndWait();
warning("TODO: Free word_21E2B");
@@ -324,12 +324,12 @@ void MartianEngine::showDeathText(Common::String msg) {
_screen->_printOrg.x = _screen->_printStart.x;
if (_screen->_printOrg.y == 180) {
- _events->waitKeyMouse();
+ _events->waitKeyActionMouse();
_screen->copyBuffer(&_buffer2);
_screen->_printOrg.y = _screen->_printStart.y;
}
} while (!lastLine);
- _events->waitKeyMouse();
+ _events->waitKeyActionMouse();
}
void MartianEngine::dead(int deathId) {
diff --git a/engines/access/martian/martian_scripts.cpp b/engines/access/martian/martian_scripts.cpp
index 1ecc44f47db..97e92a4a135 100644
--- a/engines/access/martian/martian_scripts.cpp
+++ b/engines/access/martian/martian_scripts.cpp
@@ -289,7 +289,7 @@ void MartianScripts::cmdSpecial7() {
_vm->_events->showCursor();
_vm->_screen->forceFadeIn();
- _vm->_events->waitKeyMouse();
+ _vm->_events->waitKeyActionMouse();
_vm->_midi->stopSong();
_vm->_midi->freeMusic();
diff --git a/engines/access/metaengine.cpp b/engines/access/metaengine.cpp
index e03a5a9fd27..a3f4fdbcd25 100644
--- a/engines/access/metaengine.cpp
+++ b/engines/access/metaengine.cpp
@@ -33,6 +33,12 @@
#include "access/detection.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
+#include "common/translation.h"
+
#define MAX_SAVES 99
namespace Access {
@@ -81,6 +87,7 @@ public:
int getMaximumSaveSlot() const override;
bool removeSaveState(const char *target, int slot) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool AccessMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -178,6 +185,124 @@ SaveStateDescriptor AccessMetaEngine::querySaveMetaInfos(const char *target, int
return SaveStateDescriptor();
}
+Common::KeymapArray AccessMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Access;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "access-default", _("Default keymappings"));
+
+ Action *act;
+
+ act = new Action(kStandardActionLeftClick, _("Move / Interact / Skip"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Skip"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeyMap->addAction(act);
+
+ act = new Action("SKIP", _("Skip movie"));
+ act->setCustomEngineActionEvent(kActionSkip);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_X");
+ engineKeyMap->addAction(act);
+
+ act = new Action("UP", _("Move up"));
+ act->setCustomEngineActionEvent(kActionMoveUp);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("KP8");
+ act->addDefaultInputMapping("JOY_UP");
+ engineKeyMap->addAction(act);
+
+ act = new Action("DOWN", _("Move down"));
+ act->setCustomEngineActionEvent(kActionMoveDown);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("KP2");
+ act->addDefaultInputMapping("JOY_DOWN");
+ engineKeyMap->addAction(act);
+
+ act = new Action("LEFT", _("Move left"));
+ act->setCustomEngineActionEvent(kActionMoveLeft);
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("KP4");
+ act->addDefaultInputMapping("JOY_LEFT");
+ engineKeyMap->addAction(act);
+
+ act = new Action("RIGHT", _("Move right"));
+ act->setCustomEngineActionEvent(kActionMoveRight);
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("KP6");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ engineKeyMap->addAction(act);
+
+ act = new Action("UPLEFT", _("Move up-left"));
+ act->setCustomEngineActionEvent(kActionMoveUpLeft);
+ act->addDefaultInputMapping("KP7");
+ engineKeyMap->addAction(act);
+
+ act = new Action("UPRIGHT", _("Move up-right"));
+ act->setCustomEngineActionEvent(kActionMoveUpRight);
+ act->addDefaultInputMapping("KP9");
+ engineKeyMap->addAction(act);
+
+ act = new Action("DOWNLEFT", _("Move down-left"));
+ act->setCustomEngineActionEvent(kActionMoveDownLeft);
+ act->addDefaultInputMapping("KP1");
+ engineKeyMap->addAction(act);
+
+ act = new Action("DOWNRIGHT", _("Move down-right"));
+ act->setCustomEngineActionEvent(kActionMoveDownRight);
+ act->addDefaultInputMapping("KP3");
+ engineKeyMap->addAction(act);
+
+ act = new Action("LOOK", _("Look"));
+ act->setCustomEngineActionEvent(kActionLook);
+ act->addDefaultInputMapping("F1");
+ act->addDefaultInputMapping("F2");
+ engineKeyMap->addAction(act);
+
+ act = new Action("USE", _("Use"));
+ act->setCustomEngineActionEvent(kActionUse);
+ act->addDefaultInputMapping("F3");
+ engineKeyMap->addAction(act);
+
+ act = new Action("TAKE", _("Take"));
+ act->setCustomEngineActionEvent(kActionTake);
+ act->addDefaultInputMapping("F4");
+ engineKeyMap->addAction(act);
+
+ act = new Action("INVENTORY", _("Inventory"));
+ act->setCustomEngineActionEvent(kActionInventory);
+ act->addDefaultInputMapping("F5");
+ engineKeyMap->addAction(act);
+
+ act = new Action("CLIMB", _("Climb"));
+ act->setCustomEngineActionEvent(kActionClimb);
+ act->addDefaultInputMapping("F6");
+ engineKeyMap->addAction(act);
+
+ act = new Action("TALK", _("Talk"));
+ act->setCustomEngineActionEvent(kActionTalk);
+ act->addDefaultInputMapping("F7");
+ engineKeyMap->addAction(act);
+
+ act = new Action("WALK", _("Walk"));
+ act->setCustomEngineActionEvent(kActionWalk);
+ act->addDefaultInputMapping("F8");
+ engineKeyMap->addAction(act);
+
+ act = new Action("HELP", _("Help"));
+ act->setCustomEngineActionEvent(kActionHelp);
+ act->addDefaultInputMapping("F9");
+ engineKeyMap->addAction(act);
+
+ return Keymap::arrayOf(engineKeyMap);
+}
+
#if PLUGIN_ENABLED_DYNAMIC(ACCESS)
REGISTER_PLUGIN_DYNAMIC(ACCESS, PLUGIN_TYPE_ENGINE, AccessMetaEngine);
#else
diff --git a/engines/access/room.cpp b/engines/access/room.cpp
index 446dda24f84..e67edf4cbab 100644
--- a/engines/access/room.cpp
+++ b/engines/access/room.cpp
@@ -540,7 +540,7 @@ void Plotter::load(Common::SeekableReadStream *stream, int wallCount, int blockC
void Room::doCommands() {
int commandId = 0;
- Common::KeyState keyState;
+ Common::CustomEventType action;
if (_vm->_startup != -1)
return;
@@ -576,11 +576,13 @@ void Room::doCommands() {
// Mouse click in main game area
mainAreaClick();
}
- } else if (_vm->_events->getKey(keyState)) {
- if (keyState.keycode == Common::KEYCODE_F1)
- handleCommand(keyState.keycode - Common::KEYCODE_F1 + 1);
- else if (keyState.keycode >= Common::KEYCODE_F2 && keyState.keycode <= Common::KEYCODE_F10)
- handleCommand(keyState.keycode - Common::KEYCODE_F1);
+ } else if (_vm->_events->getAction(action)) {
+ for (int i = 0; i < ARRAYSIZE(_accessActionCodes); ++i) {
+ if (_accessActionCodes[i]._action == action) {
+ handleCommand(_accessActionCodes[i]._code);
+ break;
+ }
+ }
}
}
diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp
index 3cbae90c8ee..75d86c4dc7b 100644
--- a/engines/access/scripts.cpp
+++ b/engines/access/scripts.cpp
@@ -211,12 +211,12 @@ void Scripts::printWatch() {
_vm->_screen->_printOrg.x = _vm->_screen->_printStart.x;
if (_vm->_screen->_printOrg.y == 106) {
- _vm->_events->waitKeyMouse();
+ _vm->_events->waitKeyActionMouse();
clearWatch();
_vm->_screen->_printOrg.y = _vm->_screen->_printStart.y;
}
} while (!lastLine);
- _vm->_events->waitKeyMouse();
+ _vm->_events->waitKeyActionMouse();
}
void Scripts::findNull() {
@@ -314,7 +314,7 @@ void Scripts::doCmdPrint_v1(Common::String msg) {
_vm->_screen->_printOrg = Common::Point(20, 42);
_vm->_screen->_printStart = Common::Point(20, 32);
_vm->_bubbleBox->placeBubble(msg);
- _vm->_events->waitKeyMouse();
+ _vm->_events->waitKeyActionMouse();
_vm->_events->hideCursor();
_vm->_screen->restoreBlock();
_vm->_events->showCursor();
@@ -337,7 +337,7 @@ void Scripts::printString(const Common::String &msg) {
// Display the text in a bubble, and wait for a keypress or mouse click
_vm->_bubbleBox->placeBubble(msg);
- _vm->_events->waitKeyMouse();
+ _vm->_events->waitKeyActionMouse();
// Wait until the bubble display is expired
while (!_vm->shouldQuit() && _vm->_timers[PRINT_TIMER]._flag) {
@@ -558,7 +558,7 @@ void Scripts::cmdSetTimer() {
_vm->_timers[idx]._initTm = val;
_vm->_events->debounceLeft();
- _vm->_events->zeroKeys();
+ _vm->_events->zeroKeysActions();
}
void Scripts::cmdCheckTimer() {
@@ -574,8 +574,8 @@ void Scripts::cmdCheckTimer() {
if (_endFlag)
return;
- if ((idx == 9) && _vm->_events->isKeyPending()) {
- _vm->_events->zeroKeys();
+ if ((idx == 9) && _vm->_events->isKeyActionPending()) {
+ _vm->_events->zeroKeysActions();
_vm->_timers[9]._timer = 0;
_vm->_timers[9]._flag = 0;
}
@@ -938,9 +938,9 @@ void Scripts::cmdWait() {
_vm->_timers[3]._timer = time;
_vm->_timers[3]._initTm = time;
_vm->_timers[3]._flag++;
- _vm->_events->zeroKeys();
+ _vm->_events->zeroKeysActions();
- while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
+ while (!_vm->shouldQuit() && !_vm->_events->isKeyActionMousePressed() &&
_vm->_timers[3]._flag) {
_vm->_midi->midiRepeat();
charLoop();
@@ -949,7 +949,7 @@ void Scripts::cmdWait() {
}
_vm->_events->debounceLeft();
- _vm->_events->zeroKeys();
+ _vm->_events->zeroKeysActions();
}
void Scripts::cmdSetConPos() {
diff --git a/engines/access/video/movie_decoder.cpp b/engines/access/video/movie_decoder.cpp
index a64b0559c9a..a9e470cad70 100644
--- a/engines/access/video/movie_decoder.cpp
+++ b/engines/access/video/movie_decoder.cpp
@@ -725,9 +725,9 @@ bool AccessEngine::playMovie(const Common::Path &filename, const Common::Point &
_events->pollEventsAndWait();
- Common::KeyState keyState;
- if (_events->getKey(keyState)) {
- if (keyState.keycode == Common::KEYCODE_ESCAPE)
+ Common::CustomEventType action;
+ if (_events->getAction(action)) {
+ if (action == kActionSkip)
skipVideo = true;
}
}
More information about the Scummvm-git-logs
mailing list