[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