Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用iPad游玩SDVX

如何用iPad游玩SDVX

作者头像
大A
发布于 2023-02-14 10:35:20
发布于 2023-02-14 10:35:20
2.5K02
代码可运行
举报
文章被收录于专栏:爱打音游的大A爱打音游的大A
运行总次数:2
代码可运行

SDVX获取与安装

google一下基本都能找到,这里简单汇总一下,有这些基本上能搞定安装问题了。

遇到的问题

无法刷卡

  在游玩过程中会遇到刷卡输入密码后出错然后重复刷卡重复出错的问题,原因是没有给asphyxia装SDVX的账号插件,参考这个asphyxia-core/plugins

无法开启MEGAMIX BATTLE等模式

  原因是在游戏的test设置中开启了free play,关掉,然后确保给asphyxia装了最新的SDVX插件(貌似网上找不到,但是集成在了KFC-2021060802的游戏本体中)

开启女武神模式

BemaniPatcher一开始是支持直接给dll打补丁以开启女武神模式的,但是由于某些原因移除了对所有游戏的最新版本的patch支持。可以在这里找到对旧版本(KFC-2021060802)的patch代码,照葫芦画瓢去patch最新版本即可。具体来说就是将最新版的soundvoltex.dll拖到hexed.it中,然后搜索byte数组87050000480f45ca488bc1(从旧版本得到,进行模式匹配),使用大端序搜索,搜索到以后修改8705470c即可,然后替换游戏目录下的dll。最后还需要修改contents\prop\ea3-config.xml文件,将<spec __type="str">F</spec>改成<spec __type="str">G</spec>就ok了。顺带一提把<dest __type="str">J</dest>改成<dest __type="str">A</dest>可以切换到英语。参考自Arcade PC

iPad手台

  不知道网上有没有现成的轮子能充当iPad手台,反正自己早就有想过要造个轮子了,趁放假有空搞一波。

  这是成品——SDVXPAD。使用方法参考brokenithm-kb,我的readme里面也有写。需要注意的是要用管理员身份打开,否则无法工作。

  下面简单讲下造轮子过程,只想用轮子的可以到此结束了。

魔改Brokenithm-kb

修改后端代码

  Brokenithm-kb是网页版的中二控制器,但是事实上他并不能用来玩中二,原因是他产生的模拟输入无法被中二接受,简而言之就是虚拟按键和真实按键之间存在区别,这个区别导致了包括中二以及SDVX在内的许多游戏无法接受虚拟输入。出于性能考虑,一些需要迅速反馈的游戏往往会直接和输入设备进行类似驱动级别的底层交互,而非windows的输入回调api

参考:

  总之Brokenithm-kb使用的user32.dll中的SendInput API是不管用了,网上找了一堆解决方案都不太好使,最终找到了DD.dll,虽然不开源,而且每次调用都要进行联网和服务器通信,有点担心是否有后门。但是目前来说用起来还是比较方便的,等之后有空逆向一下看看。

  修改Brokenithm-kb源码中KeyboardSimulator.cpp的输入相关的代码,用DD的API替换掉即可。

首先在开头处初始化DD.dll

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HINSTANCE hinst  = LoadLibraryW(L"DD.dll");

typedef int(__stdcall*lpfun_DD_todc)(int);
typedef int(__stdcall*lpfun_DD_btn)(int btn);
typedef int(__stdcall*lpfun_DD_key)(int code, int flag);


lpfun_DD_todc dd_todc = (lpfun_DD_todc)GetProcAddress(hinst, "DD_todc");//VK code to ddcode
lpfun_DD_btn dd_btn = (lpfun_DD_btn)GetProcAddress(hinst, "DD_btn");//Mouse move rel.
lpfun_DD_key dd_key = (lpfun_DD_key)GetProcAddress(hinst, "DD_key");//Keyboard

修改按键表(可以不改,看个人喜好)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WORD YUANCON_BTN_MAP[N_BUTTONS] = {
    '6', 'A', '4', 'S', '2', 'D', '0', 'F',
    'X', 'Z', 'V', 'C', 'T', 'S', 'R', 'Q',
    'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I',
    'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A',
    'Y', 'Q', 'W','E', 'R', 'T'};

在构造函数KeyboardSimulator::Impl::Impl中添加以下代码用于检查DD是否正常加载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (dd_todc && dd_btn && dd_key)
	{
		int st = dd_btn(0); //DD Initialize
		if(st == 1){
			spdlog::info("DD init OK");
        }
	}
	else {
		spdlog::info("DD init ERROR");
	}

