[Scummvm-git-logs] scummvm master -> e85b0412a289f66eb1c80942160ba3c20e2370a3
bluegr
noreply at scummvm.org
Sat Jul 27 20:39:40 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e85b0412a2 BBVS: Add keymapper support
Commit: e85b0412a289f66eb1c80942160ba3c20e2370a3
https://github.com/scummvm/scummvm/commit/e85b0412a289f66eb1c80942160ba3c20e2370a3
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-07-27T23:39:37+03:00
Commit Message:
BBVS: Add keymapper support
Changed paths:
engines/access/events.h
engines/bbvs/bbvs.cpp
engines/bbvs/bbvs.h
engines/bbvs/metaengine.cpp
engines/bbvs/minigames/bbairguitar.cpp
engines/bbvs/minigames/bbant.cpp
engines/bbvs/minigames/bbloogie.cpp
engines/bbvs/minigames/bbtennis.cpp
engines/bbvs/videoplayer.cpp
diff --git a/engines/access/events.h b/engines/access/events.h
index 75551de7fcd..76e204313a8 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 _customAction;
Graphics::Surface _invCursor;
bool checkForNextFrameCounter();
diff --git a/engines/bbvs/bbvs.cpp b/engines/bbvs/bbvs.cpp
index 0083ba91b11..714ca34cf8d 100644
--- a/engines/bbvs/bbvs.cpp
+++ b/engines/bbvs/bbvs.cpp
@@ -47,6 +47,8 @@
#include "graphics/fontman.h"
#include "graphics/surface.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Bbvs {
static const BBPoint kInventorySlotPositions[] = {
@@ -238,8 +240,22 @@ bool BbvsEngine::hasFeature(EngineFeature f) const {
void BbvsEngine::updateEvents() {
Common::Event event;
+ if (_currSceneNum == kCredits) {
+ Common::Keymapper *keymapper = _eventMan->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ } else {
+ Common::Keymapper *keymapper = _eventMan->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+ }
+
while (_eventMan->pollEvent(event)) {
switch (event.type) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ _customAction = event.customType;
+ break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ _customAction = kActionNone;
+ break;
case Common::EVENT_KEYDOWN:
_keyCode = event.kbd.keycode;
break;
@@ -325,10 +341,10 @@ void BbvsEngine::updateGame() {
bool done;
do {
- done = !update(_mouseX, _mouseY, _mouseButtons, _keyCode);
+ done = !update(_mouseX, _mouseY, _mouseButtons, _customAction);
_mouseButtons &= ~kLeftButtonClicked;
_mouseButtons &= ~kRightButtonClicked;
- _keyCode = Common::KEYCODE_INVALID;
+ _customAction = kActionNone;
} while (--inputTicks && _playVideoNumber == 0 && _gameTicks > 0 && !done);
if (!done && _playVideoNumber == 0 && _gameTicks > 0) {
@@ -357,7 +373,7 @@ void BbvsEngine::updateBackgroundSounds() {
}
}
-bool BbvsEngine::update(int mouseX, int mouseY, uint mouseButtons, Common::KeyCode keyCode) {
+bool BbvsEngine::update(int mouseX, int mouseY, uint mouseButtons, Common::CustomEventType customAction) {
if (_bootSaveSlot >= 0) {
loadGameState(_bootSaveSlot);
@@ -391,22 +407,21 @@ bool BbvsEngine::update(int mouseX, int mouseY, uint mouseButtons, Common::KeyCo
_verbPos.y = _cameraPos.y + 208;
_gameState = kGSVerbs;
} else {
- switch (keyCode) {
- case Common::KEYCODE_SPACE:
- case Common::KEYCODE_i:
+ switch (customAction) {
+ case kActionInventory:
_inventoryButtonIndex = -1;
_gameState = kGSInventory;
return true;
- case Common::KEYCODE_l:
+ case kActionLook:
_currVerbNum = kVerbLook;
break;
- case Common::KEYCODE_t:
+ case kActionTalk:
_currVerbNum = kVerbTalk;
break;
- case Common::KEYCODE_u:
+ case kActionUse:
_currVerbNum = kVerbUse;
break;
- case Common::KEYCODE_w:
+ case kActionWalk:
_currVerbNum = kVerbWalk;
break;
default:
@@ -422,16 +437,15 @@ bool BbvsEngine::update(int mouseX, int mouseY, uint mouseButtons, Common::KeyCo
saveSnapshot();
if (mouseButtons & kRightButtonClicked)
_currVerbNum = kVerbUse;
- switch (keyCode) {
- case Common::KEYCODE_SPACE:
- case Common::KEYCODE_i:
+ switch (customAction) {
+ case kActionInventory:
_gameState = kGSScene;
stopSpeech();
return true;
- case Common::KEYCODE_l:
+ case kActionLook:
_currVerbNum = kVerbLook;
break;
- case Common::KEYCODE_u:
+ case kActionUse:
_currVerbNum = kVerbUse;
break;
default:
@@ -459,7 +473,7 @@ bool BbvsEngine::update(int mouseX, int mouseY, uint mouseButtons, Common::KeyCo
_activeItemType = kITEmpty;
_activeItemIndex = 0;
_mouseCursorSpriteIndex = _gameModule->getGuiSpriteIndex(9);
- if (keyCode == Common::KEYCODE_ESCAPE)
+ if (customAction == kActionEscape)
skipCurrAction();
else
updateCommon();
diff --git a/engines/bbvs/bbvs.h b/engines/bbvs/bbvs.h
index 468fa76c8e1..ce7a716190e 100644
--- a/engines/bbvs/bbvs.h
+++ b/engines/bbvs/bbvs.h
@@ -62,6 +62,16 @@ class SoundMan;
#define BBVS_SAVEGAME_VERSION 0
+enum BBVSAction {
+ kActionNone,
+ kActionInventory,
+ kActionLook,
+ kActionTalk,
+ kActionUse,
+ kActionWalk,
+ kActionEscape
+};
+
enum {
kVerbLook = 0,
kVerbUse = 1,
@@ -279,6 +289,7 @@ public:
int _mouseX, _mouseY;
uint _mouseButtons;
Common::KeyCode _keyCode;
+ Common::CustomEventType _customAction;
int _mouseCursorSpriteIndex;
@@ -364,7 +375,7 @@ public:
void loadScene(int sceneNum);
void initScene(bool sounds);
bool changeScene();
- bool update(int mouseX, int mouseY, uint mouseButtons, Common::KeyCode keyCode);
+ bool update(int mouseX, int mouseY, uint mouseButtons, Common::CustomEventType customAction);
void buildDrawList(DrawList &drawList);
diff --git a/engines/bbvs/metaengine.cpp b/engines/bbvs/metaengine.cpp
index ee6d46f2fd2..4b237c512b3 100644
--- a/engines/bbvs/metaengine.cpp
+++ b/engines/bbvs/metaengine.cpp
@@ -25,9 +25,14 @@
#include "engines/advancedDetector.h"
#include "common/savefile.h"
#include "common/system.h"
+#include "common/translation.h"
#include "base/plugins.h"
#include "graphics/thumbnail.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
namespace Bbvs {
bool BbvsEngine::isDemo() const {
@@ -60,6 +65,8 @@ public:
// Disable autosave (see mirrored method in bbvs.h for detailed explanation)
int getAutosaveSlot() const override { return -1; }
+
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool BbvsMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -78,6 +85,73 @@ void BbvsMetaEngine::removeSaveState(const char *target, int slot) const {
g_system->getSavefileManager()->removeSavefile(fileName);
}
+Common::KeymapArray BbvsMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Bbvs;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "bbvs-default", _("Default keymappings"));
+ Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+ Keymap *escapeKeyMap = new Keymap(Keymap::kKeymapTypeGame, "escape-shortcuts", _("Escape keymappings"));
+
+ Common::Action *act;
+
+ act = new Common::Action(kStandardActionLeftClick, _("Left click"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeyMap->addAction(act);
+
+ act = new Common::Action(kStandardActionRightClick, _("Right click"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeyMap->addAction(act);
+
+ act = new Common::Action("ESCAPE", _("Escape"));
+ act->setCustomEngineActionEvent(kActionEscape);
+ act->addDefaultInputMapping("JOY_X");
+ act->addDefaultInputMapping("ESCAPE");
+ escapeKeyMap->addAction(act);
+
+ act = new Common::Action("INVENTORY", _("Open inventory"));
+ act->setCustomEngineActionEvent(kActionInventory);
+ act->addDefaultInputMapping("i");
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_y");
+ gameKeyMap->addAction(act);
+
+ act = new Common::Action("LOOK", _("Look"));
+ act->setCustomEngineActionEvent(kActionLook);
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("JOY_DOWN");
+ gameKeyMap->addAction(act);
+
+ act = new Common::Action("TALK", _("Talk"));
+ act->setCustomEngineActionEvent(kActionTalk);
+ act->addDefaultInputMapping("t");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Common::Action("USE", _("Use"));
+ act->setCustomEngineActionEvent(kActionUse);
+ act->addDefaultInputMapping("u");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Common::Action("WALK", _("Walk"));
+ act->setCustomEngineActionEvent(kActionWalk);
+ act->addDefaultInputMapping("w");
+ act->addDefaultInputMapping("JOY_UP");
+ gameKeyMap->addAction(act);
+
+ KeymapArray keymaps(3);
+ keymaps[0] = engineKeyMap;
+ keymaps[1] = gameKeyMap;
+ keymaps[2] = escapeKeyMap;
+
+ return keymaps;
+}
+
int BbvsMetaEngine::getMaximumSaveSlot() const {
return 999;
}
diff --git a/engines/bbvs/minigames/bbairguitar.cpp b/engines/bbvs/minigames/bbairguitar.cpp
index ead1fb876be..f6b6a44cd3d 100644
--- a/engines/bbvs/minigames/bbairguitar.cpp
+++ b/engines/bbvs/minigames/bbairguitar.cpp
@@ -817,7 +817,7 @@ void MinigameBbAirGuitar::update() {
_gameTicks = _vm->_system->getMillis();
}
- if (_vm->_keyCode == Common::KEYCODE_ESCAPE) {
+ if (_vm->_customAction == kActionEscape) {
_gameDone = querySaveModifiedTracks();
return;
}
@@ -831,7 +831,7 @@ void MinigameBbAirGuitar::update() {
done = !updateStatus(_vm->_mouseX, _vm->_mouseY, _vm->_mouseButtons);
_vm->_mouseButtons &= ~kLeftButtonClicked;
_vm->_mouseButtons &= ~kRightButtonClicked;
- _vm->_keyCode = Common::KEYCODE_INVALID;
+ _vm->_customAction = kActionNone;
} while (--inputTicks && _gameTicks > 0 && !done);
drawSprites();
diff --git a/engines/bbvs/minigames/bbant.cpp b/engines/bbvs/minigames/bbant.cpp
index 488980afa0b..5ba251012b9 100644
--- a/engines/bbvs/minigames/bbant.cpp
+++ b/engines/bbvs/minigames/bbant.cpp
@@ -1242,7 +1242,7 @@ void MinigameBbAnt::update() {
_gameTicks = _vm->_system->getMillis();
}
- if (_vm->_keyCode == Common::KEYCODE_ESCAPE) {
+ if (_vm->_customAction == kActionEscape) {
_gameDone = true;
return;
}
@@ -1256,7 +1256,7 @@ void MinigameBbAnt::update() {
done = !updateStatus(_vm->_mouseX, _vm->_mouseY, _vm->_mouseButtons);
_vm->_mouseButtons &= ~kLeftButtonClicked;
_vm->_mouseButtons &= ~kRightButtonClicked;
- _vm->_keyCode = Common::KEYCODE_INVALID;
+ _vm->_customAction = kActionNone;
} while (--inputTicks && _gameTicks > 0 && !done);
drawSprites();
diff --git a/engines/bbvs/minigames/bbloogie.cpp b/engines/bbvs/minigames/bbloogie.cpp
index 509655fdbc9..ada9cc6d3da 100644
--- a/engines/bbvs/minigames/bbloogie.cpp
+++ b/engines/bbvs/minigames/bbloogie.cpp
@@ -1378,7 +1378,7 @@ void MinigameBbLoogie::update() {
_gameTicks = _vm->_system->getMillis();
}
- if (_vm->_keyCode == Common::KEYCODE_ESCAPE) {
+ if (_vm->_customAction == kActionEscape) {
_gameDone = true;
return;
}
@@ -1392,7 +1392,7 @@ void MinigameBbLoogie::update() {
done = !updateStatus(_vm->_mouseX, _vm->_mouseY, _vm->_mouseButtons);
_vm->_mouseButtons &= ~kLeftButtonClicked;
_vm->_mouseButtons &= ~kRightButtonClicked;
- _vm->_keyCode = Common::KEYCODE_INVALID;
+ _vm->_customAction = kActionNone;
} while (--inputTicks && _gameTicks > 0 && !done);
drawSprites();
diff --git a/engines/bbvs/minigames/bbtennis.cpp b/engines/bbvs/minigames/bbtennis.cpp
index 7f7fa123d60..44df53e66d7 100644
--- a/engines/bbvs/minigames/bbtennis.cpp
+++ b/engines/bbvs/minigames/bbtennis.cpp
@@ -1262,7 +1262,7 @@ void MinigameBbTennis::update() {
_gameTicks = _vm->_system->getMillis();
}
- if (_vm->_keyCode == Common::KEYCODE_ESCAPE) {
+ if (_vm->_customAction == kActionEscape) {
_gameDone = true;
return;
}
@@ -1276,7 +1276,7 @@ void MinigameBbTennis::update() {
done = !updateStatus(_vm->_mouseX, _vm->_mouseY, _vm->_mouseButtons);
_vm->_mouseButtons &= ~kLeftButtonClicked;
_vm->_mouseButtons &= ~kRightButtonClicked;
- _vm->_keyCode = Common::KEYCODE_INVALID;
+ _vm->_customAction = kActionNone;
} while (--inputTicks && _gameTicks > 0 && !done);
drawSprites();
diff --git a/engines/bbvs/videoplayer.cpp b/engines/bbvs/videoplayer.cpp
index f3810e8f6b1..ea48b918983 100644
--- a/engines/bbvs/videoplayer.cpp
+++ b/engines/bbvs/videoplayer.cpp
@@ -71,7 +71,7 @@ void BbvsEngine::playVideo(int videoNum) {
Common::Event event;
while (_system->getEventManager()->pollEvent(event)) {
- if ((event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE) ||
+ if ((event.type == Common::EVENT_CUSTOM_ENGINE_ACTION_START && event.customType == kActionEscape) ||
event.type == Common::EVENT_LBUTTONUP)
skipVideo = true;
}
More information about the Scummvm-git-logs
mailing list