[Emuelec]独立模拟器自动映射手柄按键脚本研究

2023-11-05 09:28

本文主要是介绍[Emuelec]独立模拟器自动映射手柄按键脚本研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Emuelec中,对独立模拟器配置手柄按键是个非常头疼的事,难点在于emuelec的按钮配置映射到模拟器所需的按钮配置,更头疼的是,每个模拟器所需的配置都不相同,此时就需要花大把时间了解每个模拟器的配置上。好在,Emuelec自4.3以后陆续增加了对独立模拟器的适配增强,其中最重要的就是对其自动映射按钮功能,它通过自动映射脚本,让玩家无需了解各个模拟器配置细节,既可自动完成手柄配置。这里以dc独立模拟器flycast为例,说说其自动映射脚本的工作原理。

独立flycast模拟器游戏启动主要流程如下:

1.开始游戏->启动游戏脚本:/usr/bin/emuelecRunEmu.sh->启动模拟器脚本::/usr/bin/flycast.sh

2.在flycast.sh中调用自动设置手柄按键脚本:/usr/bin/set_flycast_joy.sh

3.完成键位映射配置,生成对应配置文件:/storage/.config/flycast/emu.cfg  和 /storage/.config/flycast/mappings/手柄按钮映射文件.cfg

4.启动独立模拟器flycastSA ,开始真正游戏       

这里重点分析以下/usr/bin/joy_common.sh和/usr/bin/set_flycast_joy.sh

1. 在set_flycast_joy.sh中引用/usr/bin/joy_common.sh中的公用函数

source joy_common.sh "flycast"

2. joy_commn.sh中主要提供收集本机所有手柄信息的功能,其函数名为:jc_get_players,jc_get_players的基本工作原理是通过扫描本机的手柄的硬件信息,并通过查表(/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt)来获取手柄的键值配置信息

# echo  "${SDL_GAMECONTROLLERCONFIG_FILE}"
/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt

3.joy_common.sh收集并整理好手柄信息后,将其回传给set_flycast_joy.sh中的set_pad函数,完成最后转换映射到模拟器所需的配置

#在joy_common.sh中的代码
jc_get_players() {......local PLAYER_CFG=for p in {1..4}; dolocal CFG="${p} ${PLAYER_CFGS[$(( p-1 ))]}"if [[ $p -le $cfgCount ]]; thenecho "PLAYER_CFG=${CFG}"fieval clean_pad ${CFG}[[ "${CFG}" != "${p} " ]] && eval set_pad ${CFG} #这里回传给set_flycast.sh脚本的去做真正的配置转换(映射)done...
}
#在set_flycast_joy.sh中的代码
set_pad() {echo "set_pad params: $1 $2 $3 $4"local JSI="$2"local DEVICE_GUID=$3local JOY_NAME="$4"......
}

4.自此完成了对模拟器配置文件的生成与映射

题外话:

早期的emuelec4.6对独立flycast模拟器手柄映射有bug,会导致第一个手柄会被映射到第二个玩家,导致有些游戏无法操控,在set_flycast.sh中有一行代码如下:

local DEVICE="maple_sdl_joystick_${index} = ${JSI:2}\ndevice${1} = 0\ndevice${1}.1 = 1\ndevice${1}.2 = 1\n"

最新的4.6仓库代码已经修正了,代码如下:

local DEVICE="maple_sdl_joystick_${index} = ${index}\ndevice${1} = 0\ndevice${1}.1 = 1\ndevice${1}.2 = 1\n"

你看出差异了吗?呵呵

这篇关于[Emuelec]独立模拟器自动映射手柄按键脚本研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348911

相关文章

poj 2594 二分图最大独立集

题意: 求一张图的最大独立集,这题不同的地方在于,间接相邻的点也可以有一条边,所以用floyd来把间接相邻的边也连起来。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <sta

poj 3692 二分图最大独立集

题意: 幼儿园里,有G个女生和B个男生。 他们中间有女生和女生认识,男生男生认识,也有男生和女生认识的。 现在要选出一些人,使得这里面的人都认识,问最多能选多少人。 解析: 反过来建边,将不认识的男生和女生相连,然后求一个二分图的最大独立集就行了。 下图很直观: 点击打开链接 原图: 现图: 、 代码: #pragma comment(

最大流=最小割=最小点权覆盖集=sum-最大点权独立集

二分图最小点覆盖和最大独立集都可以转化为最大匹配求解。 在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为:二分图最小点权覆盖和二分图最大点权独立集。   二分图最小点权覆盖     从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 建模:     原二分图中的边(u,v)替换为容量为INF的有向边(u,v),设立源点s和汇点t

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

centos6一键安装vsftpd脚本

centos6一键安装vsftpd脚本 手动安装vsftpd参考教程:Centos下安装Vsftpd的图文教程 vsftpd脚本功能: 1.安装 (命令执行:sh xxx.sh)2.添加ftp用户 (命令执行:sh xxx.sh add)3.卸载vsftpd (命令执行:sh xxx.sh uninstall) 测试环境:centos6 x64 centos6 x86(测试centos7以

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww