📖 本文由 Batocera 官方 Wiki 翻译整理,内容可能随版本更新而变化。


为特定模拟器自定义按键映射(Remapping controls per emulator)

虽然你可以在 Batocera 中轻松完成通用的手柄配置,但如果你想针对某个特定的模拟器微调按键呢?比如,你想把 N64 核心里的 Z 键从手柄的左扳机(L2)改到右扳机(R2)上。这篇教程就是为你准备的。

在讨论这类抽象的控制逻辑时,概念很容易混淆。为了让你看得明白,我们先统一一下本文中会用到的几个核心术语:

  • 物理手柄(Controller):这就是你手里握着的实物。它可以是任何东西:PS4 手柄、Xbox 360 手柄、通过引脚(GPIO)连接的红白机手柄、键盘、鼠标,甚至是 Wii 射击套件。只要它在 EmulationStation 的“配置手柄”菜单里设置过,它就是一个物理手柄。
  • 虚拟手柄(Retropad):这是 RetroArch 模拟器用来与不同核心沟通的“中间人”。
    • 生活化类比:由于市面上手柄长得五花八门,RetroArch 规定了一套标准语言。你可以把它想象成一个拥有“PS3 布局+任天堂按键字母”的虚拟翻译官。虽然不是所有模拟器都直接用它,但 Batocera 会尽可能让所有按键 ID 与这个标准靠拢。
  • 模拟系统按键(System’s controls):这是按键信号经过转换后,最终传给模拟游戏的指令。例如:按下手柄后,游戏机接收到的 PlayStation 叉(Cross)方块(Square)圆圈(Circle)三角(Triangle)信号。

【提示】:Batocera 会帮你自动处理大部分配置,但在手动微调前,理解这三者之间的“接力关系”非常重要。

操作思路

第一步:明确物理手柄与虚拟手柄的对应关系
确保你的物理手柄已经在系统层面配置正确,这是所有自定义的前提。

第二步:进入特定核心的设置
如果你需要修改特定系统的按键映射,我们需要深入到模拟器核心的内部设置中进行调整。

第三步:保存映射配置
完成修改后,记得保存为“核心选项”或“游戏选项”,这样下次进入游戏时,你的个性化配置才会自动生效。

核心按键管理与设置

在进行按键映射时,我们需要区分两个主要的设置阵地:

  • 按键映射菜单(Controls menu)
    这是你最常打交道的地方。在游戏中,通过组合键 [HOTKEY] + 南向键(B SNES) 进入 快捷菜单(Quick Menu),然后找到 按键(Controls)
    作用:它负责控制模拟系统(核心)如何理解你的输入。
    举个例子:如果你想把 N64 游戏里的 Z 键从 L2 改到 R2,就在这里操作。
    【注意】:并非所有模拟器都有这个菜单。通常只有基于 libretro 的模拟器支持,独立模拟器的处理方式会有所不同,我们会在后文标注。

  • EmulationStation(ES 设置)
    虽然不涵盖所有细节,但 Batocera 的 ES 界面也提供了一些高级按键选项。
    如何进入:在启动游戏前,进入 游戏设置(GAME SETTINGS) -> 各系统高级设置(PER SYSTEM ADVANCED CONFIGURATION) -> <系统名称>
    作用:这里可以配置一些全局策略,比如某个端口连接的是什么设备、是否开启“十字键模拟摇杆(Joy-2-Dpad)”、键盘预设方案等。
    【提示】:如果你手动进入模拟器内部做了覆盖设置(Override),ES 里的这些设置可能会失效,请务必留意。


【注意】:千万不要进错菜单!
在 RetroArch 中还有一个 主菜单(Main Menu) -> 设置(Settings) -> 输入(Inputs)
请记住:这个菜单不是用来给特定核心改按键的!
生活化类比:这个“输入”菜单相当于“翻译官手册”,它负责把手柄的原始信号翻译成系统通用的语言(Retropad)。Batocera 已经帮你自动写好了这份手册,如果你乱改,可能会导致手柄在所有游戏中彻底失灵。只改特定核心的按键时,请远离这个菜单。


Libretro 核心(libretro cores)的操作流程

如果你使用的是 libretro 系列的核心,请按照以下步骤进行重映射:

第一步:呼出菜单
在游戏运行过程中,按下组合键进入 快捷菜单(Quick Menu)

第二步:定位按键重映射
选择 按键(Controls) -> 端口 1 映射(Port 1 Controls)

第三步:调整并测试
在列表中找到你想修改的按键,按左右键切换对应的功能。修改后可以立即回游戏测试手感。

第四步:永久保存
如果满意,记得在同一菜单下选择 保存核心重映射文件(Save Core Remap File),这样以后运行该模拟器的所有游戏都会生效。

玩转 libretro 核心:按键重映射全攻略

在 Batocera 中,大部分模拟器都采用的是 RetroArch 核心(RetroArch cores)。你只需要看模拟器名字前是否有“libretro”前缀就能认出它们。

这些核心最棒的地方在于它们共用一套界面。这意味着,一旦你学会了如何在一个系统里改按键,其他的也就全通了。

如何切换模拟器核心?

第一步:进入系统菜单
在游戏列表中,按下 [SELECT] 键进入该系统的视图选项(VIEW OPTIONS)