修改key_down和key_up

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void KeyboardSimulator::Impl::key_down(int i)
{
    spdlog::debug("{} Down", m_layout[i]);

    int ddcode = dd_todc(m_layout[i]);
    dd_key(ddcode,1);


}

void KeyboardSimulator::Impl::key_up(int i)
{
    spdlog::debug("{} Up", m_layout[i]);

    int ddcode = dd_todc(m_layout[i]);
    dd_key(ddcode,2);

}

然后删除原来的冗余代码就完事了。

  编译可能比较麻烦,还得搞cmake、vspkg和VS2019的环境,可以偷懒用github的action功能,交给github服务器去编译,只不过效率太低,每次编译都去重新配环境了,编译一次要两分钟左右,不方便调试,最后还是自己配环境了。不得不说Visual Studio真的是太笨重了,但是没办法,用VS Code编译老是出错,后来想着参考github编译的过程来一条一条的输入命令应该能行,然而到了vspkg的步骤还是提示要安装VS2019,服了。

修改前端布局

  由于原作者代码写的鲁棒性比较好,前端改起来也很方便。直接贴代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<body>
    <div id="fullscreen">
      <!-- Offset for LED display -->
      <div class="container">
        <div class="vol-container grow"></div>
        <div class="bt-container grow">
          <canvas id="canvas" width="33" height="1"></canvas>
        </div>
        <div class="fx-container grow"></div>
      </div>
      <!-- Hitbox Divs -->
      <div class="container" id="main">
        <div class="vol-container grow">
          <div class="air key" data-air="1" data-kflag="0"></div>
          <div class="air key" data-air="1" data-kflag="1"></div>
          <div class="air key" data-air="1" data-kflag="2"></div>
          <div class="air key" data-air="1" data-kflag="3"></div>
          <!-- <div class="air key" data-air="1" data-kflag="4"></div> -->
        </div>
        <div class="bt-container grow">
          <div class="key" data-kflag="0"></div>
          <div class="key" data-kflag="2"></div>
          <div class="key" data-kflag="4"></div>
          <div class="key" data-kflag="6"></div>
        </div>
        <div class="fx-container grow">
          <div class="key" data-kflag="8"></div>
          <div class="key" data-kflag="10"></div>
        </div>
      </div>
    </div>
    <script src="/config.js"></script>
    <script src="/app.js"></script>
  </body>

同时要修改style里面的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.vol-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: stretch;
    flex: 1;
}

.bt-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: stretch;
    flex: 1;
}

.fx-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: stretch;
    flex: 1;
}

  js部分不用改,直接复用得了,改了大半天没啥用处,浪费时间。这里有个很迷惑的点是data-kflag对于air键来说可以用1、2、3、4这样的间隔,而对于其他按键则需要2、4、6、8这样的间隔,否则会出现用多指的时候会触发明明没有按到的按键这样的bug,折腾了快一天都没搞明白为啥。

结语

  虽然花了好久搞了个iPad手台,然而实际上游玩体验并不好,还不如用键盘打的分高。玩了一小会儿,定级开始打12、13的歌以后发现键盘已经无法应付了,有很多需要左手拧旋钮右手按左边两个按键的操作,没办法,还是下单买个手台了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
7b2美化-添加好看的底部介绍
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
小狐狸说事
2022/11/16
7670
7b2美化-添加好看的底部介绍
Blazor学习之旅 (13) Razor类库的使用
在上一篇我们学习了Blazor和JavaScript的互操作性,这一篇我们了解下如何创建和使用Razor类库。
Edison Zhou
2024/01/03
6760
Blazor学习之旅 (13) Razor类库的使用
外挂基础_开挂的正确姿势
  所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间去说明一切吧。
