dosbox - 如何在 Retroflag GPI 上配置 DOSBox 游戏中的键?
问题描述
我在我的Retroflag GPi上安装了 DOSBox,并将一些旧的 DOS 内容复制到 roms/pc,我可以从 RetroPie/EmulationStation 菜单运行它们,但是控件有问题。默认情况下,箭头似乎只在某些游戏中起作用,而其他键通常没有任何用处。我想以某种方式分别为每个游戏配置密钥。我知道 DOSBox 有一些配置键盘的方法,但是 GPi 按钮的键码是什么?
解决方案
首先,系统将按钮视为操纵杆,因此您要做的是将操纵杆动作和按钮映射到键盘。实际的按钮代码是:
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"
推荐阅读
- python - 使用startswith() 但不包含指定元素
- python - 将 txt 文件中的每一行通过值 n 后更改值
- javascript - javascript中正则表达式值的问题
- entity-framework - 如何修复“错误 MSB4068:元素
尝试在命令行(实体框架)中创建迁移时无法识别“ - html - display inline-block 使元素在 Firefox 中可聚焦
- reactjs - 未在浏览器中显示图像 - React
- angular - 改善使用授权代码流时 SPA 的缓慢初始页面加载
- flutter - 何时使用缓存网络图像
- java - 仅在 Spring Boot 中的 HTTPS 请求
- .net - 无法读取未定义 Angular 9 的属性“类型”