第二步:找到高级设置
依次进入高级系统设置(ADVANCED SYSTEM OPTIONS) -> 模拟器(EMULATOR),在这里你就可以挑选心仪的核心了。


实操演示:以 PlayStation (libretro/PCSX-ReArmed) 为例

假设你想把“圆圈键”和“叉字键”互换位置(这是日版和美版游戏最常见的改键需求)。

第一步:呼出快捷菜单(Quick Menu)
在游戏中按下组合键 [HOTKEY] + 南向键(B SNES)

第二步:定位到按键设置
在菜单中找到并进入 按键(Controls) 选项。

第三步:选择对应端口
通常选择 端口 1 映射(Port 1 Controls)。此时你会看到:
* 左侧:是虚拟手柄(Retropad)的按键位。
* 右侧:是当前模拟系统(比如 PlayStation)对应的原始功能。

第四步:更改映射
点击你想要修改的虚拟按键,在弹出的列表中选择你想让它触发的系统功能。

第五步:保存你的心血
【注意】:如果你直接退出模拟器,所有的改动都会丢失!

生活化类比:这就像你在考卷上临时改了答案,如果不交卷(保存),老师(系统)是不会记得你改过的。

为了让修改永久生效,请回到“按键”菜单的一级目录下,点击 保存核心重映射文件(Save Core Remap File)


常见问题排查:无法保存重映射文件?

如果你收到了类似“无法保存重映射文件(cannot save remap file)”的报错信息,请先检查以下文件夹是否存在:

如果你在保存按键映射时碰了壁,或者想要更精细地管理你的按键方案,可以参考以下进阶操作。

故障排除:手动检查路径

如果系统提示无法保存映射文件,请检查以下路径是否存在:

  • /userdata/system/configs/RetroArch/inputs/
  • /userdata/system/configs/RetroArch/config/remaps/

【提示】:如果这两个文件夹不存在,请手动创建它们,然后再次尝试保存。


灵活管理:按游戏或文件夹保存

除了为整个核心保存设置外,你还可以选择:
* 保存游戏重映射文件:仅对当前正在玩的这一个游戏生效。
* 保存目录重映射文件:对当前文件夹下的所有游戏生效。

想要“吃后悔药”?
如果你想恢复默认设置,只需在同一个菜单中选择“删除重映射文件”即可。
【注意】:删除后,你需要退出并重新进入该菜单,才能看到文件已彻底消失(对应的 .rmp 文件会被物理删除)。


关于“摇杆模拟十字键”的优先级

你可能注意到了“摇杆转数字信号类型(Analog to Digital Type)”这个设置。
在 Batocera 的 EmulationStation(ES) 界面里,它通常叫作“摇杆转十字键(Joystick-to-Dpad)”。

【重要提示】:“县官不如现管”。如果你手动保存了一个重映射文件(Remap file),那么这个文件里的设置会优先于 ES 界面里的全局设置。如果发现设置没生效,请检查是否被重映射文件覆盖了。

如果你需要手动备份这些文件,它们存放在这里:
/userdata/system/configs/RetroArch/remaps/核心名称/游戏或文件夹名称.rmp
(记得在文件管理器中开启“显示隐藏文件/文件夹”才能看到)。


特殊核心:PUAE (Amiga) 与 VICE (C64)

对于这些早期的电脑模拟器,按键设置不在常规菜单里,而是藏在核心选项中。

第一步:进入核心映射菜单
在游戏中呼出菜单,进入 快捷菜单(Quick Menu) -> 核心选项(Options) -> RetroPad 映射选项(RetroPad Mapping Options)

第二步:理解“按键层”概念
生活化类比:这就像是在你的手柄上贴了两层标签。你在常规“按键”菜单里设定的功能是底层,而这里的设置是在底层之上的“翻译层”,专门针对这类老电脑的特殊键盘需求。

第三步:根据布局修改
这些模拟器参考了 SNES(超任) 的手柄布局进行映射。请对号入座:
* A 键:对应东向键(East button)
* B 键:对应南向键(South button)
* X 键:对应北向键(North button)
* Y 键:对应西向键(West button)

调整完毕后,你的老电脑游戏就能用现代手柄流畅操控了!

完成设置后,别忘了最后一步,否则你的努力在重启游戏后就会付诸东流。

保存核心选项设置

第一步:返回上一级菜单
从当前的映射界面退回一级,向上滚动找到 管理核心选项(Manage Core Options)

第二步:选择保存范围
根据你的需求选择保存方式:
* 保存游戏选项(Save Game Options):设置仅对当前这一款游戏生效。
* 保存内容目录选项(Save Content Directory Options):设置会对该游戏所在文件夹下的所有游戏生效。


MAME 街机模拟器按键重映射

MAME 街机模拟器的改键操作是在游戏运行中直接完成的,非常直观。

第一步:呼出 MAME 菜单
在游戏中按下键盘上的 [Enter] 键,或者同时按下手柄的两个摇杆 [L3] + [R3]

第二步:进入设置界面
找到 针对此游戏的输入设置(Input for this game),按下 [Enter] 或手柄南向键(B SNES)确认。

第三步:重新绑定按键
上下移动选中你想修改的控制功能,按下确认键后,紧接着按下你想要绑定的新按键即可。
* 【提示】:如果你想清空某个按键绑定,连续双击确认键即可。

