数据上传失败?!MaiMai DX 的进阶配置
写在前面的
仅作学习使用。
本教程将详细讲解各个关于配置及服务器连接相关的参数,再阅读本文前,请务必现先阅读《SDGB?!要开始了呦!》
如有任何问题请通过 QQ 联系作者。
segatools.ini 配置项详解
此处各项配置均来自笔者阅读源码后整理所得,不保证完全正确,如有疑问请自行 clone segatools 官方仓库查阅源码。
写法与生效规则
[配置节]参数名=参数值; 分号开头是注释- 开关写
0/1;键盘绑定写 Windows Virtual-Key Code。 - 普通 INI 路径使用单个反斜杠,如
DEVICE\aime.txt。 - 修改已有配置节和键,不要为每次修改重复添加同名节。
- 默认读取工作目录的
segatools.ini;设置SEGATOOLS_CONFIG_PATH后以该文件为准。 - 修改后退出游戏及相关 amdaemon,再通过启动脚本重启。
- 下文“模板值”是随附 INI 的显式值;“缺省值”是省略键时的源码回退值,两者可能不同。
[aimeio]/[mai2io]选择外部 DLL 后,内置卡号、键盘映射参数是否仍生效取决于该 DLL。
[vfs]:游戏数据路径
| 参数 | 模板值 | 含义和写法 |
|---|---|---|
amfs | 空 | AMFS 元数据目录,通常含 ICF1 / ICF2。 |
option | 空 | 更新内容根目录,下面应是 Axxx 子目录。 |
appdata | 空 | SEGA 的可写数据目录,可从空目录开始。 |
VFS 默认启用,amfs 和 appdata 不允许为空。
option= 留空在 Hook 中只产生警告;游戏版本本身仍可能依赖更新数据。
此处绝对路径相对路径皆可。
[aime]:读卡器模拟和虚拟卡
| 参数 | 模板值 | 含义和写法 |
|---|---|---|
enable | 1 | 启用 Aime 读卡器模拟;普通 PC 保持1。接入可直接供游戏使用的真实读卡器时才考虑 0 |
aimePath | DEVICE\aime.txt | 内置 IO 从此文件读取 Aime 卡号,也可填绝对路径 |
scan | 0x0D | 刷卡键,默认 Enter;游戏要求刷卡时持续按住。 |
内置实现省略 aimeGen 时为 1,有效卡文件不存在时可在刷卡时生成 20 位数字卡号;DEVICE 应存在且可写。已有卡号文件应备份。
可选补充:
[aime]aimeGen=1felicaPath=DEVICE\felica.txtfelicaGen=0这是添加到已有 [aime] 节的字段。FeliCa 文件为 16 个十六进制字符;其自动生成默认关闭。读取顺序为已有 Aime → 已有 FeliCa → 按开关生成卡号。
如果你采用的版本是 SDGB ,那么 aime 配置 enable 设置为 0 即可,别问我为什么,你要是能通过 aime 卡登录上 SDGB 请速速联系我,我 v 你个舞神(
[vfd]:机台文字显示屏
enable=1 模拟 VFD GP1232A02A FUTABA 设备;0 关闭。它是机台文字显示设备,不是游戏主显示器。maimai 的 Hook 默认把 VFD 放在 COM2。
[dns]:网络服务目标
default=127.0.0.1 是模板值,不能直接视作可用配置。
写服务端的实际主机名或 IP,例如 default=192.168.1.100;服务端在本机时也应使用可访问的局域网地址。该项只重定向网络服务目标,不会启动或实现服务端。
如果你要使用 WAHLAP PowerOn(华立开机认证),请将 default 设置为
ai.sys-allnet.cn。
[netenv] 与 [keychip]:网络模拟和机台身份
| 配置 | 模板值 | 含义和写法 |
|---|---|---|
[netenv] enable | 1 | 向游戏提供模拟局域网环境;单机先保持模板值。关闭后要满足游戏对真实网络的要求 |
[netenv] addrSuffix | 11 | 游戏所见虚拟机台 IP 的最后一段。例:addrSuffix=12 |
[keychip] id | A69E-01A88888888 | 模拟 keychip 序列号,按服务端分配填写;不是刷卡卡号 |
[keychip] region | 源码缺省1 | 模拟 keychip 的区域标记,例如region=1 表示日本 |
[keychip] subnet | 192.168.172.0 | 游戏预期机台网段,填点分 IPv4 网络地址,不加/24 |
模板说明:禁用 netenv 后,subnet 应匹配真实局域网,并使用游戏要求的 192.168.* 网段。
省略 [netenv] enable 时源码为 0;省略 [keychip] subnet 时为 192.168.100.0。因此不要随意删除模板字段。
keychip.id 是模拟加密狗的序列号,用来向游戏提供机台身份。 俗称狗号,如果你要连接官服,此字段是必须的,由于机台身份码为商业机密,此处我不能给出可以使用的具体值,如有需求请自行寻找。
keychip.region
region 覆盖模拟 keychip 向游戏提供的区域代码。配置读取函数缺省取 1,随后通过模拟注册表的 region 值返回给游戏;具体如何检查或使用该区域由游戏及系统软件决定。
| 值 | 仓库文档中的地区含义 |
|---|---|
1 / 0x01 | JPN,日本;源码缺省值 |
2 / 0x02 | USA,美国;文档标注未使用 |
4 / 0x04 | EXP,出口/海外亚洲市场 |
8 / 0x08 | CHS,中国 |
在已有 [keychip] 节加入一行即可,例如需要中国区域标记时:
[keychip]id=A69E-01A88888888region=8应使区域与实际游戏版本、系统和服务端要求一致;语言、内容版本和联网资格仍取决于对应程序及服务端。
源码将此字段描述为可能表示 keychip 可授权主板区域的位掩码。 我理解的是,当前 Hook 只是读取并返回数值,不能据此保证组合值具有“全区可用”的效果。 此解释仅为我理解的内容,不保证准确。
[pcbid]:主板 MAIN ID
serialNo=ACAE01A99999999 是游戏所见的主板编号。要求 15 个字符,错误长度会使初始化失败;按模板格式不带连字符。
此配置在非必要情况下建议不启用。
[system]:ALLS 系统配置
| 参数 | 模板值 | 含义和写法 |
|---|---|---|
enable | 1 | 启用系统设置写入;省略时源码缺省为0 |
freeplay | 0 | 1 免费游玩,0 正常信用点模式。模板提示 Free Play 会关闭投币功能并影响部分游玩模式 |
dipsw1 | 1 | 店内分发角色:1 Server,0 Client。同一分发组恰好一台为 Server |
这些设置作用于 AMFS 下已有的 sysfile.dat。首启尚未生成文件时可能不生效,需要正常生成有效文件后重启;源码要求其大小为 0x6000。启用后会在启动时重新应用 INI 设置。
dipsw1 的 Server 是店内游戏分发角色,外部认证/存档服务仍需另行提供。
[led15070]:机台灯板
enable=1 模拟 837-15070-04 灯板,控制机台及按钮灯的协议交互;0 关闭。maimai 默认使用 COM21 / COM23 两块灯板。
启用模拟不代表键盘 RGB 或外接灯带会自动亮。真实灯光输出需要合适的 IO DLL 或硬件适配。
如果你的手台带灯光,请咨询你的供应商。
[unity]:Unity / Mono 集成
| 参数 | 模板值 | 含义和写法 |
|---|---|---|
enable | 1 | 启用 Unity Hook |
targetAssembly | 空 | 要预先加载的托管 DLL 路径;普通启动留空,有兼容加载器时填写其入口 DLL |
例如 targetAssembly=\Mods\Loader.dll(仅做示例),该文件必须实际存在并兼容此加载方式。当前源码描述是先查找 Doorstop.Entrypoint:Start,再回退 *:Main。
注意:
targetAssembly如果没有确定的配置项,将此字段留空,不要填写右值。
[aimeio] / [mai2io]:外部 IO 驱动
两节均只有 path=:
| 配置 | 对应驱动 | 例子 |
|---|---|---|
[aimeio] path | 外部读卡器 IO | path=C:\Users\Rouming\Controllers\aimeio.dll |
[mai2io] path | maimai 按键、触摸及灯光 IO | path=C:\Users\Rouming\Controllers\mai2io.dll |
应使用匹配的 x64 DLL 和受支持的游戏 IO API。
路径选择顺序:
- 对应 INI 的非空
path。 SEGATOOLS_AIMEIO_PATH或SEGATOOLS_MAI2IO_PATH。SEGATOOLS_IO_ROOT下的aimeio.dll或mai2io.dll。- 内置实现。
因此 path= 不一定等于内置 IO,还要检查环境变量。根目录推导的文件不存在会回退内置 IO;显式填写错误路径则会尝试加载并可能失败。
这些 IO 路径支持 Windows 环境变量展开,例如 path=%SEGATOOLS_IO_ROOT%\mai2io.dll。不要据此推断所有 INI 路径字段都支持环境变量展开。
同样需要注意的是:这两条配置项在你没有对应内容时,建议置空。
[io4]:维护与投币键
| 参数 | 模板值 | 含义 |
|---|---|---|
test | 0x70 | F1,测试/维护菜单按钮 |
service | 0x71 | F2,服务按钮,具体行为由游戏界面决定 |
coin | 0x72 | F3,投币计数输入 |
还支持:
[io4]enable=1foreground=1此处代码块内容在官方模板上未列出,由我阅读源码发现支持的字段,不保证绝对可用性,但由我测试未得出负面影响。
enable 控制 IO4 板模拟;foreground=1 仅在识别到游戏窗口处于前台时轮询 IO4 输入,源码缺省也是 1。这些是加入已有节的字段。
游戏窗口未获得焦点时,优先检查焦点;foreground=0 才允许后台轮询。此项不等于对所有独立输入线程统一限制。
[button]:外围按钮与选择键
enable=1 启用内置 IO 的两组环键和选择键;0 跳过这部分轮询。测试、服务和投币在该判断前处理,不会被此开关一并关闭;触摸也是单独的通道。
有独立的游戏 DebugInput 或其他输入来源时,可按实际接法关闭,避免同一按键重复进入游戏;该开关本身不会开启游戏 DebugInput。
参数范围为 p1Btn1..p1Btn9、p2Btn1..p2Btn9。1–8 为环键,按模板顺时针顺序排列;9 为选择键。省略的键使用下表默认值:
| 序号 | 1P 按键 | 1P VK | 2P 数字小键盘 | 2P VK |
|---|---|---|---|---|
| 1 | W | 0x57 | 8 | 0x68 |
| 2 | E | 0x45 | 9 | 0x69 |
| 3 | D | 0x44 | 6 | 0x66 |
| 4 | C | 0x43 | 3 | 0x63 |
| 5 | X | 0x58 | 2 | 0x62 |
| 6 | Z | 0x5A | 1 | 0x61 |
| 7 | A | 0x41 | 4 | 0x64 |
| 8 | Q | 0x51 | 7 | 0x67 |
| 9,选择 | 主键盘 3 | 0x33 | * | 0x6A |
[touch]:触摸板模拟和触摸区域键位
| 参数 | 模板 / 缺省 | 含义 |
|---|---|---|
p1Enable | 模板1 | 启用 1P 触摸板串口模拟,默认 COM3 |
p2Enable | 模板1 | 启用 2P 触摸板串口模拟,默认 COM4 |
p1DebugInput | 模板中被注释,源码缺省0 | 1 开启 1P 键盘到触摸区域的映射 |
p2DebugInput | 模板中被注释,源码缺省0 | 1 开启 2P 键盘到触摸区域的映射 |
p1Touch<区域> | 示例被注释 | 指定 1P 某触摸区域对应的 VK |
p2Touch<区域> | 源码支持 | 指定 2P 某触摸区域对应的 VK |
区域名只能使用当前 sensor_map 中的 A1–A8、B1–B8、C1–C2、D1–D8、E1–E8,每位玩家共 34 个区域。
写法例如:
[touch]p1Enable=1p2Enable=1p1DebugInput=1p2DebugInput=0p1TouchA1=0x54p1TouchC1=0x47p1TouchC2=0x47此例启用两块触摸板模拟,但只把 1P 键盘映射为触摸;T 对应 A1,G 同时对应两个中心触点,其他未写的映射仍用源码默认值。
默认触摸键位如下,只有该侧 DebugInput 开启时才采集:
| 区域 | 1P 从 1 到 8 | 2P 从 1 到 8 |
|---|---|---|
| A1–A8 | T Y H N B V F R | I O L . , M J U |
| B1–B8 | T Y H N B V F R | I O L . , M J U |
| D1–D8 | T Y H N B V F R | I O L . , M J U |
| E1–E8 | T Y H N B V F R | I O L . , M J U |
| C1、C2 | 都是 G | 都是 K |
这意味着默认按 T 会同时触发 1P 的 A1/B1/D1/E1,而不是只触发 A1。要独立控制区域,须逐项覆盖相关绑定。
注意:此处的配置不建议更改模板内容,如果你采用的是手台方案,会通过 COM 口进行读取,而不应当更改此处内容。
segatools.ini 示例
这是一份直接运行在 Windows 系统上未连接手台的 segatools.ini 配置文件示例,如需使用,请修改 keychip 部分的参数:
[vfs]amfs=amfsoption=optionappdata=appdata
[aime]enable=0aimePath=DEVICE\aime.txt
[dns]enable=1default=at.sys-allnet.cn
[netenv]enable=1addrSuffix=11
[keychip]id=XXXX-XXXXXXXXXXXgameId=SDGBregion=8subnet=192.168.172.0
[system]enable=1
[unity]enable=1targetAssembly=
[io4]test=0x37service=0x38coin=0x39
[button]enable=1
[touch]p1Enable=1p2Enable=1mai.ini 配置详解
轮椅配置
在绝大多数情况下,mai2.ini 中配置的内容都是游戏本体自带的。我们现在在这里需要配置的是让游戏忽略错误并且以开发模式运行。同时这里还可以开启歌曲全解和自定义一 PC 的歌曲数量。
[AM]Target = 0DummyLED = 1DummyChime = 1DummyTouchPanel = 1IgnoreError = 1DummyCodeCamera=1DummyPhotoCamera=1QrCameraId=0
[Sound]Sound8Ch=0
[Debug]AllOpen=0AllMap=0AllCollection=0AllChara=0MaxTrack=3Debug=1
[DebugVersion]DebugMajorVersion=1DebugMinorVersion=45DebugReleaseVersion=00其中 Target 是游戏是否以生产环境运行的开关。它控制比如说开了之后游戏会把 ErrorLog 之类的文件夹放在 Y: 盘里,但是关了之后这些文件就会被放在当前目录下。
Dummy 开头的那些就是假如你没有对应的硬件就开启,会加载虚拟的。
AllOpen 是开启歌曲全解。
DebugVersion 可以设置游戏认为自己是的版本号。
以上是经过他人验证的可稳定使用的配置。
如果你不满足于这种轮椅般的稳定配置,那么接下来的内容————要开始加速了哦!
超速配置
阅前提示:此段内容除去与上方轮椅配置相同的部分,剩余部分为我阅读 MaiMai DX 源码后得出的可能能够使用的配置。
由于内容太过繁多,我无法一一进行测试,故我也不保证可用性,使用时请自行测试。
毕竟是“超速”配置,所以出点意外也是很正常的对吧(
只因为可能出错就不配置超速配置?这是弱者的思维!所以如果你使用某项配置发现能够正常使用,请联系我进行更新以上内容。
吐槽:艹拟冯,傻福日本人写的什么构式代码?建议所有人去品鉴一下源码(
配置要开始加速了哦
已推定配置
| 候选键 | 对应属性类型 | 按命名推断的用途 |
|---|---|---|
| DebugDisp | bool | 调试信息显示 |
| AutoPlay | bool | 自动演奏 |
| MovieCheck | bool,对应 IsMovieSupervision | 影片/BGA 检查模式 |
| FumenCheck | bool | 谱面检查模式 |
| EventOverride | bool | 覆盖事件判断;不能直接等同全部活动解锁 |
| ForceNowTime | long | 强制使用指定的当前时间;时间格式、单位和纪元未确认 |
| ForceRate | int | 强制 Rate 数值;与显示 Rating 的对应关系未确认 |
| ForceDxScoreT、ForceDxScoreY、ForceDxScoreU、ForceDxScoreI | int | 四项 DX 分数覆盖值,后缀 T/Y/U/I 的含义未确认 |
| ForceAchieveT、ForceAchieveY、ForceAchieveU、ForceAchieveI | int | 四项达成率覆盖值;与属性 ForceAchiveT/Y/U/I 对应关系按命名推定,不能直接按百分数填写 |
| MapMeter | int | 地图推进距离或进度覆盖值 |
| AllMapComplete | bool | 将地图标为全部完成的调试开关;是否落盘未确认 |
| TotalAwakeningOfChara | int | 角色总觉醒量覆盖值;单位、范围未确认 |
| GhostAchive | int | Ghost/影子对手达成率值;拼写就是 Achive |
| GhostClassValue | int | Ghost/影子对手等级或段位相关数值 |
| ForceNaviChara | int | 指定导航角色,可能使用内部角色 ID,编号范围未确认 |
| OutputProfiler | bool | 性能分析输出开关 |
| FumenEditor、FunenEditor | 可见 bool FunenEditor 属性 | 谱面编辑相关;两种字符串拼写均存在,实际读取、优先级和别名关系未确认 |
| NotesSpeed | int | 普通音符速度相关值,未必等于设置界面显示的速度 |
| TouchSpeed | int | TOUCH 音符速度相关值 |
| NotesDesign | int | 普通音符设计/样式选择值,枚举映射未确认 |
| HoldDesign | int | HOLD 音符设计/样式选择值 |
| SlideDesign | int | SLIDE 音符设计/样式选择值 |
其他推定配置节
| 推定配置节 | 候选键 | 属性类型 | 按命名推断的用途 |
|---|---|---|---|
| AM | DummyChimeId1、DummyChimeId2 | uint | 两个 Chime Dummy 身份 ID;与 DummyChime 关联,但编号是否对应 1P/2P、何时使用均未验证 |
| Network | UseNetwork | bool | 游戏网络功能开关;不等同 Segatools DNS 或 netenv 配置 |
| DebugVersion | DebugMajorVersion | int | 调试主版本号 |
| DebugVersion | DebugMinorVersion | int | 调试次版本号 |
| DebugVersion | DebugReleaseVersion | int | 调试发布版本号 |
其中已推定配置为确认源码名称存在且启用,不确认当前构建一定读取该键。
其他推定配置节为未确认具体用途的配置节,源码名称存在但不确认启用,不确认当前构建一定读取该键。
AquaMai.toml
如果你要连接官服,请在 MaiChartManager 中将移除加密设置为关。
其他设置请根据描述自行设置。
如果你使用的是 AquaMai-for-SDGB ,其中成绩上传功能为实验性内容,可能不稳定或存在未知问题,非必要不要打开开关。
此处成绩上传特指名称为“成绩上传”的配置项。
最后
本教程仅为学习交流之用,不保证其准确性和完整性。如有侵权请联系我删除。