Input: Added "keyboard mode" toggle to improve keyboard input

This commit is contained in:
Sour 2017-12-17 21:11:54 -05:00
parent 6b90228bdd
commit d2ef196a3b
22 changed files with 138 additions and 4 deletions

View File

@ -148,6 +148,11 @@ void BaseControlDevice::EnsureCapacity(int32_t minBitCount)
}
}
bool BaseControlDevice::IsKeyboard()
{
return false;
}
bool BaseControlDevice::HasCoordinates()
{
return false;
@ -207,7 +212,12 @@ void BaseControlDevice::InvertBit(uint8_t bit)
void BaseControlDevice::SetPressedState(uint8_t bit, uint32_t keyCode)
{
if(EmulationSettings::InputEnabled() && KeyManager::IsKeyPressed(keyCode)) {
if(IsKeyboard() && keyCode < 0x200 && !EmulationSettings::IsKeyboardMode()) {
//Prevent keyboard device input when keyboard mode is off
return;
}
if(EmulationSettings::InputEnabled() && (!EmulationSettings::IsKeyboardMode() || keyCode >= 0x200 || IsKeyboard()) && KeyManager::IsKeyPressed(keyCode)) {
SetBit(bit);
}
}

View File

@ -56,6 +56,8 @@ public:
bool IsPressed(uint8_t bit);
MousePosition GetCoordinates();
virtual bool IsKeyboard();
void ClearState();
void SetBit(uint8_t bit);

View File

@ -172,6 +172,8 @@ void ControlManager::UpdateControlDevices()
//Reset update flag
EmulationSettings::NeedControllerUpdate();
bool hadKeyboard = HasKeyboard();
ControlManager::_controlDevices.clear();
ControlManager::RegisterControlDevice(_systemActionManager);
@ -203,6 +205,13 @@ void ControlManager::UpdateControlDevices()
ControlManager::RegisterControlDevice(expDevice);
}
bool hasKeyboard = HasKeyboard();
if(!hasKeyboard) {
EmulationSettings::DisableKeyboardMode();
} else if(!hadKeyboard && hasKeyboard) {
EmulationSettings::EnableKeyboardMode();
}
if(_mapperControlDevice) {
ControlManager::RegisterControlDevice(_mapperControlDevice);
}
@ -213,6 +222,12 @@ void ControlManager::UpdateControlDevices()
}
}
bool ControlManager::HasKeyboard()
{
shared_ptr<BaseControlDevice> expDevice = GetControlDevice(BaseControlDevice::ExpDevicePort);
return expDevice && expDevice->IsKeyboard();
}
uint8_t ControlManager::GetOpenBusMask(uint8_t port)
{
//"In the NES and Famicom, the top three (or five) bits are not driven, and so retain the bits of the previous byte on the bus.

View File

@ -62,6 +62,7 @@ public:
static shared_ptr<BaseControlDevice> GetControlDevice(uint8_t port);
static shared_ptr<BaseControlDevice> CreateControllerDevice(ControllerType type, uint8_t port);
static shared_ptr<BaseControlDevice> CreateExpansionDevice(ExpansionPortDevice type);
static bool HasKeyboard();
virtual void GetMemoryRanges(MemoryRanges &ranges) override
{

View File

@ -56,6 +56,8 @@ bool EmulationSettings::_nsfDisableApuIrqs = true;
uint32_t EmulationSettings::_autoSaveDelay = 5;
bool EmulationSettings::_autoSaveNotify = false;
bool EmulationSettings::_keyboardModeEnabled = false;
SimpleLock EmulationSettings::_shortcutLock;
std::unordered_map<uint32_t, KeyCombination> EmulationSettings::_emulatorKeys[2];
std::unordered_map<uint32_t, vector<KeyCombination>> EmulationSettings::_shortcutSupersets[2];

View File

@ -362,6 +362,7 @@ enum class EmulatorShortcut
ToggleAudio,
ToggleFastForward,
ToggleRewind,
ToggleKeyboardMode,
RunSingleFrame,
@ -586,6 +587,8 @@ private:
static uint32_t _autoSaveDelay;
static bool _autoSaveNotify;
static bool _keyboardModeEnabled;
static std::unordered_map<uint32_t, KeyCombination> _emulatorKeys[2];
static std::unordered_map<uint32_t, vector<KeyCombination>> _shortcutSupersets[2];
@ -1338,4 +1341,25 @@ public:
{
return _dipSwitches;
}
static bool IsKeyboardMode()
{
return _keyboardModeEnabled;
}
static void EnableKeyboardMode()
{
if(!_keyboardModeEnabled) {
_keyboardModeEnabled = true;
MessageManager::DisplayMessage("Input", "KeyboardModeEnabled");
}
}
static void DisableKeyboardMode()
{
if(_keyboardModeEnabled) {
_keyboardModeEnabled = false;
MessageManager::DisplayMessage("Input", "KeyboardModeDisabled");
}
}
};

View File

@ -87,6 +87,11 @@ public:
{
}
bool IsKeyboard() override
{
return true;
}
uint8_t ReadRAM(uint16_t addr) override
{
if(addr == 0x4017) {

View File

@ -12,6 +12,7 @@ std::unordered_map<string, string> MessageManager::_enResources = {
{ "Error", u8"Error" },
{ "GameInfo", u8"Game Info" },
{ "GameLoaded", u8"Game loaded" },
{ "Input", u8"Input" },
{ "Patch", u8"Patch" },
{ "Movies", u8"Movies" },
{ "NetPlay", u8"Net Play" },
@ -38,6 +39,8 @@ std::unordered_map<string, string> MessageManager::_enResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"Frame" },
{ "GameCrash", u8"Game has crashed (%1)" },
{ "KeyboardModeDisabled", u8"Keyboard mode disabled." },
{ "KeyboardModeEnabled", u8"Keyboard mode enabled." },
{ "Lag", u8"Lag" },
{ "Mapper", u8"Mapper: %1, SubMapper: %2" },
{ "MovieEnded", u8"Movie ended." },
@ -82,6 +85,7 @@ std::unordered_map<string, string> MessageManager::_frResources = {
{ "Error", u8"Erreur" },
{ "GameInfo", u8"Info sur le ROM" },
{ "GameLoaded", u8"Jeu chargé" },
{ "Input", u8"Contrôles" },
{ "Patch", u8"Patch" },
{ "Movies", u8"Films" },
{ "NetPlay", u8"Jeu en ligne" },
@ -108,6 +112,8 @@ std::unordered_map<string, string> MessageManager::_frResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"Image" },
{ "GameCrash", u8"Le jeu a planté (%1)" },
{ "KeyboardModeDisabled", u8"Mode clavier activé." },
{ "KeyboardModeEnabled", u8"Mode clavier désactivé." },
{ "Lag", u8"Lag" },
{ "Mapper", u8"Mapper : %1, SubMapper : %2" },
{ "MovieEnded", u8"Fin du film." },
@ -152,6 +158,7 @@ std::unordered_map<string, string> MessageManager::_jaResources = {
{ "Error", u8"エラー" },
{ "GameInfo", u8"ゲーム情報" },
{ "GameLoaded", u8"ゲーム開始" },
{ "Input", u8"コントローラ" },
{ "Patch", u8"パッチ" },
{ "Movies", u8"動画" },
{ "NetPlay", u8"ネットプレー" },
@ -178,6 +185,8 @@ std::unordered_map<string, string> MessageManager::_jaResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"フレーム" },
{ "GameCrash", u8"ゲームは停止しました (%1)" },
{ "KeyboardModeDisabled", u8"キーボードモードを無効にしました。" },
{ "KeyboardModeEnabled", u8"キーボードモードを有効にしました。" },
{ "Lag", u8"ラグ" },
{ "Mapper", u8"Mapper: %1, SubMapper: %2" },
{ "MovieEnded", u8"動画の再生が終了しました。" },
@ -222,6 +231,7 @@ std::unordered_map<string, string> MessageManager::_ruResources = {
{ "Error", u8"Ошибка" },
{ "GameInfo", u8"Информация об игре" },
{ "GameLoaded", u8"Игра загружена" },
{ "Input", u8"Input" },
{ "Patch", u8"Patch" },
{ "Movies", u8"Записи" },
{ "NetPlay", u8"Игра по сети" },
@ -248,6 +258,8 @@ std::unordered_map<string, string> MessageManager::_ruResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"Frame" },
{ "GameCrash", u8"Игра была аварийно завершена (%1)" },
{ "KeyboardModeDisabled", u8"Keyboard mode disabled." },
{ "KeyboardModeEnabled", u8"Keyboard mode enabled." },
{ "Lag", u8"Лаг" },
{ "Mapper", u8"Mapper: %1, SubMapper: %2" },
{ "MovieEnded", u8"Воспроизведение окончено." },
@ -292,6 +304,7 @@ std::unordered_map<string, string> MessageManager::_esResources = {
{ "Error", u8"Error" },
{ "GameInfo", u8"Info del Juego" },
{ "GameLoaded", u8"Juego Cargado" },
{ "Input", u8"Input" },
{ "Patch", u8"Patch" },
{ "Movies", u8"Videos" },
{ "NetPlay", u8"Juego Online" },
@ -318,6 +331,8 @@ std::unordered_map<string, string> MessageManager::_esResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"Frame" },
{ "GameCrash", u8"El juego se ha colgado (%1)" },
{ "KeyboardModeDisabled", u8"Keyboard mode disabled." },
{ "KeyboardModeEnabled", u8"Keyboard mode enabled." },
{ "Lag", u8"Lag" },
{ "Mapper", u8"Mapeado: %1, SubMapeado: %2" },
{ "MovieEnded", u8"Video terminado." },
@ -363,6 +378,7 @@ std::unordered_map<string, string> MessageManager::_ukResources = {
{ "Error", u8"Помилка" },
{ "GameInfo", u8"Інформація про гру" },
{ "GameLoaded", u8"Гра завантажена" },
{ "Input", u8"Input" },
{ "Patch", u8"Patch" },
{ "Movies", u8"Записи" },
{ "NetPlay", u8"Гра по мережi" },
@ -389,6 +405,8 @@ std::unordered_map<string, string> MessageManager::_ukResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"Frame" },
{ "GameCrash", u8"Гра була аварійно завершена (%1)" },
{ "KeyboardModeDisabled", u8"Keyboard mode disabled." },
{ "KeyboardModeEnabled", u8"Keyboard mode enabled." },
{ "Lag", u8"Лаг" },
{ "Mapper", u8"Mapper: %1, SubMapper: %2" },
{ "MovieEnded", u8"Відтворення закінчено." },
@ -433,6 +451,7 @@ std::unordered_map<string, string> MessageManager::_ptResources = {
{ "Error", u8"Erro" },
{ "GameInfo", u8"Informações do Jogo" },
{ "GameLoaded", u8"Jogo Carregado" },
{ "Input", u8"Input" },
{ "Patch", u8"Patch" },
{ "Movies", u8"Vídeos" },
{ "NetPlay", u8"Jogo Online" },
@ -459,6 +478,8 @@ std::unordered_map<string, string> MessageManager::_ptResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"Frame" },
{ "GameCrash", u8"O jogo crashou (%1)" },
{ "KeyboardModeDisabled", u8"Keyboard mode disabled." },
{ "KeyboardModeEnabled", u8"Keyboard mode enabled." },
{ "Lag", u8"Lag" },
{ "Mapper", u8"Mapeado: %1, SubMapeado: %2" },
{ "MovieEnded", u8"Vídeo terminado." },
@ -503,6 +524,7 @@ std::unordered_map<string, string> MessageManager::_caResources = {
{ "Error", u8"Error" },
{ "GameInfo", u8"Informació del joc" },
{ "GameLoaded", u8"Joc carregat" },
{ "Input", u8"Input" },
{ "Patch", u8"Pedaç" },
{ "Movies", u8"Pel·lícules" },
{ "NetPlay", u8"Joc en línia" },
@ -529,6 +551,8 @@ std::unordered_map<string, string> MessageManager::_caResources = {
{ "EmulationSpeedPercent", u8"%1%" },
{ "Frame", u8"Fotograma" },
{ "GameCrash", u8"El joc ha fallat (%1)" },
{ "KeyboardModeDisabled", u8"Keyboard mode disabled." },
{ "KeyboardModeEnabled", u8"Keyboard mode enabled." },
{ "Lag", u8"Retard" },
{ "Mapper", u8"Mapat: %1, SubMapat: %2" },
{ "MovieEnded", u8"Final de pel·lícula." },

View File

@ -10,10 +10,14 @@
#include "FdsSystemActionManager.h"
#include "VsSystemActionManager.h"
#include "MovieManager.h"
#include "ControlManager.h"
ShortcutKeyHandler::ShortcutKeyHandler()
{
_keySetIndex = 0;
_isKeyUp = false;
_keyboardMode = false;
_stopThread = false;
_thread = std::thread([=]() {
while(!_stopThread) {
@ -52,9 +56,18 @@ bool ShortcutKeyHandler::IsKeyPressed(KeyCombination comb)
return false;
}
return KeyManager::IsKeyPressed(comb.Key1) &&
(comb.Key2 == 0 || KeyManager::IsKeyPressed(comb.Key2)) &&
(comb.Key3 == 0 || KeyManager::IsKeyPressed(comb.Key3));
return IsKeyPressed(comb.Key1) &&
(comb.Key2 == 0 || IsKeyPressed(comb.Key2)) &&
(comb.Key3 == 0 || IsKeyPressed(comb.Key3));
}
bool ShortcutKeyHandler::IsKeyPressed(uint32_t keyCode)
{
if(keyCode >= 0x200 || !_keyboardMode) {
return KeyManager::IsKeyPressed(keyCode);
} else {
return false;
}
}
bool ShortcutKeyHandler::DetectKeyPress(EmulatorShortcut shortcut)
@ -85,6 +98,18 @@ void ShortcutKeyHandler::CheckMappedKeys()
bool isNetplayClient = GameClient::Connected();
bool isMovieActive = MovieManager::Playing() || MovieManager::Recording();
_keyboardMode = false;
if(DetectKeyPress(EmulatorShortcut::ToggleKeyboardMode)) {
if(EmulationSettings::IsKeyboardMode()) {
EmulationSettings::DisableKeyboardMode();
} else {
if(ControlManager::HasKeyboard()) {
EmulationSettings::EnableKeyboardMode();
}
}
}
_keyboardMode = EmulationSettings::IsKeyboardMode();
//Let the UI handle these shortcuts
for(uint64_t i = (uint64_t)EmulatorShortcut::SwitchDiskSide; i <= (uint64_t)EmulatorShortcut::OpenTraceLogger; i++) {
if(DetectKeyPress((EmulatorShortcut)i)) {

View File

@ -16,6 +16,7 @@ private:
vector<uint32_t> _pressedKeys;
vector<uint32_t> _lastPressedKeys;
bool _isKeyUp;
bool _keyboardMode;
std::unordered_set<uint32_t> _keysDown[2];
std::unordered_set<uint32_t> _prevKeysDown[2];
@ -24,6 +25,7 @@ private:
bool IsKeyPressed(EmulatorShortcut key);
bool IsKeyPressed(KeyCombination comb);
bool IsKeyPressed(uint32_t keyCode);
bool DetectKeyPress(EmulatorShortcut key);
bool DetectKeyRelease(EmulatorShortcut key);

View File

@ -91,6 +91,11 @@ public:
{
}
bool IsKeyboard() override
{
return true;
}
uint8_t ReadRAM(uint16_t addr) override
{
if(addr == 0x4017) {

View File

@ -101,6 +101,7 @@ namespace Mesen.GUI.Config
ShortcutKeys1.Add(new ShortcutKeyInfo(EmulatorShortcut.ToggleFps, new KeyCombination() { Key1 = InteropEmu.GetKeyCode("F10") }));
ShortcutKeys1.Add(new ShortcutKeyInfo(EmulatorShortcut.ToggleFullscreen, new KeyCombination() { Key1 = InteropEmu.GetKeyCode("F11") }));
ShortcutKeys1.Add(new ShortcutKeyInfo(EmulatorShortcut.ToggleKeyboardMode, new KeyCombination() { Key1 = InteropEmu.GetKeyCode("Scroll Lock") }));
ShortcutKeys1.Add(new ShortcutKeyInfo(EmulatorShortcut.TakeScreenshot, new KeyCombination() { Key1 = InteropEmu.GetKeyCode("F12") }));
ShortcutKeys1.Add(new ShortcutKeyInfo(EmulatorShortcut.LoadRandomGame, new KeyCombination() { Key1 = InteropEmu.GetKeyCode("Ctrl"), Key2 = InteropEmu.GetKeyCode("Ins") }));

View File

@ -738,6 +738,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - Insereix el següent disc</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - Insereix moneda (1)</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - Insereix moneda (2)</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">Input Barcode</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - Botó de servei</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">Selecciona la següent partida guardada</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">Selecciona l'anterior partida guardada</Message>
@ -762,6 +763,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">Mostra/Amaga la visualització en pantalla (OSD)</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">Mostra/Amaga la capa de fons</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">Mostra/Amaga la capa de sprites</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">Toggle Keyboard Mode</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">Activa/Desactiva la velocitat màxima</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">Carrega un joc a l'atzar</Message>
<Message ID="EmulatorShortcutMappings_SaveStateSlot1">Desa la partida - Posició 1</Message>

View File

@ -104,6 +104,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - Insert Next Disk</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - Insert Coin 1</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - Insert Coin 2</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">Input Barcode</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - Service Button</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">Select Next Save Slot</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">Select Previous Save Slot</Message>
@ -128,6 +129,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">Toggle OSD (On-Screen Display)</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">Toggle Background Layer</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">Toggle Sprite Layer</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">Toggle Keyboard Mode</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">Toggle Maximum Speed</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">Load Random Game</Message>

View File

@ -757,6 +757,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - Insertar siguiente disco</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - Insertar moneda (1)</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - Insertar moneda (2)</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">Input Barcode</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - Botón de servicio</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">Ir a posición de guardado siguiente</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">Ir a posición de guardado anterior</Message>
@ -781,6 +782,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">Alternar OSD (Información en pantalla)</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">Alternar capa de fondo</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">Alternar capa de sprite</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">Toggle Keyboard Mode</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">Alternar velocidad máxima</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">Cargar juego aleatorio</Message>
<Message ID="EmulatorShortcutMappings_SaveStateSlot1">Guardar partida - Hueco 1</Message>

View File

@ -770,6 +770,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - Insérer le disque suivant</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - Insérer une pièce (1)</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - Insérer une pièce (2)</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">Entrer un code-barres</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - Bouton de service</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">Position de sauvegarde suivante</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">Position de sauvegarde précédente</Message>
@ -794,6 +795,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">Activer/désactiver les messages à l'écran (OSD)</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">Activer/désactiver l'arrière-plan</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">Activer/désactiver les sprites</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">Activer/désactiver le mode clavier</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">Activer/désactiver la vitesse maximale</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">Ouvrir un jeu aléatoire</Message>
<Message ID="EmulatorShortcutMappings_SaveStateSlot1">Sauvegarde d'état - Position 1</Message>

View File

@ -753,6 +753,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - 次のディスクを入れる</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - インサートコイン 1</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - インサートコイン 2</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">バーコードを入力</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - サービスボタン</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">次のクイックセーブスロットを選ぶ</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">前のクイックセーブスロットを選ぶ</Message>
@ -777,6 +778,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">オンスクリーン表示を無効・有効にする</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">バックグラウンドレイヤー表示</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">スプライトレイヤー表示</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">キーボードモードを無効・有効にする</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">最高速度を無効・有効にする</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">ランダムゲームを開く</Message>
<Message ID="EmulatorShortcutMappings_SaveStateSlot1">クイックセーブスロット1に保存する</Message>

View File

@ -754,6 +754,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - Inserir próximo disco</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - Inserir moeda (1)</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - Inserir moeda (2)</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">Input Barcode</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - Botão de serviço</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">Ir ao próximo estado salvo</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">Ir ao estado salvo anterior</Message>
@ -778,6 +779,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">Alternar OSD (Menu na tela)</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">Alternar camada de fundo</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">Alternar camada de sprite</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">Toggle Keyboard Mode</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">Alternar velocidade máxima</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">Carrear jogo aleatório</Message>
<Message ID="EmulatorShortcutMappings_SaveStateSlot1">Salvar estado - Posição 1</Message>

View File

@ -758,6 +758,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - Вставить следующий диск</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - Вставить монету в слот 1</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - Вставить монету в слот 2</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">Input Barcode</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - Сервисная кнопка</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">Следующий слот для сохранений</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">Предыдущий слот для сохранений</Message>
@ -782,6 +783,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">Toggle OSD (On-Screen Display)</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">Toggle Background Layer</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">Toggle Sprite Layer</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">Toggle Keyboard Mode</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">Toggle Maximum Speed</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">Load Random Game</Message>
<Message ID="EmulatorShortcutMappings_SaveStateSlot1">Save State - Slot 1</Message>

View File

@ -758,6 +758,7 @@
<Message ID="EmulatorShortcutMappings_InsertNextDisk">FDS - Вставити наступний диск</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin1">VS - Вставити монету в слот 1</Message>
<Message ID="EmulatorShortcutMappings_InsertCoin2">VS - Вставити монету в слот 2</Message>
<Message ID="EmulatorShortcutMappings_InputBarcode">Input Barcode</Message>
<Message ID="EmulatorShortcutMappings_VsServiceButton">VS - Сервісна кнопка</Message>
<Message ID="EmulatorShortcutMappings_MoveToNextStateSlot">Наступний слот для збережень</Message>
<Message ID="EmulatorShortcutMappings_MoveToPreviousStateSlot">Попередній слот для збережень</Message>
@ -782,6 +783,7 @@
<Message ID="EmulatorShortcutMappings_ToggleOsd">Переключити OSD (Екранне меню)</Message>
<Message ID="EmulatorShortcutMappings_ToggleBackground">Переключити Background</Message>
<Message ID="EmulatorShortcutMappings_ToggleSprites">Переключити Sprite Layer</Message>
<Message ID="EmulatorShortcutMappings_ToggleKeyboardMode">Toggle Keyboard Mode</Message>
<Message ID="EmulatorShortcutMappings_MaxSpeed">Переключити максимальну швидкість</Message>
<Message ID="EmulatorShortcutMappings_LoadRandomGame">Завантажити випадкову гру</Message>
<Message ID="EmulatorShortcutMappings_SaveStateSlot1">Save State - Slot 1</Message>

View File

@ -74,6 +74,7 @@ namespace Mesen.GUI.Forms.Config
EmulatorShortcut.ToggleSprites,
EmulatorShortcut.ToggleCheats,
EmulatorShortcut.ToggleAudio,
EmulatorShortcut.ToggleKeyboardMode,
EmulatorShortcut.MaxSpeed,
EmulatorShortcut.IncreaseSpeed,

View File

@ -1524,6 +1524,7 @@ namespace Mesen.GUI
ToggleAudio,
ToggleFastForward,
ToggleRewind,
ToggleKeyboardMode,
RunSingleFrame,