文件存放路径
你的自定义配置文件会保存在:\userdata\saves\MAME\MAME版本号\cfg


手柄映射键盘(Pad2key)

这项功能非常强大,它可以帮你把手柄按键映射为键盘按键。

生活化类比:这就像是给你的手柄穿了一件“键盘马甲”。对于 Apple II、Sinclair 等老电脑游戏,或者那些对柄支持极差的 DOS 和 Windows 游戏,系统会认为你依然在用键盘操作,但你实际手里握着的是舒适的手柄。

此外,你甚至可以用它定义一些快捷键,比如用手柄组合键触发 [Alt] + [F4] 来强制关闭模拟器。
* 【注意】:强制关闭有风险!如果你不希望存档数据损坏,请谨慎使用强制退出功能。

定义全系统通用的映射

操作流程:

第一步:进入高级设置
在游戏列表界面,选中一款游戏并按下 [SELECT] 键。

第二步:开启配置
进入 高级系统设置(ADVANCED SYSTEM CONFIGURATION),选择 创建手柄映射键盘配置(Create pad to keyboard configuration)

【注意】:优先级原则。如果某款游戏已经有了自己专属的独立配置,它将完全忽略全系统的通用设置。也就是说,如果你发现修改了通用设置却没在某个游戏里生效,那很可能是该游戏已经有了“私人定制”的方案。

深度定制:如何配置手柄映射键盘

进入设置界面后,你可以为 1 号或 2 号玩家的 虚拟手柄(RetroPad) 上的每个按键指定一个对应的键盘按键。

映射操作指南

第一步:单键映射
在配置窗口中,直接选中手柄按键,然后从列表中选择你想让它“变身”成的那个键盘按键。

第二步:组合键映射(Combo/Chord)
如果你想按下手柄的一个键就触发键盘上的“组合键”(比如像 Alt + Tab 那样),操作技巧如下:
* 前置键:使用 北向键(X SNES) 依次输入组合键的前几个按键。
* 收尾键:最后使用 南向键(B SNES) 输入组合键的最后一个按键。


认识映射配置文件(Pad2key configuration file)

当你完成配置后,系统会自动生成一个配置文件,它的本质是一个简单的 JSON 格式(JavaScript Object Notation) 纯文本文件。

  • 游戏专用配置:保存为 padto.keys游戏名.keys,存放在 ROM 文件夹或 Windows 游戏目录下。
  • 全系统通用配置:路径为 /userdata/system/configs/evmapy/系统名.keys

生活化类比:这个文件就像是一张“翻译对照表”。每当你在手柄上按下一个键(触发器/Trigger),系统就会查表,看看这张表要求把它“翻译”成键盘上的哪个动作(目标/Target)。

文件示例:

{
"actions_player1": [
{
"trigger": [
"hotkey",
"start"
],
"type": "key",
"target": [
"KEY_LEFTALT",
"KEY_F4"
]
},
{
"trigger": "up",
"type": "key",
"target": "KEY_UP"
}
]
}

动作配置文件(Action profiles)

一个 .keys 映射文件可以同时包含多个玩家的映射方案。
* "actions_player1" 包含 1 号玩家的动作映射。
* "actions_player2" 包含 2 号玩家的动作映射,以此类推。

每个玩家的配置方案里都拥有自己独立的“触发器(Triggers)”和“目标(Targets)”集,互不干扰。

多玩家配置代码示例:

{
"actions_player1": [
{
"trigger": [
"hotkey",
"start"
],
"type": "key",
"target": [
"KEY_LEFTALT",
"KEY_F4"
]
},
{
"trigger": "up",
"type": "key",
"target": "KEY_UP"
}
],
"actions_player2": [
{
"trigger": [
"hotkey",
"start"
],
"type": "key",
"target": [
"KEY_LEFTALT",
"KEY_F4"
]
},
{
"trigger": "up",
"type": "key",
"target": "KEY_UP"
}
]
}

在 Batocera v37 及更高版本中,光枪(Light guns) 也可以拥有属于自己的独立映射动作了。由于光枪的构造与普通手柄不同,它们使用专属的动作配置文件:"actions_gun1"

光枪配置示例:

{
"actions_gun1": [
{
"trigger": [
"3",
"2"
],
"type": "key",
"target": [
"KEY_LEFTALT",
"KEY_F4"
]
}
]
}

触发器(Triggers)详解

在编写映射文件时,你需要告诉系统“按下手柄上的哪个键”会触发动作。系统对这些按键有一套专门的“代号”。

1. Batocera 虚拟手柄(Retropad)命名对应表

生活化类比:这就像是给手柄上的每个按键取了“学名”,你在写配置文件(写信)时必须称呼它们的学名,系统才听得懂。

