首页 > 解决方案 > 如何在 Retroflag GPI 上配置 DOSBox 游戏中的键?

问题描述

我在我的Retroflag GPi上安装了 DOSBox,并将一些旧的 DOS 内容复制到 roms/pc,我可以从 RetroPie/EmulationStation 菜单运行它们,但是控件有问题。默认情况下,箭头似乎只在某些游戏中起作用,而其他键通常没有任何用处。我想以某种方式分别为每个游戏配置密钥。我知道 DOSBox 有一些配置键盘的方法,但是 GPi 按钮的键码是什么?

标签: dosbox

解决方案


首先,系统将按钮视为操纵杆,因此您要做的是将操纵杆动作和按钮映射到键盘。实际的按钮代码是:

Up: "stick_0 hat 0 1"
Down: "stick_0 hat 0 4"
Left: "stick_0 hat 0 8"
Right: "stick_0 hat 0 2"
A: "stick_0 button 0"
B: "stick_0 button 1"
X: "stick_0 button 2"
Y: "stick_0 button 3"
Select: "stick_0 button 8"
Start: "stick_0 button 9"
Left Shoulder: "stick_0 button 4"
Right Shoulder: "stick_0 button 5"

(如果您将 d-pad 切换到轴模式(通过长按 Start+Left),则 d-pad 会获得不同的代码:

Up: "stick_0 axis 1 0"
Down: "stick_0 axis 1 1"
Left: "stick_0 axis 0 0"
Right: "stick_0 axis 0 1"

现在您需要为每个游戏创建一个单独的 .conf 文件和一个 .map 文件。.map 文件包含键盘映射,例如对于典型游戏,文件 my_game.map 可能如下所示:

key_up "stick_0 hat 0 1"
key_down "stick_0 hat 0 4"
key_left "stick_0 hat 0 8"
key_right "stick_0 hat 0 2"

key_space "stick_0 button 0"
key_esc "stick_0 button 3"
key_p "stick_0 button 9"

key_lctrl "stick_0 button 8"
mod_3 "stick_0 button 8"
key_q "stick_0 button 9 mod3"

首先映射箭头,然后映射游戏中的其他有用键,最后一部分做了一件棘手的事情:它将 Select 映射到 Ctrl 和 mod_3(DOSBox 中的虚拟修改键),然后在 mod3+Start 上发送键 Q。这意味着实际上按下 Select+Start 将发送 Ctrl+Q(退出),但 Start 本身不会发送 Q(仅 P,如上定义)。

如果游戏无法正常退出,可以像这样杀死 DOSBox:

mod_3 "stick_0 button 8"
hand_shutdown "stick_0 button 9 mod3"

然后在 roms/pc 中创建一个 my_game.conf 文件:

[sdl]
mapperfile=/full/path/to/my_game.map

[autoexec]
@cd /games/my_game
@my_game.exe
@exit

(不确定,也许映射器的相对路径也可以。)

我假设挂载操作是在主 DOSBox 配置 (config/dosbox-SVN.conf) 中定义的,例如:

[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.

@mount c /home/pi/RetroPie/roms/pcdata
@c:

这里我将所有的 DOS 文件都保存在 roms/pc 中,而不是在 roms/pcdata 中,以防止 exe/bat/com 文件直接出现在游戏列表中。我只希望我的 conf 文件出现在那里。

最后一个通知:正如我所说,整个控制器被视为一个操纵杆,有些游戏,例如波斯王子,当使用操纵杆启动时,进入操纵杆模式并且根本不对箭头做出反应。在这种情况下,您可以改为将 d-pad 和例如 A 映射到操纵杆,如下所示:

jaxis_0_1- "stick_0 hat 0 1"
jaxis_0_1+ "stick_0 hat 0 4"
jaxis_0_0- "stick_0 hat 0 8"
jaxis_0_0+ "stick_0 hat 0 2"
jbutton_0_0 "stick_0 button 0"

推荐阅读