全栈程序员站长
2022/11/10
2.7K0
全栈开发工程师微信小程序 - 上
wx:for是列表渲染标签,默认当前循环项的变量名为item.wx:key用于在动态列表渲染中保存子项的特征和状态.
达达前端
2022/04/29
6380
全栈开发工程师微信小程序 - 上
致敬1024程序员节:用JavaScript编写一个简单的1024小游戏
在每年的10月24日,我们都会庆祝程序员节,这是一个向所有辛勤工作、创造出无数令人惊叹应用和系统的程序员们致敬的日子。为了纪念这个特殊的日子,我们将通过编写一个简单的1024小游戏来向所有程序员们表示敬意。本文将详细解释如何使用JavaScript编写这个小游戏,并对代码进行分段讲解。
can4hou6joeng4
2023/11/17
4690
波浪动态背景
itclanCoder
2023/09/14
3870
波浪动态背景
12、动态链接库,dll
动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。
全栈程序员站长
2022/07/05
1.1K0
12、动态链接库,dll
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)
List是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。
枫叶丹
2025/02/06
1240
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)
使用纯 html + javascript 开发一个本地音乐播放器
本文介绍不使用任何前端开发框架,仅凭借原生的 html + JavaScript,实现一个简单的本地音乐播放器的实现步骤。
编程小妖女
2025/06/08
3970
使用纯 html + javascript 开发一个本地音乐播放器
「译」Flexbox 基本原理
整理自 MDN web docs 的笔记,同时参考了 Web Bos 上的什么是 Flexbox系列视频。
Chor
2019/11/08
2.3K0
仿高德地图实现输入起点和终点规划路径并可切换
本文结合高德API和MapboxGL,仿照手机版高德地图实现用户输入起点和终点位置并模糊搜索选择具体位置,根据选择的起始点位置规划路径,并实现多条路径的切换展示。
牛老师讲GIS
2025/05/31
1360
仿高德地图实现输入起点和终点规划路径并可切换
通用系统函数
熟练掌握Win32 API函数的参数传递,是软件逆向的基础,本章节内容将使用MASM汇编器,逐个编译这些源程序,你可以通过使用一些调试工具,这里推荐OllyDBG来附加编译后的可执行文件,进行逐个分析,观察二进制程序逆向后的一些变化,总结吸收经验,为以后的二进制逆向,漏洞挖掘打基础.
王 瑞
2022/12/28
1.2K0
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
HML(HarmonyOS Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、列表渲染、条件渲染和逻辑控制等高级能力。
枫叶丹
2025/01/27
2300
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
企鹅电竞weex实践之UI篇
随着电竞业务的不断发展,页面功能越来越多,交互逻辑更加复杂,类似无限滚动、上拉刷新、横竖切换滚动等形式在业务中已是标配,经过重重优化后在H5中的体验一直达不到理想状态,没错,种种卡,H5的性能太差! 是持续优化还是破而后立选择新的技术方向呢?我们选择了更有效的后者。
xiangzhihong
2022/11/30
1.2K0
uniapp+springboot实现知识点显示
GeekLiHua
2025/01/21
1090
uniapp+springboot实现知识点显示
用 WPF 写的颜色拾取器
之前都是用别人的颜色拾取器,今天自己用WPF写了一个颜色拾取器小程序 拾取鼠标所在位置的颜色,按键盘上的空格键停止取色 程序下载:MyWPFScreenColorE.rar 程序里面有一个全局的勾子
lpxxn
2018/01/31
1.5K0
用 WPF 写的颜色拾取器
JavaWeb新手进阶经典项目 & 半小时高效开发 & 海量知识点涵盖 (二)
我们昨天完成了第一部分的开发,即项目搭建和登录、注册功能实现。今天本文将与读者一起实现用户列表的显示、部门模块的显示和头像上传功能。
易兮科技
2020/09/27
1.2K0
JavaWeb新手进阶经典项目 & 半小时高效开发 & 海量知识点涵盖 (二)
用CodeBuddy打造儿童拼图游戏:AI如何让创意编程更简单
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
小Q圈圈
2025/05/28
1740
用CodeBuddy打造儿童拼图游戏:AI如何让创意编程更简单
Python开发物联网数据分析平台---数据看板
image.png 前端页面dashboard.html的代码如下: {% extends "base.html" %} {% block body %} <div class="content-wrapper" data-menu="overview dashboard"> <!-- Content Header (Page header) --> <div class="content-header"> <div class="container-fluid">
MiaoGIS
2019/11/01
4.2K0
Python开发物联网数据分析平台---数据看板
CSS笔记
CSS中长度单位: px:像素(Pixel);em:相对长度单位,相对于当前对象内文本的字体尺寸;pt:点(Point),绝对长度单位;pc:派卡(Pica);in:英寸(Inch);mm:毫米;cm:厘米。 1 in = 2.54 cm = 25.4 mm = 72 pt = 6 pc
matt
2022/10/25
2.5K0
CSS笔记
相关推荐
7b2美化-添加好看的底部介绍
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验