物理按键 映射文件中的“代号”
方向键 上 (D-Pad UP) "trigger": "up"
方向键 下 (D-Pad DOWN) "trigger": "down"
方向键 左 (D-Pad LEFT) "trigger": "left"
方向键 右 (D-Pad RIGHT) "trigger": "right"
[START] 键 "trigger": "start"
[SELECT] 键 "trigger": "select"
南向键 (B SNES) "trigger": "b"
东向键 (A SNES) "trigger": "a"
西向键 (Y SNES) "trigger": "y"
北向键 (X SNES) "trigger": "x"
左摇杆 上 "trigger": "joystick1up"
左摇杆 下 "trigger": "joystick1down"
左摇杆 左 "trigger": "joystick1left"
左摇杆 右 "trigger": "joystick1right"
右摇杆 上 "trigger": "joystick2up"
右摇杆 下 "trigger": "joystick2down"
右摇杆 左 "trigger": "joystick2left"
右摇杆 右 "trigger": "joystick2right"
[L1] 键 "trigger": "pageup"
[R1] 键 "trigger": "pagedown"
[L2] 键 "trigger": "l2"
[R2] 键 "trigger": "r2"
按下左摇杆 [L3] "trigger": "l3"
按下右摇杆 [R3] "trigger": "r3"
[HOTKEY] 热键 "trigger": "hotkey"

2. Batocera 光枪

大多数光枪设备会自动将自己模拟成“虚拟键盘”和“指针设备”,并把自己的 ID 与特定玩家的手柄关联起来。

【提示】:如果你想深入了解每款光枪的具体映射逻辑,可以查阅官方的光枪专题页面。以下是光枪常用的基础触发器代号:

  • 主板机(Primary fire)"trigger": "left"
  • 副按键/上膛(Secondary fire)"trigger": "right"
  • [START] 键"trigger": "middle"

除了基础按键,光枪通常还有一些辅助按键和方向控制位:

  • 辅助按键 1:"trigger": "1"
  • 辅助按键 2:"trigger": "2"
  • 辅助按键 3:"trigger": "3"
  • 辅助按键 4:"trigger": "4"
  • 方向键 上:"trigger": "5"
  • 方向键 下:"trigger": "6"
  • 方向键 左:"trigger": "7"
  • 方向键 右:"trigger": "8"

目标动作(Targets)

当你按下手柄(触发器)后,系统需要知道该去模拟键盘上的哪一个按键,这就是“目标动作”。

键盘按键命名规范

这些按键名称遵循 快捷键监听程序(Triggerhappy) 的命名规则。如果你想查看完整的官方列表,可以在控制台输入命令 thd --listevents

生活化类比:这就像是给键盘上的每个键都发了“身份证”,你必须准确填写身份证上的名字(如 KEY_A),系统才能准确找到那个键。

常用的按键代号示例:
* 字母键
* [A]:"target": "KEY_A"
* [Z]:"target": "KEY_Z"
* 数字键(主键盘区)
* [1]:"target": "KEY_1"
* [0]:"target": "KEY_0"
* 数字小键盘(Numpad)
* [0]:"target": "KEY_NUMERIC_0"
* [1]:"target": "KEY_NUMERIC_1"
* [星号 ]:"target": "KEY_NUMERIC_STAR"
*
功能与特殊键*
* [Esc]:"target": "KEY_FN_ESC"
* [F1]:"target": "KEY_FN_F1"
* [回车 Enter]:"target": "KEY_ENTER"


获取配置文件的其他途径

如果你不想从零开始编写,也有省力的方法:
* 自动抓取:如果开启了相关选项,你可以直接从 screenscraper.fr 网站抓取现成的 Pad2keys 配置文件。
* 参考案例:在系统自带的“内容下载器”中,有一些 Windows 游戏(如 Ri-LiSuper Mario War)已经内置了配置好的映射文件,非常适合拿来研究参考。


高阶进阶:用手柄运行系统命令

Pad2key 不仅能模拟键盘,还能直接“运行命令”。

操作步骤:

第一步:更改映射类型
将代码中的 "type": "key" 修改为 "type": "exec"

第二步:设置运行目标
"target" 后面的内容换成具体的系统命令。

应用示例:

{
"trigger": [
"hotkey",
"pageup"
],
"type": "exec",
"target": "batocera-screenshot"
}

生活化类比:通过这个设置,你相当于给手柄增加了一个“快捷开关”。比如上面的代码,能让你通过 HOTKEY + L1 组合键直接触发系统的截图功能。即使某些模拟器原生不支持截图,只要它支持 Pad2key,你就能强行给它加上这个功能。


DosBox 独立版(DosBox standalone)

对于使用 DosBox 独立模拟器(DosBox standalone) 的玩家来说,通过“手柄映射键盘(Pad2key)”功能,可以将你的手柄模拟成虚拟键盘。

生活化类比:这就像是给那些老旧的 DOS 游戏安装了一个“手柄驱动插件”。这对于那些从主机移植到 PC 的游戏特别管用,但如果是一个极度依赖复杂键盘操作的游戏,手柄映射可能就不太够用了。


如何设置 DosBox 的手柄映射

方法一:通过界面快速配置

你可以直接在 EmulationStation(ES 界面) 中为特定游戏创建配置。

第一步:进入单游戏设置
在游戏列表中选中你想配置的游戏,长按 南向键(B SNES) 呼出菜单(如果你使用的是 Batocera v30 或更早版本,请按 北向键(X SNES))。

第二步:创建映射
在菜单中找到并选择相关选项进行按键映射。

第三步:设置全系统通用配置(可选)
如果你希望所有的 DOS 游戏都共用一套映射方案,请在 DOS 游戏列表界面按下 [SELECT] 键,进入 高级系统选项(ADVANCED SYSTEM OPTIONS) 进行设置。

方法二:手动创建配置文件

如果你喜欢通过编辑文件来掌控一切,也可以手动创建映射文件。

  • 对于目录格式游戏:在游戏的 .pc 目录下放置一个名为 pad2.key 的文件。
  • 对于压缩包格式游戏:如果你的游戏是一个位于 dos 目录下的 .zip 文件,请在同级目录下创建一个文件,命名为 游戏文件名.zip.key(例如游戏是 mortal_kombat.zip,映射文件就是 mortal_kombat.zip.key)。

【提示】:这种方式非常智能,只要文件存在,系统就会自动激活映射功能,无需再在系统里修改任何设置。


重要兼容性说明

【注意】:上述设置专门针对 DosBox 独立版(standalone) 模拟器。如果你使用的是 libretro/DosBox Pure 等核心,这些映射文件默认是不会生效的。
* 如果你非要在 DosBox Pure 核心中使用,必须先在配置中将 dos.controller1_dosbox_pure 设置为 3,即开启“自定义键盘绑定(最适合 Batocera Pad2Key)”。


示例展示:真人快打 3 增强版(Mortal Kombat Trilogy)映射文件

下面是一个典型的映射文件结构,你可以参考它来编写自己的配置:

<file - pad2.key>
{
"actions_player1": [
{
"trigger": "up",
"type": "key",
"target": "KEY_UP"
},
{
"trigger": "down",
"type": "key",
"target": "KEY_DOWN"
},
{
"trigger": "left",
"type": "key",
"target": "KEY_LEFT"
},
{
"trigger": "right",
"type": "key",
"target": "KEY_RIGHT"
},
{
"trigger": "start",
"type": "key",
...

接上文的配置示例,以下是具体的按键映射逻辑:

{
"target": "KEY_ENTER"
},
{
"trigger": "select",
"type": "key",
"target": "KEY_KP7"
},
{
"trigger": "a",
"type": "key",
"target": "KEY_KP2"
},
{
"trigger": "b",
"type": "key",
"target": "KEY_KP1"
},
{
"trigger": "x",
"type": "key",
"target": "KEY_KP5"
},
{
"trigger": "y",
"type": "key",
"target": "KEY_KP4"
},
{
"trigger": "pageup",
"type": "key",
"target": "KEY_KP6"
},
{
"trigger": "pagedown",
"type": "key",
"target": "KEY_KP3"
},
{
"trigger": [
"hotkey",
"start"
],
"type": "key",
"target": "KEY_ESC"
},
{
"trigger": [
"hotkey",
"x"
],
"type": "key",
"target": "KEY_F4"
},
{
"trigger": [
"hotkey",
"y"
],
"type": "key",
"target": "KEY_F5"
}
]
}

【注意】:在上面的代码中:
* 触发器(trigger):对应的是你的虚拟手柄(Retropad)。通常不需要修改(提示:pageuppagedown 分别代表手柄上的 L1 和 R1 键)。
* 目标(target):对应的是虚拟键盘(Virtual Keyboard)上的按键。你可以根据自己的喜好随意更换或互换这些位置。


关于 DosBox Pure 核心

如果你使用的是 libretro/DosBox-Pure 核心,情况会稍有不同。它非常智能,通常能自动识别正在运行的游戏并加载对应的预设配置。

  • 常规映射:你可以像使用其他 libretro 核心一样,通过前文提到的标准重映射流程进行操作(建议针对每个游戏保存独立的重映射文件)。
  • 全键盘模式:如果某个游戏需要完全控制键盘,按下键盘上的 Scroll Lock 键可以开启 游戏聚焦模式(Game Focus mode)
    • 生活化类比:开启这个模式就像是把模拟器和电脑的“热键屏蔽墙”拆掉了。开启后,原本系统的快捷组合键将暂时失效,所有的按键动作都会毫无保留地传给 DOS 游戏。

摇杆模拟与 Pad2key 的选择

虽然你可以通过修改 dosbox.cfg 文件中的 joysticktype 行,让 DosBox 模拟出一个插在虚拟串口上的真实摇杆,但这并不是最优解。

【提示】:由于早年间摇杆制造商之间缺乏统一标准,很多游戏对这种物理模拟的支持并不完美。
* 建议:绝大多数 DOS 游戏建议直接使用 Pad2key(因为那个年代支持模拟量摇杆精准控制的游戏寥寥无几)。


Mupen64Plus (N64 模拟器)

与那些基于 libretro 的核心不同,Mupen64Plus 独立版模拟器(standalone Mupen64Plus) 的按键重映射需要通过编辑配置文件来实现。

手动自定义 Mupen64Plus 按键映射

如果你想调整 N64 模拟器中的系统控制按键(system’s controls),需要直接修改配置文件 userdata/system/configs/mupen64/input.xml

【注意】:在动笔修改之前,请务必先备份这个文件,以防万一!

第一步:打开配置文件
使用文本编辑器打开 input.xml,你会看到类似下方的按键绑定列表:

第二步:理解按键对应关系
在代码中,name 属性代表你手柄上的物理按键,而 value 属性代表对应的 N64 功能。

生活化类比:这就像是在给手柄按键贴“功能标签”。比如你觉得现在的“B 标签”贴在手柄的“y 键”上不舒服,你就可以在这个文件里把它重新撕下来贴到你想要的地方。

早期版本的配置参考(V37 以前):

<inputList>
    <input name="AnalogDeadzone" value="0,0" />
    <input name="AnalogPeak"     value="32768,32768" />
    <input name="l3"             value="Mempak switch" /> <input name="r3"             value="Rumblepak switch" /> <input name="a"              value="C Button R" />
    <input name="b"              value="A Button" />
    <input name="x"              value="C Button U" />
    <input name="y"              value="B Button" />
    <input name="start"          value="Start" />
    <input name="select"         value="" />
    <input name="pageup"         value="L Trig" />
    <input name="pagedown"       value="R Trig" />
    <input name="l2"             value="Z Trig" />
    <input name="r2"             value="" />
    <input name="up"             value="DPad U" />
    <input name="down"           value="DPad D" />
    <input name="right"          value="DPad R" />
    <input name="left"           value="DPad L" />
    <input name="joystick1up"    value="Y Axis" />
    <input name="joystick1down"  value="Y Axis" />
    <input name="joystick1left"  value="X Axis" />
    <input name="joystick1right" value="X Axis" />
    <input name="joystick2up"    value="C Button U" />
    <input name="joystick2down"  value="C Button D" />
    <input name="joystick2left"  value="C Button L" />
    <input name="joystick2right" value="C Button R" />
</inputList>

V38 及后续版本的变化

从 Batocera V38 版本开始,配置文件的结构发生了细微变化,引入了默认输入列表的概念。

V38 及以后版本的配置片段:

<inputList>
    <defaultInputList>
        <input name="AnalogDeadzone" value="0,0" />
        <input name="AnalogPeak"     value="32768,32768" />
        <input name="l3"             value="Mempak switch" />
...

第三步:保存并测试
修改完对应的 value 值后,保存文件并重启模拟器。

【提示】:如果你发现某些按键功能后面是空的(如 value=""),说明该手柄按键当前没有绑定任何 N64 功能,你可以根据需要自行填入对应的控制指令。

在配置 Mupen64Plus 的按键时,你会发现代码结构中包含两部分。一部分是适用于普通手柄的“默认配置”,另一部分则是专门为 N64 风格手柄准备的“备选配置”。

以下是 V38 及后续版本中配置文件的详细内容:

默认输入列表(defaultInputList)

这一部分主要针对现代手柄(如 Xbox 或 PlayStation 布局)。通过修改 value 后的值,你可以改变手柄按键对应的功能。

        <input name="r3"             value="Rumblepak switch" /> <input name="a"              value="C Button R" />       <input name="b"              value="A Button" />         <input name="x"              value="C Button U" />       <input name="y"              value="B Button" />         <input name="start"          value="Start" />            <input name="select"         value="" />                 <input name="pageup"         value="L Trig" />           <input name="pagedown"       value="R Trig" />           <input name="l2"             value="Z Trig" />           <input name="r2"             value="" />                 <input name="up"             value="DPad U" />           <input name="down"           value="DPad D" />           <input name="right"          value="DPad R" />           <input name="left"           value="DPad L" />           <input name="joystick1up"    value="Y Axis" />           <input name="joystick1down"  value="Y Axis" />
        <input name="joystick1left"  value="X Axis" />           <input name="joystick1right" value="X Axis" />
        <input name="joystick2up"    value="C Button U" />       <input name="joystick2down"  value="C Button D" />
        <input name="joystick2left"  value="C Button L" />
        <input name="joystick2right" value="C Button R" />
    </defaultInputList>

N64 风格手柄输入列表(n64InputList)

如果你使用的是专门的复刻版 N64 手柄,系统会调用这一段配置。它的按键逻辑更贴合原始硬件的布局。

生活化类比:这就像是为不同体型的人准备了两套西装。现代手柄穿“大码”,N64 复刻手柄穿“修身码”。系统会自动识别你的设备类型并选择最合身的那一套。

    <n64InputList>
        <input name="AnalogDeadzone" value="0,0" />             <input name="AnalogPeak"     value="32768,32768" />     <input name="l3"             value="Mempak switch" />
        <input name="r3"             value="Rumblepak switch" />
        <input name="a"              value="B Button" />
        <input name="b"              value="A Button" />
        <input name="x"              value="C Button U" />
        <input name="y"              value="C Button L" />
        <input name="start"          value="Start" />
        <input name="select"         value="Z Trig" />          <input name="pageup"         value="L Trig" />
        <input name="pagedown"       value="R Trig" />

进阶调整步骤

第一步:确定你的手柄类型
检查你使用的是普通双摇杆手柄还是 N64 专用布局手柄,以便修改对应的代码段。

第二步:精准修改功能值
在对应的 input name 行,将 value 后的功能描述(例如 A Button 改为 B Button)进行互换。

【提示】
* 如果想让某个按键失效,直接把 value 引号内的内容删掉,保留空引号即可(如 value="")。
* 修改完成后,保存文件并彻底退出模拟器再重新进入,新按键映射才会生效。

        <input name="l2"             value="C Button D" />
        <input name="r2"             value="C Button R" />
        <input name="up"             value="DPad U" />
        <input name="down"           value="DPad D" />
        <input name="right"          value="DPad R" />
        <input name="left"           value="DPad L" />
        <input name="joystick1up"    value="Y Axis" />
        <input name="joystick1down"  value="Y Axis" />
        <input name="joystick1left"  value="X Axis" />
        <input name="joystick1right" value="X Axis" />
        <input name="joystick2up"    value="" />
        <input name="joystick2down"  value="" />
        <input name="joystick2left"  value="" />
        <input name="joystick2right" value="" />
    </n64InputList>
</inputList>

在上面的代码中,左侧的名称(如 l2, r2)代表你的虚拟手柄输入(Retropad inputs),通常你不需要动它们(比如 pageuppagedown 分别对应手柄的 L1 和 R1)。而右侧引号里的内容(如 C Button D)则是模拟系统按键(system’s controls),你可以根据需求互换这些功能。

【注意】:Mupen64Plus 遵循“先到先得”原则。每一个模拟按键值只能绑定到一个物理按键上。
生活化类比:这就像一个萝卜一个坑,一个“模拟 Z 键”只能分配给一个“物理手柄按键”。如果你同时把 Z 键分给了 L2 和 R2,系统只会听 L2 的话,R2 就会因为“抢位失败”而失效。

【提示】:你还可以在这里分配各种功能指令,比如切换记忆卡(Mempak switch)等!


Dolphin 模拟器(GameCube 与 Wii)

自定义 Dolphin 的按键映射会稍微复杂一些,因为它涉及两个不同的游戏系统。如果你觉得看文字吃力,建议去搜索观看 Batocera Nation 专门制作的视频教程,以下是文字操作指南:

Wii 系统按键映射

想要完美体验 Wii 游戏,最省心的方案是使用真正的 Wii 手柄(Wiimote),并通过 Mayflash 感应条(Mayflash adapter bar) 连接到你的设备上。这种方式可以在系统外部直接设置好,操作起来最接近原生体验。

Firstly, if you’d like Batocera to handle emulated Wiimotes/Wii Classic Controller input, enable Wii.emulatedwiimotes as described on this page. This works best for games that support control via the Wii Classic Controller or the GameCube Controller. This can also be saved on a per-game basis by utilizing configuration files.

If you prefer to use Dolphin’s interface for configuring controls instead of Batocera’s preset configurations, read on.

A mouse and keyboard will be required to navigate these menus.

On the system menu, open Files with [F1] on the keyboard and navigate to Applications -> Dolphin-config. This will open Dolphin’s menu. Navigate to Controllers in the toolbar (or press [F1] on the keyboard).

Dolphin’s menu as it appears on all platforms.

Ensure “Emulate the Wii’s Bluetooth adapter” is checked, and that the first Wii Remote is set to “Emulated Wii Remote”, then click Configure.

{{:dolphin_emulated_wiimote.png|}}

This will open the controller configuration menu. Make sure the controller you intend to use is selected at the top-left of the window. For instance, here the Xbox controller is being selected to emulate the Wiimote:

{{:dolphin_controller_devices.png|}}

Set up your emulated Wiimote as you’d like, and then save your profile in the top-right of the window.

{{:dolphin_wii_controller_profile.png|}}

The control panel itself is intuitive and easy to follow, but has extremely powerful scripting features. Further documentation available at https://Dolphin-emu.org/docs/guides/configuring-controllers/#Emulated_Wii_Remote.

And now your controller is remapped in Dolphin. The profile used will be the last selected profile in Dolphin’s controller configuration menu for that controller when no game-specific profile specifies otherwise.

GameCube

You can configure the controls for this system within its own controller configuration utility (mouse and keyboard required). On the system menu, open Files with [F1] on the keyboard and navigate to Applications -> Dolphin-config. This will open Dolphin’s menu.

Dolphin’s menu as it appears on all platforms.

From here, navigate to Controllers in the toolbar (or press F1 on the keyboard).

Configure to your heart’s content!

Click on the Configure button for Port 1 of the GameCube Controllers. You’ll notice that it has a bunch of “Button #” already assigned; this is the default configuration of Dolphin and is unrelated to your current controller.

Ah, this looks familiar.

You can configure //system controls// by clicking on them and pressing a button on your //controller//. Let’s say I had a SNES-style pad and wanted the labels to match the game’s inputs, I would reassign it like so:

Works well for the SN30+.

You’ll notice that the buttons on your //controller// will turn into cardinal directions. This is the lingo used by Batocera to unify all the various controllers you can connect to it. You might also want to calibrate your sticks, as I’ve done here, and maybe increase the trigger threshold (good controllers should be able to go all the way up to 99% with no trouble!). You should also probably reassign the trigger axises so the triggers use the full axis instead of only a partial amount of it.

Once you’re done, type a name into the Profile field at the top right and click Save.

A very creative profile name!

Click Close on all the windows and then File -> Quit to leave Dolphin.

Now, before you launch any GameCube/Wii game, open the ADVANCED SYSTEM OPTIONS by pressing [SELECT] on the GameCube’s game list screen.

A useful shortcut to know.

And set USE PAD PROFILES to “ON”. If you don’t do this, your profile will be ignored.

This is critical!

And now your controller is remapped in Dolphin. The profile used will be the last selected profile in Dolphin’s controller configuration menu for that controller when no game-specific profile specifies otherwise.

The control panel itself is intuitive and easy to follow, but has extremely powerful scripting features. Further documentation available at https://Dolphin-emu.org/docs/guides/configuring-controllers/#GameCube_Controller.

Save per-game remap profiles

Controller remaps can be applied to specific games via Dolphin-emu-config as well.

After creating and saving a custom profile, go back to Dolphin’s main menu and right click on the game you’d like to use the custom profile for.

{{:dolphin_game_properties.png?720|}}

Go into Properties.

{{:dolphin_game_properties_window.png|}}

Go into Editor.

{{:dolphin_game_properties_window_editor.png|}}

Then in the “User Config” text box, ensure the dropdown menu is set to “Presets” and type the following into the window:


[Controls]
PadProfile1 =

where is the name of the custom profile you’d like to use for that game.

For setting this profile for more than just player 1, append the following:


PadProfile2 = PadProfile3 = PadProfile4 =

Not all players have to use the same profile. An example user config might look like this:


[Controls]

PadProfile1 = triggers on L2 R2
PadProfile2 = triggers on L2 R2
PadProfile3 = triggers on L1 R1
PadProfile4 = Peters super cool custom config

Controllers with only one analog stick

If your //controller// has only one analog stick (Odroid Go Advance, or if you have a Dreamcast or N64-style gamepad for example) and you want to use an emulator that by default uses the D-pad as the //system’s controller// and the second analog as the //system’s mouse//. You can edit the /userdata/system/Batocera.conf and add the following lines in order to have the left analog as the //system’s mouse//:


amiga1200.RetroArch.input_player1_analog_dpad_mode=1
amiga1200.RetroArch.input_player2_analog_dpad_mode=1
amiga500.RetroArch.input_player1_analog_dpad_mode=1
amiga500.RetroArch.input_player2_analog_dpad_mode=1
c64.RetroArch.input_player1_analog_dpad_mode=1
c64.RetroArch.input_player2_analog_dpad_mode=1

Cores like LR-PUAE and Vice (and some others like Flycast etc…) will then map the left analog on your //RetroPad// to the //system’s mouse// (RetroArch only).

Reconfiguring the Keyboard for RetroArch

If you’d like to reconfigure the default keyboard bindings for all systems emulated by a libretro core (such as if you don’t have a controller to use or you’re in an all-in-one device like a netbook), refer to the keyboard controls section of the advanced RetroArch settings page instead.

Default light gun mappings

Here are the default light gun mappings, in case you’re configuring an emulator which does not support “press the button to map” remapping functionality:

^ Global keyboard/mouse code ^ Wiigun button ^ Wiigun code ^ Sinden button ^ Sinden code ^ GUN4IR button ^ GUN4IR code ^ AimTrack button ^ AimTrack code ^ AElightgun button ^ AElightgun code ^ Dolphinbar button ^ Dolphinbar code ^ GunCon2 button ^ GunCon2 code ^
| BTN_LEFT | B | BTN_EAST | Trigger | BTN_LEFT | Trigger | BTN_LEFT | Trigger | BTN_LEFT | Trigger | BTN_LEFT | B | BTN_LEFT | Trigger | BTN_LEFT |
| BTN_RIGHT | A | BTN_SOUTH | Pump/Front left | BTN_RIGHT | Offscreen/A/C | BTN_RIGHT | Right side | BTN_RIGHT | Left mouse | BTN_RIGHT | A | BTN_RIGHT | C | BTN_RIGHT |
| BTN_MIDDLE | PLUS | KEY_NEXT | Back left | BTN_MIDDLE | B | BTN_MIDDLE | Left side | BTN_MIDDLE | Middle mouse | BTN_MIDDLE | – | – | START | BTN_MIDDLE |
| BTN_1 | MINUS | KEY_PREVIOUS | Front right | KEY_1 | START | KEY_1 | – | – | 1 | BTN_1 | – | – | SELECT | BTN_1 |
| BTN_2 | 1 | BTN_1 | Back right | KEY_2 | SELECT | KEY_5 | – | – | 2 | BTN_2 | – | – | A | BTN_2 |
| BTN_3 | 2 | BTN_2 | – | – | – | – | – | – | 3 | BTN_3 | – | – | B | BTN_3 |
| BTN_4 | HOME | BTN_MODE | – | – | – | – | – | – | 4 | BTN_4 | – | – | – | – |
| BTN_5 | ↑ | KEY_UP | ↑ | KEY_UP | ↑ | KEY_UP | – | – | Up | KEY_UP | – | – | ↑ | 5 |
| BTN_6 | ↓ | KEY_DOWN | ↓ | KEY_DOWN | ↓ | KEY_DOWN | – | – | Down | KEY_DOWN | – | – | ↓ | 6 |
| BTN_7 | ← | KEY_LEFT | ← | KEY_LEFT | ← | KEY_LEFT | – | – | – | – | – | – | ← | 7 |
| BTN_8 | → | KEY_RIGHT | → | KEY_RIGHT | → | KEY_RIGHT | – | – | – | – | – | – | → | 8 |


原文: 逐模拟器按键映射 • 翻译: DIY8 Bot

© 版权声明
评论 抢沙发

请登录后发表评论

    暂无评论内容